summaryrefslogtreecommitdiffstats
path: root/sys/netinet6/in6_ifattach.c
diff options
context:
space:
mode:
authormpi <mpi@openbsd.org>2015-01-28 22:10:13 +0000
committermpi <mpi@openbsd.org>2015-01-28 22:10:13 +0000
commit4d2cbb0d3871714608ab02c6291a47dbc2a90648 (patch)
treef90d7509b694cd71d32f8a4b6eff9a499775e0e5 /sys/netinet6/in6_ifattach.c
parentavoid fatal() calls in packet code (diff)
downloadwireguard-openbsd-4d2cbb0d3871714608ab02c6291a47dbc2a90648.tar.xz
wireguard-openbsd-4d2cbb0d3871714608ab02c6291a47dbc2a90648.zip
Revert rtdeletemsg conversion. It was not ok'd, I misunderstood bluhm@'s
email.
Diffstat (limited to '')
-rw-r--r--sys/netinet6/in6_ifattach.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/sys/netinet6/in6_ifattach.c b/sys/netinet6/in6_ifattach.c
index a9363527df8..70fbe2a8e79 100644
--- a/sys/netinet6/in6_ifattach.c
+++ b/sys/netinet6/in6_ifattach.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: in6_ifattach.c,v 1.83 2015/01/27 10:31:19 mpi Exp $ */
+/* $OpenBSD: in6_ifattach.c,v 1.84 2015/01/28 22:10:13 mpi Exp $ */
/* $KAME: in6_ifattach.c,v 1.124 2001/07/18 08:32:51 jinmei Exp $ */
/*
@@ -630,7 +630,15 @@ in6_ifdetach(struct ifnet *ifp)
sin6.sin6_addr.s6_addr16[1] = htons(ifp->if_index);
rt = rtalloc(sin6tosa(&sin6), 0, ifp->if_rdomain);
if (rt && rt->rt_ifp == ifp) {
- rtdeletemsg(rt, ifp->if_rdomain);
+ struct rt_addrinfo info;
+
+ bzero(&info, sizeof(info));
+ info.rti_flags = rt->rt_flags;
+ info.rti_info[RTAX_DST] = rt_key(rt);
+ info.rti_info[RTAX_GATEWAY] = rt->rt_gateway;
+ info.rti_info[RTAX_NETMASK] = rt_mask(rt);
+ rtrequest1(RTM_DELETE, &info, rt->rt_priority, NULL,
+ ifp->if_rdomain);
rtfree(rt);
}
@@ -642,7 +650,15 @@ in6_ifdetach(struct ifnet *ifp)
sin6.sin6_addr.s6_addr16[1] = htons(ifp->if_index);
rt = rtalloc(sin6tosa(&sin6), 0, ifp->if_rdomain);
if (rt && rt->rt_ifp == ifp) {
- rtdeletemsg(rt, ifp->if_rdomain);
+ struct rt_addrinfo info;
+
+ bzero(&info, sizeof(info));
+ info.rti_flags = rt->rt_flags;
+ info.rti_info[RTAX_DST] = rt_key(rt);
+ info.rti_info[RTAX_GATEWAY] = rt->rt_gateway;
+ info.rti_info[RTAX_NETMASK] = rt_mask(rt);
+ rtrequest1(RTM_DELETE, &info, rt->rt_priority, NULL,
+ ifp->if_rdomain);
rtfree(rt);
}