]> The Tcpdump Group git mirrors - tcpdump/commitdiff
ICMPv6: Use a variable with a better name, simplifie some codes
authorFrancois-Xavier Le Bail <[email protected]>
Tue, 18 Feb 2025 10:58:04 +0000 (11:58 +0100)
committerfxlb <[email protected]>
Wed, 19 Feb 2025 05:52:51 +0000 (05:52 +0000)
For Node Information Queries Qtype "Node Addresses".

Add two test files.

print-icmp6.c
tests/TESTLIST
tests/icmpv6_nodeinfo_queryipv6.out [new file with mode: 0644]
tests/icmpv6_nodeinfo_queryipv6.pcap [new file with mode: 0644]
tests/icmpv6_nodeinfo_replyipv6.out [new file with mode: 0644]
tests/icmpv6_nodeinfo_replyipv6.pcap [new file with mode: 0644]

index 4dd80e19dd4f5a06be7e5748d8f430bc3348247f..49dc4d0f6532cfcf03fb4d62669a88b11816f2bb 100644 (file)
@@ -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)
index a036e6d7ac276df35a33019f3c3cc0055cd0538b..748e7cf899c9c85247dabedc98529911aa8aa5ea 100644 (file)
@@ -242,6 +242,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 (file)
index 0000000..87368ef
--- /dev/null
@@ -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 (file)
index 0000000..a045db0
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 (file)
index 0000000..c73a176
--- /dev/null
@@ -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 (file)
index 0000000..5f79f31
Binary files /dev/null and b/tests/icmpv6_nodeinfo_replyipv6.pcap differ