CVSROOT: /cvs Module name: src Changes by: m...@cvs.openbsd.org 2015/01/08 07:29:18
Modified files: sys/net : if_ethersubr.c route.c route.h sys/netinet : if_ether.c sys/netinet6 : nd6.c Log message: 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@