Factorize various duplicated chunks of (old and horrible) code, checking
authormpi <mpi@openbsd.org>
Thu, 8 Jan 2015 14:29:18 +0000 (14:29 +0000)
committermpi <mpi@openbsd.org>
Thu, 8 Jan 2015 14:29:18 +0000 (14:29 +0000)
commit8c023157f568c27d8c9df36edc287db0b4676746
tree8744fbce3b61644f01ad3feb423a920f143458f9
parente17ffc5acc71e7020078469752beb95e5dc6f265
Factorize various duplicated chunks of (old and horrible) code, checking
for the validity of a given outgoing route entry into a single function.

This change is inspired from FreeBSD r111767.  The function introduced
here, rt_checkgate(), should hopefully die in a near future.  Why should
it die?  Well, it is way too late to do such validity checks: if your
kernel can ends up in ether_output() with an invalid route, please do
not let it try to find a new one that might do the job.

Go read this function if you're wondering why you're getting messages
like:

"arpresolve: X.X.X.X: route without link local address"

Since this horrible logic has survived 20 years of copy & past and small
modifications for workarounds without a single clear commit message, let's
assume it is full of dragons and try to play safe.  This factorization is
not intended to change any behavior.

With much inputs from bluhm@, tested by weerd@ and florian@ on setups
with p2p IPv6 interfaces.

ok bluhm@, benno@, florian@
sys/net/if_ethersubr.c
sys/net/route.c
sys/net/route.h
sys/netinet/if_ether.c
sys/netinet6/nd6.c