diff --git a/sys/net/if.c b/sys/net/if.c index da55e4b64c7..04d4fd2c7ff 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -1908,6 +1908,7 @@ ifa_maintain_loopback_route(int cmd, const char *otype, struct ifaddr *ifa, struct sockaddr *ia) { int error; + int fibnum; struct rt_addrinfo info; struct sockaddr_dl null_sdl; struct ifnet *ifp; @@ -1924,6 +1925,16 @@ ifa_maintain_loopback_route(int cmd, const char *otype, struct ifaddr *ifa, error = rtrequest1_fib(cmd, &info, NULL, ifp->if_fib); + // XXX: add loopback route into other fibs + if (V_rt_add_addr_allfibs && cmd == RTM_ADD && error == 0) { + for (fibnum = 0; fibnum < rt_numfibs; fibnum++) { + if (fibnum == ifp->if_fib) + continue; + + (void) rtrequest1_fib(cmd, &info, NULL, fibnum); + } + } + if (error == 0 || (cmd == RTM_ADD && error == EEXIST) || (cmd == RTM_DELETE && (error == ENOENT || error == ESRCH)))