const struct icmp6_hdr *dp;
const u_char *cp;
size_t siz, i;
+ uint16_t flags;
int needcomma;
if (ep < bp)
break;
case NI_QTYPE_NODEADDR:
ND_PRINT("node addresses");
- i = GET_BE_U_2(ni6->ni_flags);
- if (!i)
- break;
- ND_PRINT(" [%s]",
- bittok2str_nosep(ni_nodeaddr_flag_values,
- "none", i));
- if (i & NI_NODEADDR_FLAG_TRUNCATE) {
- ND_PRINT(" [flag Truncate present]");
- nd_print_invalid(ndo);
- }
+ flags = GET_BE_U_2(ni6->ni_flags);
+ if (flags)
+ ND_PRINT(" [%s]",
+ bittok2str_nosep(ni_nodeaddr_flag_values,
+ "none", flags));
+ if (flags & NI_NODEADDR_FLAG_TRUNCATE)
+ ND_PRINT(" [invalid flag Truncate present]");
break;
default:
ND_PRINT("unknown");
if (needcomma)
ND_PRINT(", ");
ND_PRINT("node addresses");
+ flags = GET_BE_U_2(ni6->ni_flags);
+ if (flags)
+ ND_PRINT(" [%s]",
+ bittok2str_nosep(ni_nodeaddr_flag_values,
+ "none", flags));
i = sizeof(*ni6);
while (i < siz) {
if (i + sizeof(uint32_t) + sizeof(nd_ipv6) > siz)
GET_BE_U_4(bp + i));
i += sizeof(uint32_t) + sizeof(nd_ipv6);
}
- i = GET_BE_U_2(ni6->ni_flags);
- if (!i)
- break;
- ND_PRINT(" [%s]",
- bittok2str_nosep(ni_nodeaddr_flag_values,
- "none", i));
break;
default:
if (needcomma)
icmpv6-RFC2894-RR icmpv6-RFC2894-RR.pcap icmpv6-RFC2894-RR.out
icmpv6-RFC2894-RR-v icmpv6-RFC2894-RR.pcap icmpv6-RFC2894-RR-v.out -v
icmpv6-ni-flags icmpv6-ni-flags.pcap icmpv6-ni-flags.out
+icmpv6_nodeinfo_queryipv6 icmpv6_nodeinfo_queryipv6.pcap icmpv6_nodeinfo_queryipv6.out -v
+icmpv6_nodeinfo_replyipv6 icmpv6_nodeinfo_replyipv6.pcap icmpv6_nodeinfo_replyipv6.out -v
# SPB tests
spb spb.pcap spb.out
--- /dev/null
+ 1 2025-02-18 16:31:31.435136 IP6 (hlim 64, next-header ICMPv6 (58), payload length 32) ::1 > ::1: [icmp6 sum ok] ICMP6, node information query (node addresses [A], subject=2001:db8::1)
--- /dev/null
+ 1 2025-02-18 16:31:31.435136 IP6 (hlim 64, next-header ICMPv6 (58), payload length 76) ::1 > ::1: [icmp6 sum ok] ICMP6, node information reply (success, node addresses [A] ::1(0) 2001:db8::1(0) 2002:db8::1(0))