[PATCH v2 1/2] fff-babeld: Move common babeld procedures into functions
Adrian Schmutzler
mail at adrianschmutzler.de
Do Jun 27 19:57:44 CEST 2019
Ich hatte noch keine Zeit, mir die beiden Patches anzusehen.
Lass die vll. noch ein bisschen liegen, wenn's geht.
Wenn nicht, isses aber auch nicht schlimm.
Grüße
Adrian
> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces at freifunk.net] On Behalf Of
> Fabian Bläse
> Sent: Donnerstag, 27. Juni 2019 19:48
> To: franken-dev at freifunk.net
> Subject: [PATCH v2 1/2] fff-babeld: Move common babeld procedures into
> functions
>
> 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
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname : nicht verfügbar
Dateityp : application/pgp-signature
Dateigröße : 834 bytes
Beschreibung: nicht verfügbar
URL : <https://{'listname': 'franken-dev-freifunk.net', 'hostname': 'lists.freifunk.net'}/pipermail/franken-dev-freifunk.net/attachments/20190627/02af9654/attachment.sig>
Mehr Informationen über die Mailingliste franken-dev