2019-05-12 15:48:48 +02:00
|
|
|
. /lib/functions.sh
|
2019-06-27 19:48:25 +02:00
|
|
|
. /lib/functions/fff/babel
|
2019-05-12 15:48:48 +02:00
|
|
|
|
|
|
|
#load board specific properties
|
|
|
|
BOARD="$(uci get board.model.name)"
|
|
|
|
. /etc/network.$BOARD
|
|
|
|
|
|
|
|
configure() {
|
|
|
|
## babelpeer
|
|
|
|
# remove peers missing in gateway config
|
|
|
|
remove_babelpeer() {
|
|
|
|
local name="$1"
|
2019-06-27 19:48:26 +02:00
|
|
|
|
|
|
|
# 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"
|
2019-05-12 15:48:48 +02:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
config_load babeld
|
|
|
|
config_foreach remove_babelpeer interface
|
|
|
|
|
|
|
|
#add new peers
|
|
|
|
add_babelpeer() {
|
|
|
|
local name="$1"
|
2019-06-27 19:48:26 +02:00
|
|
|
local prefixname="babelpeer_$name"
|
2019-05-12 15:48:48 +02:00
|
|
|
local vlan
|
|
|
|
local type
|
|
|
|
|
|
|
|
# get iface
|
|
|
|
if vlan=$(uci -q get gateway.$name.vlan); then
|
|
|
|
iface="${SWITCHDEV}.$vlan"
|
|
|
|
elif iface=$(uci -q get gateway.$name.iface); then
|
|
|
|
iface="$iface"
|
|
|
|
else
|
|
|
|
echo "ERROR: No iface set for babelpeer $name!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# get type
|
|
|
|
if type=$(uci -q get gateway.$name.type); then
|
|
|
|
type="$type"
|
|
|
|
else
|
|
|
|
type=wired
|
|
|
|
fi
|
|
|
|
|
|
|
|
# get rxcost
|
|
|
|
if rxcost=$(uci -q get gateway.$name.rxcost); then
|
|
|
|
rxcost="$rxcost"
|
|
|
|
else
|
|
|
|
rxcost=96
|
|
|
|
fi
|
|
|
|
|
|
|
|
# add interface
|
2019-06-27 19:48:26 +02:00
|
|
|
uci set network.$prefixname=interface
|
|
|
|
uci set network.$prefixname.proto=static
|
|
|
|
uci set network.$prefixname.ifname=$iface
|
2019-05-12 15:48:48 +02:00
|
|
|
|
|
|
|
# add iif-rules
|
2019-06-27 19:48:26 +02:00
|
|
|
babel_add_iifrules "$prefixname" || { echo "Could not add iif-rules for babelpeer $name"; exit 1; }
|
2019-05-12 15:48:48 +02:00
|
|
|
|
|
|
|
# peer_ip
|
2019-06-27 19:48:26 +02:00
|
|
|
uci -q delete "network.$prefixname.ipaddr"
|
|
|
|
uci -q delete "network.$prefixname.ip6addr"
|
|
|
|
babel_add_peeraddr "network.$prefixname.ipaddr"
|
|
|
|
babel_add_peer6addr "network.$prefixname.ip6addr"
|
2019-05-12 15:48:48 +02:00
|
|
|
|
|
|
|
# add babel interface
|
2019-06-27 19:48:26 +02:00
|
|
|
babel_add_interface "$prefixname" "$iface" "$type" "$rxcost" || { echo "Could not add babeld interface for babelpeer $name"; exit 1; }
|
2019-05-12 15:48:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
config_load gateway
|
|
|
|
config_foreach add_babelpeer babelpeer
|
2019-08-14 01:00:42 +02:00
|
|
|
|
|
|
|
|
|
|
|
# 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
|
2022-03-06 10:26:11 +01:00
|
|
|
|
|
|
|
## add deny filters for client prefixes used with snat
|
|
|
|
if [ "$(uci -q get gateway.@client[0].snat)" = "1" ]; then
|
|
|
|
for prefix in $(uci -q get gateway.@client[0].ipaddr); do
|
|
|
|
babel_add_private_prefix_filter "$prefix"
|
|
|
|
done
|
|
|
|
fi
|
2019-05-12 15:48:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
apply() {
|
|
|
|
uci commit network
|
|
|
|
uci commit babeld
|
|
|
|
}
|
|
|
|
|
|
|
|
revert() {
|
|
|
|
uci revert network
|
|
|
|
uci revert babeld
|
|
|
|
}
|