From 8767ba8698bda7712a45dfa6260392b5db6f79a0 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Wed, 23 Nov 2022 16:59:27 +0100 Subject: [PATCH] base-files: add the possibility to set sysctl via uci With this change, sysctl parameters can be set via the uci. The following unamed section musst be set in '/etc/config/sysctl'. config sysctl option enable '1' option section 'net.ipv4.fib_multipath_hash_policy' option value '2' If the unamed section gets disabled, then the default value gets set, that was saved during boot. Signed-off-by: Florian Eckert --- package/base-files/Makefile | 1 + package/base-files/files/etc/init.d/sysctl | 33 ++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/package/base-files/Makefile b/package/base-files/Makefile index b1a834e1bf5..5ba4974a395 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -49,6 +49,7 @@ define Package/base-files/conffiles /etc/config/ /etc/config/network /etc/config/system +/etc/config/sysctl /etc/dropbear/ /etc/ethers /etc/group diff --git a/package/base-files/files/etc/init.d/sysctl b/package/base-files/files/etc/init.d/sysctl index b221ee35cb0..d18b70af5c9 100755 --- a/package/base-files/files/etc/init.d/sysctl +++ b/package/base-files/files/etc/init.d/sysctl @@ -36,9 +36,42 @@ apply_defaults() { fi } +handle_sysctl() { + local cfg="$1" + local sysctl="$2" + + local enable section value + + config_get section "$cfg" section + [ -z "$section" ] && return + + # check if section should be set and if not reset to default value + config_get_bool enable "$cfg" enable '0' + if [ "$enable" = '0' ]; then + value="$(grep "$section =" /tmp/sysctl-default.conf)" + value="${value##*= }" + else + config_get value "$cfg" value + fi + + [ -z "$value" ] && return + + echo "${section}=${value}" >> "$sysctl" +} + +apply_uci() { + mkdir -p /tmp/run/sysctl.d + + rm -f /tmp/run/sysctl.d/01-uci.conf + + config_load sysctl + config_foreach handle_sysctl sysctl "/tmp/run/sysctl.d/01-uci.conf" +} + start() { apply_defaults [ -f /tmp/sysctl-default.conf ] || sysctl -a 1>/tmp/sysctl-default.conf 2>/dev/null + apply_uci for CONF in /etc/sysctl.d/*.conf /etc/sysctl.conf /tmp/run/sysctl.d/*.conf; do [ -f "$CONF" ] && sysctl -e -p "$CONF" >&- done