[Buildroot] [PATCH v6 1/6] package/nftables: add init script
Fiona Klute
fiona.klute at gmx.de
Mon Feb 17 15:31:22 UTC 2025
From: "Fiona Klute (WIWA)" <fiona.klute at gmx.de>
The init script handles an nftables ruleset file with support for
atomic reloading. By default the ruleset is expected in
/etc/nftables.conf, the location can be changed in
/etc/default/nftables. If the ruleset file does not exist, the script
does nothing and shows a warning about that fact.
Signed-off-by: Fiona Klute (WIWA) <fiona.klute at gmx.de>
---
Changes v4 -> v5:
* nftables init script: run any target only if rules file exists
Changes v1 -> v2:
* clarify comments & commit message
* nftables init script: Warning about missing flush in ruleset on reload
* nftables init script: check for rules file only on start
* nftables init script: return nft return code from start/stop functions
package/nftables/S35nftables | 76 ++++++++++++++++++++++++++++++++++++
package/nftables/nftables.mk | 5 +++
2 files changed, 81 insertions(+)
create mode 100644 package/nftables/S35nftables
diff --git a/package/nftables/S35nftables b/package/nftables/S35nftables
new file mode 100644
index 0000000000..35b089e154
--- /dev/null
+++ b/package/nftables/S35nftables
@@ -0,0 +1,76 @@
+#!/bin/sh
+
+DAEMON="nftables"
+
+# Main ruleset file, override in /etc/default/nftables if you want a
+# different location. The file should include a "flush ruleset"
+# command to atomically replace any previous rules on reload (instead
+# of adding to them).
+NFTABLES_CONFIG="/etc/nftables.conf"
+
+# shellcheck source=/dev/null
+[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON"
+
+# Run only if the ruleset file exists.
+if [ ! -f "${NFTABLES_CONFIG}" ]; then
+ echo "${NFTABLES_CONFIG} does not exist, nothing to do."
+ exit 0
+fi
+
+start() {
+ printf "Loading nftables rules: "
+ /usr/sbin/nft --file "${NFTABLES_CONFIG}"
+ status=$?
+ if [ "$status" -eq 0 ]; then
+ echo "OK"
+ else
+ echo "FAIL"
+ fi
+ return "$status"
+}
+
+stop() {
+ printf "Clearing nftables rules: "
+ /usr/sbin/nft flush ruleset
+ status=$?
+ if [ "$status" -eq 0 ]; then
+ echo "OK"
+ else
+ echo "FAIL"
+ fi
+ return "$status"
+}
+
+restart() {
+ stop
+ start
+}
+
+reload() {
+ FLUSH='flush ruleset'
+ if ! grep -q -x "$FLUSH" "${NFTABLES_CONFIG}"; then
+ printf 'WARNING: no "%s" in %s, duplicated rules likely\n' \
+ "$FLUSH" "${NFTABLES_CONFIG}"
+ fi
+ start
+}
+
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart)
+ restart
+ ;;
+ reload)
+ reload
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|reload}"
+ exit 1
+esac
+
+exit $?
diff --git a/package/nftables/nftables.mk b/package/nftables/nftables.mk
index c958f0eb26..380e553cde 100644
--- a/package/nftables/nftables.mk
+++ b/package/nftables/nftables.mk
@@ -57,6 +57,11 @@ define NFTABLES_LINUX_CONFIG_FIXUPS
$(call KCONFIG_ENABLE_OPT,CONFIG_NF_TABLES_INET)
endef
+define NFTABLES_INSTALL_INIT_SYSV
+ $(INSTALL) -m 0755 -D package/nftables/S35nftables \
+ $(TARGET_DIR)/etc/init.d/S35nftables
+endef
+
$(eval $(autotools-package))
# Legacy: we used to handle it in this .mk
--
2.47.2
More information about the buildroot
mailing list