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 1/3] 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 } -- 2.39.2 From b7829d789add8c4815e0b9fdf56d1dc70996c0ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Bl=C3=A4se?= Date: Sun, 14 Feb 2021 23:49:58 +0100 Subject: [PATCH 2/3] Add bird2 as selectable babel implementation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bird 2 has a few advantages over babeld. Especially the possiblity to dynamically reload the configuration without restarting the daemon and birds significant performance advantage make it an interesting alternative to babeld for our firmware. This adds the necessary implementation-specific fff-babel-bird2 package, which allows to integrate bird2 into the fff firmware. Signed-off-by: Fabian Bläse --- buildscript | 2 +- src/packages/fff/fff-babel-bird2/Makefile | 30 +++++ .../files/etc/bird-babel-include.conf | 1 + .../fff-babel-bird2/files/etc/bird-fff.conf | 117 ++++++++++++++++++ .../files/etc/uci-defaults/60-fff-bird-config | 5 + .../files/lib/functions/fff/babeldaemon | 63 ++++++++++ .../files/usr/lib/nodewatcher.d/80-bird2.sh | 14 +++ .../usr/lib/nodewatcher.d/10-systemdata.sh | 2 + 8 files changed, 233 insertions(+), 1 deletion(-) create mode 100644 src/packages/fff/fff-babel-bird2/Makefile create mode 100644 src/packages/fff/fff-babel-bird2/files/etc/bird-babel-include.conf create mode 100644 src/packages/fff/fff-babel-bird2/files/etc/bird-fff.conf create mode 100644 src/packages/fff/fff-babel-bird2/files/etc/uci-defaults/60-fff-bird-config create mode 100644 src/packages/fff/fff-babel-bird2/files/lib/functions/fff/babeldaemon create mode 100755 src/packages/fff/fff-babel-bird2/files/usr/lib/nodewatcher.d/80-bird2.sh diff --git a/buildscript b/buildscript index 0d89dab3..bddfaeb5 100755 --- a/buildscript +++ b/buildscript @@ -15,7 +15,7 @@ ROUTINGREV="2baff33918c089fd3744c7192f8ae7a29c47a8d7" GLUONREV="12e41d0ff07ec54bbd67a31ab50d12ca04f2238c" OPENWRT_PKGS="gpioctl-sysfs libugpio fastd haserl micrond mtr bmon" -ROUTING_PKGS="kmod-batman-adv batctl alfred babeld" +ROUTING_PKGS="kmod-batman-adv batctl alfred babeld bird2" GLUON_PKGS="simple-tc uradvd" FFF_VARIANTS="node layer3" diff --git a/src/packages/fff/fff-babel-bird2/Makefile b/src/packages/fff/fff-babel-bird2/Makefile new file mode 100644 index 00000000..9c26462b --- /dev/null +++ b/src/packages/fff/fff-babel-bird2/Makefile @@ -0,0 +1,30 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=fff-babel-bird2 +PKG_RELEASE:=1 + +include $(INCLUDE_DIR)/package.mk + +define Package/fff-babel-bird2 + SECTION:=base + CATEGORY:=Freifunk + TITLE:=Freifunk-Franken babel-bird2 + URL:=https://www.freifunk-franken.de + DEPENDS:=+bird2 +bird2c + PROVIDES:=fff-babel-implementation + CONFLICTS:=fff-babeld +endef + +define Package/fff-babel-bird2/description + This is the Freifunk Franken Firmware babel-bird2 package. +endef + +define Build/Compile + # nothing +endef + +define Package/fff-babel-bird2/install + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,fff-babel-bird2)) diff --git a/src/packages/fff/fff-babel-bird2/files/etc/bird-babel-include.conf b/src/packages/fff/fff-babel-bird2/files/etc/bird-babel-include.conf new file mode 100644 index 00000000..8f7f5bb4 --- /dev/null +++ b/src/packages/fff/fff-babel-bird2/files/etc/bird-babel-include.conf @@ -0,0 +1 @@ +include "/etc/bird-babel/*.conf"; diff --git a/src/packages/fff/fff-babel-bird2/files/etc/bird-fff.conf b/src/packages/fff/fff-babel-bird2/files/etc/bird-fff.conf new file mode 100644 index 00000000..54ccda6f --- /dev/null +++ b/src/packages/fff/fff-babel-bird2/files/etc/bird-fff.conf @@ -0,0 +1,117 @@ +# router id is not required for babeld, but necessary for bird startup +router id 192.0.2.0; + +ipv4 table fff4; +ipv6 sadr table fff6; + +protocol device { + scan time 15; +} + +# device routes for ipv4 peering address +protocol direct { + ipv4 { + table fff4; + import filter { + if (net ~ 10.50.0.0/16 || net ~ 10.83.0.0/16) && net.len = 32 then { + accept; + } + reject; + }; + }; +} + +# device routes on loopback interface +protocol direct { + ipv4 { + table fff4; + import filter { + if net ~ 10.50.0.0/16 || net ~ 10.83.0.0/16 then { + accept; + } + reject; + }; + }; + + ipv6 sadr { + table fff6; + import filter { + if net ~ fdff::/64 from ::/0 then { + reject; + } + + # only import GUA + ULA addresses + if net !~ 2000::/3 from ::/0 || net !~ fc00::/7 from ::/0 then { + reject; + } + + accept; + }; + import keep filtered; + }; + + interface "lo"; +} + +# ipv6 kernel route interface +protocol kernel { + ipv6 sadr { + table fff6; + import filter { + # only import routes from kernel with proto static + if krt_source != 4 then { + reject; + } + + if net ~ fdff::/64 from ::/0 then { + reject; + } + + accept; + }; + export all; + preference 200; + }; + kernel table 10; + scan time 15; + learn yes; +} + +# ipv4 kernel route interface +protocol kernel { + ipv4 { + table fff4; + import filter { + # only import routes from kernel with proto static + if krt_source = 4 then { + accept; + } + reject; + }; + export all; + preference 200; + }; + kernel table 10; + scan time 15; + learn yes; +} + +protocol babel { + # required due to static configuration of global router id. + # also improves reconnect speed after restart. + randomize router id yes; + + ipv4 { + table fff4; + import all; + export all; + }; + + ipv6 sadr { + table fff6; + import all; + export all; + }; + + include "/etc/bird-babel-include.conf"; +}; diff --git a/src/packages/fff/fff-babel-bird2/files/etc/uci-defaults/60-fff-bird-config b/src/packages/fff/fff-babel-bird2/files/etc/uci-defaults/60-fff-bird-config new file mode 100644 index 00000000..7689bea0 --- /dev/null +++ b/src/packages/fff/fff-babel-bird2/files/etc/uci-defaults/60-fff-bird-config @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-3.0-only + +mv /etc/bird-fff.conf /etc/bird.conf + +exit 0 diff --git a/src/packages/fff/fff-babel-bird2/files/lib/functions/fff/babeldaemon b/src/packages/fff/fff-babel-bird2/files/lib/functions/fff/babeldaemon new file mode 100644 index 00000000..a1740bfa --- /dev/null +++ b/src/packages/fff/fff-babel-bird2/files/lib/functions/fff/babeldaemon @@ -0,0 +1,63 @@ +# 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" + + mkdir -p /tmp/bird-babel + echo "interface \"$interface\" { type $type; rxcost $rxcost; };" > /tmp/bird-babel/$name.conf + + return 0 +} + +babel_delete_interface() { + [ "$#" -ne "1" ] && return 1 + + local name="$1" + + # Removing peers from /etc is not necessary, as all peers are generated into /tmp on every configuration run, + # which completely overwrites existing peers in /etc in the apply step. + rm -f /tmp/bird-babel/$name.conf + + return 0 +} + +babel_add_redistribute_filter() { + return 0 +} + +babel_remove_custom_redistribute_filters() { + return 0 +} + +babel_apply() { + # error output hidden because apply might be executed without a preceding configure step. + if [ -d /tmp/bird-babel ]; then + rm -rf /etc/bird-babel + mv /tmp/bird-babel /etc/bird-babel + fi + + return 0 +} + +babel_reload() { + # Change include file path, so bird uses the correct configuration, depending on the configuration state: + # - If test mode is active (and /tmp/bird-babel exists), switch to the temporary (/tmp) configuration to be tested. + # - If new settings are applied or the old settings are restored after an unsuccessful test (and /tmp/bird-babel does not exist), + # switch back to the permanent configuration (/etc). + if [ -d /tmp/bird-babel ]; then + echo 'include "/tmp/bird-babel/*.conf";' > /etc/bird-babel-include.conf + else + echo 'include "/etc/bird-babel/*.conf";' > /etc/bird-babel-include.conf + fi + + /etc/init.d/bird reload +} + +babel_revert() { + rm -r /tmp/bird-babel +} diff --git a/src/packages/fff/fff-babel-bird2/files/usr/lib/nodewatcher.d/80-bird2.sh b/src/packages/fff/fff-babel-bird2/files/usr/lib/nodewatcher.d/80-bird2.sh new file mode 100755 index 00000000..6fb79e8b --- /dev/null +++ b/src/packages/fff/fff-babel-bird2/files/usr/lib/nodewatcher.d/80-bird2.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-3.0-only + +set -e +set -o pipefail + +neighbours="$(birdc -r show babel neighbors | + tail -n +5 | + awk '{ printf "%s%s%s", $1, $2, $3 }' + )" + +echo -n "$neighbours" + +exit 0 diff --git a/src/packages/fff/fff-nodewatcher/files/usr/lib/nodewatcher.d/10-systemdata.sh b/src/packages/fff/fff-nodewatcher/files/usr/lib/nodewatcher.d/10-systemdata.sh index 9b8a7d44..34ba16c8 100755 --- a/src/packages/fff/fff-nodewatcher/files/usr/lib/nodewatcher.d/10-systemdata.sh +++ b/src/packages/fff/fff-nodewatcher/files/usr/lib/nodewatcher.d/10-systemdata.sh @@ -76,6 +76,8 @@ fi if [ -x /usr/sbin/babeld ]; then SYSTEM_DATA="$SYSTEM_DATA$(/usr/sbin/babeld -V 2>&1)" +elif [ -x /usr/sbin/bird ]; then + SYSTEM_DATA="$SYSTEM_DATA$(/usr/sbin/bird --version 2>&1 | sed "s/BIRD version /bird-/")" fi # example for /etc/openwrt_release: -- 2.39.2 From bdcaa1c285ba4215f166c7bbe5f53936fe23fbcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Bl=C3=A4se?= Date: Wed, 5 Jan 2022 13:45:58 +0100 Subject: [PATCH 3/3] fff-babel: Make implementation runtime switchable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some users might want to prefer one babel implementation over another for various reasons. Having to compile the firmware from scratch can be quite tedious in that case. Instead, make the babel implementation switchable at runtime. Currently, the implementation has to be switched manually in /lib/functions/fff/babel, which is not upgrade-safe. Also, the previous implementation is currently not restored after test-mode, so switching implementations should not be done with test-mode. Signed-off-by: Fabian Bläse --- src/packages/fff/fff-babel-bird2/Makefile | 1 - .../files/etc/uci-defaults/30-disable-bird2 | 3 +++ .../fff/{babeldaemon => babeldaemon/bird2} | 2 +- .../fff-babel/files/lib/functions/fff/babel | 27 ++++++++++++++++++- .../files/etc/uci-defaults/30-disable-babeld | 3 +++ .../fff/{babeldaemon => babeldaemon/babeld} | 2 +- src/packages/fff/fff-layer3/Makefile | 1 + 7 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 src/packages/fff/fff-babel-bird2/files/etc/uci-defaults/30-disable-bird2 rename src/packages/fff/fff-babel-bird2/files/lib/functions/fff/{babeldaemon => babeldaemon/bird2} (98%) create mode 100644 src/packages/fff/fff-babeld/files/etc/uci-defaults/30-disable-babeld rename src/packages/fff/fff-babeld/files/lib/functions/fff/{babeldaemon => babeldaemon/babeld} (97%) diff --git a/src/packages/fff/fff-babel-bird2/Makefile b/src/packages/fff/fff-babel-bird2/Makefile index 9c26462b..67efc7a4 100644 --- a/src/packages/fff/fff-babel-bird2/Makefile +++ b/src/packages/fff/fff-babel-bird2/Makefile @@ -12,7 +12,6 @@ define Package/fff-babel-bird2 URL:=https://www.freifunk-franken.de DEPENDS:=+bird2 +bird2c PROVIDES:=fff-babel-implementation - CONFLICTS:=fff-babeld endef define Package/fff-babel-bird2/description diff --git a/src/packages/fff/fff-babel-bird2/files/etc/uci-defaults/30-disable-bird2 b/src/packages/fff/fff-babel-bird2/files/etc/uci-defaults/30-disable-bird2 new file mode 100644 index 00000000..aa46f2a5 --- /dev/null +++ b/src/packages/fff/fff-babel-bird2/files/etc/uci-defaults/30-disable-bird2 @@ -0,0 +1,3 @@ +/etc/init.d/bird disable + +exit 0 diff --git a/src/packages/fff/fff-babel-bird2/files/lib/functions/fff/babeldaemon b/src/packages/fff/fff-babel-bird2/files/lib/functions/fff/babeldaemon/bird2 similarity index 98% rename from src/packages/fff/fff-babel-bird2/files/lib/functions/fff/babeldaemon rename to src/packages/fff/fff-babel-bird2/files/lib/functions/fff/babeldaemon/bird2 index a1740bfa..f2b6e6fc 100644 --- a/src/packages/fff/fff-babel-bird2/files/lib/functions/fff/babeldaemon +++ b/src/packages/fff/fff-babel-bird2/files/lib/functions/fff/babeldaemon/bird2 @@ -44,7 +44,7 @@ babel_apply() { return 0 } -babel_reload() { +babel_reload_implementation() { # Change include file path, so bird uses the correct configuration, depending on the configuration state: # - If test mode is active (and /tmp/bird-babel exists), switch to the temporary (/tmp) configuration to be tested. # - If new settings are applied or the old settings are restored after an unsuccessful test (and /tmp/bird-babel does not exist), diff --git a/src/packages/fff/fff-babel/files/lib/functions/fff/babel b/src/packages/fff/fff-babel/files/lib/functions/fff/babel index 2e3d3f2e..8233cb20 100644 --- a/src/packages/fff/fff-babel/files/lib/functions/fff/babel +++ b/src/packages/fff/fff-babel/files/lib/functions/fff/babel @@ -1,4 +1,6 @@ -. /lib/functions/fff/babeldaemon + +implementation=babeld +. /lib/functions/fff/babeldaemon/$implementation babel_add_iifrules() { [ "$#" -ne "1" ] && return 1 @@ -62,3 +64,26 @@ babel_add_peer6addr() { return 0 } + +babel_reload() { + # switch implementation + case $implementation in + bird2) + /etc/init.d/babeld stop 2>/dev/null + /etc/init.d/babeld disable + /etc/init.d/bird enable + /etc/init.d/bird start + ;; + babeld) + /etc/init.d/bird stop 2>/dev/null + /etc/init.d/bird disable + /etc/init.d/babeld enable + /etc/init.d/babeld start + ;; + esac + + # call implementation-specific reload commands + babel_reload_implementation + + return 0 +} diff --git a/src/packages/fff/fff-babeld/files/etc/uci-defaults/30-disable-babeld b/src/packages/fff/fff-babeld/files/etc/uci-defaults/30-disable-babeld new file mode 100644 index 00000000..e14dd4b9 --- /dev/null +++ b/src/packages/fff/fff-babeld/files/etc/uci-defaults/30-disable-babeld @@ -0,0 +1,3 @@ +/etc/init.d/babeld disable + +exit 0 diff --git a/src/packages/fff/fff-babeld/files/lib/functions/fff/babeldaemon b/src/packages/fff/fff-babeld/files/lib/functions/fff/babeldaemon/babeld similarity index 97% rename from src/packages/fff/fff-babeld/files/lib/functions/fff/babeldaemon rename to src/packages/fff/fff-babeld/files/lib/functions/fff/babeldaemon/babeld index fe584339..ec033794 100644 --- a/src/packages/fff/fff-babeld/files/lib/functions/fff/babeldaemon +++ b/src/packages/fff/fff-babeld/files/lib/functions/fff/babeldaemon/babeld @@ -63,7 +63,7 @@ babel_apply() { uci commit babeld } -babel_reload() { +babel_reload_implementation() { return 0 } diff --git a/src/packages/fff/fff-layer3/Makefile b/src/packages/fff/fff-layer3/Makefile index 7e9f08ba..782fbd16 100644 --- a/src/packages/fff/fff-layer3/Makefile +++ b/src/packages/fff/fff-layer3/Makefile @@ -13,6 +13,7 @@ define Package/fff-layer3 DEPENDS:=+fff-alfred-monitoring-proxy \ +fff-babel \ +fff-babeld \ + +fff-babel-bird2 \ +fff-boardname \ +fff-dhcp \ +fff-layer3-config \ -- 2.39.2