Skip to content

Commit 01fa8a6

Browse files
committed
tests: net: if: Test userspace support in net_if
Add more tests to test userspace enabled APIs. Signed-off-by: Jukka Rissanen <[email protected]>
1 parent 041cd5f commit 01fa8a6

File tree

3 files changed

+189
-6
lines changed

3 files changed

+189
-6
lines changed

tests/net/iface/prj.conf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@ CONFIG_NET_BUF_RX_COUNT=10
1919
CONFIG_NET_BUF_TX_COUNT=10
2020
CONFIG_NET_IF_MAX_IPV6_COUNT=3
2121
CONFIG_NET_IF_UNICAST_IPV6_ADDR_COUNT=6
22+
CONFIG_NET_IF_UNICAST_IPV4_ADDR_COUNT=2
2223
CONFIG_NET_MAX_NEXTHOPS=8
2324
CONFIG_NET_IPV6_MAX_NEIGHBORS=8
2425
CONFIG_NET_IPV6_ND=n
2526
CONFIG_ZTEST=y
27+
CONFIG_NET_IF_MAX_IPV4_COUNT=4
28+
CONFIG_NET_IF_MAX_IPV6_COUNT=4
29+
CONFIG_TEST_USERSPACE=y
30+
CONFIG_NET_IF_USERSPACE_ACCESS=y

tests/net/iface/src/main.c

Lines changed: 175 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -618,6 +618,167 @@ static void set_promisc_mode_off(void)
618618
net_if_unset_promisc(iface4);
619619
}
620620

621+
static struct in_addr my_ipv4_addr_test = { { { 10, 0, 0, 1 } } };
622+
static struct in_addr my_ipv4_addr_not_found = { { { 1, 2, 3, 4 } } };
623+
624+
static void v4_addr_add(void)
625+
{
626+
bool ret;
627+
628+
ret = net_if_ipv4_addr_add_by_index(1, &my_ipv4_addr_test,
629+
NET_ADDR_MANUAL, 0);
630+
zassert_true(ret, "Cannot add IPv4 address");
631+
}
632+
633+
static void v4_addr_lookup(void)
634+
{
635+
int ret;
636+
637+
ret = net_if_ipv4_addr_lookup_by_index(&my_ipv4_addr_test);
638+
zassert_equal(ret, 1, "IPv4 address not found");
639+
640+
ret = net_if_ipv4_addr_lookup_by_index(&my_ipv4_addr_not_found);
641+
zassert_not_equal(ret, 1, "IPv4 address found");
642+
}
643+
644+
static void v4_addr_rm(void)
645+
{
646+
bool ret;
647+
648+
ret = net_if_ipv4_addr_rm_by_index(1, &my_ipv4_addr_test);
649+
zassert_true(ret, "Cannot remove IPv4 address");
650+
}
651+
652+
#define MY_ADDR_V4_USER { { { 10, 0, 0, 2 } } }
653+
#define UNKNOWN_ADDR_V4_USER { { { 5, 6, 7, 8 } } }
654+
655+
static void v4_addr_add_user(void)
656+
{
657+
struct in_addr my_addr = MY_ADDR_V4_USER;
658+
bool ret;
659+
660+
ret = net_if_ipv4_addr_add_by_index(1, &my_addr, NET_ADDR_MANUAL, 0);
661+
if (IS_ENABLED(CONFIG_NET_IF_USERSPACE_ACCESS)) {
662+
zassert_true(ret, "Cannot add IPv4 address");
663+
} else if (IS_ENABLED(CONFIG_USERSPACE)) {
664+
zassert_false(ret, "Could add IPv4 address");
665+
} else {
666+
zassert_true(ret, "Cannot add IPv4 address");
667+
}
668+
}
669+
670+
static void v4_addr_lookup_user(void)
671+
{
672+
struct in_addr my_addr = MY_ADDR_V4_USER;
673+
struct in_addr unknown_addr = UNKNOWN_ADDR_V4_USER;
674+
int ret;
675+
676+
if (IS_ENABLED(CONFIG_NET_IF_USERSPACE_ACCESS)) {
677+
ret = net_if_ipv4_addr_lookup_by_index(&my_addr);
678+
zassert_equal(ret, 1, "IPv4 address not found (%d)", ret);
679+
}
680+
681+
ret = net_if_ipv4_addr_lookup_by_index(&unknown_addr);
682+
zassert_equal(ret, 0, "IPv4 address found");
683+
}
684+
685+
static void v4_addr_rm_user(void)
686+
{
687+
struct in_addr my_addr = MY_ADDR_V4_USER;
688+
bool ret;
689+
690+
if (IS_ENABLED(CONFIG_NET_IF_USERSPACE_ACCESS)) {
691+
ret = net_if_ipv4_addr_rm_by_index(1, &my_addr);
692+
zassert_true(ret, "Cannot remove IPv4 address");
693+
}
694+
}
695+
696+
static
697+
struct in6_addr my_ipv6_addr_test = { { { 0x20, 0x01, 0x0d, 0xb8, 1, 0, 0, 0,
698+
0, 0, 0, 0, 0, 0, 0, 0x1 } } };
699+
700+
static
701+
struct in6_addr my_ipv6_addr_not_found = { { { 0x20, 0x01, 0x0d, 0xb8, 0, 0, 0,
702+
0, 0, 0, 0, 0, 0, 0, 0, 0x64 } } };
703+
704+
static void v6_addr_add(void)
705+
{
706+
bool ret;
707+
708+
ret = net_if_ipv6_addr_add_by_index(1, &my_ipv6_addr_test,
709+
NET_ADDR_MANUAL, 0);
710+
zassert_true(ret, "Cannot add IPv6 address");
711+
}
712+
713+
static void v6_addr_lookup(void)
714+
{
715+
int ret;
716+
717+
ret = net_if_ipv6_addr_lookup_by_index(&my_ipv6_addr_test);
718+
zassert_equal(ret, 1, "IPv6 address not found");
719+
720+
ret = net_if_ipv6_addr_lookup_by_index(&my_ipv6_addr_not_found);
721+
zassert_not_equal(ret, 1, "IPv6 address found");
722+
}
723+
724+
static void v6_addr_rm(void)
725+
{
726+
bool ret;
727+
728+
ret = net_if_ipv6_addr_rm_by_index(1, &my_ipv6_addr_test);
729+
zassert_true(ret, "Cannot remove IPv6 address");
730+
}
731+
732+
#define MY_ADDR_V6_USER { { { 0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, \
733+
0, 0, 0, 0, 0, 0, 0, 0x65 } } }
734+
735+
#define UNKNOWN_ADDR_V6_USER { { { 0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, \
736+
0, 0, 0, 0, 0, 0, 0, 0x66 } } }
737+
738+
static void v6_addr_add_user(void)
739+
{
740+
struct in6_addr my_addr = MY_ADDR_V6_USER;
741+
bool ret;
742+
743+
ret = net_if_ipv6_addr_add_by_index(1, &my_addr, NET_ADDR_MANUAL, 0);
744+
if (IS_ENABLED(CONFIG_NET_IF_USERSPACE_ACCESS)) {
745+
zassert_true(ret, "Cannot add IPv6 address");
746+
} else if (IS_ENABLED(CONFIG_USERSPACE)) {
747+
zassert_false(ret, "Could add IPv6 address");
748+
} else {
749+
zassert_true(ret, "Cannot add IPv6 address");
750+
}
751+
}
752+
753+
static void v6_addr_lookup_user(void)
754+
{
755+
struct in6_addr my_addr = MY_ADDR_V6_USER;
756+
struct in6_addr unknown_addr = UNKNOWN_ADDR_V6_USER;
757+
int ret;
758+
759+
if (IS_ENABLED(CONFIG_NET_IF_USERSPACE_ACCESS)) {
760+
ret = net_if_ipv6_addr_lookup_by_index(&my_addr);
761+
zassert_equal(ret, 1, "IPv6 address not found (%d)", ret);
762+
763+
ret = net_if_ipv6_addr_lookup_by_index(&unknown_addr);
764+
zassert_equal(ret, 0, "IPv6 address found");
765+
}
766+
}
767+
768+
static void v6_addr_rm_user(void)
769+
{
770+
struct in6_addr my_addr = MY_ADDR_V6_USER;
771+
bool ret;
772+
773+
/* Check also that add is enabled so that we can remove something
774+
* that was already added.
775+
*/
776+
if (IS_ENABLED(CONFIG_NET_IF_USERSPACE_ACCESS)) {
777+
ret = net_if_ipv6_addr_rm_by_index(1, &my_addr);
778+
zassert_true(ret, "Cannot remove IPv6 address");
779+
}
780+
}
781+
621782
void test_main(void)
622783
{
623784
ztest_test_suite(net_iface_test,
@@ -633,7 +794,20 @@ void test_main(void)
633794
ztest_unit_test(check_promisc_mode_on),
634795
ztest_unit_test(set_promisc_mode_on_again),
635796
ztest_unit_test(set_promisc_mode_off),
636-
ztest_unit_test(check_promisc_mode_off));
797+
ztest_unit_test(check_promisc_mode_off),
798+
ztest_unit_test(v4_addr_add),
799+
ztest_unit_test(v4_addr_lookup),
800+
ztest_unit_test(v4_addr_rm),
801+
ztest_user_unit_test(v4_addr_add_user),
802+
ztest_user_unit_test(v4_addr_lookup_user),
803+
ztest_user_unit_test(v4_addr_rm_user),
804+
ztest_unit_test(v6_addr_add),
805+
ztest_unit_test(v6_addr_lookup),
806+
ztest_unit_test(v6_addr_rm),
807+
ztest_user_unit_test(v6_addr_add_user),
808+
ztest_user_unit_test(v6_addr_lookup_user),
809+
ztest_user_unit_test(v6_addr_rm_user)
810+
);
637811

638812
ztest_run_test_suite(net_iface_test);
639813
}

tests/net/iface/testcase.yaml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
common:
2-
platform_whitelist: native_posix qemu_x86 qemu_cortex_m3
2+
min_ram: 16
3+
tags: net iface
4+
depends_on: netif
35
tests:
4-
net.iface:
5-
min_ram: 16
6-
tags: net iface
7-
depends_on: netif
6+
net.iface.with_userspace:
7+
extra_configs:
8+
- CONFIG_NET_IF_USERSPACE_ACCESS=y
9+
net.iface.no_userspace_allowed:
10+
extra_configs:
11+
- CONFIG_NET_IF_USERSPACE_ACCESS=n

0 commit comments

Comments
 (0)