[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