From 2eb43ca40596d88521a1591f7d4c392b700e3bbf Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Thu, 15 Oct 2020 16:10:07 +0200 Subject: [PATCH] kernel-netlink: Update cached address flags Note that manually adding an IPv6 address without disabling duplicate address detection (DAD, e.g. via `nodad` when using iproute2) will cause a roam event due to a flag change after about 1-2 seconds (TENTATIVE is removed). If this is a problem, we might have to ignore addresses with TENTATIVE flag when we receive a RTM_NEWADDR message until that flag is eventually removed. Fixes #3511. --- .../plugins/kernel_netlink/kernel_netlink_net.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/libcharon/plugins/kernel_netlink/kernel_netlink_net.c b/src/libcharon/plugins/kernel_netlink/kernel_netlink_net.c index f174c26987..57a26b7deb 100644 --- a/src/libcharon/plugins/kernel_netlink/kernel_netlink_net.c +++ b/src/libcharon/plugins/kernel_netlink/kernel_netlink_net.c @@ -1278,6 +1278,17 @@ static void process_addr(private_kernel_netlink_net_t *this, addr_map_entry_remove(this->addrs, addr, iface); addr_entry_destroy(addr); } + else if (entry->addr->flags != msg->ifa_flags) + { + found = TRUE; + entry->addr->flags = msg->ifa_flags; + if (event && iface->usable) + { + changed = TRUE; + DBG1(DBG_KNL, "flags changed for %H on %s", host, + iface->ifname); + } + } } else { -- 2.47.2