]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-lmp.c
CI: Add warning exemptions for Sun C (suncc-5.14) on Solaris 10
[tcpdump] / print-lmp.c
index 525b12c6b42acbe87ce9085889ebad47fcac892a..bfb0798e578797e8ea14435a304478b17d364764 100644 (file)
 /* specification: RFC 4204 */
 /* OIF UNI 1.0: https://web.archive.org/web/20160401194747/http://www.oiforum.com/public/documents/OIF-UNI-01.0.pdf */
 
-#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"
@@ -362,11 +361,6 @@ lmp_print_data_link_subobjs(netdissect_options *ndo, const u_char *obj_tptr,
     int hexdump = FALSE;
     int subobj_type, subobj_len;
 
-    union { /* int to float conversion buffer */
-        float f;
-        uint32_t i;
-    } bw;
-
     while (total_subobj_len > 0 && hexdump == FALSE ) {
        subobj_type = GET_U_1(obj_tptr + offset);
        subobj_len  = GET_U_1(obj_tptr + offset + 1);
@@ -400,12 +394,10 @@ lmp_print_data_link_subobjs(netdissect_options *ndo, const u_char *obj_tptr,
                        "Unknown",
                        GET_U_1(obj_tptr + offset + 3)),
                GET_U_1(obj_tptr + offset + 3));
-           bw.i = GET_BE_U_4(obj_tptr + offset + 4);
            ND_PRINT("\n\t      Min Reservable Bandwidth: %.3f Mbps",
-                bw.f*8/1000000);
-           bw.i = GET_BE_U_4(obj_tptr + offset + 8);
+               GET_BE_F_4(obj_tptr + offset + 4)*8/1000000);
            ND_PRINT("\n\t      Max Reservable Bandwidth: %.3f Mbps",
-                bw.f*8/1000000);
+               GET_BE_F_4(obj_tptr + offset + 8)*8/1000000);
            break;
        case WAVELENGTH_SUBOBJ:
            ND_PRINT("\n\t      Wavelength: %u",
@@ -427,18 +419,12 @@ lmp_print(netdissect_options *ndo,
           const u_char *pptr, u_int length)
 {
     const struct lmp_common_header *lmp_com_header;
-    const struct lmp_object_header *lmp_obj_header;
     const u_char *tptr,*obj_tptr;
     u_int version_res, tlen, lmp_obj_len, lmp_obj_ctype, obj_tlen;
     int hexdump;
     u_int offset;
     u_int link_type;
 
-    union { /* int to float conversion buffer */
-        float f;
-        uint32_t i;
-    } bw;
-
     ndo->ndo_protocol = "lmp";
     tptr=pptr;
     lmp_com_header = (const struct lmp_common_header *)pptr;
@@ -485,11 +471,9 @@ lmp_print(netdissect_options *ndo,
     tptr+=sizeof(struct lmp_common_header);
     tlen-=sizeof(struct lmp_common_header);
 
-    while(tlen>0) {
-        /* did we capture enough for fully decoding the object header ? */
-        ND_TCHECK_LEN(tptr, sizeof(struct lmp_object_header));
-
-        lmp_obj_header = (const struct lmp_object_header *)tptr;
+    while(tlen != 0) {
+        const struct lmp_object_header *lmp_obj_header =
+            (const struct lmp_object_header *)tptr;
         lmp_obj_len=GET_BE_U_2(lmp_obj_header->length);
         lmp_obj_ctype=GET_U_1(lmp_obj_header->ctype)&0x7f;
 
@@ -805,8 +789,8 @@ lmp_print(netdissect_options *ndo,
                        GET_BE_U_2(obj_tptr + 10),
                        GET_BE_U_2(obj_tptr + 10),
                        GET_BE_U_2(obj_tptr + 10)&8000 ? " (Payload test messages capable)" : "");
-                bw.i = GET_BE_U_4(obj_tptr + 12);
-               ND_PRINT("\n\t    Transmission Rate: %.3f Mbps",bw.f*8/1000000);
+               ND_PRINT("\n\t    Transmission Rate: %.3f Mbps",
+                       GET_BE_F_4(obj_tptr + 12)*8/1000000);
                ND_PRINT("\n\t    Wavelength: %u",
                        GET_BE_U_4(obj_tptr + 16));
                break;
@@ -1136,7 +1120,4 @@ lmp_print(netdissect_options *ndo,
         tptr+=lmp_obj_len;
         tlen-=lmp_obj_len;
     }
-    return;
-trunc:
-    nd_print_trunc(ndo);
 }