summaryrefslogtreecommitdiffstats
path: root/contrib/tcpdump/print-igmp.c
diff options
context:
space:
mode:
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 c79244e..07ace7d 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]));
OpenPOWER on IntegriCloud