From ccc4bf823c5b42be9e39ea8648158a640d3df0a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Bl=C3=A4se?= Date: Mon, 15 Feb 2021 00:32:53 +0100 Subject: [PATCH] Add support for different babel implementations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To be able to swap out babeld for a different babel implementation in the future, this splits all fff-specific configuration into a seperate fff-babel package. Implementation specific configuration is done in /lib/functions/fff/babeldaemon, which is included with every selectable babel implementation. It contains functions, which are called by the fff-specific code, and therefore allows to configure the implementation specific parts. The babel implementation is provided by implementation-specific fff-packages, which provide 'fff-babel-implementation'. At the moment, only fff-babeld is supported for use as babel implementation. Signed-off-by: Fabian Bläse --- src/packages/fff/fff-babel/Makefile | 28 ++++++++ .../files/etc/layer3.d/40-babel | 14 ++-- .../files/etc/uci-defaults/01-iproute | 0 .../files/etc/uci-defaults/02-network-rules | 0 .../files/lib/functions/fff/babel | 61 +--------------- src/packages/fff/fff-babeld/Makefile | 1 + .../files/lib/functions/fff/babeldaemon | 72 +++++++++++++++++++ src/packages/fff/fff-layer3/Makefile | 1 + src/packages/fff/fff-wireguard/Makefile | 2 +- .../files/etc/layer3.d/50-wireguard | 12 ++-- 10 files changed, 122 insertions(+), 69 deletions(-) create mode 100644 src/packages/fff/fff-babel/Makefile rename src/packages/fff/{fff-babeld => fff-babel}/files/etc/layer3.d/40-babel (91%) rename src/packages/fff/{fff-babeld => fff-babel}/files/etc/uci-defaults/01-iproute (100%) rename src/packages/fff/{fff-babeld => fff-babel}/files/etc/uci-defaults/02-network-rules (100%) rename src/packages/fff/{fff-babeld => fff-babel}/files/lib/functions/fff/babel (55%) create mode 100644 src/packages/fff/fff-babeld/files/lib/functions/fff/babeldaemon diff --git a/src/packages/fff/fff-babel/Makefile b/src/packages/fff/fff-babel/Makefile new file mode 100644 index 00000000..abae858c --- /dev/null +++ b/src/packages/fff/fff-babel/Makefile @@ -0,0 +1,28 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=fff-babel +PKG_RELEASE:=1 + +include $(INCLUDE_DIR)/package.mk + +define Package/fff-babel + SECTION:=base + CATEGORY:=Freifunk + TITLE:=Freifunk-Franken babel + URL:=https://www.freifunk-franken.de + DEPENDS:=+fff-babel-implementation +endef + +define Package/fff-babel/description + This is the Freifunk Franken Firmware babel package. +endef + +define Build/Compile + # nothing +endef + +define Package/fff-babel/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,fff-babel)) diff --git a/src/packages/fff/fff-babeld/files/etc/layer3.d/40-babel b/src/packages/fff/fff-babel/files/etc/layer3.d/40-babel similarity index 91% rename from src/packages/fff/fff-babeld/files/etc/layer3.d/40-babel rename to src/packages/fff/fff-babel/files/etc/layer3.d/40-babel index c238cc16..a5a3a478 100644 --- a/src/packages/fff/fff-babeld/files/etc/layer3.d/40-babel +++ b/src/packages/fff/fff-babel/files/etc/layer3.d/40-babel @@ -26,7 +26,7 @@ configure() { fi } - config_load babeld + config_load network config_foreach remove_babelpeer interface #add new peers @@ -75,14 +75,14 @@ configure() { babel_add_peer6addr "network.$prefixname.ip6addr" # add babel interface - babel_add_interface "$prefixname" "$iface" "$type" "$rxcost" || { echo "Could not add babeld interface for babelpeer $name"; exit 1; } + babel_add_interface "$prefixname" "$iface" "$type" "$rxcost" || { echo "Could not add babel interface for babelpeer $name"; exit 1; } } config_load gateway config_foreach add_babelpeer babelpeer - # configure babeld filters for custom ipv6 addresses + # configure babel filters for custom ipv6 addresses ## remove old filters babel_remove_custom_redistribute_filters @@ -94,10 +94,14 @@ configure() { apply() { uci commit network - uci commit babeld + babel_apply +} + +reload() { + babel_reload } revert() { uci revert network - uci revert babeld + babel_revert } diff --git a/src/packages/fff/fff-babeld/files/etc/uci-defaults/01-iproute b/src/packages/fff/fff-babel/files/etc/uci-defaults/01-iproute similarity index 100% rename from src/packages/fff/fff-babeld/files/etc/uci-defaults/01-iproute rename to src/packages/fff/fff-babel/files/etc/uci-defaults/01-iproute diff --git a/src/packages/fff/fff-babeld/files/etc/uci-defaults/02-network-rules b/src/packages/fff/fff-babel/files/etc/uci-defaults/02-network-rules similarity index 100% rename from src/packages/fff/fff-babeld/files/etc/uci-defaults/02-network-rules rename to src/packages/fff/fff-babel/files/etc/uci-defaults/02-network-rules diff --git a/src/packages/fff/fff-babeld/files/lib/functions/fff/babel b/src/packages/fff/fff-babel/files/lib/functions/fff/babel similarity index 55% rename from src/packages/fff/fff-babeld/files/lib/functions/fff/babel rename to src/packages/fff/fff-babel/files/lib/functions/fff/babel index 3b2c7dac..2e3d3f2e 100644 --- a/src/packages/fff/fff-babeld/files/lib/functions/fff/babel +++ b/src/packages/fff/fff-babel/files/lib/functions/fff/babel @@ -1,3 +1,5 @@ +. /lib/functions/fff/babeldaemon + babel_add_iifrules() { [ "$#" -ne "1" ] && return 1 @@ -60,62 +62,3 @@ babel_add_peer6addr() { return 0 } - -babel_add_interface() { - [ "$#" -ne "4" ] && return 1 - - local name="$1" - local interface="$2" - local type="$3" - local rxcost="$4" - - uci set babeld.$name=interface - uci set babeld.$name.ifname="$interface" - uci set babeld.$name.type="$type" - uci set babeld.$name.rxcost="$rxcost" - - return 0 -} - -babel_delete_interface() { - [ "$#" -ne "1" ] && return 1 - - local name="$1" - - uci -q del babeld.$name - - return 0 -} - -babel_add_redistribute_filter() { - [ "$#" -ne "1" ] && return 1 - - local prefix="$1" - - config=$(uci add babeld filter) - uci set babeld.$config.type='redistribute' - uci set babeld.$config.ip="$prefix" - uci set babeld.$config.addedbyautoconfig='true' - - return 0 -} - -babel_remove_custom_redistribute_filters() { - [ "$#" -ne "0" ] && return 1 - - remove_filters() { - local name="$1" - - # check if filter was added by configuregateway - if ! [ "$(uci -q get babeld.$name.addedbyautoconfig)" = 'true' ]; then - return - fi - - uci -q del babeld.$name - } - - config_load babeld - config_foreach remove_filters filter - - return 0 -} diff --git a/src/packages/fff/fff-babeld/Makefile b/src/packages/fff/fff-babeld/Makefile index fef12122..cc0aeb19 100644 --- a/src/packages/fff/fff-babeld/Makefile +++ b/src/packages/fff/fff-babeld/Makefile @@ -11,6 +11,7 @@ define Package/fff-babeld TITLE:=Freifunk-Franken babeld configuration example URL:=http://www.freifunk-franken.de DEPENDS:=+babeld + PROVIDES:=fff-babel-implementation endef define Package/fff-babeld/description diff --git a/src/packages/fff/fff-babeld/files/lib/functions/fff/babeldaemon b/src/packages/fff/fff-babeld/files/lib/functions/fff/babeldaemon new file mode 100644 index 00000000..fe584339 --- /dev/null +++ b/src/packages/fff/fff-babeld/files/lib/functions/fff/babeldaemon @@ -0,0 +1,72 @@ +# SPDX-License-Identifier: GPL-3.0-only + +babel_add_interface() { + [ "$#" -ne "4" ] && return 1 + + local name="$1" + local interface="$2" + local type="$3" + local rxcost="$4" + + uci set babeld.$name=interface + uci set babeld.$name.ifname="$interface" + uci set babeld.$name.type="$type" + uci set babeld.$name.rxcost="$rxcost" + + return 0 +} + +babel_delete_interface() { + [ "$#" -ne "1" ] && return 1 + + local name="$1" + + uci -q del babeld.$name + + return 0 +} + +babel_add_redistribute_filter() { + [ "$#" -ne "1" ] && return 1 + + local prefix="$1" + + config=$(uci add babeld filter) + uci set babeld.$config.type='redistribute' + uci set babeld.$config.ip="$prefix" + uci set babeld.$config.addedbyautoconfig='true' + + return 0 +} + +babel_remove_custom_redistribute_filters() { + [ "$#" -ne "0" ] && return 1 + + remove_filters() { + local name="$1" + + # check if filter was added by configuregateway + if ! [ "$(uci -q get babeld.$name.addedbyautoconfig)" = 'true' ]; then + return + fi + + uci -q del babeld.$name + } + + config_load babeld + config_foreach remove_filters filter + + return 0 +} + +babel_apply() { + uci commit babeld +} + +babel_reload() { + return 0 +} + +babel_revert() { + uci revert babeld +} diff --git a/src/packages/fff/fff-layer3/Makefile b/src/packages/fff/fff-layer3/Makefile index ce3d2002..7e9f08ba 100644 --- a/src/packages/fff/fff-layer3/Makefile +++ b/src/packages/fff/fff-layer3/Makefile @@ -11,6 +11,7 @@ define Package/fff-layer3 TITLE:=Freifunk-Franken gateway configuration URL:=https://www.freifunk-franken.de DEPENDS:=+fff-alfred-monitoring-proxy \ + +fff-babel \ +fff-babeld \ +fff-boardname \ +fff-dhcp \ diff --git a/src/packages/fff/fff-wireguard/Makefile b/src/packages/fff/fff-wireguard/Makefile index b37b3633..e3834565 100644 --- a/src/packages/fff/fff-wireguard/Makefile +++ b/src/packages/fff/fff-wireguard/Makefile @@ -14,7 +14,7 @@ define Package/fff-wireguard +kmod-wireguard \ +owipcalc \ +wireguard-tools \ - +fff-babeld \ + +fff-babel \ +fff-network endef diff --git a/src/packages/fff/fff-wireguard/files/etc/layer3.d/50-wireguard b/src/packages/fff/fff-wireguard/files/etc/layer3.d/50-wireguard index 3faa9e2d..b50a8967 100644 --- a/src/packages/fff/fff-wireguard/files/etc/layer3.d/50-wireguard +++ b/src/packages/fff/fff-wireguard/files/etc/layer3.d/50-wireguard @@ -30,7 +30,7 @@ configure() { fi } - config_load babeld + config_load network config_foreach remove_wgpeer interface @@ -127,7 +127,7 @@ configure() { babel_add_iifrules "$prefixname" || { echo "ERROR: Could not add iif-rules for wgpeer $name"; exit 1; } # add babel interface - babel_add_interface "$prefixname" "$prefixname" 'wired' "$rxcost" || { echo "ERROR: Could not add babeld interface for wgpeer $name"; exit 1; } + babel_add_interface "$prefixname" "$prefixname" 'wired' "$rxcost" || { echo "ERROR: Could not add babel interface for wgpeer $name"; exit 1; } } config_load gateway @@ -136,12 +136,16 @@ configure() { apply() { uci commit network - uci commit babeld uci commit gateway + babel_apply +} + +reload() { + babel_reload } revert() { uci revert network - uci revert babeld uci revert gateway + babel_revert }