diff --git a/tests/lwip_sock_ip/stack.c b/tests/lwip_sock_ip/stack.c index 0cbe29ec44dc8c8b126ae72e808eaa451e936123..4a011e59ed20b6078249f803e1ab67dd3055de1b 100644 --- a/tests/lwip_sock_ip/stack.c +++ b/tests/lwip_sock_ip/stack.c @@ -197,9 +197,16 @@ void _net_init(void) netif_add(&netif, &netdev, lwip_netdev_init, tcpip_input); #endif #if LWIP_IPV6 - static const uint8_t local6[] = _TEST_ADDR6_LOCAL; + static const uint8_t local6_a[] = _TEST_ADDR6_LOCAL; + /* XXX need to copy into a stack variable. Otherwise, when just using + * `local6_a` this leads to weird alignment problems on some platforms with + * netif_add_ip6_address() below */ + ip6_addr_t local6; s8_t idx; - netif_add_ip6_address(&netif, (ip6_addr_t *)&local6, &idx); + + memcpy(&local6.addr, local6_a, sizeof(local6)); + ip6_addr_clear_zone(&local6); + netif_add_ip6_address(&netif, &local6, &idx); for (int i = 0; i <= idx; i++) { netif.ip6_addr_state[i] |= IP6_ADDR_VALID; } diff --git a/tests/lwip_sock_udp/stack.c b/tests/lwip_sock_udp/stack.c index 1440e08734be2d00d2df1ae99ea26b1c0c9bd25a..85271e1c58eef370897a77be2ea04906bfb0154a 100644 --- a/tests/lwip_sock_udp/stack.c +++ b/tests/lwip_sock_udp/stack.c @@ -199,9 +199,16 @@ void _net_init(void) netif_add(&netif, &netdev, lwip_netdev_init, tcpip_input); #endif #if LWIP_IPV6 - static const uint8_t local6[] = _TEST_ADDR6_LOCAL; + static const uint8_t local6_a[] = _TEST_ADDR6_LOCAL; + /* XXX need to copy into a stack variable. Otherwise, when just using + * `local6_a` this leads to weird alignment problems on some platforms with + * netif_add_ip6_address() below */ + ip6_addr_t local6; s8_t idx; - netif_add_ip6_address(&netif, (ip6_addr_t *)&local6, &idx); + + memcpy(&local6.addr, local6_a, sizeof(local6)); + ip6_addr_clear_zone(&local6); + netif_add_ip6_address(&netif, &local6, &idx); for (int i = 0; i <= idx; i++) { netif.ip6_addr_state[i] |= IP6_ADDR_VALID; }