On Mon, Oct 12, 2015 at 14:06 +0200, Martin Pieuchot wrote:
> It's currently possible to add a RTF_LOCAL route on an interface with a 
> DOWN link state (em(4) to not say which one).
> 
> Diff below prevents a race and make sure such routes will be UP until
> if_link_state_change() is executed.
> 
> ok?
>

So this code runs after the interface SIOCSIFADDR ioctl handler
has UP'ped the inteface. This rtrequest1 adds an RTF_LOCAL route
which should not depend on the actual link state since packets
for this destination will never go out on the wire.

If my understanding is correct, OK mikeb 

> Index: net/route.c
> ===================================================================
> RCS file: /cvs/src/sys/net/route.c,v
> retrieving revision 1.249
> diff -u -p -r1.249 route.c
> --- net/route.c       7 Oct 2015 10:50:35 -0000       1.249
> +++ net/route.c       12 Oct 2015 12:00:40 -0000
> @@ -856,6 +856,7 @@ rtrequest1(int req, struct rt_addrinfo *
>  #ifndef SMALL_KERNEL
>               /* Check the link state if the table supports it. */
>               if (rtable_mpath_capable(tableid, ndst->sa_family) &&
> +                 !ISSET(rt->rt_flags, RTF_LOCAL) &&
>                   (!LINK_STATE_IS_UP(ifa->ifa_ifp->if_link_state) ||
>                   !ISSET(ifa->ifa_ifp->if_flags, IFF_UP))) {
>                       rt->rt_flags &= ~RTF_UP;
> 

Reply via email to