aboutsummaryrefslogtreecommitdiff
path: root/contrib/tcpdump/print-igmp.c
diff options
context:
space:
mode:
authorBill Fenner <fenner@FreeBSD.org>2002-06-21 00:43:23 +0000
committerBill Fenner <fenner@FreeBSD.org>2002-06-21 00:43:23 +0000
commita90e161be323456b08b7fe13acb201536809510f (patch)
treebfb72dba6e8e623feaf334f1b808f93f5e292c68 /contrib/tcpdump/print-igmp.c
parent39eaefddae4491b77468e6ff0cd5f9a6b9acbf3d (diff)
downloadsrc-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.c40
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]));