summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/net/route.c14
-rw-r--r--sys/net/route.h4
-rw-r--r--sys/net/rtsock.c7
-rw-r--r--sys/netinet/in_pcb.c4
-rw-r--r--sys/netinet6/nd6_rtr.c4
5 files changed, 19 insertions, 14 deletions
diff --git a/sys/net/route.c b/sys/net/route.c
index b785a803e4e..59ec31519d9 100644
--- a/sys/net/route.c
+++ b/sys/net/route.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: route.c,v 1.70 2006/03/22 14:37:44 henning Exp $ */
+/* $OpenBSD: route.c,v 1.71 2006/04/22 19:43:06 claudio Exp $ */
/* $NetBSD: route.c,v 1.14 1996/02/13 22:00:46 christos Exp $ */
/*
@@ -236,7 +236,7 @@ miss:
if (report) {
bzero((caddr_t)&info, sizeof(info));
info.rti_info[RTAX_DST] = dst;
- rt_missmsg(msgtype, &info, 0, err);
+ rt_missmsg(msgtype, &info, 0, NULL, err);
}
}
splx(s);
@@ -289,7 +289,7 @@ rtalloc1(struct sockaddr *dst, int report)
TAILQ_FIRST(&rt->rt_ifp->if_addrlist)->ifa_addr;
info.rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr;
}
- rt_missmsg(RTM_ADD, &info, rt->rt_flags, 0);
+ rt_missmsg(RTM_ADD, &info, rt->rt_flags, rt->rt_ifp, 0);
} else
rt->rt_refcnt++;
} else {
@@ -304,7 +304,7 @@ miss:
if (report && dst->sa_family != PF_KEY) {
bzero((caddr_t)&info, sizeof(info));
info.rti_info[RTAX_DST] = dst;
- rt_missmsg(msgtype, &info, 0, err);
+ rt_missmsg(msgtype, &info, 0, NULL, err);
}
}
splx(s);
@@ -455,7 +455,7 @@ out:
info.rti_info[RTAX_GATEWAY] = gateway;
info.rti_info[RTAX_NETMASK] = netmask;
info.rti_info[RTAX_AUTHOR] = src;
- rt_missmsg(RTM_REDIRECT, &info, flags, error);
+ rt_missmsg(RTM_REDIRECT, &info, flags, ifa->ifa_ifp, error);
}
/*
@@ -466,6 +466,7 @@ rtdeletemsg(struct rtentry *rt)
{
int error;
struct rt_addrinfo info;
+ struct ifnet *ifp;
/*
* Request the new route so that the entry is not actually
@@ -477,9 +478,10 @@ rtdeletemsg(struct rtentry *rt)
info.rti_info[RTAX_NETMASK] = rt_mask(rt);
info.rti_info[RTAX_GATEWAY] = rt->rt_gateway;
info.rti_flags = rt->rt_flags;
+ ifp = rt->rt_ifp;
error = rtrequest1(RTM_DELETE, &info, &rt);
- rt_missmsg(RTM_DELETE, &info, info.rti_flags, error);
+ rt_missmsg(RTM_DELETE, &info, info.rti_flags, ifp, error);
/* Adjust the refcount */
if (error == 0 && rt->rt_refcnt <= 0) {
diff --git a/sys/net/route.h b/sys/net/route.h
index 03bb38f06d4..372d8b1fc99 100644
--- a/sys/net/route.h
+++ b/sys/net/route.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: route.h,v 1.38 2006/03/30 09:53:43 claudio Exp $ */
+/* $OpenBSD: route.h,v 1.39 2006/04/22 19:43:07 claudio Exp $ */
/* $NetBSD: route.h,v 1.9 1996/02/13 22:00:49 christos Exp $ */
/*
@@ -317,7 +317,7 @@ void rt_ifmsg(struct ifnet *);
void rt_ifannouncemsg(struct ifnet *, int);
void rt_maskedcopy(struct sockaddr *,
struct sockaddr *, struct sockaddr *);
-void rt_missmsg(int, struct rt_addrinfo *, int, int);
+void rt_missmsg(int, struct rt_addrinfo *, int, struct ifnet *, int);
void rt_newaddrmsg(int, struct ifaddr *, int, struct rtentry *);
int rt_setgate(struct rtentry *, struct sockaddr *,
struct sockaddr *);
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index 05d1ac7b2ee..0d181be85b8 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rtsock.c,v 1.57 2006/03/31 17:30:39 claudio Exp $ */
+/* $OpenBSD: rtsock.c,v 1.58 2006/04/22 19:43:07 claudio Exp $ */
/* $NetBSD: rtsock.c,v 1.18 1996/03/29 00:32:10 cgd Exp $ */
/*
@@ -639,7 +639,8 @@ again:
* destination.
*/
void
-rt_missmsg(int type, struct rt_addrinfo *rtinfo, int flags, int error)
+rt_missmsg(int type, struct rt_addrinfo *rtinfo, int flags, struct ifnet *ifp,
+ int error)
{
struct rt_msghdr *rtm;
struct mbuf *m;
@@ -654,6 +655,8 @@ rt_missmsg(int type, struct rt_addrinfo *rtinfo, int flags, int error)
rtm->rtm_flags = RTF_DONE | flags;
rtm->rtm_errno = error;
rtm->rtm_addrs = rtinfo->rti_addrs;
+ if (ifp != NULL)
+ rtm->rtm_index = ifp->if_index;
if (sa == NULL)
route_proto.sp_protocol = 0;
else
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c
index 1dc2af9749e..842e2c6f192 100644
--- a/sys/netinet/in_pcb.c
+++ b/sys/netinet/in_pcb.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: in_pcb.c,v 1.85 2006/03/05 21:48:56 miod Exp $ */
+/* $OpenBSD: in_pcb.c,v 1.86 2006/04/22 19:43:07 claudio Exp $ */
/* $NetBSD: in_pcb.c,v 1.25 1996/02/13 23:41:53 christos Exp $ */
/*
@@ -630,7 +630,7 @@ in_losing(inp)
info.rti_info[RTAX_DST] = &inp->inp_route.ro_dst;
info.rti_info[RTAX_GATEWAY] = rt->rt_gateway;
info.rti_info[RTAX_NETMASK] = rt_mask(rt);
- rt_missmsg(RTM_LOSING, &info, rt->rt_flags, 0);
+ rt_missmsg(RTM_LOSING, &info, rt->rt_flags, rt->rt_ifp, 0);
if (rt->rt_flags & RTF_DYNAMIC)
(void) rtrequest(RTM_DELETE, rt_key(rt),
rt->rt_gateway, rt_mask(rt), rt->rt_flags,
diff --git a/sys/netinet6/nd6_rtr.c b/sys/netinet6/nd6_rtr.c
index 04553d07d5e..e0322c637c1 100644
--- a/sys/netinet6/nd6_rtr.c
+++ b/sys/netinet6/nd6_rtr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: nd6_rtr.c,v 1.37 2006/03/22 14:37:45 henning Exp $ */
+/* $OpenBSD: nd6_rtr.c,v 1.38 2006/04/22 19:43:07 claudio Exp $ */
/* $KAME: nd6_rtr.c,v 1.97 2001/02/07 11:09:13 itojun Exp $ */
/*
@@ -431,7 +431,7 @@ nd6_rtmsg(cmd, rt)
info.rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr;
}
- rt_missmsg(cmd, &info, rt->rt_flags, 0);
+ rt_missmsg(cmd, &info, rt->rt_flags, rt->rt_ifp, 0);
}
void