From 199058d11065c486f9f04e0d4ce63549b07a4962 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Bl=C3=A4se?= Date: Wed, 14 Aug 2019 01:00:42 +0200 Subject: [PATCH] babeld: Automatically add redistribute filters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Robert Langhammer Tested-by: Fabian Bläse --- .../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 97f2c92f..c238cc16 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.@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 0d19cef5..5eb679b8 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 + + remove_filters() { + local name="$1" + + # check if filter was added by configuregateway + if ! [ "$(uci -q get babeld.$name.addedbyautoconfig)" = 'true' ]; then + return + fi + + uci -q del babeld.$name + } + + config_load babeld + config_foreach remove_filters filter + + return 0 +}