Skip to content

Commit 0c1dca5

Browse files
jukkarkartben
authored andcommitted
tests: net: ipv6: Test deprecated address selection
Make sure deprecated address is selected if no other address is available. Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
1 parent aef83fc commit 0c1dca5

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

tests/net/ip-addr/src/main.c

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,10 +224,21 @@ ZTEST(ip_addr_fn, test_ipv6_addresses)
224224
0, 0, 0, 0, 0, 0, 0, 0x2 } } };
225225
struct in6_addr addr6_pref3 = { { { 0x20, 0x01, 0x0d, 0xb8, 0x64, 0, 0,
226226
0, 0, 0, 0, 0, 0, 0, 0, 0x2 } } };
227+
struct in6_addr ula = { { { 0xfc, 0x00, 0xaa, 0xaa, 0, 0, 0, 0,
228+
0, 0, 0, 0, 0xd1, 0xd2, 0xd3, 0xd4 } } };
229+
struct in6_addr ula2 = { { { 0xfc, 0x00, 0xaa, 0xaa, 0, 0, 0, 0,
230+
0, 0, 0, 0, 0x1, 0x2, 0x3, 0x4 } } };
231+
struct in6_addr ula3 = { { { 0xfc, 0x00, 0xaa, 0xaa, 0, 0, 0, 0,
232+
0, 0, 0, 0, 0xf1, 0xf2, 0xf3, 0xf4 } } };
233+
struct in6_addr ula4 = { { { 0xfc, 0x00, 0xaa, 0xaa, 0, 0, 0, 0,
234+
0, 0, 0, 0, 0xf1, 0xf2, 0xf3, 0xf5 } } };
235+
struct in6_addr ula5 = { { { 0xfc, 0x00, 0xaa, 0xaa, 0, 0, 0, 0,
236+
0, 0, 0, 0, 0xf1, 0xf2, 0xf3, 0xf6 } } };
227237
struct in6_addr *tmp;
228238
const struct in6_addr *out;
229239
struct net_if_addr *ifaddr1, *ifaddr2;
230240
struct net_if_mcast_addr *ifmaddr1;
241+
struct net_if_ipv6_prefix *prefix;
231242
struct net_if *iface;
232243
int i;
233244

@@ -369,6 +380,81 @@ ZTEST(ip_addr_fn, test_ipv6_addresses)
369380
"IPv6 removing address failed\n");
370381
zassert_true(net_if_ipv6_addr_rm(default_iface, &addr6_pref2),
371382
"IPv6 removing address failed\n");
383+
384+
/**TESTPOINTS: Check what IPv6 address is selected when some
385+
* addresses are in preferred state and some in deprecated state.
386+
*/
387+
ifaddr2 = net_if_ipv6_addr_add(default_iface, &ula,
388+
NET_ADDR_AUTOCONF, 0);
389+
zassert_not_null(ifaddr2, "IPv6 ula address add failed");
390+
391+
ifaddr2->addr_state = NET_ADDR_PREFERRED;
392+
393+
out = net_if_ipv6_select_src_addr(default_iface, &ula2);
394+
zassert_not_null(out, "IPv6 src ula addr selection failed, "
395+
"iface %p\n", default_iface);
396+
397+
DBG("Selected IPv6 address %s, iface %p\n",
398+
net_sprint_ipv6_addr(out), iface);
399+
400+
zassert_false(memcmp(out->s6_addr, &ula.s6_addr, sizeof(struct in6_addr)),
401+
"IPv6 wrong src ula address selected, iface %p\n", iface);
402+
403+
/* Allow selection of deprecated address if no other address
404+
* is available.
405+
*/
406+
ifaddr2->addr_state = NET_ADDR_DEPRECATED;
407+
408+
out = net_if_ipv6_select_src_addr(default_iface, &ula3);
409+
zassert_not_null(out, "IPv6 src ula addr selection failed, "
410+
"iface %p\n", default_iface);
411+
412+
/* Then add another address with preferred state and check that we
413+
* still select the deprecated address as it is a better match.
414+
*/
415+
ifaddr2 = net_if_ipv6_addr_add(default_iface, &ula3,
416+
NET_ADDR_AUTOCONF, 0);
417+
zassert_not_null(ifaddr2, "IPv6 ula address add failed");
418+
419+
ifaddr2->addr_state = NET_ADDR_PREFERRED;
420+
421+
out = net_if_ipv6_select_src_addr(default_iface, &ula2);
422+
zassert_not_null(out, "IPv6 src ula addr selection failed, "
423+
"iface %p\n", default_iface);
424+
425+
DBG("Selected IPv6 address %s, iface %p\n",
426+
net_sprint_ipv6_addr(out), iface);
427+
428+
zassert_false(memcmp(out->s6_addr, &ula3.s6_addr, sizeof(struct in6_addr)),
429+
"IPv6 wrong src ula address selected, iface %p\n", iface);
430+
431+
zassert_true(net_if_ipv6_addr_rm(default_iface, &ula),
432+
"IPv6 removing address failed\n");
433+
434+
prefix = net_if_ipv6_prefix_add(default_iface, &ula4, 96, 3600);
435+
zassert_not_null(prefix, "IPv6 ula prefix add failed");
436+
437+
ifaddr1 = net_if_ipv6_addr_add(default_iface, &ula4,
438+
NET_ADDR_AUTOCONF, 0);
439+
zassert_not_null(ifaddr1, "IPv6 ula address add failed");
440+
441+
ifaddr2->addr_state = NET_ADDR_DEPRECATED;
442+
443+
out = net_if_ipv6_select_src_addr(default_iface, &ula5);
444+
zassert_not_null(out, "IPv6 src ula addr selection failed, "
445+
"iface %p\n", default_iface);
446+
447+
DBG("Selected IPv6 address %s, iface %p\n",
448+
net_sprint_ipv6_addr(out), iface);
449+
450+
zassert_false(memcmp(out->s6_addr, &ula4.s6_addr, sizeof(struct in6_addr)),
451+
"IPv6 wrong src ula address selected, iface %p\n", iface);
452+
453+
zassert_true(net_if_ipv6_addr_rm(default_iface, &ula3),
454+
"IPv6 removing address failed\n");
455+
456+
zassert_true(net_if_ipv6_addr_rm(default_iface, &ula4),
457+
"IPv6 removing address failed\n");
372458
}
373459

374460
ZTEST(ip_addr_fn, test_ipv4_ll_address_select_default_first)

0 commit comments

Comments
 (0)