From cef0a8118e5fd004a9cc8dd2172a1f9b7cd9a5aa Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Fri, 30 Sep 2011 17:41:01 +0200 Subject: Check routes with equal prefix if preferred source is specified --- src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c') 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); -- cgit v1.2.3