diff --git a/tests/lwip_sock_ip/Makefile b/tests/lwip_sock_ip/Makefile index caed6075a9..8df768efab 100644 --- a/tests/lwip_sock_ip/Makefile +++ b/tests/lwip_sock_ip/Makefile @@ -1,6 +1,7 @@ include ../Makefile.tests_common LWIP_IPV4 ?= 0 +AUX_LOCAL ?= 1 ifneq (0, $(LWIP_IPV4)) USEMODULE += ipv4_addr @@ -17,6 +18,10 @@ ifneq (0, $(LWIP_IPV6)) USEMODULE += lwip_ipv6_autoconfig endif +ifeq (1, $(AUX_LOCAL)) + USEMODULE += sock_aux_local +endif + USEMODULE += inet_csum USEMODULE += l2util USEMODULE += lwip_netdev diff --git a/tests/lwip_sock_ip/main.c b/tests/lwip_sock_ip/main.c index 5cf9fcce2d..1887f46743 100644 --- a/tests/lwip_sock_ip/main.c +++ b/tests/lwip_sock_ip/main.c @@ -304,6 +304,32 @@ static void test_sock_ip_recv4__non_blocking(void) expect(_check_net()); } +static void test_sock_ip_recv4__aux(void) +{ + static const sock_ip_ep_t local = { .family = AF_INET }; + sock_ip_ep_t result; + sock_ip_aux_rx_t aux = { .flags = SOCK_AUX_GET_LOCAL }; + + expect(0 == sock_ip_create(&_sock, &local, NULL, _TEST_PROTO, + SOCK_FLAGS_REUSE_EP)); + expect(_inject_4packet(_TEST_ADDR4_REMOTE, _TEST_ADDR4_LOCAL, _TEST_PROTO, "ABCD", + sizeof("ABCD"), _TEST_NETIF)); + expect(sizeof("ABCD") == sock_ip_recv_aux(&_sock, _test_buffer, + sizeof(_test_buffer), 0, &result, + &aux)); + expect(AF_INET == result.family); + expect(_TEST_ADDR4_REMOTE == result.addr.ipv4_u32); + expect(_TEST_NETIF == result.netif); +#if IS_USED(MODULE_SOCK_AUX_LOCAL) + expect(!(aux.flags & SOCK_AUX_GET_LOCAL)); + expect(aux.local.family == AF_INET ); + expect(aux.local.addr.ipv4_u32 == _TEST_ADDR4_LOCAL ); +#else + expect(aux.flags & SOCK_AUX_GET_LOCAL); +#endif + expect(_check_net()); +} + static void test_sock_ip_recv_buf4__success(void) { static const sock_ip_ep_t local = { .family = AF_INET }; @@ -845,6 +871,34 @@ static void test_sock_ip_recv6__non_blocking(void) expect(_check_net()); } +static void test_sock_ip_recv6__aux(void) +{ + static const ipv6_addr_t src_addr = { .u8 = _TEST_ADDR6_REMOTE }; + static const ipv6_addr_t dst_addr = { .u8 = _TEST_ADDR6_LOCAL }; + static const sock_ip_ep_t local = { .family = AF_INET6 }; + sock_ip_ep_t result; + sock_ip_aux_rx_t aux = { .flags = SOCK_AUX_GET_LOCAL }; + + expect(0 == sock_ip_create(&_sock, &local, NULL, _TEST_PROTO, + SOCK_FLAGS_REUSE_EP)); + expect(_inject_6packet(&src_addr, &dst_addr, _TEST_PROTO, "ABCD", + sizeof("ABCD"), _TEST_NETIF)); + expect(sizeof("ABCD") == sock_ip_recv_aux(&_sock, _test_buffer, + sizeof(_test_buffer), 0, &result, + &aux)); + expect(AF_INET6 == result.family); + expect(memcmp(&result.addr, &src_addr, sizeof(result.addr)) == 0); + expect(_TEST_NETIF == result.netif); +#if defined(MODULE_SOCK_AUX_LOCAL) + expect(!(aux.flags & SOCK_AUX_GET_LOCAL)); + expect(aux.local.family == AF_INET6 ); + expect(memcmp(&aux.local.addr, &dst_addr, sizeof(dst_addr)) == 0); +#else + expect(aux.flags & SOCK_AUX_GET_LOCAL); +#endif + expect(_check_net()); +} + static void test_sock_ip_recv_buf6__success(void) { static const ipv6_addr_t src_addr = { .u8 = _TEST_ADDR6_REMOTE }; @@ -1164,6 +1218,7 @@ int main(void) CALL(test_sock_ip_recv4__unsocketed_with_remote()); CALL(test_sock_ip_recv4__with_timeout()); CALL(test_sock_ip_recv4__non_blocking()); + CALL(test_sock_ip_recv4__aux()); CALL(test_sock_ip_recv_buf4__success()); _prepare_send_checks(); CALL(test_sock_ip_send4__EAFNOSUPPORT()); @@ -1209,6 +1264,7 @@ int main(void) CALL(test_sock_ip_recv6__unsocketed_with_remote()); CALL(test_sock_ip_recv6__with_timeout()); CALL(test_sock_ip_recv6__non_blocking()); + CALL(test_sock_ip_recv6__aux()); CALL(test_sock_ip_recv_buf6__success()); _prepare_send_checks(); CALL(test_sock_ip_send6__EAFNOSUPPORT());