diff --git a/src/packages/fff/fff-babel-bird2/Makefile b/src/packages/fff/fff-babel-bird2/Makefile
index eecddf76..b0591ccc 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 +owipcalc
PROVIDES:=fff-babel-implementation
- CONFLICTS:=fff-babeld
endef
define Package/fff-babel-bird2/description
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 89%
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 5820aa6b..866478bd 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
@@ -1,5 +1,9 @@
# SPDX-License-Identifier: GPL-3.0-only
+babel_get_version() {
+ /usr/sbin/bird --version 2>&1 | sed "s/BIRD version /bird-/"
+}
+
babel_add_interface() {
[ "$#" -ne "4" ] && return 1
@@ -49,7 +53,7 @@ babel_remove_custom_redistribute_filters() {
return 0
}
-babel_apply() {
+babel_apply_implementation() {
# error output hidden because apply might be executed without a preceding configure step.
if [ -d /tmp/bird/fff ]; then
rm -rf /etc/bird/fff
@@ -59,7 +63,7 @@ babel_apply() {
return 0
}
-babel_reload() {
+babel_reload_implementation() {
/etc/init.d/fff-bird reload
}
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 041c23da..a6fdf3b0 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,8 @@
-. /lib/functions/fff/babeldaemon
+
+implementation=$(uci -q get babelimpl.impl.impl)
+[ -z "$implementation" ] && implementation=babeld
+
+. /lib/functions/fff/babeldaemon/$implementation
babel_add_iifrules() {
[ "$#" -ne "1" ] && return 1
@@ -73,3 +77,40 @@ babel_add_peer6addr() {
return 0
}
+
+babel_reload() {
+ # switch implementation temporarily
+ case $implementation in
+ bird2)
+ /etc/init.d/babeld stop 2>/dev/null
+ /etc/init.d/fff-bird start
+ ;;
+ babeld)
+ /etc/init.d/fff-bird stop 2>/dev/null
+ /etc/init.d/babeld start
+ ;;
+ esac
+
+ # call implementation-specific reload commands
+ babel_reload_implementation
+
+ return 0
+}
+
+babel_apply() {
+ # switch implementation persistently
+ case $implementation in
+ bird2)
+ /etc/init.d/babeld disable
+ /etc/init.d/fff-bird enable
+ ;;
+ babeld)
+ /etc/init.d/fff-bird disable
+ /etc/init.d/babeld enable
+ ;;
+ esac
+
+ babel_apply_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 94%
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 c2c44768..e5427dae 100644
--- a/src/packages/fff/fff-babeld/files/lib/functions/fff/babeldaemon
+++ b/src/packages/fff/fff-babeld/files/lib/functions/fff/babeldaemon/babeld
@@ -1,5 +1,9 @@
# SPDX-License-Identifier: GPL-3.0-only
+babel_get_version() {
+ /usr/sbin/babeld -V 2>&1
+}
+
babel_add_interface() {
[ "$#" -ne "4" ] && return 1
@@ -86,11 +90,11 @@ babel_remove_custom_redistribute_filters() {
return 0
}
-babel_apply() {
+babel_apply_implementation() {
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 c5a174cb..16abaf41 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 \
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 34ba16c8..b0bb74a0 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
@@ -74,10 +74,12 @@ if [ -x /usr/bin/fastd ]; then
SYSTEM_DATA="$SYSTEM_DATA$(/usr/bin/fastd -v | awk '{ print $2 }')"
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-/")"
+if [ -e /lib/functions/fff/babel ]; then
+ . /lib/functions/fff/babel
+ babel_version=$(babel_get_version)
+ if [ $? -eq 0 ]; then
+ SYSTEM_DATA="$SYSTEM_DATA$babel_version"
+ fi
fi
# example for /etc/openwrt_release: