fff-babeld: Add prefix to configuration name

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>
Reviewed-by: Robert Langhammer <rlanghammer@web.de>
This commit is contained in:
Fabian Bläse 2019-06-27 19:48:26 +02:00
parent 53ff6f631b
commit 104a260843
1 changed files with 23 additions and 24 deletions

View File

@ -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"
# remove babel interface
babel_delete_interface "$name"
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"
# remove babel interface
babel_delete_interface "$name"
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" || { echo "Could not add iif-rules for babelpeer $name"; exit 1; }
babel_add_iifrules "$prefixname" || { echo "Could not add iif-rules for babelpeer $name"; exit 1; }
# peer_ip
uci -q delete "network.$name.ipaddr"
uci -q delete "network.$name.ip6addr"
babel_add_peeraddr "network.$name.ipaddr"
babel_add_peer6addr "network.$name.ip6addr"
uci -q delete "network.$prefixname.ipaddr"
uci -q delete "network.$prefixname.ip6addr"
babel_add_peeraddr "network.$prefixname.ipaddr"
babel_add_peer6addr "network.$prefixname.ip6addr"
# add babel interface
babel_add_interface "$name" "$iface" "$type" "$rxcost" || { echo "Could not add babeld interface for babelpeer $name"; exit 1; }
babel_add_interface "$prefixname" "$iface" "$type" "$rxcost" || { echo "Could not add babeld interface for babelpeer $name"; exit 1; }
}
config_load gateway