From 6c8b5c7dd98f084c1bfffcf0af1f5c8c6b4b4bd4 Mon Sep 17 00:00:00 2001 From: david Date: Sun, 30 Sep 2012 00:01:13 +0000 Subject: [PATCH] Assign sys_route interfaces immediately when iface names come from libdnet. --- libnetutil/netutil.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libnetutil/netutil.cc b/libnetutil/netutil.cc index d7126d403..34ed4f46b 100644 --- a/libnetutil/netutil.cc +++ b/libnetutil/netutil.cc @@ -1536,6 +1536,9 @@ static struct dnet_collector_route_nfo *sysroutes_dnet_find_interfaces(struct dn if( (ifaces=getinterfaces(&numifaces, NULL, 0))==NULL ) return NULL; for (i = 0; i < dcrn->numroutes; i++) { + if (dcrn->routes[i].device != NULL) + continue; + /* First we match up routes whose gateway address directly matches the address of an interface. */ for (j = 0; j < numifaces; j++) { @@ -1608,10 +1611,10 @@ static int collect_dnet_routes(const struct route_entry *entry, void *arg) { } /* Now for the important business */ - dcrn->routes[dcrn->numroutes].device = NULL; addr_ntos(&entry->route_dst, (struct sockaddr *) &dcrn->routes[dcrn->numroutes].dest); dcrn->routes[dcrn->numroutes].netmask_bits = entry->route_dst.addr_bits; addr_ntos(&entry->route_gw, (struct sockaddr *) &dcrn->routes[dcrn->numroutes].gw); + dcrn->routes[dcrn->numroutes].device = getInterfaceByName(entry->intf_name, dcrn->routes[dcrn->numroutes].dest.ss_family); dcrn->numroutes++; return 0;