[2/2] fff-babeld: Add prefix to configuration name

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

Details

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

Commit Message

Fabian Blaese June 22, 2019, 7:51 p.m.
When the user removes a peer from /etc/config/gateway,
the script has to be able to find any leftover configurations
that have been created for it.

This can be made very easy by prepending a prefix to every
automatically generated configuration.

This also allows to remove the nasty check for the babeld default interface.
Therefore the naming check for cfg* also can be removed.

As a side effect all manually created configuration blocks that do not match a
prefix will not be touched by configuregateway.

Signed-off-by: Fabian Bläse <fabian@blaese.de>
---
Using --word-diff might be very handy for reviewing this patch. :-)
---
 .../fff-babeld/files/etc/gateway.d/40-babel   | 47 +++++++++----------
 1 file changed, 23 insertions(+), 24 deletions(-)

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 4c94a12..e71f597 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
@@ -10,15 +10,19 @@  configure() {
 	# 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
-				babel_delete_iifrules "$name" || exit 1
-				# remove babel interface
-				babel_delete_interface "$name" || exit 1
-			fi
+
+		# check prefix
+		if [ "$name" = "${name#babelpeer_}" ]; then
+			return
+		fi
+
+		if ! uci -q get gateway.$name > /dev/null; then
+			# remove interface
+			uci -q del network.$name
+			# remove iif-rules
+			babel_delete_iifrules "$name" || exit 1
+			# remove babel interface
+			babel_delete_interface "$name" || exit 1
 		fi
 	}
 
@@ -28,15 +32,10 @@  configure() {
 	#add new peers
 	add_babelpeer() {
 		local name="$1"
+		local prefixname="babelpeer_$name"
 		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"
@@ -62,21 +61,21 @@  configure() {
 		fi
 
 		# add interface
-		uci set network.$name=interface
-		uci set network.$name.proto=static
-		uci set network.$name.ifname=$iface
+		uci set network.$prefixname=interface
+		uci set network.$prefixname.proto=static
+		uci set network.$prefixname.ifname=$iface
 
 		# add iif-rules
-		babel_add_iifrules "$name" || exit 1
+		babel_add_iifrules "$prefixname" || exit 1
 
 		# peer_ip
-		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
+		uci -q delete "network.$prefixname.ipaddr"
+		uci -q delete "network.$prefixname.ip6addr"
+		babel_add_peeraddr "network.$prefixname.ipaddr" || exit 1
+		babel_add_peer6addr "network.$prefixname.ip6addr" || exit 1
 
 		# add babel interface
-		babel_add_interface "$name" "$iface" "$type" "$rxcost" || exit 1
+		babel_add_interface "$prefixname" "$iface" "$type" "$rxcost" || exit 1
 	}
 
 	config_load gateway

Comments

Robert Langhammer June 25, 2019, 12:26 p.m.
Hallo Fabian,

das ist eine nette Lösung , und das unschöne grep ist auch weg. Find ich
gut. Die exit 1 kommen sicher auch noch weg wie im 1/1

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

Am 22.06.19 um 21:51 schrieb Fabian Bläse:
> When the user removes a peer from /etc/config/gateway,
> the script has to be able to find any leftover configurations
> that have been created for it.
>
> This can be made very easy by prepending a prefix to every
> automatically generated configuration.
>
> This also allows to remove the nasty check for the babeld default interface.
> Therefore the naming check for cfg* also can be removed.
>
> As a side effect all manually created configuration blocks that do not match a
> prefix will not be touched by configuregateway.
>
> Signed-off-by: Fabian Bläse <fabian@blaese.de>
> ---
> Using --word-diff might be very handy for reviewing this patch. :-)
> ---
>  .../fff-babeld/files/etc/gateway.d/40-babel   | 47 +++++++++----------
>  1 file changed, 23 insertions(+), 24 deletions(-)
>
> 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 4c94a12..e71f597 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
> @@ -10,15 +10,19 @@ configure() {
>  	# 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
> -				babel_delete_iifrules "$name" || exit 1
> -				# remove babel interface
> -				babel_delete_interface "$name" || exit 1
> -			fi
> +
> +		# check prefix
> +		if [ "$name" = "${name#babelpeer_}" ]; then
> +			return
> +		fi
> +
> +		if ! uci -q get gateway.$name > /dev/null; then
> +			# remove interface
> +			uci -q del network.$name
> +			# remove iif-rules
> +			babel_delete_iifrules "$name" || exit 1
> +			# remove babel interface
> +			babel_delete_interface "$name" || exit 1
>  		fi
>  	}
>
> @@ -28,15 +32,10 @@ configure() {
>  	#add new peers
>  	add_babelpeer() {
>  		local name="$1"
> +		local prefixname="babelpeer_$name"
>  		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"
> @@ -62,21 +61,21 @@ configure() {
>  		fi
>
>  		# add interface
> -		uci set network.$name=interface
> -		uci set network.$name.proto=static
> -		uci set network.$name.ifname=$iface
> +		uci set network.$prefixname=interface
> +		uci set network.$prefixname.proto=static
> +		uci set network.$prefixname.ifname=$iface
>
>  		# add iif-rules
> -		babel_add_iifrules "$name" || exit 1
> +		babel_add_iifrules "$prefixname" || exit 1
>
>  		# peer_ip
> -		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
> +		uci -q delete "network.$prefixname.ipaddr"
> +		uci -q delete "network.$prefixname.ip6addr"
> +		babel_add_peeraddr "network.$prefixname.ipaddr" || exit 1
> +		babel_add_peer6addr "network.$prefixname.ip6addr" || exit 1
>
>  		# add babel interface
> -		babel_add_interface "$name" "$iface" "$type" "$rxcost" || exit 1
> +		babel_add_interface "$prefixname" "$iface" "$type" "$rxcost" || exit 1
>  	}
>
>  	config_load gateway
Fabian Blaese June 25, 2019, 12:44 p.m.
Hallo Robert,

On 25.06.19 14:26, robert wrote:
> Hallo Fabian,
> 
> das ist eine nette Lösung , und das unschöne grep ist auch weg. Find ich
> gut. Die exit 1 kommen sicher auch noch weg wie im 1/1
genau, die kommen ja auch daher.
Damit da beim Rebasen nichts aus versehen schief geht, schicke ich dafür auf jeden Fall nochmal eine v2.

Gruß
Fabian