From ea684ccb6df5a7ffcfa118b9862e60c8567be9a0 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 15 Oct 2024 06:52:19 +0900 Subject: [PATCH] network/route: use sysctl_read_ip_property_int() for reading route/max_size --- src/network/networkd-route-util.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/network/networkd-route-util.c b/src/network/networkd-route-util.c index 9bb1e0f7070..dc9663e24b6 100644 --- a/src/network/networkd-route-util.c +++ b/src/network/networkd-route-util.c @@ -16,23 +16,26 @@ #include "strv.h" #include "sysctl-util.h" -#define ROUTES_DEFAULT_MAX_PER_FAMILY 4096U +#define ROUTES_DEFAULT_MAX_PER_FAMILY 4096 unsigned routes_max(void) { static thread_local unsigned cached = 0; - _cleanup_free_ char *s4 = NULL, *s6 = NULL; - unsigned val4 = ROUTES_DEFAULT_MAX_PER_FAMILY, val6 = ROUTES_DEFAULT_MAX_PER_FAMILY; + int val4 = ROUTES_DEFAULT_MAX_PER_FAMILY, val6 = ROUTES_DEFAULT_MAX_PER_FAMILY; if (cached > 0) return cached; - if (sysctl_read_ip_property(AF_INET, NULL, "route/max_size", &s4) >= 0) - if (safe_atou(s4, &val4) >= 0 && val4 == 2147483647U) + /* The kernel internally stores these maximum size in int. */ + + if (sysctl_read_ip_property_int(AF_INET, /* ifname = */ NULL, "route/max_size", &val4) >= 0) + if (val4 == INT_MAX) /* This is the default "no limit" value in the kernel */ val4 = ROUTES_DEFAULT_MAX_PER_FAMILY; - if (sysctl_read_ip_property(AF_INET6, NULL, "route/max_size", &s6) >= 0) - (void) safe_atou(s6, &val6); + if (sysctl_read_ip_property_int(AF_INET6, /* ifname = */ NULL, "route/max_size", &val6) >= 0) + if (val6 == INT_MAX) + /* This is the default "no limit" value in the kernel */ + val6 = ROUTES_DEFAULT_MAX_PER_FAMILY; cached = MAX(ROUTES_DEFAULT_MAX_PER_FAMILY, val4) + MAX(ROUTES_DEFAULT_MAX_PER_FAMILY, val6); -- 2.47.3