[PATCH] fff-babel: add configuration scripts
Adrian Schmutzler
mail at adrianschmutzler.de
Di Mai 14 12:52:12 CEST 2019
Hallo Fabian,
zwei Anmerkungen und zwei Fragen unten.
> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces at freifunk.net] On Behalf Of
> Fabian Bläse
> Sent: Sonntag, 12. Mai 2019 15:49
> To: franken-dev at freifunk.net
> Subject: [PATCH] fff-babel: add configuration scripts
>
> ---
> .../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
Die vier uci del oberhalb kannst du ohne -q laufen lassen, da sollte man davon ausgehen können, dass die da sind.
> + # 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
Ist das "notwendig" oder Konvention?
> + 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'
Das könnte man in eine Funktion stecken, braucht wireguard ja auch:
add_iifrules() {
local name="$1"
local lookup="$2"
local prio="$3"
uci set network.${name}_rule=rule
uci set network.${name}_rule.in="$name"
uci set network.${name}_rule.lookup="$lookup"
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="$lookup"
uci set network.${name}_rule6.priority="$prio"
}
und
add_iifrules "$name" "10" "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
Ist das relevant ob $iface oder $name? Bei mir funktioniert $name, oder übersehe ich da was?
Grüße
Adrian
> + 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
> +}
> --
> 2.21.0
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname : nicht verfügbar
Dateityp : application/pgp-signature
Dateigröße : 834 bytes
Beschreibung: nicht verfügbar
URL : <https://{'listname': 'franken-dev-freifunk.net', 'hostname': 'lists.freifunk.net'}/pipermail/franken-dev-freifunk.net/attachments/20190514/507b230c/attachment.sig>
Mehr Informationen über die Mailingliste franken-dev