Add bird2 as an alternative babel implementation #121

Closed
fbl wants to merge 5 commits from fbl:bird2 into master
10 changed files with 136 additions and 83 deletions
Showing only changes of commit 57e9ca6d06 - Show all commits

View File

@ -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
fbl marked this conversation as resolved Outdated

Im Makefile von fff-babel-bird2 gibt es an dieser Stelle noch ein CONFLICTS:=, welches das fff-babeld package ausschließen soll, das Gleiche in umgekehrt könnte man hier auch noch hinzufügen.

Im Makefile von fff-babel-bird2 gibt es an dieser Stelle noch ein `CONFLICTS:=`, welches das fff-babeld package ausschließen soll, das Gleiche in umgekehrt könnte man hier auch noch hinzufügen.
Outdated
Review

Das stimmt. Funktioniert so auch, weil dennoch nie beide gleichzeitig da sein können. Ich habs jetzt so gelassen, da das voraussichtlich sowieso bald wieder weg fliegt, siehe #201

Das stimmt. Funktioniert so auch, weil dennoch nie beide gleichzeitig da sein können. Ich habs jetzt so gelassen, da das voraussichtlich sowieso bald wieder weg fliegt, siehe #201
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))

View File

@ -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
@ -101,10 +101,14 @@ configure() {
apply() {
uci commit network
uci commit babeld
babel_apply
}
reload() {
babel_reload
}
revert() {
uci revert network
uci revert babeld
babel_revert
}

View File

@ -0,0 +1,75 @@
. /lib/functions/fff/babeldaemon
fbl marked this conversation as resolved Outdated

Da verweise ich mal wieder auf

#118 (comment)

ich wäre weiterhin dafür, alles Usereinstellbare nach /etc/config/fff zu legen. Das ist immerhin dann auch gleich Updatefest

Da verweise ich mal wieder auf https://git.freifunk-franken.de/freifunk-franken/firmware/issues/118#issuecomment-2558 ich wäre weiterhin dafür, alles Usereinstellbare nach /etc/config/fff zu legen. Das ist immerhin dann auch gleich Updatefest
Outdated
Review

Das ist immerhin dann auch gleich Updatefest

Ist es aktuell by-design nicht.

> Das ist immerhin dann auch gleich Updatefest Ist es aktuell by-design nicht.

ich hab keinen Grund gefunden was dagegen sprechen würde? So wie ich das verstehe, wir die Implementation über config-layer3 ausgewählt. Da darf das doch gerne Updatefest sein.
Gibts einen Grund warum das Design so gewählt ist?

ich hab keinen Grund gefunden was dagegen sprechen würde? So wie ich das verstehe, wir die Implementation über config-layer3 ausgewählt. Da darf das doch gerne Updatefest sein. Gibts einen Grund warum das Design so gewählt ist?
Outdated
Review

Aktuell ist das mehr so ein Test-Feature. Ich weiß noch überhaupt nicht, ob ich die Laufzeit-Auswahl langfristig unterstützen möchte, und ob dauerhaft zwei Daemons in der Firmware enthalten sein werden (eher nicht..). Die gibt es jetzt eigentlich mehr deshalb, damit man beide Implementierungen möglichst zügig testen kann.

Zudem ist die Auswahl des Daemons auch eine Entscheidung, die den Nutzer der Firmware erst mal überhaupt nicht interessieren soll. Langfristig möchte ich bird zum default machen.

Wenn das jetzt alles mit diesem Release gut funktioniert, kann man noch einmal evaluieren, ob man die Laufzeit-Auswahl des Daemons dauerhaft anbieten möchte.

Aktuell ist das mehr so ein Test-Feature. Ich weiß noch überhaupt nicht, ob ich die Laufzeit-Auswahl langfristig unterstützen möchte, und ob dauerhaft zwei Daemons in der Firmware enthalten sein werden (eher nicht..). Die gibt es jetzt eigentlich mehr deshalb, damit man beide Implementierungen möglichst zügig testen kann. Zudem ist die Auswahl des Daemons auch eine Entscheidung, die den Nutzer der Firmware erst mal überhaupt nicht interessieren soll. Langfristig möchte ich bird zum default machen. Wenn das jetzt alles mit diesem Release gut funktioniert, kann man noch einmal evaluieren, ob man die Laufzeit-Auswahl des Daemons dauerhaft anbieten möchte.

ok mit dieser Argumentation kann ich dann erstmal so mit leben wie es ist.

ok mit dieser Argumentation kann ich dann erstmal so mit leben wie es ist.
babel_add_iifrules() {
[ "$#" -ne "1" ] && return 1
local name="$1"
local table='10'
local prio='31'
uci set network.${name}_rule=rule
uci set network.${name}_rule.in="$name"
uci set network.${name}_rule.lookup="$table"
uci set network.${name}_rule.priority="$prio"
uci set network.${name}_rule6=rule6
uci set network.${name}_rule6.in="$name"
uci set network.${name}_rule6.lookup="$table"
uci set network.${name}_rule6.priority="$prio"
return 0
}
babel_delete_iifrules() {
[ "$#" -ne "1" ] && return 1
local name="$1"
uci -q del network.${name}_rule
uci -q del network.${name}_rule6
return 0
}
babel_add_peeraddr() {
[ "$#" -ne "1" ] && return 1
local option="$1"
if peer_ip=$(uci -q get gateway.@gateway[0].peer_ip); then
uci add_list "$option"="$peer_ip"
elif router_ip=$(uci -q get gateway.meta.router_ip); then
# use router_ip if no peer_ip is set
ip=$router_ip
# use only first ip
ip=${ip%% *}
# remove CIDR mask
ip=${ip%%/*}
uci add_list "$option"="$ip"
elif ipaddr=$(uci -q get gateway.@client[0].ipaddr); then
# use client interface address (without subnet) if no router_ip is set
uci add_list "$option"=${ipaddr%%/*}
else
echo "WARNING: No peer_ip, router_ip or client interface ipaddr set! IPv4 routing is not possible."
return 1
fi
return 0
}
babel_add_peer6addr() {
[ "$#" -ne "1" ] && return 1
local option="$1"
if peer_ip6=$(uci -q get gateway.@gateway[0].peer_ip6); then
uci add_list "$option"="$peer_ip6"
else
return 1
fi
return 0
}

View File

@ -11,6 +11,7 @@ define Package/fff-babeld
TITLE:=Freifunk-Franken babeld configuration example
URL:=https://www.freifunk-franken.de
DEPENDS:=+babeld
PROVIDES:=fff-babel-implementation
endef
define Package/fff-babeld/description

View File

@ -1,76 +1,4 @@
babel_add_iifrules() {
[ "$#" -ne "1" ] && return 1
local name="$1"
local table='10'
local prio='31'
uci set network.${name}_rule=rule
uci set network.${name}_rule.in="$name"
uci set network.${name}_rule.lookup="$table"
uci set network.${name}_rule.priority="$prio"
uci set network.${name}_rule6=rule6
uci set network.${name}_rule6.in="$name"
uci set network.${name}_rule6.lookup="$table"
uci set network.${name}_rule6.priority="$prio"
return 0
}
babel_delete_iifrules() {
[ "$#" -ne "1" ] && return 1
local name="$1"
uci -q del network.${name}_rule
uci -q del network.${name}_rule6
return 0
}
babel_add_peeraddr() {
[ "$#" -ne "1" ] && return 1
local option="$1"
if peer_ip=$(uci -q get gateway.@gateway[0].peer_ip); then
uci add_list "$option"="$peer_ip"
elif router_ip=$(uci -q get gateway.meta.router_ip); then
# use router_ip if no peer_ip is set
ip=$router_ip
# use only first ip
ip=${ip%% *}
# remove CIDR mask
ip=${ip%%/*}
uci add_list "$option"="$ip"
elif ipaddr=$(uci -q get gateway.@client[0].ipaddr); then
# use client interface address (without subnet) if no router_ip is set
uci add_list "$option"=${ipaddr%%/*}
else
echo "WARNING: No peer_ip, router_ip or client interface ipaddr set! IPv4 routing is not possible."
return 1
fi
return 0
}
babel_add_peer6addr() {
[ "$#" -ne "1" ] && return 1
local option="$1"
if peer_ip6=$(uci -q get gateway.@gateway[0].peer_ip6); then
uci add_list "$option"="$peer_ip6"
else
return 1
fi
return 0
}
# SPDX-License-Identifier: GPL-3.0-only
babel_add_interface() {
[ "$#" -ne "4" ] && return 1
@ -157,3 +85,15 @@ babel_remove_custom_redistribute_filters() {
return 0
}
babel_apply() {
uci commit babeld
}
babel_reload() {
return 0
}
babel_revert() {
uci revert babeld
}

View File

@ -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 \

View File

@ -14,7 +14,7 @@ define Package/fff-wireguard
+kmod-wireguard \
+owipcalc \
+wireguard-tools \
+fff-babeld \
+fff-babel \
+fff-network
endef

View File

@ -31,7 +31,7 @@ configure() {
fi
}
config_load babeld
config_load network
config_foreach remove_wgpeer interface
@ -128,7 +128,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
@ -137,12 +137,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
}