lwip-devel
[Top][All Lists]
Advanced

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

[lwip-devel] [bug #49307] IPv6: improper neighbor cache cleanup


From: Dirk Ziegelmeier
Subject: [lwip-devel] [bug #49307] IPv6: improper neighbor cache cleanup
Date: Tue, 11 Oct 2016 10:23:46 +0000 (UTC)
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0

URL:
  <http://savannah.nongnu.org/bugs/?49307>

                 Summary: IPv6: improper neighbor cache cleanup
                 Project: lwIP - A Lightweight TCP/IP stack
            Submitted by: dziegel
            Submitted on: Tue 11 Oct 2016 10:23:44 AM GMT
                Category: IPv6
                Severity: 3 - Normal
              Item Group: None
                  Status: None
                 Privacy: Public
             Assigned to: None
             Open/Closed: Open
         Discussion Lock: Any
         Planned Release: None
            lwIP version: git head

    _______________________________________________________

Details:

>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;
      }





    _______________________________________________________

Reply to this item at:

  <http://savannah.nongnu.org/bugs/?49307>

_______________________________________________
  Message sent via/by Savannah
  http://savannah.nongnu.org/




reply via email to

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