[1/2] fff-babeld: Move common babeld procedures into functions

Submitted by Fabian Blaese on June 22, 2019, 7:51 p.m.

Details

Message ID 20190622195144.27620-1-fabian@blaese.de
State Superseded
Headers show

Commit Message

Fabian Blaese June 22, 2019, 7:51 p.m.
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@blaese.de>
---
 .../fff-babeld/files/etc/gateway.d/40-babel   | 39 +++-------
 .../fff-babeld/files/lib/functions/fff/babel  | 74 +++++++++++++++++++
 2 files changed, 83 insertions(+), 30 deletions(-)
 create mode 100644 src/packages/fff/fff-babeld/files/lib/functions/fff/babel

Patch hide | download patch | download mbox

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..4c94a12 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" || exit 1
 				# remove babel interface
-				uci -q del babeld.$name
+				babel_delete_interface "$name" || exit 1
 			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" || exit 1
 
 		# peer_ip
-		if peer_ip=$(uci -q get gateway.@gateway[0].peer_ip); then
-			uci set network.$name.ipaddr="$peer_ip"
-		elif ipaddr=$(uci -q get gateway.@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.@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" || exit 1
+		babel_add_peer6addr "network.$name.ip6addr" || exit 1
 
 		# 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" || 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..3789741
--- /dev/null
+++ b/src/packages/fff/fff-babeld/files/lib/functions/fff/babel
@@ -0,0 +1,74 @@ 
+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"
+}
+
+babel_delete_iifrules() {
+	[ "$#" -ne "1" ] && return 1
+
+	local name="$1"
+
+	uci -q del network.${name}_rule
+	uci -q del network.${name}_rule6
+}
+
+babel_add_peeraddr() {
+	[ "$#" -ne "1" ] && return 1
+
+	local option="$1"
+
+	if peer_ip=$(uci -q get gateway.@gateway[0].peer_ip); then
+		uci add_list "$option"="$peer_ip"
+	elif ipaddr=$(uci -q get gateway.@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
+}
+
+babel_add_peer6addr() {
+	[ "$#" -ne "1" ] && return 1
+
+	local option="$1"
+
+	if peer_ip6=$(uci -q get gateway.@gateway[0].peer_ip6); then
+		uci add_list "$option"="$peer_ip6"
+	fi
+}
+
+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"
+}
+
+babel_delete_interface() {
+	[ "$#" -ne "1" ] && return 1
+
+	local name="$1"
+
+	uci -q del babeld.$name
+}

Comments

Fabian Blaese June 23, 2019, 10:27 a.m.
Hallo,

On 22.06.19 21:51, Fabian Bläse wrote:
> 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..4c94a12 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" || exit 1
hier

>  				# remove babel interface
> -				uci -q del babeld.$name
> +				babel_delete_interface "$name" || exit 1
und hier darf kein "|| exit 1" stehen, da es kein Fehler ist, wenn die Konfiguration bereits nicht existiert.

Fabian
Robert Langhammer June 25, 2019, 12:08 p.m.
Hi Fabian,

die beiden exit 1 nimmst du ja raus. Bei den anderen wäre ein echo
"irgendwas" schön.  Es hat allerdings nichts mit der Funktionalität zu
tun. Darum schon mal ein

Reviewed-by: Robert Langhammer <rlanghammer@web.de>

Am 23.06.19 um 12:27 schrieb Fabian Bläse:
> Hallo,
>
> On 22.06.19 21:51, Fabian Bläse wrote:
>> 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..4c94a12 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" || exit 1
> hier
>
>>  				# remove babel interface
>> -				uci -q del babeld.$name
>> +				babel_delete_interface "$name" || exit 1
> und hier darf kein "|| exit 1" stehen, da es kein Fehler ist, wenn die Konfiguration bereits nicht existiert.
>
> Fabian
>
Fabian Blaese June 25, 2019, 12:43 p.m.
Hallo Robert,

wie macht man denn sowas schön, dass man echo und exit gemeinsam hinter das || packt? Hast du da ne Idee?
Ansonsten würde ich das ist ein if verkapseln.

Gruß
Fabian

On 25.06.19 14:08, robert wrote:
> Hi Fabian,
> 
> die beiden exit 1 nimmst du ja raus. Bei den anderen wäre ein echo
> "irgendwas" schön.  Es hat allerdings nichts mit der Funktionalität zu
> tun. Darum schon mal ein
> 
> Reviewed-by: Robert Langhammer <rlanghammer@web.de>
> 
> Am 23.06.19 um 12:27 schrieb Fabian Bläse:
>> Hallo,
>>
>> On 22.06.19 21:51, Fabian Bläse wrote:
>>> 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..4c94a12 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" || exit 1
>> hier
>>
>>>  				# remove babel interface
>>> -				uci -q del babeld.$name
>>> +				babel_delete_interface "$name" || exit 1
>> und hier darf kein "|| exit 1" stehen, da es kein Fehler ist, wenn die Konfiguration bereits nicht existiert.
>>
>> Fabian
>>
>
Robert Langhammer June 25, 2019, 12:57 p.m.
Ein groupkommand sollte das richtig machen.

false || { echo "hallo" ; exit 1; }

man bash (Kapitel Compound Commands)


Am 25.06.19 um 14:43 schrieb Fabian Bläse:
> Hallo Robert,
>
> wie macht man denn sowas schön, dass man echo und exit gemeinsam hinter das || packt? Hast du da ne Idee?
> Ansonsten würde ich das ist ein if verkapseln.
>
> Gruß
> Fabian
>
> On 25.06.19 14:08, robert wrote:
>> Hi Fabian,
>>
>> die beiden exit 1 nimmst du ja raus. Bei den anderen wäre ein echo
>> "irgendwas" schön.  Es hat allerdings nichts mit der Funktionalität zu
>> tun. Darum schon mal ein
>>
>> Reviewed-by: Robert Langhammer <rlanghammer@web.de>
>>
>> Am 23.06.19 um 12:27 schrieb Fabian Bläse:
>>> Hallo,
>>>
>>> On 22.06.19 21:51, Fabian Bläse wrote:
>>>> 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..4c94a12 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" || exit 1
>>> hier
>>>
>>>>  				# remove babel interface
>>>> -				uci -q del babeld.$name
>>>> +				babel_delete_interface "$name" || exit 1
>>> und hier darf kein "|| exit 1" stehen, da es kein Fehler ist, wenn die Konfiguration bereits nicht existiert.
>>>
>>> Fabian
>>>