- tlen=EXTRACT_16BITS(lwapp_trans_header->length);
-
- printf("LWAPPv%u, %s frame, Radio-id %u, Flags [%s], Frag-id %u, length %u",
- LWAPP_EXTRACT_VERSION(lwapp_trans_header->version),
- LWAPP_EXTRACT_CONTROL_BIT(lwapp_trans_header->version) ? "Control" : "Data",
- LWAPP_EXTRACT_RID(lwapp_trans_header->version),
- bittok2str(lwapp_header_bits_values,"none",(lwapp_trans_header->version)&0x07),
- lwapp_trans_header->frag_id,
+ tlen=GET_BE_U_2(lwapp_trans_header->length);
+ if (tlen < sizeof(struct lwapp_transport_header)) {
+ ND_PRINT("LWAPPv%u, %s frame, Radio-id %u, Flags [%s], length %u < transport header length",
+ LWAPP_EXTRACT_VERSION(version),
+ LWAPP_EXTRACT_CONTROL_BIT(version) ? "Control" : "Data",
+ LWAPP_EXTRACT_RID(version),
+ bittok2str(lwapp_header_bits_values,"none",version&0x07),
+ tlen);
+ return;
+ }
+
+ ND_PRINT("LWAPPv%u, %s frame, Radio-id %u, Flags [%s], Frag-id %u, length %u",
+ LWAPP_EXTRACT_VERSION(version),
+ LWAPP_EXTRACT_CONTROL_BIT(version) ? "Control" : "Data",
+ LWAPP_EXTRACT_RID(version),
+ bittok2str(lwapp_header_bits_values,"none",version&0x07),
+ GET_U_1(lwapp_trans_header->frag_id),