case 'p':
/* IP address pairs */
+ /* this option should be N x 8 bytes long */
+ if (len < 8 || len % 8 != 0) {
+ ND_PRINT("%s[length != N x 8 bytes]",
+ len == 0 ? " " : "");
+ bp += len;
+ len = 0;
+ break;
+ }
while (len >= 2*4) {
if (!first)
ND_PRINT(",");
{
/* this option should be 1 byte long */
if (len != 1) {
- ND_PRINT("[ERROR: length != 1 byte]");
+ ND_PRINT("[length != 1 byte]");
+ nd_print_invalid(ndo);
bp += len;
len = 0;
break;
case TAG_NETBIOS_NODE:
/* this option should be at least 1 byte long */
if (len < 1) {
- ND_PRINT("[ERROR: length < 1 byte]");
+ ND_PRINT("[length < 1 byte]");
+ nd_print_invalid(ndo);
break;
}
tag = GET_U_1(bp);
case TAG_OPT_OVERLOAD:
/* this option should be at least 1 byte long */
if (len < 1) {
- ND_PRINT("[ERROR: length < 1 byte]");
+ ND_PRINT("[length < 1 byte]");
+ nd_print_invalid(ndo);
break;
}
tag = GET_U_1(bp);
case TAG_CLIENT_FQDN:
/* this option should be at least 3 bytes long */
if (len < 3) {
- ND_PRINT("[ERROR: length < 3 bytes]");
+ ND_PRINT("[length < 3 bytes]");
+ nd_print_invalid(ndo);
bp += len;
len = 0;
break;
}
if (GET_U_1(bp) & 0xf0) {
- ND_PRINT("[ERROR: MBZ nibble 0x%x != 0] ",
+ ND_PRINT("[MBZ nibble 0x%x != 0] ",
(GET_U_1(bp) & 0xf0) >> 4);
+ nd_print_invalid(ndo);
}
if (GET_U_1(bp) & 0x0f)
ND_PRINT("[%s] ",
/* this option should be at least 1 byte long */
if (len < 1) {
- ND_PRINT("[ERROR: length < 1 byte]");
+ ND_PRINT("[length < 1 byte]");
+ nd_print_invalid(ndo);
break;
}
type = GET_U_1(bp);
/* this option should be at least 5 bytes long */
if (len < 5) {
- ND_PRINT("[ERROR: length < 5 bytes]");
+ ND_PRINT("[length < 5 bytes]");
+ nd_print_invalid(ndo);
bp += len;
len = 0;
break;
len--;
/* mask_width <= 32 */
if (mask_width > 32) {
- ND_PRINT("[ERROR: Mask width (%u) > 32]", mask_width);
+ ND_PRINT("[Mask width (%u) > 32]", mask_width);
+ nd_print_invalid(ndo);
bp += len;
len = 0;
break;
significant_octets = (mask_width + 7) / 8;
/* significant octets + router(4) */
if (len < significant_octets + 4) {
- ND_PRINT("[ERROR: Remaining length (%u) < %u bytes]", len, significant_octets + 4);
+ ND_PRINT("[Remaining length (%u) < %u bytes]", len, significant_octets + 4);
+ nd_print_invalid(ndo);
bp += len;
len = 0;
break;
first = 1;
if (len < 2) {
- ND_PRINT("[ERROR: length < 2 bytes]");
+ ND_PRINT("[length < 2 bytes]");
+ nd_print_invalid(ndo);
bp += len;
len = 0;
break;
ND_PRINT("\n\t ");
ND_PRINT("instance#%u: ", suboptnumber);
if (suboptlen == 0) {
- ND_PRINT("[ERROR: suboption length must be non-zero]");
+ ND_PRINT("[suboption length == 0]");
+ nd_print_invalid(ndo);
bp += len;
len = 0;
break;
}
if (len < suboptlen) {
- ND_PRINT("[ERROR: invalid option]");
+ ND_PRINT("[length %u < suboption length %u",
+ len, suboptlen);
+ nd_print_invalid(ndo);
bp += len;
len = 0;
break;
bp += suboptlen2;
}
if (len != 0) {
- ND_PRINT("[ERROR: length < 2 bytes]");
+ ND_PRINT("[length < 2 bytes]");
+ nd_print_invalid(ndo);
}
break;