]> The Tcpdump Group git mirrors - tcpdump/commitdiff
ICMPv6: Add printing for Node Information Queries Qtype "IPv4 Addresses"
authorFrancois-Xavier Le Bail <[email protected]>
Mon, 17 Feb 2025 20:12:09 +0000 (21:12 +0100)
committerFrancois-Xavier Le Bail <[email protected]>
Wed, 19 Feb 2025 07:33:53 +0000 (08:33 +0100)
Add two test files.

(cherry picked from commit 62078833231c635fcf296cdadb9fe0477a2d2acc)

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

index 42a899d48d929cfdac68b364a46dc8f1bfe95fbf..29fce0ef85cda5463b52e164c1276847ab7391c6 100644 (file)
@@ -401,6 +401,12 @@ static const struct tok ni_nodeaddr_flag_values[] = {
         { 0, NULL }
 };
 
+static const struct tok ni_ipv4addr_flag_values[] = {
+        { NI_NODEADDR_FLAG_TRUNCATE, "T" },
+        { NI_NODEADDR_FLAG_ALL, "A" },
+        { 0, NULL }
+};
+
 struct ni_reply_fqdn {
        nd_uint32_t ni_fqdn_ttl;        /* TTL */
        nd_uint8_t ni_fqdn_namelen; /* length in octets of the FQDN */
@@ -1745,6 +1751,16 @@ icmp6_nodeinfo_print(netdissect_options *ndo, u_int icmp6len, const u_char *bp,
                        if (flags & NI_NODEADDR_FLAG_TRUNCATE)
                                ND_PRINT(" [invalid flag Truncate present]");
                        break;
+               case NI_QTYPE_IPV4ADDR:
+                       ND_PRINT("ipv4 addresses");
+                       flags = GET_BE_U_2(ni6->ni_flags);
+                       if (flags)
+                               ND_PRINT(" [%s]",
+                                        bittok2str_nosep(ni_ipv4addr_flag_values,
+                                        "none", flags));
+                       if (flags & NI_NODEADDR_FLAG_TRUNCATE)
+                               ND_PRINT(" [invalid flag Truncate present]");
+                       break;
                default:
                        ND_PRINT("unknown");
                        break;
@@ -1871,6 +1887,25 @@ icmp6_nodeinfo_print(netdissect_options *ndo, u_int icmp6len, const u_char *bp,
                                i += sizeof(uint32_t) + sizeof(nd_ipv6);
                        }
                        break;
+               case NI_QTYPE_IPV4ADDR:
+                       if (needcomma)
+                               ND_PRINT(", ");
+                       ND_PRINT("ipv4 addresses");
+                       flags = GET_BE_U_2(ni6->ni_flags);
+                       if (flags)
+                               ND_PRINT(" [%s]",
+                                        bittok2str_nosep(ni_nodeaddr_flag_values,
+                                        "none", flags));
+                       cp = (const u_char *)(ni6 + 1);
+                       while (cp < ep) {
+                               uint32_t ttl;
+
+                               ttl = GET_BE_U_4(cp);
+                               cp += 4;
+                               ND_PRINT(" %s(%u)", GET_IPADDR_STRING(cp), ttl);
+                               cp += 4;
+                       }
+                       break;
                default:
                        if (needcomma)
                                ND_PRINT(", ");
index 5ac8da296634f59ae32d12009afbef6287075a05..8e7d88ea99d703a1764964d46a27745636a7aecf 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_queryipv4 icmpv6_nodeinfo_queryipv4.pcap icmpv6_nodeinfo_queryipv4.out -v
+icmpv6_nodeinfo_replyipv4 icmpv6_nodeinfo_replyipv4.pcap icmpv6_nodeinfo_replyipv4.out -v
 icmpv6_nodeinfo_queryipv6 icmpv6_nodeinfo_queryipv6.pcap icmpv6_nodeinfo_queryipv6.out -v
 icmpv6_nodeinfo_replyipv6 icmpv6_nodeinfo_replyipv6.pcap icmpv6_nodeinfo_replyipv6.out -v
 
diff --git a/tests/icmpv6_nodeinfo_queryipv4.out b/tests/icmpv6_nodeinfo_queryipv4.out
new file mode 100644 (file)
index 0000000..3126abd
--- /dev/null
@@ -0,0 +1 @@
+    1  2025-02-18 16:31:31.435136 IP6 (hlim 64, next-header ICMPv6 (58), payload length 20) ::1 > ::1: [icmp6 sum ok] ICMP6, node information query (ipv4 addresses [A], subject=192.0.2.1)
diff --git a/tests/icmpv6_nodeinfo_queryipv4.pcap b/tests/icmpv6_nodeinfo_queryipv4.pcap
new file mode 100644 (file)
index 0000000..44e7298
Binary files /dev/null and b/tests/icmpv6_nodeinfo_queryipv4.pcap differ
diff --git a/tests/icmpv6_nodeinfo_replyipv4.out b/tests/icmpv6_nodeinfo_replyipv4.out
new file mode 100644 (file)
index 0000000..e846b99
--- /dev/null
@@ -0,0 +1 @@
+    1  2025-02-18 16:31:31.435136 IP6 (hlim 64, next-header ICMPv6 (58), payload length 40) ::1 > ::1: [icmp6 sum ok] ICMP6, node information reply (success, ipv4 addresses [A] 127.0.0.1(0) 192.0.2.1(0) 193.0.2.1(0))
diff --git a/tests/icmpv6_nodeinfo_replyipv4.pcap b/tests/icmpv6_nodeinfo_replyipv4.pcap
new file mode 100644 (file)
index 0000000..dff3f65
Binary files /dev/null and b/tests/icmpv6_nodeinfo_replyipv4.pcap differ