]> 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)
committerFrancois-Xavier Le Bail <[email protected]>
Wed, 19 Feb 2025 07:31:49 +0000 (08:31 +0100)
For Node Information Queries Qtype "Node Addresses".

Add two test files.

(cherry picked from commit 806745e10e5ad2c963792a481c88fe2ee039bb00)

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 22392ccfe3b37e946e2c8a5ee7c78079305f400d..42a899d48d929cfdac68b364a46dc8f1bfe95fbf 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 f312035d1846f672ed8279809b397222db6dd104..5ac8da296634f59ae32d12009afbef6287075a05 100644 (file)
@@ -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 (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