Module Name: src Committed By: ozaki-r Date: Tue Oct 30 05:56:02 UTC 2018
Modified Files: src/sys/net: route.c src/sys/netinet6: in6.c Log Message: Use rt_update framework on updating a rtentry To generate a diff of this commit: cvs rdiff -u -r1.215 -r1.216 src/sys/net/route.c cvs rdiff -u -r1.269 -r1.270 src/sys/netinet6/in6.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/route.c diff -u src/sys/net/route.c:1.215 src/sys/net/route.c:1.216 --- src/sys/net/route.c:1.215 Tue Oct 30 05:54:42 2018 +++ src/sys/net/route.c Tue Oct 30 05:56:02 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: route.c,v 1.215 2018/10/30 05:54:42 ozaki-r Exp $ */ +/* $NetBSD: route.c,v 1.216 2018/10/30 05:56:02 ozaki-r Exp $ */ /*- * Copyright (c) 1998, 2008 The NetBSD Foundation, Inc. @@ -97,7 +97,7 @@ #endif #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: route.c,v 1.215 2018/10/30 05:54:42 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: route.c,v 1.216 2018/10/30 05:56:02 ozaki-r Exp $"); #include <sys/param.h> #ifdef RTFLUSH_DEBUG @@ -1730,7 +1730,21 @@ rt_ifa_remlocal(struct ifaddr *ifa, stru } rt_newaddrmsg(RTM_DELADDR, ifa, 0, NULL); } else { +#ifdef NET_MPSAFE + int error = rt_update_prepare(rt); + if (error == 0) { + rt_replace_ifa(rt, alt_ifa); + rt_update_finish(rt); + } else { + /* + * If error != 0, the rtentry is being + * destroyed, so doing nothing doesn't + * matter. + */ + } +#else rt_replace_ifa(rt, alt_ifa); +#endif rt_newmsg(RTM_CHANGE, rt); } } else Index: src/sys/netinet6/in6.c diff -u src/sys/netinet6/in6.c:1.269 src/sys/netinet6/in6.c:1.270 --- src/sys/netinet6/in6.c:1.269 Wed Jul 4 00:35:33 2018 +++ src/sys/netinet6/in6.c Tue Oct 30 05:56:02 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: in6.c,v 1.269 2018/07/04 00:35:33 kamil Exp $ */ +/* $NetBSD: in6.c,v 1.270 2018/10/30 05:56:02 ozaki-r Exp $ */ /* $KAME: in6.c,v 1.198 2001/07/18 09:12:38 itojun Exp $ */ /* @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in6.c,v 1.269 2018/07/04 00:35:33 kamil Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in6.c,v 1.270 2018/10/30 05:56:02 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -867,8 +867,23 @@ in6_join_mcastgroups(struct in6_aliasreq ntohs(mltaddr.sin6_addr.s6_addr16[1]), satocsin6(rt_getkey(rt))->sin6_addr.s6_addr16[0], satocsin6(rt_getkey(rt))->sin6_addr.s6_addr16[1]); +#ifdef NET_MPSAFE + error = rt_update_prepare(rt); + if (error == 0) { + rt_replace_ifa(rt, &ia->ia_ifa); + rt->rt_ifp = ifp; + rt_update_finish(rt); + } else { + /* + * If error != 0, the rtentry is being + * destroyed, so doing nothing doesn't + * matter. + */ + } +#else rt_replace_ifa(rt, &ia->ia_ifa); rt->rt_ifp = ifp; +#endif } } if (!rt) { @@ -951,8 +966,23 @@ in6_join_mcastgroups(struct in6_aliasreq ntohs(mltaddr.sin6_addr.s6_addr16[1]), satocsin6(rt_getkey(rt))->sin6_addr.s6_addr16[0], satocsin6(rt_getkey(rt))->sin6_addr.s6_addr16[1]); +#ifdef NET_MPSAFE + error = rt_update_prepare(rt); + if (error == 0) { + rt_replace_ifa(rt, &ia->ia_ifa); + rt->rt_ifp = ifp; + rt_update_finish(rt); + } else { + /* + * If error != 0, the rtentry is being + * destroyed, so doing nothing doesn't + * matter. + */ + } +#else rt_replace_ifa(rt, &ia->ia_ifa); rt->rt_ifp = ifp; +#endif } } if (!rt) {