If we are sending a neighbor solicitation for a link local address
authorflorian <florian@openbsd.org>
Wed, 5 Jul 2017 09:51:37 +0000 (09:51 +0000)
committerflorian <florian@openbsd.org>
Wed, 5 Jul 2017 09:51:37 +0000 (09:51 +0000)
commitf6d9e53b78e65766486feaae9c253def963df851
tree5ce5d3c9e5c0e14054673319c30b15e9123fa0f8
parent7837bfa2a6254f2171a17cf89fc29f9d508bdb36
If we are sending a neighbor solicitation for a link local address
send it with a link local source address as well.

This helps upstream routers with their own source address
selection.

A reoccurring scenario is:
- gateway on fe80::1%if
- the gateway does not have an IP in the same prefix as our global address

When we want to talk to the outside world we first need to resolve the
gateway. We copy the source address from our outgoing packet to the
neighbor solicitation packet (a global address) and ask for layer2
information of a link local address.

The upstream router now needs to do source address selection of it's
own. Since we are coming from a global address and there is no address
from the same prefix the router uses another global address lying
around.

We then drop this with "ND packet from non-neighbor".

Reported over the years by a few people, most recently by Marc Peters
on bugs@ who confirmed that this fixes the problem.

OK stsp@, mpi@
sys/netinet6/nd6_nbr.c