From 93ab25b2160ac8a2da6d5dc6ead003e9b8abf9c7 Mon Sep 17 00:00:00 2001 From: Stijn Tintel Date: Sun, 14 Aug 2016 20:22:57 +0300 Subject: [PATCH] router: skip parse_routes when ra_default > 1 It does not make sense to scan the entire routing table if the decision will be overridden afterwards. This makes it possible to use odhcpd on a router with full IPv6 BGP table, by setting ra_default to 2. Without this change, odhcpd is constantly busy reading /proc/net/ipv6_route, and doesn't respond to router solicitations in time. Signed-off-by: Stijn Tintel --- src/router.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/router.c b/src/router.c index 9711975..f964a82 100644 --- a/src/router.c +++ b/src/router.c @@ -257,10 +257,10 @@ static uint64_t send_router_advert(struct interface *iface, const struct in6_add memcpy(addrs, iface->ia_addr, ipcnt * sizeof(*addrs)); // Check default route - if (parse_routes(addrs, ipcnt)) - adv.h.nd_ra_router_lifetime = htons(1); if (iface->default_router > 1) adv.h.nd_ra_router_lifetime = htons(iface->default_router); + else if (parse_routes(addrs, ipcnt)) + adv.h.nd_ra_router_lifetime = htons(1); } // Construct Prefix Information options -- 2.30.2