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

Submitted by:  Dirk Ziegelmeier <dziegel>
Submitted on:  Tue 11 Oct 2016 10:23:44 AM UTC  
 
Category:  IPv6 Severity:  3 - Normal
Item Group:  None Status:  In Progress
Privacy:  Public Assigned to:  Simon Goldschmidt <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>
Project AdministratorIn charge of this item.
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>
Project Administrator

 

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)
  •  

    Do you think this task is very important?
    If so, you can add your encouragement to it.
    This task has 0 encouragements so far.

    Only logged-in users can vote.

     

     

     

    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.3