From patchwork Sun May 12 13:48:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: fff-babel: add configuration scripts From: Fabian Blaese X-Patchwork-Id: 1103 Message-Id: <20190512134848.11956-1-fabian@blaese.de> To: franken-dev@freifunk.net Date: Sun, 12 May 2019 15:48:48 +0200 --- .../fff-babeld/files/etc/gateway.d/40-babel | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel Signed-off-by: Fabian Bläse Reviewed-by: Robert Langhammer 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 new file mode 100644 index 0000000..9f458c6 --- /dev/null +++ b/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel @@ -0,0 +1,117 @@ +. /lib/functions.sh + +#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" + 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 + uci -q del network.${name}_rule + uci -q del network.${name}_rule6 + # remove babel interface + uci -q del babeld.$name + # remove wireguard config + uci -q del network.@wireguard_$name[0] + fi + fi + } + + config_load babeld + config_foreach remove_babelpeer interface + + #add new peers + add_babelpeer() { + local name="$1" + 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" + 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 + uci set network.$name=interface + uci set network.$name.proto=static + uci set network.$name.ifname=$iface + + # add iif-rules + uci set network.${name}_rule=rule + uci set network.${name}_rule.in="$name" + uci set network.${name}_rule.lookup='10' + uci set network.${name}_rule.priority='31' + + uci set network.${name}_rule6=rule6 + uci set network.${name}_rule6.in="$name" + uci set network.${name}_rule6.lookup='10' + uci set network.${name}_rule6.priority='31' + + # peer_ip + if peer_ip=$(uci -q get gateway.@gateway[0].peer_ip); then + uci set network.$name.ipaddr="$peer_ip" + elif ipaddr=$(uci -q get gateway.@client[0].ipaddr); then + # use ipaddr (without subnet) if no peer_ip set + uci set network.$name.ipaddr=$(echo $ipaddr | cut -d / -f1) + else + echo "FATAL: Neither peer_ip nor ipaddr set! No peering ipv4 set!" + exit 1 + fi + + # peer_ip6 + if peer_ip6=$(uci -q get gateway.@gateway[0].peer_ip6); then + uci set network.$name.ip6addr="$peer_ip6" + fi + + # add babel interface + uci set babeld.$name=interface + uci set babeld.$name.ifname=$iface + uci set babeld.$name.type=$type + uci set babeld.$name.rxcost=$rxcost + } + + config_load gateway + config_foreach add_babelpeer babelpeer +} + +apply() { + uci commit network + uci commit babeld +} + +revert() { + uci revert network + uci revert babeld +}