[PATCH] configurenetwork: Rearrangement/redesign of central commands

Adrian Schmutzler freifunk at adrianschmutzler.de
Di Jan 2 20:02:26 CET 2018


This patch rearranges the commands in configurenetwork. The main
goal is to avoid code duplications and make reading easier. Some
"bugs" were addressed on the way:
- Previously, ONEPORT devices went through both major blocks,
  resulting e.g. in useless eth0.X interfaces being set up (and
  perhaps lots of other strange things). Now, the routines for
  ONEPORT and normal devices are separated.
- Updating the /etc/sysctl.conf has been combined to a single
  block based on variables set earlier
- WANDEV is reset to WANDEV.2 were applicable to reduce number of
  ifs
- "uci del uci set" has been changed to "uci del"
- Spaces have been changed to Tabs were changes were done
- Arguments have been quoted in various places
- Double brackets have been replaced by single brackets
- ETHMODE if has been changed to use BATMAN as default (elseif
  changed to else)
- Use ETHMESHMAC for ONEPORT, introduce ETHMESHDEV

Signed-off-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>

---

This requires the patches to be applied BEFOREHAND:
fff-network: Introduce function to set MAC on device
fff-network: Replace ETH0MAC by replacement based on ROUTERMAC

Open issues:
- Line 84/89: eth0 MAC address is deleted (!). Why is this done
  only in uci and is it desirable to have a device without MAC?
---
 .../fff-network/files/usr/sbin/configurenetwork    | 155 ++++++++++-----------
 1 file changed, 70 insertions(+), 85 deletions(-)

diff --git a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
index 0fbff10..ded9485 100755
--- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
+++ b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
@@ -71,96 +71,81 @@ if [ -n "$LAN1PORT" ] ; then
     setupPorts "$LAN1PORT" "${LAN1MODE}"
 fi
 
-if ! uci -q get network.$SWITCHDEV > /dev/null || [ "$FORCEPARSE" = '1' ] ; then
-
-    SWITCHHW=$(swconfig list | awk '{ print $4 }')
-
-    uci set network.$SWITCHDEV=switch
-    uci set network.$SWITCHDEV.name=$SWITCHHW
-    uci set network.$SWITCHDEV.enable=1
-    uci set network.$SWITCHDEV.reset=1
-    uci set network.$SWITCHDEV.enable_vlan=1
-
-    uci set network.${SWITCHDEV}_1=switch_vlan
-    uci set network.${SWITCHDEV}_1.device=$SWITCHHW
-    uci set network.${SWITCHDEV}_1.vlan=1
-    uci set network.${SWITCHDEV}_1.ports="$CLIENT_PORTS"
-
-    echo "# Allow IPv6 RAs on WAN Port" >> /etc/sysctl.conf
-
-    if [[ "$WANDEV" = "$SWITCHDEV" ]] || ! [[ -z "$WAN_PORTS" ]]; then
-        uci set network.${SWITCHDEV}_2=switch_vlan
-        uci set network.${SWITCHDEV}_2.device=$SWITCHHW
-        uci set network.${SWITCHDEV}_2.vlan=2
-        uci set network.${SWITCHDEV}_2.ports="$WAN_PORTS"
-
-        echo "net.ipv6.conf.$WANDEV.2.accept_ra_defrtr = 1" >> /etc/sysctl.conf
-        echo "net.ipv6.conf.$WANDEV.2.accept_ra_pinfo = 1" >> /etc/sysctl.conf
-        echo "net.ipv6.conf.$WANDEV.2.autoconf = 1" >> /etc/sysctl.conf
-        echo "net.ipv6.conf.$WANDEV.2.accept_ra_rtr_pref = 1" >> /etc/sysctl.conf
-    else
-        echo "net.ipv6.conf.$WANDEV.accept_ra_defrtr = 1" >> /etc/sysctl.conf
-        echo "net.ipv6.conf.$WANDEV.accept_ra_pinfo = 1" >> /etc/sysctl.conf
-        echo "net.ipv6.conf.$WANDEV.autoconf = 1" >> /etc/sysctl.conf
-        echo "net.ipv6.conf.$WANDEV.accept_ra_rtr_pref = 1" >> /etc/sysctl.conf
-    fi
-    
-    uci set network.${SWITCHDEV}_3=switch_vlan
-    uci set network.${SWITCHDEV}_3.device=$SWITCHHW
-    uci set network.${SWITCHDEV}_3.vlan=3
-    uci set network.${SWITCHDEV}_3.ports="$BATMAN_PORTS"
-
-    uci set network.mesh.ifname="$SWITCHDEV.1 bat0"
-
-    uci set network.ethmesh.ifname="$SWITCHDEV.3"
-
-    if [[ "$WANDEV" = "$SWITCHDEV" ]]; then
-        uci set network.wan.ifname=$WANDEV.2
-    else
-        uci set network.wan.ifname=$WANDEV
-    fi
-
-    uci commit network
+if [ "$ONE_PORT" = "YES" ] ; then
+	if ! uci -q get "network.$SWITCHDEV.ifname" || [ "$FORCEPARSE" = '1' ] ; then
+		uci set "network.$SWITCHDEV=interface"
+		uci set "network.$SWITCHDEV.ifname=$SWITCHDEV"
+		wanon="0"
+		if [ "$ETHMODE" = "WAN" ]; then
+			wanon="1"
+			uci set network.mesh.ifname="bat0"
+			uci set network.wan.ifname="$WANDEV"
+			uci del network.ethmesh.ifname
+			uci del network.eth0.macaddr
+		elif [ "$ETHMODE" = "CLIENT" ] ; then
+			uci set network.mesh.ifname="bat0 $SWITCHDEV"
+			uci set network.wan.ifname="eth1" #eth1 because it is default in config file
+			uci del network.ethmesh.ifname
+			uci del network.eth0.macaddr
+		else # default=BATMAN
+			uci set network.mesh.ifname="bat0"
+			uci set network.wan.ifname="eth1" #eth1 because it is default in config file
+			uci set network.ethmesh.ifname="$SWITCHDEV"
+			ETHMESHMAC="$(macFlipLocalBit "$ROUTERMAC")"
+			ETHMESHDEV="$SWITCHDEV"
+		fi
+		uci -q commit network
+	fi
+else
+	if ! uci -q get "network.$SWITCHDEV" > /dev/null || [ "$FORCEPARSE" = '1' ] ; then
+		SWITCHHW="$(swconfig list | awk '{ print $4 }')"
+
+		uci set "network.$SWITCHDEV=switch"
+		uci set "network.$SWITCHDEV.name=$SWITCHHW"
+		uci set "network.$SWITCHDEV.enable=1"
+		uci set "network.$SWITCHDEV.reset=1"
+		uci set "network.$SWITCHDEV.enable_vlan=1"
+
+		uci set "network.${SWITCHDEV}_1=switch_vlan"
+		uci set "network.${SWITCHDEV}_1.device=$SWITCHHW"
+		uci set "network.${SWITCHDEV}_1.vlan=1"
+		uci set "network.${SWITCHDEV}_1.ports=$CLIENT_PORTS"
+
+		echo "# Allow IPv6 RAs on WAN Port" >> /etc/sysctl.conf
+
+		wanon="1"
+		if [ "$WANDEV" = "$SWITCHDEV" ] || [ -n "$WAN_PORTS" ]; then
+			WANDEV="${SWITCHDEV}.2"
+			uci set "network.${SWITCHDEV}_2=switch_vlan"
+			uci set "network.${SWITCHDEV}_2.device=$SWITCHHW"
+			uci set "network.${SWITCHDEV}_2.vlan=2"
+			uci set "network.${SWITCHDEV}_2.ports=$WAN_PORTS"
+		fi
+		
+		ETHMESHDEV="$SWITCHDEV.3"
+		uci set "network.${SWITCHDEV}_3=switch_vlan"
+		uci set "network.${SWITCHDEV}_3.device=$SWITCHHW"
+		uci set "network.${SWITCHDEV}_3.vlan=3"
+		uci set "network.${SWITCHDEV}_3.ports=$BATMAN_PORTS"
+		
+		uci set network.mesh.ifname="$SWITCHDEV.1 bat0"
+		uci set network.wan.ifname="$WANDEV"
+		uci set network.ethmesh.ifname="$ETHMESHDEV"
+		
+		uci -q commit network
+	fi
 fi
-
-if [ "$ONE_PORT" = "YES" ] && ( ! uci -q get network.$SWITCHDEV.ifname || [ "$FORCEPARSE" = '1' ] ) ; then
-    uci set network.$SWITCHDEV=interface
-    uci set network.$SWITCHDEV.ifname=$SWITCHDEV
-    if [ "$ETHMODE" = "WAN" ]; then
-        echo "net.ipv6.conf.$WANDEV.accept_ra_defrtr = 1" >> /etc/sysctl.conf
-        echo "net.ipv6.conf.$WANDEV.accept_ra_pinfo = 1" >> /etc/sysctl.conf
-        echo "net.ipv6.conf.$WANDEV.autoconf = 1" >> /etc/sysctl.conf
-        echo "net.ipv6.conf.$WANDEV.accept_ra_rtr_pref = 1" >> /etc/sysctl.conf
-        uci set network.mesh.ifname="bat0"
-        uci set network.wan.ifname="$WANDEV"
-        uci del uci set network.ethmesh.ifname
-        uci del network.eth0.macaddr
-    elif [ "$ETHMODE" = "CLIENT" ] ; then
-        echo "net.ipv6.conf.$WANDEV.accept_ra_defrtr = 0" >> /etc/sysctl.conf
-        echo "net.ipv6.conf.$WANDEV.accept_ra_pinfo = 0" >> /etc/sysctl.conf
-        echo "net.ipv6.conf.$WANDEV.autoconf = 0" >> /etc/sysctl.conf
-        echo "net.ipv6.conf.$WANDEV.accept_ra_rtr_pref = 0" >> /etc/sysctl.conf
-        uci set network.mesh.ifname="bat0 $SWITCHDEV"
-        uci set network.wan.ifname="eth1" #eth1 because it is default in config file
-        uci del network.ethmesh.ifname
-        uci del network.eth0.macaddr
-    elif [ "$ETHMODE" = "BATMAN" ] ; then
-        echo "net.ipv6.conf.$WANDEV.accept_ra_defrtr = 0" >> /etc/sysctl.conf
-        echo "net.ipv6.conf.$WANDEV.accept_ra_pinfo = 0" >> /etc/sysctl.conf
-        echo "net.ipv6.conf.$WANDEV.autoconf = 0" >> /etc/sysctl.conf
-        echo "net.ipv6.conf.$WANDEV.accept_ra_rtr_pref = 0" >> /etc/sysctl.conf
-        uci set network.mesh.ifname="bat0"
-        uci set network.wan.ifname="eth1" #eth1 because it is default in config file
-        uci set network.ethmesh.ifname="$SWITCHDEV"
-        fixMac "$(macFlipLocalBit "$ROUTERMAC")" "eth0" "eth0" "1"
-    fi
-    uci commit network
+if [ -n "$wanon" ]; then
+	echo "net.ipv6.conf.$WANDEV.accept_ra_defrtr = $wanon" >> /etc/sysctl.conf
+	echo "net.ipv6.conf.$WANDEV.accept_ra_pinfo = $wanon" >> /etc/sysctl.conf
+	echo "net.ipv6.conf.$WANDEV.autoconf = $wanon" >> /etc/sysctl.conf
+	echo "net.ipv6.conf.$WANDEV.accept_ra_rtr_pref = $wanon" >> /etc/sysctl.conf
 fi
 
 /etc/init.d/network restart
 
-if [ -n "$ETHMESHMAC" ]; then
-    fixMac "$ETHMESHMAC" "${SWITCHDEV}.3" "ethmesh"
+if [ -n "$ETHMESHMAC" ] && [ -n "$ETHMESHDEV" ]; then
+    fixMac "$ETHMESHMAC" "$ETHMESHDEV" "ethmesh"
 fi
 
 if [ -n "$ROUTERMAC" ]; then
-- 
2.7.4



Mehr Informationen über die Mailingliste franken-dev