[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-devel] [bug #53803] nd6_cleanup_netif should set the auto-configur

From: hongchengyan
Subject: [lwip-devel] [bug #53803] nd6_cleanup_netif should set the auto-configured address to invalid
Date: Tue, 1 May 2018 09:02:10 -0400 (EDT)
User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36


                 Summary: nd6_cleanup_netif should set the auto-configured
address to invalid
                 Project: lwIP - A Lightweight TCP/IP stack
            Submitted by: yanhc
            Submitted on: Tue 01 May 2018 01:02:08 PM UTC
                Category: IPv6
                Severity: 3 - Normal
              Item Group: Faulty Behaviour
                  Status: None
                 Privacy: Public
             Assigned to: None
             Open/Closed: Open
         Discussion Lock: Any
         Planned Release: None
            lwIP version: 2.0.2



nd6_cleanup_netif in nd6.c should set the auto-configured address to invalid.
nd6_cleanup_netif is called in netif_set_down.
I use my PC to send router advertisement (ra) packet to my board. My test
procedure is as follows:
(1)plug the ethernet cable and send ra with prefix A, new address will be
generated in slot 2 (slot 0 is link local and slot 1 is manually configured,
so slot 2 is for auto configuration);
(2)unplug the ethernet cable;
(3)re-plug the ethernet cable, and send ra with prefix B, no new address will
be generated.
I checked the state of the generated address of slot 2 and it is still
prefered when the cable is unplugged. So, when I re-plug the cable, even ND
receives a new prefix, it will not reconfigure the slot 2.
I think nd6_cleanup_netif should set the auto-configured address to invalid.
This is sound, since the prefix is removed and the auto-configured address
should also be removed.

I add the following routine (between macro LWIP_IPV6_AUTOCONFIG, same as in
nd6_tmr) in nd6_cleanup_netif as follows and everything goes fine.

nd6_cleanup_netif(struct netif *netif)
  u8_t i;
  s8_t router_index;
  for (i = 0; i < LWIP_ND6_NUM_PREFIXES; i++) {
    if (prefix_list[i].netif == netif) {
#if LWIP_IPV6_AUTOCONFIG        /* added by yanhc 2018.05.01 */
      /* If any addresses were configured with this prefix, remove them */
      if (prefix_list[i].flags & ND6_PREFIX_AUTOCONFIG_ADDRESS_GENERATED) {
        s8_t j;
                for (j = 1; j < LWIP_IPV6_NUM_ADDRESSES; j++) {
                  if ((netif_ip6_addr_state(prefix_list[i].netif, j) != 
netif_ip6_addr(prefix_list[i].netif, j))) {
                    netif_ip6_addr_set_state(prefix_list[i].netif, j, 
                        prefix_list[i].flags = 0;
                        /* Exit loop. */
      prefix_list[i].netif = NULL;


Reply to this item at:


  Message sent via Savannah

reply via email to

[Prev in Thread] Current Thread [Next in Thread]