3 places where we don't need any "struct route". ok?
Index: netinet/ip_icmp.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/ip_icmp.c,v
retrieving revision 1.126
diff -u -p -r1.126 ip_icmp.c
--- netinet/ip_icmp.c 1 Nov 2014 21:40:38 -0000 1.126
+++ netinet/ip_icmp.c 25 Nov 2014 14:51:16 -0000
@@ -912,19 +912,16 @@ icmp_sysctl(int *name, u_int namelen, vo
struct rtentry *
icmp_mtudisc_clone(struct in_addr dst, u_int rtableid)
{
- struct sockaddr_in *sin;
- struct route ro;
+ struct sockaddr_in sin;
struct rtentry *rt;
int error;
- memset(&ro, 0, sizeof(ro));
- ro.ro_tableid = rtableid;
- sin = satosin(&ro.ro_dst);
- sin->sin_family = AF_INET;
- sin->sin_len = sizeof(*sin);
- sin->sin_addr = dst;
+ memset(&sin, 0, sizeof(sin));
+ sin.sin_family = AF_INET;
+ sin.sin_len = sizeof(sin);
+ sin.sin_addr = dst;
- rt = rtalloc(&ro.ro_dst, RT_REPORT|RT_RESOLVE, rtableid);
+ rt = rtalloc(sintosa(&sin), RT_REPORT|RT_RESOLVE, rtableid);
if (rt == NULL)
return (NULL);
@@ -940,7 +937,7 @@ icmp_mtudisc_clone(struct in_addr dst, u
struct rt_addrinfo info;
memset(&info, 0, sizeof(info));
- info.rti_info[RTAX_DST] = sintosa(sin);
+ info.rti_info[RTAX_DST] = sintosa(&sin);
info.rti_info[RTAX_GATEWAY] = rt->rt_gateway;
info.rti_flags = RTF_GATEWAY | RTF_HOST | RTF_DYNAMIC;
Index: netinet/ip_output.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/ip_output.c,v
retrieving revision 1.272
diff -u -p -r1.272 ip_output.c
--- netinet/ip_output.c 20 Nov 2014 15:55:04 -0000 1.272
+++ netinet/ip_output.c 25 Nov 2014 14:51:16 -0000
@@ -1663,8 +1663,8 @@ ip_setmoptions(int optname, struct ip_mo
struct ifnet *ifp = NULL;
struct ip_moptions *imo = *imop;
struct in_multi **immp;
- struct route ro;
- struct sockaddr_in *dst, sin;
+ struct rtentry *rt;
+ struct sockaddr_in sin;
int i, error = 0;
u_char loop;
@@ -1768,21 +1768,18 @@ ip_setmoptions(int optname, struct ip_mo
* the route to the given multicast address.
*/
if (mreq->imr_interface.s_addr == INADDR_ANY) {
- ro.ro_rt = NULL;
- dst = satosin(&ro.ro_dst);
- dst->sin_len = sizeof(*dst);
- dst->sin_family = AF_INET;
- dst->sin_addr = mreq->imr_multiaddr;
- if (!(ro.ro_rt && ro.ro_rt->rt_ifp &&
- (ro.ro_rt->rt_flags & RTF_UP)))
- ro.ro_rt = rtalloc(&ro.ro_dst,
- RT_REPORT|RT_RESOLVE, rtableid);
- if (ro.ro_rt == NULL) {
+ memset(&sin, 0, sizeof(sin));
+ sin.sin_len = sizeof(sin);
+ sin.sin_family = AF_INET;
+ sin.sin_addr = mreq->imr_multiaddr;
+ rt = rtalloc(sintosa(&sin), RT_REPORT|RT_RESOLVE,
+ rtableid);
+ if (rt == NULL) {
error = EADDRNOTAVAIL;
break;
}
- ifp = ro.ro_rt->rt_ifp;
- rtfree(ro.ro_rt);
+ ifp = rt->rt_ifp;
+ rtfree(rt);
} else {
memset(&sin, 0, sizeof(sin));
sin.sin_len = sizeof(sin);
Index: netinet6/frag6.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/frag6.c,v
retrieving revision 1.57
diff -u -p -r1.57 frag6.c
--- netinet6/frag6.c 18 Nov 2014 02:37:31 -0000 1.57
+++ netinet6/frag6.c 25 Nov 2014 14:51:16 -0000
@@ -172,8 +172,8 @@ frag6_input(struct mbuf **mp, int *offp,
int fragoff, frgpartlen; /* must be larger than u_int16_t */
struct ifnet *dstifp;
#ifdef IN6_IFSTAT_STRICT
- struct route_in6 ro;
- struct sockaddr_in6 *dst;
+ struct sockaddr_in6 dst;
+ struct rtentry *rt;
#endif
u_int8_t ecn, ecn0;
@@ -185,21 +185,19 @@ frag6_input(struct mbuf **mp, int *offp,
dstifp = NULL;
#ifdef IN6_IFSTAT_STRICT
/* find the destination interface of the packet. */
- bzero(&ro, sizeof(ro));
- ro.ro_tableid = m->m_pkthdr.ph_rtableid;
- dst = &ro.ro_dst;
- dst->sin6_family = AF_INET6;
- dst->sin6_len = sizeof(struct sockaddr_in6);
- dst->sin6_addr = ip6->ip6_dst;
+ memset(&dst, 0, sizeof(dst));
+ dst.sin6_family = AF_INET6;
+ dst.sin6_len = sizeof(struct sockaddr_in6);
+ dst.sin6_addr = ip6->ip6_dst;
- ro.ro_rt = rtalloc_mpath(sin6tosa(&ro.ro_dst),
- &ip6->ip6_src.s6_addr32[0], ro.ro_tableid);
+ rt = rtalloc_mpath(sin6tosa(&dst), &ip6->ip6_src.s6_addr32[0],
+ m->m_pkthdr.ph_rtableid);
- if (ro.ro_rt != NULL && ro.ro_rt->rt_ifa != NULL)
- dstifp = ifatoia6(ro.ro_rt->rt_ifa)->ia_ifp;
- if (ro.ro_rt != NULL) {
- rtfree(ro.ro_rt);
- ro.ro_rt = NULL;
+ if (rt != NULL) {
+ if (rt->rt_ifa != NULL)
+ dstifp = ifatoia6(rt->rt_ifa)->ia_ifp;
+ rtfree(rt);
+ rt = NULL;
}
#else
/* we are violating the spec, this is not the destination interface */