Merge pull request #3193 from mikaleppanen/lwip_ipv6_eth_down_supp

Added clearing of ipv6 addresses to lwip bringdown function
pull/3322/head
Martin Kojtal 2016-11-29 18:13:35 +01:00 committed by GitHub
commit e261e30d05
1 changed files with 30 additions and 12 deletions

View File

@ -293,6 +293,7 @@ static void mbed_lwip_netif_status_irq(struct netif *lwip_netif)
{
static bool any_addr = true;
if (netif_is_up(lwip_netif)) {
// Indicates that has address
if (any_addr == true && mbed_lwip_get_ip_addr(true, lwip_netif)) {
sys_sem_signal(&lwip_netif_has_addr);
@ -304,6 +305,9 @@ static void mbed_lwip_netif_status_irq(struct netif *lwip_netif)
if (mbed_lwip_get_ip_addr(false, lwip_netif)) {
sys_sem_signal(&lwip_netif_has_addr);
}
} else {
any_addr = true;
}
}
static void mbed_lwip_set_mac_address(void)
@ -509,6 +513,15 @@ nsapi_error_t mbed_lwip_bringup(bool dhcp, const char *ip, const char *netmask,
return 0;
}
#if LWIP_IPV6
void mbed_lwip_clear_ipv6_addresses(struct netif *lwip_netif)
{
for (u8_t i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {
netif_ip6_addr_set_state(lwip_netif, i, IP6_ADDR_INVALID);
}
}
#endif
nsapi_error_t mbed_lwip_bringdown(void)
{
// Check if we've connected
@ -522,13 +535,18 @@ nsapi_error_t mbed_lwip_bringdown(void)
dhcp_release(&lwip_netif);
dhcp_stop(&lwip_netif);
lwip_dhcp = false;
} else {
netif_set_down(&lwip_netif);
}
#endif
netif_set_down(&lwip_netif);
#if LWIP_IPV6
mbed_lwip_clear_ipv6_addresses(&lwip_netif);
#endif
sys_sem_free(&lwip_netif_has_addr);
sys_sem_new(&lwip_netif_has_addr, 0);
lwip_connected = false;
// TO DO - actually remove addresses from stack, and shut down properly
return 0;
}