diff options
author | melifaro <melifaro@FreeBSD.org> | 2014-05-08 20:41:39 +0000 |
---|---|---|
committer | melifaro <melifaro@FreeBSD.org> | 2014-05-08 20:41:39 +0000 |
commit | 5ca6003c5c59fcbccde099c4a5acae82537f80d9 (patch) | |
tree | bb8f2e278e828d67030223454dae78d3f19d19dc /sys/net/radix_mpath.c | |
parent | d42ec49fe7376d5d77807fe648fe0af085a8b7ac (diff) | |
download | FreeBSD-src-5ca6003c5c59fcbccde099c4a5acae82537f80d9.zip FreeBSD-src-5ca6003c5c59fcbccde099c4a5acae82537f80d9.tar.gz |
Merge r260379, r260460.
r260379:
Partially fix IPv4 interface routes deletion in RADIX_MPATH.
Noticed by: Nikolay Denev <ndenev at gmail.com>
r260460:
Constanly use RT_ALL_FIBS everywhere instead of -1.
Diffstat (limited to 'sys/net/radix_mpath.c')
-rw-r--r-- | sys/net/radix_mpath.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/sys/net/radix_mpath.c b/sys/net/radix_mpath.c index 7a29069..82c0add 100644 --- a/sys/net/radix_mpath.c +++ b/sys/net/radix_mpath.c @@ -112,11 +112,16 @@ rt_mpath_matchgate(struct rtentry *rt, struct sockaddr *gate) if (rt->rt_gateway->sa_family == AF_LINK) { if (!memcmp(rt->rt_ifa->ifa_addr, gate, gate->sa_len)) break; - } else { - if (rt->rt_gateway->sa_len == gate->sa_len && - !memcmp(rt->rt_gateway, gate, gate->sa_len)) - break; } + + /* + * Check for other options: + * 1) Routes with 'real' IPv4/IPv6 gateway + * 2) Loopback host routes (another AF_LINK/sockadd_dl check) + * */ + if (rt->rt_gateway->sa_len == gate->sa_len && + !memcmp(rt->rt_gateway, gate, gate->sa_len)) + break; } while ((rn = rn_mpath_next(rn)) != NULL); return (struct rtentry *)rn; |