From 26e95efa4d49976951190fc416c8d91e8e735b87 Mon Sep 17 00:00:00 2001 From: Rafael Zalamena Date: Fri, 1 Jul 2022 10:00:25 -0300 Subject: [PATCH] zebra: handle FreeBSD routing socket ENOBUFS This is a slightly modified version of Hiroki Sato's version: https://github.com/hrs-allbsd/frr/commit/9ca79c941fd84322199994a2aed267b23d39c86a Handle the `ENOBUFS` on a OS basis since it could have been implemented differently (OpenBSD for an example uses `RTM_DESYNC`). Signed-off-by: Rafael Zalamena --- zebra/kernel_socket.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/zebra/kernel_socket.c b/zebra/kernel_socket.c index 57fd304ae8..2741a23242 100644 --- a/zebra/kernel_socket.c +++ b/zebra/kernel_socket.c @@ -1354,6 +1354,16 @@ static void kernel_read(struct thread *thread) if (nbytes < 0) { if (errno == ENOBUFS) { +#ifdef __FreeBSD__ + /* + * ENOBUFS indicates a temporary resource + * shortage and is not harmful for consistency of + * reading the routing socket. Ignore it. + */ + thread_add_read(zrouter.master, kernel_read, NULL, sock, + NULL); + return; +#else flog_err(EC_ZEBRA_RECVMSG_OVERRUN, "routing socket overrun: %s", safe_strerror(errno)); @@ -1363,6 +1373,7 @@ static void kernel_read(struct thread *thread) * recover zebra at this point. */ exit(-1); +#endif } if (errno != EAGAIN && errno != EWOULDBLOCK) flog_err_sys(EC_LIB_SOCKET, "routing socket error: %s", -- 2.39.5