ok?
Index: netinet/if_ether.c
===================================================================
RCS file: /cvs/src/sys/netinet/if_ether.c,v
retrieving revision 1.176
diff -u -p -r1.176 if_ether.c
--- netinet/if_ether.c 22 Oct 2015 18:14:53 -0000 1.176
+++ netinet/if_ether.c 24 Oct 2015 12:39:24 -0000
@@ -141,7 +141,7 @@ arp_rtrequest(int req, struct rtentry *r
{
struct sockaddr *gate = rt->rt_gateway;
struct llinfo_arp *la = (struct llinfo_arp *)rt->rt_llinfo;
- struct ifnet *ifp = rt->rt_ifp;
+ struct ifnet *ifp;
struct ifaddr *ifa;
struct mbuf *m;
@@ -166,8 +166,9 @@ arp_rtrequest(int req, struct rtentry *r
if (rt->rt_flags & (RTF_GATEWAY|RTF_BROADCAST))
return;
- switch (req) {
+ ifp = if_get(rt->rt_ifidx);
+ switch (req) {
case RTM_ADD:
/*
* XXX: If this is a manually added route to interface
@@ -251,6 +252,8 @@ arp_rtrequest(int req, struct rtentry *r
}
pool_put(&arp_pool, la);
}
+
+ if_put(ifp);
}
/*
Index: netinet/in_pcb.c
===================================================================
RCS file: /cvs/src/sys/netinet/in_pcb.c,v
retrieving revision 1.186
diff -u -p -r1.186 in_pcb.c
--- netinet/in_pcb.c 23 Oct 2015 13:26:07 -0000 1.186
+++ netinet/in_pcb.c 24 Oct 2015 12:41:54 -0000
@@ -624,19 +624,22 @@ in_pcbnotifyall(struct inpcbtable *table
void
in_losing(struct inpcb *inp)
{
+ struct ifnet *ifp;
struct rtentry *rt;
struct rt_addrinfo info;
if ((rt = inp->inp_route.ro_rt)) {
- inp->inp_route.ro_rt = 0;
+ inp->inp_route.ro_rt = NULL;
memset(&info, 0, sizeof(info));
info.rti_flags = rt->rt_flags;
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, rt->rt_ifp, 0,
+ ifp = if_get(rt->rt_ifidx);
+ rt_missmsg(RTM_LOSING, &info, rt->rt_flags, ifp, 0,
inp->inp_rtableid);
+ if_put(ifp);
if (rt->rt_flags & RTF_DYNAMIC)
(void)rtrequest1(RTM_DELETE, &info, rt->rt_priority,
NULL, inp->inp_rtableid);
Index: netinet/ip_input.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_input.c,v
retrieving revision 1.258
diff -u -p -r1.258 ip_input.c
--- netinet/ip_input.c 19 Oct 2015 11:59:26 -0000 1.258
+++ netinet/ip_input.c 24 Oct 2015 12:52:35 -0000
@@ -1452,7 +1452,7 @@ ip_forward(struct mbuf *m, struct ifnet
* Don't send redirect if we advertise destination's arp address
* as ours (proxy arp).
*/
- if (rt->rt_ifp == ifp &&
+ if ((rt->rt_ifidx == ifp->if_index) &&
(rt->rt_flags & (RTF_DYNAMIC|RTF_MODIFIED)) == 0 &&
satosin(rt_key(rt))->sin_addr.s_addr != 0 &&
ipsendredirects && !srcrt &&
Index: netinet/tcp_input.c
===================================================================
RCS file: /cvs/src/sys/netinet/tcp_input.c,v
retrieving revision 1.305
diff -u -p -r1.305 tcp_input.c
--- netinet/tcp_input.c 11 Sep 2015 08:17:06 -0000 1.305
+++ netinet/tcp_input.c 24 Oct 2015 12:26:49 -0000
@@ -2989,7 +2989,7 @@ tcp_mss(struct tcpcb *tp, int offer)
if (rt == NULL)
goto out;
- ifp = rt->rt_ifp;
+ ifp = if_get(rt->rt_ifidx);
switch (tp->pf) {
#ifdef INET6
@@ -3065,6 +3065,7 @@ tcp_mss(struct tcpcb *tp, int offer)
}
out:
+ if_put(ifp);
/*
* The current mss, t_maxseg, is initialized to the default value.
* If we compute a smaller value, reduce the current mss.