Module Name: src Committed By: kefren Date: Thu Feb 10 07:42:18 UTC 2011
Modified Files: src/sys/net: rtsock.c Log Message: Allow changing route flags. Should fix PR/40455 OK'ed: dyoung@ To generate a diff of this commit: cvs rdiff -u -r1.133 -r1.134 src/sys/net/rtsock.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/rtsock.c diff -u src/sys/net/rtsock.c:1.133 src/sys/net/rtsock.c:1.134 --- src/sys/net/rtsock.c:1.133 Tue Feb 1 01:39:20 2011 +++ src/sys/net/rtsock.c Thu Feb 10 07:42:18 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: rtsock.c,v 1.133 2011/02/01 01:39:20 matt Exp $ */ +/* $NetBSD: rtsock.c,v 1.134 2011/02/10 07:42:18 kefren Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.133 2011/02/01 01:39:20 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.134 2011/02/10 07:42:18 kefren Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -139,6 +139,8 @@ .ri_maxqlen = IFQ_MAXLEN, }; +#define PRESERVED_RTF (RTF_UP | RTF_GATEWAY | RTF_HOST | RTF_DONE | RTF_MASK) + static void COMPATNAME(route_init)(void); static int COMPATNAME(route_output)(struct mbuf *, ...); static int COMPATNAME(route_usrreq)(struct socket *, @@ -473,6 +475,9 @@ if (ifp && rt->rt_ifp != ifp) rt->rt_ifp = ifp; rt_setmetrics(rtm->rtm_inits, rtm, rt); + if (rt->rt_flags != info.rti_flags) + rt->rt_flags = (info.rti_flags & ~PRESERVED_RTF) + | (rt->rt_flags & PRESERVED_RTF); if (rt->rt_ifa && rt->rt_ifa->ifa_rtrequest) rt->rt_ifa->ifa_rtrequest(RTM_ADD, rt, &info); /*FALLTHROUGH*/