[PATCH] fff-babel: add configuration scripts

Fabian Bläse fabian at blaese.de
So Mai 12 15:48:48 CEST 2019


---
 .../fff-babeld/files/etc/gateway.d/40-babel   | 117 ++++++++++++++++++
 1 file changed, 117 insertions(+)
 create mode 100644 src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel

diff --git a/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel b/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel
new file mode 100644
index 0000000..9f458c6
--- /dev/null
+++ b/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel
@@ -0,0 +1,117 @@
+. /lib/functions.sh
+
+#load board specific properties
+BOARD="$(uci get board.model.name)"
+. /etc/network.$BOARD
+
+configure() {
+	## babelpeer
+	# remove peers missing in gateway config
+	remove_babelpeer() {
+		local name="$1"
+		if ! echo $name | grep cfg > /dev/null; then # do not delete default interface
+			if ! uci -q get gateway.$name > /dev/null; then
+				# remove interface
+				uci -q del network.$name
+				# remove iif-rules
+				uci -q del network.${name}_rule
+				uci -q del network.${name}_rule6
+				# remove babel interface
+				uci -q del babeld.$name
+				# remove wireguard config
+				uci -q del network. at wireguard_$name[0]
+			fi
+		fi
+	}
+
+	config_load babeld
+	config_foreach remove_babelpeer interface
+
+	#add new peers
+	add_babelpeer() {
+		local name="$1"
+		local vlan
+		local type
+
+		# prohibit cfg* as name
+		if echo $name | grep cfg > /dev/null; then
+			echo "ERROR: name $name is invalid for babelpeer!"
+			exit 1
+		fi
+
+		# get iface
+		if vlan=$(uci -q get gateway.$name.vlan); then
+			iface="${SWITCHDEV}.$vlan"
+		elif iface=$(uci -q get gateway.$name.iface); then
+			iface="$iface"
+		else
+			echo "ERROR: No iface set for babelpeer $name!"
+			exit 1
+		fi
+
+		# get type
+		if type=$(uci -q get gateway.$name.type); then
+			type="$type"
+		else
+			type=wired
+		fi
+
+		# get rxcost
+		if rxcost=$(uci -q get gateway.$name.rxcost); then
+			rxcost="$rxcost"
+		else
+			rxcost=96
+		fi
+
+		# add interface
+		uci set network.$name=interface
+		uci set network.$name.proto=static
+		uci set network.$name.ifname=$iface
+
+		# add iif-rules
+		uci set network.${name}_rule=rule
+		uci set network.${name}_rule.in="$name"
+		uci set network.${name}_rule.lookup='10'
+		uci set network.${name}_rule.priority='31'
+
+		uci set network.${name}_rule6=rule6
+		uci set network.${name}_rule6.in="$name"
+		uci set network.${name}_rule6.lookup='10'
+		uci set network.${name}_rule6.priority='31'
+
+		# peer_ip
+		if peer_ip=$(uci -q get gateway. at gateway[0].peer_ip); then
+			uci set network.$name.ipaddr="$peer_ip"
+		elif ipaddr=$(uci -q get gateway. at client[0].ipaddr); then
+			# use ipaddr (without subnet) if no peer_ip set
+			uci set network.$name.ipaddr=$(echo $ipaddr | cut -d / -f1)
+		else
+			echo "FATAL: Neither peer_ip nor ipaddr set! No peering ipv4 set!"
+			exit 1
+		fi
+
+		# peer_ip6
+		if peer_ip6=$(uci -q get gateway. at gateway[0].peer_ip6); then
+			uci set network.$name.ip6addr="$peer_ip6"
+		fi
+
+		# add babel interface
+		uci set babeld.$name=interface
+		uci set babeld.$name.ifname=$iface
+		uci set babeld.$name.type=$type
+		uci set babeld.$name.rxcost=$rxcost
+	}
+
+	config_load gateway
+	config_foreach add_babelpeer babelpeer
+}
+
+apply() {
+	uci commit network
+	uci commit babeld
+}
+
+revert() {
+	uci revert network
+	uci revert babeld
+}
-- 
2.21.0



Mehr Informationen über die Mailingliste franken-dev