[PATCH] fff-babel: add configuration scripts
robert
rlanghammer at web.de
Di Mai 21 22:23:03 CEST 2019
Hi Fabian,
sieht soweit gut aus.
Reviewed-by: Robert Langhammer <rlanghammer at web.de>
Am 12.05.19 um 15:48 schrieb Fabian Bläse:
> ---
> .../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
>
> 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. at 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. at gateway[0].peer_ip); then
> + uci set network.$name.ipaddr="$peer_ip"
> + elif ipaddr=$(uci -q get gateway. at 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. at 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
> +}
Mehr Informationen über die Mailingliste franken-dev