forked from freifunk-franken/firmware
fff-network: support native two-port devices
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 <freifunk@adrianschmutzler.de> Reviewed-by: Fabian Bläse <fabian@blaese.de>
This commit is contained in:
parent
47db8d31be
commit
c22032e254
|
@ -1,7 +1,7 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=fff-network
|
||||
PKG_RELEASE:=40
|
||||
PKG_RELEASE:=41
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
|
|
|
@ -4,23 +4,6 @@
|
|||
. /lib/functions/system.sh
|
||||
. /lib/functions/fff/network
|
||||
|
||||
setupPorts() {
|
||||
# Add a single port to the *_PORTS config
|
||||
# Usage: setupPorts <port id> <port mode>
|
||||
|
||||
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
|
||||
|
||||
|
|
Loading…
Reference in New Issue