]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-vtp.c
Avoiding conditional directives that break statements
[tcpdump] / print-vtp.c
index 2d331c0af95e1b2a40f87077ae7e1d8c1e702fab..854bc49d3d297ed78b4371f658750fcc4ed105eb 100644 (file)
  * Original code ode by Carles Kishimoto <[email protected]>
  */
 
-#define NETDISSECT_REWORKED
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
-#include <tcpdump-stdinc.h>
+#include <netdissect-stdinc.h>
 
-#include "interface.h"
+#include "netdissect.h"
 #include "addrtoname.h"
 #include "extract.h"
 
 #define VTP_JOIN_MESSAGE               0x04
 
 struct vtp_vlan_ {
-    u_int8_t  len;
-    u_int8_t  status;
-    u_int8_t  type;
-    u_int8_t  name_len;
-    u_int16_t vlanid;
-    u_int16_t mtu;
-    u_int32_t index;
+    uint8_t  len;
+    uint8_t  status;
+    uint8_t  type;
+    uint8_t  name_len;
+    uint16_t vlanid;
+    uint16_t mtu;
+    uint32_t index;
 };
 
 static const struct tok vtp_message_type_values[] = {
@@ -130,14 +129,13 @@ vtp_print (netdissect_options *ndo,
 
     tptr = pptr;
 
-    if (!ND_TTEST2(*tptr, VTP_HEADER_LEN))
-       goto trunc;
+    ND_TCHECK2(*tptr, VTP_HEADER_LEN);
 
     type = *(tptr+1);
     ND_PRINT((ndo, "VTPv%u, Message %s (0x%02x), length %u",
           *tptr,
           tok2str(vtp_message_type_values,"Unknown message type", type),
-          *(tptr+1),
+          type,
           length));
 
     /* In non-verbose mode, just print version and message type */
@@ -146,9 +144,10 @@ vtp_print (netdissect_options *ndo,
     }
 
     /* verbose mode print all fields */
-    ND_PRINT((ndo, "\n\tDomain name: %s, %s: %u",
-          (tptr+4),
-          tok2str(vtp_header_values,"Unknown",*(tptr+1)),
+    ND_PRINT((ndo, "\n\tDomain name: "));
+    fn_printzp(ndo, tptr + 4, *(tptr + 3), NULL);
+    ND_PRINT((ndo, ", %s: %u",
+          tok2str(vtp_header_values, "Unknown", type),
           *(tptr+2)));
 
     tptr += VTP_HEADER_LEN;
@@ -164,7 +163,7 @@ vtp_print (netdissect_options *ndo,
         *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
         *  |     Version   |     Code      |    Followers  |    MmgtD Len  |
         *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-        *  |                    Management Domain Name                     |
+        *  |       Management Domain Name  (zero-padded to 32 bytes)       |
         *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
         *  |                    Configuration revision number              |
         *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -177,15 +176,18 @@ vtp_print (netdissect_options *ndo,
         *
         */
 
+       ND_TCHECK2(*tptr, 8);
        ND_PRINT((ndo, "\n\t  Config Rev %x, Updater %s",
               EXTRACT_32BITS(tptr),
               ipaddr_string(ndo, tptr+4)));
        tptr += 8;
+       ND_TCHECK2(*tptr, VTP_UPDATE_TIMESTAMP_LEN);
        ND_PRINT((ndo, ", Timestamp 0x%08x 0x%08x 0x%08x",
               EXTRACT_32BITS(tptr),
               EXTRACT_32BITS(tptr + 4),
               EXTRACT_32BITS(tptr + 8)));
        tptr += VTP_UPDATE_TIMESTAMP_LEN;
+       ND_TCHECK2(*tptr, VTP_MD5_DIGEST_LEN);
        ND_PRINT((ndo, ", MD5 digest: %08x%08x%08x%08x",
               EXTRACT_32BITS(tptr),
               EXTRACT_32BITS(tptr + 4),
@@ -203,7 +205,7 @@ vtp_print (netdissect_options *ndo,
         *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
         *  |     Version   |     Code      |   Seq number  |    MmgtD Len  |
         *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-        *  |                    Management Domain Name                     |
+        *  |       Management Domain Name  (zero-padded to 32 bytes)       |
         *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
         *  |                    Configuration revision number              |
         *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -240,17 +242,17 @@ vtp_print (netdissect_options *ndo,
            if (len == 0)
                break;
 
-           if (!ND_TTEST2(*tptr, len))
-               goto trunc;
+           ND_TCHECK2(*tptr, len);
 
-           vtp_vlan = (struct vtp_vlan_*)tptr;
-           ND_PRINT((ndo, "\n\tVLAN info status %s, type %s, VLAN-id %u, MTU %u, SAID 0x%08x, Name %s",
+           vtp_vlan = (const struct vtp_vlan_*)tptr;
+           ND_TCHECK(*vtp_vlan);
+           ND_PRINT((ndo, "\n\tVLAN info status %s, type %s, VLAN-id %u, MTU %u, SAID 0x%08x, Name ",
                   tok2str(vtp_vlan_status,"Unknown",vtp_vlan->status),
                   tok2str(vtp_vlan_type_values,"Unknown",vtp_vlan->type),
                   EXTRACT_16BITS(&vtp_vlan->vlanid),
                   EXTRACT_16BITS(&vtp_vlan->mtu),
-                  EXTRACT_32BITS(&vtp_vlan->index),
-                  (tptr + VTP_VLAN_INFO_OFFSET)));
+                  EXTRACT_32BITS(&vtp_vlan->index)));
+           fn_printzp(ndo, tptr + VTP_VLAN_INFO_OFFSET, vtp_vlan->name_len, NULL);
 
             /*
              * Vlan names are aligned to 32-bit boundaries.
@@ -280,8 +282,7 @@ vtp_print (netdissect_options *ndo,
                     return;
                 }
 
-                if (!ND_TTEST2(*tptr, tlv_len*2 +2))
-                    goto trunc;
+                ND_TCHECK2(*tptr, tlv_len * 2 +2);
 
                 tlv_value = EXTRACT_16BITS(tptr+2);
 
@@ -343,13 +344,14 @@ vtp_print (netdissect_options *ndo,
         *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
         *  |     Version   |     Code      |   Reserved    |    MmgtD Len  |
         *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-        *  |                    Management Domain Name                     |
+        *  |       Management Domain Name  (zero-padded to 32 bytes)       |
         *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
         *  |                          Start value                          |
         *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
         *
         */
 
+       ND_TCHECK2(*tptr, 4);
        ND_PRINT((ndo, "\n\tStart value: %u", EXTRACT_32BITS(tptr)));
        break;