mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-03 09:00:21 +00:00
Correct ARP update handling when the routes for network interfaces are
restricted to a single FIB in a multifib system. Restricting an interface's routes to the FIB to which it is assigned (by setting net.add_addr_allfibs=0) causes ARP updates to fail with "arpresolve: can't allocate llinfo for x.x.x.x". This is due to the ARP update code hard coding it's lookup for existing routing entries to FIB 0. sys/netinet/in.c: When dealing with RTM_ADD (add route) requests for an interface, use the interface's assigned FIB instead of the default (FIB 0). sys/netinet/if_ether.c: In arpresolve(), enhance error message generated when an lla_lookup() fails so that the interface causing the error is visible in logs. tests/sys/netinet/fibs_test.sh Clear ATF expected error. PR: kern/167947 Submitted by: Nikolay Denev <ndenev@gmail.com> (previous version) Reviewed by: melifaro MFC after: 3 weeks Sponsored by: Spectra Logic Corporation
This commit is contained in:
parent
54ff5d7323
commit
743c072a09
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=263779
@ -334,8 +334,8 @@ arpresolve(struct ifnet *ifp, struct rtentry *rt0, struct mbuf *m,
|
||||
if (la == NULL) {
|
||||
if (flags & LLE_CREATE)
|
||||
log(LOG_DEBUG,
|
||||
"arpresolve: can't allocate llinfo for %s\n",
|
||||
inet_ntoa(SIN(dst)->sin_addr));
|
||||
"arpresolve: can't allocate llinfo for %s on %s\n",
|
||||
inet_ntoa(SIN(dst)->sin_addr), ifp->if_xname);
|
||||
m_freem(m);
|
||||
return (EINVAL);
|
||||
}
|
||||
|
@ -994,8 +994,9 @@ in_lltable_rtcheck(struct ifnet *ifp, u_int flags, const struct sockaddr *l3addr
|
||||
KASSERT(l3addr->sa_family == AF_INET,
|
||||
("sin_family %d", l3addr->sa_family));
|
||||
|
||||
/* XXX rtalloc1 should take a const param */
|
||||
rt = rtalloc1(__DECONST(struct sockaddr *, l3addr), 0, 0);
|
||||
/* XXX rtalloc1_fib should take a const param */
|
||||
rt = rtalloc1_fib(__DECONST(struct sockaddr *, l3addr), 0, 0,
|
||||
ifp->if_fib);
|
||||
|
||||
if (rt == NULL)
|
||||
return (EINVAL);
|
||||
|
@ -55,7 +55,6 @@ arpresolve_checks_interface_fib_head()
|
||||
}
|
||||
arpresolve_checks_interface_fib_body()
|
||||
{
|
||||
atf_expect_fail "kern/167947 arpresolve checks only the default FIB for the interface route"
|
||||
# Configure the TAP interfaces to use a RFC5737 nonrouteable addresses
|
||||
# and a non-default fib
|
||||
ADDR0="192.0.2.2"
|
||||
|
Loading…
Reference in New Issue
Block a user