/* 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"
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);
"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",
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;
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;
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;
tptr+=lmp_obj_len;
tlen-=lmp_obj_len;
}
- return;
-trunc:
- nd_print_trunc(ndo);
}