[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