X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/b751376719cfe1924aa07ab8fd364ec1a55c04b3..refs/heads/master:/print-lmp.c diff --git a/print-lmp.c b/print-lmp.c index 525b12c6..bfb0798e 100644 --- a/print-lmp.c +++ b/print-lmp.c @@ -20,12 +20,11 @@ /* 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 -#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); }