summaryrefslogtreecommitdiffstats
path: root/contrib/tcpdump/print-pim.c
diff options
context:
space:
mode:
authormlaier <mlaier@FreeBSD.org>2007-10-16 02:20:42 +0000
committermlaier <mlaier@FreeBSD.org>2007-10-16 02:20:42 +0000
commit3b74598d7ea581deadb14ec8ba1c77c14295a7c8 (patch)
tree01f74f6819cfb28636e2f6d04efefacdfecafc5c /contrib/tcpdump/print-pim.c
parent68a3d30d4eef678528761ead6b0743885324cdd0 (diff)
downloadFreeBSD-src-3b74598d7ea581deadb14ec8ba1c77c14295a7c8.zip
FreeBSD-src-3b74598d7ea581deadb14ec8ba1c77c14295a7c8.tar.gz
Import of tcpdump v3.9.8
Diffstat (limited to 'contrib/tcpdump/print-pim.c')
-rw-r--r--contrib/tcpdump/print-pim.c57
1 files changed, 40 insertions, 17 deletions
diff --git a/contrib/tcpdump/print-pim.c b/contrib/tcpdump/print-pim.c
index 8af2160..39c4e4d 100644
--- a/contrib/tcpdump/print-pim.c
+++ b/contrib/tcpdump/print-pim.c
@@ -21,7 +21,7 @@
#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/tcpdump/print-pim.c,v 1.45.2.3 2005/07/11 20:24:34 hannes Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-pim.c,v 1.45.2.4 2006/02/13 01:32:34 hannes Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
@@ -79,6 +79,15 @@ static struct tok pimv2_hello_option_values[] = {
{ 0, NULL}
};
+#define PIMV2_REGISTER_FLAG_LEN 4
+#define PIMV2_REGISTER_FLAG_BORDER 0x80000000
+#define PIMV2_REGISTER_FLAG_NULL 0x40000000
+
+static struct tok pimv2_register_flag_values[] = {
+ { PIMV2_REGISTER_FLAG_BORDER, "Border" },
+ { PIMV2_REGISTER_FLAG_NULL, "Null" },
+ { 0, NULL}
+};
/*
* XXX: We consider a case where IPv6 is not ready yet for portability,
@@ -419,13 +428,13 @@ pim_print(register const u_char *bp, register u_int len)
switch (PIM_VER(pim->pim_typever)) {
case 2:
if (!vflag) {
- printf("PIMv%u, %s, length: %u",
+ printf("PIMv%u, %s, length %u",
PIM_VER(pim->pim_typever),
tok2str(pimv2_type_values,"Unknown Type",PIM_TYPE(pim->pim_typever)),
len);
return;
} else {
- printf("PIMv%u, length: %u\n\t%s",
+ printf("PIMv%u, length %u\n\t%s",
PIM_VER(pim->pim_typever),
len,
tok2str(pimv2_type_values,"Unknown Type",PIM_TYPE(pim->pim_typever)));
@@ -433,7 +442,7 @@ pim_print(register const u_char *bp, register u_int len)
}
break;
default:
- printf("PIMv%u, length: %u",
+ printf("PIMv%u, length %u",
PIM_VER(pim->pim_typever),
len);
break;
@@ -625,6 +634,15 @@ pimv2_print(register const u_char *bp, register u_int len)
if (pimv2_addr_len != 0)
(void)printf(", RFC2117-encoding");
+ printf(", cksum 0x%04x ", EXTRACT_16BITS(&pim->pim_cksum));
+ if (EXTRACT_16BITS(&pim->pim_cksum) == 0) {
+ printf("(unverified)");
+ } else {
+ printf("(%scorrect)",
+ TTEST2(bp[0], len) &&
+ in_cksum((const u_short*)bp, len, 0) ? "in" : "" );
+ }
+
switch (PIM_TYPE(pim->pim_typever)) {
case PIMV2_TYPE_HELLO:
{
@@ -636,7 +654,7 @@ pimv2_print(register const u_char *bp, register u_int len)
olen = EXTRACT_16BITS(&bp[2]);
TCHECK2(bp[0], 4 + olen);
- printf("\n\t %s Option (%u), length: %u, Value: ",
+ printf("\n\t %s Option (%u), length %u, Value: ",
tok2str( pimv2_hello_option_values,"Unknown",otype),
otype,
olen);
@@ -729,30 +747,35 @@ pimv2_print(register const u_char *bp, register u_int len)
{
struct ip *ip;
- if (vflag && bp + 8 <= ep) {
- (void)printf(" %s%s", bp[4] & 0x80 ? "B" : "",
- bp[4] & 0x40 ? "N" : "");
- }
- bp += 8; len -= 8;
+ if (!TTEST2(*(bp+4), PIMV2_REGISTER_FLAG_LEN))
+ goto trunc;
+
+ printf(", Flags [ %s ]\n\t",
+ tok2str(pimv2_register_flag_values,
+ "none",
+ EXTRACT_32BITS(bp+4)));
+ bp += 8; len -= 8;
/* encapsulated multicast packet */
- if (bp >= ep)
- break;
ip = (struct ip *)bp;
switch (IP_V(ip)) {
+ case 0: /* Null header */
+ (void)printf("IP-Null-header %s > %s",
+ ipaddr_string(&ip->ip_src),
+ ipaddr_string(&ip->ip_dst));
+ break;
+
case 4: /* IPv4 */
- printf(" ");
ip_print(gndo, bp, len);
break;
#ifdef INET6
case 6: /* IPv6 */
- printf(" ");
ip6_print(bp, len);
break;
#endif
- default:
- (void)printf(" IP ver %d", IP_V(ip));
- break;
+ default:
+ (void)printf("IP ver %d", IP_V(ip));
+ break;
}
break;
}
OpenPOWER on IntegriCloud