]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-pim.c
regenerated
[tcpdump] / print-pim.c
index ec5d24e540daca312eefafca29e040708dafc137..ea875b6afec14487d5d1c7f9709d82d68646d387 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-pim.c,v 1.16 2000-01-19 04:57:12 itojun Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-pim.c,v 1.18 2000-02-16 21:49:23 fenner Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -35,12 +35,6 @@ static const char rcsid[] =
 #include <netinet/in.h>
 #include <netinet/in_systm.h>
 #include <netinet/ip.h>
-/*
-#include <netinet/ip_var.h>
-#include <netinet/udp.h>
-#include <netinet/udp_var.h>
-#include <netinet/tcp.h>
-*/
 
 /*
  * XXX: We consider a case where IPv6 is not ready yet for portability,
@@ -49,14 +43,14 @@ static const char rcsid[] =
 
 struct pim {
        u_int8_t pim_typever;
-                       /* upper 4bit: the PIM message type, currently they are:
+                       /* upper 4bit: PIM version number; 2 for PIMv2 */
+                       /* lower 4bit: the PIM message type, currently they are:
                         * Hello, Register, Register-Stop, Join/Prune,
                         * Bootstrap, Assert, Graft (PIM-DM only),
                         * Graft-Ack (PIM-DM only), C-RP-Adv
                         */
-                       /* lower 4bit: PIM version number; 2 for PIMv2 */
-#define PIM_TYPE(x)    (((x) & 0xf0) >> 4)
-#define PIM_VER(x)     ((x) & 0x0f)
+#define PIM_VER(x)     (((x) & 0xf0) >> 4)
+#define PIM_TYPE(x)    ((x) & 0x0f)
        u_char  pim_rsv;        /* Reserved */
        u_short pim_cksum;      /* IP style check sum */
 };
@@ -366,11 +360,11 @@ pim_print(register const u_char *bp, register u_int len)
 
        switch(PIM_VER(pim->pim_typever)) {
         case 2:                /* avoid hardcoding? */
-               (void)printf("v2");
+               (void)printf("pim v2");
                pimv2_print(bp, len);
                break;
         default:
-               (void)printf("v%d", PIM_VER(pim->pim_typever));
+               (void)printf("pim v%d", PIM_VER(pim->pim_typever));
                break;
        }
        return;
@@ -563,6 +557,8 @@ pimv2_print(register const u_char *bp, register u_int len)
        ep = (const u_char *)snapend;
        if (bp >= ep)
                return;
+       if (ep > bp + len)
+               ep = bp + len;
        TCHECK(pim->pim_rsv);
        pimv2_addr_len = pim->pim_rsv;
        if (pimv2_addr_len != 0)