[PATCH v2 1/2] fff-babeld: Move common babeld procedures into functions
Fabian Bläse
fabian at blaese.de
Do Jun 27 19:48:25 CEST 2019
Various things have to be done for every interface on
which babeld shall run.
Those procedures are moved into functions to reduce duplicate code.
Signed-off-by: Fabian Bläse <fabian at blaese.de>
---
Changes in v2:
- Remove exit from function calls which are allowed to fail
- Add explicit return value to functions
- Print error message when exiting due to a non-zero return value
---
.../fff-babeld/files/etc/gateway.d/40-babel | 39 ++------
.../fff-babeld/files/lib/functions/fff/babel | 88 +++++++++++++++++++
2 files changed, 97 insertions(+), 30 deletions(-)
create mode 100644 src/packages/fff/fff-babeld/files/lib/functions/fff/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
index cc1cf5d..28a0d50 100644
--- a/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel
+++ b/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel
@@ -1,4 +1,5 @@
. /lib/functions.sh
+. /lib/functions/fff/babel
#load board specific properties
BOARD="$(uci get board.model.name)"
@@ -14,10 +15,9 @@ configure() {
# remove interface
uci -q del network.$name
# remove iif-rules
- uci -q del network.${name}_rule
- uci -q del network.${name}_rule6
+ babel_delete_iifrules "$name"
# remove babel interface
- uci -q del babeld.$name
+ babel_delete_interface "$name"
fi
fi
}
@@ -67,37 +67,16 @@ configure() {
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'
+ babel_add_iifrules "$name" || { echo "Could not add iif-rules for babelpeer $name"; exit 1; }
# 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
+ uci -q delete "network.$name.ipaddr"
+ uci -q delete "network.$name.ip6addr"
+ babel_add_peeraddr "network.$name.ipaddr"
+ babel_add_peer6addr "network.$name.ip6addr"
# 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
+ babel_add_interface "$name" "$iface" "$type" "$rxcost" || { echo "Could not add babeld interface for babelpeer $name"; exit 1; }
}
config_load gateway
diff --git a/src/packages/fff/fff-babeld/files/lib/functions/fff/babel b/src/packages/fff/fff-babeld/files/lib/functions/fff/babel
new file mode 100644
index 0000000..0d19cef
--- /dev/null
+++ b/src/packages/fff/fff-babeld/files/lib/functions/fff/babel
@@ -0,0 +1,88 @@
+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. at gateway[0].peer_ip); then
+ uci add_list "$option"="$peer_ip"
+ elif ipaddr=$(uci -q get gateway. at client[0].ipaddr); then
+ # use ipaddr (without subnet) if no peer_ip set
+ uci add_list "$option"=$(echo $ipaddr | cut -d / -f1)
+ else
+ echo "FATAL: Neither peer_ip nor ipaddr set! No peering ipv4 set!"
+ return 1
+ fi
+
+ return 0
+}
+
+babel_add_peer6addr() {
+ [ "$#" -ne "1" ] && return 1
+
+ local option="$1"
+
+ if peer_ip6=$(uci -q get gateway. at gateway[0].peer_ip6); then
+ uci add_list "$option"="$peer_ip6"
+ else
+ return 1
+ fi
+
+ return 0
+}
+
+babel_add_interface() {
+ [ "$#" -ne "4" ] && return 1
+
+ local name="$1"
+ local interface="$2"
+ local type="$3"
+ local rxcost="$4"
+
+ uci set babeld.$name=interface
+ uci set babeld.$name.ifname="$interface"
+ uci set babeld.$name.type="$type"
+ uci set babeld.$name.rxcost="$rxcost"
+
+ return 0
+}
+
+babel_delete_interface() {
+ [ "$#" -ne "1" ] && return 1
+
+ local name="$1"
+
+ uci -q del babeld.$name
+
+ return 0
+}
--
2.22.0
Mehr Informationen über die Mailingliste franken-dev