[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