firmware/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
Fabian Blaese 1eaa0075fd Use SWITCHDEV variable for mac address fixing
This makes use of the SWITCHDEV variable to ensure that the
correct interface is used for mac address fixing on devices,
that do not use eth0 for the switch.

Signed-off-by: Fabian Bläse <fabian@blaese.de>
Reviewed-by: Christian Dresel <fff@chrisi01.de>
2017-11-12 17:28:42 +01:00

244 lines
8.3 KiB
Bash
Executable File

#!/bin/sh
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
. /lib/functions/fff/network
BOARD="$(uci get board.model.name)"
. /etc/network.$BOARD
if [ -s /etc/network.config ] ; then
. /etc/network.config
else
echo "CLIENT_PORTS='$CLIENT_PORTS'" > /etc/network.config
echo "BATMAN_PORTS='$BATMAN_PORTS'" >> /etc/network.config
if [ -n "$WAN_PORTS" ] ; then
echo "WAN_PORTS='$WAN_PORTS'" >> /etc/network.config
fi
if [ "$ONE_PORT" = "YES" ] || [ -n "$ETHPORT" ] ; then
echo "ETHMODE='$ETHMODE' # use BATMAN, CLIENT or WAN" >> /etc/network.config
fi
if [ -n "$LAN0PORT" ] ; 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
fi
if [ "$FORCEPARSE" = '2' ] ; then
sed -i '/^FORCEPARSE/d' /etc/network.config
echo "FORCEPARSE='0' # Parse at: 0=first boot only, 1=every reboot, 2=next reboot (once)" >> /etc/network.config
FORCEPARSE='1'
fi
if [ -n "$ETHPORT" ] ; then
#LAN@AR150: default: BATMAN
if [ "${ETHMODE}" = "BATMAN" ] ; then
BATMAN_PORTS="${BATMAN_PORTS} ${ETHPORT}"
else
CLIENT_PORTS="${CLIENT_PORTS} ${ETHPORT}"
fi
fi
if [ -n "$LAN0PORT" ] ; then
#LAN0@two-port: default: BATMAN
if [ "${LAN0MODE}" = "BATMAN" ] ; then
BATMAN_PORTS="${BATMAN_PORTS} ${LAN0PORT}"
elif [ "${LAN0MODE}" = "CLIENT" ] ; then
CLIENT_PORTS="${CLIENT_PORTS} ${LAN0PORT}"
else
WAN_PORTS="${WAN_PORTS} ${LAN0PORT}"
fi
fi
if [ -n "$LAN1PORT" ] ; then
#LAN1@two-port: default: BATMAN
if [ "${LAN1MODE}" = "WAN" ] ; then
WAN_PORTS="${WAN_PORTS} ${LAN1PORT}"
elif [ "${LAN1MODE}" = "CLIENT" ] ; then
CLIENT_PORTS="${CLIENT_PORTS} ${LAN1PORT}"
else
BATMAN_PORTS="${BATMAN_PORTS} ${LAN1PORT}"
fi
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
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
fi
/etc/init.d/network restart
if [[ -n "$ETHMESHMAC" ]]; then
if uci get network.ethmesh.macaddr
then
echo "MAC for ethmesh is set already"
else
echo "Fixing MAC on $SWITCHDEV.3 (ethmesh)"
sleep 10
uci set network.ethmesh.macaddr=$ETHMESHMAC
uci commit
ifconfig $SWITCHDEV.3 down
ifconfig $SWITCHDEV.3 hw ether $NEW_MACADDR
ifconfig $SWITCHDEV.3 up
/etc/init.d/network restart
fi
fi
if [[ -n "$ROUTERMAC" ]]; then
if uci get network.mesh.macaddr
then
echo "MAC for mesh is set already"
else
echo "Fixing MAC on br-mesh (mesh)"
sleep 10
uci set network.mesh.macaddr=$ROUTERMAC
uci commit
ifconfig br-mesh down
ifconfig br-mesh hw ether $NEW_MACADDR
ifconfig br-mesh up
/etc/init.d/network restart
fi
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
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"
else
# Some time needed :(
sleep 5
for ip in $(ip -6 addr show br-mesh | awk '/fdff/{ print $2 }'); do
ip -6 addr del $ip dev br-mesh
done
prefix="fdff:0::/64"
# Set $prefix::MAC as IP
addr="$(ipMacAssemble "$prefix" "br-mesh")"
ip -6 addr add $addr dev br-mesh
uci -q del network.globals
uci -q set network.globals=globals
uci -q set network.globals.ula_prefix=$prefix
uci -q add_list network.mesh.ip6addr=$addr
uci -q set network.mesh.proto=static
# Set $prefix::1 as IP
addr="$(ipAssemble "$prefix" "1")"
ip -6 addr add $addr dev br-mesh
uci -q add_list network.mesh.ip6addr=$addr
# Set $prefix::link-local as IP
addr="$(ipEUIAssemble "$prefix" "br-mesh")"
ip -6 addr add $addr dev br-mesh
uci -q add_list network.mesh.ip6addr=$addr
uci -q commit network
/etc/init.d/fff-uradvd restart
fi