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 92% 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 04b17c91..735d01f4 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 @@ -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 } diff --git a/src/packages/fff/fff-babeld/files/etc/uci-defaults/26-babel-iproute b/src/packages/fff/fff-babel/files/etc/uci-defaults/26-babel-iproute similarity index 100% rename from src/packages/fff/fff-babeld/files/etc/uci-defaults/26-babel-iproute rename to src/packages/fff/fff-babel/files/etc/uci-defaults/26-babel-iproute diff --git a/src/packages/fff/fff-babeld/files/etc/uci-defaults/27-babel-network-rules b/src/packages/fff/fff-babel/files/etc/uci-defaults/27-babel-network-rules similarity index 100% rename from src/packages/fff/fff-babeld/files/etc/uci-defaults/27-babel-network-rules rename to src/packages/fff/fff-babel/files/etc/uci-defaults/27-babel-network-rules diff --git a/src/packages/fff/fff-babel/files/lib/functions/fff/babel b/src/packages/fff/fff-babel/files/lib/functions/fff/babel new file mode 100644 index 00000000..041c23da --- /dev/null +++ b/src/packages/fff/fff-babel/files/lib/functions/fff/babel @@ -0,0 +1,75 @@ +. /lib/functions/fff/babeldaemon + +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 +} diff --git a/src/packages/fff/fff-babeld/Makefile b/src/packages/fff/fff-babeld/Makefile index 2231e205..e21f03e6 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:=https://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/babel b/src/packages/fff/fff-babeld/files/lib/functions/fff/babeldaemon similarity index 54% rename from src/packages/fff/fff-babeld/files/lib/functions/fff/babel rename to src/packages/fff/fff-babeld/files/lib/functions/fff/babeldaemon index fa4e7e9c..c2c44768 100644 --- a/src/packages/fff/fff-babeld/files/lib/functions/fff/babel +++ b/src/packages/fff/fff-babeld/files/lib/functions/fff/babeldaemon @@ -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 +} diff --git a/src/packages/fff/fff-layer3/Makefile b/src/packages/fff/fff-layer3/Makefile index 4d2e0b1d..c5a174cb 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 64ec4f50..f2b33f1c 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 910755b3..04f20692 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 @@ -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 }