changeset 2975:4f153a979fd2 draft

Fix route finding on Linux.
author Roy Marples <roy@marples.name>
date Mon, 02 Mar 2015 20:37:28 +0000
parents 1edbcf1a48ee
children fe20a975aa48
files ipv4.c ipv6.c
diffstat 2 files changed, 7 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ipv4.c	Mon Mar 02 20:20:43 2015 +0000
+++ b/ipv4.c	Mon Mar 02 20:37:28 2015 +0000
@@ -338,9 +338,11 @@
 		return NULL;
 	TAILQ_FOREACH(r, ctx->ipv4_kroutes, next) {
 		if (rt->dest.s_addr == r->dest.s_addr &&
+#ifdef HAVE_ROUTE_METRIC
+		    rt->iface == r->iface &&
+		    (!flags || rt->metric == r->metric) &&
+#else
 		    (!flags || rt->iface == r->iface) &&
-#ifdef HAVE_ROUTE_METRIC
-		    (!flags || rt->metric == r->metric) &&
 #endif
 		    rt->net.s_addr == r->net.s_addr)
 			return r;
--- a/ipv6.c	Mon Mar 02 20:20:43 2015 +0000
+++ b/ipv6.c	Mon Mar 02 20:37:28 2015 +0000
@@ -1741,7 +1741,10 @@
 		if (IN6_ARE_ADDR_EQUAL(&rt->dest, &r->dest) &&
 		    (!flags || rt->iface == r->iface) &&
 #ifdef HAVE_ROUTE_METRIC
+		    rt->iface == r->iface &&
 		    (!flags || rt->metric == r->metric) &&
+#else
+		    (!flags || rt->iface == r->iface) &&
 #endif
 		    IN6_ARE_ADDR_EQUAL(&rt->net, &r->net))
 			return r;