void loopback_print(netdissect_options *ndo, const u_char *cp, const u_int len) { const u_char *ep = cp + len; uint16_t skipCount; ND_PRINT("Loopback"); if (len < 2) goto invalid; /* skipCount */ ND_TCHECK_2(cp); skipCount = EXTRACT_LE_U_2(cp); cp += 2; ND_PRINT(", skipCount %u", skipCount); if (skipCount % 8) ND_PRINT(" (bogus)"); if (skipCount > len - 2) goto invalid; loopback_message_print(ndo, cp + skipCount, len - 2 - skipCount); return; invalid: ND_PRINT("%s", istr); ND_TCHECK_LEN(cp, ep - cp); return; trunc: ND_PRINT("%s", tstr); }
void loopback_print(netdissect_options *ndo, const u_char *cp, const u_int len) { const u_char *ep = cp + len; uint16_t skipCount; ND_PRINT((ndo, "Loopback")); if (len < 2) goto corrupt; /* skipCount */ ND_TCHECK2(*cp, 2); skipCount = EXTRACT_LE_16BITS(cp); cp += 2; ND_PRINT((ndo, ", skipCount %u", skipCount)); if (skipCount % 8) ND_PRINT((ndo, " (bogus)")); if (skipCount > len - 2) goto corrupt; loopback_message_print(ndo, cp + skipCount, len - 2 - skipCount); return; corrupt: ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp, ep - cp); return; trunc: ND_PRINT((ndo, "%s", tstr)); }