[PATCH 1/3] fff-network: Fix/improve setup of one- and two-port devices

Adrian Schmutzler freifunk at adrianschmutzler.de
Di Apr 16 23:42:32 CEST 2019


This will be merged into the relevant patches when a new
patchset is sent.

Signed-off-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
---
 .../files/etc/uci-defaults/22b-config-ports        |  2 +-
 .../files/lib/functions/fff/networksetup           | 30 ++++++++++++----------
 .../fff/fff-network/files/usr/sbin/setoneport      |  5 +++-
 .../fff/fff-network/files/usr/sbin/settwoeth       | 15 ++++++++---
 4 files changed, 34 insertions(+), 18 deletions(-)

diff --git a/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-ports b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-ports
index 372a6c59..c1d8381e 100644
--- a/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-ports
+++ b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-ports
@@ -74,7 +74,7 @@ case "$BOARD" in
 	ubnt-nano-m)
 		setupOnePort "eth0" "WAN"
 		setup2ndEth "eth1" "CLIENT"
-		uci -q set "fff.ui.portsetup=twoeth"
+		uci set "fff.ui.portsetup=twoeth"
 		;;
 	cpe210-v2|\
 	cpe210-v3|\
diff --git a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
index 0478cf59..fca772a6 100644
--- a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
+++ b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
@@ -151,12 +151,12 @@ setupOnePort() {
 	elif [ "$ETHMODE" = "CLIENT" ] ; then
 		disableAutoConf "$DEV"
 		uci set network.mesh.ifname="bat0 $DEV"
-		uci set network.wan.ifname="eth1" # eth1 because it is default in config file
+		uci del network.wan.ifname
 		uci del network.ethmesh.ifname
 	else # default=BATMAN
 		disableAutoConf "$DEV"
 		uci set network.mesh.ifname="bat0"
-		uci set network.wan.ifname="eth1" # eth1 because it is default in config file
+		uci del network.wan.ifname
 		uci set network.ethmesh.ifname="$DEV"
 	fi
 	uci commit network
@@ -179,18 +179,22 @@ setup2ndEth() {
 	uci set "network.$DEV=interface"
 	uci set "network.$DEV.ifname=$DEV"
 
-	local meshif="$(uci -q get network.mesh.ifname | sed "s/ *$DEV//")"
-	local ethmeshif="$(uci -q get network.ethmesh.ifname | sed "s/ *$DEV//")"
+	local meshif="$(uci -q get network.mesh.ifname)"
+
 	if [ "$ETHMODE" = "CLIENT" ] ; then
-		uci set network.mesh.ifname="$meshif $DEV"
-		if [ -n "$ethmesif" ]; then
-			uci set network.ethmesh.ifname="$ethmesif"
-		else
-			uci del network.ethmesh.ifname
-		fi
-	else # default=BATMAN
-		uci set network.mesh.ifname="$meshif"
-		uci set network.ethmesh.ifname="$ethmesif $DEV"
+		# Only write if not only there
+		echo "$meshif" | grep -q "$DEV" || uci set network.mesh.ifname="$meshif $DEV"
+	else
+		# Remove if there
+		uci set network.mesh.ifname="$(echo "$meshif" | sed "s/ *$DEV//")"
+	fi
+
+	if [ "$ETHMODE" = "BATMAN" ] ; then
+		# Always overwrite (if both ports are set to BATMAN, only the second will be)
+		uci set network.ethmesh.ifname="$DEV"
+	else
+		uci -q get network.ethmesh.ifname | grep -q "$DEV" && uci del network.ethmesh.ifname
 	fi
+
 	uci commit network
 }
diff --git a/src/packages/fff/fff-network/files/usr/sbin/setoneport b/src/packages/fff/fff-network/files/usr/sbin/setoneport
index 6812bf17..37387827 100755
--- a/src/packages/fff/fff-network/files/usr/sbin/setoneport
+++ b/src/packages/fff/fff-network/files/usr/sbin/setoneport
@@ -10,9 +10,12 @@ fi
 . /lib/functions/fff/networksetup
 
 ETHMODE=$1
+DEV=$2
+
+[ -n "$DEV" ] || DEV="eth0"
 
 if [ "$ETHMODE" = "WAN" ] || [ "$ETHMODE" = "CLIENT" ] || [ "$ETHMODE" = "BATMAN" ]; then
-	setupOnePort "eth0" "$ETHMODE"
+	setupOnePort "$DEV" "$ETHMODE"
 	/etc/init.d/network restart
 	echo "Port updated successfully."
 else
diff --git a/src/packages/fff/fff-network/files/usr/sbin/settwoeth b/src/packages/fff/fff-network/files/usr/sbin/settwoeth
index b2489789..8f82c1ee 100755
--- a/src/packages/fff/fff-network/files/usr/sbin/settwoeth
+++ b/src/packages/fff/fff-network/files/usr/sbin/settwoeth
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 if ! [ "$(uci -q get fff.ui.portsetup)" = "twoeth" ] ; then
-	echo "Wrong device. This is for Nanostation M only!"
+	echo "Wrong device. This is for devices with two ethX without switch!"
 	exit 1
 fi
 
@@ -9,6 +9,11 @@ fi
 
 ETHMODE1=$1
 ETHMODE2=$2
+DEV1=$3
+DEV2=$4
+
+[ -n "$DEV1" ] || DEV1="eth0"
+[ -n "$DEV2" ] || DEV2="eth1"
 
 if ! ([ "$ETHMODE1" = "WAN" ] || [ "$ETHMODE1" = "CLIENT" ] || [ "$ETHMODE1" = "BATMAN" ]); then
 	echo "Wrong port mode for first port. Choose one of: WAN, CLIENT, BATMAN"
@@ -18,9 +23,13 @@ if ! ([ "$ETHMODE2" = "CLIENT" ] || [ "$ETHMODE2" = "BATMAN" ]); then
 	echo "Wrong port mode for second port. Choose one of: CLIENT, BATMAN"
 	exit 1
 fi
+if [ "$ETHMODE1" = "BATMAN" ] && [ "$ETHMODE2" = "BATMAN" ]; then
+	echo "Only one port can be set to BATMAN!"
+	exit 1
+fi
 
-setupOnePort "eth0" "$ETHMODE1"
-setup2ndEth "eth1" "$ETHMODE2"
+setupOnePort "$DEV1" "$ETHMODE1"
+setup2ndEth "$DEV2" "$ETHMODE2"
 /etc/init.d/network restart
 echo "Port updated successfully."
 
-- 
2.11.0



Mehr Informationen über die Mailingliste franken-dev