svn commit: r287051 - projects/routing/sys/netinet
Alexander V. Chernikov
melifaro at FreeBSD.org
Sun Aug 23 18:18:10 UTC 2015
Author: melifaro
Date: Sun Aug 23 18:18:08 2015
New Revision: 287051
URL: https://svnweb.freebsd.org/changeset/base/287051
Log:
Convert arpinput() to use new routing api.
Modified:
projects/routing/sys/netinet/if_ether.c
Modified: projects/routing/sys/netinet/if_ether.c
==============================================================================
--- projects/routing/sys/netinet/if_ether.c Sun Aug 23 18:17:38 2015 (r287050)
+++ projects/routing/sys/netinet/if_ether.c Sun Aug 23 18:18:08 2015 (r287051)
@@ -71,6 +71,8 @@ __FBSDID("$FreeBSD$");
#include <netinet/ip_carp.h>
#endif
+#include <net/rt_nhops.h>
+
#include <net/if_arc.h>
#include <net/iso88025.h>
@@ -635,7 +637,6 @@ in_arpinput(struct mbuf *m)
struct arphdr *ah;
struct ifnet *ifp = m->m_pkthdr.rcvif;
struct llentry *la = NULL;
- struct rtentry *rt;
struct ifaddr *ifa;
struct in_ifaddr *ia;
struct sockaddr sa;
@@ -645,6 +646,7 @@ in_arpinput(struct mbuf *m)
int req_len;
int bridged = 0, is_bridge = 0;
int carped;
+ struct nhop4_extended nh_ext;
struct sockaddr_in sin;
sin.sin_len = sizeof(struct sockaddr_in);
sin.sin_family = AF_INET;
@@ -918,8 +920,7 @@ reply:
sin.sin_addr = itaddr;
/* XXX MRT use table 0 for arp reply */
- rt = in_rtalloc1((struct sockaddr *)&sin, 0, 0UL, 0);
- if (!rt)
+ if (fib4_lookup_nh_extended(0, itaddr, 0, &nh_ext) != 0)
goto drop;
/*
@@ -927,11 +928,8 @@ reply:
* as this one came out of, or we'll get into a fight
* over who claims what Ether address.
*/
- if (!rt->rt_ifp || rt->rt_ifp == ifp) {
- RTFREE_LOCKED(rt);
+ if (nh_ext.nh_ifp == ifp)
goto drop;
- }
- RTFREE_LOCKED(rt);
(void)memcpy(ar_tha(ah), ar_sha(ah), ah->ar_hln);
(void)memcpy(ar_sha(ah), enaddr, ah->ar_hln);
@@ -945,18 +943,14 @@ reply:
sin.sin_addr = isaddr;
/* XXX MRT use table 0 for arp checks */
- rt = in_rtalloc1((struct sockaddr *)&sin, 0, 0UL, 0);
- if (!rt)
+ if (fib4_lookup_nh_extended(0, isaddr, 0, &nh_ext) != 0)
goto drop;
- if (rt->rt_ifp != ifp) {
+ if (nh_ext.nh_ifp != ifp) {
ARP_LOG(LOG_INFO, "proxy: ignoring request"
- " from %s via %s, expecting %s\n",
- inet_ntoa(isaddr), ifp->if_xname,
- rt->rt_ifp->if_xname);
- RTFREE_LOCKED(rt);
+ " from %s via wrong interface %s\n",
+ inet_ntoa(isaddr), ifp->if_xname);
goto drop;
}
- RTFREE_LOCKED(rt);
#ifdef DEBUG_PROXY
printf("arp: proxying for %s\n", inet_ntoa(itaddr));
More information about the svn-src-projects
mailing list