[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