diff options
-rw-r--r-- | sys/net/if.c | 4 | ||||
-rw-r--r-- | sys/net/route.c | 2 | ||||
-rw-r--r-- | sys/netinet/in.c | 4 | ||||
-rwxr-xr-x | tests/sys/netinet/fibs_test.sh | 1 |
4 files changed, 6 insertions, 5 deletions
diff --git a/sys/net/if.c b/sys/net/if.c index 908804d..39bcb38 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -1458,7 +1458,7 @@ ifa_add_loopback_route(struct ifaddr *ifa, struct sockaddr *ia) info.rti_flags = ifa->ifa_flags | RTF_HOST | RTF_STATIC; info.rti_info[RTAX_DST] = ia; info.rti_info[RTAX_GATEWAY] = (struct sockaddr *)&null_sdl; - error = rtrequest1_fib(RTM_ADD, &info, &rt, 0); + error = rtrequest1_fib(RTM_ADD, &info, &rt, ifa->ifa_ifp->if_fib); if (error == 0 && rt != NULL) { RT_LOCK(rt); @@ -1490,7 +1490,7 @@ ifa_del_loopback_route(struct ifaddr *ifa, struct sockaddr *ia) info.rti_flags = ifa->ifa_flags | RTF_HOST | RTF_STATIC; info.rti_info[RTAX_DST] = ia; info.rti_info[RTAX_GATEWAY] = (struct sockaddr *)&null_sdl; - error = rtrequest1_fib(RTM_DELETE, &info, NULL, 0); + error = rtrequest1_fib(RTM_DELETE, &info, NULL, ifa->ifa_ifp->if_fib); if (error != 0) log(LOG_DEBUG, "%s: deletion failed: %u\n", __func__, error); diff --git a/sys/net/route.c b/sys/net/route.c index dfad778..4182c85 100644 --- a/sys/net/route.c +++ b/sys/net/route.c @@ -1543,7 +1543,7 @@ rtinit1(struct ifaddr *ifa, int cmd, int flags, int fibnum) } if (fibnum == RT_ALL_FIBS) { if (rt_add_addr_allfibs == 0 && cmd == (int)RTM_ADD) { - startfib = endfib = curthread->td_proc->p_fibnum; + startfib = endfib = ifa->ifa_ifp->if_fib; } else { startfib = 0; endfib = rt_numfibs - 1; diff --git a/sys/netinet/in.c b/sys/netinet/in.c index 1f07542..13cce0f 100644 --- a/sys/netinet/in.c +++ b/sys/netinet/in.c @@ -1007,10 +1007,12 @@ in_scrubprefix(struct in_ifaddr *target, u_int flags) (target->ia_flags & IFA_RTSELF)) { struct route ia_ro; int freeit = 0; + int fib; bzero(&ia_ro, sizeof(ia_ro)); *((struct sockaddr_in *)(&ia_ro.ro_dst)) = target->ia_addr; - rtalloc_ign_fib(&ia_ro, 0, 0); + fib = target->ia_ifa.ifa_ifp->if_fib; + rtalloc_ign_fib(&ia_ro, 0, fib); if ((ia_ro.ro_rt != NULL) && (ia_ro.ro_rt->rt_ifp != NULL) && (ia_ro.ro_rt->rt_ifp == V_loif)) { RT_LOCK(ia_ro.ro_rt); diff --git a/tests/sys/netinet/fibs_test.sh b/tests/sys/netinet/fibs_test.sh index a6dbe42..95a8faa 100755 --- a/tests/sys/netinet/fibs_test.sh +++ b/tests/sys/netinet/fibs_test.sh @@ -116,7 +116,6 @@ loopback_and_network_routes_on_nondefault_fib_head() loopback_and_network_routes_on_nondefault_fib_body() { - atf_expect_fail "kern/187549 Host and network routes for a new interface appear in the wrong FIB" # Configure the TAP interface to use an RFC5737 nonrouteable address # and a non-default fib ADDR="192.0.2.2" |