Index: netinet6/in6_ifattach.c
===================================================================
RCS file: /cvs/src/sys/netinet6/in6_ifattach.c,v
retrieving revision 1.97
diff -u -p -r1.97 in6_ifattach.c
--- netinet6/in6_ifattach.c 22 Oct 2015 15:37:47 -0000 1.97
+++ netinet6/in6_ifattach.c 24 Oct 2015 12:56:50 -0000
@@ -546,7 +546,7 @@ in6_ifdetach(struct ifnet *ifp)
sin6.sin6_addr = in6addr_intfacelocal_allnodes;
sin6.sin6_addr.s6_addr16[1] = htons(ifp->if_index);
rt = rtalloc(sin6tosa(&sin6), 0, ifp->if_rdomain);
- if (rt && rt->rt_ifp == ifp) {
+ if (rt && rt->rt_ifidx == ifp->if_index) {
rtdeletemsg(rt, ifp->if_rdomain);
rtfree(rt);
}
@@ -558,7 +558,7 @@ in6_ifdetach(struct ifnet *ifp)
sin6.sin6_addr = in6addr_linklocal_allnodes;
sin6.sin6_addr.s6_addr16[1] = htons(ifp->if_index);
rt = rtalloc(sin6tosa(&sin6), 0, ifp->if_rdomain);
- if (rt && rt->rt_ifp == ifp) {
+ if (rt && rt->rt_ifidx == ifp->if_index) {
rtdeletemsg(rt, ifp->if_rdomain);
rtfree(rt);
}
Index: netinet6/in6_src.c
===================================================================
RCS file: /cvs/src/sys/netinet6/in6_src.c,v
retrieving revision 1.66
diff -u -p -r1.66 in6_src.c
--- netinet6/in6_src.c 24 Oct 2015 12:33:16 -0000 1.66
+++ netinet6/in6_src.c 24 Oct 2015 13:00:19 -0000
@@ -233,8 +233,12 @@ in6_selectsrc(struct in6_addr **in6src,
rt = nd6_lookup(&sin6_next->sin6_addr, 1, NULL,
rtableid);
if (rt != NULL) {
- ia6 = in6_ifawithscope(rt->rt_ifp, dst,
- rtableid);
+ ifp = if_get(rt->rt_ifidx);
+ if (ifp != NULL) {
+ ia6 = in6_ifawithscope(ifp, dst,
+ rtableid);
+ if_put(ifp);
+ }
if (ia6 == NULL)
ia6 = ifatoia6(rt->rt_ifa);
rtfree(rt);
@@ -285,8 +289,11 @@ in6_selectsrc(struct in6_addr **in6src,
*/
if (ro->ro_rt) {
- ia6 = in6_ifawithscope(ro->ro_rt->rt_ifp, dst,
- rtableid);
+ ifp = if_get(ro->ro_rt->rt_ifidx);
+ if (ifp != NULL) {
+ ia6 = in6_ifawithscope(ifp, dst, rtableid);
+ if_put(ifp);
+ }
if (ia6 == NULL) /* xxx scope error ?*/
ia6 = ifatoia6(ro->ro_rt->rt_ifa);
}