]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-slow.c
CI: Add warning exemptions for Sun C (suncc-5.15) on Solaris 10
[tcpdump] / print-slow.c
index 27a814b97f3124a1dee6116cb39e02557349363a..649e2a0fcb79cda19ce8e9de6834761e85043c02 100644 (file)
 
 /* \summary: IEEE "slow protocols" (802.3ad/802.3ah) printer */
 
-#ifdef HAVE_CONFIG_H
 #include <config.h>
-#endif
 
 #include "netdissect-stdinc.h"
 
+#define ND_LONGJMP_FROM_TCHECK
 #include "netdissect.h"
 #include "extract.h"
 #include "addrtoname.h"
@@ -202,7 +201,7 @@ static const struct tok slow_tlv_values[] = {
 
 struct lacp_tlv_actor_partner_info_t {
     nd_uint16_t sys_pri;
-    nd_mac_addr sys;
+    nd_mac48 sys;
     nd_uint16_t key;
     nd_uint16_t port_pri;
     nd_uint16_t port;
@@ -229,7 +228,7 @@ struct lacp_tlv_collector_info_t {
 
 struct marker_tlv_marker_info_t {
     nd_uint16_t req_port;
-    nd_mac_addr req_sys;
+    nd_mac48 req_sys;
     nd_uint32_t req_trans_id;
     nd_byte     pad[2];
 };
@@ -251,7 +250,6 @@ slow_print(netdissect_options *ndo,
     ndo->ndo_protocol = "slow";
     if (len < 1)
         goto tooshort;
-    ND_TCHECK_1(pptr);
     subtype = GET_U_1(pptr);
 
     /*
@@ -261,7 +259,6 @@ slow_print(netdissect_options *ndo,
     case SLOW_PROTO_LACP:
         if (len < 2)
             goto tooshort;
-        ND_TCHECK_1(pptr + 1);
         if (GET_U_1(pptr + 1) != LACP_VERSION) {
             ND_PRINT("LACP version %u packet not supported",
                      GET_U_1(pptr + 1));
@@ -273,7 +270,6 @@ slow_print(netdissect_options *ndo,
     case SLOW_PROTO_MARKER:
         if (len < 2)
             goto tooshort;
-        ND_TCHECK_1(pptr + 1);
         if (GET_U_1(pptr + 1) != MARKER_VERSION) {
             ND_PRINT("MARKER version %u packet not supported",
                      GET_U_1(pptr + 1));
@@ -339,10 +335,6 @@ tooshort:
         ND_PRINT(" (packet is too short)");
     else
         ND_PRINT("\n\t\t packet is too short");
-    return;
-
-trunc:
-    nd_print_trunc(ndo);
 }
 
 static void
@@ -361,12 +353,11 @@ slow_marker_lacp_print(netdissect_options *ndo,
         const struct marker_tlv_marker_info_t *marker_tlv_marker_info;
     } tlv_ptr;
 
-    while(tlen>0) {
+    while(tlen != 0) {
         /* is the packet big enough to include the tlv header ? */
         if (tlen < sizeof(struct tlv_header_t))
             goto tooshort;
         /* did we capture enough for fully decoding the tlv header ? */
-        ND_TCHECK_LEN(tptr, sizeof(struct tlv_header_t));
         tlv_header = (const struct tlv_header_t *)tptr;
         tlv_type = GET_U_1(tlv_header->type);
         tlv_len = GET_U_1(tlv_header->length);
@@ -389,7 +380,7 @@ slow_marker_lacp_print(netdissect_options *ndo,
         /* length includes the type and length fields */
         if (tlv_len < sizeof(struct tlv_header_t)) {
             ND_PRINT("\n\t    ERROR: illegal length - should be >= %zu",
-                   sizeof(struct tlv_header_t));
+                     sizeof(struct tlv_header_t));
             return;
         }
 
@@ -410,7 +401,7 @@ slow_marker_lacp_print(netdissect_options *ndo,
             if (tlv_tlen !=
                 sizeof(struct lacp_tlv_actor_partner_info_t)) {
                 ND_PRINT("\n\t    ERROR: illegal length - should be %zu",
-                       sizeof(struct tlv_header_t) + sizeof(struct lacp_tlv_actor_partner_info_t));
+                         sizeof(struct tlv_header_t) + sizeof(struct lacp_tlv_actor_partner_info_t));
                 goto badlength;
             }
 
@@ -418,7 +409,7 @@ slow_marker_lacp_print(netdissect_options *ndo,
 
             ND_PRINT("\n\t  System %s, System Priority %u, Key %u"
                    ", Port %u, Port Priority %u\n\t  State Flags [%s]",
-                   GET_ETHERADDR_STRING(tlv_ptr.lacp_tlv_actor_partner_info->sys),
+                   GET_MAC48_STRING(tlv_ptr.lacp_tlv_actor_partner_info->sys),
                    GET_BE_U_2(tlv_ptr.lacp_tlv_actor_partner_info->sys_pri),
                    GET_BE_U_2(tlv_ptr.lacp_tlv_actor_partner_info->key),
                    GET_BE_U_2(tlv_ptr.lacp_tlv_actor_partner_info->port),
@@ -433,7 +424,7 @@ slow_marker_lacp_print(netdissect_options *ndo,
             if (tlv_tlen !=
                 sizeof(struct lacp_tlv_collector_info_t)) {
                 ND_PRINT("\n\t    ERROR: illegal length - should be %zu",
-                       sizeof(struct tlv_header_t) + sizeof(struct lacp_tlv_collector_info_t));
+                         sizeof(struct tlv_header_t) + sizeof(struct lacp_tlv_collector_info_t));
                 goto badlength;
             }
 
@@ -448,14 +439,14 @@ slow_marker_lacp_print(netdissect_options *ndo,
             if (tlv_tlen !=
                 sizeof(struct marker_tlv_marker_info_t)) {
                 ND_PRINT("\n\t    ERROR: illegal length - should be %zu",
-                       sizeof(struct tlv_header_t) + sizeof(struct marker_tlv_marker_info_t));
+                         sizeof(struct tlv_header_t) + sizeof(struct marker_tlv_marker_info_t));
                 goto badlength;
             }
 
             tlv_ptr.marker_tlv_marker_info = (const struct marker_tlv_marker_info_t *)tlv_tptr;
 
             ND_PRINT("\n\t  Request System %s, Request Port %u, Request Transaction ID 0x%08x",
-                   GET_ETHERADDR_STRING(tlv_ptr.marker_tlv_marker_info->req_sys),
+                   GET_MAC48_STRING(tlv_ptr.marker_tlv_marker_info->req_sys),
                    GET_BE_U_2(tlv_ptr.marker_tlv_marker_info->req_port),
                    GET_BE_U_4(tlv_ptr.marker_tlv_marker_info->req_trans_id));
 
@@ -481,10 +472,6 @@ slow_marker_lacp_print(netdissect_options *ndo,
 
 tooshort:
     ND_PRINT("\n\t\t packet is too short");
-    return;
-
-trunc:
-    nd_print_trunc(ndo);
 }
 
 static void
@@ -513,7 +500,7 @@ slow_oam_print(netdissect_options *ndo,
     } ptr;
 
     union {
-       const struct slow_oam_info_t *slow_oam_info;
+        const struct slow_oam_info_t *slow_oam_info;
         const struct slow_oam_link_event_t *slow_oam_link_event;
         const struct slow_oam_variablerequest_t *slow_oam_variablerequest;
         const struct slow_oam_variableresponse_t *slow_oam_variableresponse;
@@ -536,7 +523,7 @@ slow_oam_print(netdissect_options *ndo,
 
     switch (code) {
     case SLOW_OAM_CODE_INFO:
-        while (tlen > 0) {
+        while (tlen != 0) {
             ptr.slow_oam_tlv_header = (const struct slow_oam_tlv_header_t *)tptr;
             if (tlen < sizeof(*ptr.slow_oam_tlv_header))
                 goto tooshort;
@@ -558,8 +545,8 @@ slow_oam_print(netdissect_options *ndo,
 
             /* length includes the type and length fields */
             if (length < sizeof(struct slow_oam_tlv_header_t)) {
-                ND_PRINT("\n\t    ERROR: illegal length - should be >= %u",
-                       (u_int)sizeof(struct slow_oam_tlv_header_t));
+                ND_PRINT("\n\t    ERROR: illegal length - should be >= %zu",
+                         sizeof(struct slow_oam_tlv_header_t));
                 return;
             }
 
@@ -628,17 +615,15 @@ slow_oam_print(netdissect_options *ndo,
         /* Sequence number */
         if (tlen < 2)
             goto tooshort;
-        ND_TCHECK_2(tptr);
         ND_PRINT("\n\t  Sequence Number %u", GET_BE_U_2(tptr));
         tlen -= 2;
         tptr += 2;
 
         /* TLVs */
-        while (tlen > 0) {
+        while (tlen != 0) {
             ptr.slow_oam_tlv_header = (const struct slow_oam_tlv_header_t *)tptr;
             if (tlen < sizeof(*ptr.slow_oam_tlv_header))
                 goto tooshort;
-            ND_TCHECK_SIZE(ptr.slow_oam_tlv_header);
             type = GET_U_1(ptr.slow_oam_tlv_header->type);
             length = GET_U_1(ptr.slow_oam_tlv_header->length);
             ND_PRINT("\n\t  %s Link Event Type (%u), length %u",
@@ -657,8 +642,8 @@ slow_oam_print(netdissect_options *ndo,
 
             /* length includes the type and length fields */
             if (length < sizeof(struct slow_oam_tlv_header_t)) {
-                ND_PRINT("\n\t    ERROR: illegal length - should be >= %u",
-                       (u_int)sizeof(struct slow_oam_tlv_header_t));
+                ND_PRINT("\n\t    ERROR: illegal length - should be >= %zu",
+                         sizeof(struct slow_oam_tlv_header_t));
                 return;
             }
 
@@ -677,7 +662,7 @@ slow_oam_print(netdissect_options *ndo,
                 if (GET_U_1(tlv.slow_oam_link_event->event_length) !=
                     sizeof(struct slow_oam_link_event_t)) {
                     ND_PRINT("\n\t    ERROR: illegal length - should be %zu",
-                           sizeof(struct slow_oam_link_event_t));
+                             sizeof(struct slow_oam_link_event_t));
                     hexdump = TRUE;
                     goto badlength_event_notif;
                 }
@@ -720,7 +705,6 @@ slow_oam_print(netdissect_options *ndo,
         tlv.slow_oam_loopbackctrl = (const struct slow_oam_loopbackctrl_t *)tptr;
         if (tlen < sizeof(*tlv.slow_oam_loopbackctrl))
             goto tooshort;
-        ND_TCHECK_SIZE(tlv.slow_oam_loopbackctrl);
         command = GET_U_1(tlv.slow_oam_loopbackctrl->command);
         ND_PRINT("\n\t  Command %s (%u)",
                tok2str(slow_oam_loopbackctrl_cmd_values,
@@ -748,8 +732,4 @@ slow_oam_print(netdissect_options *ndo,
 
 tooshort:
     ND_PRINT("\n\t\t packet is too short");
-    return;
-
-trunc:
-    nd_print_trunc(ndo);
 }