Am 07/04/17 um 11:15 schrieb Florian Obser:
> Marc, does this fix your problem?
>
> Comments, OKs?
>
> diff --git nd6_nbr.c nd6_nbr.c
> index fa8d3ed1472..086eeef87ba 100644
> --- nd6_nbr.c
> +++ nd6_nbr.c
> @@ -445,7 +445,8 @@ nd6_ns_output(struct ifnet *ifp, struct in6_addr *daddr6,
> * We use the source address for the prompting packet
> * (saddr6), if:
> * - saddr6 is given from the caller (by giving "ln"), and
> - * - saddr6 belongs to the outgoing interface.
> + * - saddr6 belongs to the outgoing interface and
> + * - if taddr is link local saddr6 musst be link local as well
> * Otherwise, we perform the source address selection as usual.
> */
> struct ip6_hdr *hip6; /* hold ip6 */
> @@ -453,9 +454,12 @@ nd6_ns_output(struct ifnet *ifp, struct in6_addr *daddr6,
>
> if (ln && ln->ln_hold) {
> hip6 = mtod(ln->ln_hold, struct ip6_hdr *);
> - if (sizeof(*hip6) <= ln->ln_hold->m_len)
> + if (sizeof(*hip6) <= ln->ln_hold->m_len) {
> saddr6 = &hip6->ip6_src;
> - else
> + if (saddr6 && IN6_IS_ADDR_LINKLOCAL(taddr6) &&
> + !IN6_IS_ADDR_LINKLOCAL(saddr6))
> + saddr6 = NULL;
> + } else
> saddr6 = NULL;
> } else
> saddr6 = NULL;
>
Hi Florian,
applied the patch to 6.1-STABLE and it fixes my issues.
Thanks a lot.
Cheers,
Marc