forked from freifunk-franken/firmware
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@blaese.de> Reviewed-by: Robert Langhammer <rlanghammer@web.de> Tested-by: Fabian Bläse <fabian@blaese.de>
122 lines
2.2 KiB
Plaintext
122 lines
2.2 KiB
Plaintext
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"
|
|
|
|
return 0
|
|
}
|
|
|
|
babel_delete_iifrules() {
|
|
[ "$#" -ne "1" ] && return 1
|
|
|
|
local name="$1"
|
|
|
|
uci -q del network.${name}_rule
|
|
uci -q del network.${name}_rule6
|
|
|
|
return 0
|
|
}
|
|
|
|
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
|
|
|
|
return 0
|
|
}
|
|
|
|
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"
|
|
else
|
|
return 1
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
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"
|
|
|
|
return 0
|
|
}
|
|
|
|
babel_delete_interface() {
|
|
[ "$#" -ne "1" ] && return 1
|
|
|
|
local name="$1"
|
|
|
|
uci -q del babeld.$name
|
|
|
|
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
|
|
}
|