[v3,03/14] fff-network: Reorganize network initialization

Submitted by Adrian Schmutzler on April 22, 2019, 12:35 p.m.

Details

Message ID 20190422123537.5852-3-freifunk@adrianschmutzler.de
State Deferred
Headers show

Commit Message

Adrian Schmutzler April 22, 2019, 12:35 p.m.
This removes the configurenetwork script and replaces it by some
scripts run only during first boot.

This introduces several changes:
- The different tasks dealt with in configurenetwork are split.
  Thus, one script deals with switch/port setup, one with br-mesh
  MAC address, one with ETHMESHMAC, and one with IP addresses.
  This makes the whole approach more modular, compared to the
  monolithic configurenetwork.
- Where configurenetwork contained sophisticated, nested conditions
  to account for all possible combinations of variables, the new
  approach is inspired by OpenWrt's board.d subfiles. Instead of
  defining variables, we now directly call function in a
  select-case. This is much more flexible, as we can just put code
  there for a special case instead of bending configurenetwork for
  it.
- The select-case accounts for the various cases of similar/same
  parameters of multiple devices, which can be grouped now.
- Scripts are run only at first boot. Later changes have to be
  done manually (we will provide some scripts later). Those will
  typically be limited to changing only the ports; no need to run
  whole network config again.
- network.mode and network.config will disappear. For switch-based
  devices, there is no advantage of using network.config compared
  directly editing /etc/config/network. Upgrade-safety can be
  established by putting uci commands in an upgrade-safe script
  file (to be provided in a later patch).

After this patch, show_info and the ports display in WebUI are
broken. Those will be fixed in a later patch.

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

---

Changed in v2:
- Fixed archer-c60-v2 to v1
- Added network functions file in uci-defaults/22c
- Removed some -q from uci
- Removed all commands only needed for running devices (this is
  uci only)
- Added descriptions for functions in networksetup

Changed in v3:
- Changed order of 22a and 22b
- uci del instead uci set for WAN on one-port
- switch/vlanX instead of eth#/eth#.# for switch-based devices
---
 bsp/default/root_file_system/etc/rc.local          |   4 -
 src/packages/fff/fff-network/Makefile              |   4 +-
 .../files/etc/uci-defaults/22a-config-ports        |  89 +++++++
 .../files/etc/uci-defaults/22b-config-routermac    |  55 +++++
 .../files/etc/uci-defaults/22c-config-ethmesh      |  75 ++++++
 .../files/etc/uci-defaults/23-config-ipaddr        |  31 +++
 .../files/lib/functions/fff/networksetup           | 163 +++++++++++++
 .../fff-network/files/lib/functions/fff/portorder  |  31 +++
 .../fff-network/files/usr/sbin/configurenetwork    | 263 ---------------------
 src/packages/fff/fff-sysupgrade/Makefile           |   3 +-
 .../files/etc/uci-defaults/99-fff-sysupgrade       |   1 -
 11 files changed, 446 insertions(+), 273 deletions(-)
 create mode 100644 src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
 create mode 100644 src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
 create mode 100644 src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
 create mode 100644 src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
 create mode 100644 src/packages/fff/fff-network/files/lib/functions/fff/networksetup
 create mode 100644 src/packages/fff/fff-network/files/lib/functions/fff/portorder
 delete mode 100755 src/packages/fff/fff-network/files/usr/sbin/configurenetwork

Patch hide | download patch | download mbox

diff --git a/bsp/default/root_file_system/etc/rc.local b/bsp/default/root_file_system/etc/rc.local
index 59042c37..e02368a5 100755
--- a/bsp/default/root_file_system/etc/rc.local
+++ b/bsp/default/root_file_system/etc/rc.local
@@ -2,10 +2,6 @@ 
 # Put your custom commands here that should be executed once
 # the system init finished. By default this file does nothing.
 
-/usr/sbin/configurenetwork
-
-sleep 3
-
 /usr/sbin/configurehood
 
 touch /tmp/started
diff --git a/src/packages/fff/fff-network/Makefile b/src/packages/fff/fff-network/Makefile
index e9335884..11796797 100644
--- a/src/packages/fff/fff-network/Makefile
+++ b/src/packages/fff/fff-network/Makefile
@@ -1,8 +1,7 @@ 
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=fff-network
-PKG_VERSION:=10
-PKG_RELEASE:=1
+PKG_RELEASE:=11
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
 
@@ -34,7 +33,6 @@  endef
 
 define Package/$(PKG_NAME)/install
 	$(CP) ./files/* $(1)/
-	test -d ./$(BOARD) && $(CP) ./$(BOARD)/* $(1)/etc/
 endef
 
 $(eval $(call BuildPackage,$(PKG_NAME)))
diff --git a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
new file mode 100644
index 00000000..b8eaceab
--- /dev/null
+++ b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
@@ -0,0 +1,89 @@ 
+#!/bin/sh
+# Copyright 2019 Adrian Schmutzler
+# License GPLv3
+
+BOARD="$(uci get board.model.name)"
+
+. /lib/functions/fff/networksetup
+
+case "$BOARD" in
+	archer-c7-v2)
+		setupSwitch "eth1" "4 5 0t" "2 3 0t" "1 6"
+		setupWan "eth0"
+		;;
+	archer-c25-v1|\
+	archer-c60-v1)
+		setupSwitch "eth1" "1 2 0t" "3 4 0t"
+		setupWan "eth0"
+		;;
+	cpe210|\
+	cpe510)
+		# Default: LAN0: WAN, LAN1: CLIENT
+		setupSwitch "eth0" "0t 4" "0t" "0t 5"
+		setupWan "eth0.2"
+		;;
+	gl-ar150)
+		# Default: CLIENT
+		setupSwitch "eth1" "0t 1" "0t"
+		setupWan "eth0"
+		;;
+	tl-wdr3500-v1|\
+	tl-wr741nd-v2|\
+	tl-wr841-v7|\
+	tl-wr841-v9|\
+	tl-wr841-v10|\
+	tl-wr841-v11|\
+	tl-wr841-v12)
+		setupSwitch "eth0" "1 2 0t" "3 4 0t"
+		setupWan "eth1"
+		;;
+	tl-wdr3600-v1|\
+	tl-wdr4300-v1|\
+	tl-wdr4310-v1|\
+	tl-wdr4900-v1)
+		setupSwitch "eth0" "4 5 0t" "2 3 0t" "1 0t"
+		setupWan "eth0.2"
+		;;
+	tl-wr841-v8|\
+	tl-wr842n-v2)
+		setupSwitch "eth1" "1 4 0t" "2 3 0t"
+		setupWan "eth0"
+		;;
+	tl-wr740n-v4|\
+	tl-wr740nd-v4|\
+	tl-wr741nd-v4)
+		setupSwitch "eth0" "1 4 0t" "2 3 0t"
+		setupWan "eth1"
+		;;
+	tl-wr1043nd-v1)
+		setupSwitch "eth0" "3 4 5t" "1 2 5t" "0 5t"
+		setupWan "eth0.2"
+		;;
+	tl-wr1043nd-v2|\
+	tl-wr1043nd-v3)
+		setupSwitch "eth0" "1 2 6t" "3 4 6t" "5 6t"
+		setupWan "eth0.2"
+		;;
+	tl-wr1043nd-v4|\
+	tl-wr1043n-v5)
+		setupSwitch "eth0" "1 2 0t" "3 4 0t" "5 0t"
+		setupWan "eth0.2"
+		;;
+	cpe210-v2|\
+	cpe210-v3|\
+	tl-mr3020-v1|\
+	tl-wa850re-v1|\
+	tl-wa860re-v1|\
+	tl-wa901nd-v2|\
+	ubnt-bullet-m|\
+	ubnt-loco-m|\
+	ubnt-loco-m-xw|\
+	ubnt-nano-m|\
+	ubnt-pico-m|\
+	ubnt-power-m-xw|\
+	ubnt-unifi|\
+	ubnt-unifiac-lite|\
+	ubnt-unifiac-mesh)
+		setupOnePort "eth0" "CLIENT"
+		;;
+esac
diff --git a/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
new file mode 100644
index 00000000..d1a5e50c
--- /dev/null
+++ b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
@@ -0,0 +1,55 @@ 
+#!/bin/sh
+# Copyright 2019 Adrian Schmutzler
+# License GPLv3
+
+BOARD="$(uci get board.model.name)"
+
+. /lib/functions/fff/networksetup
+
+. /lib/functions.sh
+. /lib/functions/system.sh
+
+case "$BOARD" in
+	archer-c7-v2|\
+	tl-wr841-v8|\
+	tl-wr842n-v2|\
+	tl-wr1043nd-v2|\
+	tl-wr1043nd-v3)
+		ROUTERMAC=$(cat /sys/class/net/eth1/address)
+		;;
+	cpe210-v2|\
+	cpe210-v3|\
+	tl-wa850re-v1|\
+	tl-wa860re-v1|\
+	tl-wa901nd-v2|\
+	tl-wdr3500-v1|\
+	tl-wr740n-v4|\
+	tl-wr740nd-v4|\
+	tl-wr741nd-v2|\
+	tl-wr741nd-v4|\
+	tl-wr841-v7|\
+	ubnt-bullet-m|\
+	ubnt-loco-m|\
+	ubnt-loco-m-xw|\
+	ubnt-nano-m|\
+	ubnt-pico-m|\
+	ubnt-power-m-xw|\
+	ubnt-unifi)
+		ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress)
+		;;
+	tl-wdr3600-v1|\
+	tl-wdr4300-v1|\
+	tl-wdr4310-v1)
+		ROUTERMAC=$(cat /sys/class/ieee80211/phy1/macaddress)
+		;;
+	ubnt-unifiac-lite|\
+	ubnt-unifiac-mesh)
+		ROUTERMAC=$(mtd_get_mac_binary EEPROM 0x0)
+		;;
+	*)
+		ROUTERMAC=$(cat /sys/class/net/eth0/address)
+		;;
+esac
+
+uci set "network.mesh.macaddr=$ROUTERMAC"
+uci commit network
diff --git a/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
new file mode 100644
index 00000000..86c840c3
--- /dev/null
+++ b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
@@ -0,0 +1,75 @@ 
+#!/bin/sh
+# Copyright 2019 Adrian Schmutzler
+# License GPLv3
+
+BOARD="$(uci get board.model.name)"
+
+. /lib/functions/fff/network
+. /lib/functions/fff/networksetup
+
+. /lib/functions.sh
+. /lib/functions/system.sh
+
+# macFlipLocalBit:
+# use mac address from phyX with 'locally administered' bit set to '1'
+# only possible, because wXmesh is created first and therefore gets the 'universally administered address'
+
+case "$BOARD" in
+	archer-c7-v2|\
+	tl-wr841-v8|\
+	tl-wr842n-v2)
+		ETHMESHMAC=$(cat /sys/class/net/eth0/address)
+		;;
+	archer-c25-v1|\
+	archer-c60-v1|\
+	tl-wr740n-v4|\
+	tl-wr740nd-v4|\
+	tl-wr741nd-v2|\
+	tl-wr741nd-v4|\
+	tl-wr841-v7|\
+	tl-wr841-v9|\
+	tl-wr841-v10|\
+	tl-wr841-v11|\
+	tl-wr841-v12)
+		ETHMESHMAC=$(cat /sys/class/net/eth1/address)
+		;;
+	cpe210|\
+	cpe210-v2|\
+	cpe210-v3|\
+	cpe510|\
+	tl-wa850re-v1|\
+	tl-wa860re-v1|\
+	tl-wa901nd-v2|\
+	tl-wr1043nd-v1|\
+	ubnt-bullet-m|\
+	ubnt-loco-m|\
+	ubnt-loco-m-xw|\
+	ubnt-nano-m|\
+	ubnt-pico-m|\
+	ubnt-power-m-xw|\
+	ubnt-unifi)
+		ETHMESHMAC=$(macFlipLocalBit "$(cat /sys/class/ieee80211/phy0/macaddress)")
+		;;
+	gl-ar150|\
+	tl-mr3020-v1)
+		ETHMESHMAC=$(macFlipLocalBit "$(cat /sys/class/net/eth0/address)")
+		;;
+	tl-wdr4900-v1)
+		ETHMESHMAC=$(macFlipLocalBit "$(cat /sys/class/ieee80211/phy1/macaddress)")
+		;;
+	tl-wr1043nd-v4)
+		ETHMESHMAC=$(mtd_get_mac_binary config 0x1017c)
+		;;
+	tl-wr1043n-v5)
+		ETHMESHMAC=$(macaddr_add $(mtd_get_mac_binary product-info 8) 1)
+		;;
+	ubnt-unifiac-lite|\
+	ubnt-unifiac-mesh)
+		ETHMESHMAC=$(macFlipLocalBit "$(mtd_get_mac_binary EEPROM 0x0)")
+		;;
+esac
+
+if [ -n "$ETHMESHMAC" ]; then
+	uci set "network.ethmesh.macaddr=$ETHMESHMAC"
+	uci commit network
+fi
diff --git a/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
new file mode 100644
index 00000000..db500c15
--- /dev/null
+++ b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
@@ -0,0 +1,31 @@ 
+#!/bin/sh
+# Copyright 2019 Adrian Schmutzler
+# License GPLv3
+
+. /lib/functions/fff/network
+
+echo "Setting IPv6 addresses"
+# Some time needed :(
+sleep 5
+
+ROUTERMAC=$(uci get network.mesh.macaddr)
+prefix="fdff:0::/64"
+
+# Set $prefix as prefix
+uci set network.globals=globals
+uci set "network.globals.ula_prefix=$prefix"
+
+# Set $prefix::MAC as IP
+addr="$(ipMacAssemble "$prefix" "$ROUTERMAC")"
+uci add_list "network.mesh.ip6addr=$addr"
+uci set network.mesh.proto=static
+
+# Set $prefix::1 as IP
+addr="$(ipAssemble "$prefix" "1")"
+uci add_list "network.mesh.ip6addr=$addr"
+
+# Set $prefix::link-local as IP
+addr="$(ipEUIAssemble "$prefix" "$ROUTERMAC")"
+uci add_list "network.mesh.ip6addr=$addr"
+
+uci commit network
diff --git a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
new file mode 100644
index 00000000..ccc943df
--- /dev/null
+++ b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
@@ -0,0 +1,163 @@ 
+# Copyright 2019 Adrian Schmutzler
+# License GPLv3
+
+. /lib/functions/network.sh
+
+setAutoConf() {
+	# Sets ipv6 auto configuration on an interface to on/off
+	# Usage: setAutoConf <interface> <[0|1]>
+	local iface=$1
+	local on=$2
+
+	sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf"
+	echo "# Generated from configurenetwork" > "$sysctlfile"
+	echo "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile"
+	echo "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >> "$sysctlfile"
+	echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >> "$sysctlfile"
+	echo "net.ipv6.conf.$iface.autoconf = $on" >> "$sysctlfile"
+	echo "net.ipv6.conf.$iface.accept_ra_rtr_pref = $on" >> "$sysctlfile"
+	echo "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile"
+
+	/sbin/sysctl -p "$sysctlfile"
+}
+
+enableAutoConf() {
+	# Enables ipv6 auto configuration on an interface
+	# Usage: enableAutoConf <interface>
+	local iface=$1
+
+	setAutoConf "$iface" "1"
+}
+
+disableAutoConf() {
+	# Disables ipv6 auto configuration on an interface
+	# Usage: disableAutoConf <interface>
+	local iface=$1
+
+	setAutoConf "$iface" "0"
+}
+
+fixMac() {
+	# Update MAC address on live device/interface
+	#
+	# fixMac <newmac> <interface>
+	#
+	# newmac: MAC address to be set
+	# interface: Interface to be updated as in uci (e.g. mesh)
+
+	local newmac=$1
+	local iface=$2
+	local dev
+
+	echo "Fixing MAC on $iface"
+	sleep 10
+
+	network_get_physdev dev "$iface"
+
+	uci set "network.${iface}.macaddr=$newmac"
+	uci commit network
+
+	if [ -n "$dev" ]; then
+		ip link set "$dev" down
+		ip link set "$dev" address "$newmac"
+		ip link set "$dev" up
+	fi
+
+	/etc/init.d/network restart
+}
+
+setupSwitch() {
+	# Set up switch for switch-based devices
+	# This is intended for initial setup, not for updates
+	# (changing ports will be sufficient then)
+	#
+	# Usage: setupSwitch <SWITCHDEV, e.g. eth0> <CLIENT_PORTS> <BATMAN_PORTS> [<WAN_PORTS>]
+
+	local SWITCHDEV=$1
+	local CLIENT_PORTS=$2
+	local BATMAN_PORTS=$3
+	local WAN_PORTS=$4
+	local SWITCHHW
+
+	SWITCHHW="$(swconfig list | awk '{ print $4 }')"
+
+	uci set "network.switch=switch"
+	uci set "network.switch.name=$SWITCHHW"
+	uci set "network.switch.enable=1"
+	uci set "network.switch.reset=1"
+	uci set "network.switch.enable_vlan=1"
+
+	uci set "network.vlan1=switch_vlan"
+	uci set "network.vlan1.device=$SWITCHHW"
+	uci set "network.vlan1.vlan=1"
+	uci set "network.vlan1.ports=$CLIENT_PORTS"
+
+	# This defines the VLAN for WAN ports inside the switch.
+	# This is required even if the WAN eth is separate, but the WAN port is in the switch!
+	if [ -n "$WAN_PORTS" ]; then
+		uci set "network.vlan2=switch_vlan"
+		uci set "network.vlan2.device=$SWITCHHW"
+		uci set "network.vlan2.vlan=2"
+		uci set "network.vlan2.ports=$WAN_PORTS"
+	fi
+
+	uci set "network.vlan3=switch_vlan"
+	uci set "network.vlan3.device=$SWITCHHW"
+	uci set "network.vlan3.vlan=3"
+	uci set "network.vlan3.ports=$BATMAN_PORTS"
+
+	uci set network.mesh.ifname="$SWITCHDEV.1 bat0"
+	uci set network.ethmesh.ifname="$SWITCHDEV.3"
+
+	uci commit network
+}
+
+setupWan() {
+	# Set up WAN for any device with dedicated port (no one-port where mode is changed)
+	# This is intended for initial setup, not for updates
+	# (updates are only possible by changing ports in a switch)
+	#
+	# Usage: setupWan <WANDEV, e.g. eth0, eth0.2>
+
+	local WANDEV=$1
+
+	# This defines the WAN interface. We use the VLAN ID only if we do NOT have a separate eth.
+	# This is different from the criterion for the WAN port dealt with above!
+	# If the WANDEV is different from the SWITCHDEV, but the WAN port is in the switch,
+	# the WAN eth has to be connected to the switch untagged!
+	enableAutoConf "$WANDEV"
+	uci set network.wan.ifname="$WANDEV"
+
+	uci commit network
+}
+
+setupOnePort() {
+	# Set up port mode for one-port devices
+	# This is intended for initial setup and for updates
+	# (latter will require network restart)
+	#
+	# Usage: setupOnePort <DEV, e.g. eth0> <ETHMODE, e.g. BATMAN, CLIENT, WAN>
+
+	local DEV=$1
+	local ETHMODE=$2
+
+	uci set "network.$DEV=interface"
+	uci set "network.$DEV.ifname=$DEV"
+	if [ "$ETHMODE" = "WAN" ]; then
+		enableAutoConf "$DEV"
+		uci set network.mesh.ifname="bat0"
+		uci set network.wan.ifname="$DEV"
+		uci del network.ethmesh.ifname
+	elif [ "$ETHMODE" = "CLIENT" ] ; then
+		disableAutoConf "$DEV"
+		uci set network.mesh.ifname="bat0 $DEV"
+		uci del network.wan.ifname
+		uci del network.ethmesh.ifname
+	else # default=BATMAN
+		disableAutoConf "$DEV"
+		uci set network.mesh.ifname="bat0"
+		uci del network.wan.ifname
+		uci set network.ethmesh.ifname="$DEV"
+	fi
+	uci commit network
+}
diff --git a/src/packages/fff/fff-network/files/lib/functions/fff/portorder b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
new file mode 100644
index 00000000..377c302f
--- /dev/null
+++ b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
@@ -0,0 +1,31 @@ 
+# Copyright 2019 Adrian Schmutzler
+# License GPLv3
+
+BOARD="$(uci get board.model.name)"
+
+case "$BOARD" in
+	archer-c25-v1|\
+	archer-c60-v1|\
+	tl-wr841-v10|\
+	tl-wr841-v11|\
+	tl-wr841-v12)
+		PORTORDER="4 3 2 1"
+		;;
+	cpe210|\
+	cpe510)
+		PORTORDER="5 4"
+		;;
+	gl-ar150)
+		PORTORDER="1"
+		;;
+	tl-wdr4300-v1)
+		PORTORDER="1 2 3 4 5"
+		;;
+	tl-wr841-v8)
+		PORTORDER="2 3 4 1"
+		;;
+	tl-wr1043nd-v4|\
+	tl-wr1043n-v5)
+		PORTORDER="5 4 3 2 1"
+		;;
+esac
diff --git a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
deleted file mode 100755
index 448bd04b..00000000
--- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
+++ /dev/null
@@ -1,263 +0,0 @@ 
-#!/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
-
-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
-}
-
-setAutoConf() {
-    # Sets ipv6 auto configuration on an interface to on/off
-    # Usage: setAutoConf <interface> <[0|1]>
-    local iface=$1
-    local on=$2
-
-    sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf"
-    echo "# Generated from configurenetwork" > "$sysctlfile"
-    echo "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile"
-    echo "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >> "$sysctlfile"
-    echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >> "$sysctlfile"
-    echo "net.ipv6.conf.$iface.autoconf = $on" >> "$sysctlfile"
-    echo "net.ipv6.conf.$iface.accept_ra_rtr_pref = $on" >> "$sysctlfile"
-    echo "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile"
-
-    /sbin/sysctl -p "$sysctlfile"
-}
-
-enableAutoConf() {
-    # Enables ipv6 auto configuration on an interface
-    # Usage: enableAutoConf <interface>
-    local iface=$1
-
-    setAutoConf "$iface" "1"
-}
-
-disableAutoConf() {
-    # Disables ipv6 auto configuration on an interface
-    # Usage: disableAutoConf <interface>
-    local iface=$1
-
-    setAutoConf "$iface" "0"
-}
-
-BOARD="$(uci get board.model.name)"
-. /etc/network.$BOARD
-
-if [ -s /etc/network.config ] ; then
-    . /etc/network.config
-else
-    # Write network.config
-    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
-    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 ! 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"
-
-    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"
-
-        enableAutoConf "$WANDEV.2"
-    else
-        enableAutoConf "$WANDEV"
-    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
-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
-        enableAutoConf "$WANDEV"
-        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
-        disableAutoConf "$WANDEV"
-        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
-        disableAutoConf "$WANDEV"
-        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
-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 network
-
-        ifconfig $SWITCHDEV.3 down
-        ifconfig $SWITCHDEV.3 hw ether $ETHMESHMAC
-        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 network
-
-        ifconfig br-mesh down
-        ifconfig br-mesh hw ether $ROUTERMAC
-        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 network
-        ifconfig eth0 down
-        ifconfig eth0 hw ether $NEW_MACADDR
-        ifconfig eth0 up
-        /etc/init.d/network restart
-fi
-
-if uci -q get "network.mesh.ip6addr" > /dev/null
-then
-    echo "IPv6 for mesh is set already"
-else
-    echo "Setting IPv6 addresses"
-    # 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" "$ROUTERMAC")"
-    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" "$ROUTERMAC")"
-    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
diff --git a/src/packages/fff/fff-sysupgrade/Makefile b/src/packages/fff/fff-sysupgrade/Makefile
index 90ef66af..0e6c08ec 100644
--- a/src/packages/fff/fff-sysupgrade/Makefile
+++ b/src/packages/fff/fff-sysupgrade/Makefile
@@ -1,8 +1,7 @@ 
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=fff-sysupgrade
-PKG_VERSION:=9
-PKG_RELEASE:=1
+PKG_RELEASE:=10
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
 
diff --git a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
index 7ff83f54..f5783687 100644
--- a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
+++ b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
@@ -7,7 +7,6 @@  cat > /etc/sysupgrade.conf <<-__EOF__
 /etc/dropbear/dropbear_dss_host_key
 /etc/dropbear/dropbear_rsa_host_key
 /etc/dropbear/authorized_keys
-/etc/network.config
 /etc/config/fff
 /etc/hoodfile
 __EOF__

Comments

Christian Dresel April 22, 2019, 3:33 p.m.
hi

noch eine Frage zum Verständnis:

Wenn in 22a-config-ports ein Device fehlt, dann bekommt man ein ziemlich
kaputtes Gerät raus oder?

Es wird dann nichts aufgerufen und am Ende sollte diese File dann als
Network File dienen:

https://github.com/FreifunkFranken/firmware/blob/master/src/packages/fff/fff-network/files/etc/config/network

damit geht dann vermutlich gar nix mehr an den Ethernets. Das macht neue
Geräte einbinden ein bisschen umständlich, wenn man sich da einmal im
Device Namen vertut, hat man sich wunderbar rausgesperrt und kommt nur
seriell drauf um zu gucken was los ist oder?

Seh ich das soweit richtig? Wenn ja muss ich nochmal drüber schlafen ob
mir das gefällt ;) In der Annahme das es eth0 immer gibt, macht es dann
vllt. Sinn ein setupOnePort für den Rest auf eth0 zu werfen? Somit kommt
man zumindest am Ende irgendwie wieder an die Geräte ran.

Gruß

Christian

On 22.04.19 14:35, Adrian Schmutzler wrote:
> This removes the configurenetwork script and replaces it by some
> scripts run only during first boot.
>
> This introduces several changes:
> - The different tasks dealt with in configurenetwork are split.
>   Thus, one script deals with switch/port setup, one with br-mesh
>   MAC address, one with ETHMESHMAC, and one with IP addresses.
>   This makes the whole approach more modular, compared to the
>   monolithic configurenetwork.
> - Where configurenetwork contained sophisticated, nested conditions
>   to account for all possible combinations of variables, the new
>   approach is inspired by OpenWrt's board.d subfiles. Instead of
>   defining variables, we now directly call function in a
>   select-case. This is much more flexible, as we can just put code
>   there for a special case instead of bending configurenetwork for
>   it.
> - The select-case accounts for the various cases of similar/same
>   parameters of multiple devices, which can be grouped now.
> - Scripts are run only at first boot. Later changes have to be
>   done manually (we will provide some scripts later). Those will
>   typically be limited to changing only the ports; no need to run
>   whole network config again.
> - network.mode and network.config will disappear. For switch-based
>   devices, there is no advantage of using network.config compared
>   directly editing /etc/config/network. Upgrade-safety can be
>   established by putting uci commands in an upgrade-safe script
>   file (to be provided in a later patch).
>
> After this patch, show_info and the ports display in WebUI are
> broken. Those will be fixed in a later patch.
>
> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
>
> ---
>
> Changed in v2:
> - Fixed archer-c60-v2 to v1
> - Added network functions file in uci-defaults/22c
> - Removed some -q from uci
> - Removed all commands only needed for running devices (this is
>   uci only)
> - Added descriptions for functions in networksetup
>
> Changed in v3:
> - Changed order of 22a and 22b
> - uci del instead uci set for WAN on one-port
> - switch/vlanX instead of eth#/eth#.# for switch-based devices
> ---
>  bsp/default/root_file_system/etc/rc.local          |   4 -
>  src/packages/fff/fff-network/Makefile              |   4 +-
>  .../files/etc/uci-defaults/22a-config-ports        |  89 +++++++
>  .../files/etc/uci-defaults/22b-config-routermac    |  55 +++++
>  .../files/etc/uci-defaults/22c-config-ethmesh      |  75 ++++++
>  .../files/etc/uci-defaults/23-config-ipaddr        |  31 +++
>  .../files/lib/functions/fff/networksetup           | 163 +++++++++++++
>  .../fff-network/files/lib/functions/fff/portorder  |  31 +++
>  .../fff-network/files/usr/sbin/configurenetwork    | 263 ---------------------
>  src/packages/fff/fff-sysupgrade/Makefile           |   3 +-
>  .../files/etc/uci-defaults/99-fff-sysupgrade       |   1 -
>  11 files changed, 446 insertions(+), 273 deletions(-)
>  create mode 100644 src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>  create mode 100644 src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>  create mode 100644 src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>  create mode 100644 src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>  create mode 100644 src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>  create mode 100644 src/packages/fff/fff-network/files/lib/functions/fff/portorder
>  delete mode 100755 src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>
> diff --git a/bsp/default/root_file_system/etc/rc.local b/bsp/default/root_file_system/etc/rc.local
> index 59042c37..e02368a5 100755
> --- a/bsp/default/root_file_system/etc/rc.local
> +++ b/bsp/default/root_file_system/etc/rc.local
> @@ -2,10 +2,6 @@
>  # Put your custom commands here that should be executed once
>  # the system init finished. By default this file does nothing.
>  
> -/usr/sbin/configurenetwork
> -
> -sleep 3
> -
>  /usr/sbin/configurehood
>  
>  touch /tmp/started
> diff --git a/src/packages/fff/fff-network/Makefile b/src/packages/fff/fff-network/Makefile
> index e9335884..11796797 100644
> --- a/src/packages/fff/fff-network/Makefile
> +++ b/src/packages/fff/fff-network/Makefile
> @@ -1,8 +1,7 @@
>  include $(TOPDIR)/rules.mk
>  
>  PKG_NAME:=fff-network
> -PKG_VERSION:=10
> -PKG_RELEASE:=1
> +PKG_RELEASE:=11
>  
>  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
>  
> @@ -34,7 +33,6 @@ endef
>  
>  define Package/$(PKG_NAME)/install
>  	$(CP) ./files/* $(1)/
> -	test -d ./$(BOARD) && $(CP) ./$(BOARD)/* $(1)/etc/
>  endef
>  
>  $(eval $(call BuildPackage,$(PKG_NAME)))
> diff --git a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
> new file mode 100644
> index 00000000..b8eaceab
> --- /dev/null
> +++ b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
> @@ -0,0 +1,89 @@
> +#!/bin/sh
> +# Copyright 2019 Adrian Schmutzler
> +# License GPLv3
> +
> +BOARD="$(uci get board.model.name)"
> +
> +. /lib/functions/fff/networksetup
> +
> +case "$BOARD" in
> +	archer-c7-v2)
> +		setupSwitch "eth1" "4 5 0t" "2 3 0t" "1 6"
> +		setupWan "eth0"
> +		;;
> +	archer-c25-v1|\
> +	archer-c60-v1)
> +		setupSwitch "eth1" "1 2 0t" "3 4 0t"
> +		setupWan "eth0"
> +		;;
> +	cpe210|\
> +	cpe510)
> +		# Default: LAN0: WAN, LAN1: CLIENT
> +		setupSwitch "eth0" "0t 4" "0t" "0t 5"
> +		setupWan "eth0.2"
> +		;;
> +	gl-ar150)
> +		# Default: CLIENT
> +		setupSwitch "eth1" "0t 1" "0t"
> +		setupWan "eth0"
> +		;;
> +	tl-wdr3500-v1|\
> +	tl-wr741nd-v2|\
> +	tl-wr841-v7|\
> +	tl-wr841-v9|\
> +	tl-wr841-v10|\
> +	tl-wr841-v11|\
> +	tl-wr841-v12)
> +		setupSwitch "eth0" "1 2 0t" "3 4 0t"
> +		setupWan "eth1"
> +		;;
> +	tl-wdr3600-v1|\
> +	tl-wdr4300-v1|\
> +	tl-wdr4310-v1|\
> +	tl-wdr4900-v1)
> +		setupSwitch "eth0" "4 5 0t" "2 3 0t" "1 0t"
> +		setupWan "eth0.2"
> +		;;
> +	tl-wr841-v8|\
> +	tl-wr842n-v2)
> +		setupSwitch "eth1" "1 4 0t" "2 3 0t"
> +		setupWan "eth0"
> +		;;
> +	tl-wr740n-v4|\
> +	tl-wr740nd-v4|\
> +	tl-wr741nd-v4)
> +		setupSwitch "eth0" "1 4 0t" "2 3 0t"
> +		setupWan "eth1"
> +		;;
> +	tl-wr1043nd-v1)
> +		setupSwitch "eth0" "3 4 5t" "1 2 5t" "0 5t"
> +		setupWan "eth0.2"
> +		;;
> +	tl-wr1043nd-v2|\
> +	tl-wr1043nd-v3)
> +		setupSwitch "eth0" "1 2 6t" "3 4 6t" "5 6t"
> +		setupWan "eth0.2"
> +		;;
> +	tl-wr1043nd-v4|\
> +	tl-wr1043n-v5)
> +		setupSwitch "eth0" "1 2 0t" "3 4 0t" "5 0t"
> +		setupWan "eth0.2"
> +		;;
> +	cpe210-v2|\
> +	cpe210-v3|\
> +	tl-mr3020-v1|\
> +	tl-wa850re-v1|\
> +	tl-wa860re-v1|\
> +	tl-wa901nd-v2|\
> +	ubnt-bullet-m|\
> +	ubnt-loco-m|\
> +	ubnt-loco-m-xw|\
> +	ubnt-nano-m|\
> +	ubnt-pico-m|\
> +	ubnt-power-m-xw|\
> +	ubnt-unifi|\
> +	ubnt-unifiac-lite|\
> +	ubnt-unifiac-mesh)
> +		setupOnePort "eth0" "CLIENT"
> +		;;
> +esac
> diff --git a/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
> new file mode 100644
> index 00000000..d1a5e50c
> --- /dev/null
> +++ b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
> @@ -0,0 +1,55 @@
> +#!/bin/sh
> +# Copyright 2019 Adrian Schmutzler
> +# License GPLv3
> +
> +BOARD="$(uci get board.model.name)"
> +
> +. /lib/functions/fff/networksetup
> +
> +. /lib/functions.sh
> +. /lib/functions/system.sh
> +
> +case "$BOARD" in
> +	archer-c7-v2|\
> +	tl-wr841-v8|\
> +	tl-wr842n-v2|\
> +	tl-wr1043nd-v2|\
> +	tl-wr1043nd-v3)
> +		ROUTERMAC=$(cat /sys/class/net/eth1/address)
> +		;;
> +	cpe210-v2|\
> +	cpe210-v3|\
> +	tl-wa850re-v1|\
> +	tl-wa860re-v1|\
> +	tl-wa901nd-v2|\
> +	tl-wdr3500-v1|\
> +	tl-wr740n-v4|\
> +	tl-wr740nd-v4|\
> +	tl-wr741nd-v2|\
> +	tl-wr741nd-v4|\
> +	tl-wr841-v7|\
> +	ubnt-bullet-m|\
> +	ubnt-loco-m|\
> +	ubnt-loco-m-xw|\
> +	ubnt-nano-m|\
> +	ubnt-pico-m|\
> +	ubnt-power-m-xw|\
> +	ubnt-unifi)
> +		ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress)
> +		;;
> +	tl-wdr3600-v1|\
> +	tl-wdr4300-v1|\
> +	tl-wdr4310-v1)
> +		ROUTERMAC=$(cat /sys/class/ieee80211/phy1/macaddress)
> +		;;
> +	ubnt-unifiac-lite|\
> +	ubnt-unifiac-mesh)
> +		ROUTERMAC=$(mtd_get_mac_binary EEPROM 0x0)
> +		;;
> +	*)
> +		ROUTERMAC=$(cat /sys/class/net/eth0/address)
> +		;;
> +esac
> +
> +uci set "network.mesh.macaddr=$ROUTERMAC"
> +uci commit network
> diff --git a/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
> new file mode 100644
> index 00000000..86c840c3
> --- /dev/null
> +++ b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
> @@ -0,0 +1,75 @@
> +#!/bin/sh
> +# Copyright 2019 Adrian Schmutzler
> +# License GPLv3
> +
> +BOARD="$(uci get board.model.name)"
> +
> +. /lib/functions/fff/network
> +. /lib/functions/fff/networksetup
> +
> +. /lib/functions.sh
> +. /lib/functions/system.sh
> +
> +# macFlipLocalBit:
> +# use mac address from phyX with 'locally administered' bit set to '1'
> +# only possible, because wXmesh is created first and therefore gets the 'universally administered address'
> +
> +case "$BOARD" in
> +	archer-c7-v2|\
> +	tl-wr841-v8|\
> +	tl-wr842n-v2)
> +		ETHMESHMAC=$(cat /sys/class/net/eth0/address)
> +		;;
> +	archer-c25-v1|\
> +	archer-c60-v1|\
> +	tl-wr740n-v4|\
> +	tl-wr740nd-v4|\
> +	tl-wr741nd-v2|\
> +	tl-wr741nd-v4|\
> +	tl-wr841-v7|\
> +	tl-wr841-v9|\
> +	tl-wr841-v10|\
> +	tl-wr841-v11|\
> +	tl-wr841-v12)
> +		ETHMESHMAC=$(cat /sys/class/net/eth1/address)
> +		;;
> +	cpe210|\
> +	cpe210-v2|\
> +	cpe210-v3|\
> +	cpe510|\
> +	tl-wa850re-v1|\
> +	tl-wa860re-v1|\
> +	tl-wa901nd-v2|\
> +	tl-wr1043nd-v1|\
> +	ubnt-bullet-m|\
> +	ubnt-loco-m|\
> +	ubnt-loco-m-xw|\
> +	ubnt-nano-m|\
> +	ubnt-pico-m|\
> +	ubnt-power-m-xw|\
> +	ubnt-unifi)
> +		ETHMESHMAC=$(macFlipLocalBit "$(cat /sys/class/ieee80211/phy0/macaddress)")
> +		;;
> +	gl-ar150|\
> +	tl-mr3020-v1)
> +		ETHMESHMAC=$(macFlipLocalBit "$(cat /sys/class/net/eth0/address)")
> +		;;
> +	tl-wdr4900-v1)
> +		ETHMESHMAC=$(macFlipLocalBit "$(cat /sys/class/ieee80211/phy1/macaddress)")
> +		;;
> +	tl-wr1043nd-v4)
> +		ETHMESHMAC=$(mtd_get_mac_binary config 0x1017c)
> +		;;
> +	tl-wr1043n-v5)
> +		ETHMESHMAC=$(macaddr_add $(mtd_get_mac_binary product-info 8) 1)
> +		;;
> +	ubnt-unifiac-lite|\
> +	ubnt-unifiac-mesh)
> +		ETHMESHMAC=$(macFlipLocalBit "$(mtd_get_mac_binary EEPROM 0x0)")
> +		;;
> +esac
> +
> +if [ -n "$ETHMESHMAC" ]; then
> +	uci set "network.ethmesh.macaddr=$ETHMESHMAC"
> +	uci commit network
> +fi
> diff --git a/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
> new file mode 100644
> index 00000000..db500c15
> --- /dev/null
> +++ b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
> @@ -0,0 +1,31 @@
> +#!/bin/sh
> +# Copyright 2019 Adrian Schmutzler
> +# License GPLv3
> +
> +. /lib/functions/fff/network
> +
> +echo "Setting IPv6 addresses"
> +# Some time needed :(
> +sleep 5
> +
> +ROUTERMAC=$(uci get network.mesh.macaddr)
> +prefix="fdff:0::/64"
> +
> +# Set $prefix as prefix
> +uci set network.globals=globals
> +uci set "network.globals.ula_prefix=$prefix"
> +
> +# Set $prefix::MAC as IP
> +addr="$(ipMacAssemble "$prefix" "$ROUTERMAC")"
> +uci add_list "network.mesh.ip6addr=$addr"
> +uci set network.mesh.proto=static
> +
> +# Set $prefix::1 as IP
> +addr="$(ipAssemble "$prefix" "1")"
> +uci add_list "network.mesh.ip6addr=$addr"
> +
> +# Set $prefix::link-local as IP
> +addr="$(ipEUIAssemble "$prefix" "$ROUTERMAC")"
> +uci add_list "network.mesh.ip6addr=$addr"
> +
> +uci commit network
> diff --git a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> new file mode 100644
> index 00000000..ccc943df
> --- /dev/null
> +++ b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> @@ -0,0 +1,163 @@
> +# Copyright 2019 Adrian Schmutzler
> +# License GPLv3
> +
> +. /lib/functions/network.sh
> +
> +setAutoConf() {
> +	# Sets ipv6 auto configuration on an interface to on/off
> +	# Usage: setAutoConf <interface> <[0|1]>
> +	local iface=$1
> +	local on=$2
> +
> +	sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf"
> +	echo "# Generated from configurenetwork" > "$sysctlfile"
> +	echo "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile"
> +	echo "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >> "$sysctlfile"
> +	echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >> "$sysctlfile"
> +	echo "net.ipv6.conf.$iface.autoconf = $on" >> "$sysctlfile"
> +	echo "net.ipv6.conf.$iface.accept_ra_rtr_pref = $on" >> "$sysctlfile"
> +	echo "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile"
> +
> +	/sbin/sysctl -p "$sysctlfile"
> +}
> +
> +enableAutoConf() {
> +	# Enables ipv6 auto configuration on an interface
> +	# Usage: enableAutoConf <interface>
> +	local iface=$1
> +
> +	setAutoConf "$iface" "1"
> +}
> +
> +disableAutoConf() {
> +	# Disables ipv6 auto configuration on an interface
> +	# Usage: disableAutoConf <interface>
> +	local iface=$1
> +
> +	setAutoConf "$iface" "0"
> +}
> +
> +fixMac() {
> +	# Update MAC address on live device/interface
> +	#
> +	# fixMac <newmac> <interface>
> +	#
> +	# newmac: MAC address to be set
> +	# interface: Interface to be updated as in uci (e.g. mesh)
> +
> +	local newmac=$1
> +	local iface=$2
> +	local dev
> +
> +	echo "Fixing MAC on $iface"
> +	sleep 10
> +
> +	network_get_physdev dev "$iface"
> +
> +	uci set "network.${iface}.macaddr=$newmac"
> +	uci commit network
> +
> +	if [ -n "$dev" ]; then
> +		ip link set "$dev" down
> +		ip link set "$dev" address "$newmac"
> +		ip link set "$dev" up
> +	fi
> +
> +	/etc/init.d/network restart
> +}
> +
> +setupSwitch() {
> +	# Set up switch for switch-based devices
> +	# This is intended for initial setup, not for updates
> +	# (changing ports will be sufficient then)
> +	#
> +	# Usage: setupSwitch <SWITCHDEV, e.g. eth0> <CLIENT_PORTS> <BATMAN_PORTS> [<WAN_PORTS>]
> +
> +	local SWITCHDEV=$1
> +	local CLIENT_PORTS=$2
> +	local BATMAN_PORTS=$3
> +	local WAN_PORTS=$4
> +	local SWITCHHW
> +
> +	SWITCHHW="$(swconfig list | awk '{ print $4 }')"
> +
> +	uci set "network.switch=switch"
> +	uci set "network.switch.name=$SWITCHHW"
> +	uci set "network.switch.enable=1"
> +	uci set "network.switch.reset=1"
> +	uci set "network.switch.enable_vlan=1"
> +
> +	uci set "network.vlan1=switch_vlan"
> +	uci set "network.vlan1.device=$SWITCHHW"
> +	uci set "network.vlan1.vlan=1"
> +	uci set "network.vlan1.ports=$CLIENT_PORTS"
> +
> +	# This defines the VLAN for WAN ports inside the switch.
> +	# This is required even if the WAN eth is separate, but the WAN port is in the switch!
> +	if [ -n "$WAN_PORTS" ]; then
> +		uci set "network.vlan2=switch_vlan"
> +		uci set "network.vlan2.device=$SWITCHHW"
> +		uci set "network.vlan2.vlan=2"
> +		uci set "network.vlan2.ports=$WAN_PORTS"
> +	fi
> +
> +	uci set "network.vlan3=switch_vlan"
> +	uci set "network.vlan3.device=$SWITCHHW"
> +	uci set "network.vlan3.vlan=3"
> +	uci set "network.vlan3.ports=$BATMAN_PORTS"
> +
> +	uci set network.mesh.ifname="$SWITCHDEV.1 bat0"
> +	uci set network.ethmesh.ifname="$SWITCHDEV.3"
> +
> +	uci commit network
> +}
> +
> +setupWan() {
> +	# Set up WAN for any device with dedicated port (no one-port where mode is changed)
> +	# This is intended for initial setup, not for updates
> +	# (updates are only possible by changing ports in a switch)
> +	#
> +	# Usage: setupWan <WANDEV, e.g. eth0, eth0.2>
> +
> +	local WANDEV=$1
> +
> +	# This defines the WAN interface. We use the VLAN ID only if we do NOT have a separate eth.
> +	# This is different from the criterion for the WAN port dealt with above!
> +	# If the WANDEV is different from the SWITCHDEV, but the WAN port is in the switch,
> +	# the WAN eth has to be connected to the switch untagged!
> +	enableAutoConf "$WANDEV"
> +	uci set network.wan.ifname="$WANDEV"
> +
> +	uci commit network
> +}
> +
> +setupOnePort() {
> +	# Set up port mode for one-port devices
> +	# This is intended for initial setup and for updates
> +	# (latter will require network restart)
> +	#
> +	# Usage: setupOnePort <DEV, e.g. eth0> <ETHMODE, e.g. BATMAN, CLIENT, WAN>
> +
> +	local DEV=$1
> +	local ETHMODE=$2
> +
> +	uci set "network.$DEV=interface"
> +	uci set "network.$DEV.ifname=$DEV"
> +	if [ "$ETHMODE" = "WAN" ]; then
> +		enableAutoConf "$DEV"
> +		uci set network.mesh.ifname="bat0"
> +		uci set network.wan.ifname="$DEV"
> +		uci del network.ethmesh.ifname
> +	elif [ "$ETHMODE" = "CLIENT" ] ; then
> +		disableAutoConf "$DEV"
> +		uci set network.mesh.ifname="bat0 $DEV"
> +		uci del network.wan.ifname
> +		uci del network.ethmesh.ifname
> +	else # default=BATMAN
> +		disableAutoConf "$DEV"
> +		uci set network.mesh.ifname="bat0"
> +		uci del network.wan.ifname
> +		uci set network.ethmesh.ifname="$DEV"
> +	fi
> +	uci commit network
> +}
> diff --git a/src/packages/fff/fff-network/files/lib/functions/fff/portorder b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
> new file mode 100644
> index 00000000..377c302f
> --- /dev/null
> +++ b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
> @@ -0,0 +1,31 @@
> +# Copyright 2019 Adrian Schmutzler
> +# License GPLv3
> +
> +BOARD="$(uci get board.model.name)"
> +
> +case "$BOARD" in
> +	archer-c25-v1|\
> +	archer-c60-v1|\
> +	tl-wr841-v10|\
> +	tl-wr841-v11|\
> +	tl-wr841-v12)
> +		PORTORDER="4 3 2 1"
> +		;;
> +	cpe210|\
> +	cpe510)
> +		PORTORDER="5 4"
> +		;;
> +	gl-ar150)
> +		PORTORDER="1"
> +		;;
> +	tl-wdr4300-v1)
> +		PORTORDER="1 2 3 4 5"
> +		;;
> +	tl-wr841-v8)
> +		PORTORDER="2 3 4 1"
> +		;;
> +	tl-wr1043nd-v4|\
> +	tl-wr1043n-v5)
> +		PORTORDER="5 4 3 2 1"
> +		;;
> +esac
> diff --git a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> deleted file mode 100755
> index 448bd04b..00000000
> --- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> +++ /dev/null
> @@ -1,263 +0,0 @@
> -#!/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
> -
> -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
> -}
> -
> -setAutoConf() {
> -    # Sets ipv6 auto configuration on an interface to on/off
> -    # Usage: setAutoConf <interface> <[0|1]>
> -    local iface=$1
> -    local on=$2
> -
> -    sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf"
> -    echo "# Generated from configurenetwork" > "$sysctlfile"
> -    echo "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile"
> -    echo "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >> "$sysctlfile"
> -    echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >> "$sysctlfile"
> -    echo "net.ipv6.conf.$iface.autoconf = $on" >> "$sysctlfile"
> -    echo "net.ipv6.conf.$iface.accept_ra_rtr_pref = $on" >> "$sysctlfile"
> -    echo "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile"
> -
> -    /sbin/sysctl -p "$sysctlfile"
> -}
> -
> -enableAutoConf() {
> -    # Enables ipv6 auto configuration on an interface
> -    # Usage: enableAutoConf <interface>
> -    local iface=$1
> -
> -    setAutoConf "$iface" "1"
> -}
> -
> -disableAutoConf() {
> -    # Disables ipv6 auto configuration on an interface
> -    # Usage: disableAutoConf <interface>
> -    local iface=$1
> -
> -    setAutoConf "$iface" "0"
> -}
> -
> -BOARD="$(uci get board.model.name)"
> -. /etc/network.$BOARD
> -
> -if [ -s /etc/network.config ] ; then
> -    . /etc/network.config
> -else
> -    # Write network.config
> -    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
> -    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 ! 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"
> -
> -    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"
> -
> -        enableAutoConf "$WANDEV.2"
> -    else
> -        enableAutoConf "$WANDEV"
> -    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
> -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
> -        enableAutoConf "$WANDEV"
> -        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
> -        disableAutoConf "$WANDEV"
> -        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
> -        disableAutoConf "$WANDEV"
> -        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
> -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 network
> -
> -        ifconfig $SWITCHDEV.3 down
> -        ifconfig $SWITCHDEV.3 hw ether $ETHMESHMAC
> -        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 network
> -
> -        ifconfig br-mesh down
> -        ifconfig br-mesh hw ether $ROUTERMAC
> -        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 network
> -        ifconfig eth0 down
> -        ifconfig eth0 hw ether $NEW_MACADDR
> -        ifconfig eth0 up
> -        /etc/init.d/network restart
> -fi
> -
> -if uci -q get "network.mesh.ip6addr" > /dev/null
> -then
> -    echo "IPv6 for mesh is set already"
> -else
> -    echo "Setting IPv6 addresses"
> -    # 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" "$ROUTERMAC")"
> -    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" "$ROUTERMAC")"
> -    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
> diff --git a/src/packages/fff/fff-sysupgrade/Makefile b/src/packages/fff/fff-sysupgrade/Makefile
> index 90ef66af..0e6c08ec 100644
> --- a/src/packages/fff/fff-sysupgrade/Makefile
> +++ b/src/packages/fff/fff-sysupgrade/Makefile
> @@ -1,8 +1,7 @@
>  include $(TOPDIR)/rules.mk
>  
>  PKG_NAME:=fff-sysupgrade
> -PKG_VERSION:=9
> -PKG_RELEASE:=1
> +PKG_RELEASE:=10
>  
>  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
>  
> diff --git a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> index 7ff83f54..f5783687 100644
> --- a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> +++ b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> @@ -7,7 +7,6 @@ cat > /etc/sysupgrade.conf <<-__EOF__
>  /etc/dropbear/dropbear_dss_host_key
>  /etc/dropbear/dropbear_rsa_host_key
>  /etc/dropbear/authorized_keys
> -/etc/network.config
>  /etc/config/fff
>  /etc/hoodfile
>  __EOF__
Adrian Schmutzler April 22, 2019, 3:44 p.m.
Hallo Christian,

im Prinzip ist es dann ähnlich kaputt wie früher, wenn man keine network.devicename hatte.

Man könnte aber durchaus überlegen, eine standardconfig per default case zu setzen, z. B. in diesem Fall einfach openwrt zu belassen. Odre wie vorgeschlagen der OnePort (hab das jetzt nicht durcdgedacht). 

Dieses Thema hatte ich aber hier auch gar nicht bedacht, sondern habe mich wie zuvor mit configurenetwork in der Logik bewegt, dass nur eingerichtete Devices gehen.
Ich bin auch der Meinung, dass wir einen solchen default case separat behandeln sollten und nicht hier noch reinmatschen.

Beste Grüße

Adrian

On 22 April 2019 17:33:27 CEST, Christian Dresel <fff@chrisi01.de> wrote:
>hi
>
>noch eine Frage zum Verständnis:
>
>Wenn in 22a-config-ports ein Device fehlt, dann bekommt man ein
>ziemlich
>kaputtes Gerät raus oder?
>
>Es wird dann nichts aufgerufen und am Ende sollte diese File dann als
>Network File dienen:
>
>https://github.com/FreifunkFranken/firmware/blob/master/src/packages/fff/fff-network/files/etc/config/network
>
>damit geht dann vermutlich gar nix mehr an den Ethernets. Das macht
>neue
>Geräte einbinden ein bisschen umständlich, wenn man sich da einmal im
>Device Namen vertut, hat man sich wunderbar rausgesperrt und kommt nur
>seriell drauf um zu gucken was los ist oder?
>
>Seh ich das soweit richtig? Wenn ja muss ich nochmal drüber schlafen ob
>mir das gefällt ;) In der Annahme das es eth0 immer gibt, macht es dann
>vllt. Sinn ein setupOnePort für den Rest auf eth0 zu werfen? Somit
>kommt
>man zumindest am Ende irgendwie wieder an die Geräte ran.
>
>Gruß
>
>Christian
>
>On 22.04.19 14:35, Adrian Schmutzler wrote:
>> This removes the configurenetwork script and replaces it by some
>> scripts run only during first boot.
>>
>> This introduces several changes:
>> - The different tasks dealt with in configurenetwork are split.
>>   Thus, one script deals with switch/port setup, one with br-mesh
>>   MAC address, one with ETHMESHMAC, and one with IP addresses.
>>   This makes the whole approach more modular, compared to the
>>   monolithic configurenetwork.
>> - Where configurenetwork contained sophisticated, nested conditions
>>   to account for all possible combinations of variables, the new
>>   approach is inspired by OpenWrt's board.d subfiles. Instead of
>>   defining variables, we now directly call function in a
>>   select-case. This is much more flexible, as we can just put code
>>   there for a special case instead of bending configurenetwork for
>>   it.
>> - The select-case accounts for the various cases of similar/same
>>   parameters of multiple devices, which can be grouped now.
>> - Scripts are run only at first boot. Later changes have to be
>>   done manually (we will provide some scripts later). Those will
>>   typically be limited to changing only the ports; no need to run
>>   whole network config again.
>> - network.mode and network.config will disappear. For switch-based
>>   devices, there is no advantage of using network.config compared
>>   directly editing /etc/config/network. Upgrade-safety can be
>>   established by putting uci commands in an upgrade-safe script
>>   file (to be provided in a later patch).
>>
>> After this patch, show_info and the ports display in WebUI are
>> broken. Those will be fixed in a later patch.
>>
>> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
>>
>> ---
>>
>> Changed in v2:
>> - Fixed archer-c60-v2 to v1
>> - Added network functions file in uci-defaults/22c
>> - Removed some -q from uci
>> - Removed all commands only needed for running devices (this is
>>   uci only)
>> - Added descriptions for functions in networksetup
>>
>> Changed in v3:
>> - Changed order of 22a and 22b
>> - uci del instead uci set for WAN on one-port
>> - switch/vlanX instead of eth#/eth#.# for switch-based devices
>> ---
>>  bsp/default/root_file_system/etc/rc.local          |   4 -
>>  src/packages/fff/fff-network/Makefile              |   4 +-
>>  .../files/etc/uci-defaults/22a-config-ports        |  89 +++++++
>>  .../files/etc/uci-defaults/22b-config-routermac    |  55 +++++
>>  .../files/etc/uci-defaults/22c-config-ethmesh      |  75 ++++++
>>  .../files/etc/uci-defaults/23-config-ipaddr        |  31 +++
>>  .../files/lib/functions/fff/networksetup           | 163
>+++++++++++++
>>  .../fff-network/files/lib/functions/fff/portorder  |  31 +++
>>  .../fff-network/files/usr/sbin/configurenetwork    | 263
>---------------------
>>  src/packages/fff/fff-sysupgrade/Makefile           |   3 +-
>>  .../files/etc/uci-defaults/99-fff-sysupgrade       |   1 -
>>  11 files changed, 446 insertions(+), 273 deletions(-)
>>  create mode 100644
>src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>>  create mode 100644
>src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>>  create mode 100644
>src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>>  create mode 100644
>src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>>  create mode 100644
>src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>  create mode 100644
>src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>  delete mode 100755
>src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>
>> diff --git a/bsp/default/root_file_system/etc/rc.local
>b/bsp/default/root_file_system/etc/rc.local
>> index 59042c37..e02368a5 100755
>> --- a/bsp/default/root_file_system/etc/rc.local
>> +++ b/bsp/default/root_file_system/etc/rc.local
>> @@ -2,10 +2,6 @@
>>  # Put your custom commands here that should be executed once
>>  # the system init finished. By default this file does nothing.
>>  
>> -/usr/sbin/configurenetwork
>> -
>> -sleep 3
>> -
>>  /usr/sbin/configurehood
>>  
>>  touch /tmp/started
>> diff --git a/src/packages/fff/fff-network/Makefile
>b/src/packages/fff/fff-network/Makefile
>> index e9335884..11796797 100644
>> --- a/src/packages/fff/fff-network/Makefile
>> +++ b/src/packages/fff/fff-network/Makefile
>> @@ -1,8 +1,7 @@
>>  include $(TOPDIR)/rules.mk
>>  
>>  PKG_NAME:=fff-network
>> -PKG_VERSION:=10
>> -PKG_RELEASE:=1
>> +PKG_RELEASE:=11
>>  
>>  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
>>  
>> @@ -34,7 +33,6 @@ endef
>>  
>>  define Package/$(PKG_NAME)/install
>>  	$(CP) ./files/* $(1)/
>> -	test -d ./$(BOARD) && $(CP) ./$(BOARD)/* $(1)/etc/
>>  endef
>>  
>>  $(eval $(call BuildPackage,$(PKG_NAME)))
>> diff --git
>a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>> new file mode 100644
>> index 00000000..b8eaceab
>> --- /dev/null
>> +++
>b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>> @@ -0,0 +1,89 @@
>> +#!/bin/sh
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +BOARD="$(uci get board.model.name)"
>> +
>> +. /lib/functions/fff/networksetup
>> +
>> +case "$BOARD" in
>> +	archer-c7-v2)
>> +		setupSwitch "eth1" "4 5 0t" "2 3 0t" "1 6"
>> +		setupWan "eth0"
>> +		;;
>> +	archer-c25-v1|\
>> +	archer-c60-v1)
>> +		setupSwitch "eth1" "1 2 0t" "3 4 0t"
>> +		setupWan "eth0"
>> +		;;
>> +	cpe210|\
>> +	cpe510)
>> +		# Default: LAN0: WAN, LAN1: CLIENT
>> +		setupSwitch "eth0" "0t 4" "0t" "0t 5"
>> +		setupWan "eth0.2"
>> +		;;
>> +	gl-ar150)
>> +		# Default: CLIENT
>> +		setupSwitch "eth1" "0t 1" "0t"
>> +		setupWan "eth0"
>> +		;;
>> +	tl-wdr3500-v1|\
>> +	tl-wr741nd-v2|\
>> +	tl-wr841-v7|\
>> +	tl-wr841-v9|\
>> +	tl-wr841-v10|\
>> +	tl-wr841-v11|\
>> +	tl-wr841-v12)
>> +		setupSwitch "eth0" "1 2 0t" "3 4 0t"
>> +		setupWan "eth1"
>> +		;;
>> +	tl-wdr3600-v1|\
>> +	tl-wdr4300-v1|\
>> +	tl-wdr4310-v1|\
>> +	tl-wdr4900-v1)
>> +		setupSwitch "eth0" "4 5 0t" "2 3 0t" "1 0t"
>> +		setupWan "eth0.2"
>> +		;;
>> +	tl-wr841-v8|\
>> +	tl-wr842n-v2)
>> +		setupSwitch "eth1" "1 4 0t" "2 3 0t"
>> +		setupWan "eth0"
>> +		;;
>> +	tl-wr740n-v4|\
>> +	tl-wr740nd-v4|\
>> +	tl-wr741nd-v4)
>> +		setupSwitch "eth0" "1 4 0t" "2 3 0t"
>> +		setupWan "eth1"
>> +		;;
>> +	tl-wr1043nd-v1)
>> +		setupSwitch "eth0" "3 4 5t" "1 2 5t" "0 5t"
>> +		setupWan "eth0.2"
>> +		;;
>> +	tl-wr1043nd-v2|\
>> +	tl-wr1043nd-v3)
>> +		setupSwitch "eth0" "1 2 6t" "3 4 6t" "5 6t"
>> +		setupWan "eth0.2"
>> +		;;
>> +	tl-wr1043nd-v4|\
>> +	tl-wr1043n-v5)
>> +		setupSwitch "eth0" "1 2 0t" "3 4 0t" "5 0t"
>> +		setupWan "eth0.2"
>> +		;;
>> +	cpe210-v2|\
>> +	cpe210-v3|\
>> +	tl-mr3020-v1|\
>> +	tl-wa850re-v1|\
>> +	tl-wa860re-v1|\
>> +	tl-wa901nd-v2|\
>> +	ubnt-bullet-m|\
>> +	ubnt-loco-m|\
>> +	ubnt-loco-m-xw|\
>> +	ubnt-nano-m|\
>> +	ubnt-pico-m|\
>> +	ubnt-power-m-xw|\
>> +	ubnt-unifi|\
>> +	ubnt-unifiac-lite|\
>> +	ubnt-unifiac-mesh)
>> +		setupOnePort "eth0" "CLIENT"
>> +		;;
>> +esac
>> diff --git
>a/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>> new file mode 100644
>> index 00000000..d1a5e50c
>> --- /dev/null
>> +++
>b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>> @@ -0,0 +1,55 @@
>> +#!/bin/sh
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +BOARD="$(uci get board.model.name)"
>> +
>> +. /lib/functions/fff/networksetup
>> +
>> +. /lib/functions.sh
>> +. /lib/functions/system.sh
>> +
>> +case "$BOARD" in
>> +	archer-c7-v2|\
>> +	tl-wr841-v8|\
>> +	tl-wr842n-v2|\
>> +	tl-wr1043nd-v2|\
>> +	tl-wr1043nd-v3)
>> +		ROUTERMAC=$(cat /sys/class/net/eth1/address)
>> +		;;
>> +	cpe210-v2|\
>> +	cpe210-v3|\
>> +	tl-wa850re-v1|\
>> +	tl-wa860re-v1|\
>> +	tl-wa901nd-v2|\
>> +	tl-wdr3500-v1|\
>> +	tl-wr740n-v4|\
>> +	tl-wr740nd-v4|\
>> +	tl-wr741nd-v2|\
>> +	tl-wr741nd-v4|\
>> +	tl-wr841-v7|\
>> +	ubnt-bullet-m|\
>> +	ubnt-loco-m|\
>> +	ubnt-loco-m-xw|\
>> +	ubnt-nano-m|\
>> +	ubnt-pico-m|\
>> +	ubnt-power-m-xw|\
>> +	ubnt-unifi)
>> +		ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress)
>> +		;;
>> +	tl-wdr3600-v1|\
>> +	tl-wdr4300-v1|\
>> +	tl-wdr4310-v1)
>> +		ROUTERMAC=$(cat /sys/class/ieee80211/phy1/macaddress)
>> +		;;
>> +	ubnt-unifiac-lite|\
>> +	ubnt-unifiac-mesh)
>> +		ROUTERMAC=$(mtd_get_mac_binary EEPROM 0x0)
>> +		;;
>> +	*)
>> +		ROUTERMAC=$(cat /sys/class/net/eth0/address)
>> +		;;
>> +esac
>> +
>> +uci set "network.mesh.macaddr=$ROUTERMAC"
>> +uci commit network
>> diff --git
>a/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>> new file mode 100644
>> index 00000000..86c840c3
>> --- /dev/null
>> +++
>b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>> @@ -0,0 +1,75 @@
>> +#!/bin/sh
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +BOARD="$(uci get board.model.name)"
>> +
>> +. /lib/functions/fff/network
>> +. /lib/functions/fff/networksetup
>> +
>> +. /lib/functions.sh
>> +. /lib/functions/system.sh
>> +
>> +# macFlipLocalBit:
>> +# use mac address from phyX with 'locally administered' bit set to
>'1'
>> +# only possible, because wXmesh is created first and therefore gets
>the 'universally administered address'
>> +
>> +case "$BOARD" in
>> +	archer-c7-v2|\
>> +	tl-wr841-v8|\
>> +	tl-wr842n-v2)
>> +		ETHMESHMAC=$(cat /sys/class/net/eth0/address)
>> +		;;
>> +	archer-c25-v1|\
>> +	archer-c60-v1|\
>> +	tl-wr740n-v4|\
>> +	tl-wr740nd-v4|\
>> +	tl-wr741nd-v2|\
>> +	tl-wr741nd-v4|\
>> +	tl-wr841-v7|\
>> +	tl-wr841-v9|\
>> +	tl-wr841-v10|\
>> +	tl-wr841-v11|\
>> +	tl-wr841-v12)
>> +		ETHMESHMAC=$(cat /sys/class/net/eth1/address)
>> +		;;
>> +	cpe210|\
>> +	cpe210-v2|\
>> +	cpe210-v3|\
>> +	cpe510|\
>> +	tl-wa850re-v1|\
>> +	tl-wa860re-v1|\
>> +	tl-wa901nd-v2|\
>> +	tl-wr1043nd-v1|\
>> +	ubnt-bullet-m|\
>> +	ubnt-loco-m|\
>> +	ubnt-loco-m-xw|\
>> +	ubnt-nano-m|\
>> +	ubnt-pico-m|\
>> +	ubnt-power-m-xw|\
>> +	ubnt-unifi)
>> +		ETHMESHMAC=$(macFlipLocalBit "$(cat
>/sys/class/ieee80211/phy0/macaddress)")
>> +		;;
>> +	gl-ar150|\
>> +	tl-mr3020-v1)
>> +		ETHMESHMAC=$(macFlipLocalBit "$(cat /sys/class/net/eth0/address)")
>> +		;;
>> +	tl-wdr4900-v1)
>> +		ETHMESHMAC=$(macFlipLocalBit "$(cat
>/sys/class/ieee80211/phy1/macaddress)")
>> +		;;
>> +	tl-wr1043nd-v4)
>> +		ETHMESHMAC=$(mtd_get_mac_binary config 0x1017c)
>> +		;;
>> +	tl-wr1043n-v5)
>> +		ETHMESHMAC=$(macaddr_add $(mtd_get_mac_binary product-info 8) 1)
>> +		;;
>> +	ubnt-unifiac-lite|\
>> +	ubnt-unifiac-mesh)
>> +		ETHMESHMAC=$(macFlipLocalBit "$(mtd_get_mac_binary EEPROM 0x0)")
>> +		;;
>> +esac
>> +
>> +if [ -n "$ETHMESHMAC" ]; then
>> +	uci set "network.ethmesh.macaddr=$ETHMESHMAC"
>> +	uci commit network
>> +fi
>> diff --git
>a/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>> new file mode 100644
>> index 00000000..db500c15
>> --- /dev/null
>> +++
>b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>> @@ -0,0 +1,31 @@
>> +#!/bin/sh
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +. /lib/functions/fff/network
>> +
>> +echo "Setting IPv6 addresses"
>> +# Some time needed :(
>> +sleep 5
>> +
>> +ROUTERMAC=$(uci get network.mesh.macaddr)
>> +prefix="fdff:0::/64"
>> +
>> +# Set $prefix as prefix
>> +uci set network.globals=globals
>> +uci set "network.globals.ula_prefix=$prefix"
>> +
>> +# Set $prefix::MAC as IP
>> +addr="$(ipMacAssemble "$prefix" "$ROUTERMAC")"
>> +uci add_list "network.mesh.ip6addr=$addr"
>> +uci set network.mesh.proto=static
>> +
>> +# Set $prefix::1 as IP
>> +addr="$(ipAssemble "$prefix" "1")"
>> +uci add_list "network.mesh.ip6addr=$addr"
>> +
>> +# Set $prefix::link-local as IP
>> +addr="$(ipEUIAssemble "$prefix" "$ROUTERMAC")"
>> +uci add_list "network.mesh.ip6addr=$addr"
>> +
>> +uci commit network
>> diff --git
>a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>> new file mode 100644
>> index 00000000..ccc943df
>> --- /dev/null
>> +++
>b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>> @@ -0,0 +1,163 @@
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +. /lib/functions/network.sh
>> +
>> +setAutoConf() {
>> +	# Sets ipv6 auto configuration on an interface to on/off
>> +	# Usage: setAutoConf <interface> <[0|1]>
>> +	local iface=$1
>> +	local on=$2
>> +
>> +	sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf"
>> +	echo "# Generated from configurenetwork" > "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >> "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >> "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.autoconf = $on" >> "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.accept_ra_rtr_pref = $on" >>
>"$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile"
>> +
>> +	/sbin/sysctl -p "$sysctlfile"
>> +}
>> +
>> +enableAutoConf() {
>> +	# Enables ipv6 auto configuration on an interface
>> +	# Usage: enableAutoConf <interface>
>> +	local iface=$1
>> +
>> +	setAutoConf "$iface" "1"
>> +}
>> +
>> +disableAutoConf() {
>> +	# Disables ipv6 auto configuration on an interface
>> +	# Usage: disableAutoConf <interface>
>> +	local iface=$1
>> +
>> +	setAutoConf "$iface" "0"
>> +}
>> +
>> +fixMac() {
>> +	# Update MAC address on live device/interface
>> +	#
>> +	# fixMac <newmac> <interface>
>> +	#
>> +	# newmac: MAC address to be set
>> +	# interface: Interface to be updated as in uci (e.g. mesh)
>> +
>> +	local newmac=$1
>> +	local iface=$2
>> +	local dev
>> +
>> +	echo "Fixing MAC on $iface"
>> +	sleep 10
>> +
>> +	network_get_physdev dev "$iface"
>> +
>> +	uci set "network.${iface}.macaddr=$newmac"
>> +	uci commit network
>> +
>> +	if [ -n "$dev" ]; then
>> +		ip link set "$dev" down
>> +		ip link set "$dev" address "$newmac"
>> +		ip link set "$dev" up
>> +	fi
>> +
>> +	/etc/init.d/network restart
>> +}
>> +
>> +setupSwitch() {
>> +	# Set up switch for switch-based devices
>> +	# This is intended for initial setup, not for updates
>> +	# (changing ports will be sufficient then)
>> +	#
>> +	# Usage: setupSwitch <SWITCHDEV, e.g. eth0> <CLIENT_PORTS>
><BATMAN_PORTS> [<WAN_PORTS>]
>> +
>> +	local SWITCHDEV=$1
>> +	local CLIENT_PORTS=$2
>> +	local BATMAN_PORTS=$3
>> +	local WAN_PORTS=$4
>> +	local SWITCHHW
>> +
>> +	SWITCHHW="$(swconfig list | awk '{ print $4 }')"
>> +
>> +	uci set "network.switch=switch"
>> +	uci set "network.switch.name=$SWITCHHW"
>> +	uci set "network.switch.enable=1"
>> +	uci set "network.switch.reset=1"
>> +	uci set "network.switch.enable_vlan=1"
>> +
>> +	uci set "network.vlan1=switch_vlan"
>> +	uci set "network.vlan1.device=$SWITCHHW"
>> +	uci set "network.vlan1.vlan=1"
>> +	uci set "network.vlan1.ports=$CLIENT_PORTS"
>> +
>> +	# This defines the VLAN for WAN ports inside the switch.
>> +	# This is required even if the WAN eth is separate, but the WAN
>port is in the switch!
>> +	if [ -n "$WAN_PORTS" ]; then
>> +		uci set "network.vlan2=switch_vlan"
>> +		uci set "network.vlan2.device=$SWITCHHW"
>> +		uci set "network.vlan2.vlan=2"
>> +		uci set "network.vlan2.ports=$WAN_PORTS"
>> +	fi
>> +
>> +	uci set "network.vlan3=switch_vlan"
>> +	uci set "network.vlan3.device=$SWITCHHW"
>> +	uci set "network.vlan3.vlan=3"
>> +	uci set "network.vlan3.ports=$BATMAN_PORTS"
>> +
>> +	uci set network.mesh.ifname="$SWITCHDEV.1 bat0"
>> +	uci set network.ethmesh.ifname="$SWITCHDEV.3"
>> +
>> +	uci commit network
>> +}
>> +
>> +setupWan() {
>> +	# Set up WAN for any device with dedicated port (no one-port where
>mode is changed)
>> +	# This is intended for initial setup, not for updates
>> +	# (updates are only possible by changing ports in a switch)
>> +	#
>> +	# Usage: setupWan <WANDEV, e.g. eth0, eth0.2>
>> +
>> +	local WANDEV=$1
>> +
>> +	# This defines the WAN interface. We use the VLAN ID only if we do
>NOT have a separate eth.
>> +	# This is different from the criterion for the WAN port dealt with
>above!
>> +	# If the WANDEV is different from the SWITCHDEV, but the WAN port
>is in the switch,
>> +	# the WAN eth has to be connected to the switch untagged!
>> +	enableAutoConf "$WANDEV"
>> +	uci set network.wan.ifname="$WANDEV"
>> +
>> +	uci commit network
>> +}
>> +
>> +setupOnePort() {
>> +	# Set up port mode for one-port devices
>> +	# This is intended for initial setup and for updates
>> +	# (latter will require network restart)
>> +	#
>> +	# Usage: setupOnePort <DEV, e.g. eth0> <ETHMODE, e.g. BATMAN,
>CLIENT, WAN>
>> +
>> +	local DEV=$1
>> +	local ETHMODE=$2
>> +
>> +	uci set "network.$DEV=interface"
>> +	uci set "network.$DEV.ifname=$DEV"
>> +	if [ "$ETHMODE" = "WAN" ]; then
>> +		enableAutoConf "$DEV"
>> +		uci set network.mesh.ifname="bat0"
>> +		uci set network.wan.ifname="$DEV"
>> +		uci del network.ethmesh.ifname
>> +	elif [ "$ETHMODE" = "CLIENT" ] ; then
>> +		disableAutoConf "$DEV"
>> +		uci set network.mesh.ifname="bat0 $DEV"
>> +		uci del network.wan.ifname
>> +		uci del network.ethmesh.ifname
>> +	else # default=BATMAN
>> +		disableAutoConf "$DEV"
>> +		uci set network.mesh.ifname="bat0"
>> +		uci del network.wan.ifname
>> +		uci set network.ethmesh.ifname="$DEV"
>> +	fi
>> +	uci commit network
>> +}
>> diff --git
>a/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>> new file mode 100644
>> index 00000000..377c302f
>> --- /dev/null
>> +++ b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>> @@ -0,0 +1,31 @@
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +BOARD="$(uci get board.model.name)"
>> +
>> +case "$BOARD" in
>> +	archer-c25-v1|\
>> +	archer-c60-v1|\
>> +	tl-wr841-v10|\
>> +	tl-wr841-v11|\
>> +	tl-wr841-v12)
>> +		PORTORDER="4 3 2 1"
>> +		;;
>> +	cpe210|\
>> +	cpe510)
>> +		PORTORDER="5 4"
>> +		;;
>> +	gl-ar150)
>> +		PORTORDER="1"
>> +		;;
>> +	tl-wdr4300-v1)
>> +		PORTORDER="1 2 3 4 5"
>> +		;;
>> +	tl-wr841-v8)
>> +		PORTORDER="2 3 4 1"
>> +		;;
>> +	tl-wr1043nd-v4|\
>> +	tl-wr1043n-v5)
>> +		PORTORDER="5 4 3 2 1"
>> +		;;
>> +esac
>> diff --git
>a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>> deleted file mode 100755
>> index 448bd04b..00000000
>> --- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>> +++ /dev/null
>> @@ -1,263 +0,0 @@
>> -#!/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
>> -
>> -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
>> -}
>> -
>> -setAutoConf() {
>> -    # Sets ipv6 auto configuration on an interface to on/off
>> -    # Usage: setAutoConf <interface> <[0|1]>
>> -    local iface=$1
>> -    local on=$2
>> -
>> -    sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf"
>> -    echo "# Generated from configurenetwork" > "$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >>
>"$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >>
>"$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.autoconf = $on" >> "$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.accept_ra_rtr_pref = $on" >>
>"$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile"
>> -
>> -    /sbin/sysctl -p "$sysctlfile"
>> -}
>> -
>> -enableAutoConf() {
>> -    # Enables ipv6 auto configuration on an interface
>> -    # Usage: enableAutoConf <interface>
>> -    local iface=$1
>> -
>> -    setAutoConf "$iface" "1"
>> -}
>> -
>> -disableAutoConf() {
>> -    # Disables ipv6 auto configuration on an interface
>> -    # Usage: disableAutoConf <interface>
>> -    local iface=$1
>> -
>> -    setAutoConf "$iface" "0"
>> -}
>> -
>> -BOARD="$(uci get board.model.name)"
>> -. /etc/network.$BOARD
>> -
>> -if [ -s /etc/network.config ] ; then
>> -    . /etc/network.config
>> -else
>> -    # Write network.config
>> -    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
>> -    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 ! 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"
>> -
>> -    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"
>> -
>> -        enableAutoConf "$WANDEV.2"
>> -    else
>> -        enableAutoConf "$WANDEV"
>> -    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
>> -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
>> -        enableAutoConf "$WANDEV"
>> -        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
>> -        disableAutoConf "$WANDEV"
>> -        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
>> -        disableAutoConf "$WANDEV"
>> -        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
>> -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 network
>> -
>> -        ifconfig $SWITCHDEV.3 down
>> -        ifconfig $SWITCHDEV.3 hw ether $ETHMESHMAC
>> -        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 network
>> -
>> -        ifconfig br-mesh down
>> -        ifconfig br-mesh hw ether $ROUTERMAC
>> -        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 network
>> -        ifconfig eth0 down
>> -        ifconfig eth0 hw ether $NEW_MACADDR
>> -        ifconfig eth0 up
>> -        /etc/init.d/network restart
>> -fi
>> -
>> -if uci -q get "network.mesh.ip6addr" > /dev/null
>> -then
>> -    echo "IPv6 for mesh is set already"
>> -else
>> -    echo "Setting IPv6 addresses"
>> -    # 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" "$ROUTERMAC")"
>> -    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" "$ROUTERMAC")"
>> -    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
>> diff --git a/src/packages/fff/fff-sysupgrade/Makefile
>b/src/packages/fff/fff-sysupgrade/Makefile
>> index 90ef66af..0e6c08ec 100644
>> --- a/src/packages/fff/fff-sysupgrade/Makefile
>> +++ b/src/packages/fff/fff-sysupgrade/Makefile
>> @@ -1,8 +1,7 @@
>>  include $(TOPDIR)/rules.mk
>>  
>>  PKG_NAME:=fff-sysupgrade
>> -PKG_VERSION:=9
>> -PKG_RELEASE:=1
>> +PKG_RELEASE:=10
>>  
>>  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
>>  
>> diff --git
>a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>> index 7ff83f54..f5783687 100644
>> ---
>a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>> +++
>b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>> @@ -7,7 +7,6 @@ cat > /etc/sysupgrade.conf <<-__EOF__
>>  /etc/dropbear/dropbear_dss_host_key
>>  /etc/dropbear/dropbear_rsa_host_key
>>  /etc/dropbear/authorized_keys
>> -/etc/network.config
>>  /etc/config/fff
>>  /etc/hoodfile
>>  __EOF__
Christian Dresel April 22, 2019, 4:10 p.m.
Hi

lass mich mal ne Nacht drüber schlafen. Meine Erfahrung war bisher, je
weiter die Firmware fortgeschritten ist, umso umständlicher wurde es
neue devices ohne UART einzurichten weil man immer schwerer "hinten rum
irgendwie wieder drauf kam".

Damit wirds jetzt dann praktisch nahezu unmöglich irgendwie auf das
Device zu kommen wenn der Name falsch ist. Gefällt mir nicht sonderlich.

Ansonsten gefällt mir das ganze aber sehr gut und hab so auch nix mehr
gefunden. Allerdings ist das genauso ein Patch, wo ich sehr sehr gerne
ein weiteres paar Augen drauf hätte

Gruß

Christian

On 22.04.19 17:44, Adrian Schmutzler wrote:
> Hallo Christian,
>
> im Prinzip ist es dann ähnlich kaputt wie früher, wenn man keine
> network.devicename hatte.
>
> Man könnte aber durchaus überlegen, eine standardconfig per default
> case zu setzen, z. B. in diesem Fall einfach openwrt zu belassen. Odre
> wie vorgeschlagen der OnePort (hab das jetzt nicht durcdgedacht).
>
> Dieses Thema hatte ich aber hier auch gar nicht bedacht, sondern habe
> mich wie zuvor mit configurenetwork in der Logik bewegt, dass nur
> eingerichtete Devices gehen.
> Ich bin auch der Meinung, dass wir einen solchen default case separat
> behandeln sollten und nicht hier noch reinmatschen.
>
> Beste Grüße
>
> Adrian
>
> On 22 April 2019 17:33:27 CEST, Christian Dresel <fff@chrisi01.de> wrote:
>
>     hi
>
>     noch eine Frage zum Verständnis:
>
>     Wenn in 22a-config-ports ein Device fehlt, dann bekommt man ein ziemlich
>     kaputtes Gerät raus oder?
>
>     Es wird dann nichts aufgerufen und am Ende sollte diese File dann als
>     Network File dienen:
>
>     https://github.com/FreifunkFranken/firmware/blob/master/src/packages/fff/fff-network/files/etc/config/network
>
>     damit geht dann vermutlich gar nix mehr an den Ethernets. Das macht neue
>     Geräte einbinden ein bisschen umständlich, wenn man sich da einmal im
>     Device Namen vertut, hat man sich wunderbar rausgesperrt und kommt nur
>     seriell drauf um zu gucken was los ist oder?
>
>     Seh ich das soweit richtig? Wenn ja muss ich nochmal drüber schlafen ob
>     mir das gefällt ;) In der Annahme das es eth0 immer gibt, macht es dann
>     vllt. Sinn ein setupOnePort für den Rest auf eth0 zu werfen? Somit kommt
>     man zumindest am Ende irgendwie wieder an die Geräte ran.
>
>     Gruß
>
>     Christian
>
>     On 22.04.19 14:35, Adrian Schmutzler wrote:
>
>         This removes the configurenetwork script and replaces it by
>         some scripts run only during first boot. This introduces
>         several changes: - The different tasks dealt with in
>         configurenetwork are split. Thus, one script deals with
>         switch/port setup, one with br-mesh MAC address, one with
>         ETHMESHMAC, and one with IP addresses. This makes the whole
>         approach more modular, compared to the monolithic
>         configurenetwork. - Where configurenetwork contained
>         sophisticated, nested conditions to account for all possible
>         combinations of variables, the new approach is inspired by
>         OpenWrt's board.d subfiles. Instead of defining variables, we
>         now directly call function in a select-case. This is much more
>         flexible, as we can just put code there for a special case
>         instead of bending configurenetwork for it. - The select-case
>         accounts for the various cases of similar/same parameters of
>         multiple devices, which can be grouped now. - Scripts are run
>         only at first boot. Later changes have to be done manually (we
>         will provide some scripts later). Those will typically be
>         limited to changing only the ports; no need to run whole
>         network config again. - network.mode and network.config will
>         disappear. For switch-based devices, there is no advantage of
>         using network.config compared directly editing
>         /etc/config/network. Upgrade-safety can be established by
>         putting uci commands in an upgrade-safe script file (to be
>         provided in a later patch). After this patch, show_info and
>         the ports display in WebUI are broken. Those will be fixed in
>         a later patch. Signed-off-by: Adrian Schmutzler
>         <freifunk@adrianschmutzler.de>
>         ------------------------------------------------------------------------
>         Changed in v2: - Fixed archer-c60-v2 to v1 - Added network
>         functions file in uci-defaults/22c - Removed some -q from uci
>         - Removed all commands only needed for running devices (this
>         is uci only) - Added descriptions for functions in
>         networksetup Changed in v3: - Changed order of 22a and 22b -
>         uci del instead uci set for WAN on one-port - switch/vlanX
>         instead of eth#/eth#.# for switch-based devices
>         ------------------------------------------------------------------------
>         bsp/default/root_file_system/etc/rc.local | 4 -
>         src/packages/fff/fff-network/Makefile | 4 +-
>         .../files/etc/uci-defaults/22a-config-ports | 89 +++++++
>         .../files/etc/uci-defaults/22b-config-routermac | 55 +++++
>         .../files/etc/uci-defaults/22c-config-ethmesh | 75 ++++++
>         .../files/etc/uci-defaults/23-config-ipaddr | 31 +++
>         .../files/lib/functions/fff/networksetup | 163 +++++++++++++
>         .../fff-network/files/lib/functions/fff/portorder | 31 +++
>         .../fff-network/files/usr/sbin/configurenetwork | 263
>         --------------------- src/packages/fff/fff-sysupgrade/Makefile
>         | 3 +- .../files/etc/uci-defaults/99-fff-sysupgrade | 1 - 11
>         files changed, 446 insertions(+), 273 deletions(-) create mode
>         100644
>         src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>         create mode 100644
>         src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>         create mode 100644
>         src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>         create mode 100644
>         src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>         create mode 100644
>         src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>         create mode 100644
>         src/packages/fff/fff-network/files/lib/functions/fff/portorder
>         delete mode 100755
>         src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>         diff --git a/bsp/default/root_file_system/etc/rc.local
>         b/bsp/default/root_file_system/etc/rc.local index
>         59042c37..e02368a5 100755 ---
>         a/bsp/default/root_file_system/etc/rc.local +++
>         b/bsp/default/root_file_system/etc/rc.local @@ -2,10 +2,6 @@ #
>         Put your custom commands here that should be executed once #
>         the system init finished. By default this file does nothing.
>         -/usr/sbin/configurenetwork - -sleep 3 -
>         /usr/sbin/configurehood touch /tmp/started diff --git
>         a/src/packages/fff/fff-network/Makefile
>         b/src/packages/fff/fff-network/Makefile index
>         e9335884..11796797 100644 ---
>         a/src/packages/fff/fff-network/Makefile +++
>         b/src/packages/fff/fff-network/Makefile @@ -1,8 +1,7 @@
>         include $(TOPDIR)/rules.mk PKG_NAME:=fff-network
>         -PKG_VERSION:=10 -PKG_RELEASE:=1 +PKG_RELEASE:=11
>         PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) @@ -34,7 +33,6 @@
>         endef define Package/$(PKG_NAME)/install $(CP) ./files/* $(1)/
>         - test -d ./$(BOARD) && $(CP) ./$(BOARD)/* $(1)/etc/ endef
>         $(eval $(call BuildPackage,$(PKG_NAME))) diff --git
>         a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>         b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>         new file mode 100644 index 00000000..b8eaceab --- /dev/null
>         +++
>         b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>         @@ -0,0 +1,89 @@ +#!/bin/sh +# Copyright 2019 Adrian
>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
>         board.model.name)" + +. /lib/functions/fff/networksetup +
>         +case "$BOARD" in + archer-c7-v2) + setupSwitch "eth1" "4 5
>         0t" "2 3 0t" "1 6" + setupWan "eth0" + ;; + archer-c25-v1|\ +
>         archer-c60-v1) + setupSwitch "eth1" "1 2 0t" "3 4 0t" +
>         setupWan "eth0" + ;; + cpe210|\ + cpe510) + # Default: LAN0:
>         WAN, LAN1: CLIENT + setupSwitch "eth0" "0t 4" "0t" "0t 5" +
>         setupWan "eth0.2" + ;; + gl-ar150) + # Default: CLIENT +
>         setupSwitch "eth1" "0t 1" "0t" + setupWan "eth0" + ;; +
>         tl-wdr3500-v1|\ + tl-wr741nd-v2|\ + tl-wr841-v7|\ +
>         tl-wr841-v9|\ + tl-wr841-v10|\ + tl-wr841-v11|\ +
>         tl-wr841-v12) + setupSwitch "eth0" "1 2 0t" "3 4 0t" +
>         setupWan "eth1" + ;; + tl-wdr3600-v1|\ + tl-wdr4300-v1|\ +
>         tl-wdr4310-v1|\ + tl-wdr4900-v1) + setupSwitch "eth0" "4 5 0t"
>         "2 3 0t" "1 0t" + setupWan "eth0.2" + ;; + tl-wr841-v8|\ +
>         tl-wr842n-v2) + setupSwitch "eth1" "1 4 0t" "2 3 0t" +
>         setupWan "eth0" + ;; + tl-wr740n-v4|\ + tl-wr740nd-v4|\ +
>         tl-wr741nd-v4) + setupSwitch "eth0" "1 4 0t" "2 3 0t" +
>         setupWan "eth1" + ;; + tl-wr1043nd-v1) + setupSwitch "eth0" "3
>         4 5t" "1 2 5t" "0 5t" + setupWan "eth0.2" + ;; +
>         tl-wr1043nd-v2|\ + tl-wr1043nd-v3) + setupSwitch "eth0" "1 2
>         6t" "3 4 6t" "5 6t" + setupWan "eth0.2" + ;; +
>         tl-wr1043nd-v4|\ + tl-wr1043n-v5) + setupSwitch "eth0" "1 2
>         0t" "3 4 0t" "5 0t" + setupWan "eth0.2" + ;; + cpe210-v2|\ +
>         cpe210-v3|\ + tl-mr3020-v1|\ + tl-wa850re-v1|\ +
>         tl-wa860re-v1|\ + tl-wa901nd-v2|\ + ubnt-bullet-m|\ +
>         ubnt-loco-m|\ + ubnt-loco-m-xw|\ + ubnt-nano-m|\ +
>         ubnt-pico-m|\ + ubnt-power-m-xw|\ + ubnt-unifi|\ +
>         ubnt-unifiac-lite|\ + ubnt-unifiac-mesh) + setupOnePort "eth0"
>         "CLIENT" + ;; +esac diff --git
>         a/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>         b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>         new file mode 100644 index 00000000..d1a5e50c --- /dev/null
>         +++
>         b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>         @@ -0,0 +1,55 @@ +#!/bin/sh +# Copyright 2019 Adrian
>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
>         board.model.name)" + +. /lib/functions/fff/networksetup + +.
>         /lib/functions.sh +. /lib/functions/system.sh + +case "$BOARD"
>         in + archer-c7-v2|\ + tl-wr841-v8|\ + tl-wr842n-v2|\ +
>         tl-wr1043nd-v2|\ + tl-wr1043nd-v3) + ROUTERMAC=$(cat
>         /sys/class/net/eth1/address) + ;; + cpe210-v2|\ + cpe210-v3|\
>         + tl-wa850re-v1|\ + tl-wa860re-v1|\ + tl-wa901nd-v2|\ +
>         tl-wdr3500-v1|\ + tl-wr740n-v4|\ + tl-wr740nd-v4|\ +
>         tl-wr741nd-v2|\ + tl-wr741nd-v4|\ + tl-wr841-v7|\ +
>         ubnt-bullet-m|\ + ubnt-loco-m|\ + ubnt-loco-m-xw|\ +
>         ubnt-nano-m|\ + ubnt-pico-m|\ + ubnt-power-m-xw|\ +
>         ubnt-unifi) + ROUTERMAC=$(cat
>         /sys/class/ieee80211/phy0/macaddress) + ;; + tl-wdr3600-v1|\ +
>         tl-wdr4300-v1|\ + tl-wdr4310-v1) + ROUTERMAC=$(cat
>         /sys/class/ieee80211/phy1/macaddress) + ;; +
>         ubnt-unifiac-lite|\ + ubnt-unifiac-mesh) +
>         ROUTERMAC=$(mtd_get_mac_binary EEPROM 0x0) + ;; + *) +
>         ROUTERMAC=$(cat /sys/class/net/eth0/address) + ;; +esac + +uci
>         set "network.mesh.macaddr=$ROUTERMAC" +uci commit network diff
>         --git
>         a/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>         b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>         new file mode 100644 index 00000000..86c840c3 --- /dev/null
>         +++
>         b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>         @@ -0,0 +1,75 @@ +#!/bin/sh +# Copyright 2019 Adrian
>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
>         board.model.name)" + +. /lib/functions/fff/network +.
>         /lib/functions/fff/networksetup + +. /lib/functions.sh +.
>         /lib/functions/system.sh + +# macFlipLocalBit: +# use mac
>         address from phyX with 'locally administered' bit set to '1'
>         +# only possible, because wXmesh is created first and
>         therefore gets the 'universally administered address' + +case
>         "$BOARD" in + archer-c7-v2|\ + tl-wr841-v8|\ + tl-wr842n-v2) +
>         ETHMESHMAC=$(cat /sys/class/net/eth0/address) + ;; +
>         archer-c25-v1|\ + archer-c60-v1|\ + tl-wr740n-v4|\ +
>         tl-wr740nd-v4|\ + tl-wr741nd-v2|\ + tl-wr741nd-v4|\ +
>         tl-wr841-v7|\ + tl-wr841-v9|\ + tl-wr841-v10|\ +
>         tl-wr841-v11|\ + tl-wr841-v12) + ETHMESHMAC=$(cat
>         /sys/class/net/eth1/address) + ;; + cpe210|\ + cpe210-v2|\ +
>         cpe210-v3|\ + cpe510|\ + tl-wa850re-v1|\ + tl-wa860re-v1|\ +
>         tl-wa901nd-v2|\ + tl-wr1043nd-v1|\ + ubnt-bullet-m|\ +
>         ubnt-loco-m|\ + ubnt-loco-m-xw|\ + ubnt-nano-m|\ +
>         ubnt-pico-m|\ + ubnt-power-m-xw|\ + ubnt-unifi) +
>         ETHMESHMAC=$(macFlipLocalBit "$(cat
>         /sys/class/ieee80211/phy0/macaddress)") + ;; + gl-ar150|\ +
>         tl-mr3020-v1) + ETHMESHMAC=$(macFlipLocalBit "$(cat
>         /sys/class/net/eth0/address)") + ;; + tl-wdr4900-v1) +
>         ETHMESHMAC=$(macFlipLocalBit "$(cat
>         /sys/class/ieee80211/phy1/macaddress)") + ;; + tl-wr1043nd-v4)
>         + ETHMESHMAC=$(mtd_get_mac_binary config 0x1017c) + ;; +
>         tl-wr1043n-v5) + ETHMESHMAC=$(macaddr_add $(mtd_get_mac_binary
>         product-info 8) 1) + ;; + ubnt-unifiac-lite|\ +
>         ubnt-unifiac-mesh) + ETHMESHMAC=$(macFlipLocalBit
>         "$(mtd_get_mac_binary EEPROM 0x0)") + ;; +esac + +if [ -n
>         "$ETHMESHMAC" ]; then + uci set
>         "network.ethmesh.macaddr=$ETHMESHMAC" + uci commit network +fi
>         diff --git
>         a/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>         b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>         new file mode 100644 index 00000000..db500c15 --- /dev/null
>         +++
>         b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>         @@ -0,0 +1,31 @@ +#!/bin/sh +# Copyright 2019 Adrian
>         Schmutzler +# License GPLv3 + +. /lib/functions/fff/network +
>         +echo "Setting IPv6 addresses" +# Some time needed :( +sleep 5
>         + +ROUTERMAC=$(uci get network.mesh.macaddr)
>         +prefix="fdff:0::/64" + +# Set $prefix as prefix +uci set
>         network.globals=globals +uci set
>         "network.globals.ula_prefix=$prefix" + +# Set $prefix::MAC as
>         IP +addr="$(ipMacAssemble "$prefix" "$ROUTERMAC")" +uci
>         add_list "network.mesh.ip6addr=$addr" +uci set
>         network.mesh.proto=static + +# Set $prefix::1 as IP
>         +addr="$(ipAssemble "$prefix" "1")" +uci add_list
>         "network.mesh.ip6addr=$addr" + +# Set $prefix::link-local as
>         IP +addr="$(ipEUIAssemble "$prefix" "$ROUTERMAC")" +uci
>         add_list "network.mesh.ip6addr=$addr" + +uci commit network
>         diff --git
>         a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>         b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>         new file mode 100644 index 00000000..ccc943df --- /dev/null
>         +++
>         b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>         @@ -0,0 +1,163 @@ +# Copyright 2019 Adrian Schmutzler +#
>         License GPLv3 + +. /lib/functions/network.sh + +setAutoConf()
>         { + # Sets ipv6 auto configuration on an interface to on/off +
>         # Usage: setAutoConf <interface> <[0|1]> + local iface=$1 +
>         local on=$2 + +
>         sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf" + echo
>         "# Generated from configurenetwork" > "$sysctlfile" + echo
>         "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile" + echo
>         "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >> "$sysctlfile"
>         + echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >>
>         "$sysctlfile" + echo "net.ipv6.conf.$iface.autoconf = $on" >>
>         "$sysctlfile" + echo "net.ipv6.conf.$iface.accept_ra_rtr_pref
>         = $on" >> "$sysctlfile" + echo
>         "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile" + +
>         /sbin/sysctl -p "$sysctlfile" +} + +enableAutoConf() { + #
>         Enables ipv6 auto configuration on an interface + # Usage:
>         enableAutoConf <interface> + local iface=$1 + + setAutoConf
>         "$iface" "1" +} + +disableAutoConf() { + # Disables ipv6 auto
>         configuration on an interface + # Usage: disableAutoConf
>         <interface> + local iface=$1 + + setAutoConf "$iface" "0" +} +
>         +fixMac() { + # Update MAC address on live device/interface +
>         # + # fixMac <newmac> <interface> + # + # newmac: MAC address
>         to be set + # interface: Interface to be updated as in uci
>         (e.g. mesh) + + local newmac=$1 + local iface=$2 + local dev +
>         + echo "Fixing MAC on $iface" + sleep 10 + +
>         network_get_physdev dev "$iface" + + uci set
>         "network.${iface}.macaddr=$newmac" + uci commit network + + if
>         [ -n "$dev" ]; then + ip link set "$dev" down + ip link set
>         "$dev" address "$newmac" + ip link set "$dev" up + fi + +
>         /etc/init.d/network restart +} + +setupSwitch() { + # Set up
>         switch for switch-based devices + # This is intended for
>         initial setup, not for updates + # (changing ports will be
>         sufficient then) + # + # Usage: setupSwitch <SWITCHDEV, e.g.
>         eth0> <CLIENT_PORTS> <BATMAN_PORTS> [<WAN_PORTS>] + + local
>         SWITCHDEV=$1 + local CLIENT_PORTS=$2 + local BATMAN_PORTS=$3 +
>         local WAN_PORTS=$4 + local SWITCHHW + + SWITCHHW="$(swconfig
>         list | awk '{ print $4 }')" + + uci set
>         "network.switch=switch" + uci set
>         "network.switch.name=$SWITCHHW" + uci set
>         "network.switch.enable=1" + uci set "network.switch.reset=1" +
>         uci set "network.switch.enable_vlan=1" + + uci set
>         "network.vlan1=switch_vlan" + uci set
>         "network.vlan1.device=$SWITCHHW" + uci set
>         "network.vlan1.vlan=1" + uci set
>         "network.vlan1.ports=$CLIENT_PORTS" + + # This defines the
>         VLAN for WAN ports inside the switch. + # This is required
>         even if the WAN eth is separate, but the WAN port is in the
>         switch! + if [ -n "$WAN_PORTS" ]; then + uci set
>         "network.vlan2=switch_vlan" + uci set
>         "network.vlan2.device=$SWITCHHW" + uci set
>         "network.vlan2.vlan=2" + uci set
>         "network.vlan2.ports=$WAN_PORTS" + fi + + uci set
>         "network.vlan3=switch_vlan" + uci set
>         "network.vlan3.device=$SWITCHHW" + uci set
>         "network.vlan3.vlan=3" + uci set
>         "network.vlan3.ports=$BATMAN_PORTS" + + uci set
>         network.mesh.ifname="$SWITCHDEV.1 bat0" + uci set
>         network.ethmesh.ifname="$SWITCHDEV.3" + + uci commit network
>         +} + +setupWan() { + # Set up WAN for any device with
>         dedicated port (no one-port where mode is changed) + # This is
>         intended for initial setup, not for updates + # (updates are
>         only possible by changing ports in a switch) + # + # Usage:
>         setupWan <WANDEV, e.g. eth0, eth0.2> + + local WANDEV=$1 + + #
>         This defines the WAN interface. We use the VLAN ID only if we
>         do NOT have a separate eth. + # This is different from the
>         criterion for the WAN port dealt with above! + # If the WANDEV
>         is different from the SWITCHDEV, but the WAN port is in the
>         switch, + # the WAN eth has to be connected to the switch
>         untagged! + enableAutoConf "$WANDEV" + uci set
>         network.wan.ifname="$WANDEV" + + uci commit network +} +
>         +setupOnePort() { + # Set up port mode for one-port devices +
>         # This is intended for initial setup and for updates + #
>         (latter will require network restart) + # + # Usage:
>         setupOnePort <DEV, e.g. eth0> <ETHMODE, e.g. BATMAN, CLIENT,
>         WAN> + + local DEV=$1 + local ETHMODE=$2 + + uci set
>         "network.$DEV=interface" + uci set "network.$DEV.ifname=$DEV"
>         + if [ "$ETHMODE" = "WAN" ]; then + enableAutoConf "$DEV" +
>         uci set network.mesh.ifname="bat0" + uci set
>         network.wan.ifname="$DEV" + uci del network.ethmesh.ifname +
>         elif [ "$ETHMODE" = "CLIENT" ] ; then + disableAutoConf "$DEV"
>         + uci set network.mesh.ifname="bat0 $DEV" + uci del
>         network.wan.ifname + uci del network.ethmesh.ifname + else #
>         default=BATMAN + disableAutoConf "$DEV" + uci set
>         network.mesh.ifname="bat0" + uci del network.wan.ifname + uci
>         set network.ethmesh.ifname="$DEV" + fi + uci commit network +}
>         diff --git
>         a/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>         b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>         new file mode 100644 index 00000000..377c302f --- /dev/null
>         +++
>         b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>         @@ -0,0 +1,31 @@ +# Copyright 2019 Adrian Schmutzler +#
>         License GPLv3 + +BOARD="$(uci get board.model.name)" + +case
>         "$BOARD" in + archer-c25-v1|\ + archer-c60-v1|\ +
>         tl-wr841-v10|\ + tl-wr841-v11|\ + tl-wr841-v12) + PORTORDER="4
>         3 2 1" + ;; + cpe210|\ + cpe510) + PORTORDER="5 4" + ;; +
>         gl-ar150) + PORTORDER="1" + ;; + tl-wdr4300-v1) + PORTORDER="1
>         2 3 4 5" + ;; + tl-wr841-v8) + PORTORDER="2 3 4 1" + ;; +
>         tl-wr1043nd-v4|\ + tl-wr1043n-v5) + PORTORDER="5 4 3 2 1" + ;;
>         +esac diff --git
>         a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>         b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>         deleted file mode 100755 index 448bd04b..00000000 ---
>         a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>         +++ /dev/null @@ -1,263 +0,0 @@ -#!/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 - -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 -} - -setAutoConf()
>         { - # Sets ipv6 auto configuration on an interface to on/off -
>         # Usage: setAutoConf <interface> <[0|1]> - local iface=$1 -
>         local on=$2 - -
>         sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf" - echo
>         "# Generated from configurenetwork" > "$sysctlfile" - echo
>         "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile" - echo
>         "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >> "$sysctlfile"
>         - echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >>
>         "$sysctlfile" - echo "net.ipv6.conf.$iface.autoconf = $on" >>
>         "$sysctlfile" - echo "net.ipv6.conf.$iface.accept_ra_rtr_pref
>         = $on" >> "$sysctlfile" - echo
>         "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile" - -
>         /sbin/sysctl -p "$sysctlfile" -} - -enableAutoConf() { - #
>         Enables ipv6 auto configuration on an interface - # Usage:
>         enableAutoConf <interface> - local iface=$1 - - setAutoConf
>         "$iface" "1" -} - -disableAutoConf() { - # Disables ipv6 auto
>         configuration on an interface - # Usage: disableAutoConf
>         <interface> - local iface=$1 - - setAutoConf "$iface" "0" -} -
>         -BOARD="$(uci get board.model.name)" -. /etc/network.$BOARD -
>         -if [ -s /etc/network.config ] ; then - . /etc/network.config
>         -else - # Write network.config - 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 - 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 ! 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" - - 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" - - enableAutoConf
>         "$WANDEV.2" - else - enableAutoConf "$WANDEV" - 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 -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 - enableAutoConf "$WANDEV" - 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 - disableAutoConf "$WANDEV" -
>         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 -
>         disableAutoConf "$WANDEV" - 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 -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 network - -
>         ifconfig $SWITCHDEV.3 down - ifconfig $SWITCHDEV.3 hw ether
>         $ETHMESHMAC - 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
>         network - - ifconfig br-mesh down - ifconfig br-mesh hw ether
>         $ROUTERMAC - 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 network -
>         ifconfig eth0 down - ifconfig eth0 hw ether $NEW_MACADDR -
>         ifconfig eth0 up - /etc/init.d/network restart -fi - -if uci
>         -q get "network.mesh.ip6addr" > /dev/null -then - echo "IPv6
>         for mesh is set already" -else - echo "Setting IPv6 addresses"
>         - # 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"
>         "$ROUTERMAC")" - 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"
>         "$ROUTERMAC")" - 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 diff --git
>         a/src/packages/fff/fff-sysupgrade/Makefile
>         b/src/packages/fff/fff-sysupgrade/Makefile index
>         90ef66af..0e6c08ec 100644 ---
>         a/src/packages/fff/fff-sysupgrade/Makefile +++
>         b/src/packages/fff/fff-sysupgrade/Makefile @@ -1,8 +1,7 @@
>         include $(TOPDIR)/rules.mk PKG_NAME:=fff-sysupgrade
>         -PKG_VERSION:=9 -PKG_RELEASE:=1 +PKG_RELEASE:=10
>         PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git
>         a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>         b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>         index 7ff83f54..f5783687 100644 ---
>         a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>         +++
>         b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>         @@ -7,7 +7,6 @@ cat > /etc/sysupgrade.conf <<-__EOF__
>         /etc/dropbear/dropbear_dss_host_key
>         /etc/dropbear/dropbear_rsa_host_key
>         /etc/dropbear/authorized_keys -/etc/network.config
>         /etc/config/fff /etc/hoodfile __EOF__ 
>
>
Adrian Schmutzler April 22, 2019, 4:17 p.m.
Jo, wir haben ja keine Eile.

Tatsächlich neige ich inzwischen dazu, einfach wie vorgeschlagen den oneport als default zu setzen. Das ist so einfach und effektiv, das man das sogar doch noch in den Patch mit reinbauen könnte. So geht dann zumindest irgendein Port immer.

Grüße

Adrian

On 22 April 2019 18:10:47 CEST, Christian Dresel <fff@chrisi01.de> wrote:
>Hi
>
>lass mich mal ne Nacht drüber schlafen. Meine Erfahrung war bisher, je
>weiter die Firmware fortgeschritten ist, umso umständlicher wurde es
>neue devices ohne UART einzurichten weil man immer schwerer "hinten rum
>irgendwie wieder drauf kam".
>
>Damit wirds jetzt dann praktisch nahezu unmöglich irgendwie auf das
>Device zu kommen wenn der Name falsch ist. Gefällt mir nicht
>sonderlich.
>
>Ansonsten gefällt mir das ganze aber sehr gut und hab so auch nix mehr
>gefunden. Allerdings ist das genauso ein Patch, wo ich sehr sehr gerne
>ein weiteres paar Augen drauf hätte
>
>Gruß
>
>Christian
>
>On 22.04.19 17:44, Adrian Schmutzler wrote:
>> Hallo Christian,
>>
>> im Prinzip ist es dann ähnlich kaputt wie früher, wenn man keine
>> network.devicename hatte.
>>
>> Man könnte aber durchaus überlegen, eine standardconfig per default
>> case zu setzen, z. B. in diesem Fall einfach openwrt zu belassen.
>Odre
>> wie vorgeschlagen der OnePort (hab das jetzt nicht durcdgedacht).
>>
>> Dieses Thema hatte ich aber hier auch gar nicht bedacht, sondern habe
>> mich wie zuvor mit configurenetwork in der Logik bewegt, dass nur
>> eingerichtete Devices gehen.
>> Ich bin auch der Meinung, dass wir einen solchen default case separat
>> behandeln sollten und nicht hier noch reinmatschen.
>>
>> Beste Grüße
>>
>> Adrian
>>
>> On 22 April 2019 17:33:27 CEST, Christian Dresel <fff@chrisi01.de>
>wrote:
>>
>>     hi
>>
>>     noch eine Frage zum Verständnis:
>>
>>     Wenn in 22a-config-ports ein Device fehlt, dann bekommt man ein
>ziemlich
>>     kaputtes Gerät raus oder?
>>
>>     Es wird dann nichts aufgerufen und am Ende sollte diese File dann
>als
>>     Network File dienen:
>>
>>    
>https://github.com/FreifunkFranken/firmware/blob/master/src/packages/fff/fff-network/files/etc/config/network
>>
>>     damit geht dann vermutlich gar nix mehr an den Ethernets. Das
>macht neue
>>     Geräte einbinden ein bisschen umständlich, wenn man sich da
>einmal im
>>     Device Namen vertut, hat man sich wunderbar rausgesperrt und
>kommt nur
>>     seriell drauf um zu gucken was los ist oder?
>>
>>     Seh ich das soweit richtig? Wenn ja muss ich nochmal drüber
>schlafen ob
>>     mir das gefällt ;) In der Annahme das es eth0 immer gibt, macht
>es dann
>>     vllt. Sinn ein setupOnePort für den Rest auf eth0 zu werfen?
>Somit kommt
>>     man zumindest am Ende irgendwie wieder an die Geräte ran.
>>
>>     Gruß
>>
>>     Christian
>>
>>     On 22.04.19 14:35, Adrian Schmutzler wrote:
>>
>>         This removes the configurenetwork script and replaces it by
>>         some scripts run only during first boot. This introduces
>>         several changes: - The different tasks dealt with in
>>         configurenetwork are split. Thus, one script deals with
>>         switch/port setup, one with br-mesh MAC address, one with
>>         ETHMESHMAC, and one with IP addresses. This makes the whole
>>         approach more modular, compared to the monolithic
>>         configurenetwork. - Where configurenetwork contained
>>         sophisticated, nested conditions to account for all possible
>>         combinations of variables, the new approach is inspired by
>>         OpenWrt's board.d subfiles. Instead of defining variables, we
>>         now directly call function in a select-case. This is much
>more
>>         flexible, as we can just put code there for a special case
>>         instead of bending configurenetwork for it. - The select-case
>>         accounts for the various cases of similar/same parameters of
>>         multiple devices, which can be grouped now. - Scripts are run
>>         only at first boot. Later changes have to be done manually
>(we
>>         will provide some scripts later). Those will typically be
>>         limited to changing only the ports; no need to run whole
>>         network config again. - network.mode and network.config will
>>         disappear. For switch-based devices, there is no advantage of
>>         using network.config compared directly editing
>>         /etc/config/network. Upgrade-safety can be established by
>>         putting uci commands in an upgrade-safe script file (to be
>>         provided in a later patch). After this patch, show_info and
>>         the ports display in WebUI are broken. Those will be fixed in
>>         a later patch. Signed-off-by: Adrian Schmutzler
>>         <freifunk@adrianschmutzler.de>
>>        
>------------------------------------------------------------------------
>>         Changed in v2: - Fixed archer-c60-v2 to v1 - Added network
>>         functions file in uci-defaults/22c - Removed some -q from uci
>>         - Removed all commands only needed for running devices (this
>>         is uci only) - Added descriptions for functions in
>>         networksetup Changed in v3: - Changed order of 22a and 22b -
>>         uci del instead uci set for WAN on one-port - switch/vlanX
>>         instead of eth#/eth#.# for switch-based devices
>>        
>------------------------------------------------------------------------
>>         bsp/default/root_file_system/etc/rc.local | 4 -
>>         src/packages/fff/fff-network/Makefile | 4 +-
>>         .../files/etc/uci-defaults/22a-config-ports | 89 +++++++
>>         .../files/etc/uci-defaults/22b-config-routermac | 55 +++++
>>         .../files/etc/uci-defaults/22c-config-ethmesh | 75 ++++++
>>         .../files/etc/uci-defaults/23-config-ipaddr | 31 +++
>>         .../files/lib/functions/fff/networksetup | 163 +++++++++++++
>>         .../fff-network/files/lib/functions/fff/portorder | 31 +++
>>         .../fff-network/files/usr/sbin/configurenetwork | 263
>>         ---------------------
>src/packages/fff/fff-sysupgrade/Makefile
>>         | 3 +- .../files/etc/uci-defaults/99-fff-sysupgrade | 1 - 11
>>         files changed, 446 insertions(+), 273 deletions(-) create
>mode
>>         100644
>>        
>src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>>         create mode 100644
>>        
>src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>>         create mode 100644
>>        
>src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>>         create mode 100644
>>        
>src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>>         create mode 100644
>>        
>src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>         create mode 100644
>>        
>src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>         delete mode 100755
>>         src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>         diff --git a/bsp/default/root_file_system/etc/rc.local
>>         b/bsp/default/root_file_system/etc/rc.local index
>>         59042c37..e02368a5 100755 ---
>>         a/bsp/default/root_file_system/etc/rc.local +++
>>         b/bsp/default/root_file_system/etc/rc.local @@ -2,10 +2,6 @@
>#
>>         Put your custom commands here that should be executed once #
>>         the system init finished. By default this file does nothing.
>>         -/usr/sbin/configurenetwork - -sleep 3 -
>>         /usr/sbin/configurehood touch /tmp/started diff --git
>>         a/src/packages/fff/fff-network/Makefile
>>         b/src/packages/fff/fff-network/Makefile index
>>         e9335884..11796797 100644 ---
>>         a/src/packages/fff/fff-network/Makefile +++
>>         b/src/packages/fff/fff-network/Makefile @@ -1,8 +1,7 @@
>>         include $(TOPDIR)/rules.mk PKG_NAME:=fff-network
>>         -PKG_VERSION:=10 -PKG_RELEASE:=1 +PKG_RELEASE:=11
>>         PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) @@ -34,7 +33,6 @@
>>         endef define Package/$(PKG_NAME)/install $(CP) ./files/*
>$(1)/
>>         - test -d ./$(BOARD) && $(CP) ./$(BOARD)/* $(1)/etc/ endef
>>         $(eval $(call BuildPackage,$(PKG_NAME))) diff --git
>>        
>a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>>        
>b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>>         new file mode 100644 index 00000000..b8eaceab --- /dev/null
>>         +++
>>        
>b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>>         @@ -0,0 +1,89 @@ +#!/bin/sh +# Copyright 2019 Adrian
>>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
>>         board.model.name)" + +. /lib/functions/fff/networksetup +
>>         +case "$BOARD" in + archer-c7-v2) + setupSwitch "eth1" "4 5
>>         0t" "2 3 0t" "1 6" + setupWan "eth0" + ;; + archer-c25-v1|\ +
>>         archer-c60-v1) + setupSwitch "eth1" "1 2 0t" "3 4 0t" +
>>         setupWan "eth0" + ;; + cpe210|\ + cpe510) + # Default: LAN0:
>>         WAN, LAN1: CLIENT + setupSwitch "eth0" "0t 4" "0t" "0t 5" +
>>         setupWan "eth0.2" + ;; + gl-ar150) + # Default: CLIENT +
>>         setupSwitch "eth1" "0t 1" "0t" + setupWan "eth0" + ;; +
>>         tl-wdr3500-v1|\ + tl-wr741nd-v2|\ + tl-wr841-v7|\ +
>>         tl-wr841-v9|\ + tl-wr841-v10|\ + tl-wr841-v11|\ +
>>         tl-wr841-v12) + setupSwitch "eth0" "1 2 0t" "3 4 0t" +
>>         setupWan "eth1" + ;; + tl-wdr3600-v1|\ + tl-wdr4300-v1|\ +
>>         tl-wdr4310-v1|\ + tl-wdr4900-v1) + setupSwitch "eth0" "4 5
>0t"
>>         "2 3 0t" "1 0t" + setupWan "eth0.2" + ;; + tl-wr841-v8|\ +
>>         tl-wr842n-v2) + setupSwitch "eth1" "1 4 0t" "2 3 0t" +
>>         setupWan "eth0" + ;; + tl-wr740n-v4|\ + tl-wr740nd-v4|\ +
>>         tl-wr741nd-v4) + setupSwitch "eth0" "1 4 0t" "2 3 0t" +
>>         setupWan "eth1" + ;; + tl-wr1043nd-v1) + setupSwitch "eth0"
>"3
>>         4 5t" "1 2 5t" "0 5t" + setupWan "eth0.2" + ;; +
>>         tl-wr1043nd-v2|\ + tl-wr1043nd-v3) + setupSwitch "eth0" "1 2
>>         6t" "3 4 6t" "5 6t" + setupWan "eth0.2" + ;; +
>>         tl-wr1043nd-v4|\ + tl-wr1043n-v5) + setupSwitch "eth0" "1 2
>>         0t" "3 4 0t" "5 0t" + setupWan "eth0.2" + ;; + cpe210-v2|\ +
>>         cpe210-v3|\ + tl-mr3020-v1|\ + tl-wa850re-v1|\ +
>>         tl-wa860re-v1|\ + tl-wa901nd-v2|\ + ubnt-bullet-m|\ +
>>         ubnt-loco-m|\ + ubnt-loco-m-xw|\ + ubnt-nano-m|\ +
>>         ubnt-pico-m|\ + ubnt-power-m-xw|\ + ubnt-unifi|\ +
>>         ubnt-unifiac-lite|\ + ubnt-unifiac-mesh) + setupOnePort
>"eth0"
>>         "CLIENT" + ;; +esac diff --git
>>        
>a/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>>        
>b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>>         new file mode 100644 index 00000000..d1a5e50c --- /dev/null
>>         +++
>>        
>b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>>         @@ -0,0 +1,55 @@ +#!/bin/sh +# Copyright 2019 Adrian
>>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
>>         board.model.name)" + +. /lib/functions/fff/networksetup + +.
>>         /lib/functions.sh +. /lib/functions/system.sh + +case
>"$BOARD"
>>         in + archer-c7-v2|\ + tl-wr841-v8|\ + tl-wr842n-v2|\ +
>>         tl-wr1043nd-v2|\ + tl-wr1043nd-v3) + ROUTERMAC=$(cat
>>         /sys/class/net/eth1/address) + ;; + cpe210-v2|\ + cpe210-v3|\
>>         + tl-wa850re-v1|\ + tl-wa860re-v1|\ + tl-wa901nd-v2|\ +
>>         tl-wdr3500-v1|\ + tl-wr740n-v4|\ + tl-wr740nd-v4|\ +
>>         tl-wr741nd-v2|\ + tl-wr741nd-v4|\ + tl-wr841-v7|\ +
>>         ubnt-bullet-m|\ + ubnt-loco-m|\ + ubnt-loco-m-xw|\ +
>>         ubnt-nano-m|\ + ubnt-pico-m|\ + ubnt-power-m-xw|\ +
>>         ubnt-unifi) + ROUTERMAC=$(cat
>>         /sys/class/ieee80211/phy0/macaddress) + ;; + tl-wdr3600-v1|\
>+
>>         tl-wdr4300-v1|\ + tl-wdr4310-v1) + ROUTERMAC=$(cat
>>         /sys/class/ieee80211/phy1/macaddress) + ;; +
>>         ubnt-unifiac-lite|\ + ubnt-unifiac-mesh) +
>>         ROUTERMAC=$(mtd_get_mac_binary EEPROM 0x0) + ;; + *) +
>>         ROUTERMAC=$(cat /sys/class/net/eth0/address) + ;; +esac +
>+uci
>>         set "network.mesh.macaddr=$ROUTERMAC" +uci commit network
>diff
>>         --git
>>        
>a/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>>        
>b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>>         new file mode 100644 index 00000000..86c840c3 --- /dev/null
>>         +++
>>        
>b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>>         @@ -0,0 +1,75 @@ +#!/bin/sh +# Copyright 2019 Adrian
>>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
>>         board.model.name)" + +. /lib/functions/fff/network +.
>>         /lib/functions/fff/networksetup + +. /lib/functions.sh +.
>>         /lib/functions/system.sh + +# macFlipLocalBit: +# use mac
>>         address from phyX with 'locally administered' bit set to '1'
>>         +# only possible, because wXmesh is created first and
>>         therefore gets the 'universally administered address' + +case
>>         "$BOARD" in + archer-c7-v2|\ + tl-wr841-v8|\ + tl-wr842n-v2)
>+
>>         ETHMESHMAC=$(cat /sys/class/net/eth0/address) + ;; +
>>         archer-c25-v1|\ + archer-c60-v1|\ + tl-wr740n-v4|\ +
>>         tl-wr740nd-v4|\ + tl-wr741nd-v2|\ + tl-wr741nd-v4|\ +
>>         tl-wr841-v7|\ + tl-wr841-v9|\ + tl-wr841-v10|\ +
>>         tl-wr841-v11|\ + tl-wr841-v12) + ETHMESHMAC=$(cat
>>         /sys/class/net/eth1/address) + ;; + cpe210|\ + cpe210-v2|\ +
>>         cpe210-v3|\ + cpe510|\ + tl-wa850re-v1|\ + tl-wa860re-v1|\ +
>>         tl-wa901nd-v2|\ + tl-wr1043nd-v1|\ + ubnt-bullet-m|\ +
>>         ubnt-loco-m|\ + ubnt-loco-m-xw|\ + ubnt-nano-m|\ +
>>         ubnt-pico-m|\ + ubnt-power-m-xw|\ + ubnt-unifi) +
>>         ETHMESHMAC=$(macFlipLocalBit "$(cat
>>         /sys/class/ieee80211/phy0/macaddress)") + ;; + gl-ar150|\ +
>>         tl-mr3020-v1) + ETHMESHMAC=$(macFlipLocalBit "$(cat
>>         /sys/class/net/eth0/address)") + ;; + tl-wdr4900-v1) +
>>         ETHMESHMAC=$(macFlipLocalBit "$(cat
>>         /sys/class/ieee80211/phy1/macaddress)") + ;; +
>tl-wr1043nd-v4)
>>         + ETHMESHMAC=$(mtd_get_mac_binary config 0x1017c) + ;; +
>>         tl-wr1043n-v5) + ETHMESHMAC=$(macaddr_add
>$(mtd_get_mac_binary
>>         product-info 8) 1) + ;; + ubnt-unifiac-lite|\ +
>>         ubnt-unifiac-mesh) + ETHMESHMAC=$(macFlipLocalBit
>>         "$(mtd_get_mac_binary EEPROM 0x0)") + ;; +esac + +if [ -n
>>         "$ETHMESHMAC" ]; then + uci set
>>         "network.ethmesh.macaddr=$ETHMESHMAC" + uci commit network
>+fi
>>         diff --git
>>        
>a/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>>        
>b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>>         new file mode 100644 index 00000000..db500c15 --- /dev/null
>>         +++
>>        
>b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>>         @@ -0,0 +1,31 @@ +#!/bin/sh +# Copyright 2019 Adrian
>>         Schmutzler +# License GPLv3 + +. /lib/functions/fff/network +
>>         +echo "Setting IPv6 addresses" +# Some time needed :( +sleep
>5
>>         + +ROUTERMAC=$(uci get network.mesh.macaddr)
>>         +prefix="fdff:0::/64" + +# Set $prefix as prefix +uci set
>>         network.globals=globals +uci set
>>         "network.globals.ula_prefix=$prefix" + +# Set $prefix::MAC as
>>         IP +addr="$(ipMacAssemble "$prefix" "$ROUTERMAC")" +uci
>>         add_list "network.mesh.ip6addr=$addr" +uci set
>>         network.mesh.proto=static + +# Set $prefix::1 as IP
>>         +addr="$(ipAssemble "$prefix" "1")" +uci add_list
>>         "network.mesh.ip6addr=$addr" + +# Set $prefix::link-local as
>>         IP +addr="$(ipEUIAssemble "$prefix" "$ROUTERMAC")" +uci
>>         add_list "network.mesh.ip6addr=$addr" + +uci commit network
>>         diff --git
>>        
>a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>        
>b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>         new file mode 100644 index 00000000..ccc943df --- /dev/null
>>         +++
>>        
>b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>         @@ -0,0 +1,163 @@ +# Copyright 2019 Adrian Schmutzler +#
>>         License GPLv3 + +. /lib/functions/network.sh + +setAutoConf()
>>         { + # Sets ipv6 auto configuration on an interface to on/off
>+
>>         # Usage: setAutoConf <interface> <[0|1]> + local iface=$1 +
>>         local on=$2 + +
>>         sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf" + echo
>>         "# Generated from configurenetwork" > "$sysctlfile" + echo
>>         "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile" +
>echo
>>         "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >>
>"$sysctlfile"
>>         + echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >>
>>         "$sysctlfile" + echo "net.ipv6.conf.$iface.autoconf = $on" >>
>>         "$sysctlfile" + echo "net.ipv6.conf.$iface.accept_ra_rtr_pref
>>         = $on" >> "$sysctlfile" + echo
>>         "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile" + +
>>         /sbin/sysctl -p "$sysctlfile" +} + +enableAutoConf() { + #
>>         Enables ipv6 auto configuration on an interface + # Usage:
>>         enableAutoConf <interface> + local iface=$1 + + setAutoConf
>>         "$iface" "1" +} + +disableAutoConf() { + # Disables ipv6 auto
>>         configuration on an interface + # Usage: disableAutoConf
>>         <interface> + local iface=$1 + + setAutoConf "$iface" "0" +}
>+
>>         +fixMac() { + # Update MAC address on live device/interface +
>>         # + # fixMac <newmac> <interface> + # + # newmac: MAC address
>>         to be set + # interface: Interface to be updated as in uci
>>         (e.g. mesh) + + local newmac=$1 + local iface=$2 + local dev
>+
>>         + echo "Fixing MAC on $iface" + sleep 10 + +
>>         network_get_physdev dev "$iface" + + uci set
>>         "network.${iface}.macaddr=$newmac" + uci commit network + +
>if
>>         [ -n "$dev" ]; then + ip link set "$dev" down + ip link set
>>         "$dev" address "$newmac" + ip link set "$dev" up + fi + +
>>         /etc/init.d/network restart +} + +setupSwitch() { + # Set up
>>         switch for switch-based devices + # This is intended for
>>         initial setup, not for updates + # (changing ports will be
>>         sufficient then) + # + # Usage: setupSwitch <SWITCHDEV, e.g.
>>         eth0> <CLIENT_PORTS> <BATMAN_PORTS> [<WAN_PORTS>] + + local
>>         SWITCHDEV=$1 + local CLIENT_PORTS=$2 + local BATMAN_PORTS=$3
>+
>>         local WAN_PORTS=$4 + local SWITCHHW + + SWITCHHW="$(swconfig
>>         list | awk '{ print $4 }')" + + uci set
>>         "network.switch=switch" + uci set
>>         "network.switch.name=$SWITCHHW" + uci set
>>         "network.switch.enable=1" + uci set "network.switch.reset=1"
>+
>>         uci set "network.switch.enable_vlan=1" + + uci set
>>         "network.vlan1=switch_vlan" + uci set
>>         "network.vlan1.device=$SWITCHHW" + uci set
>>         "network.vlan1.vlan=1" + uci set
>>         "network.vlan1.ports=$CLIENT_PORTS" + + # This defines the
>>         VLAN for WAN ports inside the switch. + # This is required
>>         even if the WAN eth is separate, but the WAN port is in the
>>         switch! + if [ -n "$WAN_PORTS" ]; then + uci set
>>         "network.vlan2=switch_vlan" + uci set
>>         "network.vlan2.device=$SWITCHHW" + uci set
>>         "network.vlan2.vlan=2" + uci set
>>         "network.vlan2.ports=$WAN_PORTS" + fi + + uci set
>>         "network.vlan3=switch_vlan" + uci set
>>         "network.vlan3.device=$SWITCHHW" + uci set
>>         "network.vlan3.vlan=3" + uci set
>>         "network.vlan3.ports=$BATMAN_PORTS" + + uci set
>>         network.mesh.ifname="$SWITCHDEV.1 bat0" + uci set
>>         network.ethmesh.ifname="$SWITCHDEV.3" + + uci commit network
>>         +} + +setupWan() { + # Set up WAN for any device with
>>         dedicated port (no one-port where mode is changed) + # This
>is
>>         intended for initial setup, not for updates + # (updates are
>>         only possible by changing ports in a switch) + # + # Usage:
>>         setupWan <WANDEV, e.g. eth0, eth0.2> + + local WANDEV=$1 + +
>#
>>         This defines the WAN interface. We use the VLAN ID only if we
>>         do NOT have a separate eth. + # This is different from the
>>         criterion for the WAN port dealt with above! + # If the
>WANDEV
>>         is different from the SWITCHDEV, but the WAN port is in the
>>         switch, + # the WAN eth has to be connected to the switch
>>         untagged! + enableAutoConf "$WANDEV" + uci set
>>         network.wan.ifname="$WANDEV" + + uci commit network +} +
>>         +setupOnePort() { + # Set up port mode for one-port devices +
>>         # This is intended for initial setup and for updates + #
>>         (latter will require network restart) + # + # Usage:
>>         setupOnePort <DEV, e.g. eth0> <ETHMODE, e.g. BATMAN, CLIENT,
>>         WAN> + + local DEV=$1 + local ETHMODE=$2 + + uci set
>>         "network.$DEV=interface" + uci set "network.$DEV.ifname=$DEV"
>>         + if [ "$ETHMODE" = "WAN" ]; then + enableAutoConf "$DEV" +
>>         uci set network.mesh.ifname="bat0" + uci set
>>         network.wan.ifname="$DEV" + uci del network.ethmesh.ifname +
>>         elif [ "$ETHMODE" = "CLIENT" ] ; then + disableAutoConf
>"$DEV"
>>         + uci set network.mesh.ifname="bat0 $DEV" + uci del
>>         network.wan.ifname + uci del network.ethmesh.ifname + else #
>>         default=BATMAN + disableAutoConf "$DEV" + uci set
>>         network.mesh.ifname="bat0" + uci del network.wan.ifname + uci
>>         set network.ethmesh.ifname="$DEV" + fi + uci commit network
>+}
>>         diff --git
>>        
>a/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>        
>b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>         new file mode 100644 index 00000000..377c302f --- /dev/null
>>         +++
>>        
>b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>         @@ -0,0 +1,31 @@ +# Copyright 2019 Adrian Schmutzler +#
>>         License GPLv3 + +BOARD="$(uci get board.model.name)" + +case
>>         "$BOARD" in + archer-c25-v1|\ + archer-c60-v1|\ +
>>         tl-wr841-v10|\ + tl-wr841-v11|\ + tl-wr841-v12) +
>PORTORDER="4
>>         3 2 1" + ;; + cpe210|\ + cpe510) + PORTORDER="5 4" + ;; +
>>         gl-ar150) + PORTORDER="1" + ;; + tl-wdr4300-v1) +
>PORTORDER="1
>>         2 3 4 5" + ;; + tl-wr841-v8) + PORTORDER="2 3 4 1" + ;; +
>>         tl-wr1043nd-v4|\ + tl-wr1043n-v5) + PORTORDER="5 4 3 2 1" +
>;;
>>         +esac diff --git
>>        
>a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>        
>b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>         deleted file mode 100755 index 448bd04b..00000000 ---
>>        
>a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>         +++ /dev/null @@ -1,263 +0,0 @@ -#!/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 - -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 -} - -setAutoConf()
>>         { - # Sets ipv6 auto configuration on an interface to on/off
>-
>>         # Usage: setAutoConf <interface> <[0|1]> - local iface=$1 -
>>         local on=$2 - -
>>         sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf" - echo
>>         "# Generated from configurenetwork" > "$sysctlfile" - echo
>>         "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile" -
>echo
>>         "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >>
>"$sysctlfile"
>>         - echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >>
>>         "$sysctlfile" - echo "net.ipv6.conf.$iface.autoconf = $on" >>
>>         "$sysctlfile" - echo "net.ipv6.conf.$iface.accept_ra_rtr_pref
>>         = $on" >> "$sysctlfile" - echo
>>         "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile" - -
>>         /sbin/sysctl -p "$sysctlfile" -} - -enableAutoConf() { - #
>>         Enables ipv6 auto configuration on an interface - # Usage:
>>         enableAutoConf <interface> - local iface=$1 - - setAutoConf
>>         "$iface" "1" -} - -disableAutoConf() { - # Disables ipv6 auto
>>         configuration on an interface - # Usage: disableAutoConf
>>         <interface> - local iface=$1 - - setAutoConf "$iface" "0" -}
>-
>>         -BOARD="$(uci get board.model.name)" -. /etc/network.$BOARD -
>>         -if [ -s /etc/network.config ] ; then - . /etc/network.config
>>         -else - # Write network.config - 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 - 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 ! 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" - - 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" - - enableAutoConf
>>         "$WANDEV.2" - else - enableAutoConf "$WANDEV" - 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 -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 - enableAutoConf "$WANDEV" - 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 - disableAutoConf "$WANDEV" -
>>         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
>-
>>         disableAutoConf "$WANDEV" - 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 -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 network - -
>>         ifconfig $SWITCHDEV.3 down - ifconfig $SWITCHDEV.3 hw ether
>>         $ETHMESHMAC - 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
>>         network - - ifconfig br-mesh down - ifconfig br-mesh hw ether
>>         $ROUTERMAC - 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 network -
>>         ifconfig eth0 down - ifconfig eth0 hw ether $NEW_MACADDR -
>>         ifconfig eth0 up - /etc/init.d/network restart -fi - -if uci
>>         -q get "network.mesh.ip6addr" > /dev/null -then - echo "IPv6
>>         for mesh is set already" -else - echo "Setting IPv6
>addresses"
>>         - # 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"
>>         "$ROUTERMAC")" - 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"
>>         "$ROUTERMAC")" - 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 diff --git
>>         a/src/packages/fff/fff-sysupgrade/Makefile
>>         b/src/packages/fff/fff-sysupgrade/Makefile index
>>         90ef66af..0e6c08ec 100644 ---
>>         a/src/packages/fff/fff-sysupgrade/Makefile +++
>>         b/src/packages/fff/fff-sysupgrade/Makefile @@ -1,8 +1,7 @@
>>         include $(TOPDIR)/rules.mk PKG_NAME:=fff-sysupgrade
>>         -PKG_VERSION:=9 -PKG_RELEASE:=1 +PKG_RELEASE:=10
>>         PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git
>>        
>a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>>        
>b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>>         index 7ff83f54..f5783687 100644 ---
>>        
>a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>>         +++
>>        
>b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>>         @@ -7,7 +7,6 @@ cat > /etc/sysupgrade.conf <<-__EOF__
>>         /etc/dropbear/dropbear_dss_host_key
>>         /etc/dropbear/dropbear_rsa_host_key
>>         /etc/dropbear/authorized_keys -/etc/network.config
>>         /etc/config/fff /etc/hoodfile __EOF__ 
>>
>>
Robert Langhammer April 22, 2019, 8:48 p.m.
Hi Adrian,

das find ich gut. Mach noch einen Default in die case.

Bei 23-config-ipaddr sind noch die 5 Sekunden timeout drin. Wir machen
da doch nur uci- Zeugs. Ich denke, das braucht man nicht. Oder hast du
das getestet.

Robert


Am 22.04.19 um 18:17 schrieb Adrian Schmutzler:
> Jo, wir haben ja keine Eile.
>
> Tatsächlich neige ich inzwischen dazu, einfach wie vorgeschlagen den oneport als default zu setzen. Das ist so einfach und effektiv, das man das sogar doch noch in den Patch mit reinbauen könnte. So geht dann zumindest irgendein Port immer.
>
> Grüße
>
> Adrian
>
> On 22 April 2019 18:10:47 CEST, Christian Dresel <fff@chrisi01.de> wrote:
>> Hi
>>
>> lass mich mal ne Nacht drüber schlafen. Meine Erfahrung war bisher, je
>> weiter die Firmware fortgeschritten ist, umso umständlicher wurde es
>> neue devices ohne UART einzurichten weil man immer schwerer "hinten rum
>> irgendwie wieder drauf kam".
>>
>> Damit wirds jetzt dann praktisch nahezu unmöglich irgendwie auf das
>> Device zu kommen wenn der Name falsch ist. Gefällt mir nicht
>> sonderlich.
>>
>> Ansonsten gefällt mir das ganze aber sehr gut und hab so auch nix mehr
>> gefunden. Allerdings ist das genauso ein Patch, wo ich sehr sehr gerne
>> ein weiteres paar Augen drauf hätte
>>
>> Gruß
>>
>> Christian
>>
>> On 22.04.19 17:44, Adrian Schmutzler wrote:
>>> Hallo Christian,
>>>
>>> im Prinzip ist es dann ähnlich kaputt wie früher, wenn man keine
>>> network.devicename hatte.
>>>
>>> Man könnte aber durchaus überlegen, eine standardconfig per default
>>> case zu setzen, z. B. in diesem Fall einfach openwrt zu belassen.
>> Odre
>>> wie vorgeschlagen der OnePort (hab das jetzt nicht durcdgedacht).
>>>
>>> Dieses Thema hatte ich aber hier auch gar nicht bedacht, sondern habe
>>> mich wie zuvor mit configurenetwork in der Logik bewegt, dass nur
>>> eingerichtete Devices gehen.
>>> Ich bin auch der Meinung, dass wir einen solchen default case separat
>>> behandeln sollten und nicht hier noch reinmatschen.
>>>
>>> Beste Grüße
>>>
>>> Adrian
>>>
>>> On 22 April 2019 17:33:27 CEST, Christian Dresel <fff@chrisi01.de>
>> wrote:
>>>     hi
>>>
>>>     noch eine Frage zum Verständnis:
>>>
>>>     Wenn in 22a-config-ports ein Device fehlt, dann bekommt man ein
>> ziemlich
>>>     kaputtes Gerät raus oder?
>>>
>>>     Es wird dann nichts aufgerufen und am Ende sollte diese File dann
>> als
>>>     Network File dienen:
>>>
>>>    
>> https://github.com/FreifunkFranken/firmware/blob/master/src/packages/fff/fff-network/files/etc/config/network
>>>     damit geht dann vermutlich gar nix mehr an den Ethernets. Das
>> macht neue
>>>     Geräte einbinden ein bisschen umständlich, wenn man sich da
>> einmal im
>>>     Device Namen vertut, hat man sich wunderbar rausgesperrt und
>> kommt nur
>>>     seriell drauf um zu gucken was los ist oder?
>>>
>>>     Seh ich das soweit richtig? Wenn ja muss ich nochmal drüber
>> schlafen ob
>>>     mir das gefällt ;) In der Annahme das es eth0 immer gibt, macht
>> es dann
>>>     vllt. Sinn ein setupOnePort für den Rest auf eth0 zu werfen?
>> Somit kommt
>>>     man zumindest am Ende irgendwie wieder an die Geräte ran.
>>>
>>>     Gruß
>>>
>>>     Christian
>>>
>>>     On 22.04.19 14:35, Adrian Schmutzler wrote:
>>>
>>>         This removes the configurenetwork script and replaces it by
>>>         some scripts run only during first boot. This introduces
>>>         several changes: - The different tasks dealt with in
>>>         configurenetwork are split. Thus, one script deals with
>>>         switch/port setup, one with br-mesh MAC address, one with
>>>         ETHMESHMAC, and one with IP addresses. This makes the whole
>>>         approach more modular, compared to the monolithic
>>>         configurenetwork. - Where configurenetwork contained
>>>         sophisticated, nested conditions to account for all possible
>>>         combinations of variables, the new approach is inspired by
>>>         OpenWrt's board.d subfiles. Instead of defining variables, we
>>>         now directly call function in a select-case. This is much
>> more
>>>         flexible, as we can just put code there for a special case
>>>         instead of bending configurenetwork for it. - The select-case
>>>         accounts for the various cases of similar/same parameters of
>>>         multiple devices, which can be grouped now. - Scripts are run
>>>         only at first boot. Later changes have to be done manually
>> (we
>>>         will provide some scripts later). Those will typically be
>>>         limited to changing only the ports; no need to run whole
>>>         network config again. - network.mode and network.config will
>>>         disappear. For switch-based devices, there is no advantage of
>>>         using network.config compared directly editing
>>>         /etc/config/network. Upgrade-safety can be established by
>>>         putting uci commands in an upgrade-safe script file (to be
>>>         provided in a later patch). After this patch, show_info and
>>>         the ports display in WebUI are broken. Those will be fixed in
>>>         a later patch. Signed-off-by: Adrian Schmutzler
>>>         <freifunk@adrianschmutzler.de>
>>>        
>> ------------------------------------------------------------------------
>>>         Changed in v2: - Fixed archer-c60-v2 to v1 - Added network
>>>         functions file in uci-defaults/22c - Removed some -q from uci
>>>         - Removed all commands only needed for running devices (this
>>>         is uci only) - Added descriptions for functions in
>>>         networksetup Changed in v3: - Changed order of 22a and 22b -
>>>         uci del instead uci set for WAN on one-port - switch/vlanX
>>>         instead of eth#/eth#.# for switch-based devices
>>>        
>> ------------------------------------------------------------------------
>>>         bsp/default/root_file_system/etc/rc.local | 4 -
>>>         src/packages/fff/fff-network/Makefile | 4 +-
>>>         .../files/etc/uci-defaults/22a-config-ports | 89 +++++++
>>>         .../files/etc/uci-defaults/22b-config-routermac | 55 +++++
>>>         .../files/etc/uci-defaults/22c-config-ethmesh | 75 ++++++
>>>         .../files/etc/uci-defaults/23-config-ipaddr | 31 +++
>>>         .../files/lib/functions/fff/networksetup | 163 +++++++++++++
>>>         .../fff-network/files/lib/functions/fff/portorder | 31 +++
>>>         .../fff-network/files/usr/sbin/configurenetwork | 263
>>>         ---------------------
>> src/packages/fff/fff-sysupgrade/Makefile
>>>         | 3 +- .../files/etc/uci-defaults/99-fff-sysupgrade | 1 - 11
>>>         files changed, 446 insertions(+), 273 deletions(-) create
>> mode
>>>         100644
>>>        
>> src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>>>         create mode 100644
>>>        
>> src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>>>         create mode 100644
>>>        
>> src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>>>         create mode 100644
>>>        
>> src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>>>         create mode 100644
>>>        
>> src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>>         create mode 100644
>>>        
>> src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>>         delete mode 100755
>>>         src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>>         diff --git a/bsp/default/root_file_system/etc/rc.local
>>>         b/bsp/default/root_file_system/etc/rc.local index
>>>         59042c37..e02368a5 100755 ---
>>>         a/bsp/default/root_file_system/etc/rc.local +++
>>>         b/bsp/default/root_file_system/etc/rc.local @@ -2,10 +2,6 @@
>> #
>>>         Put your custom commands here that should be executed once #
>>>         the system init finished. By default this file does nothing.
>>>         -/usr/sbin/configurenetwork - -sleep 3 -
>>>         /usr/sbin/configurehood touch /tmp/started diff --git
>>>         a/src/packages/fff/fff-network/Makefile
>>>         b/src/packages/fff/fff-network/Makefile index
>>>         e9335884..11796797 100644 ---
>>>         a/src/packages/fff/fff-network/Makefile +++
>>>         b/src/packages/fff/fff-network/Makefile @@ -1,8 +1,7 @@
>>>         include $(TOPDIR)/rules.mk PKG_NAME:=fff-network
>>>         -PKG_VERSION:=10 -PKG_RELEASE:=1 +PKG_RELEASE:=11
>>>         PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) @@ -34,7 +33,6 @@
>>>         endef define Package/$(PKG_NAME)/install $(CP) ./files/*
>> $(1)/
>>>         - test -d ./$(BOARD) && $(CP) ./$(BOARD)/* $(1)/etc/ endef
>>>         $(eval $(call BuildPackage,$(PKG_NAME))) diff --git
>>>        
>> a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>>>        
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>>>         new file mode 100644 index 00000000..b8eaceab --- /dev/null
>>>         +++
>>>        
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>>>         @@ -0,0 +1,89 @@ +#!/bin/sh +# Copyright 2019 Adrian
>>>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
>>>         board.model.name)" + +. /lib/functions/fff/networksetup +
>>>         +case "$BOARD" in + archer-c7-v2) + setupSwitch "eth1" "4 5
>>>         0t" "2 3 0t" "1 6" + setupWan "eth0" + ;; + archer-c25-v1|\ +
>>>         archer-c60-v1) + setupSwitch "eth1" "1 2 0t" "3 4 0t" +
>>>         setupWan "eth0" + ;; + cpe210|\ + cpe510) + # Default: LAN0:
>>>         WAN, LAN1: CLIENT + setupSwitch "eth0" "0t 4" "0t" "0t 5" +
>>>         setupWan "eth0.2" + ;; + gl-ar150) + # Default: CLIENT +
>>>         setupSwitch "eth1" "0t 1" "0t" + setupWan "eth0" + ;; +
>>>         tl-wdr3500-v1|\ + tl-wr741nd-v2|\ + tl-wr841-v7|\ +
>>>         tl-wr841-v9|\ + tl-wr841-v10|\ + tl-wr841-v11|\ +
>>>         tl-wr841-v12) + setupSwitch "eth0" "1 2 0t" "3 4 0t" +
>>>         setupWan "eth1" + ;; + tl-wdr3600-v1|\ + tl-wdr4300-v1|\ +
>>>         tl-wdr4310-v1|\ + tl-wdr4900-v1) + setupSwitch "eth0" "4 5
>> 0t"
>>>         "2 3 0t" "1 0t" + setupWan "eth0.2" + ;; + tl-wr841-v8|\ +
>>>         tl-wr842n-v2) + setupSwitch "eth1" "1 4 0t" "2 3 0t" +
>>>         setupWan "eth0" + ;; + tl-wr740n-v4|\ + tl-wr740nd-v4|\ +
>>>         tl-wr741nd-v4) + setupSwitch "eth0" "1 4 0t" "2 3 0t" +
>>>         setupWan "eth1" + ;; + tl-wr1043nd-v1) + setupSwitch "eth0"
>> "3
>>>         4 5t" "1 2 5t" "0 5t" + setupWan "eth0.2" + ;; +
>>>         tl-wr1043nd-v2|\ + tl-wr1043nd-v3) + setupSwitch "eth0" "1 2
>>>         6t" "3 4 6t" "5 6t" + setupWan "eth0.2" + ;; +
>>>         tl-wr1043nd-v4|\ + tl-wr1043n-v5) + setupSwitch "eth0" "1 2
>>>         0t" "3 4 0t" "5 0t" + setupWan "eth0.2" + ;; + cpe210-v2|\ +
>>>         cpe210-v3|\ + tl-mr3020-v1|\ + tl-wa850re-v1|\ +
>>>         tl-wa860re-v1|\ + tl-wa901nd-v2|\ + ubnt-bullet-m|\ +
>>>         ubnt-loco-m|\ + ubnt-loco-m-xw|\ + ubnt-nano-m|\ +
>>>         ubnt-pico-m|\ + ubnt-power-m-xw|\ + ubnt-unifi|\ +
>>>         ubnt-unifiac-lite|\ + ubnt-unifiac-mesh) + setupOnePort
>> "eth0"
>>>         "CLIENT" + ;; +esac diff --git
>>>        
>> a/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>>>        
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>>>         new file mode 100644 index 00000000..d1a5e50c --- /dev/null
>>>         +++
>>>        
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>>>         @@ -0,0 +1,55 @@ +#!/bin/sh +# Copyright 2019 Adrian
>>>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
>>>         board.model.name)" + +. /lib/functions/fff/networksetup + +.
>>>         /lib/functions.sh +. /lib/functions/system.sh + +case
>> "$BOARD"
>>>         in + archer-c7-v2|\ + tl-wr841-v8|\ + tl-wr842n-v2|\ +
>>>         tl-wr1043nd-v2|\ + tl-wr1043nd-v3) + ROUTERMAC=$(cat
>>>         /sys/class/net/eth1/address) + ;; + cpe210-v2|\ + cpe210-v3|\
>>>         + tl-wa850re-v1|\ + tl-wa860re-v1|\ + tl-wa901nd-v2|\ +
>>>         tl-wdr3500-v1|\ + tl-wr740n-v4|\ + tl-wr740nd-v4|\ +
>>>         tl-wr741nd-v2|\ + tl-wr741nd-v4|\ + tl-wr841-v7|\ +
>>>         ubnt-bullet-m|\ + ubnt-loco-m|\ + ubnt-loco-m-xw|\ +
>>>         ubnt-nano-m|\ + ubnt-pico-m|\ + ubnt-power-m-xw|\ +
>>>         ubnt-unifi) + ROUTERMAC=$(cat
>>>         /sys/class/ieee80211/phy0/macaddress) + ;; + tl-wdr3600-v1|\
>> +
>>>         tl-wdr4300-v1|\ + tl-wdr4310-v1) + ROUTERMAC=$(cat
>>>         /sys/class/ieee80211/phy1/macaddress) + ;; +
>>>         ubnt-unifiac-lite|\ + ubnt-unifiac-mesh) +
>>>         ROUTERMAC=$(mtd_get_mac_binary EEPROM 0x0) + ;; + *) +
>>>         ROUTERMAC=$(cat /sys/class/net/eth0/address) + ;; +esac +
>> +uci
>>>         set "network.mesh.macaddr=$ROUTERMAC" +uci commit network
>> diff
>>>         --git
>>>        
>> a/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>>>        
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>>>         new file mode 100644 index 00000000..86c840c3 --- /dev/null
>>>         +++
>>>        
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>>>         @@ -0,0 +1,75 @@ +#!/bin/sh +# Copyright 2019 Adrian
>>>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
>>>         board.model.name)" + +. /lib/functions/fff/network +.
>>>         /lib/functions/fff/networksetup + +. /lib/functions.sh +.
>>>         /lib/functions/system.sh + +# macFlipLocalBit: +# use mac
>>>         address from phyX with 'locally administered' bit set to '1'
>>>         +# only possible, because wXmesh is created first and
>>>         therefore gets the 'universally administered address' + +case
>>>         "$BOARD" in + archer-c7-v2|\ + tl-wr841-v8|\ + tl-wr842n-v2)
>> +
>>>         ETHMESHMAC=$(cat /sys/class/net/eth0/address) + ;; +
>>>         archer-c25-v1|\ + archer-c60-v1|\ + tl-wr740n-v4|\ +
>>>         tl-wr740nd-v4|\ + tl-wr741nd-v2|\ + tl-wr741nd-v4|\ +
>>>         tl-wr841-v7|\ + tl-wr841-v9|\ + tl-wr841-v10|\ +
>>>         tl-wr841-v11|\ + tl-wr841-v12) + ETHMESHMAC=$(cat
>>>         /sys/class/net/eth1/address) + ;; + cpe210|\ + cpe210-v2|\ +
>>>         cpe210-v3|\ + cpe510|\ + tl-wa850re-v1|\ + tl-wa860re-v1|\ +
>>>         tl-wa901nd-v2|\ + tl-wr1043nd-v1|\ + ubnt-bullet-m|\ +
>>>         ubnt-loco-m|\ + ubnt-loco-m-xw|\ + ubnt-nano-m|\ +
>>>         ubnt-pico-m|\ + ubnt-power-m-xw|\ + ubnt-unifi) +
>>>         ETHMESHMAC=$(macFlipLocalBit "$(cat
>>>         /sys/class/ieee80211/phy0/macaddress)") + ;; + gl-ar150|\ +
>>>         tl-mr3020-v1) + ETHMESHMAC=$(macFlipLocalBit "$(cat
>>>         /sys/class/net/eth0/address)") + ;; + tl-wdr4900-v1) +
>>>         ETHMESHMAC=$(macFlipLocalBit "$(cat
>>>         /sys/class/ieee80211/phy1/macaddress)") + ;; +
>> tl-wr1043nd-v4)
>>>         + ETHMESHMAC=$(mtd_get_mac_binary config 0x1017c) + ;; +
>>>         tl-wr1043n-v5) + ETHMESHMAC=$(macaddr_add
>> $(mtd_get_mac_binary
>>>         product-info 8) 1) + ;; + ubnt-unifiac-lite|\ +
>>>         ubnt-unifiac-mesh) + ETHMESHMAC=$(macFlipLocalBit
>>>         "$(mtd_get_mac_binary EEPROM 0x0)") + ;; +esac + +if [ -n
>>>         "$ETHMESHMAC" ]; then + uci set
>>>         "network.ethmesh.macaddr=$ETHMESHMAC" + uci commit network
>> +fi
>>>         diff --git
>>>        
>> a/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>>>        
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>>>         new file mode 100644 index 00000000..db500c15 --- /dev/null
>>>         +++
>>>        
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>>>         @@ -0,0 +1,31 @@ +#!/bin/sh +# Copyright 2019 Adrian
>>>         Schmutzler +# License GPLv3 + +. /lib/functions/fff/network +
>>>         +echo "Setting IPv6 addresses" +# Some time needed :( +sleep
>> 5
>>>         + +ROUTERMAC=$(uci get network.mesh.macaddr)
>>>         +prefix="fdff:0::/64" + +# Set $prefix as prefix +uci set
>>>         network.globals=globals +uci set
>>>         "network.globals.ula_prefix=$prefix" + +# Set $prefix::MAC as
>>>         IP +addr="$(ipMacAssemble "$prefix" "$ROUTERMAC")" +uci
>>>         add_list "network.mesh.ip6addr=$addr" +uci set
>>>         network.mesh.proto=static + +# Set $prefix::1 as IP
>>>         +addr="$(ipAssemble "$prefix" "1")" +uci add_list
>>>         "network.mesh.ip6addr=$addr" + +# Set $prefix::link-local as
>>>         IP +addr="$(ipEUIAssemble "$prefix" "$ROUTERMAC")" +uci
>>>         add_list "network.mesh.ip6addr=$addr" + +uci commit network
>>>         diff --git
>>>        
>> a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>>        
>> b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>>         new file mode 100644 index 00000000..ccc943df --- /dev/null
>>>         +++
>>>        
>> b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>>         @@ -0,0 +1,163 @@ +# Copyright 2019 Adrian Schmutzler +#
>>>         License GPLv3 + +. /lib/functions/network.sh + +setAutoConf()
>>>         { + # Sets ipv6 auto configuration on an interface to on/off
>> +
>>>         # Usage: setAutoConf <interface> <[0|1]> + local iface=$1 +
>>>         local on=$2 + +
>>>         sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf" + echo
>>>         "# Generated from configurenetwork" > "$sysctlfile" + echo
>>>         "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile" +
>> echo
>>>         "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >>
>> "$sysctlfile"
>>>         + echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >>
>>>         "$sysctlfile" + echo "net.ipv6.conf.$iface.autoconf = $on" >>
>>>         "$sysctlfile" + echo "net.ipv6.conf.$iface.accept_ra_rtr_pref
>>>         = $on" >> "$sysctlfile" + echo
>>>         "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile" + +
>>>         /sbin/sysctl -p "$sysctlfile" +} + +enableAutoConf() { + #
>>>         Enables ipv6 auto configuration on an interface + # Usage:
>>>         enableAutoConf <interface> + local iface=$1 + + setAutoConf
>>>         "$iface" "1" +} + +disableAutoConf() { + # Disables ipv6 auto
>>>         configuration on an interface + # Usage: disableAutoConf
>>>         <interface> + local iface=$1 + + setAutoConf "$iface" "0" +}
>> +
>>>         +fixMac() { + # Update MAC address on live device/interface +
>>>         # + # fixMac <newmac> <interface> + # + # newmac: MAC address
>>>         to be set + # interface: Interface to be updated as in uci
>>>         (e.g. mesh) + + local newmac=$1 + local iface=$2 + local dev
>> +
>>>         + echo "Fixing MAC on $iface" + sleep 10 + +
>>>         network_get_physdev dev "$iface" + + uci set
>>>         "network.${iface}.macaddr=$newmac" + uci commit network + +
>> if
>>>         [ -n "$dev" ]; then + ip link set "$dev" down + ip link set
>>>         "$dev" address "$newmac" + ip link set "$dev" up + fi + +
>>>         /etc/init.d/network restart +} + +setupSwitch() { + # Set up
>>>         switch for switch-based devices + # This is intended for
>>>         initial setup, not for updates + # (changing ports will be
>>>         sufficient then) + # + # Usage: setupSwitch <SWITCHDEV, e.g.
>>>         eth0> <CLIENT_PORTS> <BATMAN_PORTS> [<WAN_PORTS>] + + local
>>>         SWITCHDEV=$1 + local CLIENT_PORTS=$2 + local BATMAN_PORTS=$3
>> +
>>>         local WAN_PORTS=$4 + local SWITCHHW + + SWITCHHW="$(swconfig
>>>         list | awk '{ print $4 }')" + + uci set
>>>         "network.switch=switch" + uci set
>>>         "network.switch.name=$SWITCHHW" + uci set
>>>         "network.switch.enable=1" + uci set "network.switch.reset=1"
>> +
>>>         uci set "network.switch.enable_vlan=1" + + uci set
>>>         "network.vlan1=switch_vlan" + uci set
>>>         "network.vlan1.device=$SWITCHHW" + uci set
>>>         "network.vlan1.vlan=1" + uci set
>>>         "network.vlan1.ports=$CLIENT_PORTS" + + # This defines the
>>>         VLAN for WAN ports inside the switch. + # This is required
>>>         even if the WAN eth is separate, but the WAN port is in the
>>>         switch! + if [ -n "$WAN_PORTS" ]; then + uci set
>>>         "network.vlan2=switch_vlan" + uci set
>>>         "network.vlan2.device=$SWITCHHW" + uci set
>>>         "network.vlan2.vlan=2" + uci set
>>>         "network.vlan2.ports=$WAN_PORTS" + fi + + uci set
>>>         "network.vlan3=switch_vlan" + uci set
>>>         "network.vlan3.device=$SWITCHHW" + uci set
>>>         "network.vlan3.vlan=3" + uci set
>>>         "network.vlan3.ports=$BATMAN_PORTS" + + uci set
>>>         network.mesh.ifname="$SWITCHDEV.1 bat0" + uci set
>>>         network.ethmesh.ifname="$SWITCHDEV.3" + + uci commit network
>>>         +} + +setupWan() { + # Set up WAN for any device with
>>>         dedicated port (no one-port where mode is changed) + # This
>> is
>>>         intended for initial setup, not for updates + # (updates are
>>>         only possible by changing ports in a switch) + # + # Usage:
>>>         setupWan <WANDEV, e.g. eth0, eth0.2> + + local WANDEV=$1 + +
>> #
>>>         This defines the WAN interface. We use the VLAN ID only if we
>>>         do NOT have a separate eth. + # This is different from the
>>>         criterion for the WAN port dealt with above! + # If the
>> WANDEV
>>>         is different from the SWITCHDEV, but the WAN port is in the
>>>         switch, + # the WAN eth has to be connected to the switch
>>>         untagged! + enableAutoConf "$WANDEV" + uci set
>>>         network.wan.ifname="$WANDEV" + + uci commit network +} +
>>>         +setupOnePort() { + # Set up port mode for one-port devices +
>>>         # This is intended for initial setup and for updates + #
>>>         (latter will require network restart) + # + # Usage:
>>>         setupOnePort <DEV, e.g. eth0> <ETHMODE, e.g. BATMAN, CLIENT,
>>>         WAN> + + local DEV=$1 + local ETHMODE=$2 + + uci set
>>>         "network.$DEV=interface" + uci set "network.$DEV.ifname=$DEV"
>>>         + if [ "$ETHMODE" = "WAN" ]; then + enableAutoConf "$DEV" +
>>>         uci set network.mesh.ifname="bat0" + uci set
>>>         network.wan.ifname="$DEV" + uci del network.ethmesh.ifname +
>>>         elif [ "$ETHMODE" = "CLIENT" ] ; then + disableAutoConf
>> "$DEV"
>>>         + uci set network.mesh.ifname="bat0 $DEV" + uci del
>>>         network.wan.ifname + uci del network.ethmesh.ifname + else #
>>>         default=BATMAN + disableAutoConf "$DEV" + uci set
>>>         network.mesh.ifname="bat0" + uci del network.wan.ifname + uci
>>>         set network.ethmesh.ifname="$DEV" + fi + uci commit network
>> +}
>>>         diff --git
>>>        
>> a/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>>        
>> b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>>         new file mode 100644 index 00000000..377c302f --- /dev/null
>>>         +++
>>>        
>> b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>>         @@ -0,0 +1,31 @@ +# Copyright 2019 Adrian Schmutzler +#
>>>         License GPLv3 + +BOARD="$(uci get board.model.name)" + +case
>>>         "$BOARD" in + archer-c25-v1|\ + archer-c60-v1|\ +
>>>         tl-wr841-v10|\ + tl-wr841-v11|\ + tl-wr841-v12) +
>> PORTORDER="4
>>>         3 2 1" + ;; + cpe210|\ + cpe510) + PORTORDER="5 4" + ;; +
>>>         gl-ar150) + PORTORDER="1" + ;; + tl-wdr4300-v1) +
>> PORTORDER="1
>>>         2 3 4 5" + ;; + tl-wr841-v8) + PORTORDER="2 3 4 1" + ;; +
>>>         tl-wr1043nd-v4|\ + tl-wr1043n-v5) + PORTORDER="5 4 3 2 1" +
>> ;;
>>>         +esac diff --git
>>>        
>> a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>>        
>> b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>>         deleted file mode 100755 index 448bd04b..00000000 ---
>>>        
>> a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>>         +++ /dev/null @@ -1,263 +0,0 @@ -#!/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 - -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 -} - -setAutoConf()
>>>         { - # Sets ipv6 auto configuration on an interface to on/off
>> -
>>>         # Usage: setAutoConf <interface> <[0|1]> - local iface=$1 -
>>>         local on=$2 - -
>>>         sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf" - echo
>>>         "# Generated from configurenetwork" > "$sysctlfile" - echo
>>>         "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile" -
>> echo
>>>         "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >>
>> "$sysctlfile"
>>>         - echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >>
>>>         "$sysctlfile" - echo "net.ipv6.conf.$iface.autoconf = $on" >>
>>>         "$sysctlfile" - echo "net.ipv6.conf.$iface.accept_ra_rtr_pref
>>>         = $on" >> "$sysctlfile" - echo
>>>         "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile" - -
>>>         /sbin/sysctl -p "$sysctlfile" -} - -enableAutoConf() { - #
>>>         Enables ipv6 auto configuration on an interface - # Usage:
>>>         enableAutoConf <interface> - local iface=$1 - - setAutoConf
>>>         "$iface" "1" -} - -disableAutoConf() { - # Disables ipv6 auto
>>>         configuration on an interface - # Usage: disableAutoConf
>>>         <interface> - local iface=$1 - - setAutoConf "$iface" "0" -}
>> -
>>>         -BOARD="$(uci get board.model.name)" -. /etc/network.$BOARD -
>>>         -if [ -s /etc/network.config ] ; then - . /etc/network.config
>>>         -else - # Write network.config - 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 - 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 ! 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" - - 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" - - enableAutoConf
>>>         "$WANDEV.2" - else - enableAutoConf "$WANDEV" - 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 -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 - enableAutoConf "$WANDEV" - 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 - disableAutoConf "$WANDEV" -
>>>         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
>> -
>>>         disableAutoConf "$WANDEV" - 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 -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 network - -
>>>         ifconfig $SWITCHDEV.3 down - ifconfig $SWITCHDEV.3 hw ether
>>>         $ETHMESHMAC - 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
>>>         network - - ifconfig br-mesh down - ifconfig br-mesh hw ether
>>>         $ROUTERMAC - 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 network -
>>>         ifconfig eth0 down - ifconfig eth0 hw ether $NEW_MACADDR -
>>>         ifconfig eth0 up - /etc/init.d/network restart -fi - -if uci
>>>         -q get "network.mesh.ip6addr" > /dev/null -then - echo "IPv6
>>>         for mesh is set already" -else - echo "Setting IPv6
>> addresses"
>>>         - # 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"
>>>         "$ROUTERMAC")" - 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"
>>>         "$ROUTERMAC")" - 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 diff --git
>>>         a/src/packages/fff/fff-sysupgrade/Makefile
>>>         b/src/packages/fff/fff-sysupgrade/Makefile index
>>>         90ef66af..0e6c08ec 100644 ---
>>>         a/src/packages/fff/fff-sysupgrade/Makefile +++
>>>         b/src/packages/fff/fff-sysupgrade/Makefile @@ -1,8 +1,7 @@
>>>         include $(TOPDIR)/rules.mk PKG_NAME:=fff-sysupgrade
>>>         -PKG_VERSION:=9 -PKG_RELEASE:=1 +PKG_RELEASE:=10
>>>         PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git
>>>        
>> a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>>>        
>> b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>>>         index 7ff83f54..f5783687 100644 ---
>>>        
>> a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>>>         +++
>>>        
>> b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>>>         @@ -7,7 +7,6 @@ cat > /etc/sysupgrade.conf <<-__EOF__
>>>         /etc/dropbear/dropbear_dss_host_key
>>>         /etc/dropbear/dropbear_rsa_host_key
>>>         /etc/dropbear/authorized_keys -/etc/network.config
>>>         /etc/config/fff /etc/hoodfile __EOF__ 
>>>
>>>
Adrian Schmutzler April 22, 2019, 9:08 p.m.
Hallo Robert,

okay, dann kommt hier ein oneport als default rein.

+	*)
+		# Fallback for new or incorrectly named devices
+		setupOnePort "eth0" "CLIENT"
+		;;

Das mit dem sleep ist wahrscheinlich wirklich Quatsch, ich teste das mal und werfe es dann raus.

Grüße

Adrian

> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf
> Of robert
> Sent: Montag, 22. April 2019 22:48
> To: franken-dev@freifunk.net
> Subject: Re: [PATCH v3 03/14] fff-network: Reorganize network initialization
> 
> Hi Adrian,
> 
> das find ich gut. Mach noch einen Default in die case.
> 
> Bei 23-config-ipaddr sind noch die 5 Sekunden timeout drin. Wir machen da
> doch nur uci- Zeugs. Ich denke, das braucht man nicht. Oder hast du das
> getestet.
> 
> Robert
> 
> 
> Am 22.04.19 um 18:17 schrieb Adrian Schmutzler:
> > Jo, wir haben ja keine Eile.
> >
> > Tatsächlich neige ich inzwischen dazu, einfach wie vorgeschlagen den
> oneport als default zu setzen. Das ist so einfach und effektiv, das man das
> sogar doch noch in den Patch mit reinbauen könnte. So geht dann zumindest
> irgendein Port immer.
> >
> > Grüße
> >
> > Adrian
> >
> > On 22 April 2019 18:10:47 CEST, Christian Dresel <fff@chrisi01.de> wrote:
> >> Hi
> >>
> >> lass mich mal ne Nacht drüber schlafen. Meine Erfahrung war bisher,
> >> je weiter die Firmware fortgeschritten ist, umso umständlicher wurde
> >> es neue devices ohne UART einzurichten weil man immer schwerer
> >> "hinten rum irgendwie wieder drauf kam".
> >>
> >> Damit wirds jetzt dann praktisch nahezu unmöglich irgendwie auf das
> >> Device zu kommen wenn der Name falsch ist. Gefällt mir nicht
> >> sonderlich.
> >>
> >> Ansonsten gefällt mir das ganze aber sehr gut und hab so auch nix
> >> mehr gefunden. Allerdings ist das genauso ein Patch, wo ich sehr sehr
> >> gerne ein weiteres paar Augen drauf hätte
> >>
> >> Gruß
> >>
> >> Christian
> >>
> >> On 22.04.19 17:44, Adrian Schmutzler wrote:
> >>> Hallo Christian,
> >>>
> >>> im Prinzip ist es dann ähnlich kaputt wie früher, wenn man keine
> >>> network.devicename hatte.
> >>>
> >>> Man könnte aber durchaus überlegen, eine standardconfig per default
> >>> case zu setzen, z. B. in diesem Fall einfach openwrt zu belassen.
> >> Odre
> >>> wie vorgeschlagen der OnePort (hab das jetzt nicht durcdgedacht).
> >>>
> >>> Dieses Thema hatte ich aber hier auch gar nicht bedacht, sondern
> >>> habe mich wie zuvor mit configurenetwork in der Logik bewegt, dass
> >>> nur eingerichtete Devices gehen.
> >>> Ich bin auch der Meinung, dass wir einen solchen default case
> >>> separat behandeln sollten und nicht hier noch reinmatschen.
> >>>
> >>> Beste Grüße
> >>>
> >>> Adrian
> >>>
> >>> On 22 April 2019 17:33:27 CEST, Christian Dresel <fff@chrisi01.de>
> >> wrote:
> >>>     hi
> >>>
> >>>     noch eine Frage zum Verständnis:
> >>>
> >>>     Wenn in 22a-config-ports ein Device fehlt, dann bekommt man ein
> >> ziemlich
> >>>     kaputtes Gerät raus oder?
> >>>
> >>>     Es wird dann nichts aufgerufen und am Ende sollte diese File
> >>> dann
> >> als
> >>>     Network File dienen:
> >>>
> >>>
> >>
> https://github.com/FreifunkFranken/firmware/blob/master/src/packages/
> >> fff/fff-network/files/etc/config/network
> >>>     damit geht dann vermutlich gar nix mehr an den Ethernets. Das
> >> macht neue
> >>>     Geräte einbinden ein bisschen umständlich, wenn man sich da
> >> einmal im
> >>>     Device Namen vertut, hat man sich wunderbar rausgesperrt und
> >> kommt nur
> >>>     seriell drauf um zu gucken was los ist oder?
> >>>
> >>>     Seh ich das soweit richtig? Wenn ja muss ich nochmal drüber
> >> schlafen ob
> >>>     mir das gefällt ;) In der Annahme das es eth0 immer gibt, macht
> >> es dann
> >>>     vllt. Sinn ein setupOnePort für den Rest auf eth0 zu werfen?
> >> Somit kommt
> >>>     man zumindest am Ende irgendwie wieder an die Geräte ran.
> >>>
> >>>     Gruß
> >>>
> >>>     Christian
> >>>
> >>>     On 22.04.19 14:35, Adrian Schmutzler wrote:
> >>>
> >>>         This removes the configurenetwork script and replaces it by
> >>>         some scripts run only during first boot. This introduces
> >>>         several changes: - The different tasks dealt with in
> >>>         configurenetwork are split. Thus, one script deals with
> >>>         switch/port setup, one with br-mesh MAC address, one with
> >>>         ETHMESHMAC, and one with IP addresses. This makes the whole
> >>>         approach more modular, compared to the monolithic
> >>>         configurenetwork. - Where configurenetwork contained
> >>>         sophisticated, nested conditions to account for all possible
> >>>         combinations of variables, the new approach is inspired by
> >>>         OpenWrt's board.d subfiles. Instead of defining variables, we
> >>>         now directly call function in a select-case. This is much
> >> more
> >>>         flexible, as we can just put code there for a special case
> >>>         instead of bending configurenetwork for it. - The select-case
> >>>         accounts for the various cases of similar/same parameters of
> >>>         multiple devices, which can be grouped now. - Scripts are run
> >>>         only at first boot. Later changes have to be done manually
> >> (we
> >>>         will provide some scripts later). Those will typically be
> >>>         limited to changing only the ports; no need to run whole
> >>>         network config again. - network.mode and network.config will
> >>>         disappear. For switch-based devices, there is no advantage of
> >>>         using network.config compared directly editing
> >>>         /etc/config/network. Upgrade-safety can be established by
> >>>         putting uci commands in an upgrade-safe script file (to be
> >>>         provided in a later patch). After this patch, show_info and
> >>>         the ports display in WebUI are broken. Those will be fixed in
> >>>         a later patch. Signed-off-by: Adrian Schmutzler
> >>>         <freifunk@adrianschmutzler.de>
> >>>
> >> ---------------------------------------------------------------------
> >> ---
> >>>         Changed in v2: - Fixed archer-c60-v2 to v1 - Added network
> >>>         functions file in uci-defaults/22c - Removed some -q from uci
> >>>         - Removed all commands only needed for running devices (this
> >>>         is uci only) - Added descriptions for functions in
> >>>         networksetup Changed in v3: - Changed order of 22a and 22b -
> >>>         uci del instead uci set for WAN on one-port - switch/vlanX
> >>>         instead of eth#/eth#.# for switch-based devices
> >>>
> >> ---------------------------------------------------------------------
> >> ---
> >>>         bsp/default/root_file_system/etc/rc.local | 4 -
> >>>         src/packages/fff/fff-network/Makefile | 4 +-
> >>>         .../files/etc/uci-defaults/22a-config-ports | 89 +++++++
> >>>         .../files/etc/uci-defaults/22b-config-routermac | 55 +++++
> >>>         .../files/etc/uci-defaults/22c-config-ethmesh | 75 ++++++
> >>>         .../files/etc/uci-defaults/23-config-ipaddr | 31 +++
> >>>         .../files/lib/functions/fff/networksetup | 163 +++++++++++++
> >>>         .../fff-network/files/lib/functions/fff/portorder | 31 +++
> >>>         .../fff-network/files/usr/sbin/configurenetwork | 263
> >>>         ---------------------
> >> src/packages/fff/fff-sysupgrade/Makefile
> >>>         | 3 +- .../files/etc/uci-defaults/99-fff-sysupgrade | 1 - 11
> >>>         files changed, 446 insertions(+), 273 deletions(-) create
> >> mode
> >>>         100644
> >>>
> >> src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
> >>>         create mode 100644
> >>>
> >> src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-router
> >> mac
> >>>         create mode 100644
> >>>
> >> src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmes
> >> h
> >>>         create mode 100644
> >>>
> >> src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
> >>>         create mode 100644
> >>>
> >> src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> >>>         create mode 100644
> >>>
> >> src/packages/fff/fff-network/files/lib/functions/fff/portorder
> >>>         delete mode 100755
> >>>         src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> >>>         diff --git a/bsp/default/root_file_system/etc/rc.local
> >>>         b/bsp/default/root_file_system/etc/rc.local index
> >>>         59042c37..e02368a5 100755 ---
> >>>         a/bsp/default/root_file_system/etc/rc.local +++
> >>>         b/bsp/default/root_file_system/etc/rc.local @@ -2,10 +2,6 @@
> >> #
> >>>         Put your custom commands here that should be executed once #
> >>>         the system init finished. By default this file does nothing.
> >>>         -/usr/sbin/configurenetwork - -sleep 3 -
> >>>         /usr/sbin/configurehood touch /tmp/started diff --git
> >>>         a/src/packages/fff/fff-network/Makefile
> >>>         b/src/packages/fff/fff-network/Makefile index
> >>>         e9335884..11796797 100644 ---
> >>>         a/src/packages/fff/fff-network/Makefile +++
> >>>         b/src/packages/fff/fff-network/Makefile @@ -1,8 +1,7 @@
> >>>         include $(TOPDIR)/rules.mk PKG_NAME:=fff-network
> >>>         -PKG_VERSION:=10 -PKG_RELEASE:=1 +PKG_RELEASE:=11
> >>>         PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) @@ -34,7 +33,6 @@
> >>>         endef define Package/$(PKG_NAME)/install $(CP) ./files/*
> >> $(1)/
> >>>         - test -d ./$(BOARD) && $(CP) ./$(BOARD)/* $(1)/etc/ endef
> >>>         $(eval $(call BuildPackage,$(PKG_NAME))) diff --git
> >>>
> >> a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-port
> >> s
> >>>
> >> b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-port
> >> s
> >>>         new file mode 100644 index 00000000..b8eaceab --- /dev/null
> >>>         +++
> >>>
> >> b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-port
> >> s
> >>>         @@ -0,0 +1,89 @@ +#!/bin/sh +# Copyright 2019 Adrian
> >>>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
> >>>         board.model.name)" + +. /lib/functions/fff/networksetup +
> >>>         +case "$BOARD" in + archer-c7-v2) + setupSwitch "eth1" "4 5
> >>>         0t" "2 3 0t" "1 6" + setupWan "eth0" + ;; + archer-c25-v1|\ +
> >>>         archer-c60-v1) + setupSwitch "eth1" "1 2 0t" "3 4 0t" +
> >>>         setupWan "eth0" + ;; + cpe210|\ + cpe510) + # Default: LAN0:
> >>>         WAN, LAN1: CLIENT + setupSwitch "eth0" "0t 4" "0t" "0t 5" +
> >>>         setupWan "eth0.2" + ;; + gl-ar150) + # Default: CLIENT +
> >>>         setupSwitch "eth1" "0t 1" "0t" + setupWan "eth0" + ;; +
> >>>         tl-wdr3500-v1|\ + tl-wr741nd-v2|\ + tl-wr841-v7|\ +
> >>>         tl-wr841-v9|\ + tl-wr841-v10|\ + tl-wr841-v11|\ +
> >>>         tl-wr841-v12) + setupSwitch "eth0" "1 2 0t" "3 4 0t" +
> >>>         setupWan "eth1" + ;; + tl-wdr3600-v1|\ + tl-wdr4300-v1|\ +
> >>>         tl-wdr4310-v1|\ + tl-wdr4900-v1) + setupSwitch "eth0" "4 5
> >> 0t"
> >>>         "2 3 0t" "1 0t" + setupWan "eth0.2" + ;; + tl-wr841-v8|\ +
> >>>         tl-wr842n-v2) + setupSwitch "eth1" "1 4 0t" "2 3 0t" +
> >>>         setupWan "eth0" + ;; + tl-wr740n-v4|\ + tl-wr740nd-v4|\ +
> >>>         tl-wr741nd-v4) + setupSwitch "eth0" "1 4 0t" "2 3 0t" +
> >>>         setupWan "eth1" + ;; + tl-wr1043nd-v1) + setupSwitch "eth0"
> >> "3
> >>>         4 5t" "1 2 5t" "0 5t" + setupWan "eth0.2" + ;; +
> >>>         tl-wr1043nd-v2|\ + tl-wr1043nd-v3) + setupSwitch "eth0" "1 2
> >>>         6t" "3 4 6t" "5 6t" + setupWan "eth0.2" + ;; +
> >>>         tl-wr1043nd-v4|\ + tl-wr1043n-v5) + setupSwitch "eth0" "1 2
> >>>         0t" "3 4 0t" "5 0t" + setupWan "eth0.2" + ;; + cpe210-v2|\ +
> >>>         cpe210-v3|\ + tl-mr3020-v1|\ + tl-wa850re-v1|\ +
> >>>         tl-wa860re-v1|\ + tl-wa901nd-v2|\ + ubnt-bullet-m|\ +
> >>>         ubnt-loco-m|\ + ubnt-loco-m-xw|\ + ubnt-nano-m|\ +
> >>>         ubnt-pico-m|\ + ubnt-power-m-xw|\ + ubnt-unifi|\ +
> >>>         ubnt-unifiac-lite|\ + ubnt-unifiac-mesh) + setupOnePort
> >> "eth0"
> >>>         "CLIENT" + ;; +esac diff --git
> >>>
> >> a/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-rout
> >> ermac
> >>>
> >> b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-rout
> >> ermac
> >>>         new file mode 100644 index 00000000..d1a5e50c --- /dev/null
> >>>         +++
> >>>
> >> b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-rout
> >> ermac
> >>>         @@ -0,0 +1,55 @@ +#!/bin/sh +# Copyright 2019 Adrian
> >>>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
> >>>         board.model.name)" + +. /lib/functions/fff/networksetup + +.
> >>>         /lib/functions.sh +. /lib/functions/system.sh + +case
> >> "$BOARD"
> >>>         in + archer-c7-v2|\ + tl-wr841-v8|\ + tl-wr842n-v2|\ +
> >>>         tl-wr1043nd-v2|\ + tl-wr1043nd-v3) + ROUTERMAC=$(cat
> >>>         /sys/class/net/eth1/address) + ;; + cpe210-v2|\ + cpe210-v3|\
> >>>         + tl-wa850re-v1|\ + tl-wa860re-v1|\ + tl-wa901nd-v2|\ +
> >>>         tl-wdr3500-v1|\ + tl-wr740n-v4|\ + tl-wr740nd-v4|\ +
> >>>         tl-wr741nd-v2|\ + tl-wr741nd-v4|\ + tl-wr841-v7|\ +
> >>>         ubnt-bullet-m|\ + ubnt-loco-m|\ + ubnt-loco-m-xw|\ +
> >>>         ubnt-nano-m|\ + ubnt-pico-m|\ + ubnt-power-m-xw|\ +
> >>>         ubnt-unifi) + ROUTERMAC=$(cat
> >>>         /sys/class/ieee80211/phy0/macaddress) + ;; + tl-wdr3600-v1|\
> >> +
> >>>         tl-wdr4300-v1|\ + tl-wdr4310-v1) + ROUTERMAC=$(cat
> >>>         /sys/class/ieee80211/phy1/macaddress) + ;; +
> >>>         ubnt-unifiac-lite|\ + ubnt-unifiac-mesh) +
> >>>         ROUTERMAC=$(mtd_get_mac_binary EEPROM 0x0) + ;; + *) +
> >>>         ROUTERMAC=$(cat /sys/class/net/eth0/address) + ;; +esac +
> >> +uci
> >>>         set "network.mesh.macaddr=$ROUTERMAC" +uci commit network
> >> diff
> >>>         --git
> >>>
> >> a/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethm
> >> esh
> >>>
> >> b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethm
> >> esh
> >>>         new file mode 100644 index 00000000..86c840c3 --- /dev/null
> >>>         +++
> >>>
> >> b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethm
> >> esh
> >>>         @@ -0,0 +1,75 @@ +#!/bin/sh +# Copyright 2019 Adrian
> >>>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
> >>>         board.model.name)" + +. /lib/functions/fff/network +.
> >>>         /lib/functions/fff/networksetup + +. /lib/functions.sh +.
> >>>         /lib/functions/system.sh + +# macFlipLocalBit: +# use mac
> >>>         address from phyX with 'locally administered' bit set to '1'
> >>>         +# only possible, because wXmesh is created first and
> >>>         therefore gets the 'universally administered address' + +case
> >>>         "$BOARD" in + archer-c7-v2|\ + tl-wr841-v8|\ + tl-wr842n-v2)
> >> +
> >>>         ETHMESHMAC=$(cat /sys/class/net/eth0/address) + ;; +
> >>>         archer-c25-v1|\ + archer-c60-v1|\ + tl-wr740n-v4|\ +
> >>>         tl-wr740nd-v4|\ + tl-wr741nd-v2|\ + tl-wr741nd-v4|\ +
> >>>         tl-wr841-v7|\ + tl-wr841-v9|\ + tl-wr841-v10|\ +
> >>>         tl-wr841-v11|\ + tl-wr841-v12) + ETHMESHMAC=$(cat
> >>>         /sys/class/net/eth1/address) + ;; + cpe210|\ + cpe210-v2|\ +
> >>>         cpe210-v3|\ + cpe510|\ + tl-wa850re-v1|\ + tl-wa860re-v1|\ +
> >>>         tl-wa901nd-v2|\ + tl-wr1043nd-v1|\ + ubnt-bullet-m|\ +
> >>>         ubnt-loco-m|\ + ubnt-loco-m-xw|\ + ubnt-nano-m|\ +
> >>>         ubnt-pico-m|\ + ubnt-power-m-xw|\ + ubnt-unifi) +
> >>>         ETHMESHMAC=$(macFlipLocalBit "$(cat
> >>>         /sys/class/ieee80211/phy0/macaddress)") + ;; + gl-ar150|\ +
> >>>         tl-mr3020-v1) + ETHMESHMAC=$(macFlipLocalBit "$(cat
> >>>         /sys/class/net/eth0/address)") + ;; + tl-wdr4900-v1) +
> >>>         ETHMESHMAC=$(macFlipLocalBit "$(cat
> >>>         /sys/class/ieee80211/phy1/macaddress)") + ;; +
> >> tl-wr1043nd-v4)
> >>>         + ETHMESHMAC=$(mtd_get_mac_binary config 0x1017c) + ;; +
> >>>         tl-wr1043n-v5) + ETHMESHMAC=$(macaddr_add
> >> $(mtd_get_mac_binary
> >>>         product-info 8) 1) + ;; + ubnt-unifiac-lite|\ +
> >>>         ubnt-unifiac-mesh) + ETHMESHMAC=$(macFlipLocalBit
> >>>         "$(mtd_get_mac_binary EEPROM 0x0)") + ;; +esac + +if [ -n
> >>>         "$ETHMESHMAC" ]; then + uci set
> >>>         "network.ethmesh.macaddr=$ETHMESHMAC" + uci commit network
> >> +fi
> >>>         diff --git
> >>>
> >> a/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipadd
> >> r
> >>>
> >> b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipadd
> >> r
> >>>         new file mode 100644 index 00000000..db500c15 --- /dev/null
> >>>         +++
> >>>
> >> b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipadd
> >> r
> >>>         @@ -0,0 +1,31 @@ +#!/bin/sh +# Copyright 2019 Adrian
> >>>         Schmutzler +# License GPLv3 + +. /lib/functions/fff/network +
> >>>         +echo "Setting IPv6 addresses" +# Some time needed :( +sleep
> >> 5
> >>>         + +ROUTERMAC=$(uci get network.mesh.macaddr)
> >>>         +prefix="fdff:0::/64" + +# Set $prefix as prefix +uci set
> >>>         network.globals=globals +uci set
> >>>         "network.globals.ula_prefix=$prefix" + +# Set $prefix::MAC as
> >>>         IP +addr="$(ipMacAssemble "$prefix" "$ROUTERMAC")" +uci
> >>>         add_list "network.mesh.ip6addr=$addr" +uci set
> >>>         network.mesh.proto=static + +# Set $prefix::1 as IP
> >>>         +addr="$(ipAssemble "$prefix" "1")" +uci add_list
> >>>         "network.mesh.ip6addr=$addr" + +# Set $prefix::link-local as
> >>>         IP +addr="$(ipEUIAssemble "$prefix" "$ROUTERMAC")" +uci
> >>>         add_list "network.mesh.ip6addr=$addr" + +uci commit network
> >>>         diff --git
> >>>
> >> a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> >>>
> >> b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> >>>         new file mode 100644 index 00000000..ccc943df --- /dev/null
> >>>         +++
> >>>
> >> b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> >>>         @@ -0,0 +1,163 @@ +# Copyright 2019 Adrian Schmutzler +#
> >>>         License GPLv3 + +. /lib/functions/network.sh + +setAutoConf()
> >>>         { + # Sets ipv6 auto configuration on an interface to on/off
> >> +
> >>>         # Usage: setAutoConf <interface> <[0|1]> + local iface=$1 +
> >>>         local on=$2 + +
> >>>         sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf" + echo
> >>>         "# Generated from configurenetwork" > "$sysctlfile" + echo
> >>>         "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile" +
> >> echo
> >>>         "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >>
> >> "$sysctlfile"
> >>>         + echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >>
> >>>         "$sysctlfile" + echo "net.ipv6.conf.$iface.autoconf = $on" >>
> >>>         "$sysctlfile" + echo "net.ipv6.conf.$iface.accept_ra_rtr_pref
> >>>         = $on" >> "$sysctlfile" + echo
> >>>         "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile" + +
> >>>         /sbin/sysctl -p "$sysctlfile" +} + +enableAutoConf() { + #
> >>>         Enables ipv6 auto configuration on an interface + # Usage:
> >>>         enableAutoConf <interface> + local iface=$1 + + setAutoConf
> >>>         "$iface" "1" +} + +disableAutoConf() { + # Disables ipv6 auto
> >>>         configuration on an interface + # Usage: disableAutoConf
> >>>         <interface> + local iface=$1 + + setAutoConf "$iface" "0" +}
> >> +
> >>>         +fixMac() { + # Update MAC address on live device/interface +
> >>>         # + # fixMac <newmac> <interface> + # + # newmac: MAC address
> >>>         to be set + # interface: Interface to be updated as in uci
> >>>         (e.g. mesh) + + local newmac=$1 + local iface=$2 + local dev
> >> +
> >>>         + echo "Fixing MAC on $iface" + sleep 10 + +
> >>>         network_get_physdev dev "$iface" + + uci set
> >>>         "network.${iface}.macaddr=$newmac" + uci commit network + +
> >> if
> >>>         [ -n "$dev" ]; then + ip link set "$dev" down + ip link set
> >>>         "$dev" address "$newmac" + ip link set "$dev" up + fi + +
> >>>         /etc/init.d/network restart +} + +setupSwitch() { + # Set up
> >>>         switch for switch-based devices + # This is intended for
> >>>         initial setup, not for updates + # (changing ports will be
> >>>         sufficient then) + # + # Usage: setupSwitch <SWITCHDEV, e.g.
> >>>         eth0> <CLIENT_PORTS> <BATMAN_PORTS> [<WAN_PORTS>] + +
> local
> >>>         SWITCHDEV=$1 + local CLIENT_PORTS=$2 + local
> BATMAN_PORTS=$3
> >> +
> >>>         local WAN_PORTS=$4 + local SWITCHHW + +
> SWITCHHW="$(swconfig
> >>>         list | awk '{ print $4 }')" + + uci set
> >>>         "network.switch=switch" + uci set
> >>>         "network.switch.name=$SWITCHHW" + uci set
> >>>         "network.switch.enable=1" + uci set "network.switch.reset=1"
> >> +
> >>>         uci set "network.switch.enable_vlan=1" + + uci set
> >>>         "network.vlan1=switch_vlan" + uci set
> >>>         "network.vlan1.device=$SWITCHHW" + uci set
> >>>         "network.vlan1.vlan=1" + uci set
> >>>         "network.vlan1.ports=$CLIENT_PORTS" + + # This defines the
> >>>         VLAN for WAN ports inside the switch. + # This is required
> >>>         even if the WAN eth is separate, but the WAN port is in the
> >>>         switch! + if [ -n "$WAN_PORTS" ]; then + uci set
> >>>         "network.vlan2=switch_vlan" + uci set
> >>>         "network.vlan2.device=$SWITCHHW" + uci set
> >>>         "network.vlan2.vlan=2" + uci set
> >>>         "network.vlan2.ports=$WAN_PORTS" + fi + + uci set
> >>>         "network.vlan3=switch_vlan" + uci set
> >>>         "network.vlan3.device=$SWITCHHW" + uci set
> >>>         "network.vlan3.vlan=3" + uci set
> >>>         "network.vlan3.ports=$BATMAN_PORTS" + + uci set
> >>>         network.mesh.ifname="$SWITCHDEV.1 bat0" + uci set
> >>>         network.ethmesh.ifname="$SWITCHDEV.3" + + uci commit network
> >>>         +} + +setupWan() { + # Set up WAN for any device with
> >>>         dedicated port (no one-port where mode is changed) + # This
> >> is
> >>>         intended for initial setup, not for updates + # (updates are
> >>>         only possible by changing ports in a switch) + # + # Usage:
> >>>         setupWan <WANDEV, e.g. eth0, eth0.2> + + local WANDEV=$1 + +
> >> #
> >>>         This defines the WAN interface. We use the VLAN ID only if we
> >>>         do NOT have a separate eth. + # This is different from the
> >>>         criterion for the WAN port dealt with above! + # If the
> >> WANDEV
> >>>         is different from the SWITCHDEV, but the WAN port is in the
> >>>         switch, + # the WAN eth has to be connected to the switch
> >>>         untagged! + enableAutoConf "$WANDEV" + uci set
> >>>         network.wan.ifname="$WANDEV" + + uci commit network +} +
> >>>         +setupOnePort() { + # Set up port mode for one-port devices +
> >>>         # This is intended for initial setup and for updates + #
> >>>         (latter will require network restart) + # + # Usage:
> >>>         setupOnePort <DEV, e.g. eth0> <ETHMODE, e.g. BATMAN, CLIENT,
> >>>         WAN> + + local DEV=$1 + local ETHMODE=$2 + + uci set
> >>>         "network.$DEV=interface" + uci set "network.$DEV.ifname=$DEV"
> >>>         + if [ "$ETHMODE" = "WAN" ]; then + enableAutoConf "$DEV" +
> >>>         uci set network.mesh.ifname="bat0" + uci set
> >>>         network.wan.ifname="$DEV" + uci del network.ethmesh.ifname +
> >>>         elif [ "$ETHMODE" = "CLIENT" ] ; then + disableAutoConf
> >> "$DEV"
> >>>         + uci set network.mesh.ifname="bat0 $DEV" + uci del
> >>>         network.wan.ifname + uci del network.ethmesh.ifname + else #
> >>>         default=BATMAN + disableAutoConf "$DEV" + uci set
> >>>         network.mesh.ifname="bat0" + uci del network.wan.ifname + uci
> >>>         set network.ethmesh.ifname="$DEV" + fi + uci commit network
> >> +}
> >>>         diff --git
> >>>
> >> a/src/packages/fff/fff-network/files/lib/functions/fff/portorder
> >>>
> >> b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
> >>>         new file mode 100644 index 00000000..377c302f --- /dev/null
> >>>         +++
> >>>
> >> b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
> >>>         @@ -0,0 +1,31 @@ +# Copyright 2019 Adrian Schmutzler +#
> >>>         License GPLv3 + +BOARD="$(uci get board.model.name)" + +case
> >>>         "$BOARD" in + archer-c25-v1|\ + archer-c60-v1|\ +
> >>>         tl-wr841-v10|\ + tl-wr841-v11|\ + tl-wr841-v12) +
> >> PORTORDER="4
> >>>         3 2 1" + ;; + cpe210|\ + cpe510) + PORTORDER="5 4" + ;; +
> >>>         gl-ar150) + PORTORDER="1" + ;; + tl-wdr4300-v1) +
> >> PORTORDER="1
> >>>         2 3 4 5" + ;; + tl-wr841-v8) + PORTORDER="2 3 4 1" + ;; +
> >>>         tl-wr1043nd-v4|\ + tl-wr1043n-v5) + PORTORDER="5 4 3 2 1" +
> >> ;;
> >>>         +esac diff --git
> >>>
> >> a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> >>>
> >> b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> >>>         deleted file mode 100755 index 448bd04b..00000000 ---
> >>>
> >> a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> >>>         +++ /dev/null @@ -1,263 +0,0 @@ -#!/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 - -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 -} - -setAutoConf()
> >>>         { - # Sets ipv6 auto configuration on an interface to on/off
> >> -
> >>>         # Usage: setAutoConf <interface> <[0|1]> - local iface=$1 -
> >>>         local on=$2 - -
> >>>         sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf" - echo
> >>>         "# Generated from configurenetwork" > "$sysctlfile" - echo
> >>>         "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile" -
> >> echo
> >>>         "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >>
> >> "$sysctlfile"
> >>>         - echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >>
> >>>         "$sysctlfile" - echo "net.ipv6.conf.$iface.autoconf = $on" >>
> >>>         "$sysctlfile" - echo "net.ipv6.conf.$iface.accept_ra_rtr_pref
> >>>         = $on" >> "$sysctlfile" - echo
> >>>         "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile" - -
> >>>         /sbin/sysctl -p "$sysctlfile" -} - -enableAutoConf() { - #
> >>>         Enables ipv6 auto configuration on an interface - # Usage:
> >>>         enableAutoConf <interface> - local iface=$1 - - setAutoConf
> >>>         "$iface" "1" -} - -disableAutoConf() { - # Disables ipv6 auto
> >>>         configuration on an interface - # Usage: disableAutoConf
> >>>         <interface> - local iface=$1 - - setAutoConf "$iface" "0" -}
> >> -
> >>>         -BOARD="$(uci get board.model.name)" -. /etc/network.$BOARD -
> >>>         -if [ -s /etc/network.config ] ; then - . /etc/network.config
> >>>         -else - # Write network.config - 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 - 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 ! 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" - - 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" - -
> enableAutoConf
> >>>         "$WANDEV.2" - else - enableAutoConf "$WANDEV" - 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 -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 - enableAutoConf "$WANDEV" - 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 - disableAutoConf "$WANDEV" -
> >>>         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
> >> -
> >>>         disableAutoConf "$WANDEV" - 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 -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 network -
> -
> >>>         ifconfig $SWITCHDEV.3 down - ifconfig $SWITCHDEV.3 hw ether
> >>>         $ETHMESHMAC - 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
> >>>         network - - ifconfig br-mesh down - ifconfig br-mesh hw ether
> >>>         $ROUTERMAC - 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 network -
> >>>         ifconfig eth0 down - ifconfig eth0 hw ether $NEW_MACADDR -
> >>>         ifconfig eth0 up - /etc/init.d/network restart -fi - -if uci
> >>>         -q get "network.mesh.ip6addr" > /dev/null -then - echo "IPv6
> >>>         for mesh is set already" -else - echo "Setting IPv6
> >> addresses"
> >>>         - # 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"
> >>>         "$ROUTERMAC")" - 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"
> >>>         "$ROUTERMAC")" - 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 diff --git
> >>>         a/src/packages/fff/fff-sysupgrade/Makefile
> >>>         b/src/packages/fff/fff-sysupgrade/Makefile index
> >>>         90ef66af..0e6c08ec 100644 ---
> >>>         a/src/packages/fff/fff-sysupgrade/Makefile +++
> >>>         b/src/packages/fff/fff-sysupgrade/Makefile @@ -1,8 +1,7 @@
> >>>         include $(TOPDIR)/rules.mk PKG_NAME:=fff-sysupgrade
> >>>         -PKG_VERSION:=9 -PKG_RELEASE:=1 +PKG_RELEASE:=10
> >>>         PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git
> >>>
> >> a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysup
> >> grade
> >>>
> >> b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysup
> >> grade
> >>>         index 7ff83f54..f5783687 100644 ---
> >>>
> >> a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysup
> >> grade
> >>>         +++
> >>>
> >> b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysup
> >> grade
> >>>         @@ -7,7 +7,6 @@ cat > /etc/sysupgrade.conf <<-__EOF__
> >>>         /etc/dropbear/dropbear_dss_host_key
> >>>         /etc/dropbear/dropbear_rsa_host_key
> >>>         /etc/dropbear/authorized_keys -/etc/network.config
> >>>         /etc/config/fff /etc/hoodfile __EOF__
> >>>
> >>>
Christian Dresel April 23, 2019, 9:04 a.m.
hi

On 22.04.19 23:08, mail@adrianschmutzler.de wrote:
> Hallo Robert,
>
> okay, dann kommt hier ein oneport als default rein.
>
> +	*)
> +		# Fallback for new or incorrectly named devices
> +		setupOnePort "eth0" "CLIENT"
> +		;;
>
> Das mit dem sleep ist wahrscheinlich wirklich Quatsch, ich teste das mal und werfe es dann raus.

stimmt, das sleep dürfte hier wirklich quatsch sein. Mit der
Fallback-Änderung von oben kannst du dann ein

Reviewed-by: Christian Dresel <fff@chrisi01.de>

dran hängen. Das gefällt mir soweit dann sehr gut.

Gruß

Christian

>
> Grüße
>
> Adrian
>
>> -----Original Message-----
>> From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf
>> Of robert
>> Sent: Montag, 22. April 2019 22:48
>> To: franken-dev@freifunk.net
>> Subject: Re: [PATCH v3 03/14] fff-network: Reorganize network initialization
>>
>> Hi Adrian,
>>
>> das find ich gut. Mach noch einen Default in die case.
>>
>> Bei 23-config-ipaddr sind noch die 5 Sekunden timeout drin. Wir machen da
>> doch nur uci- Zeugs. Ich denke, das braucht man nicht. Oder hast du das
>> getestet.
>>
>> Robert
>>
>>
>> Am 22.04.19 um 18:17 schrieb Adrian Schmutzler:
>>> Jo, wir haben ja keine Eile.
>>>
>>> Tatsächlich neige ich inzwischen dazu, einfach wie vorgeschlagen den
>> oneport als default zu setzen. Das ist so einfach und effektiv, das man das
>> sogar doch noch in den Patch mit reinbauen könnte. So geht dann zumindest
>> irgendein Port immer.
>>> Grüße
>>>
>>> Adrian
>>>
>>> On 22 April 2019 18:10:47 CEST, Christian Dresel <fff@chrisi01.de> wrote:
>>>> Hi
>>>>
>>>> lass mich mal ne Nacht drüber schlafen. Meine Erfahrung war bisher,
>>>> je weiter die Firmware fortgeschritten ist, umso umständlicher wurde
>>>> es neue devices ohne UART einzurichten weil man immer schwerer
>>>> "hinten rum irgendwie wieder drauf kam".
>>>>
>>>> Damit wirds jetzt dann praktisch nahezu unmöglich irgendwie auf das
>>>> Device zu kommen wenn der Name falsch ist. Gefällt mir nicht
>>>> sonderlich.
>>>>
>>>> Ansonsten gefällt mir das ganze aber sehr gut und hab so auch nix
>>>> mehr gefunden. Allerdings ist das genauso ein Patch, wo ich sehr sehr
>>>> gerne ein weiteres paar Augen drauf hätte
>>>>
>>>> Gruß
>>>>
>>>> Christian
>>>>
>>>> On 22.04.19 17:44, Adrian Schmutzler wrote:
>>>>> Hallo Christian,
>>>>>
>>>>> im Prinzip ist es dann ähnlich kaputt wie früher, wenn man keine
>>>>> network.devicename hatte.
>>>>>
>>>>> Man könnte aber durchaus überlegen, eine standardconfig per default
>>>>> case zu setzen, z. B. in diesem Fall einfach openwrt zu belassen.
>>>> Odre
>>>>> wie vorgeschlagen der OnePort (hab das jetzt nicht durcdgedacht).
>>>>>
>>>>> Dieses Thema hatte ich aber hier auch gar nicht bedacht, sondern
>>>>> habe mich wie zuvor mit configurenetwork in der Logik bewegt, dass
>>>>> nur eingerichtete Devices gehen.
>>>>> Ich bin auch der Meinung, dass wir einen solchen default case
>>>>> separat behandeln sollten und nicht hier noch reinmatschen.
>>>>>
>>>>> Beste Grüße
>>>>>
>>>>> Adrian
>>>>>
>>>>> On 22 April 2019 17:33:27 CEST, Christian Dresel <fff@chrisi01.de>
>>>> wrote:
>>>>>     hi
>>>>>
>>>>>     noch eine Frage zum Verständnis:
>>>>>
>>>>>     Wenn in 22a-config-ports ein Device fehlt, dann bekommt man ein
>>>> ziemlich
>>>>>     kaputtes Gerät raus oder?
>>>>>
>>>>>     Es wird dann nichts aufgerufen und am Ende sollte diese File
>>>>> dann
>>>> als
>>>>>     Network File dienen:
>>>>>
>>>>>
>> https://github.com/FreifunkFranken/firmware/blob/master/src/packages/
>>>> fff/fff-network/files/etc/config/network
>>>>>     damit geht dann vermutlich gar nix mehr an den Ethernets. Das
>>>> macht neue
>>>>>     Geräte einbinden ein bisschen umständlich, wenn man sich da
>>>> einmal im
>>>>>     Device Namen vertut, hat man sich wunderbar rausgesperrt und
>>>> kommt nur
>>>>>     seriell drauf um zu gucken was los ist oder?
>>>>>
>>>>>     Seh ich das soweit richtig? Wenn ja muss ich nochmal drüber
>>>> schlafen ob
>>>>>     mir das gefällt ;) In der Annahme das es eth0 immer gibt, macht
>>>> es dann
>>>>>     vllt. Sinn ein setupOnePort für den Rest auf eth0 zu werfen?
>>>> Somit kommt
>>>>>     man zumindest am Ende irgendwie wieder an die Geräte ran.
>>>>>
>>>>>     Gruß
>>>>>
>>>>>     Christian
>>>>>
>>>>>     On 22.04.19 14:35, Adrian Schmutzler wrote:
>>>>>
>>>>>         This removes the configurenetwork script and replaces it by
>>>>>         some scripts run only during first boot. This introduces
>>>>>         several changes: - The different tasks dealt with in
>>>>>         configurenetwork are split. Thus, one script deals with
>>>>>         switch/port setup, one with br-mesh MAC address, one with
>>>>>         ETHMESHMAC, and one with IP addresses. This makes the whole
>>>>>         approach more modular, compared to the monolithic
>>>>>         configurenetwork. - Where configurenetwork contained
>>>>>         sophisticated, nested conditions to account for all possible
>>>>>         combinations of variables, the new approach is inspired by
>>>>>         OpenWrt's board.d subfiles. Instead of defining variables, we
>>>>>         now directly call function in a select-case. This is much
>>>> more
>>>>>         flexible, as we can just put code there for a special case
>>>>>         instead of bending configurenetwork for it. - The select-case
>>>>>         accounts for the various cases of similar/same parameters of
>>>>>         multiple devices, which can be grouped now. - Scripts are run
>>>>>         only at first boot. Later changes have to be done manually
>>>> (we
>>>>>         will provide some scripts later). Those will typically be
>>>>>         limited to changing only the ports; no need to run whole
>>>>>         network config again. - network.mode and network.config will
>>>>>         disappear. For switch-based devices, there is no advantage of
>>>>>         using network.config compared directly editing
>>>>>         /etc/config/network. Upgrade-safety can be established by
>>>>>         putting uci commands in an upgrade-safe script file (to be
>>>>>         provided in a later patch). After this patch, show_info and
>>>>>         the ports display in WebUI are broken. Those will be fixed in
>>>>>         a later patch. Signed-off-by: Adrian Schmutzler
>>>>>         <freifunk@adrianschmutzler.de>
>>>>>
>>>> ---------------------------------------------------------------------
>>>> ---
>>>>>         Changed in v2: - Fixed archer-c60-v2 to v1 - Added network
>>>>>         functions file in uci-defaults/22c - Removed some -q from uci
>>>>>         - Removed all commands only needed for running devices (this
>>>>>         is uci only) - Added descriptions for functions in
>>>>>         networksetup Changed in v3: - Changed order of 22a and 22b -
>>>>>         uci del instead uci set for WAN on one-port - switch/vlanX
>>>>>         instead of eth#/eth#.# for switch-based devices
>>>>>
>>>> ---------------------------------------------------------------------
>>>> ---
>>>>>         bsp/default/root_file_system/etc/rc.local | 4 -
>>>>>         src/packages/fff/fff-network/Makefile | 4 +-
>>>>>         .../files/etc/uci-defaults/22a-config-ports | 89 +++++++
>>>>>         .../files/etc/uci-defaults/22b-config-routermac | 55 +++++
>>>>>         .../files/etc/uci-defaults/22c-config-ethmesh | 75 ++++++
>>>>>         .../files/etc/uci-defaults/23-config-ipaddr | 31 +++
>>>>>         .../files/lib/functions/fff/networksetup | 163 +++++++++++++
>>>>>         .../fff-network/files/lib/functions/fff/portorder | 31 +++
>>>>>         .../fff-network/files/usr/sbin/configurenetwork | 263
>>>>>         ---------------------
>>>> src/packages/fff/fff-sysupgrade/Makefile
>>>>>         | 3 +- .../files/etc/uci-defaults/99-fff-sysupgrade | 1 - 11
>>>>>         files changed, 446 insertions(+), 273 deletions(-) create
>>>> mode
>>>>>         100644
>>>>>
>>>> src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>>>>>         create mode 100644
>>>>>
>>>> src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-router
>>>> mac
>>>>>         create mode 100644
>>>>>
>>>> src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmes
>>>> h
>>>>>         create mode 100644
>>>>>
>>>> src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>>>>>         create mode 100644
>>>>>
>>>> src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>>>>         create mode 100644
>>>>>
>>>> src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>>>>         delete mode 100755
>>>>>         src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>>>>         diff --git a/bsp/default/root_file_system/etc/rc.local
>>>>>         b/bsp/default/root_file_system/etc/rc.local index
>>>>>         59042c37..e02368a5 100755 ---
>>>>>         a/bsp/default/root_file_system/etc/rc.local +++
>>>>>         b/bsp/default/root_file_system/etc/rc.local @@ -2,10 +2,6 @@
>>>> #
>>>>>         Put your custom commands here that should be executed once #
>>>>>         the system init finished. By default this file does nothing.
>>>>>         -/usr/sbin/configurenetwork - -sleep 3 -
>>>>>         /usr/sbin/configurehood touch /tmp/started diff --git
>>>>>         a/src/packages/fff/fff-network/Makefile
>>>>>         b/src/packages/fff/fff-network/Makefile index
>>>>>         e9335884..11796797 100644 ---
>>>>>         a/src/packages/fff/fff-network/Makefile +++
>>>>>         b/src/packages/fff/fff-network/Makefile @@ -1,8 +1,7 @@
>>>>>         include $(TOPDIR)/rules.mk PKG_NAME:=fff-network
>>>>>         -PKG_VERSION:=10 -PKG_RELEASE:=1 +PKG_RELEASE:=11
>>>>>         PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) @@ -34,7 +33,6 @@
>>>>>         endef define Package/$(PKG_NAME)/install $(CP) ./files/*
>>>> $(1)/
>>>>>         - test -d ./$(BOARD) && $(CP) ./$(BOARD)/* $(1)/etc/ endef
>>>>>         $(eval $(call BuildPackage,$(PKG_NAME))) diff --git
>>>>>
>>>> a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-port
>>>> s
>>>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-port
>>>> s
>>>>>         new file mode 100644 index 00000000..b8eaceab --- /dev/null
>>>>>         +++
>>>>>
>>>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-port
>>>> s
>>>>>         @@ -0,0 +1,89 @@ +#!/bin/sh +# Copyright 2019 Adrian
>>>>>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
>>>>>         board.model.name)" + +. /lib/functions/fff/networksetup +
>>>>>         +case "$BOARD" in + archer-c7-v2) + setupSwitch "eth1" "4 5
>>>>>         0t" "2 3 0t" "1 6" + setupWan "eth0" + ;; + archer-c25-v1|\ +
>>>>>         archer-c60-v1) + setupSwitch "eth1" "1 2 0t" "3 4 0t" +
>>>>>         setupWan "eth0" + ;; + cpe210|\ + cpe510) + # Default: LAN0:
>>>>>         WAN, LAN1: CLIENT + setupSwitch "eth0" "0t 4" "0t" "0t 5" +
>>>>>         setupWan "eth0.2" + ;; + gl-ar150) + # Default: CLIENT +
>>>>>         setupSwitch "eth1" "0t 1" "0t" + setupWan "eth0" + ;; +
>>>>>         tl-wdr3500-v1|\ + tl-wr741nd-v2|\ + tl-wr841-v7|\ +
>>>>>         tl-wr841-v9|\ + tl-wr841-v10|\ + tl-wr841-v11|\ +
>>>>>         tl-wr841-v12) + setupSwitch "eth0" "1 2 0t" "3 4 0t" +
>>>>>         setupWan "eth1" + ;; + tl-wdr3600-v1|\ + tl-wdr4300-v1|\ +
>>>>>         tl-wdr4310-v1|\ + tl-wdr4900-v1) + setupSwitch "eth0" "4 5
>>>> 0t"
>>>>>         "2 3 0t" "1 0t" + setupWan "eth0.2" + ;; + tl-wr841-v8|\ +
>>>>>         tl-wr842n-v2) + setupSwitch "eth1" "1 4 0t" "2 3 0t" +
>>>>>         setupWan "eth0" + ;; + tl-wr740n-v4|\ + tl-wr740nd-v4|\ +
>>>>>         tl-wr741nd-v4) + setupSwitch "eth0" "1 4 0t" "2 3 0t" +
>>>>>         setupWan "eth1" + ;; + tl-wr1043nd-v1) + setupSwitch "eth0"
>>>> "3
>>>>>         4 5t" "1 2 5t" "0 5t" + setupWan "eth0.2" + ;; +
>>>>>         tl-wr1043nd-v2|\ + tl-wr1043nd-v3) + setupSwitch "eth0" "1 2
>>>>>         6t" "3 4 6t" "5 6t" + setupWan "eth0.2" + ;; +
>>>>>         tl-wr1043nd-v4|\ + tl-wr1043n-v5) + setupSwitch "eth0" "1 2
>>>>>         0t" "3 4 0t" "5 0t" + setupWan "eth0.2" + ;; + cpe210-v2|\ +
>>>>>         cpe210-v3|\ + tl-mr3020-v1|\ + tl-wa850re-v1|\ +
>>>>>         tl-wa860re-v1|\ + tl-wa901nd-v2|\ + ubnt-bullet-m|\ +
>>>>>         ubnt-loco-m|\ + ubnt-loco-m-xw|\ + ubnt-nano-m|\ +
>>>>>         ubnt-pico-m|\ + ubnt-power-m-xw|\ + ubnt-unifi|\ +
>>>>>         ubnt-unifiac-lite|\ + ubnt-unifiac-mesh) + setupOnePort
>>>> "eth0"
>>>>>         "CLIENT" + ;; +esac diff --git
>>>>>
>>>> a/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-rout
>>>> ermac
>>>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-rout
>>>> ermac
>>>>>         new file mode 100644 index 00000000..d1a5e50c --- /dev/null
>>>>>         +++
>>>>>
>>>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-rout
>>>> ermac
>>>>>         @@ -0,0 +1,55 @@ +#!/bin/sh +# Copyright 2019 Adrian
>>>>>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
>>>>>         board.model.name)" + +. /lib/functions/fff/networksetup + +.
>>>>>         /lib/functions.sh +. /lib/functions/system.sh + +case
>>>> "$BOARD"
>>>>>         in + archer-c7-v2|\ + tl-wr841-v8|\ + tl-wr842n-v2|\ +
>>>>>         tl-wr1043nd-v2|\ + tl-wr1043nd-v3) + ROUTERMAC=$(cat
>>>>>         /sys/class/net/eth1/address) + ;; + cpe210-v2|\ + cpe210-v3|\
>>>>>         + tl-wa850re-v1|\ + tl-wa860re-v1|\ + tl-wa901nd-v2|\ +
>>>>>         tl-wdr3500-v1|\ + tl-wr740n-v4|\ + tl-wr740nd-v4|\ +
>>>>>         tl-wr741nd-v2|\ + tl-wr741nd-v4|\ + tl-wr841-v7|\ +
>>>>>         ubnt-bullet-m|\ + ubnt-loco-m|\ + ubnt-loco-m-xw|\ +
>>>>>         ubnt-nano-m|\ + ubnt-pico-m|\ + ubnt-power-m-xw|\ +
>>>>>         ubnt-unifi) + ROUTERMAC=$(cat
>>>>>         /sys/class/ieee80211/phy0/macaddress) + ;; + tl-wdr3600-v1|\
>>>> +
>>>>>         tl-wdr4300-v1|\ + tl-wdr4310-v1) + ROUTERMAC=$(cat
>>>>>         /sys/class/ieee80211/phy1/macaddress) + ;; +
>>>>>         ubnt-unifiac-lite|\ + ubnt-unifiac-mesh) +
>>>>>         ROUTERMAC=$(mtd_get_mac_binary EEPROM 0x0) + ;; + *) +
>>>>>         ROUTERMAC=$(cat /sys/class/net/eth0/address) + ;; +esac +
>>>> +uci
>>>>>         set "network.mesh.macaddr=$ROUTERMAC" +uci commit network
>>>> diff
>>>>>         --git
>>>>>
>>>> a/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethm
>>>> esh
>>>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethm
>>>> esh
>>>>>         new file mode 100644 index 00000000..86c840c3 --- /dev/null
>>>>>         +++
>>>>>
>>>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethm
>>>> esh
>>>>>         @@ -0,0 +1,75 @@ +#!/bin/sh +# Copyright 2019 Adrian
>>>>>         Schmutzler +# License GPLv3 + +BOARD="$(uci get
>>>>>         board.model.name)" + +. /lib/functions/fff/network +.
>>>>>         /lib/functions/fff/networksetup + +. /lib/functions.sh +.
>>>>>         /lib/functions/system.sh + +# macFlipLocalBit: +# use mac
>>>>>         address from phyX with 'locally administered' bit set to '1'
>>>>>         +# only possible, because wXmesh is created first and
>>>>>         therefore gets the 'universally administered address' + +case
>>>>>         "$BOARD" in + archer-c7-v2|\ + tl-wr841-v8|\ + tl-wr842n-v2)
>>>> +
>>>>>         ETHMESHMAC=$(cat /sys/class/net/eth0/address) + ;; +
>>>>>         archer-c25-v1|\ + archer-c60-v1|\ + tl-wr740n-v4|\ +
>>>>>         tl-wr740nd-v4|\ + tl-wr741nd-v2|\ + tl-wr741nd-v4|\ +
>>>>>         tl-wr841-v7|\ + tl-wr841-v9|\ + tl-wr841-v10|\ +
>>>>>         tl-wr841-v11|\ + tl-wr841-v12) + ETHMESHMAC=$(cat
>>>>>         /sys/class/net/eth1/address) + ;; + cpe210|\ + cpe210-v2|\ +
>>>>>         cpe210-v3|\ + cpe510|\ + tl-wa850re-v1|\ + tl-wa860re-v1|\ +
>>>>>         tl-wa901nd-v2|\ + tl-wr1043nd-v1|\ + ubnt-bullet-m|\ +
>>>>>         ubnt-loco-m|\ + ubnt-loco-m-xw|\ + ubnt-nano-m|\ +
>>>>>         ubnt-pico-m|\ + ubnt-power-m-xw|\ + ubnt-unifi) +
>>>>>         ETHMESHMAC=$(macFlipLocalBit "$(cat
>>>>>         /sys/class/ieee80211/phy0/macaddress)") + ;; + gl-ar150|\ +
>>>>>         tl-mr3020-v1) + ETHMESHMAC=$(macFlipLocalBit "$(cat
>>>>>         /sys/class/net/eth0/address)") + ;; + tl-wdr4900-v1) +
>>>>>         ETHMESHMAC=$(macFlipLocalBit "$(cat
>>>>>         /sys/class/ieee80211/phy1/macaddress)") + ;; +
>>>> tl-wr1043nd-v4)
>>>>>         + ETHMESHMAC=$(mtd_get_mac_binary config 0x1017c) + ;; +
>>>>>         tl-wr1043n-v5) + ETHMESHMAC=$(macaddr_add
>>>> $(mtd_get_mac_binary
>>>>>         product-info 8) 1) + ;; + ubnt-unifiac-lite|\ +
>>>>>         ubnt-unifiac-mesh) + ETHMESHMAC=$(macFlipLocalBit
>>>>>         "$(mtd_get_mac_binary EEPROM 0x0)") + ;; +esac + +if [ -n
>>>>>         "$ETHMESHMAC" ]; then + uci set
>>>>>         "network.ethmesh.macaddr=$ETHMESHMAC" + uci commit network
>>>> +fi
>>>>>         diff --git
>>>>>
>>>> a/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipadd
>>>> r
>>>> b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipadd
>>>> r
>>>>>         new file mode 100644 index 00000000..db500c15 --- /dev/null
>>>>>         +++
>>>>>
>>>> b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipadd
>>>> r
>>>>>         @@ -0,0 +1,31 @@ +#!/bin/sh +# Copyright 2019 Adrian
>>>>>         Schmutzler +# License GPLv3 + +. /lib/functions/fff/network +
>>>>>         +echo "Setting IPv6 addresses" +# Some time needed :( +sleep
>>>> 5
>>>>>         + +ROUTERMAC=$(uci get network.mesh.macaddr)
>>>>>         +prefix="fdff:0::/64" + +# Set $prefix as prefix +uci set
>>>>>         network.globals=globals +uci set
>>>>>         "network.globals.ula_prefix=$prefix" + +# Set $prefix::MAC as
>>>>>         IP +addr="$(ipMacAssemble "$prefix" "$ROUTERMAC")" +uci
>>>>>         add_list "network.mesh.ip6addr=$addr" +uci set
>>>>>         network.mesh.proto=static + +# Set $prefix::1 as IP
>>>>>         +addr="$(ipAssemble "$prefix" "1")" +uci add_list
>>>>>         "network.mesh.ip6addr=$addr" + +# Set $prefix::link-local as
>>>>>         IP +addr="$(ipEUIAssemble "$prefix" "$ROUTERMAC")" +uci
>>>>>         add_list "network.mesh.ip6addr=$addr" + +uci commit network
>>>>>         diff --git
>>>>>
>>>> a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>>> b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>>>>         new file mode 100644 index 00000000..ccc943df --- /dev/null
>>>>>         +++
>>>>>
>>>> b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>>>>         @@ -0,0 +1,163 @@ +# Copyright 2019 Adrian Schmutzler +#
>>>>>         License GPLv3 + +. /lib/functions/network.sh + +setAutoConf()
>>>>>         { + # Sets ipv6 auto configuration on an interface to on/off
>>>> +
>>>>>         # Usage: setAutoConf <interface> <[0|1]> + local iface=$1 +
>>>>>         local on=$2 + +
>>>>>         sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf" + echo
>>>>>         "# Generated from configurenetwork" > "$sysctlfile" + echo
>>>>>         "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile" +
>>>> echo
>>>>>         "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >>
>>>> "$sysctlfile"
>>>>>         + echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >>
>>>>>         "$sysctlfile" + echo "net.ipv6.conf.$iface.autoconf = $on" >>
>>>>>         "$sysctlfile" + echo "net.ipv6.conf.$iface.accept_ra_rtr_pref
>>>>>         = $on" >> "$sysctlfile" + echo
>>>>>         "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile" + +
>>>>>         /sbin/sysctl -p "$sysctlfile" +} + +enableAutoConf() { + #
>>>>>         Enables ipv6 auto configuration on an interface + # Usage:
>>>>>         enableAutoConf <interface> + local iface=$1 + + setAutoConf
>>>>>         "$iface" "1" +} + +disableAutoConf() { + # Disables ipv6 auto
>>>>>         configuration on an interface + # Usage: disableAutoConf
>>>>>         <interface> + local iface=$1 + + setAutoConf "$iface" "0" +}
>>>> +
>>>>>         +fixMac() { + # Update MAC address on live device/interface +
>>>>>         # + # fixMac <newmac> <interface> + # + # newmac: MAC address
>>>>>         to be set + # interface: Interface to be updated as in uci
>>>>>         (e.g. mesh) + + local newmac=$1 + local iface=$2 + local dev
>>>> +
>>>>>         + echo "Fixing MAC on $iface" + sleep 10 + +
>>>>>         network_get_physdev dev "$iface" + + uci set
>>>>>         "network.${iface}.macaddr=$newmac" + uci commit network + +
>>>> if
>>>>>         [ -n "$dev" ]; then + ip link set "$dev" down + ip link set
>>>>>         "$dev" address "$newmac" + ip link set "$dev" up + fi + +
>>>>>         /etc/init.d/network restart +} + +setupSwitch() { + # Set up
>>>>>         switch for switch-based devices + # This is intended for
>>>>>         initial setup, not for updates + # (changing ports will be
>>>>>         sufficient then) + # + # Usage: setupSwitch <SWITCHDEV, e.g.
>>>>>         eth0> <CLIENT_PORTS> <BATMAN_PORTS> [<WAN_PORTS>] + +
>> local
>>>>>         SWITCHDEV=$1 + local CLIENT_PORTS=$2 + local
>> BATMAN_PORTS=$3
>>>> +
>>>>>         local WAN_PORTS=$4 + local SWITCHHW + +
>> SWITCHHW="$(swconfig
>>>>>         list | awk '{ print $4 }')" + + uci set
>>>>>         "network.switch=switch" + uci set
>>>>>         "network.switch.name=$SWITCHHW" + uci set
>>>>>         "network.switch.enable=1" + uci set "network.switch.reset=1"
>>>> +
>>>>>         uci set "network.switch.enable_vlan=1" + + uci set
>>>>>         "network.vlan1=switch_vlan" + uci set
>>>>>         "network.vlan1.device=$SWITCHHW" + uci set
>>>>>         "network.vlan1.vlan=1" + uci set
>>>>>         "network.vlan1.ports=$CLIENT_PORTS" + + # This defines the
>>>>>         VLAN for WAN ports inside the switch. + # This is required
>>>>>         even if the WAN eth is separate, but the WAN port is in the
>>>>>         switch! + if [ -n "$WAN_PORTS" ]; then + uci set
>>>>>         "network.vlan2=switch_vlan" + uci set
>>>>>         "network.vlan2.device=$SWITCHHW" + uci set
>>>>>         "network.vlan2.vlan=2" + uci set
>>>>>         "network.vlan2.ports=$WAN_PORTS" + fi + + uci set
>>>>>         "network.vlan3=switch_vlan" + uci set
>>>>>         "network.vlan3.device=$SWITCHHW" + uci set
>>>>>         "network.vlan3.vlan=3" + uci set
>>>>>         "network.vlan3.ports=$BATMAN_PORTS" + + uci set
>>>>>         network.mesh.ifname="$SWITCHDEV.1 bat0" + uci set
>>>>>         network.ethmesh.ifname="$SWITCHDEV.3" + + uci commit network
>>>>>         +} + +setupWan() { + # Set up WAN for any device with
>>>>>         dedicated port (no one-port where mode is changed) + # This
>>>> is
>>>>>         intended for initial setup, not for updates + # (updates are
>>>>>         only possible by changing ports in a switch) + # + # Usage:
>>>>>         setupWan <WANDEV, e.g. eth0, eth0.2> + + local WANDEV=$1 + +
>>>> #
>>>>>         This defines the WAN interface. We use the VLAN ID only if we
>>>>>         do NOT have a separate eth. + # This is different from the
>>>>>         criterion for the WAN port dealt with above! + # If the
>>>> WANDEV
>>>>>         is different from the SWITCHDEV, but the WAN port is in the
>>>>>         switch, + # the WAN eth has to be connected to the switch
>>>>>         untagged! + enableAutoConf "$WANDEV" + uci set
>>>>>         network.wan.ifname="$WANDEV" + + uci commit network +} +
>>>>>         +setupOnePort() { + # Set up port mode for one-port devices +
>>>>>         # This is intended for initial setup and for updates + #
>>>>>         (latter will require network restart) + # + # Usage:
>>>>>         setupOnePort <DEV, e.g. eth0> <ETHMODE, e.g. BATMAN, CLIENT,
>>>>>         WAN> + + local DEV=$1 + local ETHMODE=$2 + + uci set
>>>>>         "network.$DEV=interface" + uci set "network.$DEV.ifname=$DEV"
>>>>>         + if [ "$ETHMODE" = "WAN" ]; then + enableAutoConf "$DEV" +
>>>>>         uci set network.mesh.ifname="bat0" + uci set
>>>>>         network.wan.ifname="$DEV" + uci del network.ethmesh.ifname +
>>>>>         elif [ "$ETHMODE" = "CLIENT" ] ; then + disableAutoConf
>>>> "$DEV"
>>>>>         + uci set network.mesh.ifname="bat0 $DEV" + uci del
>>>>>         network.wan.ifname + uci del network.ethmesh.ifname + else #
>>>>>         default=BATMAN + disableAutoConf "$DEV" + uci set
>>>>>         network.mesh.ifname="bat0" + uci del network.wan.ifname + uci
>>>>>         set network.ethmesh.ifname="$DEV" + fi + uci commit network
>>>> +}
>>>>>         diff --git
>>>>>
>>>> a/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>>> b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>>>>         new file mode 100644 index 00000000..377c302f --- /dev/null
>>>>>         +++
>>>>>
>>>> b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>>>>         @@ -0,0 +1,31 @@ +# Copyright 2019 Adrian Schmutzler +#
>>>>>         License GPLv3 + +BOARD="$(uci get board.model.name)" + +case
>>>>>         "$BOARD" in + archer-c25-v1|\ + archer-c60-v1|\ +
>>>>>         tl-wr841-v10|\ + tl-wr841-v11|\ + tl-wr841-v12) +
>>>> PORTORDER="4
>>>>>         3 2 1" + ;; + cpe210|\ + cpe510) + PORTORDER="5 4" + ;; +
>>>>>         gl-ar150) + PORTORDER="1" + ;; + tl-wdr4300-v1) +
>>>> PORTORDER="1
>>>>>         2 3 4 5" + ;; + tl-wr841-v8) + PORTORDER="2 3 4 1" + ;; +
>>>>>         tl-wr1043nd-v4|\ + tl-wr1043n-v5) + PORTORDER="5 4 3 2 1" +
>>>> ;;
>>>>>         +esac diff --git
>>>>>
>>>> a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>>> b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>>>>         deleted file mode 100755 index 448bd04b..00000000 ---
>>>>>
>>>> a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>>>>         +++ /dev/null @@ -1,263 +0,0 @@ -#!/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 - -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 -} - -setAutoConf()
>>>>>         { - # Sets ipv6 auto configuration on an interface to on/off
>>>> -
>>>>>         # Usage: setAutoConf <interface> <[0|1]> - local iface=$1 -
>>>>>         local on=$2 - -
>>>>>         sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf" - echo
>>>>>         "# Generated from configurenetwork" > "$sysctlfile" - echo
>>>>>         "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile" -
>>>> echo
>>>>>         "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >>
>>>> "$sysctlfile"
>>>>>         - echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >>
>>>>>         "$sysctlfile" - echo "net.ipv6.conf.$iface.autoconf = $on" >>
>>>>>         "$sysctlfile" - echo "net.ipv6.conf.$iface.accept_ra_rtr_pref
>>>>>         = $on" >> "$sysctlfile" - echo
>>>>>         "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile" - -
>>>>>         /sbin/sysctl -p "$sysctlfile" -} - -enableAutoConf() { - #
>>>>>         Enables ipv6 auto configuration on an interface - # Usage:
>>>>>         enableAutoConf <interface> - local iface=$1 - - setAutoConf
>>>>>         "$iface" "1" -} - -disableAutoConf() { - # Disables ipv6 auto
>>>>>         configuration on an interface - # Usage: disableAutoConf
>>>>>         <interface> - local iface=$1 - - setAutoConf "$iface" "0" -}
>>>> -
>>>>>         -BOARD="$(uci get board.model.name)" -. /etc/network.$BOARD -
>>>>>         -if [ -s /etc/network.config ] ; then - . /etc/network.config
>>>>>         -else - # Write network.config - 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 - 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 ! 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" - - 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" - -
>> enableAutoConf
>>>>>         "$WANDEV.2" - else - enableAutoConf "$WANDEV" - 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 -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 - enableAutoConf "$WANDEV" - 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 - disableAutoConf "$WANDEV" -
>>>>>         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
>>>> -
>>>>>         disableAutoConf "$WANDEV" - 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 -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 network -
>> -
>>>>>         ifconfig $SWITCHDEV.3 down - ifconfig $SWITCHDEV.3 hw ether
>>>>>         $ETHMESHMAC - 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
>>>>>         network - - ifconfig br-mesh down - ifconfig br-mesh hw ether
>>>>>         $ROUTERMAC - 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 network -
>>>>>         ifconfig eth0 down - ifconfig eth0 hw ether $NEW_MACADDR -
>>>>>         ifconfig eth0 up - /etc/init.d/network restart -fi - -if uci
>>>>>         -q get "network.mesh.ip6addr" > /dev/null -then - echo "IPv6
>>>>>         for mesh is set already" -else - echo "Setting IPv6
>>>> addresses"
>>>>>         - # 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"
>>>>>         "$ROUTERMAC")" - 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"
>>>>>         "$ROUTERMAC")" - 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 diff --git
>>>>>         a/src/packages/fff/fff-sysupgrade/Makefile
>>>>>         b/src/packages/fff/fff-sysupgrade/Makefile index
>>>>>         90ef66af..0e6c08ec 100644 ---
>>>>>         a/src/packages/fff/fff-sysupgrade/Makefile +++
>>>>>         b/src/packages/fff/fff-sysupgrade/Makefile @@ -1,8 +1,7 @@
>>>>>         include $(TOPDIR)/rules.mk PKG_NAME:=fff-sysupgrade
>>>>>         -PKG_VERSION:=9 -PKG_RELEASE:=1 +PKG_RELEASE:=10
>>>>>         PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git
>>>>>
>>>> a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysup
>>>> grade
>>>> b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysup
>>>> grade
>>>>>         index 7ff83f54..f5783687 100644 ---
>>>>>
>>>> a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysup
>>>> grade
>>>>>         +++
>>>>>
>>>> b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysup
>>>> grade
>>>>>         @@ -7,7 +7,6 @@ cat > /etc/sysupgrade.conf <<-__EOF__
>>>>>         /etc/dropbear/dropbear_dss_host_key
>>>>>         /etc/dropbear/dropbear_rsa_host_key
>>>>>         /etc/dropbear/authorized_keys -/etc/network.config
>>>>>         /etc/config/fff /etc/hoodfile __EOF__
>>>>>
>>>>>
Adrian Schmutzler April 23, 2019, 11:07 a.m.
Hallo zusammen,

ich bräuchte noch folgende Reviews:
Robert 3/14
Christian 6/14
Christian 14/14

Folgende Änderungen habe ich jetzt berücksichtigt (ich will nicht nochmal ein Patchset schicken):
- default-case für Ports wie in Mail enthalten.
- sleep 5 weg
- etc/init.d/network restart weg bei Skripten, dafür Hinweis bei echo ("Port updated successfully. Please restart network or device!")
- 90-firstbootfff von fff-support nach fff-network verschoben

Der CPUPORT-Patch hat zwar auch nur ein Review, das wäre mir aber wurscht, da der im Moment ja noch keine Abhängigkeiten hat.

Grüße

Adrian

> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of
> Adrian Schmutzler
> Sent: Montag, 22. April 2019 14:35
> To: franken-dev@freifunk.net
> Subject: [PATCH v3 03/14] fff-network: Reorganize network initialization
> 
> This removes the configurenetwork script and replaces it by some
> scripts run only during first boot.
> 
> This introduces several changes:
> - The different tasks dealt with in configurenetwork are split.
>   Thus, one script deals with switch/port setup, one with br-mesh
>   MAC address, one with ETHMESHMAC, and one with IP addresses.
>   This makes the whole approach more modular, compared to the
>   monolithic configurenetwork.
> - Where configurenetwork contained sophisticated, nested conditions
>   to account for all possible combinations of variables, the new
>   approach is inspired by OpenWrt's board.d subfiles. Instead of
>   defining variables, we now directly call function in a
>   select-case. This is much more flexible, as we can just put code
>   there for a special case instead of bending configurenetwork for
>   it.
> - The select-case accounts for the various cases of similar/same
>   parameters of multiple devices, which can be grouped now.
> - Scripts are run only at first boot. Later changes have to be
>   done manually (we will provide some scripts later). Those will
>   typically be limited to changing only the ports; no need to run
>   whole network config again.
> - network.mode and network.config will disappear. For switch-based
>   devices, there is no advantage of using network.config compared
>   directly editing /etc/config/network. Upgrade-safety can be
>   established by putting uci commands in an upgrade-safe script
>   file (to be provided in a later patch).
> 
> After this patch, show_info and the ports display in WebUI are
> broken. Those will be fixed in a later patch.
> 
> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
> 
> ---
> 
> Changed in v2:
> - Fixed archer-c60-v2 to v1
> - Added network functions file in uci-defaults/22c
> - Removed some -q from uci
> - Removed all commands only needed for running devices (this is
>   uci only)
> - Added descriptions for functions in networksetup
> 
> Changed in v3:
> - Changed order of 22a and 22b
> - uci del instead uci set for WAN on one-port
> - switch/vlanX instead of eth#/eth#.# for switch-based devices
> ---
>  bsp/default/root_file_system/etc/rc.local          |   4 -
>  src/packages/fff/fff-network/Makefile              |   4 +-
>  .../files/etc/uci-defaults/22a-config-ports        |  89 +++++++
>  .../files/etc/uci-defaults/22b-config-routermac    |  55 +++++
>  .../files/etc/uci-defaults/22c-config-ethmesh      |  75 ++++++
>  .../files/etc/uci-defaults/23-config-ipaddr        |  31 +++
>  .../files/lib/functions/fff/networksetup           | 163 +++++++++++++
>  .../fff-network/files/lib/functions/fff/portorder  |  31 +++
>  .../fff-network/files/usr/sbin/configurenetwork    | 263
> ---------------------
>  src/packages/fff/fff-sysupgrade/Makefile           |   3 +-
>  .../files/etc/uci-defaults/99-fff-sysupgrade       |   1 -
>  11 files changed, 446 insertions(+), 273 deletions(-)
>  create mode 100644
> src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>  create mode 100644
> src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>  create mode 100644
> src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>  create mode 100644
> src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>  create mode 100644
> src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>  create mode 100644
> src/packages/fff/fff-network/files/lib/functions/fff/portorder
>  delete mode 100755
> src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> 
> diff --git a/bsp/default/root_file_system/etc/rc.local
> b/bsp/default/root_file_system/etc/rc.local
> index 59042c37..e02368a5 100755
> --- a/bsp/default/root_file_system/etc/rc.local
> +++ b/bsp/default/root_file_system/etc/rc.local
> @@ -2,10 +2,6 @@
>  # Put your custom commands here that should be executed once
>  # the system init finished. By default this file does nothing.
> 
> -/usr/sbin/configurenetwork
> -
> -sleep 3
> -
>  /usr/sbin/configurehood
> 
>  touch /tmp/started
> diff --git a/src/packages/fff/fff-network/Makefile
> b/src/packages/fff/fff-network/Makefile
> index e9335884..11796797 100644
> --- a/src/packages/fff/fff-network/Makefile
> +++ b/src/packages/fff/fff-network/Makefile
> @@ -1,8 +1,7 @@
>  include $(TOPDIR)/rules.mk
> 
>  PKG_NAME:=fff-network
> -PKG_VERSION:=10
> -PKG_RELEASE:=1
> +PKG_RELEASE:=11
> 
>  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
> 
> @@ -34,7 +33,6 @@ endef
> 
>  define Package/$(PKG_NAME)/install
>  	$(CP) ./files/* $(1)/
> -	test -d ./$(BOARD) && $(CP) ./$(BOARD)/* $(1)/etc/
>  endef
> 
>  $(eval $(call BuildPackage,$(PKG_NAME)))
> diff --git
> a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
> b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
> new file mode 100644
> index 00000000..b8eaceab
> --- /dev/null
> +++ b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
> @@ -0,0 +1,89 @@
> +#!/bin/sh
> +# Copyright 2019 Adrian Schmutzler
> +# License GPLv3
> +
> +BOARD="$(uci get board.model.name)"
> +
> +. /lib/functions/fff/networksetup
> +
> +case "$BOARD" in
> +	archer-c7-v2)
> +		setupSwitch "eth1" "4 5 0t" "2 3 0t" "1 6"
> +		setupWan "eth0"
> +		;;
> +	archer-c25-v1|\
> +	archer-c60-v1)
> +		setupSwitch "eth1" "1 2 0t" "3 4 0t"
> +		setupWan "eth0"
> +		;;
> +	cpe210|\
> +	cpe510)
> +		# Default: LAN0: WAN, LAN1: CLIENT
> +		setupSwitch "eth0" "0t 4" "0t" "0t 5"
> +		setupWan "eth0.2"
> +		;;
> +	gl-ar150)
> +		# Default: CLIENT
> +		setupSwitch "eth1" "0t 1" "0t"
> +		setupWan "eth0"
> +		;;
> +	tl-wdr3500-v1|\
> +	tl-wr741nd-v2|\
> +	tl-wr841-v7|\
> +	tl-wr841-v9|\
> +	tl-wr841-v10|\
> +	tl-wr841-v11|\
> +	tl-wr841-v12)
> +		setupSwitch "eth0" "1 2 0t" "3 4 0t"
> +		setupWan "eth1"
> +		;;
> +	tl-wdr3600-v1|\
> +	tl-wdr4300-v1|\
> +	tl-wdr4310-v1|\
> +	tl-wdr4900-v1)
> +		setupSwitch "eth0" "4 5 0t" "2 3 0t" "1 0t"
> +		setupWan "eth0.2"
> +		;;
> +	tl-wr841-v8|\
> +	tl-wr842n-v2)
> +		setupSwitch "eth1" "1 4 0t" "2 3 0t"
> +		setupWan "eth0"
> +		;;
> +	tl-wr740n-v4|\
> +	tl-wr740nd-v4|\
> +	tl-wr741nd-v4)
> +		setupSwitch "eth0" "1 4 0t" "2 3 0t"
> +		setupWan "eth1"
> +		;;
> +	tl-wr1043nd-v1)
> +		setupSwitch "eth0" "3 4 5t" "1 2 5t" "0 5t"
> +		setupWan "eth0.2"
> +		;;
> +	tl-wr1043nd-v2|\
> +	tl-wr1043nd-v3)
> +		setupSwitch "eth0" "1 2 6t" "3 4 6t" "5 6t"
> +		setupWan "eth0.2"
> +		;;
> +	tl-wr1043nd-v4|\
> +	tl-wr1043n-v5)
> +		setupSwitch "eth0" "1 2 0t" "3 4 0t" "5 0t"
> +		setupWan "eth0.2"
> +		;;
> +	cpe210-v2|\
> +	cpe210-v3|\
> +	tl-mr3020-v1|\
> +	tl-wa850re-v1|\
> +	tl-wa860re-v1|\
> +	tl-wa901nd-v2|\
> +	ubnt-bullet-m|\
> +	ubnt-loco-m|\
> +	ubnt-loco-m-xw|\
> +	ubnt-nano-m|\
> +	ubnt-pico-m|\
> +	ubnt-power-m-xw|\
> +	ubnt-unifi|\
> +	ubnt-unifiac-lite|\
> +	ubnt-unifiac-mesh)
> +		setupOnePort "eth0" "CLIENT"
> +		;;
> +esac
> diff --git
> a/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
> b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
> new file mode 100644
> index 00000000..d1a5e50c
> --- /dev/null
> +++
> b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
> @@ -0,0 +1,55 @@
> +#!/bin/sh
> +# Copyright 2019 Adrian Schmutzler
> +# License GPLv3
> +
> +BOARD="$(uci get board.model.name)"
> +
> +. /lib/functions/fff/networksetup
> +
> +. /lib/functions.sh
> +. /lib/functions/system.sh
> +
> +case "$BOARD" in
> +	archer-c7-v2|\
> +	tl-wr841-v8|\
> +	tl-wr842n-v2|\
> +	tl-wr1043nd-v2|\
> +	tl-wr1043nd-v3)
> +		ROUTERMAC=$(cat /sys/class/net/eth1/address)
> +		;;
> +	cpe210-v2|\
> +	cpe210-v3|\
> +	tl-wa850re-v1|\
> +	tl-wa860re-v1|\
> +	tl-wa901nd-v2|\
> +	tl-wdr3500-v1|\
> +	tl-wr740n-v4|\
> +	tl-wr740nd-v4|\
> +	tl-wr741nd-v2|\
> +	tl-wr741nd-v4|\
> +	tl-wr841-v7|\
> +	ubnt-bullet-m|\
> +	ubnt-loco-m|\
> +	ubnt-loco-m-xw|\
> +	ubnt-nano-m|\
> +	ubnt-pico-m|\
> +	ubnt-power-m-xw|\
> +	ubnt-unifi)
> +		ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress)
> +		;;
> +	tl-wdr3600-v1|\
> +	tl-wdr4300-v1|\
> +	tl-wdr4310-v1)
> +		ROUTERMAC=$(cat /sys/class/ieee80211/phy1/macaddress)
> +		;;
> +	ubnt-unifiac-lite|\
> +	ubnt-unifiac-mesh)
> +		ROUTERMAC=$(mtd_get_mac_binary EEPROM 0x0)
> +		;;
> +	*)
> +		ROUTERMAC=$(cat /sys/class/net/eth0/address)
> +		;;
> +esac
> +
> +uci set "network.mesh.macaddr=$ROUTERMAC"
> +uci commit network
> diff --git
> a/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
> b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
> new file mode 100644
> index 00000000..86c840c3
> --- /dev/null
> +++
> b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
> @@ -0,0 +1,75 @@
> +#!/bin/sh
> +# Copyright 2019 Adrian Schmutzler
> +# License GPLv3
> +
> +BOARD="$(uci get board.model.name)"
> +
> +. /lib/functions/fff/network
> +. /lib/functions/fff/networksetup
> +
> +. /lib/functions.sh
> +. /lib/functions/system.sh
> +
> +# macFlipLocalBit:
> +# use mac address from phyX with 'locally administered' bit set to '1'
> +# only possible, because wXmesh is created first and therefore gets the
> 'universally administered address'
> +
> +case "$BOARD" in
> +	archer-c7-v2|\
> +	tl-wr841-v8|\
> +	tl-wr842n-v2)
> +		ETHMESHMAC=$(cat /sys/class/net/eth0/address)
> +		;;
> +	archer-c25-v1|\
> +	archer-c60-v1|\
> +	tl-wr740n-v4|\
> +	tl-wr740nd-v4|\
> +	tl-wr741nd-v2|\
> +	tl-wr741nd-v4|\
> +	tl-wr841-v7|\
> +	tl-wr841-v9|\
> +	tl-wr841-v10|\
> +	tl-wr841-v11|\
> +	tl-wr841-v12)
> +		ETHMESHMAC=$(cat /sys/class/net/eth1/address)
> +		;;
> +	cpe210|\
> +	cpe210-v2|\
> +	cpe210-v3|\
> +	cpe510|\
> +	tl-wa850re-v1|\
> +	tl-wa860re-v1|\
> +	tl-wa901nd-v2|\
> +	tl-wr1043nd-v1|\
> +	ubnt-bullet-m|\
> +	ubnt-loco-m|\
> +	ubnt-loco-m-xw|\
> +	ubnt-nano-m|\
> +	ubnt-pico-m|\
> +	ubnt-power-m-xw|\
> +	ubnt-unifi)
> +		ETHMESHMAC=$(macFlipLocalBit "$(cat
> /sys/class/ieee80211/phy0/macaddress)")
> +		;;
> +	gl-ar150|\
> +	tl-mr3020-v1)
> +		ETHMESHMAC=$(macFlipLocalBit "$(cat
> /sys/class/net/eth0/address)")
> +		;;
> +	tl-wdr4900-v1)
> +		ETHMESHMAC=$(macFlipLocalBit "$(cat
> /sys/class/ieee80211/phy1/macaddress)")
> +		;;
> +	tl-wr1043nd-v4)
> +		ETHMESHMAC=$(mtd_get_mac_binary config 0x1017c)
> +		;;
> +	tl-wr1043n-v5)
> +		ETHMESHMAC=$(macaddr_add $(mtd_get_mac_binary
> product-info
> 8) 1)
> +		;;
> +	ubnt-unifiac-lite|\
> +	ubnt-unifiac-mesh)
> +		ETHMESHMAC=$(macFlipLocalBit "$(mtd_get_mac_binary
> EEPROM
> 0x0)")
> +		;;
> +esac
> +
> +if [ -n "$ETHMESHMAC" ]; then
> +	uci set "network.ethmesh.macaddr=$ETHMESHMAC"
> +	uci commit network
> +fi
> diff --git
> a/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
> b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
> new file mode 100644
> index 00000000..db500c15
> --- /dev/null
> +++ b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
> @@ -0,0 +1,31 @@
> +#!/bin/sh
> +# Copyright 2019 Adrian Schmutzler
> +# License GPLv3
> +
> +. /lib/functions/fff/network
> +
> +echo "Setting IPv6 addresses"
> +# Some time needed :(
> +sleep 5
> +
> +ROUTERMAC=$(uci get network.mesh.macaddr)
> +prefix="fdff:0::/64"
> +
> +# Set $prefix as prefix
> +uci set network.globals=globals
> +uci set "network.globals.ula_prefix=$prefix"
> +
> +# Set $prefix::MAC as IP
> +addr="$(ipMacAssemble "$prefix" "$ROUTERMAC")"
> +uci add_list "network.mesh.ip6addr=$addr"
> +uci set network.mesh.proto=static
> +
> +# Set $prefix::1 as IP
> +addr="$(ipAssemble "$prefix" "1")"
> +uci add_list "network.mesh.ip6addr=$addr"
> +
> +# Set $prefix::link-local as IP
> +addr="$(ipEUIAssemble "$prefix" "$ROUTERMAC")"
> +uci add_list "network.mesh.ip6addr=$addr"
> +
> +uci commit network
> diff --git
> a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> new file mode 100644
> index 00000000..ccc943df
> --- /dev/null
> +++ b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> @@ -0,0 +1,163 @@
> +# Copyright 2019 Adrian Schmutzler
> +# License GPLv3
> +
> +. /lib/functions/network.sh
> +
> +setAutoConf() {
> +	# Sets ipv6 auto configuration on an interface to on/off
> +	# Usage: setAutoConf <interface> <[0|1]>
> +	local iface=$1
> +	local on=$2
> +
> +	sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf"
> +	echo "# Generated from configurenetwork" > "$sysctlfile"
> +	echo "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile"
> +	echo "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >>
> "$sysctlfile"
> +	echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >> "$sysctlfile"
> +	echo "net.ipv6.conf.$iface.autoconf = $on" >> "$sysctlfile"
> +	echo "net.ipv6.conf.$iface.accept_ra_rtr_pref = $on" >>
> "$sysctlfile"
> +	echo "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile"
> +
> +	/sbin/sysctl -p "$sysctlfile"
> +}
> +
> +enableAutoConf() {
> +	# Enables ipv6 auto configuration on an interface
> +	# Usage: enableAutoConf <interface>
> +	local iface=$1
> +
> +	setAutoConf "$iface" "1"
> +}
> +
> +disableAutoConf() {
> +	# Disables ipv6 auto configuration on an interface
> +	# Usage: disableAutoConf <interface>
> +	local iface=$1
> +
> +	setAutoConf "$iface" "0"
> +}
> +
> +fixMac() {
> +	# Update MAC address on live device/interface
> +	#
> +	# fixMac <newmac> <interface>
> +	#
> +	# newmac: MAC address to be set
> +	# interface: Interface to be updated as in uci (e.g. mesh)
> +
> +	local newmac=$1
> +	local iface=$2
> +	local dev
> +
> +	echo "Fixing MAC on $iface"
> +	sleep 10
> +
> +	network_get_physdev dev "$iface"
> +
> +	uci set "network.${iface}.macaddr=$newmac"
> +	uci commit network
> +
> +	if [ -n "$dev" ]; then
> +		ip link set "$dev" down
> +		ip link set "$dev" address "$newmac"
> +		ip link set "$dev" up
> +	fi
> +
> +	/etc/init.d/network restart
> +}
> +
> +setupSwitch() {
> +	# Set up switch for switch-based devices
> +	# This is intended for initial setup, not for updates
> +	# (changing ports will be sufficient then)
> +	#
> +	# Usage: setupSwitch <SWITCHDEV, e.g. eth0> <CLIENT_PORTS>
> <BATMAN_PORTS> [<WAN_PORTS>]
> +
> +	local SWITCHDEV=$1
> +	local CLIENT_PORTS=$2
> +	local BATMAN_PORTS=$3
> +	local WAN_PORTS=$4
> +	local SWITCHHW
> +
> +	SWITCHHW="$(swconfig list | awk '{ print $4 }')"
> +
> +	uci set "network.switch=switch"
> +	uci set "network.switch.name=$SWITCHHW"
> +	uci set "network.switch.enable=1"
> +	uci set "network.switch.reset=1"
> +	uci set "network.switch.enable_vlan=1"
> +
> +	uci set "network.vlan1=switch_vlan"
> +	uci set "network.vlan1.device=$SWITCHHW"
> +	uci set "network.vlan1.vlan=1"
> +	uci set "network.vlan1.ports=$CLIENT_PORTS"
> +
> +	# This defines the VLAN for WAN ports inside the switch.
> +	# This is required even if the WAN eth is separate, but the WAN
> port is in the switch!
> +	if [ -n "$WAN_PORTS" ]; then
> +		uci set "network.vlan2=switch_vlan"
> +		uci set "network.vlan2.device=$SWITCHHW"
> +		uci set "network.vlan2.vlan=2"
> +		uci set "network.vlan2.ports=$WAN_PORTS"
> +	fi
> +
> +	uci set "network.vlan3=switch_vlan"
> +	uci set "network.vlan3.device=$SWITCHHW"
> +	uci set "network.vlan3.vlan=3"
> +	uci set "network.vlan3.ports=$BATMAN_PORTS"
> +
> +	uci set network.mesh.ifname="$SWITCHDEV.1 bat0"
> +	uci set network.ethmesh.ifname="$SWITCHDEV.3"
> +
> +	uci commit network
> +}
> +
> +setupWan() {
> +	# Set up WAN for any device with dedicated port (no one-port where
> mode is changed)
> +	# This is intended for initial setup, not for updates
> +	# (updates are only possible by changing ports in a switch)
> +	#
> +	# Usage: setupWan <WANDEV, e.g. eth0, eth0.2>
> +
> +	local WANDEV=$1
> +
> +	# This defines the WAN interface. We use the VLAN ID only if we do
> NOT have a separate eth.
> +	# This is different from the criterion for the WAN port dealt with
> above!
> +	# If the WANDEV is different from the SWITCHDEV, but the WAN port
> is in the switch,
> +	# the WAN eth has to be connected to the switch untagged!
> +	enableAutoConf "$WANDEV"
> +	uci set network.wan.ifname="$WANDEV"
> +
> +	uci commit network
> +}
> +
> +setupOnePort() {
> +	# Set up port mode for one-port devices
> +	# This is intended for initial setup and for updates
> +	# (latter will require network restart)
> +	#
> +	# Usage: setupOnePort <DEV, e.g. eth0> <ETHMODE, e.g. BATMAN,
> CLIENT, WAN>
> +
> +	local DEV=$1
> +	local ETHMODE=$2
> +
> +	uci set "network.$DEV=interface"
> +	uci set "network.$DEV.ifname=$DEV"
> +	if [ "$ETHMODE" = "WAN" ]; then
> +		enableAutoConf "$DEV"
> +		uci set network.mesh.ifname="bat0"
> +		uci set network.wan.ifname="$DEV"
> +		uci del network.ethmesh.ifname
> +	elif [ "$ETHMODE" = "CLIENT" ] ; then
> +		disableAutoConf "$DEV"
> +		uci set network.mesh.ifname="bat0 $DEV"
> +		uci del network.wan.ifname
> +		uci del network.ethmesh.ifname
> +	else # default=BATMAN
> +		disableAutoConf "$DEV"
> +		uci set network.mesh.ifname="bat0"
> +		uci del network.wan.ifname
> +		uci set network.ethmesh.ifname="$DEV"
> +	fi
> +	uci commit network
> +}
> diff --git
> a/src/packages/fff/fff-network/files/lib/functions/fff/portorder
> b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
> new file mode 100644
> index 00000000..377c302f
> --- /dev/null
> +++ b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
> @@ -0,0 +1,31 @@
> +# Copyright 2019 Adrian Schmutzler
> +# License GPLv3
> +
> +BOARD="$(uci get board.model.name)"
> +
> +case "$BOARD" in
> +	archer-c25-v1|\
> +	archer-c60-v1|\
> +	tl-wr841-v10|\
> +	tl-wr841-v11|\
> +	tl-wr841-v12)
> +		PORTORDER="4 3 2 1"
> +		;;
> +	cpe210|\
> +	cpe510)
> +		PORTORDER="5 4"
> +		;;
> +	gl-ar150)
> +		PORTORDER="1"
> +		;;
> +	tl-wdr4300-v1)
> +		PORTORDER="1 2 3 4 5"
> +		;;
> +	tl-wr841-v8)
> +		PORTORDER="2 3 4 1"
> +		;;
> +	tl-wr1043nd-v4|\
> +	tl-wr1043n-v5)
> +		PORTORDER="5 4 3 2 1"
> +		;;
> +esac
> diff --git a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> deleted file mode 100755
> index 448bd04b..00000000
> --- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> +++ /dev/null
> @@ -1,263 +0,0 @@
> -#!/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
> -
> -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
> -}
> -
> -setAutoConf() {
> -    # Sets ipv6 auto configuration on an interface to on/off
> -    # Usage: setAutoConf <interface> <[0|1]>
> -    local iface=$1
> -    local on=$2
> -
> -    sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf"
> -    echo "# Generated from configurenetwork" > "$sysctlfile"
> -    echo "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile"
> -    echo "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >> "$sysctlfile"
> -    echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >> "$sysctlfile"
> -    echo "net.ipv6.conf.$iface.autoconf = $on" >> "$sysctlfile"
> -    echo "net.ipv6.conf.$iface.accept_ra_rtr_pref = $on" >> "$sysctlfile"
> -    echo "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile"
> -
> -    /sbin/sysctl -p "$sysctlfile"
> -}
> -
> -enableAutoConf() {
> -    # Enables ipv6 auto configuration on an interface
> -    # Usage: enableAutoConf <interface>
> -    local iface=$1
> -
> -    setAutoConf "$iface" "1"
> -}
> -
> -disableAutoConf() {
> -    # Disables ipv6 auto configuration on an interface
> -    # Usage: disableAutoConf <interface>
> -    local iface=$1
> -
> -    setAutoConf "$iface" "0"
> -}
> -
> -BOARD="$(uci get board.model.name)"
> -. /etc/network.$BOARD
> -
> -if [ -s /etc/network.config ] ; then
> -    . /etc/network.config
> -else
> -    # Write network.config
> -    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
> -    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 ! 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"
> -
> -    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"
> -
> -        enableAutoConf "$WANDEV.2"
> -    else
> -        enableAutoConf "$WANDEV"
> -    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
> -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
> -        enableAutoConf "$WANDEV"
> -        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
> -        disableAutoConf "$WANDEV"
> -        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
> -        disableAutoConf "$WANDEV"
> -        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
> -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 network
> -
> -        ifconfig $SWITCHDEV.3 down
> -        ifconfig $SWITCHDEV.3 hw ether $ETHMESHMAC
> -        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 network
> -
> -        ifconfig br-mesh down
> -        ifconfig br-mesh hw ether $ROUTERMAC
> -        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 network
> -        ifconfig eth0 down
> -        ifconfig eth0 hw ether $NEW_MACADDR
> -        ifconfig eth0 up
> -        /etc/init.d/network restart
> -fi
> -
> -if uci -q get "network.mesh.ip6addr" > /dev/null
> -then
> -    echo "IPv6 for mesh is set already"
> -else
> -    echo "Setting IPv6 addresses"
> -    # 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" "$ROUTERMAC")"
> -    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" "$ROUTERMAC")"
> -    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
> diff --git a/src/packages/fff/fff-sysupgrade/Makefile
> b/src/packages/fff/fff-sysupgrade/Makefile
> index 90ef66af..0e6c08ec 100644
> --- a/src/packages/fff/fff-sysupgrade/Makefile
> +++ b/src/packages/fff/fff-sysupgrade/Makefile
> @@ -1,8 +1,7 @@
>  include $(TOPDIR)/rules.mk
> 
>  PKG_NAME:=fff-sysupgrade
> -PKG_VERSION:=9
> -PKG_RELEASE:=1
> +PKG_RELEASE:=10
> 
>  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
> 
> diff --git
> a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> index 7ff83f54..f5783687 100644
> ---
> a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> +++
> b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> @@ -7,7 +7,6 @@ cat > /etc/sysupgrade.conf <<-__EOF__
>  /etc/dropbear/dropbear_dss_host_key
>  /etc/dropbear/dropbear_rsa_host_key
>  /etc/dropbear/authorized_keys
> -/etc/network.config
>  /etc/config/fff
>  /etc/hoodfile
>  __EOF__
> --
> 2.11.0
Christian Dresel April 23, 2019, 11:13 a.m.
hi

On 23.04.19 13:07, Adrian Schmutzler wrote:
> Hallo zusammen,
>
> ich bräuchte noch folgende Reviews:
> Robert 3/14
> Christian 6/14
> Christian 14/14

ich hab gehofft ich kann mir die wegsparen weil Robert schon dran ist ;)
Die waren mir bisher zu groß/verwirrend um mich da jetzt reinzudenken.

>
> Folgende Änderungen habe ich jetzt berücksichtigt (ich will nicht nochmal ein Patchset schicken):
> - default-case für Ports wie in Mail enthalten.
> - sleep 5 weg
> - etc/init.d/network restart weg bei Skripten, dafür Hinweis bei echo ("Port updated successfully. Please restart network or device!")
> - 90-firstbootfff von fff-support nach fff-network verschoben
ich hab jetzt nicht mehr nachgeguckt, achtest du da aber bitte auf
Abhängigkeiten der Pakete ob sich dadurch was ändert?
>
> Der CPUPORT-Patch hat zwar auch nur ein Review, das wäre mir aber wurscht, da der im Moment ja noch keine Abhängigkeiten hat.

Den hab ich genau aus diesen Grund raus gelassen, irgendwie passt der
nicht so wirklich in das Set rein und ich kann damit wenig anfangen. Der
ist für die Gateway Seite zuständig, warum soll der eigentlich hier mit
rein?

Gruß

Christian

>
> Grüße
>
> Adrian
>
>> -----Original Message-----
>> From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of
>> Adrian Schmutzler
>> Sent: Montag, 22. April 2019 14:35
>> To: franken-dev@freifunk.net
>> Subject: [PATCH v3 03/14] fff-network: Reorganize network initialization
>>
>> This removes the configurenetwork script and replaces it by some
>> scripts run only during first boot.
>>
>> This introduces several changes:
>> - The different tasks dealt with in configurenetwork are split.
>>   Thus, one script deals with switch/port setup, one with br-mesh
>>   MAC address, one with ETHMESHMAC, and one with IP addresses.
>>   This makes the whole approach more modular, compared to the
>>   monolithic configurenetwork.
>> - Where configurenetwork contained sophisticated, nested conditions
>>   to account for all possible combinations of variables, the new
>>   approach is inspired by OpenWrt's board.d subfiles. Instead of
>>   defining variables, we now directly call function in a
>>   select-case. This is much more flexible, as we can just put code
>>   there for a special case instead of bending configurenetwork for
>>   it.
>> - The select-case accounts for the various cases of similar/same
>>   parameters of multiple devices, which can be grouped now.
>> - Scripts are run only at first boot. Later changes have to be
>>   done manually (we will provide some scripts later). Those will
>>   typically be limited to changing only the ports; no need to run
>>   whole network config again.
>> - network.mode and network.config will disappear. For switch-based
>>   devices, there is no advantage of using network.config compared
>>   directly editing /etc/config/network. Upgrade-safety can be
>>   established by putting uci commands in an upgrade-safe script
>>   file (to be provided in a later patch).
>>
>> After this patch, show_info and the ports display in WebUI are
>> broken. Those will be fixed in a later patch.
>>
>> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
>>
>> ---
>>
>> Changed in v2:
>> - Fixed archer-c60-v2 to v1
>> - Added network functions file in uci-defaults/22c
>> - Removed some -q from uci
>> - Removed all commands only needed for running devices (this is
>>   uci only)
>> - Added descriptions for functions in networksetup
>>
>> Changed in v3:
>> - Changed order of 22a and 22b
>> - uci del instead uci set for WAN on one-port
>> - switch/vlanX instead of eth#/eth#.# for switch-based devices
>> ---
>>  bsp/default/root_file_system/etc/rc.local          |   4 -
>>  src/packages/fff/fff-network/Makefile              |   4 +-
>>  .../files/etc/uci-defaults/22a-config-ports        |  89 +++++++
>>  .../files/etc/uci-defaults/22b-config-routermac    |  55 +++++
>>  .../files/etc/uci-defaults/22c-config-ethmesh      |  75 ++++++
>>  .../files/etc/uci-defaults/23-config-ipaddr        |  31 +++
>>  .../files/lib/functions/fff/networksetup           | 163 +++++++++++++
>>  .../fff-network/files/lib/functions/fff/portorder  |  31 +++
>>  .../fff-network/files/usr/sbin/configurenetwork    | 263
>> ---------------------
>>  src/packages/fff/fff-sysupgrade/Makefile           |   3 +-
>>  .../files/etc/uci-defaults/99-fff-sysupgrade       |   1 -
>>  11 files changed, 446 insertions(+), 273 deletions(-)
>>  create mode 100644
>> src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>>  create mode 100644
>> src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>>  create mode 100644
>> src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>>  create mode 100644
>> src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>>  create mode 100644
>> src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>  create mode 100644
>> src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>  delete mode 100755
>> src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>
>> diff --git a/bsp/default/root_file_system/etc/rc.local
>> b/bsp/default/root_file_system/etc/rc.local
>> index 59042c37..e02368a5 100755
>> --- a/bsp/default/root_file_system/etc/rc.local
>> +++ b/bsp/default/root_file_system/etc/rc.local
>> @@ -2,10 +2,6 @@
>>  # Put your custom commands here that should be executed once
>>  # the system init finished. By default this file does nothing.
>>
>> -/usr/sbin/configurenetwork
>> -
>> -sleep 3
>> -
>>  /usr/sbin/configurehood
>>
>>  touch /tmp/started
>> diff --git a/src/packages/fff/fff-network/Makefile
>> b/src/packages/fff/fff-network/Makefile
>> index e9335884..11796797 100644
>> --- a/src/packages/fff/fff-network/Makefile
>> +++ b/src/packages/fff/fff-network/Makefile
>> @@ -1,8 +1,7 @@
>>  include $(TOPDIR)/rules.mk
>>
>>  PKG_NAME:=fff-network
>> -PKG_VERSION:=10
>> -PKG_RELEASE:=1
>> +PKG_RELEASE:=11
>>
>>  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
>>
>> @@ -34,7 +33,6 @@ endef
>>
>>  define Package/$(PKG_NAME)/install
>>  	$(CP) ./files/* $(1)/
>> -	test -d ./$(BOARD) && $(CP) ./$(BOARD)/* $(1)/etc/
>>  endef
>>
>>  $(eval $(call BuildPackage,$(PKG_NAME)))
>> diff --git
>> a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>> new file mode 100644
>> index 00000000..b8eaceab
>> --- /dev/null
>> +++ b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>> @@ -0,0 +1,89 @@
>> +#!/bin/sh
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +BOARD="$(uci get board.model.name)"
>> +
>> +. /lib/functions/fff/networksetup
>> +
>> +case "$BOARD" in
>> +	archer-c7-v2)
>> +		setupSwitch "eth1" "4 5 0t" "2 3 0t" "1 6"
>> +		setupWan "eth0"
>> +		;;
>> +	archer-c25-v1|\
>> +	archer-c60-v1)
>> +		setupSwitch "eth1" "1 2 0t" "3 4 0t"
>> +		setupWan "eth0"
>> +		;;
>> +	cpe210|\
>> +	cpe510)
>> +		# Default: LAN0: WAN, LAN1: CLIENT
>> +		setupSwitch "eth0" "0t 4" "0t" "0t 5"
>> +		setupWan "eth0.2"
>> +		;;
>> +	gl-ar150)
>> +		# Default: CLIENT
>> +		setupSwitch "eth1" "0t 1" "0t"
>> +		setupWan "eth0"
>> +		;;
>> +	tl-wdr3500-v1|\
>> +	tl-wr741nd-v2|\
>> +	tl-wr841-v7|\
>> +	tl-wr841-v9|\
>> +	tl-wr841-v10|\
>> +	tl-wr841-v11|\
>> +	tl-wr841-v12)
>> +		setupSwitch "eth0" "1 2 0t" "3 4 0t"
>> +		setupWan "eth1"
>> +		;;
>> +	tl-wdr3600-v1|\
>> +	tl-wdr4300-v1|\
>> +	tl-wdr4310-v1|\
>> +	tl-wdr4900-v1)
>> +		setupSwitch "eth0" "4 5 0t" "2 3 0t" "1 0t"
>> +		setupWan "eth0.2"
>> +		;;
>> +	tl-wr841-v8|\
>> +	tl-wr842n-v2)
>> +		setupSwitch "eth1" "1 4 0t" "2 3 0t"
>> +		setupWan "eth0"
>> +		;;
>> +	tl-wr740n-v4|\
>> +	tl-wr740nd-v4|\
>> +	tl-wr741nd-v4)
>> +		setupSwitch "eth0" "1 4 0t" "2 3 0t"
>> +		setupWan "eth1"
>> +		;;
>> +	tl-wr1043nd-v1)
>> +		setupSwitch "eth0" "3 4 5t" "1 2 5t" "0 5t"
>> +		setupWan "eth0.2"
>> +		;;
>> +	tl-wr1043nd-v2|\
>> +	tl-wr1043nd-v3)
>> +		setupSwitch "eth0" "1 2 6t" "3 4 6t" "5 6t"
>> +		setupWan "eth0.2"
>> +		;;
>> +	tl-wr1043nd-v4|\
>> +	tl-wr1043n-v5)
>> +		setupSwitch "eth0" "1 2 0t" "3 4 0t" "5 0t"
>> +		setupWan "eth0.2"
>> +		;;
>> +	cpe210-v2|\
>> +	cpe210-v3|\
>> +	tl-mr3020-v1|\
>> +	tl-wa850re-v1|\
>> +	tl-wa860re-v1|\
>> +	tl-wa901nd-v2|\
>> +	ubnt-bullet-m|\
>> +	ubnt-loco-m|\
>> +	ubnt-loco-m-xw|\
>> +	ubnt-nano-m|\
>> +	ubnt-pico-m|\
>> +	ubnt-power-m-xw|\
>> +	ubnt-unifi|\
>> +	ubnt-unifiac-lite|\
>> +	ubnt-unifiac-mesh)
>> +		setupOnePort "eth0" "CLIENT"
>> +		;;
>> +esac
>> diff --git
>> a/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>> new file mode 100644
>> index 00000000..d1a5e50c
>> --- /dev/null
>> +++
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>> @@ -0,0 +1,55 @@
>> +#!/bin/sh
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +BOARD="$(uci get board.model.name)"
>> +
>> +. /lib/functions/fff/networksetup
>> +
>> +. /lib/functions.sh
>> +. /lib/functions/system.sh
>> +
>> +case "$BOARD" in
>> +	archer-c7-v2|\
>> +	tl-wr841-v8|\
>> +	tl-wr842n-v2|\
>> +	tl-wr1043nd-v2|\
>> +	tl-wr1043nd-v3)
>> +		ROUTERMAC=$(cat /sys/class/net/eth1/address)
>> +		;;
>> +	cpe210-v2|\
>> +	cpe210-v3|\
>> +	tl-wa850re-v1|\
>> +	tl-wa860re-v1|\
>> +	tl-wa901nd-v2|\
>> +	tl-wdr3500-v1|\
>> +	tl-wr740n-v4|\
>> +	tl-wr740nd-v4|\
>> +	tl-wr741nd-v2|\
>> +	tl-wr741nd-v4|\
>> +	tl-wr841-v7|\
>> +	ubnt-bullet-m|\
>> +	ubnt-loco-m|\
>> +	ubnt-loco-m-xw|\
>> +	ubnt-nano-m|\
>> +	ubnt-pico-m|\
>> +	ubnt-power-m-xw|\
>> +	ubnt-unifi)
>> +		ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress)
>> +		;;
>> +	tl-wdr3600-v1|\
>> +	tl-wdr4300-v1|\
>> +	tl-wdr4310-v1)
>> +		ROUTERMAC=$(cat /sys/class/ieee80211/phy1/macaddress)
>> +		;;
>> +	ubnt-unifiac-lite|\
>> +	ubnt-unifiac-mesh)
>> +		ROUTERMAC=$(mtd_get_mac_binary EEPROM 0x0)
>> +		;;
>> +	*)
>> +		ROUTERMAC=$(cat /sys/class/net/eth0/address)
>> +		;;
>> +esac
>> +
>> +uci set "network.mesh.macaddr=$ROUTERMAC"
>> +uci commit network
>> diff --git
>> a/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>> new file mode 100644
>> index 00000000..86c840c3
>> --- /dev/null
>> +++
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>> @@ -0,0 +1,75 @@
>> +#!/bin/sh
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +BOARD="$(uci get board.model.name)"
>> +
>> +. /lib/functions/fff/network
>> +. /lib/functions/fff/networksetup
>> +
>> +. /lib/functions.sh
>> +. /lib/functions/system.sh
>> +
>> +# macFlipLocalBit:
>> +# use mac address from phyX with 'locally administered' bit set to '1'
>> +# only possible, because wXmesh is created first and therefore gets the
>> 'universally administered address'
>> +
>> +case "$BOARD" in
>> +	archer-c7-v2|\
>> +	tl-wr841-v8|\
>> +	tl-wr842n-v2)
>> +		ETHMESHMAC=$(cat /sys/class/net/eth0/address)
>> +		;;
>> +	archer-c25-v1|\
>> +	archer-c60-v1|\
>> +	tl-wr740n-v4|\
>> +	tl-wr740nd-v4|\
>> +	tl-wr741nd-v2|\
>> +	tl-wr741nd-v4|\
>> +	tl-wr841-v7|\
>> +	tl-wr841-v9|\
>> +	tl-wr841-v10|\
>> +	tl-wr841-v11|\
>> +	tl-wr841-v12)
>> +		ETHMESHMAC=$(cat /sys/class/net/eth1/address)
>> +		;;
>> +	cpe210|\
>> +	cpe210-v2|\
>> +	cpe210-v3|\
>> +	cpe510|\
>> +	tl-wa850re-v1|\
>> +	tl-wa860re-v1|\
>> +	tl-wa901nd-v2|\
>> +	tl-wr1043nd-v1|\
>> +	ubnt-bullet-m|\
>> +	ubnt-loco-m|\
>> +	ubnt-loco-m-xw|\
>> +	ubnt-nano-m|\
>> +	ubnt-pico-m|\
>> +	ubnt-power-m-xw|\
>> +	ubnt-unifi)
>> +		ETHMESHMAC=$(macFlipLocalBit "$(cat
>> /sys/class/ieee80211/phy0/macaddress)")
>> +		;;
>> +	gl-ar150|\
>> +	tl-mr3020-v1)
>> +		ETHMESHMAC=$(macFlipLocalBit "$(cat
>> /sys/class/net/eth0/address)")
>> +		;;
>> +	tl-wdr4900-v1)
>> +		ETHMESHMAC=$(macFlipLocalBit "$(cat
>> /sys/class/ieee80211/phy1/macaddress)")
>> +		;;
>> +	tl-wr1043nd-v4)
>> +		ETHMESHMAC=$(mtd_get_mac_binary config 0x1017c)
>> +		;;
>> +	tl-wr1043n-v5)
>> +		ETHMESHMAC=$(macaddr_add $(mtd_get_mac_binary
>> product-info
>> 8) 1)
>> +		;;
>> +	ubnt-unifiac-lite|\
>> +	ubnt-unifiac-mesh)
>> +		ETHMESHMAC=$(macFlipLocalBit "$(mtd_get_mac_binary
>> EEPROM
>> 0x0)")
>> +		;;
>> +esac
>> +
>> +if [ -n "$ETHMESHMAC" ]; then
>> +	uci set "network.ethmesh.macaddr=$ETHMESHMAC"
>> +	uci commit network
>> +fi
>> diff --git
>> a/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>> new file mode 100644
>> index 00000000..db500c15
>> --- /dev/null
>> +++ b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>> @@ -0,0 +1,31 @@
>> +#!/bin/sh
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +. /lib/functions/fff/network
>> +
>> +echo "Setting IPv6 addresses"
>> +# Some time needed :(
>> +sleep 5
>> +
>> +ROUTERMAC=$(uci get network.mesh.macaddr)
>> +prefix="fdff:0::/64"
>> +
>> +# Set $prefix as prefix
>> +uci set network.globals=globals
>> +uci set "network.globals.ula_prefix=$prefix"
>> +
>> +# Set $prefix::MAC as IP
>> +addr="$(ipMacAssemble "$prefix" "$ROUTERMAC")"
>> +uci add_list "network.mesh.ip6addr=$addr"
>> +uci set network.mesh.proto=static
>> +
>> +# Set $prefix::1 as IP
>> +addr="$(ipAssemble "$prefix" "1")"
>> +uci add_list "network.mesh.ip6addr=$addr"
>> +
>> +# Set $prefix::link-local as IP
>> +addr="$(ipEUIAssemble "$prefix" "$ROUTERMAC")"
>> +uci add_list "network.mesh.ip6addr=$addr"
>> +
>> +uci commit network
>> diff --git
>> a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>> b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>> new file mode 100644
>> index 00000000..ccc943df
>> --- /dev/null
>> +++ b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>> @@ -0,0 +1,163 @@
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +. /lib/functions/network.sh
>> +
>> +setAutoConf() {
>> +	# Sets ipv6 auto configuration on an interface to on/off
>> +	# Usage: setAutoConf <interface> <[0|1]>
>> +	local iface=$1
>> +	local on=$2
>> +
>> +	sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf"
>> +	echo "# Generated from configurenetwork" > "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >>
>> "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >> "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.autoconf = $on" >> "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.accept_ra_rtr_pref = $on" >>
>> "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile"
>> +
>> +	/sbin/sysctl -p "$sysctlfile"
>> +}
>> +
>> +enableAutoConf() {
>> +	# Enables ipv6 auto configuration on an interface
>> +	# Usage: enableAutoConf <interface>
>> +	local iface=$1
>> +
>> +	setAutoConf "$iface" "1"
>> +}
>> +
>> +disableAutoConf() {
>> +	# Disables ipv6 auto configuration on an interface
>> +	# Usage: disableAutoConf <interface>
>> +	local iface=$1
>> +
>> +	setAutoConf "$iface" "0"
>> +}
>> +
>> +fixMac() {
>> +	# Update MAC address on live device/interface
>> +	#
>> +	# fixMac <newmac> <interface>
>> +	#
>> +	# newmac: MAC address to be set
>> +	# interface: Interface to be updated as in uci (e.g. mesh)
>> +
>> +	local newmac=$1
>> +	local iface=$2
>> +	local dev
>> +
>> +	echo "Fixing MAC on $iface"
>> +	sleep 10
>> +
>> +	network_get_physdev dev "$iface"
>> +
>> +	uci set "network.${iface}.macaddr=$newmac"
>> +	uci commit network
>> +
>> +	if [ -n "$dev" ]; then
>> +		ip link set "$dev" down
>> +		ip link set "$dev" address "$newmac"
>> +		ip link set "$dev" up
>> +	fi
>> +
>> +	/etc/init.d/network restart
>> +}
>> +
>> +setupSwitch() {
>> +	# Set up switch for switch-based devices
>> +	# This is intended for initial setup, not for updates
>> +	# (changing ports will be sufficient then)
>> +	#
>> +	# Usage: setupSwitch <SWITCHDEV, e.g. eth0> <CLIENT_PORTS>
>> <BATMAN_PORTS> [<WAN_PORTS>]
>> +
>> +	local SWITCHDEV=$1
>> +	local CLIENT_PORTS=$2
>> +	local BATMAN_PORTS=$3
>> +	local WAN_PORTS=$4
>> +	local SWITCHHW
>> +
>> +	SWITCHHW="$(swconfig list | awk '{ print $4 }')"
>> +
>> +	uci set "network.switch=switch"
>> +	uci set "network.switch.name=$SWITCHHW"
>> +	uci set "network.switch.enable=1"
>> +	uci set "network.switch.reset=1"
>> +	uci set "network.switch.enable_vlan=1"
>> +
>> +	uci set "network.vlan1=switch_vlan"
>> +	uci set "network.vlan1.device=$SWITCHHW"
>> +	uci set "network.vlan1.vlan=1"
>> +	uci set "network.vlan1.ports=$CLIENT_PORTS"
>> +
>> +	# This defines the VLAN for WAN ports inside the switch.
>> +	# This is required even if the WAN eth is separate, but the WAN
>> port is in the switch!
>> +	if [ -n "$WAN_PORTS" ]; then
>> +		uci set "network.vlan2=switch_vlan"
>> +		uci set "network.vlan2.device=$SWITCHHW"
>> +		uci set "network.vlan2.vlan=2"
>> +		uci set "network.vlan2.ports=$WAN_PORTS"
>> +	fi
>> +
>> +	uci set "network.vlan3=switch_vlan"
>> +	uci set "network.vlan3.device=$SWITCHHW"
>> +	uci set "network.vlan3.vlan=3"
>> +	uci set "network.vlan3.ports=$BATMAN_PORTS"
>> +
>> +	uci set network.mesh.ifname="$SWITCHDEV.1 bat0"
>> +	uci set network.ethmesh.ifname="$SWITCHDEV.3"
>> +
>> +	uci commit network
>> +}
>> +
>> +setupWan() {
>> +	# Set up WAN for any device with dedicated port (no one-port where
>> mode is changed)
>> +	# This is intended for initial setup, not for updates
>> +	# (updates are only possible by changing ports in a switch)
>> +	#
>> +	# Usage: setupWan <WANDEV, e.g. eth0, eth0.2>
>> +
>> +	local WANDEV=$1
>> +
>> +	# This defines the WAN interface. We use the VLAN ID only if we do
>> NOT have a separate eth.
>> +	# This is different from the criterion for the WAN port dealt with
>> above!
>> +	# If the WANDEV is different from the SWITCHDEV, but the WAN port
>> is in the switch,
>> +	# the WAN eth has to be connected to the switch untagged!
>> +	enableAutoConf "$WANDEV"
>> +	uci set network.wan.ifname="$WANDEV"
>> +
>> +	uci commit network
>> +}
>> +
>> +setupOnePort() {
>> +	# Set up port mode for one-port devices
>> +	# This is intended for initial setup and for updates
>> +	# (latter will require network restart)
>> +	#
>> +	# Usage: setupOnePort <DEV, e.g. eth0> <ETHMODE, e.g. BATMAN,
>> CLIENT, WAN>
>> +
>> +	local DEV=$1
>> +	local ETHMODE=$2
>> +
>> +	uci set "network.$DEV=interface"
>> +	uci set "network.$DEV.ifname=$DEV"
>> +	if [ "$ETHMODE" = "WAN" ]; then
>> +		enableAutoConf "$DEV"
>> +		uci set network.mesh.ifname="bat0"
>> +		uci set network.wan.ifname="$DEV"
>> +		uci del network.ethmesh.ifname
>> +	elif [ "$ETHMODE" = "CLIENT" ] ; then
>> +		disableAutoConf "$DEV"
>> +		uci set network.mesh.ifname="bat0 $DEV"
>> +		uci del network.wan.ifname
>> +		uci del network.ethmesh.ifname
>> +	else # default=BATMAN
>> +		disableAutoConf "$DEV"
>> +		uci set network.mesh.ifname="bat0"
>> +		uci del network.wan.ifname
>> +		uci set network.ethmesh.ifname="$DEV"
>> +	fi
>> +	uci commit network
>> +}
>> diff --git
>> a/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>> b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>> new file mode 100644
>> index 00000000..377c302f
>> --- /dev/null
>> +++ b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>> @@ -0,0 +1,31 @@
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +BOARD="$(uci get board.model.name)"
>> +
>> +case "$BOARD" in
>> +	archer-c25-v1|\
>> +	archer-c60-v1|\
>> +	tl-wr841-v10|\
>> +	tl-wr841-v11|\
>> +	tl-wr841-v12)
>> +		PORTORDER="4 3 2 1"
>> +		;;
>> +	cpe210|\
>> +	cpe510)
>> +		PORTORDER="5 4"
>> +		;;
>> +	gl-ar150)
>> +		PORTORDER="1"
>> +		;;
>> +	tl-wdr4300-v1)
>> +		PORTORDER="1 2 3 4 5"
>> +		;;
>> +	tl-wr841-v8)
>> +		PORTORDER="2 3 4 1"
>> +		;;
>> +	tl-wr1043nd-v4|\
>> +	tl-wr1043n-v5)
>> +		PORTORDER="5 4 3 2 1"
>> +		;;
>> +esac
>> diff --git a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>> b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>> deleted file mode 100755
>> index 448bd04b..00000000
>> --- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>> +++ /dev/null
>> @@ -1,263 +0,0 @@
>> -#!/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
>> -
>> -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
>> -}
>> -
>> -setAutoConf() {
>> -    # Sets ipv6 auto configuration on an interface to on/off
>> -    # Usage: setAutoConf <interface> <[0|1]>
>> -    local iface=$1
>> -    local on=$2
>> -
>> -    sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf"
>> -    echo "# Generated from configurenetwork" > "$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >> "$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >> "$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.autoconf = $on" >> "$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.accept_ra_rtr_pref = $on" >> "$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile"
>> -
>> -    /sbin/sysctl -p "$sysctlfile"
>> -}
>> -
>> -enableAutoConf() {
>> -    # Enables ipv6 auto configuration on an interface
>> -    # Usage: enableAutoConf <interface>
>> -    local iface=$1
>> -
>> -    setAutoConf "$iface" "1"
>> -}
>> -
>> -disableAutoConf() {
>> -    # Disables ipv6 auto configuration on an interface
>> -    # Usage: disableAutoConf <interface>
>> -    local iface=$1
>> -
>> -    setAutoConf "$iface" "0"
>> -}
>> -
>> -BOARD="$(uci get board.model.name)"
>> -. /etc/network.$BOARD
>> -
>> -if [ -s /etc/network.config ] ; then
>> -    . /etc/network.config
>> -else
>> -    # Write network.config
>> -    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
>> -    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 ! 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"
>> -
>> -    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"
>> -
>> -        enableAutoConf "$WANDEV.2"
>> -    else
>> -        enableAutoConf "$WANDEV"
>> -    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
>> -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
>> -        enableAutoConf "$WANDEV"
>> -        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
>> -        disableAutoConf "$WANDEV"
>> -        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
>> -        disableAutoConf "$WANDEV"
>> -        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
>> -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 network
>> -
>> -        ifconfig $SWITCHDEV.3 down
>> -        ifconfig $SWITCHDEV.3 hw ether $ETHMESHMAC
>> -        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 network
>> -
>> -        ifconfig br-mesh down
>> -        ifconfig br-mesh hw ether $ROUTERMAC
>> -        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 network
>> -        ifconfig eth0 down
>> -        ifconfig eth0 hw ether $NEW_MACADDR
>> -        ifconfig eth0 up
>> -        /etc/init.d/network restart
>> -fi
>> -
>> -if uci -q get "network.mesh.ip6addr" > /dev/null
>> -then
>> -    echo "IPv6 for mesh is set already"
>> -else
>> -    echo "Setting IPv6 addresses"
>> -    # 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" "$ROUTERMAC")"
>> -    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" "$ROUTERMAC")"
>> -    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
>> diff --git a/src/packages/fff/fff-sysupgrade/Makefile
>> b/src/packages/fff/fff-sysupgrade/Makefile
>> index 90ef66af..0e6c08ec 100644
>> --- a/src/packages/fff/fff-sysupgrade/Makefile
>> +++ b/src/packages/fff/fff-sysupgrade/Makefile
>> @@ -1,8 +1,7 @@
>>  include $(TOPDIR)/rules.mk
>>
>>  PKG_NAME:=fff-sysupgrade
>> -PKG_VERSION:=9
>> -PKG_RELEASE:=1
>> +PKG_RELEASE:=10
>>
>>  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
>>
>> diff --git
>> a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>> b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>> index 7ff83f54..f5783687 100644
>> ---
>> a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>> +++
>> b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>> @@ -7,7 +7,6 @@ cat > /etc/sysupgrade.conf <<-__EOF__
>>  /etc/dropbear/dropbear_dss_host_key
>>  /etc/dropbear/dropbear_rsa_host_key
>>  /etc/dropbear/authorized_keys
>> -/etc/network.config
>>  /etc/config/fff
>>  /etc/hoodfile
>>  __EOF__
>> --
>> 2.11.0
Adrian Schmutzler April 23, 2019, 11:19 a.m.
Hallo Christian,

> -----Original Message-----
> From: Christian Dresel [mailto:fff@chrisi01.de]
> Sent: Dienstag, 23. April 2019 13:14
> To: Adrian Schmutzler <mail@adrianschmutzler.de>; franken-dev@freifunk.net
> Subject: Re: [PATCH v3 03/14] fff-network: Reorganize network initialization
> 
> hi
> 
> On 23.04.19 13:07, Adrian Schmutzler wrote:
> > Hallo zusammen,
> >
> > ich bräuchte noch folgende Reviews:
> > Robert 3/14
> > Christian 6/14
> > Christian 14/14
> 
> ich hab gehofft ich kann mir die wegsparen weil Robert schon dran ist ;)
> Die waren mir bisher zu groß/verwirrend um mich da jetzt reinzudenken.

Dann hat's halt auch nur einer durchdacht ;-)
Wenn du gar keine Lust hast, denke mal über ein Acked-by nach.

> 
> >
> > Folgende Änderungen habe ich jetzt berücksichtigt (ich will nicht nochmal ein
> Patchset schicken):
> > - default-case für Ports wie in Mail enthalten.
> > - sleep 5 weg
> > - etc/init.d/network restart weg bei Skripten, dafür Hinweis bei echo ("Port
> updated successfully. Please restart network or device!")
> > - 90-firstbootfff von fff-support nach fff-network verschoben
> ich hab jetzt nicht mehr nachgeguckt, achtest du da aber bitte auf
> Abhängigkeiten der Pakete ob sich dadurch was ändert?
> >
> > Der CPUPORT-Patch hat zwar auch nur ein Review, das wäre mir aber wurscht,
> da der im Moment ja noch keine Abhängigkeiten hat.
> 
> Den hab ich genau aus diesen Grund raus gelassen, irgendwie passt der
> nicht so wirklich in das Set rein und ich kann damit wenig anfangen. Der
> ist für die Gateway Seite zuständig, warum soll der eigentlich hier mit
> rein?

Ja, in der Tat. Das ist nur eine Vorbereitung für die Gateway-Firmware. Da ich aber ohnehin die ganzen Ports rumjongliert habe, ist das quasi "mit rausgefallen", da bei mir ja die CPU-Ports auch schon in den network.* Files standen. Könnte man ohne Weiteres einfach weglassen, aber ich
würde es bei der Gelegenheit einfach mit reinwerfen, für die GW-Patches brauchen wir es ja eh. Ggf. setze ich das noch an das Ende des Patchsets.
Entsprechend reicht mir aber auch das eine Review.

Grüße

Adrian

> 
> Gruß
> 
> Christian
> 
> >
> > Grüße
> >
> > Adrian
> >
> >> -----Original Message-----
> >> From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf
> Of
> >> Adrian Schmutzler
> >> Sent: Montag, 22. April 2019 14:35
> >> To: franken-dev@freifunk.net
> >> Subject: [PATCH v3 03/14] fff-network: Reorganize network initialization
> >>
> >> This removes the configurenetwork script and replaces it by some
> >> scripts run only during first boot.
> >>
> >> This introduces several changes:
> >> - The different tasks dealt with in configurenetwork are split.
> >>   Thus, one script deals with switch/port setup, one with br-mesh
> >>   MAC address, one with ETHMESHMAC, and one with IP addresses.
> >>   This makes the whole approach more modular, compared to the
> >>   monolithic configurenetwork.
> >> - Where configurenetwork contained sophisticated, nested conditions
> >>   to account for all possible combinations of variables, the new
> >>   approach is inspired by OpenWrt's board.d subfiles. Instead of
> >>   defining variables, we now directly call function in a
> >>   select-case. This is much more flexible, as we can just put code
> >>   there for a special case instead of bending configurenetwork for
> >>   it.
> >> - The select-case accounts for the various cases of similar/same
> >>   parameters of multiple devices, which can be grouped now.
> >> - Scripts are run only at first boot. Later changes have to be
> >>   done manually (we will provide some scripts later). Those will
> >>   typically be limited to changing only the ports; no need to run
> >>   whole network config again.
> >> - network.mode and network.config will disappear. For switch-based
> >>   devices, there is no advantage of using network.config compared
> >>   directly editing /etc/config/network. Upgrade-safety can be
> >>   established by putting uci commands in an upgrade-safe script
> >>   file (to be provided in a later patch).
> >>
> >> After this patch, show_info and the ports display in WebUI are
> >> broken. Those will be fixed in a later patch.
> >>
> >> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
> >>
> >> ---
> >>
> >> Changed in v2:
> >> - Fixed archer-c60-v2 to v1
> >> - Added network functions file in uci-defaults/22c
> >> - Removed some -q from uci
> >> - Removed all commands only needed for running devices (this is
> >>   uci only)
> >> - Added descriptions for functions in networksetup
> >>
> >> Changed in v3:
> >> - Changed order of 22a and 22b
> >> - uci del instead uci set for WAN on one-port
> >> - switch/vlanX instead of eth#/eth#.# for switch-based devices
> >> ---
> >>  bsp/default/root_file_system/etc/rc.local          |   4 -
> >>  src/packages/fff/fff-network/Makefile              |   4 +-
> >>  .../files/etc/uci-defaults/22a-config-ports        |  89 +++++++
> >>  .../files/etc/uci-defaults/22b-config-routermac    |  55 +++++
> >>  .../files/etc/uci-defaults/22c-config-ethmesh      |  75 ++++++
> >>  .../files/etc/uci-defaults/23-config-ipaddr        |  31 +++
> >>  .../files/lib/functions/fff/networksetup           | 163 +++++++++++++
> >>  .../fff-network/files/lib/functions/fff/portorder  |  31 +++
> >>  .../fff-network/files/usr/sbin/configurenetwork    | 263
> >> ---------------------
> >>  src/packages/fff/fff-sysupgrade/Makefile           |   3 +-
> >>  .../files/etc/uci-defaults/99-fff-sysupgrade       |   1 -
> >>  11 files changed, 446 insertions(+), 273 deletions(-)
> >>  create mode 100644
> >> src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
> >>  create mode 100644
> >> src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
> >>  create mode 100644
> >> src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
> >>  create mode 100644
> >> src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
> >>  create mode 100644
> >> src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> >>  create mode 100644
> >> src/packages/fff/fff-network/files/lib/functions/fff/portorder
> >>  delete mode 100755
> >> src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> >>
> >> diff --git a/bsp/default/root_file_system/etc/rc.local
> >> b/bsp/default/root_file_system/etc/rc.local
> >> index 59042c37..e02368a5 100755
> >> --- a/bsp/default/root_file_system/etc/rc.local
> >> +++ b/bsp/default/root_file_system/etc/rc.local
> >> @@ -2,10 +2,6 @@
> >>  # Put your custom commands here that should be executed once
> >>  # the system init finished. By default this file does nothing.
> >>
> >> -/usr/sbin/configurenetwork
> >> -
> >> -sleep 3
> >> -
> >>  /usr/sbin/configurehood
> >>
> >>  touch /tmp/started
> >> diff --git a/src/packages/fff/fff-network/Makefile
> >> b/src/packages/fff/fff-network/Makefile
> >> index e9335884..11796797 100644
> >> --- a/src/packages/fff/fff-network/Makefile
> >> +++ b/src/packages/fff/fff-network/Makefile
> >> @@ -1,8 +1,7 @@
> >>  include $(TOPDIR)/rules.mk
> >>
> >>  PKG_NAME:=fff-network
> >> -PKG_VERSION:=10
> >> -PKG_RELEASE:=1
> >> +PKG_RELEASE:=11
> >>
> >>  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
> >>
> >> @@ -34,7 +33,6 @@ endef
> >>
> >>  define Package/$(PKG_NAME)/install
> >>  	$(CP) ./files/* $(1)/
> >> -	test -d ./$(BOARD) && $(CP) ./$(BOARD)/* $(1)/etc/
> >>  endef
> >>
> >>  $(eval $(call BuildPackage,$(PKG_NAME)))
> >> diff --git
> >> a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
> >> b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
> >> new file mode 100644
> >> index 00000000..b8eaceab
> >> --- /dev/null
> >> +++ b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
> >> @@ -0,0 +1,89 @@
> >> +#!/bin/sh
> >> +# Copyright 2019 Adrian Schmutzler
> >> +# License GPLv3
> >> +
> >> +BOARD="$(uci get board.model.name)"
> >> +
> >> +. /lib/functions/fff/networksetup
> >> +
> >> +case "$BOARD" in
> >> +	archer-c7-v2)
> >> +		setupSwitch "eth1" "4 5 0t" "2 3 0t" "1 6"
> >> +		setupWan "eth0"
> >> +		;;
> >> +	archer-c25-v1|\
> >> +	archer-c60-v1)
> >> +		setupSwitch "eth1" "1 2 0t" "3 4 0t"
> >> +		setupWan "eth0"
> >> +		;;
> >> +	cpe210|\
> >> +	cpe510)
> >> +		# Default: LAN0: WAN, LAN1: CLIENT
> >> +		setupSwitch "eth0" "0t 4" "0t" "0t 5"
> >> +		setupWan "eth0.2"
> >> +		;;
> >> +	gl-ar150)
> >> +		# Default: CLIENT
> >> +		setupSwitch "eth1" "0t 1" "0t"
> >> +		setupWan "eth0"
> >> +		;;
> >> +	tl-wdr3500-v1|\
> >> +	tl-wr741nd-v2|\
> >> +	tl-wr841-v7|\
> >> +	tl-wr841-v9|\
> >> +	tl-wr841-v10|\
> >> +	tl-wr841-v11|\
> >> +	tl-wr841-v12)
> >> +		setupSwitch "eth0" "1 2 0t" "3 4 0t"
> >> +		setupWan "eth1"
> >> +		;;
> >> +	tl-wdr3600-v1|\
> >> +	tl-wdr4300-v1|\
> >> +	tl-wdr4310-v1|\
> >> +	tl-wdr4900-v1)
> >> +		setupSwitch "eth0" "4 5 0t" "2 3 0t" "1 0t"
> >> +		setupWan "eth0.2"
> >> +		;;
> >> +	tl-wr841-v8|\
> >> +	tl-wr842n-v2)
> >> +		setupSwitch "eth1" "1 4 0t" "2 3 0t"
> >> +		setupWan "eth0"
> >> +		;;
> >> +	tl-wr740n-v4|\
> >> +	tl-wr740nd-v4|\
> >> +	tl-wr741nd-v4)
> >> +		setupSwitch "eth0" "1 4 0t" "2 3 0t"
> >> +		setupWan "eth1"
> >> +		;;
> >> +	tl-wr1043nd-v1)
> >> +		setupSwitch "eth0" "3 4 5t" "1 2 5t" "0 5t"
> >> +		setupWan "eth0.2"
> >> +		;;
> >> +	tl-wr1043nd-v2|\
> >> +	tl-wr1043nd-v3)
> >> +		setupSwitch "eth0" "1 2 6t" "3 4 6t" "5 6t"
> >> +		setupWan "eth0.2"
> >> +		;;
> >> +	tl-wr1043nd-v4|\
> >> +	tl-wr1043n-v5)
> >> +		setupSwitch "eth0" "1 2 0t" "3 4 0t" "5 0t"
> >> +		setupWan "eth0.2"
> >> +		;;
> >> +	cpe210-v2|\
> >> +	cpe210-v3|\
> >> +	tl-mr3020-v1|\
> >> +	tl-wa850re-v1|\
> >> +	tl-wa860re-v1|\
> >> +	tl-wa901nd-v2|\
> >> +	ubnt-bullet-m|\
> >> +	ubnt-loco-m|\
> >> +	ubnt-loco-m-xw|\
> >> +	ubnt-nano-m|\
> >> +	ubnt-pico-m|\
> >> +	ubnt-power-m-xw|\
> >> +	ubnt-unifi|\
> >> +	ubnt-unifiac-lite|\
> >> +	ubnt-unifiac-mesh)
> >> +		setupOnePort "eth0" "CLIENT"
> >> +		;;
> >> +esac
> >> diff --git
> >> a/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
> >> b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
> >> new file mode 100644
> >> index 00000000..d1a5e50c
> >> --- /dev/null
> >> +++
> >> b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
> >> @@ -0,0 +1,55 @@
> >> +#!/bin/sh
> >> +# Copyright 2019 Adrian Schmutzler
> >> +# License GPLv3
> >> +
> >> +BOARD="$(uci get board.model.name)"
> >> +
> >> +. /lib/functions/fff/networksetup
> >> +
> >> +. /lib/functions.sh
> >> +. /lib/functions/system.sh
> >> +
> >> +case "$BOARD" in
> >> +	archer-c7-v2|\
> >> +	tl-wr841-v8|\
> >> +	tl-wr842n-v2|\
> >> +	tl-wr1043nd-v2|\
> >> +	tl-wr1043nd-v3)
> >> +		ROUTERMAC=$(cat /sys/class/net/eth1/address)
> >> +		;;
> >> +	cpe210-v2|\
> >> +	cpe210-v3|\
> >> +	tl-wa850re-v1|\
> >> +	tl-wa860re-v1|\
> >> +	tl-wa901nd-v2|\
> >> +	tl-wdr3500-v1|\
> >> +	tl-wr740n-v4|\
> >> +	tl-wr740nd-v4|\
> >> +	tl-wr741nd-v2|\
> >> +	tl-wr741nd-v4|\
> >> +	tl-wr841-v7|\
> >> +	ubnt-bullet-m|\
> >> +	ubnt-loco-m|\
> >> +	ubnt-loco-m-xw|\
> >> +	ubnt-nano-m|\
> >> +	ubnt-pico-m|\
> >> +	ubnt-power-m-xw|\
> >> +	ubnt-unifi)
> >> +		ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress)
> >> +		;;
> >> +	tl-wdr3600-v1|\
> >> +	tl-wdr4300-v1|\
> >> +	tl-wdr4310-v1)
> >> +		ROUTERMAC=$(cat /sys/class/ieee80211/phy1/macaddress)
> >> +		;;
> >> +	ubnt-unifiac-lite|\
> >> +	ubnt-unifiac-mesh)
> >> +		ROUTERMAC=$(mtd_get_mac_binary EEPROM 0x0)
> >> +		;;
> >> +	*)
> >> +		ROUTERMAC=$(cat /sys/class/net/eth0/address)
> >> +		;;
> >> +esac
> >> +
> >> +uci set "network.mesh.macaddr=$ROUTERMAC"
> >> +uci commit network
> >> diff --git
> >> a/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
> >> b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
> >> new file mode 100644
> >> index 00000000..86c840c3
> >> --- /dev/null
> >> +++
> >> b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
> >> @@ -0,0 +1,75 @@
> >> +#!/bin/sh
> >> +# Copyright 2019 Adrian Schmutzler
> >> +# License GPLv3
> >> +
> >> +BOARD="$(uci get board.model.name)"
> >> +
> >> +. /lib/functions/fff/network
> >> +. /lib/functions/fff/networksetup
> >> +
> >> +. /lib/functions.sh
> >> +. /lib/functions/system.sh
> >> +
> >> +# macFlipLocalBit:
> >> +# use mac address from phyX with 'locally administered' bit set to '1'
> >> +# only possible, because wXmesh is created first and therefore gets the
> >> 'universally administered address'
> >> +
> >> +case "$BOARD" in
> >> +	archer-c7-v2|\
> >> +	tl-wr841-v8|\
> >> +	tl-wr842n-v2)
> >> +		ETHMESHMAC=$(cat /sys/class/net/eth0/address)
> >> +		;;
> >> +	archer-c25-v1|\
> >> +	archer-c60-v1|\
> >> +	tl-wr740n-v4|\
> >> +	tl-wr740nd-v4|\
> >> +	tl-wr741nd-v2|\
> >> +	tl-wr741nd-v4|\
> >> +	tl-wr841-v7|\
> >> +	tl-wr841-v9|\
> >> +	tl-wr841-v10|\
> >> +	tl-wr841-v11|\
> >> +	tl-wr841-v12)
> >> +		ETHMESHMAC=$(cat /sys/class/net/eth1/address)
> >> +		;;
> >> +	cpe210|\
> >> +	cpe210-v2|\
> >> +	cpe210-v3|\
> >> +	cpe510|\
> >> +	tl-wa850re-v1|\
> >> +	tl-wa860re-v1|\
> >> +	tl-wa901nd-v2|\
> >> +	tl-wr1043nd-v1|\
> >> +	ubnt-bullet-m|\
> >> +	ubnt-loco-m|\
> >> +	ubnt-loco-m-xw|\
> >> +	ubnt-nano-m|\
> >> +	ubnt-pico-m|\
> >> +	ubnt-power-m-xw|\
> >> +	ubnt-unifi)
> >> +		ETHMESHMAC=$(macFlipLocalBit "$(cat
> >> /sys/class/ieee80211/phy0/macaddress)")
> >> +		;;
> >> +	gl-ar150|\
> >> +	tl-mr3020-v1)
> >> +		ETHMESHMAC=$(macFlipLocalBit "$(cat
> >> /sys/class/net/eth0/address)")
> >> +		;;
> >> +	tl-wdr4900-v1)
> >> +		ETHMESHMAC=$(macFlipLocalBit "$(cat
> >> /sys/class/ieee80211/phy1/macaddress)")
> >> +		;;
> >> +	tl-wr1043nd-v4)
> >> +		ETHMESHMAC=$(mtd_get_mac_binary config 0x1017c)
> >> +		;;
> >> +	tl-wr1043n-v5)
> >> +		ETHMESHMAC=$(macaddr_add $(mtd_get_mac_binary
> >> product-info
> >> 8) 1)
> >> +		;;
> >> +	ubnt-unifiac-lite|\
> >> +	ubnt-unifiac-mesh)
> >> +		ETHMESHMAC=$(macFlipLocalBit "$(mtd_get_mac_binary
> >> EEPROM
> >> 0x0)")
> >> +		;;
> >> +esac
> >> +
> >> +if [ -n "$ETHMESHMAC" ]; then
> >> +	uci set "network.ethmesh.macaddr=$ETHMESHMAC"
> >> +	uci commit network
> >> +fi
> >> diff --git
> >> a/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
> >> b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
> >> new file mode 100644
> >> index 00000000..db500c15
> >> --- /dev/null
> >> +++ b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
> >> @@ -0,0 +1,31 @@
> >> +#!/bin/sh
> >> +# Copyright 2019 Adrian Schmutzler
> >> +# License GPLv3
> >> +
> >> +. /lib/functions/fff/network
> >> +
> >> +echo "Setting IPv6 addresses"
> >> +# Some time needed :(
> >> +sleep 5
> >> +
> >> +ROUTERMAC=$(uci get network.mesh.macaddr)
> >> +prefix="fdff:0::/64"
> >> +
> >> +# Set $prefix as prefix
> >> +uci set network.globals=globals
> >> +uci set "network.globals.ula_prefix=$prefix"
> >> +
> >> +# Set $prefix::MAC as IP
> >> +addr="$(ipMacAssemble "$prefix" "$ROUTERMAC")"
> >> +uci add_list "network.mesh.ip6addr=$addr"
> >> +uci set network.mesh.proto=static
> >> +
> >> +# Set $prefix::1 as IP
> >> +addr="$(ipAssemble "$prefix" "1")"
> >> +uci add_list "network.mesh.ip6addr=$addr"
> >> +
> >> +# Set $prefix::link-local as IP
> >> +addr="$(ipEUIAssemble "$prefix" "$ROUTERMAC")"
> >> +uci add_list "network.mesh.ip6addr=$addr"
> >> +
> >> +uci commit network
> >> diff --git
> >> a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> >> b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> >> new file mode 100644
> >> index 00000000..ccc943df
> >> --- /dev/null
> >> +++ b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> >> @@ -0,0 +1,163 @@
> >> +# Copyright 2019 Adrian Schmutzler
> >> +# License GPLv3
> >> +
> >> +. /lib/functions/network.sh
> >> +
> >> +setAutoConf() {
> >> +	# Sets ipv6 auto configuration on an interface to on/off
> >> +	# Usage: setAutoConf <interface> <[0|1]>
> >> +	local iface=$1
> >> +	local on=$2
> >> +
> >> +	sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf"
> >> +	echo "# Generated from configurenetwork" > "$sysctlfile"
> >> +	echo "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile"
> >> +	echo "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >>
> >> "$sysctlfile"
> >> +	echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >> "$sysctlfile"
> >> +	echo "net.ipv6.conf.$iface.autoconf = $on" >> "$sysctlfile"
> >> +	echo "net.ipv6.conf.$iface.accept_ra_rtr_pref = $on" >>
> >> "$sysctlfile"
> >> +	echo "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile"
> >> +
> >> +	/sbin/sysctl -p "$sysctlfile"
> >> +}
> >> +
> >> +enableAutoConf() {
> >> +	# Enables ipv6 auto configuration on an interface
> >> +	# Usage: enableAutoConf <interface>
> >> +	local iface=$1
> >> +
> >> +	setAutoConf "$iface" "1"
> >> +}
> >> +
> >> +disableAutoConf() {
> >> +	# Disables ipv6 auto configuration on an interface
> >> +	# Usage: disableAutoConf <interface>
> >> +	local iface=$1
> >> +
> >> +	setAutoConf "$iface" "0"
> >> +}
> >> +
> >> +fixMac() {
> >> +	# Update MAC address on live device/interface
> >> +	#
> >> +	# fixMac <newmac> <interface>
> >> +	#
> >> +	# newmac: MAC address to be set
> >> +	# interface: Interface to be updated as in uci (e.g. mesh)
> >> +
> >> +	local newmac=$1
> >> +	local iface=$2
> >> +	local dev
> >> +
> >> +	echo "Fixing MAC on $iface"
> >> +	sleep 10
> >> +
> >> +	network_get_physdev dev "$iface"
> >> +
> >> +	uci set "network.${iface}.macaddr=$newmac"
> >> +	uci commit network
> >> +
> >> +	if [ -n "$dev" ]; then
> >> +		ip link set "$dev" down
> >> +		ip link set "$dev" address "$newmac"
> >> +		ip link set "$dev" up
> >> +	fi
> >> +
> >> +	/etc/init.d/network restart
> >> +}
> >> +
> >> +setupSwitch() {
> >> +	# Set up switch for switch-based devices
> >> +	# This is intended for initial setup, not for updates
> >> +	# (changing ports will be sufficient then)
> >> +	#
> >> +	# Usage: setupSwitch <SWITCHDEV, e.g. eth0> <CLIENT_PORTS>
> >> <BATMAN_PORTS> [<WAN_PORTS>]
> >> +
> >> +	local SWITCHDEV=$1
> >> +	local CLIENT_PORTS=$2
> >> +	local BATMAN_PORTS=$3
> >> +	local WAN_PORTS=$4
> >> +	local SWITCHHW
> >> +
> >> +	SWITCHHW="$(swconfig list | awk '{ print $4 }')"
> >> +
> >> +	uci set "network.switch=switch"
> >> +	uci set "network.switch.name=$SWITCHHW"
> >> +	uci set "network.switch.enable=1"
> >> +	uci set "network.switch.reset=1"
> >> +	uci set "network.switch.enable_vlan=1"
> >> +
> >> +	uci set "network.vlan1=switch_vlan"
> >> +	uci set "network.vlan1.device=$SWITCHHW"
> >> +	uci set "network.vlan1.vlan=1"
> >> +	uci set "network.vlan1.ports=$CLIENT_PORTS"
> >> +
> >> +	# This defines the VLAN for WAN ports inside the switch.
> >> +	# This is required even if the WAN eth is separate, but the WAN
> >> port is in the switch!
> >> +	if [ -n "$WAN_PORTS" ]; then
> >> +		uci set "network.vlan2=switch_vlan"
> >> +		uci set "network.vlan2.device=$SWITCHHW"
> >> +		uci set "network.vlan2.vlan=2"
> >> +		uci set "network.vlan2.ports=$WAN_PORTS"
> >> +	fi
> >> +
> >> +	uci set "network.vlan3=switch_vlan"
> >> +	uci set "network.vlan3.device=$SWITCHHW"
> >> +	uci set "network.vlan3.vlan=3"
> >> +	uci set "network.vlan3.ports=$BATMAN_PORTS"
> >> +
> >> +	uci set network.mesh.ifname="$SWITCHDEV.1 bat0"
> >> +	uci set network.ethmesh.ifname="$SWITCHDEV.3"
> >> +
> >> +	uci commit network
> >> +}
> >> +
> >> +setupWan() {
> >> +	# Set up WAN for any device with dedicated port (no one-port where
> >> mode is changed)
> >> +	# This is intended for initial setup, not for updates
> >> +	# (updates are only possible by changing ports in a switch)
> >> +	#
> >> +	# Usage: setupWan <WANDEV, e.g. eth0, eth0.2>
> >> +
> >> +	local WANDEV=$1
> >> +
> >> +	# This defines the WAN interface. We use the VLAN ID only if we do
> >> NOT have a separate eth.
> >> +	# This is different from the criterion for the WAN port dealt with
> >> above!
> >> +	# If the WANDEV is different from the SWITCHDEV, but the WAN port
> >> is in the switch,
> >> +	# the WAN eth has to be connected to the switch untagged!
> >> +	enableAutoConf "$WANDEV"
> >> +	uci set network.wan.ifname="$WANDEV"
> >> +
> >> +	uci commit network
> >> +}
> >> +
> >> +setupOnePort() {
> >> +	# Set up port mode for one-port devices
> >> +	# This is intended for initial setup and for updates
> >> +	# (latter will require network restart)
> >> +	#
> >> +	# Usage: setupOnePort <DEV, e.g. eth0> <ETHMODE, e.g. BATMAN,
> >> CLIENT, WAN>
> >> +
> >> +	local DEV=$1
> >> +	local ETHMODE=$2
> >> +
> >> +	uci set "network.$DEV=interface"
> >> +	uci set "network.$DEV.ifname=$DEV"
> >> +	if [ "$ETHMODE" = "WAN" ]; then
> >> +		enableAutoConf "$DEV"
> >> +		uci set network.mesh.ifname="bat0"
> >> +		uci set network.wan.ifname="$DEV"
> >> +		uci del network.ethmesh.ifname
> >> +	elif [ "$ETHMODE" = "CLIENT" ] ; then
> >> +		disableAutoConf "$DEV"
> >> +		uci set network.mesh.ifname="bat0 $DEV"
> >> +		uci del network.wan.ifname
> >> +		uci del network.ethmesh.ifname
> >> +	else # default=BATMAN
> >> +		disableAutoConf "$DEV"
> >> +		uci set network.mesh.ifname="bat0"
> >> +		uci del network.wan.ifname
> >> +		uci set network.ethmesh.ifname="$DEV"
> >> +	fi
> >> +	uci commit network
> >> +}
> >> diff --git
> >> a/src/packages/fff/fff-network/files/lib/functions/fff/portorder
> >> b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
> >> new file mode 100644
> >> index 00000000..377c302f
> >> --- /dev/null
> >> +++ b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
> >> @@ -0,0 +1,31 @@
> >> +# Copyright 2019 Adrian Schmutzler
> >> +# License GPLv3
> >> +
> >> +BOARD="$(uci get board.model.name)"
> >> +
> >> +case "$BOARD" in
> >> +	archer-c25-v1|\
> >> +	archer-c60-v1|\
> >> +	tl-wr841-v10|\
> >> +	tl-wr841-v11|\
> >> +	tl-wr841-v12)
> >> +		PORTORDER="4 3 2 1"
> >> +		;;
> >> +	cpe210|\
> >> +	cpe510)
> >> +		PORTORDER="5 4"
> >> +		;;
> >> +	gl-ar150)
> >> +		PORTORDER="1"
> >> +		;;
> >> +	tl-wdr4300-v1)
> >> +		PORTORDER="1 2 3 4 5"
> >> +		;;
> >> +	tl-wr841-v8)
> >> +		PORTORDER="2 3 4 1"
> >> +		;;
> >> +	tl-wr1043nd-v4|\
> >> +	tl-wr1043n-v5)
> >> +		PORTORDER="5 4 3 2 1"
> >> +		;;
> >> +esac
> >> diff --git a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> >> b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> >> deleted file mode 100755
> >> index 448bd04b..00000000
> >> --- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> >> +++ /dev/null
> >> @@ -1,263 +0,0 @@
> >> -#!/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
> >> -
> >> -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
> >> -}
> >> -
> >> -setAutoConf() {
> >> -    # Sets ipv6 auto configuration on an interface to on/off
> >> -    # Usage: setAutoConf <interface> <[0|1]>
> >> -    local iface=$1
> >> -    local on=$2
> >> -
> >> -    sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf"
> >> -    echo "# Generated from configurenetwork" > "$sysctlfile"
> >> -    echo "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile"
> >> -    echo "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >> "$sysctlfile"
> >> -    echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >> "$sysctlfile"
> >> -    echo "net.ipv6.conf.$iface.autoconf = $on" >> "$sysctlfile"
> >> -    echo "net.ipv6.conf.$iface.accept_ra_rtr_pref = $on" >> "$sysctlfile"
> >> -    echo "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile"
> >> -
> >> -    /sbin/sysctl -p "$sysctlfile"
> >> -}
> >> -
> >> -enableAutoConf() {
> >> -    # Enables ipv6 auto configuration on an interface
> >> -    # Usage: enableAutoConf <interface>
> >> -    local iface=$1
> >> -
> >> -    setAutoConf "$iface" "1"
> >> -}
> >> -
> >> -disableAutoConf() {
> >> -    # Disables ipv6 auto configuration on an interface
> >> -    # Usage: disableAutoConf <interface>
> >> -    local iface=$1
> >> -
> >> -    setAutoConf "$iface" "0"
> >> -}
> >> -
> >> -BOARD="$(uci get board.model.name)"
> >> -. /etc/network.$BOARD
> >> -
> >> -if [ -s /etc/network.config ] ; then
> >> -    . /etc/network.config
> >> -else
> >> -    # Write network.config
> >> -    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
> >> -    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 ! 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"
> >> -
> >> -    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"
> >> -
> >> -        enableAutoConf "$WANDEV.2"
> >> -    else
> >> -        enableAutoConf "$WANDEV"
> >> -    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
> >> -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
> >> -        enableAutoConf "$WANDEV"
> >> -        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
> >> -        disableAutoConf "$WANDEV"
> >> -        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
> >> -        disableAutoConf "$WANDEV"
> >> -        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
> >> -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 network
> >> -
> >> -        ifconfig $SWITCHDEV.3 down
> >> -        ifconfig $SWITCHDEV.3 hw ether $ETHMESHMAC
> >> -        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 network
> >> -
> >> -        ifconfig br-mesh down
> >> -        ifconfig br-mesh hw ether $ROUTERMAC
> >> -        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 network
> >> -        ifconfig eth0 down
> >> -        ifconfig eth0 hw ether $NEW_MACADDR
> >> -        ifconfig eth0 up
> >> -        /etc/init.d/network restart
> >> -fi
> >> -
> >> -if uci -q get "network.mesh.ip6addr" > /dev/null
> >> -then
> >> -    echo "IPv6 for mesh is set already"
> >> -else
> >> -    echo "Setting IPv6 addresses"
> >> -    # 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" "$ROUTERMAC")"
> >> -    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" "$ROUTERMAC")"
> >> -    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
> >> diff --git a/src/packages/fff/fff-sysupgrade/Makefile
> >> b/src/packages/fff/fff-sysupgrade/Makefile
> >> index 90ef66af..0e6c08ec 100644
> >> --- a/src/packages/fff/fff-sysupgrade/Makefile
> >> +++ b/src/packages/fff/fff-sysupgrade/Makefile
> >> @@ -1,8 +1,7 @@
> >>  include $(TOPDIR)/rules.mk
> >>
> >>  PKG_NAME:=fff-sysupgrade
> >> -PKG_VERSION:=9
> >> -PKG_RELEASE:=1
> >> +PKG_RELEASE:=10
> >>
> >>  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
> >>
> >> diff --git
> >> a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> >> b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> >> index 7ff83f54..f5783687 100644
> >> ---
> >> a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> >> +++
> >> b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
> >> @@ -7,7 +7,6 @@ cat > /etc/sysupgrade.conf <<-__EOF__
> >>  /etc/dropbear/dropbear_dss_host_key
> >>  /etc/dropbear/dropbear_rsa_host_key
> >>  /etc/dropbear/authorized_keys
> >> -/etc/network.config
> >>  /etc/config/fff
> >>  /etc/hoodfile
> >>  __EOF__
> >> --
> >> 2.11.0
Robert Langhammer April 24, 2019, 7:47 a.m.
Reviewed-by: Robert Langhammer <rlanghammer@web.de>

Am 23.04.19 um 13:07 schrieb Adrian Schmutzler:
> Hallo zusammen,
>
> ich bräuchte noch folgende Reviews:
> Robert 3/14
> Christian 6/14
> Christian 14/14
>
> Folgende Änderungen habe ich jetzt berücksichtigt (ich will nicht nochmal ein Patchset schicken):
> - default-case für Ports wie in Mail enthalten.
> - sleep 5 weg
> - etc/init.d/network restart weg bei Skripten, dafür Hinweis bei echo ("Port updated successfully. Please restart network or device!")
> - 90-firstbootfff von fff-support nach fff-network verschoben
>
> Der CPUPORT-Patch hat zwar auch nur ein Review, das wäre mir aber wurscht, da der im Moment ja noch keine Abhängigkeiten hat.
>
> Grüße
>
> Adrian
>
>> -----Original Message-----
>> From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of
>> Adrian Schmutzler
>> Sent: Montag, 22. April 2019 14:35
>> To: franken-dev@freifunk.net
>> Subject: [PATCH v3 03/14] fff-network: Reorganize network initialization
>>
>> This removes the configurenetwork script and replaces it by some
>> scripts run only during first boot.
>>
>> This introduces several changes:
>> - The different tasks dealt with in configurenetwork are split.
>>   Thus, one script deals with switch/port setup, one with br-mesh
>>   MAC address, one with ETHMESHMAC, and one with IP addresses.
>>   This makes the whole approach more modular, compared to the
>>   monolithic configurenetwork.
>> - Where configurenetwork contained sophisticated, nested conditions
>>   to account for all possible combinations of variables, the new
>>   approach is inspired by OpenWrt's board.d subfiles. Instead of
>>   defining variables, we now directly call function in a
>>   select-case. This is much more flexible, as we can just put code
>>   there for a special case instead of bending configurenetwork for
>>   it.
>> - The select-case accounts for the various cases of similar/same
>>   parameters of multiple devices, which can be grouped now.
>> - Scripts are run only at first boot. Later changes have to be
>>   done manually (we will provide some scripts later). Those will
>>   typically be limited to changing only the ports; no need to run
>>   whole network config again.
>> - network.mode and network.config will disappear. For switch-based
>>   devices, there is no advantage of using network.config compared
>>   directly editing /etc/config/network. Upgrade-safety can be
>>   established by putting uci commands in an upgrade-safe script
>>   file (to be provided in a later patch).
>>
>> After this patch, show_info and the ports display in WebUI are
>> broken. Those will be fixed in a later patch.
>>
>> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
>>
>> ---
>>
>> Changed in v2:
>> - Fixed archer-c60-v2 to v1
>> - Added network functions file in uci-defaults/22c
>> - Removed some -q from uci
>> - Removed all commands only needed for running devices (this is
>>   uci only)
>> - Added descriptions for functions in networksetup
>>
>> Changed in v3:
>> - Changed order of 22a and 22b
>> - uci del instead uci set for WAN on one-port
>> - switch/vlanX instead of eth#/eth#.# for switch-based devices
>> ---
>>  bsp/default/root_file_system/etc/rc.local          |   4 -
>>  src/packages/fff/fff-network/Makefile              |   4 +-
>>  .../files/etc/uci-defaults/22a-config-ports        |  89 +++++++
>>  .../files/etc/uci-defaults/22b-config-routermac    |  55 +++++
>>  .../files/etc/uci-defaults/22c-config-ethmesh      |  75 ++++++
>>  .../files/etc/uci-defaults/23-config-ipaddr        |  31 +++
>>  .../files/lib/functions/fff/networksetup           | 163 +++++++++++++
>>  .../fff-network/files/lib/functions/fff/portorder  |  31 +++
>>  .../fff-network/files/usr/sbin/configurenetwork    | 263
>> ---------------------
>>  src/packages/fff/fff-sysupgrade/Makefile           |   3 +-
>>  .../files/etc/uci-defaults/99-fff-sysupgrade       |   1 -
>>  11 files changed, 446 insertions(+), 273 deletions(-)
>>  create mode 100644
>> src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>>  create mode 100644
>> src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>>  create mode 100644
>> src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>>  create mode 100644
>> src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>>  create mode 100644
>> src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>>  create mode 100644
>> src/packages/fff/fff-network/files/lib/functions/fff/portorder
>>  delete mode 100755
>> src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>>
>> diff --git a/bsp/default/root_file_system/etc/rc.local
>> b/bsp/default/root_file_system/etc/rc.local
>> index 59042c37..e02368a5 100755
>> --- a/bsp/default/root_file_system/etc/rc.local
>> +++ b/bsp/default/root_file_system/etc/rc.local
>> @@ -2,10 +2,6 @@
>>  # Put your custom commands here that should be executed once
>>  # the system init finished. By default this file does nothing.
>>
>> -/usr/sbin/configurenetwork
>> -
>> -sleep 3
>> -
>>  /usr/sbin/configurehood
>>
>>  touch /tmp/started
>> diff --git a/src/packages/fff/fff-network/Makefile
>> b/src/packages/fff/fff-network/Makefile
>> index e9335884..11796797 100644
>> --- a/src/packages/fff/fff-network/Makefile
>> +++ b/src/packages/fff/fff-network/Makefile
>> @@ -1,8 +1,7 @@
>>  include $(TOPDIR)/rules.mk
>>
>>  PKG_NAME:=fff-network
>> -PKG_VERSION:=10
>> -PKG_RELEASE:=1
>> +PKG_RELEASE:=11
>>
>>  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
>>
>> @@ -34,7 +33,6 @@ endef
>>
>>  define Package/$(PKG_NAME)/install
>>  	$(CP) ./files/* $(1)/
>> -	test -d ./$(BOARD) && $(CP) ./$(BOARD)/* $(1)/etc/
>>  endef
>>
>>  $(eval $(call BuildPackage,$(PKG_NAME)))
>> diff --git
>> a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>> new file mode 100644
>> index 00000000..b8eaceab
>> --- /dev/null
>> +++ b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
>> @@ -0,0 +1,89 @@
>> +#!/bin/sh
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +BOARD="$(uci get board.model.name)"
>> +
>> +. /lib/functions/fff/networksetup
>> +
>> +case "$BOARD" in
>> +	archer-c7-v2)
>> +		setupSwitch "eth1" "4 5 0t" "2 3 0t" "1 6"
>> +		setupWan "eth0"
>> +		;;
>> +	archer-c25-v1|\
>> +	archer-c60-v1)
>> +		setupSwitch "eth1" "1 2 0t" "3 4 0t"
>> +		setupWan "eth0"
>> +		;;
>> +	cpe210|\
>> +	cpe510)
>> +		# Default: LAN0: WAN, LAN1: CLIENT
>> +		setupSwitch "eth0" "0t 4" "0t" "0t 5"
>> +		setupWan "eth0.2"
>> +		;;
>> +	gl-ar150)
>> +		# Default: CLIENT
>> +		setupSwitch "eth1" "0t 1" "0t"
>> +		setupWan "eth0"
>> +		;;
>> +	tl-wdr3500-v1|\
>> +	tl-wr741nd-v2|\
>> +	tl-wr841-v7|\
>> +	tl-wr841-v9|\
>> +	tl-wr841-v10|\
>> +	tl-wr841-v11|\
>> +	tl-wr841-v12)
>> +		setupSwitch "eth0" "1 2 0t" "3 4 0t"
>> +		setupWan "eth1"
>> +		;;
>> +	tl-wdr3600-v1|\
>> +	tl-wdr4300-v1|\
>> +	tl-wdr4310-v1|\
>> +	tl-wdr4900-v1)
>> +		setupSwitch "eth0" "4 5 0t" "2 3 0t" "1 0t"
>> +		setupWan "eth0.2"
>> +		;;
>> +	tl-wr841-v8|\
>> +	tl-wr842n-v2)
>> +		setupSwitch "eth1" "1 4 0t" "2 3 0t"
>> +		setupWan "eth0"
>> +		;;
>> +	tl-wr740n-v4|\
>> +	tl-wr740nd-v4|\
>> +	tl-wr741nd-v4)
>> +		setupSwitch "eth0" "1 4 0t" "2 3 0t"
>> +		setupWan "eth1"
>> +		;;
>> +	tl-wr1043nd-v1)
>> +		setupSwitch "eth0" "3 4 5t" "1 2 5t" "0 5t"
>> +		setupWan "eth0.2"
>> +		;;
>> +	tl-wr1043nd-v2|\
>> +	tl-wr1043nd-v3)
>> +		setupSwitch "eth0" "1 2 6t" "3 4 6t" "5 6t"
>> +		setupWan "eth0.2"
>> +		;;
>> +	tl-wr1043nd-v4|\
>> +	tl-wr1043n-v5)
>> +		setupSwitch "eth0" "1 2 0t" "3 4 0t" "5 0t"
>> +		setupWan "eth0.2"
>> +		;;
>> +	cpe210-v2|\
>> +	cpe210-v3|\
>> +	tl-mr3020-v1|\
>> +	tl-wa850re-v1|\
>> +	tl-wa860re-v1|\
>> +	tl-wa901nd-v2|\
>> +	ubnt-bullet-m|\
>> +	ubnt-loco-m|\
>> +	ubnt-loco-m-xw|\
>> +	ubnt-nano-m|\
>> +	ubnt-pico-m|\
>> +	ubnt-power-m-xw|\
>> +	ubnt-unifi|\
>> +	ubnt-unifiac-lite|\
>> +	ubnt-unifiac-mesh)
>> +		setupOnePort "eth0" "CLIENT"
>> +		;;
>> +esac
>> diff --git
>> a/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>> new file mode 100644
>> index 00000000..d1a5e50c
>> --- /dev/null
>> +++
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22b-config-routermac
>> @@ -0,0 +1,55 @@
>> +#!/bin/sh
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +BOARD="$(uci get board.model.name)"
>> +
>> +. /lib/functions/fff/networksetup
>> +
>> +. /lib/functions.sh
>> +. /lib/functions/system.sh
>> +
>> +case "$BOARD" in
>> +	archer-c7-v2|\
>> +	tl-wr841-v8|\
>> +	tl-wr842n-v2|\
>> +	tl-wr1043nd-v2|\
>> +	tl-wr1043nd-v3)
>> +		ROUTERMAC=$(cat /sys/class/net/eth1/address)
>> +		;;
>> +	cpe210-v2|\
>> +	cpe210-v3|\
>> +	tl-wa850re-v1|\
>> +	tl-wa860re-v1|\
>> +	tl-wa901nd-v2|\
>> +	tl-wdr3500-v1|\
>> +	tl-wr740n-v4|\
>> +	tl-wr740nd-v4|\
>> +	tl-wr741nd-v2|\
>> +	tl-wr741nd-v4|\
>> +	tl-wr841-v7|\
>> +	ubnt-bullet-m|\
>> +	ubnt-loco-m|\
>> +	ubnt-loco-m-xw|\
>> +	ubnt-nano-m|\
>> +	ubnt-pico-m|\
>> +	ubnt-power-m-xw|\
>> +	ubnt-unifi)
>> +		ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress)
>> +		;;
>> +	tl-wdr3600-v1|\
>> +	tl-wdr4300-v1|\
>> +	tl-wdr4310-v1)
>> +		ROUTERMAC=$(cat /sys/class/ieee80211/phy1/macaddress)
>> +		;;
>> +	ubnt-unifiac-lite|\
>> +	ubnt-unifiac-mesh)
>> +		ROUTERMAC=$(mtd_get_mac_binary EEPROM 0x0)
>> +		;;
>> +	*)
>> +		ROUTERMAC=$(cat /sys/class/net/eth0/address)
>> +		;;
>> +esac
>> +
>> +uci set "network.mesh.macaddr=$ROUTERMAC"
>> +uci commit network
>> diff --git
>> a/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>> new file mode 100644
>> index 00000000..86c840c3
>> --- /dev/null
>> +++
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/22c-config-ethmesh
>> @@ -0,0 +1,75 @@
>> +#!/bin/sh
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +BOARD="$(uci get board.model.name)"
>> +
>> +. /lib/functions/fff/network
>> +. /lib/functions/fff/networksetup
>> +
>> +. /lib/functions.sh
>> +. /lib/functions/system.sh
>> +
>> +# macFlipLocalBit:
>> +# use mac address from phyX with 'locally administered' bit set to '1'
>> +# only possible, because wXmesh is created first and therefore gets the
>> 'universally administered address'
>> +
>> +case "$BOARD" in
>> +	archer-c7-v2|\
>> +	tl-wr841-v8|\
>> +	tl-wr842n-v2)
>> +		ETHMESHMAC=$(cat /sys/class/net/eth0/address)
>> +		;;
>> +	archer-c25-v1|\
>> +	archer-c60-v1|\
>> +	tl-wr740n-v4|\
>> +	tl-wr740nd-v4|\
>> +	tl-wr741nd-v2|\
>> +	tl-wr741nd-v4|\
>> +	tl-wr841-v7|\
>> +	tl-wr841-v9|\
>> +	tl-wr841-v10|\
>> +	tl-wr841-v11|\
>> +	tl-wr841-v12)
>> +		ETHMESHMAC=$(cat /sys/class/net/eth1/address)
>> +		;;
>> +	cpe210|\
>> +	cpe210-v2|\
>> +	cpe210-v3|\
>> +	cpe510|\
>> +	tl-wa850re-v1|\
>> +	tl-wa860re-v1|\
>> +	tl-wa901nd-v2|\
>> +	tl-wr1043nd-v1|\
>> +	ubnt-bullet-m|\
>> +	ubnt-loco-m|\
>> +	ubnt-loco-m-xw|\
>> +	ubnt-nano-m|\
>> +	ubnt-pico-m|\
>> +	ubnt-power-m-xw|\
>> +	ubnt-unifi)
>> +		ETHMESHMAC=$(macFlipLocalBit "$(cat
>> /sys/class/ieee80211/phy0/macaddress)")
>> +		;;
>> +	gl-ar150|\
>> +	tl-mr3020-v1)
>> +		ETHMESHMAC=$(macFlipLocalBit "$(cat
>> /sys/class/net/eth0/address)")
>> +		;;
>> +	tl-wdr4900-v1)
>> +		ETHMESHMAC=$(macFlipLocalBit "$(cat
>> /sys/class/ieee80211/phy1/macaddress)")
>> +		;;
>> +	tl-wr1043nd-v4)
>> +		ETHMESHMAC=$(mtd_get_mac_binary config 0x1017c)
>> +		;;
>> +	tl-wr1043n-v5)
>> +		ETHMESHMAC=$(macaddr_add $(mtd_get_mac_binary
>> product-info
>> 8) 1)
>> +		;;
>> +	ubnt-unifiac-lite|\
>> +	ubnt-unifiac-mesh)
>> +		ETHMESHMAC=$(macFlipLocalBit "$(mtd_get_mac_binary
>> EEPROM
>> 0x0)")
>> +		;;
>> +esac
>> +
>> +if [ -n "$ETHMESHMAC" ]; then
>> +	uci set "network.ethmesh.macaddr=$ETHMESHMAC"
>> +	uci commit network
>> +fi
>> diff --git
>> a/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>> b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>> new file mode 100644
>> index 00000000..db500c15
>> --- /dev/null
>> +++ b/src/packages/fff/fff-network/files/etc/uci-defaults/23-config-ipaddr
>> @@ -0,0 +1,31 @@
>> +#!/bin/sh
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +. /lib/functions/fff/network
>> +
>> +echo "Setting IPv6 addresses"
>> +# Some time needed :(
>> +sleep 5
>> +
>> +ROUTERMAC=$(uci get network.mesh.macaddr)
>> +prefix="fdff:0::/64"
>> +
>> +# Set $prefix as prefix
>> +uci set network.globals=globals
>> +uci set "network.globals.ula_prefix=$prefix"
>> +
>> +# Set $prefix::MAC as IP
>> +addr="$(ipMacAssemble "$prefix" "$ROUTERMAC")"
>> +uci add_list "network.mesh.ip6addr=$addr"
>> +uci set network.mesh.proto=static
>> +
>> +# Set $prefix::1 as IP
>> +addr="$(ipAssemble "$prefix" "1")"
>> +uci add_list "network.mesh.ip6addr=$addr"
>> +
>> +# Set $prefix::link-local as IP
>> +addr="$(ipEUIAssemble "$prefix" "$ROUTERMAC")"
>> +uci add_list "network.mesh.ip6addr=$addr"
>> +
>> +uci commit network
>> diff --git
>> a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>> b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>> new file mode 100644
>> index 00000000..ccc943df
>> --- /dev/null
>> +++ b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
>> @@ -0,0 +1,163 @@
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +. /lib/functions/network.sh
>> +
>> +setAutoConf() {
>> +	# Sets ipv6 auto configuration on an interface to on/off
>> +	# Usage: setAutoConf <interface> <[0|1]>
>> +	local iface=$1
>> +	local on=$2
>> +
>> +	sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf"
>> +	echo "# Generated from configurenetwork" > "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >>
>> "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >> "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.autoconf = $on" >> "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.accept_ra_rtr_pref = $on" >>
>> "$sysctlfile"
>> +	echo "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile"
>> +
>> +	/sbin/sysctl -p "$sysctlfile"
>> +}
>> +
>> +enableAutoConf() {
>> +	# Enables ipv6 auto configuration on an interface
>> +	# Usage: enableAutoConf <interface>
>> +	local iface=$1
>> +
>> +	setAutoConf "$iface" "1"
>> +}
>> +
>> +disableAutoConf() {
>> +	# Disables ipv6 auto configuration on an interface
>> +	# Usage: disableAutoConf <interface>
>> +	local iface=$1
>> +
>> +	setAutoConf "$iface" "0"
>> +}
>> +
>> +fixMac() {
>> +	# Update MAC address on live device/interface
>> +	#
>> +	# fixMac <newmac> <interface>
>> +	#
>> +	# newmac: MAC address to be set
>> +	# interface: Interface to be updated as in uci (e.g. mesh)
>> +
>> +	local newmac=$1
>> +	local iface=$2
>> +	local dev
>> +
>> +	echo "Fixing MAC on $iface"
>> +	sleep 10
>> +
>> +	network_get_physdev dev "$iface"
>> +
>> +	uci set "network.${iface}.macaddr=$newmac"
>> +	uci commit network
>> +
>> +	if [ -n "$dev" ]; then
>> +		ip link set "$dev" down
>> +		ip link set "$dev" address "$newmac"
>> +		ip link set "$dev" up
>> +	fi
>> +
>> +	/etc/init.d/network restart
>> +}
>> +
>> +setupSwitch() {
>> +	# Set up switch for switch-based devices
>> +	# This is intended for initial setup, not for updates
>> +	# (changing ports will be sufficient then)
>> +	#
>> +	# Usage: setupSwitch <SWITCHDEV, e.g. eth0> <CLIENT_PORTS>
>> <BATMAN_PORTS> [<WAN_PORTS>]
>> +
>> +	local SWITCHDEV=$1
>> +	local CLIENT_PORTS=$2
>> +	local BATMAN_PORTS=$3
>> +	local WAN_PORTS=$4
>> +	local SWITCHHW
>> +
>> +	SWITCHHW="$(swconfig list | awk '{ print $4 }')"
>> +
>> +	uci set "network.switch=switch"
>> +	uci set "network.switch.name=$SWITCHHW"
>> +	uci set "network.switch.enable=1"
>> +	uci set "network.switch.reset=1"
>> +	uci set "network.switch.enable_vlan=1"
>> +
>> +	uci set "network.vlan1=switch_vlan"
>> +	uci set "network.vlan1.device=$SWITCHHW"
>> +	uci set "network.vlan1.vlan=1"
>> +	uci set "network.vlan1.ports=$CLIENT_PORTS"
>> +
>> +	# This defines the VLAN for WAN ports inside the switch.
>> +	# This is required even if the WAN eth is separate, but the WAN
>> port is in the switch!
>> +	if [ -n "$WAN_PORTS" ]; then
>> +		uci set "network.vlan2=switch_vlan"
>> +		uci set "network.vlan2.device=$SWITCHHW"
>> +		uci set "network.vlan2.vlan=2"
>> +		uci set "network.vlan2.ports=$WAN_PORTS"
>> +	fi
>> +
>> +	uci set "network.vlan3=switch_vlan"
>> +	uci set "network.vlan3.device=$SWITCHHW"
>> +	uci set "network.vlan3.vlan=3"
>> +	uci set "network.vlan3.ports=$BATMAN_PORTS"
>> +
>> +	uci set network.mesh.ifname="$SWITCHDEV.1 bat0"
>> +	uci set network.ethmesh.ifname="$SWITCHDEV.3"
>> +
>> +	uci commit network
>> +}
>> +
>> +setupWan() {
>> +	# Set up WAN for any device with dedicated port (no one-port where
>> mode is changed)
>> +	# This is intended for initial setup, not for updates
>> +	# (updates are only possible by changing ports in a switch)
>> +	#
>> +	# Usage: setupWan <WANDEV, e.g. eth0, eth0.2>
>> +
>> +	local WANDEV=$1
>> +
>> +	# This defines the WAN interface. We use the VLAN ID only if we do
>> NOT have a separate eth.
>> +	# This is different from the criterion for the WAN port dealt with
>> above!
>> +	# If the WANDEV is different from the SWITCHDEV, but the WAN port
>> is in the switch,
>> +	# the WAN eth has to be connected to the switch untagged!
>> +	enableAutoConf "$WANDEV"
>> +	uci set network.wan.ifname="$WANDEV"
>> +
>> +	uci commit network
>> +}
>> +
>> +setupOnePort() {
>> +	# Set up port mode for one-port devices
>> +	# This is intended for initial setup and for updates
>> +	# (latter will require network restart)
>> +	#
>> +	# Usage: setupOnePort <DEV, e.g. eth0> <ETHMODE, e.g. BATMAN,
>> CLIENT, WAN>
>> +
>> +	local DEV=$1
>> +	local ETHMODE=$2
>> +
>> +	uci set "network.$DEV=interface"
>> +	uci set "network.$DEV.ifname=$DEV"
>> +	if [ "$ETHMODE" = "WAN" ]; then
>> +		enableAutoConf "$DEV"
>> +		uci set network.mesh.ifname="bat0"
>> +		uci set network.wan.ifname="$DEV"
>> +		uci del network.ethmesh.ifname
>> +	elif [ "$ETHMODE" = "CLIENT" ] ; then
>> +		disableAutoConf "$DEV"
>> +		uci set network.mesh.ifname="bat0 $DEV"
>> +		uci del network.wan.ifname
>> +		uci del network.ethmesh.ifname
>> +	else # default=BATMAN
>> +		disableAutoConf "$DEV"
>> +		uci set network.mesh.ifname="bat0"
>> +		uci del network.wan.ifname
>> +		uci set network.ethmesh.ifname="$DEV"
>> +	fi
>> +	uci commit network
>> +}
>> diff --git
>> a/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>> b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>> new file mode 100644
>> index 00000000..377c302f
>> --- /dev/null
>> +++ b/src/packages/fff/fff-network/files/lib/functions/fff/portorder
>> @@ -0,0 +1,31 @@
>> +# Copyright 2019 Adrian Schmutzler
>> +# License GPLv3
>> +
>> +BOARD="$(uci get board.model.name)"
>> +
>> +case "$BOARD" in
>> +	archer-c25-v1|\
>> +	archer-c60-v1|\
>> +	tl-wr841-v10|\
>> +	tl-wr841-v11|\
>> +	tl-wr841-v12)
>> +		PORTORDER="4 3 2 1"
>> +		;;
>> +	cpe210|\
>> +	cpe510)
>> +		PORTORDER="5 4"
>> +		;;
>> +	gl-ar150)
>> +		PORTORDER="1"
>> +		;;
>> +	tl-wdr4300-v1)
>> +		PORTORDER="1 2 3 4 5"
>> +		;;
>> +	tl-wr841-v8)
>> +		PORTORDER="2 3 4 1"
>> +		;;
>> +	tl-wr1043nd-v4|\
>> +	tl-wr1043n-v5)
>> +		PORTORDER="5 4 3 2 1"
>> +		;;
>> +esac
>> diff --git a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>> b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>> deleted file mode 100755
>> index 448bd04b..00000000
>> --- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
>> +++ /dev/null
>> @@ -1,263 +0,0 @@
>> -#!/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
>> -
>> -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
>> -}
>> -
>> -setAutoConf() {
>> -    # Sets ipv6 auto configuration on an interface to on/off
>> -    # Usage: setAutoConf <interface> <[0|1]>
>> -    local iface=$1
>> -    local on=$2
>> -
>> -    sysctlfile="/etc/sysctl.d/51-fff-network-$iface.conf"
>> -    echo "# Generated from configurenetwork" > "$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.accept_ra = $on" >> "$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.accept_ra_defrtr = $on" >> "$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.accept_ra_pinfo = $on" >> "$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.autoconf = $on" >> "$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.accept_ra_rtr_pref = $on" >> "$sysctlfile"
>> -    echo "net.ipv6.conf.$iface.forwarding = 0" >> "$sysctlfile"
>> -
>> -    /sbin/sysctl -p "$sysctlfile"
>> -}
>> -
>> -enableAutoConf() {
>> -    # Enables ipv6 auto configuration on an interface
>> -    # Usage: enableAutoConf <interface>
>> -    local iface=$1
>> -
>> -    setAutoConf "$iface" "1"
>> -}
>> -
>> -disableAutoConf() {
>> -    # Disables ipv6 auto configuration on an interface
>> -    # Usage: disableAutoConf <interface>
>> -    local iface=$1
>> -
>> -    setAutoConf "$iface" "0"
>> -}
>> -
>> -BOARD="$(uci get board.model.name)"
>> -. /etc/network.$BOARD
>> -
>> -if [ -s /etc/network.config ] ; then
>> -    . /etc/network.config
>> -else
>> -    # Write network.config
>> -    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
>> -    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 ! 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"
>> -
>> -    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"
>> -
>> -        enableAutoConf "$WANDEV.2"
>> -    else
>> -        enableAutoConf "$WANDEV"
>> -    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
>> -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
>> -        enableAutoConf "$WANDEV"
>> -        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
>> -        disableAutoConf "$WANDEV"
>> -        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
>> -        disableAutoConf "$WANDEV"
>> -        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
>> -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 network
>> -
>> -        ifconfig $SWITCHDEV.3 down
>> -        ifconfig $SWITCHDEV.3 hw ether $ETHMESHMAC
>> -        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 network
>> -
>> -        ifconfig br-mesh down
>> -        ifconfig br-mesh hw ether $ROUTERMAC
>> -        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 network
>> -        ifconfig eth0 down
>> -        ifconfig eth0 hw ether $NEW_MACADDR
>> -        ifconfig eth0 up
>> -        /etc/init.d/network restart
>> -fi
>> -
>> -if uci -q get "network.mesh.ip6addr" > /dev/null
>> -then
>> -    echo "IPv6 for mesh is set already"
>> -else
>> -    echo "Setting IPv6 addresses"
>> -    # 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" "$ROUTERMAC")"
>> -    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" "$ROUTERMAC")"
>> -    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
>> diff --git a/src/packages/fff/fff-sysupgrade/Makefile
>> b/src/packages/fff/fff-sysupgrade/Makefile
>> index 90ef66af..0e6c08ec 100644
>> --- a/src/packages/fff/fff-sysupgrade/Makefile
>> +++ b/src/packages/fff/fff-sysupgrade/Makefile
>> @@ -1,8 +1,7 @@
>>  include $(TOPDIR)/rules.mk
>>
>>  PKG_NAME:=fff-sysupgrade
>> -PKG_VERSION:=9
>> -PKG_RELEASE:=1
>> +PKG_RELEASE:=10
>>
>>  PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
>>
>> diff --git
>> a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>> b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>> index 7ff83f54..f5783687 100644
>> ---
>> a/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>> +++
>> b/src/packages/fff/fff-sysupgrade/files/etc/uci-defaults/99-fff-sysupgrade
>> @@ -7,7 +7,6 @@ cat > /etc/sysupgrade.conf <<-__EOF__
>>  /etc/dropbear/dropbear_dss_host_key
>>  /etc/dropbear/dropbear_rsa_host_key
>>  /etc/dropbear/authorized_keys
>> -/etc/network.config
>>  /etc/config/fff
>>  /etc/hoodfile
>>  __EOF__
>> --
>> 2.11.0