From c22032e2543025aa2ba465d8c4e6562edbb5a99e Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Tue, 8 Jun 2021 21:58:03 +0200 Subject: [PATCH] fff-network: support native two-port devices MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Support native two-port devices by adding TWO_PORT variable and exploiting the LAN0PORT and LAN1PORT variables designed for the TP-Link CPE devices. Since the latter have been converted to real two-port devices, we can now repurpose these variable for the new setup. This exploits the existing WANDEV and SWITCHDEV variables to define the primary and secondary interfaces. Note that by default this takes the initial values from network.mode, so if initial WAN/CLIENT should swapped, this has to be added to the relevant network.* file of the devices. No device-specific changes are done in this patch. Signed-off-by: Adrian Schmutzler Reviewed-by: Fabian Bläse --- src/packages/fff/fff-network/Makefile | 2 +- .../files/usr/sbin/configurenetwork | 143 ++++++++++-------- 2 files changed, 84 insertions(+), 61 deletions(-) diff --git a/src/packages/fff/fff-network/Makefile b/src/packages/fff/fff-network/Makefile index 057e3ccb..81b29cb1 100644 --- a/src/packages/fff/fff-network/Makefile +++ b/src/packages/fff/fff-network/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=fff-network -PKG_RELEASE:=40 +PKG_RELEASE:=41 include $(INCLUDE_DIR)/package.mk diff --git a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork index de737500..b1559758 100755 --- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork +++ b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork @@ -4,23 +4,6 @@ . /lib/functions/system.sh . /lib/functions/fff/network -setupPorts() { - # Add a single port to the *_PORTS config - # Usage: setupPorts - - local port=$1 - local mode=$2 - - #default: BATMAN - if [ "$mode" = "WAN" ] ; then - WAN_PORTS="${WAN_PORTS} $port" - elif [ "$mode" = "CLIENT" ] ; then - CLIENT_PORTS="${CLIENT_PORTS} $port" - else - BATMAN_PORTS="${BATMAN_PORTS} $port" - fi -} - BOARD="$(uci get board.model.name)" . /etc/network.$BOARD [ -n "$ROUTERMAC" ] || ROUTERMAC=$(get_mac_label) @@ -37,10 +20,8 @@ else if [ "$ONE_PORT" = "YES" ] || [ -n "$ETHPORT" ] ; then echo "ETHMODE='$ETHMODE' # use BATMAN, CLIENT or WAN" >> /etc/network.config fi - if [ -n "$LAN0PORT" ] ; then + if [ -n "$TWO_PORT" ] ; then echo "LAN0MODE='$LAN0MODE' # use BATMAN, CLIENT or WAN" >> /etc/network.config - fi - if [ -n "$LAN1PORT" ] ; then echo "LAN1MODE='$LAN1MODE' # use BATMAN, CLIENT or WAN" >> /etc/network.config fi echo "FORCEPARSE='0' # Parse at: 0=first boot only, 1=every reboot, 2=next reboot (once)" >> /etc/network.config @@ -52,20 +33,84 @@ if [ "$FORCEPARSE" = '2' ] ; then FORCEPARSE='1' fi -if [ -n "$ETHPORT" ] ; then - #LAN@AR150: default: BATMAN - setupPorts "$ETHPORT" "${ETHMODE}" -fi -if [ -n "$LAN0PORT" ] ; then - #LAN0@two-port: default: BATMAN - setupPorts "$LAN0PORT" "${LAN0MODE}" -fi -if [ -n "$LAN1PORT" ] ; then - #LAN1@two-port: default: BATMAN - setupPorts "$LAN1PORT" "${LAN1MODE}" -fi +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 + if [ "$ETHMODE" = "WAN" ]; then + uci set network.client.ifname="bat0" + uci set network.wan.ifname="$WANDEV" + uci del network.ethmesh.ifname + uci del network.${SWITCHDEV}.macaddr + elif [ "$ETHMODE" = "CLIENT" ] ; then + uci set network.client.ifname="bat0 $SWITCHDEV" + uci set network.wan.ifname="eth2" #eth2 because it is default in config file + uci del network.ethmesh.ifname + uci del network.${SWITCHDEV}.macaddr + elif [ "$ETHMODE" = "BATMAN" ] ; then + uci set network.client.ifname="bat0" + uci set network.wan.ifname="eth2" #eth2 because it is default in config file + uci set network.ethmesh.ifname="$SWITCHDEV" + ETH0DEV="$SWITCHDEV" + ETH0MAC="w2ap" + fi + uci commit network + fi +elif [ "$TWO_PORT" = "YES" ]; then + if ! uci -q get network.$WANDEV.ifname || [ "$FORCEPARSE" = '1' ] ; then + uci set network.$WANDEV=interface + uci set network.$WANDEV.ifname="$WANDEV" + uci set network.$SWITCHDEV=interface + uci set network.$SWITCHDEV.ifname="$SWITCHDEV" + # Only one WAN possible, second port will be unset if both are WAN + if [ "$LAN0MODE" = "WAN" ]; then + if [ "$LAN1MODE" = "CLIENT" ]; then + uci set network.client.ifname="bat0 $SWITCHDEV"; else + uci set network.client.ifname=bat0; fi + # WAN + uci set network.wan.ifname="$WANDEV" + if [ "$LAN1MODE" = "BATMAN" ]; then + uci set network.ethmesh.ifname="$SWITCHDEV"; else + uci del network.ethmesh.ifname; fi + # Two client ports are possible + elif [ "$LAN0MODE" = "CLIENT" ]; then + if [ "$LAN1MODE" = "CLIENT" ]; then + uci set network.client.ifname="bat0 $WANDEV $SWITCHDEV"; else + uci set network.client.ifname="bat0 $WANDEV"; fi + if [ "$LAN1MODE" = "WAN" ]; then + uci set network.wan.ifname="$SWITCHDEV"; else + uci set network.wan.ifname=eth2; fi #eth2 because it is default in config file + if [ "$LAN1MODE" = "BATMAN" ]; then + uci set network.ethmesh.ifname="$SWITCHDEV"; else + uci del network.ethmesh.ifname; fi + # Only one BATMAN port possible, second port will be unset if both are BATMAN + elif [ "$LAN0MODE" = "BATMAN" ] ; then + if [ "$LAN1MODE" = "CLIENT" ]; then + uci set network.client.ifname="bat0 $SWITCHDEV"; else + uci set network.client.ifname=bat0; fi + if [ "$LAN1MODE" = "WAN" ]; then + uci set network.wan.ifname="$SWITCHDEV"; else + uci set network.wan.ifname=eth2; fi #eth2 because it is default in config file + # BATMAN + uci set network.ethmesh.ifname="$WANDEV" + fi + if [ "$LAN0MODE" = "BATMAN" ]; then + ETH0DEV="$WANDEV" # only needed for setting macaddr + ETH0MAC=w2ap + uci del network.$SWITCHDEV.macaddr + elif [ "$LAN1MODE" = "BATMAN" ]; then + # $WANDEV will win if both are set to BATMAN, as above + ETH0DEV="$SWITCHDEV" # only needed for setting macaddr + ETH0MAC=w2ap + uci del network.$WANDEV.macaddr + else + uci del network.$WANDEV.macaddr + uci del network.$SWITCHDEV.macaddr + fi -if [ "$ONE_PORT" != "YES" ]; then + uci commit network + fi +else if ! uci -q get network.$SWITCHDEV > /dev/null || [ "$FORCEPARSE" = '1' ] ; then SWITCHHW=$(swconfig list | awk '{ print $4 }') @@ -103,28 +148,6 @@ if [ "$ONE_PORT" != "YES" ]; then uci set network.wan.ifname=$WANDEV fi - uci commit network - fi -else - if ! uci -q get network.$SWITCHDEV.ifname || [ "$FORCEPARSE" = '1' ] ; then - uci set network.$SWITCHDEV=interface - uci set network.$SWITCHDEV.ifname=$SWITCHDEV - if [ "$ETHMODE" = "WAN" ]; then - uci set network.client.ifname="bat0" - uci set network.wan.ifname="$WANDEV" - uci del network.ethmesh.ifname - uci del network.${SWITCHDEV}.macaddr - elif [ "$ETHMODE" = "CLIENT" ] ; then - uci set network.client.ifname="bat0 $SWITCHDEV" - uci set network.wan.ifname="eth2" #eth2 because it is default in config file - uci del network.ethmesh.ifname - uci del network.${SWITCHDEV}.macaddr - elif [ "$ETHMODE" = "BATMAN" ] ; then - uci set network.client.ifname="bat0" - uci set network.wan.ifname="eth2" #eth2 because it is default in config file - uci set network.ethmesh.ifname="$SWITCHDEV" - ETH0MAC="w2ap" - fi uci commit network fi fi @@ -168,14 +191,14 @@ if [ -n "$ROUTERMAC" ]; then fi if [ -n "$ETH0MAC" ]; then - echo "Fixing MAC on $SWITCHDEV" + echo "Fixing MAC on $ETH0DEV" sleep 10 NEW_MACADDR=$(cat "/sys/class/net/${ETH0MAC}/address") - uci set network.${SWITCHDEV}.macaddr=$NEW_MACADDR + uci set network.$ETH0DEV.macaddr=$NEW_MACADDR uci commit network - ifconfig $SWITCHDEV down - ifconfig $SWITCHDEV hw ether $NEW_MACADDR - ifconfig $SWITCHDEV up + ifconfig $ETH0DEV down + ifconfig $ETH0DEV hw ether $NEW_MACADDR + ifconfig $ETH0DEV up /etc/init.d/network restart fi