So when TLLA/SLLA is not specified we get into a weird state where
we don't know a LL address and don't ask for it.  Apparently, this
is not what some IPv6 compliance tests expect.  For example Tahi
really wants you to ask for a LLA by sending a neighbor solicitation
which means state should be INCOMPLETE.

It doesn't change a big picture, essentially NS will be sent once
there will be another packet, but INCOMPLETE means we'll send this
NS right away.  In fact this NOSTATE gets promoted to INCOMPLETE
itself.  While old RFC is not super clear about, RFC 4861 states:

   Because unicast Neighbor Solicitations are not required to include a
   Source Link-Layer Address, it is possible that a node sending a
   solicited Neighbor Advertisement does not have a corresponding link-
   layer address for its neighbor in its Neighbor Cache.  In such
   situations, a node will first have to use Neighbor Discovery to
   determine the link-layer address of its neighbor (i.e., send out a
   multicast Neighbor Solicitation).

Which means that INCOMPLETE matches better.

OK?

diff --git sys/netinet6/nd6.c sys/netinet6/nd6.c
index f995e27c..1547a2b 100644
--- sys/netinet6/nd6.c
+++ sys/netinet6/nd6.c
@@ -1556,7 +1556,7 @@ fail:
         *      0       n       y       --      (3) * STALE
         *      0       y       y       n       (4) *
         *      0       y       y       y       (5) * STALE
-        *      1       --      n       --      (6)   NOSTATE(= PASSIVE)
+        *      1       --      n       --      (6) * INCOMPLETE
         *      1       --      y       --      (7) * STALE
         */
 
@@ -1583,7 +1583,7 @@ fail:
        } else {
                do_update = 1;
                if (!lladdr)                            /* (6) */
-                       newstate = ND6_LLINFO_NOSTATE;
+                       newstate = ND6_LLINFO_INCOMPLETE;
                else                                    /* (7) */
                        newstate = ND6_LLINFO_STALE;
        }

Reply via email to