Added unit tests for expanded IPv6 multicast address creation APIs. Added unit test for IPAddress::ToString. Incorporated refactoring to cleanly and consistently integrate these new tests.
diff --git a/src/test-apps/TestInetAddress.cpp b/src/test-apps/TestInetAddress.cpp
index 0b0f795..e4bfd39 100644
--- a/src/test-apps/TestInetAddress.cpp
+++ b/src/test-apps/TestInetAddress.cpp
@@ -84,77 +84,128 @@
kTestIsNotIPv6LLA = false
};
-struct TestContext {
- uint32_t addr[4];
- const IPAddressType ipAddrType;
-
- const char *ip;
-
- bool isIPv4;
- bool isIPv4Multicast;
- bool isIPv4Broadcast;
- bool isMulticast;
- bool isIPv6Multicast;
- bool isIPv6ULA;
- bool isIPv6LLA;
-
- uint64_t global;
- uint16_t subnet;
- uint64_t interface;
+struct IPAddressContext {
+ uint32_t mAddrQuartets[4];
+ const IPAddressType mAddrType;
+ const char * mAddrString;
};
+typedef const struct IPAddressContext * IPAddressContextIterator;
+
+struct IPAddressContextRange {
+ IPAddressContextIterator mBegin;
+ IPAddressContextIterator mEnd;
+};
+
+struct IPAddressExpandedContext
+{
+ IPAddressContext mAddr;
+ bool isIPv4;
+ bool isIPv4Multicast;
+ bool isIPv4Broadcast;
+ bool isMulticast;
+ bool isIPv6Multicast;
+ bool isIPv6ULA;
+ bool isIPv6LLA;
+
+ uint64_t global;
+ uint16_t subnet;
+ uint64_t interface;
+};
+
+typedef const struct IPAddressExpandedContext * IPAddressExpandedContextIterator;
+
+struct IPAddressExpandedContextRange {
+ IPAddressExpandedContextIterator mBegin;
+ IPAddressExpandedContextIterator mEnd;
+};
+
+struct TestContext
+{
+ const IPAddressContextRange mIPv6WellKnownMulticastContextRange;
+ const IPAddressContextRange mIPv6TransientMulticastContextRange;
+ const IPAddressContextRange mIPv6PrefixMulticastContextRange;
+ const IPAddressExpandedContextRange mIPAddressExpandedContextRange;
+};
+
+
// Global Variables
+static const IPv6MulticastScope sIPv6MulticastScopes[NUM_MCAST_SCOPES] = {
+ kIPv6MulticastScope_Interface,
+ kIPv6MulticastScope_Link,
+#if INET_CONFIG_ENABLE_IPV4
+ kIPv6MulticastScope_IPv4,
+#else
+ kIPv6MulticastScope_Realm,
+#endif // INET_CONFIG_ENABLE_IPV4
+ kIPv6MulticastScope_Admin,
+ kIPv6MulticastScope_Site,
+ kIPv6MulticastScope_Organization,
+ kIPv6MulticastScope_Global
+};
+
+static const IPV6MulticastGroup sIPv6WellKnownMulticastGroups[NUM_MCAST_GROUPS] = {
+ kIPV6MulticastGroup_AllNodes,
+ kIPV6MulticastGroup_AllRouters
+};
+
// Test input data.
-static const struct TestContext sContext[] = {
+static const struct IPAddressExpandedContext sIPAddressContext[] = {
{
- { 0x26200000, 0x10e70400, 0xe83fb28f, 0x9c3a1941 }, kIPAddressType_IPv6,
- "2620:0:10e7:400:e83f:b28f:9c3a:1941",
+ { { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, kIPAddressType_Any,
+ "::" },
kTestIsIPv6, kTestIsNotIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsNotMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0xfe800000, 0x00000000, 0x8edcd4ff, 0xfe3aebfb }, kIPAddressType_IPv6,
- "fe80::8edc:d4ff:fe3a:ebfb",
+ { { 0x26200000, 0x10e70400, 0xe83fb28f, 0x9c3a1941 }, kIPAddressType_IPv6,
+ "2620:0:10e7:400:e83f:b28f:9c3a:1941" } ,
+ kTestIsIPv6, kTestIsNotIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsNotMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
+ 0x0, 0x0, 0x0
+ },
+ {
+ { { 0xfe800000, 0x00000000, 0x8edcd4ff, 0xfe3aebfb }, kIPAddressType_IPv6,
+ "fe80::8edc:d4ff:fe3a:ebfb" },
kTestIsIPv6, kTestIsNotIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsNotMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0xff010000, 0x00000000, 0x00000000, 0x00000001 }, kIPAddressType_IPv6,
- "ff01::1",
+ { { 0xff010000, 0x00000000, 0x00000000, 0x00000001 }, kIPAddressType_IPv6,
+ "ff01::1" },
kTestIsIPv6, kTestIsNotIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0xfd000000, 0x00010001, 0x00000000, 0x00000001 }, kIPAddressType_IPv6,
- "fd00:0:1:1::1",
+ { { 0xfd000000, 0x00010001, 0x00000000, 0x00000001 }, kIPAddressType_IPv6,
+ "fd00:0:1:1::1" },
kTestIsIPv6, kTestIsNotIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsNotMulticast, kTestIsNotIPv6Multicast, kTestIsIPv6ULA, kTestIsNotIPv6LLA,
0x1, 1, 1
},
{
- { 0xfd123456, 0x0001abcd, 0xabcdef00, 0xfedcba09 }, kIPAddressType_IPv6,
- "fd12:3456:1:abcd:abcd:ef00:fedc:ba09",
+ { { 0xfd123456, 0x0001abcd, 0xabcdef00, 0xfedcba09 }, kIPAddressType_IPv6,
+ "fd12:3456:1:abcd:abcd:ef00:fedc:ba09" },
kTestIsIPv6, kTestIsNotIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsNotMulticast, kTestIsNotIPv6Multicast, kTestIsIPv6ULA, kTestIsNotIPv6LLA,
0x1234560001, 0xabcd, 0xabcdef00fedcba09
},
{
- { 0xfdffffff, 0xffffffff, 0xffffffff, 0xffffffff }, kIPAddressType_IPv6,
- "fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
+ { { 0xfdffffff, 0xffffffff, 0xffffffff, 0xffffffff }, kIPAddressType_IPv6,
+ "fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" },
kTestIsIPv6, kTestIsNotIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsNotMulticast, kTestIsNotIPv6Multicast, kTestIsIPv6ULA, kTestIsNotIPv6LLA,
0xffffffffff, 0xffff, 0xffffffffffffffff
},
#if INET_CONFIG_ENABLE_IPV4
// IPv4-only
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xffffff00 }, kIPAddressType_IPv4,
- "255.255.255.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xffffff00 }, kIPAddressType_IPv4,
+ "255.255.255.0" },
kTestIsIPv4, kTestIsNotIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsNotMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0x7f000001 }, kIPAddressType_IPv4,
- "127.0.0.1",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0x7f000001 }, kIPAddressType_IPv4,
+ "127.0.0.1" },
kTestIsIPv4, kTestIsNotIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsNotMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
@@ -162,311 +213,420 @@
// IPv4 Local subnetwork multicast
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe0000000 }, kIPAddressType_IPv4,
- "224.0.0.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe0000000 }, kIPAddressType_IPv4,
+ "224.0.0.0" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe0000001 }, kIPAddressType_IPv4,
- "224.0.0.1",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe0000001 }, kIPAddressType_IPv4,
+ "224.0.0.1" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe0000080 }, kIPAddressType_IPv4,
- "224.0.0.128",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe0000080 }, kIPAddressType_IPv4,
+ "224.0.0.128" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe00000fe }, kIPAddressType_IPv4,
- "224.0.0.254",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe00000fe }, kIPAddressType_IPv4,
+ "224.0.0.254" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe00000ff }, kIPAddressType_IPv4,
- "224.0.0.255",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe00000ff }, kIPAddressType_IPv4,
+ "224.0.0.255" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
// IPv4 Internetwork control multicast
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe0000100 }, kIPAddressType_IPv4,
- "224.0.1.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe0000100 }, kIPAddressType_IPv4,
+ "224.0.1.0" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe0000101 }, kIPAddressType_IPv4,
- "224.0.1.1",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe0000101 }, kIPAddressType_IPv4,
+ "224.0.1.1" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe0000180 }, kIPAddressType_IPv4,
- "224.0.1.128",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe0000180 }, kIPAddressType_IPv4,
+ "224.0.1.128" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe00001fe }, kIPAddressType_IPv4,
- "224.0.1.254",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe00001fe }, kIPAddressType_IPv4,
+ "224.0.1.254" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe00001ff }, kIPAddressType_IPv4,
- "224.0.1.255",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe00001ff }, kIPAddressType_IPv4,
+ "224.0.1.255" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
// IPv4 AD-HOC block 1 multicast
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe0000200 }, kIPAddressType_IPv4,
- "224.0.2.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe0000200 }, kIPAddressType_IPv4,
+ "224.0.2.0" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe0000201 }, kIPAddressType_IPv4,
- "224.0.2.1",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe0000201 }, kIPAddressType_IPv4,
+ "224.0.2.1" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe0008100 }, kIPAddressType_IPv4,
- "224.0.129.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe0008100 }, kIPAddressType_IPv4,
+ "224.0.129.0" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe000fffe }, kIPAddressType_IPv4,
- "224.0.255.254",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe000fffe }, kIPAddressType_IPv4,
+ "224.0.255.254" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe000ffff }, kIPAddressType_IPv4,
- "224.0.255.255",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe000ffff }, kIPAddressType_IPv4,
+ "224.0.255.255" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
// IPv4 AD-HOC block 2 multicast
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe0030000 }, kIPAddressType_IPv4,
- "224.3.0.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe0030000 }, kIPAddressType_IPv4,
+ "224.3.0.0" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe0030001 }, kIPAddressType_IPv4,
- "224.3.0.1",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe0030001 }, kIPAddressType_IPv4,
+ "224.3.0.1" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe0040000 }, kIPAddressType_IPv4,
- "224.4.0.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe0040000 }, kIPAddressType_IPv4,
+ "224.4.0.0" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe004fffe }, kIPAddressType_IPv4,
- "224.4.255.254",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe004fffe }, kIPAddressType_IPv4,
+ "224.4.255.254" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe004ffff }, kIPAddressType_IPv4,
- "224.4.255.255",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe004ffff }, kIPAddressType_IPv4,
+ "224.4.255.255" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
// IPv4 source-specific multicast
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe8000000 }, kIPAddressType_IPv4,
- "232.0.0.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe8000000 }, kIPAddressType_IPv4,
+ "232.0.0.0" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe8000001 }, kIPAddressType_IPv4,
- "232.0.0.1",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe8000001 }, kIPAddressType_IPv4,
+ "232.0.0.1" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe8800000 }, kIPAddressType_IPv4,
- "232.128.0.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe8800000 }, kIPAddressType_IPv4,
+ "232.128.0.0" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe8fffffe }, kIPAddressType_IPv4,
- "232.255.255.254",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe8fffffe }, kIPAddressType_IPv4,
+ "232.255.255.254" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe8ffffff }, kIPAddressType_IPv4,
- "232.255.255.255",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe8ffffff }, kIPAddressType_IPv4,
+ "232.255.255.255" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
// IPv4 GLOP addressing multicast
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe9000000 }, kIPAddressType_IPv4,
- "233.0.0.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe9000000 }, kIPAddressType_IPv4,
+ "233.0.0.0" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe9000001 }, kIPAddressType_IPv4,
- "233.0.0.1",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe9000001 }, kIPAddressType_IPv4,
+ "233.0.0.1" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe97e0000 }, kIPAddressType_IPv4,
- "233.126.0.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe97e0000 }, kIPAddressType_IPv4,
+ "233.126.0.0" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe9fbfffe }, kIPAddressType_IPv4,
- "233.251.255.254",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe9fbfffe }, kIPAddressType_IPv4,
+ "233.251.255.254" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe9fbffff }, kIPAddressType_IPv4,
- "233.251.255.255",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe9fbffff }, kIPAddressType_IPv4,
+ "233.251.255.255" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
// IPv4 AD-HOC block 3 multicast
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe9fc0000 }, kIPAddressType_IPv4,
- "233.252.0.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe9fc0000 }, kIPAddressType_IPv4,
+ "233.252.0.0" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe9fc0001 }, kIPAddressType_IPv4,
- "233.252.0.1",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe9fc0001 }, kIPAddressType_IPv4,
+ "233.252.0.1" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe9fe0000 }, kIPAddressType_IPv4,
- "233.254.0.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe9fe0000 }, kIPAddressType_IPv4,
+ "233.254.0.0" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe9fffffe }, kIPAddressType_IPv4,
- "233.255.255.254",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe9fffffe }, kIPAddressType_IPv4,
+ "233.255.255.254" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xe9ffffff }, kIPAddressType_IPv4,
- "233.255.255.255",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xe9ffffff }, kIPAddressType_IPv4,
+ "233.255.255.255" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
// IPv4 unicast-prefix-based multicast
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xea000000 }, kIPAddressType_IPv4,
- "234.0.0.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xea000000 }, kIPAddressType_IPv4,
+ "234.0.0.0" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xea000001 }, kIPAddressType_IPv4,
- "234.0.0.1",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xea000001 }, kIPAddressType_IPv4,
+ "234.0.0.1" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xea800000 }, kIPAddressType_IPv4,
- "234.128.0.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xea800000 }, kIPAddressType_IPv4,
+ "234.128.0.0" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xeafffffe }, kIPAddressType_IPv4,
- "234.255.255.254",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xeafffffe }, kIPAddressType_IPv4,
+ "234.255.255.254" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xeaffffff }, kIPAddressType_IPv4,
- "234.255.255.255",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xeaffffff }, kIPAddressType_IPv4,
+ "234.255.255.255" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
// IPv4 administratively scoped multicast
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xef000000 }, kIPAddressType_IPv4,
- "239.0.0.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xef000000 }, kIPAddressType_IPv4,
+ "239.0.0.0" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xef000001 }, kIPAddressType_IPv4,
- "239.0.0.1",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xef000001 }, kIPAddressType_IPv4,
+ "239.0.0.1" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xef800000 }, kIPAddressType_IPv4,
- "239.128.0.0",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xef800000 }, kIPAddressType_IPv4,
+ "239.128.0.0" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xeffffffe }, kIPAddressType_IPv4,
- "239.255.255.254",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xeffffffe }, kIPAddressType_IPv4,
+ "239.255.255.254" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xefffffff }, kIPAddressType_IPv4,
- "239.255.255.255",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xefffffff }, kIPAddressType_IPv4,
+ "239.255.255.255" },
kTestIsIPv4, kTestIsIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
},
// IP4 and IPv4 broadcast
{
- { 0x00000000, 0x00000000, 0x0000ffff, 0xffffffff }, kIPAddressType_IPv4,
- "255.255.255.255",
+ { { 0x00000000, 0x00000000, 0x0000ffff, 0xffffffff }, kIPAddressType_IPv4,
+ "255.255.255.255" },
kTestIsIPv4, kTestIsNotIPv4Multicast, kTestIsIPv4Broadcast, kTestIsNotMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
0x0, 0x0, 0x0
- },
+ }
#endif // INET_CONFIG_ENABLE_IPV4
+};
+
+static const IPAddressContext sIPv6WellKnownMulticastContext[] = {
+ // Well-known
+
+ // All-nodes in Various Scopes
+
+ { { 0xff010000, 0x00000000, 0x00000000, 0x00000001 }, kIPAddressType_IPv6, "ff01::1" },
+ { { 0xff020000, 0x00000000, 0x00000000, 0x00000001 }, kIPAddressType_IPv6, "ff02::1" },
+ { { 0xff030000, 0x00000000, 0x00000000, 0x00000001 }, kIPAddressType_IPv6, "ff03::1" },
+ { { 0xff040000, 0x00000000, 0x00000000, 0x00000001 }, kIPAddressType_IPv6, "ff04::1" },
+ { { 0xff050000, 0x00000000, 0x00000000, 0x00000001 }, kIPAddressType_IPv6, "ff05::1" },
+ { { 0xff080000, 0x00000000, 0x00000000, 0x00000001 }, kIPAddressType_IPv6, "ff08::1" },
+ { { 0xff0e0000, 0x00000000, 0x00000000, 0x00000001 }, kIPAddressType_IPv6, "ff0e::1" },
+
+ // All-routers in Various Scopes
+
+ { { 0xff010000, 0x00000000, 0x00000000, 0x00000002 }, kIPAddressType_IPv6, "ff01::2" },
+ { { 0xff020000, 0x00000000, 0x00000000, 0x00000002 }, kIPAddressType_IPv6, "ff02::2" },
+ { { 0xff030000, 0x00000000, 0x00000000, 0x00000002 }, kIPAddressType_IPv6, "ff03::2" },
+ { { 0xff040000, 0x00000000, 0x00000000, 0x00000002 }, kIPAddressType_IPv6, "ff04::2" },
+ { { 0xff050000, 0x00000000, 0x00000000, 0x00000002 }, kIPAddressType_IPv6, "ff05::2" },
+ { { 0xff080000, 0x00000000, 0x00000000, 0x00000002 }, kIPAddressType_IPv6, "ff08::2" },
+ { { 0xff0e0000, 0x00000000, 0x00000000, 0x00000002 }, kIPAddressType_IPv6, "ff0e::2" }
+};
+
+static const IPAddressContext sIPv6TransientMulticastContext[] = {
+ // Transient
+
+ // Short Transient Group in Various Scopes
+
+ { { 0xff110000, 0x00000000, 0x00000000, 0x00000001 }, kIPAddressType_IPv6, "ff11::1" },
+ { { 0xff120000, 0x00000000, 0x00000000, 0x00000001 }, kIPAddressType_IPv6, "ff12::1" },
+ { { 0xff130000, 0x00000000, 0x00000000, 0x00000001 }, kIPAddressType_IPv6, "ff13::1" },
+ { { 0xff140000, 0x00000000, 0x00000000, 0x00000001 }, kIPAddressType_IPv6, "ff14::1" },
+ { { 0xff150000, 0x00000000, 0x00000000, 0x00000001 }, kIPAddressType_IPv6, "ff15::1" },
+ { { 0xff180000, 0x00000000, 0x00000000, 0x00000001 }, kIPAddressType_IPv6, "ff18::1" },
+ { { 0xff1e0000, 0x00000000, 0x00000000, 0x00000001 }, kIPAddressType_IPv6, "ff1e::1" },
+
+ // Long Transient Group in Various Scopes
+
+ { { 0xff11d5d6, 0x2ba27847, 0x6452587a, 0xc9550b5a }, kIPAddressType_IPv6, "ff11:d5d6:2ba2:7847:6452:587a:c955:b5a" },
+ { { 0xff12d5d6, 0x2ba27847, 0x6452587a, 0xc9550b5a }, kIPAddressType_IPv6, "ff12:d5d6:2ba2:7847:6452:587a:c955:b5a" },
+ { { 0xff13d5d6, 0x2ba27847, 0x6452587a, 0xc9550b5a }, kIPAddressType_IPv6, "ff13:d5d6:2ba2:7847:6452:587a:c955:b5a" },
+ { { 0xff14d5d6, 0x2ba27847, 0x6452587a, 0xc9550b5a }, kIPAddressType_IPv6, "ff14:d5d6:2ba2:7847:6452:587a:c955:b5a" },
+ { { 0xff15d5d6, 0x2ba27847, 0x6452587a, 0xc9550b5a }, kIPAddressType_IPv6, "ff15:d5d6:2ba2:7847:6452:587a:c955:b5a" },
+ { { 0xff18d5d6, 0x2ba27847, 0x6452587a, 0xc9550b5a }, kIPAddressType_IPv6, "ff18:d5d6:2ba2:7847:6452:587a:c955:b5a" },
+ { { 0xff1ed5d6, 0x2ba27847, 0x6452587a, 0xc9550b5a }, kIPAddressType_IPv6, "ff1e:d5d6:2ba2:7847:6452:587a:c955:b5a" }
+};
+
+static const IPAddressContext sIPv6PrefixMulticastContext[] = {
+ // Prefix
+
+ // 56-bit Prefix with Short Group in Various Scopes
+
+ { { 0xff310038, 0x373acba4, 0xd2ad8d00, 0x00000001 }, kIPAddressType_IPv6, "ff31:38:373a:cba4:d2ad:8d00:0:1" },
+ { { 0xff320038, 0x373acba4, 0xd2ad8d00, 0x00000001 }, kIPAddressType_IPv6, "ff32:38:373a:cba4:d2ad:8d00:0:1" },
+ { { 0xff330038, 0x373acba4, 0xd2ad8d00, 0x00000001 }, kIPAddressType_IPv6, "ff33:38:373a:cba4:d2ad:8d00:0:1" },
+ { { 0xff340038, 0x373acba4, 0xd2ad8d00, 0x00000001 }, kIPAddressType_IPv6, "ff34:38:373a:cba4:d2ad:8d00:0:1" },
+ { { 0xff350038, 0x373acba4, 0xd2ad8d00, 0x00000001 }, kIPAddressType_IPv6, "ff35:38:373a:cba4:d2ad:8d00:0:1" },
+ { { 0xff380038, 0x373acba4, 0xd2ad8d00, 0x00000001 }, kIPAddressType_IPv6, "ff38:38:373a:cba4:d2ad:8d00:0:1" },
+ { { 0xff3e0038, 0x373acba4, 0xd2ad8d00, 0x00000001 }, kIPAddressType_IPv6, "ff3e:38:373a:cba4:d2ad:8d00:0:1" },
+
+ // 56-bit Prefix with Long Group in Various Scopes
+
+ { { 0xff310038, 0x373acba4, 0xd2ad8d00, 0xafff5258 }, kIPAddressType_IPv6, "ff31:38:373a:cba4:d2ad:8d00:afff:5258" },
+ { { 0xff320038, 0x373acba4, 0xd2ad8d00, 0xafff5258 }, kIPAddressType_IPv6, "ff32:38:373a:cba4:d2ad:8d00:afff:5258" },
+ { { 0xff330038, 0x373acba4, 0xd2ad8d00, 0xafff5258 }, kIPAddressType_IPv6, "ff33:38:373a:cba4:d2ad:8d00:afff:5258" },
+ { { 0xff340038, 0x373acba4, 0xd2ad8d00, 0xafff5258 }, kIPAddressType_IPv6, "ff34:38:373a:cba4:d2ad:8d00:afff:5258" },
+ { { 0xff350038, 0x373acba4, 0xd2ad8d00, 0xafff5258 }, kIPAddressType_IPv6, "ff35:38:373a:cba4:d2ad:8d00:afff:5258" },
+ { { 0xff380038, 0x373acba4, 0xd2ad8d00, 0xafff5258 }, kIPAddressType_IPv6, "ff38:38:373a:cba4:d2ad:8d00:afff:5258" },
+ { { 0xff3e0038, 0x373acba4, 0xd2ad8d00, 0xafff5258 }, kIPAddressType_IPv6, "ff3e:38:373a:cba4:d2ad:8d00:afff:5258" },
+
+ // 64-bit Prefix with Short Group in Various Scopes
+
+ { { 0xff310040, 0x66643dfb, 0xafa4385b, 0x00000001 }, kIPAddressType_IPv6, "ff31:40:6664:3dfb:afa4:385b:0:1" },
+ { { 0xff320040, 0x66643dfb, 0xafa4385b, 0x00000001 }, kIPAddressType_IPv6, "ff32:40:6664:3dfb:afa4:385b:0:1" },
+ { { 0xff330040, 0x66643dfb, 0xafa4385b, 0x00000001 }, kIPAddressType_IPv6, "ff33:40:6664:3dfb:afa4:385b:0:1" },
+ { { 0xff340040, 0x66643dfb, 0xafa4385b, 0x00000001 }, kIPAddressType_IPv6, "ff34:40:6664:3dfb:afa4:385b:0:1" },
+ { { 0xff350040, 0x66643dfb, 0xafa4385b, 0x00000001 }, kIPAddressType_IPv6, "ff35:40:6664:3dfb:afa4:385b:0:1" },
+ { { 0xff380040, 0x66643dfb, 0xafa4385b, 0x00000001 }, kIPAddressType_IPv6, "ff38:40:6664:3dfb:afa4:385b:0:1" },
+ { { 0xff3e0040, 0x66643dfb, 0xafa4385b, 0x00000001 }, kIPAddressType_IPv6, "ff3e:40:6664:3dfb:afa4:385b:0:1" },
+
+ // 64-bit Prefix with Long Group in Various Scopes
+
+ { { 0xff310040, 0x66643dfb, 0xafa4385b, 0xafff5258 }, kIPAddressType_IPv6, "ff31:40:6664:3dfb:afa4:385b:afff:5258" },
+ { { 0xff320040, 0x66643dfb, 0xafa4385b, 0xafff5258 }, kIPAddressType_IPv6, "ff32:40:6664:3dfb:afa4:385b:afff:5258" },
+ { { 0xff330040, 0x66643dfb, 0xafa4385b, 0xafff5258 }, kIPAddressType_IPv6, "ff33:40:6664:3dfb:afa4:385b:afff:5258" },
+ { { 0xff340040, 0x66643dfb, 0xafa4385b, 0xafff5258 }, kIPAddressType_IPv6, "ff34:40:6664:3dfb:afa4:385b:afff:5258" },
+ { { 0xff350040, 0x66643dfb, 0xafa4385b, 0xafff5258 }, kIPAddressType_IPv6, "ff35:40:6664:3dfb:afa4:385b:afff:5258" },
+ { { 0xff380040, 0x66643dfb, 0xafa4385b, 0xafff5258 }, kIPAddressType_IPv6, "ff38:40:6664:3dfb:afa4:385b:afff:5258" },
+ { { 0xff3e0040, 0x66643dfb, 0xafa4385b, 0xafff5258 }, kIPAddressType_IPv6, "ff3e:40:6664:3dfb:afa4:385b:afff:5258" }
+};
+
+static const size_t kIPv6WellKnownMulticastTestElements = sizeof (sIPv6WellKnownMulticastContext) / sizeof (struct IPAddressContext);
+static const size_t kIPv6TransientMulticastTestElements = sizeof (sIPv6TransientMulticastContext) / sizeof (struct IPAddressContext);
+static const size_t kIPv6PrefixMulticastTestElements = sizeof (sIPv6PrefixMulticastContext) / sizeof (struct IPAddressContext);
+static const size_t kIPAddressTestElements = sizeof (sIPAddressContext) / sizeof (struct IPAddressExpandedContext);
+
+static const TestContext sTestContext = {
{
- { 0x00000000, 0x00000000, 0x00000000, 0x00000000 }, kIPAddressType_Any,
- "::",
- kTestIsIPv6, kTestIsNotIPv4Multicast, kTestIsNotIPv4Broadcast, kTestIsNotMulticast, kTestIsNotIPv6Multicast, kTestIsNotIPv6ULA, kTestIsNotIPv6LLA,
- 0x0, 0x0, 0x0
+ &sIPv6WellKnownMulticastContext[0],
+ &sIPv6WellKnownMulticastContext[kIPv6WellKnownMulticastTestElements]
+ },
+ {
+ &sIPv6TransientMulticastContext[0],
+ &sIPv6TransientMulticastContext[kIPv6TransientMulticastTestElements]
+ },
+ {
+ &sIPv6PrefixMulticastContext[0],
+ &sIPv6PrefixMulticastContext[kIPv6PrefixMulticastTestElements]
+ },
+ {
+ &sIPAddressContext[0],
+ &sIPAddressContext[kIPAddressTestElements]
}
};
-static const size_t kTestElements = sizeof(sContext)/sizeof(struct TestContext);
// Utility functions.
/**
* Load input test directly into IPAddress.
*/
-static void SetupIPAddress(IPAddress& addr, const struct TestContext *inContext)
+static void SetupIPAddress(IPAddress& addr, const struct IPAddressExpandedContext *inContext)
{
for (size_t i = 0; i < NUM_FIELDS_IN_ADDR; i++)
{
- addr.Addr[i] = htonl(inContext->addr[i]);
+ addr.Addr[i] = htonl(inContext->mAddr.mAddrQuartets[i]);
}
}
@@ -475,9 +635,82 @@
*/
static void ClearIPAddress(IPAddress& addr)
{
- for (size_t i = 0; i < NUM_FIELDS_IN_ADDR; i++)
+ addr = IPAddress::Any;
+}
+
+static void CheckAddressQuartet(nlTestSuite *inSuite, const uint32_t &inFirstAddressQuartet, const uint32_t &inSecondAddressQuartet, const size_t &inWhich)
+{
+ const bool lResult = (inFirstAddressQuartet == inSecondAddressQuartet);
+
+ NL_TEST_ASSERT(inSuite, lResult == true);
+
+ if (lResult != true)
{
- addr.Addr[i] = 0;
+ fprintf(stdout, "Address quartet %zu mismatch: actual 0x%08x, expected: 0x%08x\n", inWhich, inFirstAddressQuartet, inSecondAddressQuartet);
+ }
+}
+
+static void CheckAddressQuartet(nlTestSuite *inSuite, const IPAddressContext &inContext, const IPAddress &inAddress, const size_t &inWhich)
+{
+ CheckAddressQuartet(inSuite, inAddress.Addr[inWhich], htonl(inContext.mAddrQuartets[inWhich]), inWhich);
+}
+
+static void CheckAddressQuartets(nlTestSuite *inSuite, const IPAddress &inFirstAddress, const IPAddress &inSecondAddress)
+{
+ for (size_t i = 0; i < 4; i++)
+ {
+ CheckAddressQuartet(inSuite, inFirstAddress.Addr[i], inSecondAddress.Addr[i], i);
+ }
+}
+
+static void CheckAddressQuartets(nlTestSuite *inSuite, const IPAddressContext &inContext, const IPAddress &inAddress)
+{
+ for (size_t i = 0; i < 4; i++)
+ {
+ CheckAddressQuartet(inSuite, inContext, inAddress, i);
+ }
+}
+
+static void CheckAddressString(nlTestSuite *inSuite, const char *inActual, const char *inExpected)
+{
+ const int lResult = strcasecmp(inActual, inExpected);
+
+ NL_TEST_ASSERT(inSuite, lResult == 0);
+
+ if (lResult != 0)
+ {
+ fprintf(stdout, "Address format mismatch: actual %s, expected %s\n",
+ inActual, inExpected);
+ }
+}
+
+static void CheckAddress(nlTestSuite *inSuite, const IPAddressContext &inContext, const IPAddress &inAddress)
+{
+ char lAddressBuffer[INET6_ADDRSTRLEN];
+ IPAddress lParsedAddress;
+ int lResult;
+
+ // Compare the address quartets to their control values.
+
+ CheckAddressQuartets(inSuite, inContext, inAddress);
+
+ // Convert the address to a string and compare it to the control string.
+
+ inAddress.ToString(lAddressBuffer, INET6_ADDRSTRLEN);
+
+ CheckAddressString(inSuite, lAddressBuffer, inContext.mAddrString);
+
+ // Convert the control string to an address and compare the parsed address to the created address.
+
+ lResult = IPAddress::FromString(inContext.mAddrString, lParsedAddress);
+ NL_TEST_ASSERT(inSuite, lResult == true);
+
+ lResult = (inAddress == lParsedAddress);
+
+ if (lResult != true)
+ {
+ fprintf(stdout, "Address parse mismatch for %s\n",
+ inContext.mAddrString);
}
}
@@ -489,33 +722,52 @@
*/
static void CheckFromString(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
- IPAddress::FromString(theContext->ip, test_addr);
+ IPAddress::FromString(lCurrent->mAddr.mAddrString, test_addr);
- NL_TEST_ASSERT(inSuite, test_addr.Addr[0] == htonl(theContext->addr[0]));
- NL_TEST_ASSERT(inSuite, test_addr.Addr[1] == htonl(theContext->addr[1]));
- NL_TEST_ASSERT(inSuite, test_addr.Addr[2] == htonl(theContext->addr[2]));
- NL_TEST_ASSERT(inSuite, test_addr.Addr[3] == htonl(theContext->addr[3]));
+ CheckAddressQuartets(inSuite, lCurrent->mAddr, test_addr);
char tmpBuf[INET6_ADDRSTRLEN];
- size_t addrStrLen = strlen(theContext->ip);
+ size_t addrStrLen = strlen(lCurrent->mAddr.mAddrString);
memset(tmpBuf, '1', sizeof(tmpBuf));
- memcpy(tmpBuf, theContext->ip, addrStrLen);
+ memcpy(tmpBuf, lCurrent->mAddr.mAddrString, addrStrLen);
IPAddress::FromString(tmpBuf, addrStrLen, test_addr);
- NL_TEST_ASSERT(inSuite, test_addr.Addr[0] == htonl(theContext->addr[0]));
- NL_TEST_ASSERT(inSuite, test_addr.Addr[1] == htonl(theContext->addr[1]));
- NL_TEST_ASSERT(inSuite, test_addr.Addr[2] == htonl(theContext->addr[2]));
- NL_TEST_ASSERT(inSuite, test_addr.Addr[3] == htonl(theContext->addr[3]));
+ CheckAddressQuartets(inSuite, lCurrent->mAddr, test_addr);
- theContext++;
+ ++lCurrent;
+ }
+}
+
+/**
+ * Test IP address conversion to a string.
+ */
+static void CheckToString(nlTestSuite *inSuite, void *inContext)
+{
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
+ char lAddressBuffer[INET6_ADDRSTRLEN];
+ IPAddress lAddress;
+
+ while (lCurrent != lEnd)
+ {
+ SetupIPAddress(lAddress, lCurrent);
+
+ lAddress.ToString(lAddressBuffer, INET6_ADDRSTRLEN);
+
+ CheckAddressString(inSuite, lAddressBuffer, lCurrent->mAddr.mAddrString);
+
+ ++lCurrent;
}
}
@@ -524,17 +776,19 @@
*/
static void CheckIsIPv6ULA(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
- SetupIPAddress(test_addr, theContext);
+ SetupIPAddress(test_addr, lCurrent);
- NL_TEST_ASSERT(inSuite, test_addr.IsIPv6ULA() == theContext->isIPv6ULA);
+ NL_TEST_ASSERT(inSuite, test_addr.IsIPv6ULA() == lCurrent->isIPv6ULA);
- theContext++;
+ ++lCurrent;
}
}
@@ -543,17 +797,19 @@
*/
static void CheckIsIPv6LLA(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
- SetupIPAddress(test_addr, theContext);
+ SetupIPAddress(test_addr, lCurrent);
- NL_TEST_ASSERT(inSuite, test_addr.IsIPv6LinkLocal() == theContext->isIPv6LLA);
+ NL_TEST_ASSERT(inSuite, test_addr.IsIPv6LinkLocal() == lCurrent->isIPv6LLA);
- theContext++;
+ ++lCurrent;
}
}
@@ -562,17 +818,19 @@
*/
static void CheckIsIPv6Multicast(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
- SetupIPAddress(test_addr, theContext);
+ SetupIPAddress(test_addr, lCurrent);
- NL_TEST_ASSERT(inSuite, test_addr.IsIPv6Multicast() == theContext->isIPv6Multicast);
+ NL_TEST_ASSERT(inSuite, test_addr.IsIPv6Multicast() == lCurrent->isIPv6Multicast);
- theContext++;
+ ++lCurrent;
}
}
@@ -581,17 +839,19 @@
*/
static void CheckIsMulticast(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
- SetupIPAddress(test_addr, theContext);
+ SetupIPAddress(test_addr, lCurrent);
- NL_TEST_ASSERT(inSuite, test_addr.IsMulticast() == theContext->isMulticast);
+ NL_TEST_ASSERT(inSuite, test_addr.IsMulticast() == lCurrent->isMulticast);
- theContext++;
+ ++lCurrent;
}
}
@@ -600,22 +860,25 @@
*/
static void CheckOperatorEqual(nlTestSuite *inSuite, void *inContext)
{
- struct TestContext *theFirstContext = static_cast<struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lFirstCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lFirstEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lFirstCurrent != lFirstEnd)
{
- IPAddress test_addr_1;
- struct TestContext *theSecondContext = static_cast<struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lSecondCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lSecondEnd = lContext->mIPAddressExpandedContextRange.mEnd;
+ IPAddress test_addr_1;
- SetupIPAddress(test_addr_1, theFirstContext);
+ SetupIPAddress(test_addr_1, lFirstCurrent);
- for (size_t jth = 0; jth < kTestElements; jth++)
+ while (lSecondCurrent != lSecondEnd)
{
IPAddress test_addr_2;
- SetupIPAddress(test_addr_2, theSecondContext);
+ SetupIPAddress(test_addr_2, lSecondCurrent);
- if (theFirstContext == theSecondContext)
+ if (lFirstCurrent == lSecondCurrent)
{
NL_TEST_ASSERT(inSuite, test_addr_1 == test_addr_2);
}
@@ -623,9 +886,11 @@
{
NL_TEST_ASSERT(inSuite, !(test_addr_1 == test_addr_2));
}
- theSecondContext++;
+
+ ++lSecondCurrent;
}
- theFirstContext++;
+
+ ++lFirstCurrent;
}
}
@@ -634,22 +899,25 @@
*/
static void CheckOperatorNotEqual(nlTestSuite *inSuite, void *inContext)
{
- struct TestContext *theFirstContext = static_cast<struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lFirstCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lFirstEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lFirstCurrent != lFirstEnd)
{
- IPAddress test_addr_1;
- struct TestContext *theSecondContext = static_cast<struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lSecondCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lSecondEnd = lContext->mIPAddressExpandedContextRange.mEnd;
+ IPAddress test_addr_1;
- SetupIPAddress(test_addr_1, theFirstContext);
+ SetupIPAddress(test_addr_1, lFirstCurrent);
- for (size_t jth = 0; jth < kTestElements; jth++)
+ while (lSecondCurrent != lSecondEnd)
{
IPAddress test_addr_2;
- SetupIPAddress(test_addr_2, theSecondContext);
+ SetupIPAddress(test_addr_2, lSecondCurrent);
- if (theFirstContext == theSecondContext)
+ if (lFirstCurrent == lSecondCurrent)
{
NL_TEST_ASSERT(inSuite, !(test_addr_1 != test_addr_2));
}
@@ -657,9 +925,11 @@
{
NL_TEST_ASSERT(inSuite, test_addr_1 != test_addr_2);
}
- theSecondContext++;
+
+ ++lSecondCurrent;
}
- theFirstContext++;
+
+ ++lFirstCurrent;
}
}
@@ -668,30 +938,31 @@
*/
static void CheckOperatorAssign(nlTestSuite *inSuite, void *inContext)
{
- struct TestContext *theFirstContext = static_cast<struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lFirstCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lFirstEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lFirstCurrent != lFirstEnd)
{
- struct TestContext *theSecondContext = static_cast<struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lSecondCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lSecondEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t jth = 0; jth < kTestElements; jth++)
+ while (lSecondCurrent != lSecondEnd)
{
IPAddress test_addr_1, test_addr_2;
ClearIPAddress(test_addr_1);
- SetupIPAddress(test_addr_2, theSecondContext);
+ SetupIPAddress(test_addr_2, lSecondCurrent);
// Use operator to assign IPAddress from test_addr_2 to test_addr_1
test_addr_1 = test_addr_2;
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[0] == test_addr_2.Addr[0]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[1] == test_addr_2.Addr[1]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[2] == test_addr_2.Addr[2]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[3] == test_addr_2.Addr[3]);
+ CheckAddressQuartets(inSuite, test_addr_1, test_addr_2);
- theSecondContext++;
+ ++lSecondCurrent;
}
- theFirstContext++;
+
+ ++lFirstCurrent;
}
}
@@ -700,19 +971,21 @@
*/
static void CheckToIPv6(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
uint32_t addr[4];
- addr[0] = htonl(theContext->addr[0]);
- addr[1] = htonl(theContext->addr[1]);
- addr[2] = htonl(theContext->addr[2]);
- addr[3] = htonl(theContext->addr[3]);
+ addr[0] = htonl(lCurrent->mAddr.mAddrQuartets[0]);
+ addr[1] = htonl(lCurrent->mAddr.mAddrQuartets[1]);
+ addr[2] = htonl(lCurrent->mAddr.mAddrQuartets[2]);
+ addr[3] = htonl(lCurrent->mAddr.mAddrQuartets[3]);
- SetupIPAddress(test_addr, theContext);
+ SetupIPAddress(test_addr, lCurrent);
#if WEAVE_SYSTEM_CONFIG_USE_LWIP
ip6_addr_t ip_addr_1, ip_addr_2;
@@ -725,7 +998,7 @@
NL_TEST_ASSERT(inSuite, !memcmp(&ip_addr_1, &ip_addr_2, sizeof(ip_addr_1)));
- theContext++;
+ ++lCurrent;
}
}
@@ -734,19 +1007,21 @@
*/
static void CheckFromIPv6(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr_1, test_addr_2;
uint32_t addr[4];
- addr[0] = htonl(theContext->addr[0]);
- addr[1] = htonl(theContext->addr[1]);
- addr[2] = htonl(theContext->addr[2]);
- addr[3] = htonl(theContext->addr[3]);
+ addr[0] = htonl(lCurrent->mAddr.mAddrQuartets[0]);
+ addr[1] = htonl(lCurrent->mAddr.mAddrQuartets[1]);
+ addr[2] = htonl(lCurrent->mAddr.mAddrQuartets[2]);
+ addr[3] = htonl(lCurrent->mAddr.mAddrQuartets[3]);
- SetupIPAddress(test_addr_1, theContext);
+ SetupIPAddress(test_addr_1, lCurrent);
ClearIPAddress(test_addr_2);
#if WEAVE_SYSTEM_CONFIG_USE_LWIP
@@ -758,12 +1033,9 @@
#endif
test_addr_2 = IPAddress::FromIPv6(ip_addr);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[0] == test_addr_2.Addr[0]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[1] == test_addr_2.Addr[1]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[2] == test_addr_2.Addr[2]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[3] == test_addr_2.Addr[3]);
+ CheckAddressQuartets(inSuite, test_addr_1, test_addr_2);
- theContext++;
+ ++lCurrent;
}
}
@@ -773,17 +1045,19 @@
*/
static void CheckIsIPv4(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
- SetupIPAddress(test_addr, theContext);
+ SetupIPAddress(test_addr, lCurrent);
- NL_TEST_ASSERT(inSuite, test_addr.IsIPv4() == theContext->isIPv4);
+ NL_TEST_ASSERT(inSuite, test_addr.IsIPv4() == lCurrent->isIPv4);
- theContext++;
+ ++lCurrent;
}
}
@@ -792,17 +1066,19 @@
*/
static void CheckIsIPv4Multicast(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
- SetupIPAddress(test_addr, theContext);
+ SetupIPAddress(test_addr, lCurrent);
- NL_TEST_ASSERT(inSuite, test_addr.IsIPv4Multicast() == theContext->isIPv4Multicast);
+ NL_TEST_ASSERT(inSuite, test_addr.IsIPv4Multicast() == lCurrent->isIPv4Multicast);
- theContext++;
+ ++lCurrent;
}
}
@@ -811,17 +1087,19 @@
*/
static void CheckIsIPv4Broadcast(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
- SetupIPAddress(test_addr, theContext);
+ SetupIPAddress(test_addr, lCurrent);
- NL_TEST_ASSERT(inSuite, test_addr.IsIPv4Broadcast() == theContext->isIPv4Broadcast);
+ NL_TEST_ASSERT(inSuite, test_addr.IsIPv4Broadcast() == lCurrent->isIPv4Broadcast);
- theContext++;
+ ++lCurrent;
}
}
@@ -830,28 +1108,30 @@
*/
static void CheckToIPv4(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
- SetupIPAddress(test_addr, theContext);
+ SetupIPAddress(test_addr, lCurrent);
#if WEAVE_SYSTEM_CONFIG_USE_LWIP
ip4_addr_t ip_addr_1, ip_addr_2;
- ip_addr_1.addr = htonl(theContext->addr[3]);
+ ip_addr_1.addr = htonl(lCurrent->mAddr.mAddrQuartets[3]);
#else
struct in_addr ip_addr_1, ip_addr_2;
- ip_addr_1.s_addr = htonl(theContext->addr[3]);
+ ip_addr_1.s_addr = htonl(lCurrent->mAddr.mAddrQuartets[3]);
#endif
ip_addr_2 = test_addr.ToIPv4();
NL_TEST_ASSERT(inSuite, !memcmp(&ip_addr_1, &ip_addr_2, sizeof(ip_addr_1)));
- theContext++;
+ ++lCurrent;
}
}
@@ -860,13 +1140,15 @@
*/
static void CheckFromIPv4(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr_1, test_addr_2;
- SetupIPAddress(test_addr_1, theContext);
+ SetupIPAddress(test_addr_1, lCurrent);
ClearIPAddress(test_addr_2);
// Convert to IPv4 (test_addr_1);
@@ -875,21 +1157,18 @@
#if WEAVE_SYSTEM_CONFIG_USE_LWIP
ip4_addr_t ip_addr;
- ip_addr.addr = htonl(theContext->addr[3]);
+ ip_addr.addr = htonl(lCurrent->mAddr.mAddrQuartets[3]);
test_addr_1.Addr[2] = lwip_htonl(0xffff);
#else
struct in_addr ip_addr;
- ip_addr.s_addr = htonl(theContext->addr[3]);
+ ip_addr.s_addr = htonl(lCurrent->mAddr.mAddrQuartets[3]);
test_addr_1.Addr[2] = htonl(0xffff);
#endif
test_addr_2 = IPAddress::FromIPv4(ip_addr);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[0] == test_addr_2.Addr[0]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[1] == test_addr_2.Addr[1]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[2] == test_addr_2.Addr[2]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[3] == test_addr_2.Addr[3]);
+ CheckAddressQuartets(inSuite, test_addr_1, test_addr_2);
- theContext++;
+ ++lCurrent;
}
}
#endif // INET_CONFIG_ENABLE_IPV4
@@ -903,9 +1182,11 @@
(void)inSuite;
// This test is only supported for non LWIP stack.
#else // INET_LWIP
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr_1, test_addr_2;
uint32_t addr[4];
@@ -914,15 +1195,15 @@
struct sockaddr_in sock_v4;
#endif // INET_CONFIG_ENABLE_IPV4
- addr[0] = htonl(theContext->addr[0]);
- addr[1] = htonl(theContext->addr[1]);
- addr[2] = htonl(theContext->addr[2]);
- addr[3] = htonl(theContext->addr[3]);
+ addr[0] = htonl(lCurrent->mAddr.mAddrQuartets[0]);
+ addr[1] = htonl(lCurrent->mAddr.mAddrQuartets[1]);
+ addr[2] = htonl(lCurrent->mAddr.mAddrQuartets[2]);
+ addr[3] = htonl(lCurrent->mAddr.mAddrQuartets[3]);
- SetupIPAddress(test_addr_1, theContext);
+ SetupIPAddress(test_addr_1, lCurrent);
ClearIPAddress(test_addr_2);
- switch (theContext->ipAddrType)
+ switch (lCurrent->mAddr.mAddrType)
{
#if INET_CONFIG_ENABLE_IPV4
case kIPAddressType_IPv4:
@@ -951,12 +1232,9 @@
continue;
}
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[0] == test_addr_2.Addr[0]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[1] == test_addr_2.Addr[1]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[2] == test_addr_2.Addr[2]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[3] == test_addr_2.Addr[3]);
+ CheckAddressQuartets(inSuite, test_addr_1, test_addr_2);
- theContext++;
+ ++lCurrent;
}
#endif // INET_LWIP
}
@@ -966,36 +1244,51 @@
*/
static void CheckType(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
- SetupIPAddress(test_addr, theContext);
+ SetupIPAddress(test_addr, lCurrent);
- NL_TEST_ASSERT(inSuite, test_addr.Type() == theContext->ipAddrType);
+ NL_TEST_ASSERT(inSuite, test_addr.Type() == lCurrent->mAddr.mAddrType);
- theContext++;
+ ++lCurrent;
}
}
/**
+ * Test the Any address global.
+ */
+static void CheckAnyAddress(nlTestSuite *inSuite, void *inContext)
+{
+ const IPAddress test_addr = IPAddress::Any;
+ IPAddressType test_type = test_addr.Type();
+
+ NL_TEST_ASSERT(inSuite, test_type == kIPAddressType_Any);
+}
+
+/**
* Test IP address interface ID.
*/
static void CheckInterface(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
- SetupIPAddress(test_addr, theContext);
+ SetupIPAddress(test_addr, lCurrent);
- NL_TEST_ASSERT(inSuite, test_addr.InterfaceId() == theContext->interface);
+ NL_TEST_ASSERT(inSuite, test_addr.InterfaceId() == lCurrent->interface);
- theContext++;
+ ++lCurrent;
}
}
@@ -1004,17 +1297,19 @@
*/
static void CheckSubnet(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
- SetupIPAddress(test_addr, theContext);
+ SetupIPAddress(test_addr, lCurrent);
- NL_TEST_ASSERT(inSuite, test_addr.Subnet() == theContext->subnet);
+ NL_TEST_ASSERT(inSuite, test_addr.Subnet() == lCurrent->subnet);
- theContext++;
+ ++lCurrent;
}
}
@@ -1023,17 +1318,19 @@
*/
static void CheckGlobal(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
- SetupIPAddress(test_addr, theContext);
+ SetupIPAddress(test_addr, lCurrent);
- NL_TEST_ASSERT(inSuite, test_addr.GlobalId() == theContext->global);
+ NL_TEST_ASSERT(inSuite, test_addr.GlobalId() == lCurrent->global);
- theContext++;
+ ++lCurrent;
}
}
@@ -1042,15 +1339,17 @@
*/
static void CheckEncoding(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
uint8_t *p;
uint8_t buffer[NUM_BYTES_IN_IPV6];
- SetupIPAddress(test_addr, theContext);
+ SetupIPAddress(test_addr, lCurrent);
memset(&buffer, 0, NUM_BYTES_IN_IPV6);
p = buffer;
@@ -1058,27 +1357,27 @@
test_addr.WriteAddress(p);
// buffer has address in network byte order
- NL_TEST_ASSERT(inSuite, buffer[3] == (uint8_t)(theContext->addr[0]));
- NL_TEST_ASSERT(inSuite, buffer[2] == (uint8_t)(theContext->addr[0] >> 8));
- NL_TEST_ASSERT(inSuite, buffer[1] == (uint8_t)(theContext->addr[0] >> 16));
- NL_TEST_ASSERT(inSuite, buffer[0] == (uint8_t)(theContext->addr[0] >> 24));
+ NL_TEST_ASSERT(inSuite, buffer[3] == (uint8_t)(lCurrent->mAddr.mAddrQuartets[0]));
+ NL_TEST_ASSERT(inSuite, buffer[2] == (uint8_t)(lCurrent->mAddr.mAddrQuartets[0] >> 8));
+ NL_TEST_ASSERT(inSuite, buffer[1] == (uint8_t)(lCurrent->mAddr.mAddrQuartets[0] >> 16));
+ NL_TEST_ASSERT(inSuite, buffer[0] == (uint8_t)(lCurrent->mAddr.mAddrQuartets[0] >> 24));
- NL_TEST_ASSERT(inSuite, buffer[7] == (uint8_t)(theContext->addr[1]));
- NL_TEST_ASSERT(inSuite, buffer[6] == (uint8_t)(theContext->addr[1] >> 8));
- NL_TEST_ASSERT(inSuite, buffer[5] == (uint8_t)(theContext->addr[1] >> 16));
- NL_TEST_ASSERT(inSuite, buffer[4] == (uint8_t)(theContext->addr[1] >> 24));
+ NL_TEST_ASSERT(inSuite, buffer[7] == (uint8_t)(lCurrent->mAddr.mAddrQuartets[1]));
+ NL_TEST_ASSERT(inSuite, buffer[6] == (uint8_t)(lCurrent->mAddr.mAddrQuartets[1] >> 8));
+ NL_TEST_ASSERT(inSuite, buffer[5] == (uint8_t)(lCurrent->mAddr.mAddrQuartets[1] >> 16));
+ NL_TEST_ASSERT(inSuite, buffer[4] == (uint8_t)(lCurrent->mAddr.mAddrQuartets[1] >> 24));
- NL_TEST_ASSERT(inSuite, buffer[11] == (uint8_t)(theContext->addr[2]));
- NL_TEST_ASSERT(inSuite, buffer[10] == (uint8_t)(theContext->addr[2] >> 8));
- NL_TEST_ASSERT(inSuite, buffer[9] == (uint8_t)(theContext->addr[2] >> 16));
- NL_TEST_ASSERT(inSuite, buffer[8] == (uint8_t)(theContext->addr[2] >> 24));
+ NL_TEST_ASSERT(inSuite, buffer[11] == (uint8_t)(lCurrent->mAddr.mAddrQuartets[2]));
+ NL_TEST_ASSERT(inSuite, buffer[10] == (uint8_t)(lCurrent->mAddr.mAddrQuartets[2] >> 8));
+ NL_TEST_ASSERT(inSuite, buffer[9] == (uint8_t)(lCurrent->mAddr.mAddrQuartets[2] >> 16));
+ NL_TEST_ASSERT(inSuite, buffer[8] == (uint8_t)(lCurrent->mAddr.mAddrQuartets[2] >> 24));
- NL_TEST_ASSERT(inSuite, buffer[15] == (uint8_t)(theContext->addr[3]));
- NL_TEST_ASSERT(inSuite, buffer[14] == (uint8_t)(theContext->addr[3] >> 8));
- NL_TEST_ASSERT(inSuite, buffer[13] == (uint8_t)(theContext->addr[3] >> 16));
- NL_TEST_ASSERT(inSuite, buffer[12] == (uint8_t)(theContext->addr[3] >> 24));
+ NL_TEST_ASSERT(inSuite, buffer[15] == (uint8_t)(lCurrent->mAddr.mAddrQuartets[3]));
+ NL_TEST_ASSERT(inSuite, buffer[14] == (uint8_t)(lCurrent->mAddr.mAddrQuartets[3] >> 8));
+ NL_TEST_ASSERT(inSuite, buffer[13] == (uint8_t)(lCurrent->mAddr.mAddrQuartets[3] >> 16));
+ NL_TEST_ASSERT(inSuite, buffer[12] == (uint8_t)(lCurrent->mAddr.mAddrQuartets[3] >> 24));
- theContext++;
+ ++lCurrent;
}
}
@@ -1087,34 +1386,33 @@
*/
static void CheckDecoding(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr_1, test_addr_2;
uint8_t buffer[NUM_BYTES_IN_IPV6];
- uint8_t *p;
+ const uint8_t *p;
uint8_t b;
- SetupIPAddress(test_addr_1, theContext);
+ SetupIPAddress(test_addr_1, lCurrent);
ClearIPAddress(test_addr_2);
memset(&buffer, 0, NUM_BYTES_IN_IPV6);
p = buffer;
for (b = 0; b < NUM_BYTES_IN_IPV6; b++)
{
- buffer[b] = (uint8_t)(theContext->addr[b / 4] >> ((3 - b % 4) * 8));
+ buffer[b] = (uint8_t)(lCurrent->mAddr.mAddrQuartets[b / 4] >> ((3 - b % 4) * 8));
}
// Call ReadAddress function that we test.
IPAddress::ReadAddress(const_cast<const uint8_t *&>(p), test_addr_2);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[0] == test_addr_2.Addr[0]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[1] == test_addr_2.Addr[1]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[2] == test_addr_2.Addr[2]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[3] == test_addr_2.Addr[3]);
+ CheckAddressQuartets(inSuite, test_addr_1, test_addr_2);
- theContext++;
+ ++lCurrent;
}
}
@@ -1123,15 +1421,17 @@
*/
static void CheckEcodeDecodeSymmetricity(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr_1, test_addr_2;
uint8_t buffer[NUM_BYTES_IN_IPV6];
uint8_t *p;
- SetupIPAddress(test_addr_1, theContext);
+ SetupIPAddress(test_addr_1, lCurrent);
ClearIPAddress(test_addr_2);
memset(&buffer, 0, NUM_BYTES_IN_IPV6);
@@ -1146,12 +1446,9 @@
// Call ReadAddress function that we test.
IPAddress::ReadAddress(const_cast<const uint8_t *&>(p), test_addr_2);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[0] == test_addr_2.Addr[0]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[1] == test_addr_2.Addr[1]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[2] == test_addr_2.Addr[2]);
- NL_TEST_ASSERT(inSuite, test_addr_1.Addr[3] == test_addr_2.Addr[3]);
+ CheckAddressQuartets(inSuite, test_addr_1, test_addr_2);
- theContext++;
+ ++lCurrent;
}
}
@@ -1160,24 +1457,26 @@
*/
static void CheckMakeULA(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
// Call MakeULA function that we test.
- test_addr = IPAddress::MakeULA(theContext->global, theContext->subnet,
- theContext->interface);
+ test_addr = IPAddress::MakeULA(lCurrent->global, lCurrent->subnet,
+ lCurrent->interface);
NL_TEST_ASSERT(inSuite, test_addr.Addr[0] ==
- htonl(ULA_PREFIX | (theContext->global & ULA_UP_24_BIT_MASK) >> 16));
+ htonl(ULA_PREFIX | (lCurrent->global & ULA_UP_24_BIT_MASK) >> 16));
NL_TEST_ASSERT(inSuite, test_addr.Addr[1] ==
- htonl((theContext->global & ULA_LO_16_BIT_MASK) << 16 | theContext->subnet));
- NL_TEST_ASSERT(inSuite, test_addr.Addr[2] == htonl(theContext->interface >> 32));
- NL_TEST_ASSERT(inSuite, test_addr.Addr[3] == htonl(theContext->interface));
+ htonl((lCurrent->global & ULA_LO_16_BIT_MASK) << 16 | lCurrent->subnet));
+ NL_TEST_ASSERT(inSuite, test_addr.Addr[2] == htonl(lCurrent->interface >> 32));
+ NL_TEST_ASSERT(inSuite, test_addr.Addr[3] == htonl(lCurrent->interface));
- theContext++;
+ ++lCurrent;
}
}
@@ -1186,63 +1485,179 @@
*/
static void CheckMakeLLA(nlTestSuite *inSuite, void *inContext)
{
- const struct TestContext *theContext = static_cast<const struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPAddress test_addr;
// Call MakeLLA function that we test.
- test_addr = IPAddress::MakeLLA(theContext->interface);
+ test_addr = IPAddress::MakeLLA(lCurrent->interface);
NL_TEST_ASSERT(inSuite, test_addr.Addr[0] == htonl(LLA_PREFIX));
NL_TEST_ASSERT(inSuite, test_addr.Addr[1] == 0);
- NL_TEST_ASSERT(inSuite, test_addr.Addr[2] == htonl(theContext->interface >> 32));
- NL_TEST_ASSERT(inSuite, test_addr.Addr[3] == htonl(theContext->interface));
+ NL_TEST_ASSERT(inSuite, test_addr.Addr[2] == htonl(lCurrent->interface >> 32));
+ NL_TEST_ASSERT(inSuite, test_addr.Addr[3] == htonl(lCurrent->interface));
- theContext++;
+ ++lCurrent;
}
}
-/**
- * Test assembling IPv6 Multicast address.
- */
-static void CheckMakeIPv6Multicast(nlTestSuite *inSuite, void *inContext)
+static void CheckMakeIPv6WellKnownMulticast(nlTestSuite *inSuite, void *inContext)
{
- int s, g;
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressContextIterator lCurrent = lContext->mIPv6WellKnownMulticastContextRange.mBegin;
+ IPAddressContextIterator lEnd = lContext->mIPv6WellKnownMulticastContextRange.mEnd;
+ size_t lGroupIndex;
+ size_t lScopeIndex;
+ IPAddress lAddress;
- IPv6MulticastScope scope[NUM_MCAST_SCOPES] =
+ if (lCurrent != lEnd)
{
- kIPv6MulticastScope_Interface,
- kIPv6MulticastScope_Link,
-#if INET_CONFIG_ENABLE_IPV4
- kIPv6MulticastScope_IPv4,
-#endif // INET_CONFIG_ENABLE_IPV4
- kIPv6MulticastScope_Admin,
- kIPv6MulticastScope_Site,
- kIPv6MulticastScope_Organization,
- kIPv6MulticastScope_Global
- };
-
- IPV6MulticastGroup group[NUM_MCAST_GROUPS] =
- {
- kIPV6MulticastGroup_AllNodes,
- kIPV6MulticastGroup_AllRouters
- };
-
- for (s = 0; s < NUM_MCAST_SCOPES; s++)
- {
- for (g = 0; g < NUM_MCAST_GROUPS; g++)
+ for (lGroupIndex = 0; lGroupIndex < NUM_MCAST_GROUPS && (lCurrent != lEnd); lGroupIndex++)
{
- IPAddress test_addr;
+ for (lScopeIndex = 0; lScopeIndex < NUM_MCAST_SCOPES && (lCurrent != lEnd); lScopeIndex++)
+ {
+ const IPv6MulticastScope lScope = sIPv6MulticastScopes[lScopeIndex];
+ const IPV6MulticastGroup lGroup = sIPv6WellKnownMulticastGroups[lGroupIndex];
- // Call MakeIPv6Multicast function that we test.
- test_addr = IPAddress::MakeIPv6Multicast(scope[s], group[g]);
- NL_TEST_ASSERT(inSuite, test_addr.Addr[0] == htonl(MCAST_PREFIX | (scope[s] << 16)));
- NL_TEST_ASSERT(inSuite, test_addr.Addr[1] == 0);
- NL_TEST_ASSERT(inSuite, test_addr.Addr[2] == 0);
- NL_TEST_ASSERT(inSuite, test_addr.Addr[3] == htonl(group[g]));
+ lAddress = IPAddress::MakeIPv6WellKnownMulticast(lScope, lGroup);
+
+ CheckAddress(inSuite, *lCurrent, lAddress);
+
+ ++lCurrent;
+ }
+ }
+ }
+}
+
+static void CheckMakeIPv6TransientMulticast(nlTestSuite *inSuite, void *inContext)
+{
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressContextIterator lCurrent = lContext->mIPv6TransientMulticastContextRange.mBegin;
+ IPAddressContextIterator lEnd = lContext->mIPv6TransientMulticastContextRange.mEnd;
+ const uint8_t lFlags = 0;
+ size_t lScopeIndex;
+ IPAddress lAddress;
+
+ if (lCurrent != lEnd)
+ {
+ // Short Transient Group in Various Scopes
+
+ for (lScopeIndex = 0; lScopeIndex < NUM_MCAST_SCOPES && (lCurrent != lEnd); lScopeIndex++)
+ {
+ const IPv6MulticastScope lScope = sIPv6MulticastScopes[lScopeIndex];
+ const uint8_t lGroup[NL_INET_IPV6_MCAST_GROUP_LEN_IN_BYTES] =
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 };
+
+ lAddress = IPAddress::MakeIPv6TransientMulticast(lFlags, lScope, lGroup);
+
+ CheckAddress(inSuite, *lCurrent, lAddress);
+
+ ++lCurrent;
+ }
+
+ // Long Transient Group in Various Scopes
+
+ for (lScopeIndex = 0; lScopeIndex < NUM_MCAST_SCOPES && (lCurrent != lEnd); lScopeIndex++)
+ {
+ const IPv6MulticastScope lScope = sIPv6MulticastScopes[lScopeIndex];
+ const uint8_t lGroup[NL_INET_IPV6_MCAST_GROUP_LEN_IN_BYTES] =
+ { 0xd5, 0xd6, 0x2b, 0xa2, 0x78, 0x47, 0x64,
+ 0x52, 0x58, 0x7a, 0xc9, 0x55, 0x0b, 0x5a };
+
+ lAddress = IPAddress::MakeIPv6TransientMulticast(lFlags, lScope, lGroup);
+
+ CheckAddress(inSuite, *lCurrent, lAddress);
+
+ ++lCurrent;
+ }
+ }
+}
+
+static void CheckMakeIPv6PrefixMulticast(nlTestSuite *inSuite, void *inContext)
+{
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressContextIterator lCurrent = lContext->mIPv6PrefixMulticastContextRange.mBegin;
+ IPAddressContextIterator lEnd = lContext->mIPv6PrefixMulticastContextRange.mEnd;
+ uint8_t lPrefixLength;
+ uint64_t lPrefix;
+ uint32_t lGroup;
+ size_t lScopeIndex;
+ IPAddress lAddress;
+
+ if (lCurrent != lEnd)
+ {
+ // 56-bit Prefix with Short Group in Various Scopes
+
+ lPrefixLength = 56;
+ lPrefix = 0x373acba4d2ad8d00;
+ lGroup = 0x1;
+
+ for (lScopeIndex = 0; lScopeIndex < NUM_MCAST_SCOPES && (lCurrent != lEnd); lScopeIndex++)
+ {
+ const IPv6MulticastScope lScope = sIPv6MulticastScopes[lScopeIndex];
+
+ lAddress = IPAddress::MakeIPv6PrefixMulticast(lScope, lPrefixLength, lPrefix, lGroup);
+
+ CheckAddress(inSuite, *lCurrent, lAddress);
+
+ ++lCurrent;
+ }
+
+ // 56-bit Prefix with Long Group in Various Scopes
+
+ lPrefixLength = 56;
+ lPrefix = 0x373acba4d2ad8d00;
+ lGroup = 0xafff5258;
+
+ for (lScopeIndex = 0; lScopeIndex < NUM_MCAST_SCOPES && (lCurrent != lEnd); lScopeIndex++)
+ {
+ const IPv6MulticastScope lScope = sIPv6MulticastScopes[lScopeIndex];
+
+ lAddress = IPAddress::MakeIPv6PrefixMulticast(lScope, lPrefixLength, lPrefix, lGroup);
+
+ CheckAddress(inSuite, *lCurrent, lAddress);
+
+ ++lCurrent;
+ }
+
+ // 64-bit Prefix with Short Group in Various Scopes
+
+ lPrefixLength = 64;
+ lPrefix = 0x66643dfbafa4385b;
+ lGroup = 0x1;
+
+ for (lScopeIndex = 0; lScopeIndex < NUM_MCAST_SCOPES && (lCurrent != lEnd); lScopeIndex++)
+ {
+ const IPv6MulticastScope lScope = sIPv6MulticastScopes[lScopeIndex];
+
+ lAddress = IPAddress::MakeIPv6PrefixMulticast(lScope, lPrefixLength, lPrefix, lGroup);
+
+ CheckAddress(inSuite, *lCurrent, lAddress);
+
+ ++lCurrent;
+ }
+
+ // 64-bit Prefix with Long Group in Various Scopes
+
+ lPrefixLength = 64;
+ lPrefix = 0x66643dfbafa4385b;
+ lGroup = 0xafff5258;
+
+ for (lScopeIndex = 0; lScopeIndex < NUM_MCAST_SCOPES && (lCurrent != lEnd); lScopeIndex++)
+ {
+ const IPv6MulticastScope lScope = sIPv6MulticastScopes[lScopeIndex];
+
+ lAddress = IPAddress::MakeIPv6PrefixMulticast(lScope, lPrefixLength, lPrefix, lGroup);
+
+ CheckAddress(inSuite, *lCurrent, lAddress);
+
+ ++lCurrent;
}
}
}
@@ -1252,16 +1667,20 @@
*/
static void CheckIPPrefix(nlTestSuite *inSuite, void *inContext)
{
- struct TestContext *theFirstContext = static_cast<struct TestContext *>(inContext);
+ const struct TestContext * lContext = static_cast<const struct TestContext *>(inContext);
+ IPAddressExpandedContextIterator lCurrent = lContext->mIPAddressExpandedContextRange.mBegin;
+ IPAddressExpandedContextIterator lEnd = lContext->mIPAddressExpandedContextRange.mEnd;
+ size_t i = 0;
- for (size_t ith = 0; ith < kTestElements; ith++)
+ while (lCurrent != lEnd)
{
IPPrefix ipprefix_1, ipprefix_2;
IPAddress test_addr_1;
- SetupIPAddress(test_addr_1, theFirstContext);
+ SetupIPAddress(test_addr_1, lCurrent);
+
ipprefix_1.IPAddr = test_addr_1;
- ipprefix_1.Length = 128 - ith;
+ ipprefix_1.Length = 128 - (i++ % 128);
ipprefix_2 = ipprefix_1;
NL_TEST_ASSERT(inSuite, !ipprefix_1.IsZero());
@@ -1271,45 +1690,47 @@
#if !WEAVE_SYSTEM_CONFIG_USE_LWIP
NL_TEST_ASSERT(inSuite, ipprefix_1.MatchAddress(test_addr_1));
#endif
- theFirstContext++;
+ ++lCurrent;
}
}
-// Test Suite
-
/**
* Test Suite. It lists all the test functions.
*/
static const nlTest sTests[] = {
- NL_TEST_DEF("From String Conversion", CheckFromString),
+ NL_TEST_DEF("Address Type", CheckType),
+ NL_TEST_DEF("Any Address Global", CheckAnyAddress),
+ NL_TEST_DEF("Address Encoding (Writing)", CheckEncoding),
+ NL_TEST_DEF("Address Decoding (Reading)", CheckDecoding),
+ NL_TEST_DEF("Address Encode / Decode Symmetricity", CheckEcodeDecodeSymmetricity),
+ NL_TEST_DEF("From String Conversion", CheckFromString),
+ NL_TEST_DEF("To String Conversion", CheckToString),
#if INET_CONFIG_ENABLE_IPV4
- NL_TEST_DEF("IPv4 Detection", CheckIsIPv4),
- NL_TEST_DEF("IPv4 Multicast Detection", CheckIsIPv4Multicast),
- NL_TEST_DEF("IPv4 Broadcast Detection", CheckIsIPv4Broadcast),
- NL_TEST_DEF("Convert IPv4 to IPAddress", CheckFromIPv4),
- NL_TEST_DEF("Convert IPAddress to IPv4", CheckToIPv4),
+ NL_TEST_DEF("IPv4 Detection", CheckIsIPv4),
+ NL_TEST_DEF("IPv4 Multicast Detection", CheckIsIPv4Multicast),
+ NL_TEST_DEF("IPv4 Broadcast Detection", CheckIsIPv4Broadcast),
+ NL_TEST_DEF("Convert IPv4 to IPAddress", CheckFromIPv4),
+ NL_TEST_DEF("Convert IPAddress to IPv4", CheckToIPv4),
#endif // INET_CONFIG_ENABLE_IPV4
- NL_TEST_DEF("IPv6 ULA Detection", CheckIsIPv6ULA),
- NL_TEST_DEF("IPv6 Link Local Detection", CheckIsIPv6LLA),
- NL_TEST_DEF("IPv6 Multicast Detection", CheckIsIPv6Multicast),
- NL_TEST_DEF("Multicast Detection", CheckIsMulticast),
- NL_TEST_DEF("Equivalence Operator", CheckOperatorEqual),
- NL_TEST_DEF("Non-Equivalence Operator", CheckOperatorNotEqual),
- NL_TEST_DEF("Assign Operator", CheckOperatorAssign),
- NL_TEST_DEF("Convert IPv6 to IPAddress", CheckFromIPv6),
- NL_TEST_DEF("Convert IPAddress to IPv6", CheckToIPv6),
- NL_TEST_DEF("Assign address from socket", CheckFromSocket),
- NL_TEST_DEF("Address Type", CheckType),
- NL_TEST_DEF("Address Interface ID", CheckInterface),
- NL_TEST_DEF("Address Subnet", CheckSubnet),
- NL_TEST_DEF("Address Global ID", CheckGlobal),
- NL_TEST_DEF("Assemble IPv6 ULA address", CheckMakeULA),
- NL_TEST_DEF("Assemble IPv6 LLA address", CheckMakeLLA),
- NL_TEST_DEF("Assemble IPv6 Multicast address", CheckMakeIPv6Multicast),
- NL_TEST_DEF("Weave Encoding", CheckEncoding),
- NL_TEST_DEF("Weave Decoding", CheckDecoding),
- NL_TEST_DEF("Weave Encode / Decode Symmetricity", CheckEcodeDecodeSymmetricity),
- NL_TEST_DEF("IPPrefix test", CheckIPPrefix),
+ NL_TEST_DEF("IPv6 ULA Detection", CheckIsIPv6ULA),
+ NL_TEST_DEF("IPv6 Link Local Detection", CheckIsIPv6LLA),
+ NL_TEST_DEF("IPv6 Multicast Detection", CheckIsIPv6Multicast),
+ NL_TEST_DEF("Multicast Detection", CheckIsMulticast),
+ NL_TEST_DEF("Equivalence Operator", CheckOperatorEqual),
+ NL_TEST_DEF("Non-Equivalence Operator", CheckOperatorNotEqual),
+ NL_TEST_DEF("Assign Operator", CheckOperatorAssign),
+ NL_TEST_DEF("Convert IPv6 to IPAddress", CheckFromIPv6),
+ NL_TEST_DEF("Convert IPAddress to IPv6", CheckToIPv6),
+ NL_TEST_DEF("Assign address from socket", CheckFromSocket),
+ NL_TEST_DEF("Address Interface ID", CheckInterface),
+ NL_TEST_DEF("Address Subnet", CheckSubnet),
+ NL_TEST_DEF("Address Global ID", CheckGlobal),
+ NL_TEST_DEF("Assemble IPv6 ULA address", CheckMakeULA),
+ NL_TEST_DEF("Assemble IPv6 LLA address", CheckMakeLLA),
+ NL_TEST_DEF("Assemble IPv6 Well-known Multicast address", CheckMakeIPv6WellKnownMulticast),
+ NL_TEST_DEF("Assemble IPv6 Transient Multicast address", CheckMakeIPv6TransientMulticast),
+ NL_TEST_DEF("Assemble IPv6 Prefix Multicast address", CheckMakeIPv6PrefixMulticast),
+ NL_TEST_DEF("IPPrefix test", CheckIPPrefix),
NL_TEST_SENTINEL()
};
@@ -1342,7 +1763,7 @@
nl_test_set_output_style(OUTPUT_CSV);
// Run test suit againt one context.
- nlTestRunner(&theSuite, const_cast<struct TestContext *>(&sContext[0]));
+ nlTestRunner(&theSuite, const_cast<TestContext *>(&sTestContext));
return nlTestRunnerStats(&theSuite);
}