summaryrefslogtreecommitdiffstats
path: root/sys/net/radix_mpath.c
diff options
context:
space:
mode:
authormelifaro <melifaro@FreeBSD.org>2014-05-08 20:41:39 +0000
committermelifaro <melifaro@FreeBSD.org>2014-05-08 20:41:39 +0000
commit5ca6003c5c59fcbccde099c4a5acae82537f80d9 (patch)
treebb8f2e278e828d67030223454dae78d3f19d19dc /sys/net/radix_mpath.c
parentd42ec49fe7376d5d77807fe648fe0af085a8b7ac (diff)
downloadFreeBSD-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.c13
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;
OpenPOWER on IntegriCloud