[PATCH v4] gateway.d: Add scripts for network configuration

Adrian Schmutzler mail at adrianschmutzler.de
Do Mai 16 14:33:57 CEST 2019


Hallo,

mit dem sed erwischt man in folgendem Fall das Leerzeichen nicht:

"bat0 eth0.1" => "bat0 "

Ich wurde folgendes verwenden:

uci get ... | sed "s/\beth[^ ]* //" | sed
"s/ *eth[^ ]*$//g")

So entfernt man das Leerzeichen immer auf der richtigen Seite mit.

Grüße

Adrian

> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces at freifunk.net] On Behalf Of
> robert
> Sent: Dienstag, 14. Mai 2019 08:42
> To: franken-dev at freifunk.net
> Subject: Re: [PATCH v4] gateway.d: Add scripts for network configuration
> 
> Hi Fabian,
> 
> mein sed Hinweis war nicht getestet. Sorry.
> 
> Man erwischt zwar alle ethxx.xxx aber nicht am Zeilenende. Und ein
> veth.0 wird zerhackt.
> 
> Musste das auch erst mal ausprobieren. Ein
> 
> sed 's/\beth[^ ]* *//g'
> 
> tut was es soll. Probiere es bitte auch noch mal aus.
> 
> Kannst du dann beim Applien anpassen.
> 
> Reviewed-by: Robert Langhammer <rlanghammer at web.de>
> 
> 
> Am 13.05.19 um 23:30 schrieb Fabian Bläse:
> > From: Fabian Blaese <fabian at blaese.de>
> >
> > This adds scripts to configure vlan and client network.
> > This also adds sysctl settings to enable forwarding.
> >
> > Note:
> > Devices specific properties are sourced from fff-network package.
> > This creates a dependency on fff-boardname and fff-network.
> > These properties should be located elsewhere in the future.
> >
> > Signed-off-by: Fabian Bläse <fabian at blaese.de>
> > Reviewed-by: Tim Niemeyer <tim at tn-x.org>
> > ---
> > Changes in v3:
> > - Rename 10-vlan to 20-vlan
> > - Rename 20-network-client to 30-network-client
> > - Source necessary uci functions and board properties
> > - Add dependency on fff-boardname and fff-network
> >
> > Changes in v4:
> > - Source cpuport script
> > - Simplyfy sed expression as suggested by Robert
> > ---
> >  src/packages/fff/fff-gateway/Makefile         |  1 +
> >  .../fff-gateway/files/etc/gateway.d/20-vlan   | 48 +++++++++++++
> >  .../files/etc/gateway.d/30-network-client     | 71 +++++++++++++++++++
> >  .../files/etc/sysctl.d/60-fff-gateway.conf    |  5 ++
> >  4 files changed, 125 insertions(+)
> >  create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/20-
> vlan
> >  create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/30-
> network-client
> >  create mode 100644 src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff-
> gateway.conf
> >
> > diff --git a/src/packages/fff/fff-gateway/Makefile b/src/packages/fff/fff-
> gateway/Makefile
> > index 7c1dd55..f9ef8cc 100644
> > --- a/src/packages/fff/fff-gateway/Makefile
> > +++ b/src/packages/fff/fff-gateway/Makefile
> > @@ -13,6 +13,7 @@ define Package/fff-gateway
> >  	CATEGORY:=Freifunk
> >  	TITLE:= Freifunk-Franken gateway configuration
> >  	URL:=https://www.freifunk-franken.de
> > +	DEPENDS:=+fff-boardname +fff-network
> >  endef
> >
> >  define Package/fff-gateway/description
> > diff --git a/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan
> b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan
> > new file mode 100644
> > index 0000000..cfc8e69
> > --- /dev/null
> > +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan
> > @@ -0,0 +1,48 @@
> > +# load uci functions
> > +. /lib/functions.sh
> > +
> > +# load board specific properties
> > +BOARD="$(uci get board.model.name)"
> > +. /etc/network.$BOARD
> > +. /lib/functions/fff/cpuport
> > +
> > +
> > +configure() {
> > +	add_vlan() {
> > +		local vlan="$1"
> > +		local ports=$(uci get gateway.$vlan.ports)
> > +		local name="$SWITCHDEV"_$vlan
> > +
> > +		uci set network.$name='switch_vlan'
> > +		uci set network.$name.device="$(uci get
> network.$SWITCHDEV.name)"
> > +		uci set network.$name.vlan="$vlan"
> > +		uci set network.$name.ports="$CPUPORT $ports"
> > +	}
> > +
> > +	remove_vlan() {
> > +		local name="$1"
> > +
> > +		local switchdev=$(echo $name | cut -d_ -f1)
> > +		local vlan=$(echo $name | cut -d_ -f2)
> > +
> > +		# only remove vlans not present in gateway config
> > +		if ! uci -q get gateway.$vlan > /dev/null; then
> > +			# remove switch_vlan
> > +			uci del network.$name
> > +		fi
> > +	}
> > +
> > +	config_load network
> > +	config_foreach remove_vlan switch_vlan
> > +
> > +	config_load gateway
> > +	config_foreach add_vlan vlan
> > +}
> > +
> > +apply() {
> > +	uci commit network
> > +}
> > +
> > +revert() {
> > +	uci revert network
> > +}
> > diff --git a/src/packages/fff/fff-gateway/files/etc/gateway.d/30-network-
> client b/src/packages/fff/fff-gateway/files/etc/gateway.d/30-network-client
> > new file mode 100644
> > index 0000000..d5ae34c
> > --- /dev/null
> > +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/30-network-client
> > @@ -0,0 +1,71 @@
> > +# load board specific properties
> > +BOARD="$(uci get board.model.name)"
> > +. /etc/network.$BOARD
> > +
> > +
> > +configure() {
> > +	# ipaddr
> > +	#remove old ipaddr
> > +	uci -q del network.mesh.ipaddr
> > +	#set new ipaddr
> > +	if ipaddr=$(uci -q get gateway. at client[0].ipaddr); then
> > +		for ip in $ipaddr; do
> > +			uci add_list network.mesh.ipaddr=$ip
> > +		done
> > +	else
> > +		echo "WARNING: No client ipaddr set!"
> > +	fi
> > +	#put interface routes from set addresses into fff table
> > +	uci set network.mesh.ip4table='fff'
> > +
> > +	# ip6addr
> > +	#remove old ip6addr
> > +	for ip in $(uci get network.mesh.ip6addr); do
> > +		if echo "$ip" | grep -v -e "fdff:" -e "fe80::1/64" > /dev/null; then
> > +			uci del_list network.mesh.ip6addr="$ip"
> > +		fi
> > +	done
> > +	#set new ip6addr
> > +	if ip6addr=$(uci -q get gateway. at client[0].ip6addr); then
> > +		for ip in $ip6addr; do
> > +			uci add_list network.mesh.ip6addr=$ip
> > +		done
> > +	else
> > +		echo "WARNING: No client ip6addr set!"
> > +	fi
> > +	#put interface routes from set addresses into fff table
> > +	uci set network.mesh.ip6table='fff'
> > +
> > +	# dhcp
> > +	uci -q del dhcp.mesh.start
> > +	uci -q del dhcp.mesh.limit
> > +	if dhcp_start=$(uci -q get gateway. at client[0].dhcp_start); then
> > +		uci set dhcp.mesh=dhcp
> > +		uci set dhcp.mesh.interface=mesh
> > +		uci set dhcp.mesh.start=$dhcp_start
> > +		uci set dhcp.mesh.limit=$(uci -q get
> gateway. at client[0].dhcp_limit)
> > +	else
> > +		echo "WARNING: No DHCP range start and/or limit set!"
> > +	fi
> > +
> > +	# set interface
> > +	#remove all eth interfaces
> > +	ifaces=$(uci get network.mesh.ifname | sed -e 's/eth[^ ]* //g')
> > +	if vlan=$(uci -q get gateway. at client[0].vlan); then
> > +		uci set network.mesh.ifname="${SWITCHDEV}.$vlan $ifaces"
> > +	elif iface=$(uci -q get gateway. at client[0].iface); then
> > +		uci set network.mesh.ifname="$iface $ifaces"
> > +	else
> > +		echo "WARNING: No Interface for client specified"
> > +	fi
> > +}
> > +
> > +apply() {
> > +	uci commit network
> > +	uci commit dhcp
> > +}
> > +
> > +revert() {
> > +	uci revert network
> > +	uci revert dhcp
> > +}
> > diff --git a/src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff-gateway.conf
> b/src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff-gateway.conf
> > new file mode 100644
> > index 0000000..62bda1b
> > --- /dev/null
> > +++ b/src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff-gateway.conf
> > @@ -0,0 +1,5 @@
> > +# Enable forwarding
> > +net.ipv4.conf.all.forwarding=1
> > +net.ipv4.ip_forward=1
> > +net.ipv6.conf.all.forwarding=1
> > +net.ipv6.conf.default.forwarding=1
-------------- 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/20190516/d9a43379/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev