diff options
author | Bill Fenner <fenner@FreeBSD.org> | 2002-06-21 00:43:23 +0000 |
---|---|---|
committer | Bill Fenner <fenner@FreeBSD.org> | 2002-06-21 00:43:23 +0000 |
commit | a90e161be323456b08b7fe13acb201536809510f (patch) | |
tree | bfb72dba6e8e623feaf334f1b808f93f5e292c68 /contrib/tcpdump/print-igmp.c | |
parent | 39eaefddae4491b77468e6ff0cd5f9a6b9acbf3d (diff) | |
download | src-a90e161be323456b08b7fe13acb201536809510f.tar.gz src-a90e161be323456b08b7fe13acb201536809510f.zip |
Import tcpdump 3.7.1, from
Notes
Notes:
svn path=/vendor/tcpdump/dist/; revision=98524
Diffstat (limited to 'contrib/tcpdump/print-igmp.c')
-rw-r--r-- | contrib/tcpdump/print-igmp.c | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/contrib/tcpdump/print-igmp.c b/contrib/tcpdump/print-igmp.c index c79244e2fecb..07ace7defbf5 100644 --- a/contrib/tcpdump/print-igmp.c +++ b/contrib/tcpdump/print-igmp.c @@ -21,7 +21,7 @@ #ifndef lint static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/print-igmp.c,v 1.3 2001/01/09 08:01:18 fenner Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/print-igmp.c,v 1.5 2001/09/17 21:58:02 fenner Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -114,7 +114,7 @@ static struct tok igmpv3report2str[] = { static void print_mtrace(register const u_char *bp, register u_int len) { - register struct tr_query *tr = (struct tr_query *)(bp + 8); + register const struct tr_query *tr = (const struct tr_query *)(bp + 8); printf("mtrace %lu: %s to %s reply-to %s", (u_long)TR_GETQID(ntohl(tr->tr_rttlqid)), @@ -127,7 +127,7 @@ print_mtrace(register const u_char *bp, register u_int len) static void print_mresp(register const u_char *bp, register u_int len) { - register struct tr_query *tr = (struct tr_query *)(bp + 8); + register const struct tr_query *tr = (const struct tr_query *)(bp + 8); printf("mresp %lu: %s to %s reply-to %s", (u_long)TR_GETQID(ntohl(tr->tr_rttlqid)), @@ -138,11 +138,10 @@ print_mresp(register const u_char *bp, register u_int len) } static void -print_igmpv3_report(register const u_char *bp, register u_int len, - register const u_char *bp2) +print_igmpv3_report(register const u_char *bp, register u_int len) { - int group, nsrcs, ngroups; - register int i, j; + u_int group, nsrcs, ngroups; + register u_int i, j; /* Minimum len is 16, and should be a multiple of 4 */ if (len < 16 || len & 0x03) { @@ -193,11 +192,12 @@ trunc: } static void -print_igmpv3_query(register const u_char *bp, register u_int len, - register const u_char *bp2) +print_igmpv3_query(register const u_char *bp, register u_int len) { - int nsrcs; - register int i; + u_int mrc; + int mrt; + u_int nsrcs; + register u_int i; (void)printf(" v3"); /* Minimum len is 12, and should be a multiple of 4 */ @@ -205,6 +205,17 @@ print_igmpv3_query(register const u_char *bp, register u_int len, (void)printf(" [invalid len %d]", len); return; } + mrc = bp[1]; + if (mrc < 128) { + mrt = mrc; + } else { + mrt = ((mrc & 0x0f) | 0x10) << (((mrc & 0x70) >> 4) + 3); + } + if (mrc != 100) { + (void)printf(" [max resp time "); + relts_print(mrt); + (void)printf("]"); + } TCHECK2(bp[4], 4); if (EXTRACT_32BITS(&bp[4]) == 0) return; @@ -232,8 +243,7 @@ trunc: } void -igmp_print(register const u_char *bp, register u_int len, - register const u_char *bp2) +igmp_print(register const u_char *bp, register u_int len) { if (qflag) { (void)printf("igmp"); @@ -245,7 +255,7 @@ igmp_print(register const u_char *bp, register u_int len, case 0x11: (void)printf("igmp query"); if (len >= 12) - print_igmpv3_query(bp, len, bp2); + print_igmpv3_query(bp, len); else { if (bp[1]) { (void)printf(" v2"); @@ -269,7 +279,7 @@ igmp_print(register const u_char *bp, register u_int len, break; case 0x22: (void)printf("igmp v3 report"); - print_igmpv3_report(bp, len, bp2); + print_igmpv3_report(bp, len); break; case 0x17: (void)printf("igmp leave %s", ipaddr_string(&bp[4])); |