From 29c934d7ab98ca0b5da0e3757b885a1d3c19a2f4 Mon Sep 17 00:00:00 2001 From: Christian Marangi Date: Fri, 24 Mar 2023 00:29:15 +0100 Subject: config: recheck have_link_local on interface reload if already init If an interface is already init in the odhcpd avl tables, have_link_local is not set to true with a link local addr set as get ipv6 addr is skipped. Move checking for have_link_local outside get_addr to better track when an interface is ready and have a link local addr for interface already init in odhcpd avl tables. Fixes: #197 Fixes: 7c0f603abc14 ("router: skip RA and wait for LINK-LOCAL to be assigned") Signed-off-by: Christian Marangi --- src/config.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/config.c b/src/config.c index ee7219f..27e7f03 100644 --- a/src/config.c +++ b/src/config.c @@ -594,21 +594,21 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr if (len > 0) iface->addr6_len = len; - for (size_t i = 0; i < iface->addr6_len; i++) { - struct odhcpd_ipaddr *addr = &iface->addr6[i]; - - if (!addr->tentative) { - iface->have_link_local = true; - break; - } - } - len = netlink_get_interface_addrs(iface->ifindex, false, &iface->addr4); if (len > 0) iface->addr4_len = len; } + for (size_t i = 0; i < iface->addr6_len; i++) { + struct odhcpd_ipaddr *addr = &iface->addr6[i]; + + if (!addr->tentative) { + iface->have_link_local = true; + break; + } + } + iface->inuse = true; if ((c = tb[IFACE_ATTR_DYNAMICDHCP])) -- cgit v1.2.3