From patchwork Sun Jan 21 15:42:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [v3, 2/3] configurenetwork: Rearrangement/redesign of central commands From: Adrian Schmutzler X-Patchwork-Id: 761 Message-Id: <1516549378-3349-1-git-send-email-freifunk@adrianschmutzler.de> To: franken-dev@freifunk.net Date: Sun, 21 Jan 2018 16:42:57 +0100 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 - Shift bit of ROUTERMAC for ONEPORT's ETHMESHMAC Signed-off-by: Adrian Schmutzler Tested-by: Adrian Schmutzler --- Tested successfully on WR841N v12 and Unifi AC Mesh Changes in v2: - Merged with ETH0MAC replacement patch Changes in v3: - Don't write comment to /etc/sysctl.conf --- .../fff-network/files/usr/sbin/configurenetwork | 165 +++++++++------------ 1 file changed, 68 insertions(+), 97 deletions(-) diff --git a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork index 0175ce1..d78e641 100755 --- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork +++ b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork @@ -71,114 +71,85 @@ 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" + + 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" - ETH0MAC="w2ap" - 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 fixMac "$ROUTERMAC" "br-mesh" "mesh" fi -if [[ -n "$ETH0MAC" ]]; then - echo "Fixing MAC on eth0" - sleep 10 - NEW_MACADDR=$(cat "/sys/class/net/${ETH0MAC}/address") - uci set network.eth0.macaddr=$NEW_MACADDR - uci commit network - ifconfig eth0 down - ifconfig eth0 hw ether $NEW_MACADDR - ifconfig eth0 up - /etc/init.d/network restart -fi - if uci get network.mesh.ip6addr then echo "IPv6 for mesh is set already"