[PATCH] babeld: Automatically add redistribute filters

robert rlanghammer at web.de
Mi Aug 14 12:40:06 CEST 2019


Hi Fabian,

sollte so funktionieren. Kleine Anmerkung inline.

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

Am 14.08.19 um 01:00 schrieb Fabian Bläse:
> babeld filters routes before announcing them with the
> redistribute filters.
>
> Users might add unknown public subnets to the client interface,
> so redistribute filters have to be generated for these addresses.
>
> Signed-off-by: Fabian Bläse <fabian at blaese.de>
> ---
>  .../fff-babeld/files/etc/gateway.d/40-babel   | 10 ++++++
>  .../fff-babeld/files/lib/functions/fff/babel  | 33 +++++++++++++++++++
>  2 files changed, 43 insertions(+)
>
> 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 97f2c92..c238cc1 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
> @@ -80,6 +80,16 @@ configure() {
>  
>  	config_load gateway
>  	config_foreach add_babelpeer babelpeer
> +
> +
> +	# configure babeld filters for custom ipv6 addresses
> +	## remove old filters
> +	babel_remove_custom_redistribute_filters
> +
> +	## add new filters set for client interface in gatewayconfig
> +	for prefix in $(uci -q get gateway. at client[0].ip6addr); do
> +		babel_add_redistribute_filter "$prefix"
> +	done
>  }
>  
>  apply() {
> diff --git a/src/packages/fff/fff-babeld/files/lib/functions/fff/babel b/src/packages/fff/fff-babeld/files/lib/functions/fff/babel
> index 0d19cef..5eb679b 100644
> --- a/src/packages/fff/fff-babeld/files/lib/functions/fff/babel
> +++ b/src/packages/fff/fff-babeld/files/lib/functions/fff/babel
> @@ -86,3 +86,36 @@ babel_delete_interface() {
>  
>  	return 0
>  }
> +
> +babel_add_redistribute_filter() {
> +	[ "$#" -ne "1" ] && return 1
> +
> +	local prefix="$1"
> +
> +	config=$(uci add babeld filter)
> +	uci set babeld.$config.type='redistribute'
> +	uci set babeld.$config.ip="$prefix"
> +	uci set babeld.$config.addedbyautoconfig='true'
> +
> +	return 0
> +}
> +
> +babel_remove_custom_redistribute_filters() {
> +	[ "$#" -ne "0" ] && return 1
ich denke der Test ist nicht notwendig und könnte weg. Schadet aber auch
nix.
> +
> +	remove_filters() {
> +		local name="$1"
> +
> +		# check if filter was added by configuregateway
> +		if ! [ "$(uci -q get babeld.$name.addedbyautoconfig)" = 'true' ]; then
> +			return
> +		fi

Könnte man das nicht vereinfachen und einfach auf Existenz testen:

uci -q get babeld.$name.addedbyautoconfig || return 

oder wenigstens das NOT reinziehen [ a != b ] - liest sich irgendwie besser :-)

> +
> +		uci -q del babeld.$name
> +	}
> +
> +	config_load babeld
> +	config_foreach remove_filters filter
> +
> +	return 0
> +}



Mehr Informationen über die Mailingliste franken-dev