@@ -293,16 +293,20 @@ static void mbed_lwip_netif_status_irq(struct netif *lwip_netif)
293
293
{
294
294
static bool any_addr = true;
295
295
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
+ }
302
303
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;
306
310
}
307
311
}
308
312
@@ -509,6 +513,15 @@ nsapi_error_t mbed_lwip_bringup(bool dhcp, const char *ip, const char *netmask,
509
513
return 0 ;
510
514
}
511
515
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
+
512
525
nsapi_error_t mbed_lwip_bringdown (void )
513
526
{
514
527
// Check if we've connected
@@ -522,13 +535,18 @@ nsapi_error_t mbed_lwip_bringdown(void)
522
535
dhcp_release (& lwip_netif );
523
536
dhcp_stop (& lwip_netif );
524
537
lwip_dhcp = false;
525
- } else {
526
- netif_set_down (& lwip_netif );
527
538
}
528
539
#endif
529
540
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 );
530
549
lwip_connected = false;
531
- // TO DO - actually remove addresses from stack, and shut down properly
532
550
return 0 ;
533
551
}
534
552
0 commit comments