From 281e9d71408deb6e8c5046c746c2e97002b0e7fe Mon Sep 17 00:00:00 2001 From: bms Date: Wed, 31 Mar 2004 09:17:26 +0000 Subject: Import tcpdump 3.8.3, from http://www.tcpdump.org/releases/tcpdump-3.8.3.tar.gz --- contrib/tcpdump/print-pim.c | 55 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 11 deletions(-) (limited to 'contrib/tcpdump/print-pim.c') diff --git a/contrib/tcpdump/print-pim.c b/contrib/tcpdump/print-pim.c index a8219dc..de3b4d5 100644 --- a/contrib/tcpdump/print-pim.c +++ b/contrib/tcpdump/print-pim.c @@ -20,19 +20,15 @@ */ #ifndef lint -static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/print-pim.c,v 1.29.4.1 2002/05/07 18:30:19 fenner Exp $ (LBL)"; +static const char rcsid[] _U_ = + "@(#) $Header: /tcpdump/master/tcpdump/print-pim.c,v 1.37.2.4 2004/03/24 02:52:37 guy Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H #include "config.h" #endif -#include -#include -#include - -#include +#include /* * XXX: We consider a case where IPv6 is not ready yet for portability, @@ -56,7 +52,6 @@ struct pim { #include #include -#include #include "interface.h" #include "addrtoname.h" @@ -118,6 +113,7 @@ pimv1_join_prune_print(register const u_char *bp, register u_int len) while (ngroups--) { TCHECK2(bp[0], 4); (void)printf("\n\tGroup: %s", ipaddr_string(bp)); + TCHECK2(bp[4], 4); if (EXTRACT_32BITS(&bp[4]) != 0xffffffff) (void)printf("/%s", ipaddr_string(&bp[4])); TCHECK2(bp[8], 4); @@ -127,7 +123,7 @@ pimv1_join_prune_print(register const u_char *bp, register u_int len) bp += 12; len -= 12; for (njp = 0; njp < (njoin + nprune); njp++) { - char *type; + const char *type; if (njp < njoin) type = "Join "; @@ -159,6 +155,7 @@ pimv1_print(register const u_char *bp, register u_int len) if (bp >= ep) return; + TCHECK(bp[1]); type = bp[1]; switch (type) { @@ -447,7 +444,7 @@ static int pimv2_addr_print(const u_char *bp, enum pimv2_addrtype at, int silent) { int af; - char *afstr; + const char *afstr; int len, hdrlen; TCHECK(bp[0]); @@ -584,9 +581,25 @@ pimv2_print(register const u_char *bp, register u_int len) (void)printf(")"); break; + case 2: /* LAN Prune Delay */ + (void)printf(" (LAN-Prune-Delay: "); + if (olen != 4) { + (void)printf("!olen=%d!)", olen); + } else { + char t_bit; + u_int16_t lan_delay, override_interval; + lan_delay = EXTRACT_16BITS(&bp[4]); + override_interval = EXTRACT_16BITS(&bp[6]); + t_bit = (lan_delay & 0x8000)? 1 : 0; + lan_delay &= ~0x8000; + (void)printf("T-bit=%d lan-delay=%dms override-interval=%dms)", + t_bit, lan_delay, override_interval); + } + break; + case 18: /* Old DR-Priority */ if (olen == 4) - (void)printf(" (OLD-DR-Priority: %d)", + (void)printf(" (OLD-DR-Priority: %d)", EXTRACT_32BITS(&bp[4])); else goto unknown; @@ -626,6 +639,26 @@ pimv2_print(register const u_char *bp, register u_int len) (void)printf(" (bidir-capable)"); break; + case 24: /* Address List */ + case 65001: /* Address List (old implementations) */ + (void)printf(" (%saddr-list", + otype == 65001 ? "old" : ""); + if (vflag > 1) { + const u_char *ptr = &bp[4]; + while (ptr < &bp[4 + olen]) { + int advance; + + printf(" "); + advance = pimv2_addr_print(ptr, pimv2_unicast, 0); + if (advance < 0) { + printf("..."); + break; + } + ptr += advance; + } + } + (void)printf(")"); + break; default: unknown: if (vflag) -- cgit v1.1