aboutsummaryrefslogtreecommitdiffstats
path: root/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2011-09-30 17:41:01 +0200
committerTobias Brunner <tobias@strongswan.org>2012-09-21 18:16:25 +0200
commitcef0a8118e5fd004a9cc8dd2172a1f9b7cd9a5aa (patch)
treeeb7f855ea2d73312b0f38573c6869644d6206ef0 /src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
parent9d6b02d6c16590de559a69eb1bcc74304dbaddf7 (diff)
downloadstrongswan-cef0a8118e5fd004a9cc8dd2172a1f9b7cd9a5aa.tar.bz2
strongswan-cef0a8118e5fd004a9cc8dd2172a1f9b7cd9a5aa.tar.xz
Check routes with equal prefix if preferred source is specified
Diffstat (limited to 'src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c')
-rw-r--r--src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c b/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
index 73d7ed2c9..9d82a4e89 100644
--- a/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
+++ b/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
@@ -1236,8 +1236,10 @@ static host_t *get_route(private_kernel_netlink_net_t *this, host_t *dest,
}
rta = RTA_NEXT(rta, rtasize);
}
- if (msg->rtm_dst_len <= best)
- { /* not better than a previous one */
+ if (msg->rtm_dst_len < best ||
+ msg->rtm_dst_len == best && (nexthop || !candidate))
+ { /* not better than a previous one, but if a preferred source
+ * address is specified, we still check equal routes */
continue;
}
enumerator = this->rt_exclude->create_enumerator(this->rt_exclude);