From: Francois-Xavier Le Bail Date: Tue, 18 Feb 2025 10:58:04 +0000 (+0100) Subject: ICMPv6: Use a variable with a better name, simplifie some codes X-Git-Url: https://git.tcpdump.org/tcpdump/commitdiff_plain/d26976877b1341c2d27715417978909585620f7b ICMPv6: Use a variable with a better name, simplifie some codes For Node Information Queries Qtype "Node Addresses". Add two test files. (cherry picked from commit 806745e10e5ad2c963792a481c88fe2ee039bb00) --- diff --git a/print-icmp6.c b/print-icmp6.c index 22392ccf..42a899d4 100644 --- a/print-icmp6.c +++ b/print-icmp6.c @@ -1708,6 +1708,7 @@ icmp6_nodeinfo_print(netdissect_options *ndo, u_int icmp6len, const u_char *bp, const struct icmp6_hdr *dp; const u_char *cp; size_t siz, i; + uint16_t flags; int needcomma; if (ep < bp) @@ -1736,16 +1737,13 @@ icmp6_nodeinfo_print(netdissect_options *ndo, u_int icmp6len, const u_char *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"); @@ -1858,6 +1856,11 @@ icmp6_nodeinfo_print(netdissect_options *ndo, u_int icmp6len, const u_char *bp, 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) @@ -1867,12 +1870,6 @@ icmp6_nodeinfo_print(netdissect_options *ndo, u_int icmp6len, const u_char *bp, 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) diff --git a/tests/TESTLIST b/tests/TESTLIST index f312035d..5ac8da29 100644 --- a/tests/TESTLIST +++ b/tests/TESTLIST @@ -194,6 +194,8 @@ icmpv6-rfc7112 icmpv6-rfc7112.pcap icmpv6-rfc7112.out 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 diff --git a/tests/icmpv6_nodeinfo_queryipv6.out b/tests/icmpv6_nodeinfo_queryipv6.out new file mode 100644 index 00000000..87368ef7 --- /dev/null +++ b/tests/icmpv6_nodeinfo_queryipv6.out @@ -0,0 +1 @@ + 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) diff --git a/tests/icmpv6_nodeinfo_queryipv6.pcap b/tests/icmpv6_nodeinfo_queryipv6.pcap new file mode 100644 index 00000000..a045db02 Binary files /dev/null and b/tests/icmpv6_nodeinfo_queryipv6.pcap differ diff --git a/tests/icmpv6_nodeinfo_replyipv6.out b/tests/icmpv6_nodeinfo_replyipv6.out new file mode 100644 index 00000000..c73a176d --- /dev/null +++ b/tests/icmpv6_nodeinfo_replyipv6.out @@ -0,0 +1 @@ + 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)) diff --git a/tests/icmpv6_nodeinfo_replyipv6.pcap b/tests/icmpv6_nodeinfo_replyipv6.pcap new file mode 100644 index 00000000..5f79f311 Binary files /dev/null and b/tests/icmpv6_nodeinfo_replyipv6.pcap differ