From: Yuan Yuan Date: Wed, 22 Sep 2021 20:02:40 +0000 (+0000) Subject: Zebra: Ignore the failure of startup intf lookup. X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=5664b80ac1f1e1a98f3aca87cea42548dd75e4e4;p=matthieu%2Ffrr.git Zebra: Ignore the failure of startup intf lookup. In startup, zebra would dump interface information from Kernel in 3 steps w/o lock: step1, get interface information; step2, get interface ipv4 address; step3, get interface ipv6 address. If any interface gets added after step1, but before step2/3, zebra would get extra interface addresses in step2/3 that has not been added into zebra in step1. Returning error in the referenced interface lookup would cause the startup interface retrieval to be incomplete. Signed-off-by: Yuan Yuan (cherry picked from commit 8eec31ef564dcf4e096e700a648570973ca4e96b) --- diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c index a51e0b82cb..d2774a1e63 100644 --- a/zebra/if_netlink.c +++ b/zebra/if_netlink.c @@ -1301,11 +1301,22 @@ int netlink_interface_addr(struct nlmsghdr *h, ns_id_t ns_id, int startup) ifp = if_lookup_by_index_per_ns(zns, ifa->ifa_index); if (ifp == NULL) { - flog_err( - EC_LIB_INTERFACE, - "netlink_interface_addr can't find interface by index %d", - ifa->ifa_index); - return -1; + if (startup) { + /* During startup, failure to lookup the referenced + * interface should not be an error, so we have + * downgraded this condition to warning, and we permit + * the startup interface state retrieval to continue. + */ + flog_warn(EC_LIB_INTERFACE, + "%s: can't find interface by index %d", + __func__, ifa->ifa_index); + return 0; + } else { + flog_err(EC_LIB_INTERFACE, + "%s: can't find interface by index %d", + __func__, ifa->ifa_index); + return -1; + } } /* Flags passed through */