From f0aa8d4f42acf5ef04346bd6289a50ec0f2a3d3f Mon Sep 17 00:00:00 2001 From: Kristof Provost Date: Thu, 15 Aug 2024 18:34:35 +0200 Subject: [PATCH] zebra: fix loading kernel routs without netlink Commit 605df8d44 zebra: Use zebra dplane for RTM link and addr broke loading of kernel routes at startup for configurations without netlink. It rearranged the startup sequence in zebra_ns_enable() to pass via zebra_ns_startup_continue(), triggered through zebra_dplane_startup_stage() calls. However, it neglected to make these calls in the non-netlink code path. As a result zebra failed to load kernel routes at startup on platforms such as FreeBSD. Insert these calls so we run through all of the expected startup stages. Signed-off-by: Kristof Provost --- zebra/if_ioctl.c | 2 ++ zebra/if_sysctl.c | 2 ++ zebra/kernel_socket.c | 2 ++ 3 files changed, 6 insertions(+) diff --git a/zebra/if_ioctl.c b/zebra/if_ioctl.c index d0aa2167fe5d..688a7f6e332f 100644 --- a/zebra/if_ioctl.c +++ b/zebra/if_ioctl.c @@ -296,6 +296,8 @@ void interface_list(struct zebra_ns *zns) /proc/net/if_inet6. */ ifaddr_proc_ipv6(); #endif /* HAVE_PROC_NET_IF_INET6 */ + + zebra_dplane_startup_stage(zns, ZEBRA_DPLANE_INTERFACES_READ); } #endif /* OPEN_BSD */ diff --git a/zebra/if_sysctl.c b/zebra/if_sysctl.c index 9db959896edd..28cbb0415a5c 100644 --- a/zebra/if_sysctl.c +++ b/zebra/if_sysctl.c @@ -128,6 +128,8 @@ void interface_list(struct zebra_ns *zns) /* Free sysctl buffer. */ XFREE(MTYPE_TMP, ref); + + zebra_dplane_startup_stage(zns, ZEBRA_DPLANE_INTERFACES_READ); } #endif /* !defined(GNU_LINUX) && !defined(OPEN_BSD) */ diff --git a/zebra/kernel_socket.c b/zebra/kernel_socket.c index d50e7de229a8..5cfbe7a896dd 100644 --- a/zebra/kernel_socket.c +++ b/zebra/kernel_socket.c @@ -1468,10 +1468,12 @@ static void routing_socket(struct zebra_ns *zns) void interface_list_second(struct zebra_ns *zns) { + zebra_dplane_startup_stage(zns, ZEBRA_DPLANE_ADDRESSES_READ); } void interface_list_tunneldump(struct zebra_ns *zns) { + zebra_dplane_startup_stage(zns, ZEBRA_DPLANE_TUNNELS_READ); } /* Exported interface function. This function simply calls