]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-pim.c
Check for parse failure in ACCESS replies.
[tcpdump] / print-pim.c
index 78f525a6210cf060df7a73d0d88a6a183bb1a7af..6c31838acd33f78e68056e4db0f528f3122a8746 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-pim.c,v 1.24 2001-01-28 08:27:28 itojun Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-pim.c,v 1.28 2001-06-15 22:17:34 fenner Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -96,10 +96,16 @@ pimv1_join_prune_print(register const u_char *bp, register u_int len)
        }
 
        TCHECK2(bp[0], 4);
-       (void)printf("\n Upstream Nbr: %s", ipaddr_string(bp));
+       if (vflag > 1)
+               (void)printf("\n");
+       (void)printf(" Upstream Nbr: %s", ipaddr_string(bp));
        TCHECK2(bp[6], 2);
-       (void)printf("\n Hold time: ");
+       if (vflag > 1)
+               (void)printf("\n");
+       (void)printf(" Hold time: ");
        relts_print(EXTRACT_16BITS(&bp[6]));
+       if (vflag < 2)
+               return;
        bp += 8;
        len -= 8;
 
@@ -410,11 +416,6 @@ static int pimv2_addr_len;
 enum pimv2_addrtype {
        pimv2_unicast, pimv2_group, pimv2_source
 };
-#if 0
-static char *addrtypestr[] = {
-       "unicast", "group", "source"
-};
-#endif
 
 /*  0                   1                   2                   3
  *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
@@ -577,20 +578,13 @@ pimv2_print(register const u_char *bp, register u_int len)
                                (void)printf(")");
                                break;
 
-                       /* XXX
-                        * draft-ietf-idmr-pimv2-dr-priority-00.txt
-                        * says that DR-Priority is option 19.
-                        * draft-ietf-pim-v2-sm-00.txt says it's 18.
-                        */
-                       case 18:        /* DR-Priority */
-                               (void)printf(" (DR-Priority: %d)", EXTRACT_32BITS(&bp[4]));
-                               break;
-
-                       case 19:        /* Bidir-Capable */
-                               if (olen == 4)
-                                       (void)printf(" (OLD-DR-Priority: %d)", EXTRACT_32BITS(&bp[4]));
-                               else
-                                       (void)printf(" (bidir-capable)");
+                       case 19:        /* DR-Priority */
+                               (void)printf(" (DR-Priority: ");
+                               if (olen != 4) {
+                                       (void)printf("!olen=%d!)", olen);
+                               } else {
+                                       (void)printf("%d)", EXTRACT_32BITS(&bp[4]));
+                               }
                                break;
 
                        case 20:
@@ -598,13 +592,21 @@ pimv2_print(register const u_char *bp, register u_int len)
                                break;
 
                        case 21:
-                               (void)printf(" (State Refresh Capable");
-                               if (EXTRACT_32BITS(&bp[4]) != 1) {
-                                       (void)printf(" ?0x%x?", EXTRACT_32BITS(&bp[4]));
+                               (void)printf(" (State Refresh Capable; v%d", bp[4]);
+                               if (bp[5] != 0) {
+                                       (void)printf(" interval ");
+                                       relts_print(bp[5]);
+                               }
+                               if (EXTRACT_16BITS(&bp[6]) != 0) {
+                                       (void)printf(" ?0x%04x?", EXTRACT_16BITS(&bp[6]));
                                }
                                (void)printf(")");
                                break;
 
+                       case 22:        /* Bidir-Capable */
+                               (void)printf(" (bidir-capable)");
+                               break;
+
                        default:
                                if (vflag)
                                        (void)printf(" [Hello option %d]", otype);