buglwIP - A Lightweight TCP/IP stack - Bugs: bug #49307, IPv6: improper neighbor cache...

 
 

You are not allowed to post comments on this tracker with your current authentication level.

bug #49307: IPv6: improper neighbor cache cleanup

Submitter:  Dirk Ziegelmeier <dziegel>
Submitted:  Tue 11 Oct 2016 10:23:44 AM UTC
   
 
Category:  IPv6 Severity:  3 - Normal
Item Group:  None Status:  In Progress
Privacy:  Public Assigned to:  goldsimon
Open/Closed:  Open Planned Release:  None
lwIP version:  git head

Wed 14 Dec 2016 12:18:50 PM UTC, comment #1: 

Fixed using NA without lladdr_opt for DAD.

The rest requires more attention as I think there might be some more state changes missing.

Simon Goldschmidt <goldsimon>
Group administrator
Tue 11 Oct 2016 10:23:44 AM UTC, original submission:  

From lwIP mailing list, Arpit Agarwal
-------------------------------------

Hi Ivan,

I am testing Core Protocols Only.

For e.g. Core Protocols Section 1: (spec.p2) : In my test many of the test cases are failing due to improper neighbor cache cleanup. If I am not wrong, the reason might be non-handling of one of the transition of nd6 state machine (refer link: https://njetwork.files.wordpress.com/2014/01/msi_ipv6-nd-state-machine1.png). I am unable to find the State change from Reachable to Stale on receiving NA with LLADDR change anywhere in the nd6 code.

Similary as per RFC 4861 , DAD-NA might not contain lladdr_opt, but the stack in lwip seems to drop NA if there is not lladdr_opt.

Refer Below code from nd6.c:

/* Unsolicited NA?*/
    if (ip6_addr_ismulticast(ip6_current_dest_addr())) {
      /* This is an unsolicited NA.
       * link-layer changed?
       part of DAD mechanism? /

      /* Check that link-layer address option also fits in packet. */
      if (p->len < (sizeof(struct na_header) + 2)) {
        /* @todo debug message */
        pbuf_free(p);
        ND6_STATS_INC(nd6.lenerr);
        ND6_STATS_INC(nd6.drop);
        return;
      }

      lladdr_opt = (struct lladdr_option )((u8_t)p->payload + sizeof(struct na_header));

      if (p->len < (sizeof(struct na_header) + (lladdr_opt->length << 3))) {
        /* @todo debug message */
        pbuf_free(p);
        ND6_STATS_INC(nd6.lenerr);
        ND6_STATS_INC(nd6.drop);
        return;
      }

Dirk Ziegelmeier <dziegel>
Group administrator

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

No files currently attached

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -email is unavailable- added by goldsimon (Posted a comment)
  • -email is unavailable- added by dziegel (Submitted the item)
  •  

    There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.

     

    Follow 2 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2016-12-14 goldsimon StatusNone In Progress
        Assigned toNone goldsimon

    Back to the top

    Powered by Savane 3.13-f8d8.
    Corresponding source code