I'm still looking for OKs on this.
On Mon, Apr 02, 2012 at 14:18 +0200, Mike Belopuhov wrote:
> 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;
> }