Skip to content

Commit 4babe02

Browse files
author
Mika Leppänen
committed
Added clearing of ipv6 addresses to lwip bringdown function
1 parent 7963e8e commit 4babe02

File tree

1 file changed

+30
-12
lines changed

1 file changed

+30
-12
lines changed

features/FEATURE_LWIP/lwip-interface/lwip_stack.c

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -293,16 +293,20 @@ static void mbed_lwip_netif_status_irq(struct netif *lwip_netif)
293293
{
294294
static bool any_addr = true;
295295

296-
// Indicates that has address
297-
if (any_addr == true && mbed_lwip_get_ip_addr(true, lwip_netif)) {
298-
sys_sem_signal(&lwip_netif_has_addr);
299-
any_addr = false;
300-
return;
301-
}
296+
if (netif_is_up(lwip_netif)) {
297+
// Indicates that has address
298+
if (any_addr == true && mbed_lwip_get_ip_addr(true, lwip_netif)) {
299+
sys_sem_signal(&lwip_netif_has_addr);
300+
any_addr = false;
301+
return;
302+
}
302303

303-
// Indicates that has preferred address
304-
if (mbed_lwip_get_ip_addr(false, lwip_netif)) {
305-
sys_sem_signal(&lwip_netif_has_addr);
304+
// Indicates that has preferred address
305+
if (mbed_lwip_get_ip_addr(false, lwip_netif)) {
306+
sys_sem_signal(&lwip_netif_has_addr);
307+
}
308+
} else {
309+
any_addr = true;
306310
}
307311
}
308312

@@ -509,6 +513,15 @@ nsapi_error_t mbed_lwip_bringup(bool dhcp, const char *ip, const char *netmask,
509513
return 0;
510514
}
511515

516+
#if LWIP_IPV6
517+
void mbed_lwip_clear_ipv6_addresses(struct netif *lwip_netif)
518+
{
519+
for (u8_t i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {
520+
netif_ip6_addr_set_state(lwip_netif, i, IP6_ADDR_INVALID);
521+
}
522+
}
523+
#endif
524+
512525
nsapi_error_t mbed_lwip_bringdown(void)
513526
{
514527
// Check if we've connected
@@ -522,13 +535,18 @@ nsapi_error_t mbed_lwip_bringdown(void)
522535
dhcp_release(&lwip_netif);
523536
dhcp_stop(&lwip_netif);
524537
lwip_dhcp = false;
525-
} else {
526-
netif_set_down(&lwip_netif);
527538
}
528539
#endif
529540

541+
netif_set_down(&lwip_netif);
542+
543+
#if LWIP_IPV6
544+
mbed_lwip_clear_ipv6_addresses(&lwip_netif);
545+
#endif
546+
547+
sys_sem_free(&lwip_netif_has_addr);
548+
sys_sem_new(&lwip_netif_has_addr, 0);
530549
lwip_connected = false;
531-
// TO DO - actually remove addresses from stack, and shut down properly
532550
return 0;
533551
}
534552

0 commit comments

Comments
 (0)