[2/2] fff-hoods/fff-wireless: Reconfigure instead of delete and create

Submitted by Adrian Schmutzler on April 14, 2019, 10:09 p.m.

Details

Message ID 20190414220959.38133-2-freifunk@adrianschmutzler.de
State Superseded
Headers show

Commit Message

Adrian Schmutzler April 14, 2019, 10:09 p.m.
Previously, when configurehood switched status, all WiFi devices
were completely rewritten and all interfaces were deleted and
recreated. This is both unnecessary and ugly.

This patch redesigns WiFi setup to create all interfaces (in
parallel) initially, and then only to enable/disable them as
necessary. Where reconfiguration is necessary, only the variable
parts are changed.

This patch will not change the logic (codeflow) of configurehood,
but only affects how action on the WiFi devices/interfaces is
taken.

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

---

This patch is build based on my network reconf patchset.

However, if you change 20a-fff-wireless to its old name, it is
supposed to work on current master except one-ports
(ETH0MAC problem).

Quickly tested on Archer C7v5 and 841v10.
---
 .../fff-hoods/files/usr/lib/functions/fff/hoodfile |  37 ++--
 .../fff/fff-hoods/files/usr/sbin/configurehood     |  98 +++++-----
 .../files/etc/uci-defaults/20a-fff-wireless        |  98 ++++++++--
 .../fff-wireless/files/lib/functions/fff/wireless  | 217 +--------------------
 4 files changed, 157 insertions(+), 293 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile b/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile
index d4a9ecb2..008821a3 100644
--- a/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile
+++ b/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile
@@ -13,33 +13,20 @@  getWirelessHoodfile() {
 
 	# only change temporarily
 
-	if ! wifiDelIface; then
-		echo "Can't delete current wifi setup"
-		exit 1
-	fi
-	#now we look for phy and add this
-	for phy in $(iw phy | awk '/^Wiphy/{ print $2 }'); do
-		radio="$(wifiAddPhyCond "$phy" "2" "auto")"
-		radio5="$(wifiAddPhyCond "$phy" "5" "auto5")"
-		if [ -n "$radio5" ] ; then
-			radio="$radio5"
-			staiface="w5sta"
-		else
-			staiface="w2sta"
-		fi
-
-		#and here we add the station
-		if ! wifiAddSta "$radio" "config.franken.freifunk.net" "configSta" "$staiface" ; then
-			echo "Can't add Sta interface on $radio."
-			exit 1
-		else
-			uci -q set network.configSta=interface
-			uci -q set network.configSta.proto='static'
-			uci -q commit network
-			reload_config
-		fi
+	# Set channel to auto, enable wXsta, disable other interfaces
+	for radio in $(wifiListRadio); do
+		uci set "wireless.${radio}.channel=auto"
+
+		freq="$(wifiGetFreq $radio)"
+		uci set wireless.w${freq}ap.disabled='1'
+		uci set wireless.w${freq}mesh.disabled='1'
+		uci set wireless.w${freq}config.disabled='1'
+		uci set wireless.w${freq}sta.disabled='0'
 	done
 
+	uci commit wireless
+	reload_config
+
 	wifi
 	# wait a moment to start the interface
 	sleep 10;
diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
index 1f307fbd..9b60937d 100755
--- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
+++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
@@ -46,27 +46,17 @@  hasInternet() {
 
 if [ -s "$hoodfilewww" ] && isGatewayAvailable ; then
 	needwifi="0"
-	for radio in $(uci show wireless | sed -n 's,.*\.\([a-z0-9]*\)=wifi-device,\1,p'); do
-		freq="2"
-		if [ "$(uci get "wireless.${radio}.channel")" -gt "14" ]; then
-			freq="5"
-		fi
+	for radio in $(wifiListRadio); do
+		freq="$(wifiGetFreq $radio)"
+
 		# Break: wXconfig is up
-		uci -q get "wireless.w${freq}configap" > /dev/null && continue
+		[ "$(uci get "wireless.w${freq}configap.disabled")" = "0" ] && continue
 		# Break: No mesh interface
-		uci -q get "wireless.w${freq}mesh" > /dev/null || continue
+		[ "$(uci get "wireless.w${freq}mesh.disabled")" = "0" ] || continue
 		
-		# Create configap
-		iface="configap$freq"
-		uci set network.${iface}=interface
-		uci set network.${iface}.proto='static'
-		uci set network.${iface}.ip6addr='fe80::1/64'
-		uci commit network
-		reload_config
-		if ! wifiAddAP "$radio" "config.franken.freifunk.net" "$iface" "configap" "1"; then
-			echo "Can't add Config interface on $radio."
-			exit 1
-		fi
+		# Enable configap
+		uci set wireless.w${freq}configap.disabled='0'
+		uci commit wireless
 		needwifi="1"
 	done
 
@@ -99,7 +89,7 @@  else
 
 			uci -q del "system.@system[0].hood"
 			uci -q del "system.@system[0].hoodid"
-			uci -q commit system
+			uci commit system
 			reload_config
 		
 			sleep 30 # Wait for the config AP, which may be created at the same time as this script has started
@@ -152,43 +142,55 @@  if [ -s "$hoodfiletmp" ]; then
 		fi
 
 		echo "Setting hood name: $hood (ID $hoodid)"
-		uci -q set "system.@system[0].hood=$hood"
-		uci -q set "system.@system[0].hoodid=$hoodid"
-		uci -q commit system
+		uci set "system.@system[0].hood=$hood"
+		uci set "system.@system[0].hoodid=$hoodid"
+		uci commit system
 		reload_config
 
-		if ! wifiDelIface; then
-			echo "Can't delete current wifi setup"
-			exit 1
-		fi
-
-		for phy in $(iw phy | awk '/^Wiphy/{ print $2 }'); do
-			radio="$(wifiAddPhyCond "$phy" "2" "$chan2ghz")"
-			radio5="$(wifiAddPhyCond "$phy" "5" "$chan5ghz")"
-			[ -n "$radio5" ] && radio="$radio5"
-
-			if ! wifiAddAP "$radio" "$essid" "mesh" "ap" "0"; then
-				echo "Can't add AP interface on $radio."
-				exit 1
-			fi
+		for radio in $(wifiListRadio); do
+			freq="$(wifiGetFreq $radio)"
 
-			# add 802.11s mesh if type = "802.11s"
-			if ( [ -n "$radio5" ] && [ "$mesh_type5" = "802.11s" ] ) || [ "$mesh_type2" = "802.11s" ]; then
-				if ! wifiAddMesh "$radio" "$mesh_id"; then
-					echo "Can't add Mesh interface on $radio."
-					exit 1
-				fi
+			if [ "$freq" = "5" ]; then
+				uci set wireless.${radio}.channel="$chan5ghz"
+				mesh_type="$mesh_type5"
+			elif [ "$freq" = "2" ]; then
+				uci set wireless.${radio}.channel="$chan2ghz"
+				mesh_type="$mesh_type2"
 			fi
 
-			# add IBSS mesh if type = "ibss"
-			if ( [ -n "$radio5" ] && [ "$mesh_type5" = "ibss" ] ) || [ "$mesh_type2" = "ibss" ]; then
-				if ! wifiAddAdHocMesh "$radio" "$mesh_essid" "$mesh_bssid"; then
-					echo "Can't add AdHocMesh interface on $radio."
-					exit 1
-				fi
+			# Disable wXsta, wXconfigap
+			uci set wireless.w${freq}sta.disabled='1'
+			uci set wireless.w${freq}configap.disabled='1'
+
+			# Configure wXap
+			uci set wireless.w${freq}ap.ssid="$essid"
+			uci set wireless.w${freq}ap.disabled='0'
+
+			# Configure 802.11s mesh if type = "802.11s"
+			if [ "$mesh_type" = "802.11s" ]; then
+				uci set wireless.w${freq}mesh.mode='mesh'
+				uci -q del wireless.w${freq}mesh.bssid
+				uci -q del wireless.w${freq}mesh.ssid
+				uci -q del wireless.w${freq}mesh.mcast_rate
+				uci set wireless.w${freq}mesh.mesh_id="$mesh_id"
+				uci set wireless.w${freq}mesh.mesh_fwding='0'
+				uci set wireless.w${freq}mesh.disabled='0'
+			# Configure IBSS mesh if type = "ibss"
+			elif [ "$mesh_type" = "ibss" ]; then
+				uci set wireless.w${freq}mesh.mode='adhoc'
+				uci -q del wireless.w${freq}mesh.mesh_id
+				uci -q del wireless.w${freq}mesh.mesh_fwding
+				uci set wireless.w${freq}mesh.bssid="$mesh_bssid"
+				uci set wireless.w${freq}mesh.ssid="$mesh_essid"
+				uci set wireless.w${freq}mesh.mcast_rate='6000'
+				uci set wireless.w${freq}mesh.disabled='0'
+			# Disable mesh by setting no mesh_type
+			else
+				uci set wireless.w${freq}mesh.disabled='1'
 			fi
 		done
 
+		uci commit wireless
 		echo "Loading wifi"
 		wifi
 
diff --git a/src/packages/fff/fff-wireless/files/etc/uci-defaults/20a-fff-wireless b/src/packages/fff/fff-wireless/files/etc/uci-defaults/20a-fff-wireless
index 860f47f6..d1444bbb 100644
--- a/src/packages/fff/fff-wireless/files/etc/uci-defaults/20a-fff-wireless
+++ b/src/packages/fff/fff-wireless/files/etc/uci-defaults/20a-fff-wireless
@@ -2,21 +2,95 @@ 
 # Copyright 2016 Tim Niemeyer
 # License GPLv3
 
-. /lib/functions/fff/wireless
-
-if ! wifiDelAll; then
-	echo "Can't delete current wifi setup"
-	exit 1
-fi
+# Remove WiFi config
+> /etc/config/wireless
 
+# Set up WiFi devices and interfaces, but leave them disabled
 for phy in $(iw phy | awk '/^Wiphy/{ print $2 }'); do
-	radio="$(wifiAddPhyCond "$phy" "2" "1")"
-	radio5="$(wifiAddPhyCond "$phy" "5" "36")"
-	[ -n "$radio5" ] && radio="$radio5"
-	if [ -z "$radio" ] ; then
-		echo "Can't create radio for $phy"
-		exit 1
+	# 2.4 or 5 GHz
+	if iw phy "$phy" info | grep -q -m1 "5... MHz"; then
+		freq=5
+		channel=36
+		hwmode="11a"
+	elif iw phy "$phy" info | grep -q -m1 "2... MHz"; then
+		freq=2
+		channel=1
+		hwmode="11g"
+	else # additional devices ignored, e.g. 60 GHz
+		continue
 	fi
+
+	radio="radio$(echo "$phy" | tr -d -C "0-9")"
+
+	uci batch <<-__EOF__
+		set wireless.${radio}='wifi-device'
+		set wireless.${radio}.type='mac80211'
+		set wireless.${radio}.channel='${channel}'
+		set wireless.${radio}.phy='${phy}'
+		set wireless.${radio}.hwmode='${hwmode}'
+		set wireless.${radio}.htmode='HT20'
+		set wireless.${radio}.country='DE'
+	__EOF__
+	[ "$hwmode" = "11g" ] && uci set "wireless.${radio}.legacy_rates=0"
+
+	# Comments
+	# wXmesh: use 802.11s mesh as "default"
+	# wXsta: We can use $freq here, as the initial radios are not set up with auto
+
+	uci batch <<-__EOF__
+		set wireless.w${freq}ap='wifi-iface'
+		set wireless.w${freq}ap.device='${radio}'
+		set wireless.w${freq}ap.network='mesh'
+		set wireless.w${freq}ap.ifname='w${freq}ap'
+		set wireless.w${freq}ap.mode='ap'
+		set wireless.w${freq}ap.ssid='noservice.freifunk'
+		set wireless.w${freq}ap.encryption='none'
+		set wireless.w${freq}ap.hidden='0'
+		set wireless.w${freq}ap.disabled='1'
+
+		set network.w${freq}mesh='interface'
+		set network.w${freq}mesh.mtu='1528'
+		set network.w${freq}mesh.proto='batadv'
+		set network.w${freq}mesh.mesh='bat0'
+
+		set wireless.w${freq}mesh='wifi-iface'
+		set wireless.w${freq}mesh.device='${radio}'
+		set wireless.w${freq}mesh.network='w${freq}mesh'
+		set wireless.w${freq}mesh.ifname='w${freq}mesh'
+		set wireless.w${freq}mesh.mode='mesh'
+		set wireless.w${freq}mesh.mesh_id='nomesh.freifunk'
+		set wireless.w${freq}mesh.encryption='none'
+		set wireless.w${freq}mesh.mesh_fwding=0
+		set wireless.w${freq}mesh.disabled='1'
+
+		set network.configap${freq}=interface
+		set network.configap${freq}.proto='static'
+		set network.configap${freq}.ip6addr='fe80::1/64'
+
+		set wireless.w${freq}configap='wifi-iface'
+		set wireless.w${freq}configap.device='${radio}'
+		set wireless.w${freq}configap.network='configap${freq}'
+		set wireless.w${freq}configap.ifname='w${freq}configap'
+		set wireless.w${freq}configap.mode='ap'
+		set wireless.w${freq}configap.ssid='config.franken.freifunk.net'
+		set wireless.w${freq}configap.encryption='none'
+		set wireless.w${freq}configap.hidden='1'
+		set wireless.w${freq}configap.disabled='1'
+
+		set network.configsta${freq}=interface
+		set network.configsta${freq}.proto='static'
+
+		set wireless.w${freq}sta='wifi-iface'
+		set wireless.w${freq}sta.device='${radio}'
+		set wireless.w${freq}sta.network='configsta${freq}'
+		set wireless.w${freq}sta.ifname='w${freq}sta'
+		set wireless.w${freq}sta.mode='sta'
+		set wireless.w${freq}sta.ssid='config.franken.freifunk.net'
+		set wireless.w${freq}sta.disabled='1'
+	__EOF__
 done
 
+uci commit network
+uci commit wireless
+
 # vim: set noexpandtab:tabstop=4
diff --git a/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless b/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
index 71a07f93..29803a1f 100644
--- a/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
+++ b/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
@@ -1,229 +1,30 @@ 
 # Copyright 2016 Tim Niemeyer
 # License GPLv3
 
-wifiDelAll() {
+wifiListRadio() {
 	if [ $# -ne "0" ]
 	then
-		echo "Usage: wifiDelAll"
+		echo "Usage: wifiListRadio"
 		return 1
 	fi
 
-	> /etc/config/wireless
-
-	return 0
-}
-
-wifiDelIface() {
-	if [ $# -ne "0" ]
-	then
-		echo "Usage: wifiDelIface"
-		return 1
-	fi
-
-	grep 'config wifi-iface' /etc/config/wireless | sed -n -e "s/.*'\([^']*\)'.*/\1/p" | while read -r line ; do
-		uci -q delete "wireless.$line"
-	done
-	uci -q commit wireless
-
-	return 0
-}
-
-wifiAddPhy() {
-	if [ $# -ne "2" ]
-	then
-		echo "Usage: wifiAddPhy <phy> <channel>"
-		return 1
-	fi
-
-	local phy=$1
-	local channel=$2
-	local radio="radio$(echo "$phy" | tr -d -C "0-9")"
-	local hwmode="11g"
-	if [ "$channel" = "auto5" ] ; then
-		hwmode="11a"
-		channel="auto"
-	elif ( ! [ "$channel" = "auto" ] ) && [ "$channel" -gt "14" ]; then
-		hwmode="11a"
-	fi
-
-	uci batch <<-__EOF__
-		set wireless.${radio}='wifi-device'
-		set wireless.${radio}.type='mac80211'
-		set wireless.${radio}.channel='${channel}'
-		set wireless.${radio}.phy='${phy}'
-		set wireless.${radio}.hwmode='${hwmode}'
-		set wireless.${radio}.htmode='HT20'
-		set wireless.${radio}.country='DE'
-	__EOF__
-	if [ "$hwmode" = "11g" ]; then
-		uci batch <<-__EOF__
-			set wireless.${radio}.legacy_rates='0'
-		__EOF__
-	fi
-	uci commit wireless
-
-	echo "${radio}"
-	return 0
-}
-
-wifiAddPhyCond() {
-	if [ $# -ne "3" ]
-	then
-		return 1
-	fi
-
-	local phy=$1
-	local freq=$2
-	local channel=$3
-	local radio=""
-
-	if iw phy "$phy" info | grep -q -m1 "${freq}... MHz"; then
-		radio="$(wifiAddPhy "$phy" "$channel")"
-		if [ -z "$radio" ]; then
-			return 1
-		fi
-	fi
-	
-	echo "$radio"
-	return 0 # also returns success if outermost if is false
-}
-
-wifiAddAdHocMesh() {
-	if [ $# -ne "3" ]
-	then
-		echo "Usage: wifiAddAdHocMesh <radio> <essid> <bssid>"
-		return 1
-	fi
-
-	local radio=$1
-	local essid=$2
-	local bssid=$3
-
-	local channel=$(uci get "wireless.${radio}.channel")
-	local iface="w2mesh"
-	if [ "$channel" -gt "14" ]; then
-		iface="w5mesh"
-	fi
-
-	uci batch <<-__EOF__
-		set wireless.${iface}='wifi-iface'
-		set wireless.${iface}.device='${radio}'
-		set wireless.${iface}.network='${iface}'
-		set wireless.${iface}.ifname='${iface}'
-		set wireless.${iface}.mode='adhoc'
-		set wireless.${iface}.bssid='${bssid}'
-		set wireless.${iface}.ssid='${essid}'
-		set wireless.${iface}.mcast_rate='6000'
-		set wireless.${iface}.encryption='none'
-		commit wireless
-
-		set network.${iface}='interface'
-		set network.${iface}.mtu='1528'
-		set network.${iface}.proto='batadv'
-		set network.${iface}.mesh='bat0'
-		commit network
-	__EOF__
-
-	echo "${iface}"
+	uci show wireless | sed -n 's,.*\.\([a-z0-9]*\)=wifi-device,\1,p'
 	return 0
 }
 
-wifiAddAP() {
-	if [ $# -ne "5" ]
+wifiGetFreq() {
+	if [ $# -ne "1" ]
 	then
-		echo "Usage: wifiAddAP <radio> <essid> <network> <iface> <hidden>"
+		echo "Usage: wifiGetFreq <radio>"
 		return 1
 	fi
 
 	local radio=$1
-	local essid=$2
-	local network=$3
-	local inface=$4
-	local hidden=$5
 
-	local channel=$(uci get "wireless.${radio}.channel")
-	local iface="w2${inface}"
-	if [ "$channel" -gt "14" ]; then
-		iface="w5${inface}"
-	fi
-	uci batch <<-__EOF__
-		set wireless.${iface}='wifi-iface'
-		set wireless.${iface}.device='${radio}'
-		set wireless.${iface}.network='${network}'
-		set wireless.${iface}.ifname='${iface}'
-		set wireless.${iface}.mode='ap'
-		set wireless.${iface}.ssid='${essid}'
-		set wireless.${iface}.encryption='none'
-		set wireless.${iface}.hidden='${hidden}'
-
-		commit wireless
-	__EOF__
-
-	echo "${iface}"
+	# Use hwmode for switching, since this is always set by firmware (effectively hard-coded)
+	# Do not use channel, as this might be "auto" for both
+	[ "$(uci get "wireless.${radio}.hwmode")" = "11a" ] && echo "5" || echo "2"
 	return 0
 }
 
-wifiAddSta() {
-	if [ $# -ne "4" ]
-	then
-		echo "Usage: wifiAddSta <radio> <essid> <network> <iface>"
-		return 1
-	fi
-
-	local radio=$1
-	local essid=$2
-	local network=$3
-	local iface=$4
-
-	uci batch <<-__EOF__
-		set wireless.${iface}='wifi-iface'
-		set wireless.${iface}.device='${radio}'
-		set wireless.${iface}.network='${network}'
-		set wireless.${iface}.ifname='${iface}'
-		set wireless.${iface}.mode='sta'
-		set wireless.${iface}.ssid='${essid}'
-
-		commit wireless
-	__EOF__
-	
-	echo "${iface}"
-	return 0
-}
-
-wifiAddMesh() {
-	if [ $# -ne "2" ]
-	then
-		echo "Usage: wifiAddMesh <radio> <mesh-id>"
-		return 1
-	fi
-
-	local radio=$1
-	local mesh_id=$2
-
-	local channel=$(uci get "wireless.${radio}.channel")
-	local iface="w2mesh"
-	if [ "$channel" -gt "14" ]; then
-		iface="w5mesh"
-	fi
-	uci batch <<-__EOF__
-		set wireless.${iface}='wifi-iface'
-		set wireless.${iface}.device='${radio}'
-		set wireless.${iface}.network='${iface}'
-		set wireless.${iface}.ifname='${iface}'
-		set wireless.${iface}.mode='mesh'
-		set wireless.${iface}.mesh_id='${mesh_id}'
-		set wireless.${iface}.encryption='none'
-		set wireless.${iface}.mesh_fwding=0
-		commit wireless
-
-		set network.${iface}='interface'
-		set network.${iface}.mtu='1528'
-		set network.${iface}.proto='batadv'
-		set network.${iface}.mesh='bat0'
-		commit network
-	__EOF__
-
-	echo "${iface}"
-	return 0
-}
 # vim: set noexpandtab:tabstop=4

Comments

Adrian Schmutzler April 15, 2019, 1:04 p.m.
Auch hier zum Thema Gateway-Firmware:

Diese Lösung sollte sich ohne Probleme in die GW-Firmware einfügen (und sich in gleicher Art "positiv" auswirken). Lediglich das wXsta Setup sollte man dann in ein eigenes uci-default Skript auslagern und das dann in fff-hoods verschieben. Wenn ich mal eine v2 mache, werde ich das gleich umsetzen.

In diesem Zusammenhang würde es sich zudem anbieten, das "Auswerten des Hoodfiles" aus der configurehood Datei in eine Funktion zu packen (in fff-hoodutils) und diese dann für die GW-Firmware auch zu benutzen, das sind ja diverse Zeilen, wo effektiv dasselbe gemacht wird. Dies könnte man btw auch ohne diesen Patch so machen ...

Grüße

Adrian

> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of
> Adrian Schmutzler
> Sent: Montag, 15. April 2019 00:10
> To: franken-dev@freifunk.net
> Subject: [PATCH 2/2] fff-hoods/fff-wireless: Reconfigure instead of delete and
> create
> 
> Previously, when configurehood switched status, all WiFi devices
> were completely rewritten and all interfaces were deleted and
> recreated. This is both unnecessary and ugly.
> 
> This patch redesigns WiFi setup to create all interfaces (in
> parallel) initially, and then only to enable/disable them as
> necessary. Where reconfiguration is necessary, only the variable
> parts are changed.
> 
> This patch will not change the logic (codeflow) of configurehood,
> but only affects how action on the WiFi devices/interfaces is
> taken.
> 
> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
> 
> ---
> 
> This patch is build based on my network reconf patchset.
> 
> However, if you change 20a-fff-wireless to its old name, it is
> supposed to work on current master except one-ports
> (ETH0MAC problem).
> 
> Quickly tested on Archer C7v5 and 841v10.
> ---
>  .../fff-hoods/files/usr/lib/functions/fff/hoodfile |  37 ++--
>  .../fff/fff-hoods/files/usr/sbin/configurehood     |  98 +++++-----
>  .../files/etc/uci-defaults/20a-fff-wireless        |  98 ++++++++--
>  .../fff-wireless/files/lib/functions/fff/wireless  | 217
> +--------------------
>  4 files changed, 157 insertions(+), 293 deletions(-)
> 
> diff --git
> a/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile
> b/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile
> index d4a9ecb2..008821a3 100644
> --- a/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile
> +++ b/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile
> @@ -13,33 +13,20 @@ getWirelessHoodfile() {
> 
>  	# only change temporarily
> 
> -	if ! wifiDelIface; then
> -		echo "Can't delete current wifi setup"
> -		exit 1
> -	fi
> -	#now we look for phy and add this
> -	for phy in $(iw phy | awk '/^Wiphy/{ print $2 }'); do
> -		radio="$(wifiAddPhyCond "$phy" "2" "auto")"
> -		radio5="$(wifiAddPhyCond "$phy" "5" "auto5")"
> -		if [ -n "$radio5" ] ; then
> -			radio="$radio5"
> -			staiface="w5sta"
> -		else
> -			staiface="w2sta"
> -		fi
> -
> -		#and here we add the station
> -		if ! wifiAddSta "$radio" "config.franken.freifunk.net"
> "configSta" "$staiface" ; then
> -			echo "Can't add Sta interface on $radio."
> -			exit 1
> -		else
> -			uci -q set network.configSta=interface
> -			uci -q set network.configSta.proto='static'
> -			uci -q commit network
> -			reload_config
> -		fi
> +	# Set channel to auto, enable wXsta, disable other interfaces
> +	for radio in $(wifiListRadio); do
> +		uci set "wireless.${radio}.channel=auto"
> +
> +		freq="$(wifiGetFreq $radio)"
> +		uci set wireless.w${freq}ap.disabled='1'
> +		uci set wireless.w${freq}mesh.disabled='1'
> +		uci set wireless.w${freq}config.disabled='1'
> +		uci set wireless.w${freq}sta.disabled='0'
>  	done
> 
> +	uci commit wireless
> +	reload_config
> +
>  	wifi
>  	# wait a moment to start the interface
>  	sleep 10;
> diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> index 1f307fbd..9b60937d 100755
> --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> @@ -46,27 +46,17 @@ hasInternet() {
> 
>  if [ -s "$hoodfilewww" ] && isGatewayAvailable ; then
>  	needwifi="0"
> -	for radio in $(uci show wireless | sed -n
> 's,.*\.\([a-z0-9]*\)=wifi-device,\1,p'); do
> -		freq="2"
> -		if [ "$(uci get "wireless.${radio}.channel")" -gt "14" ];
> then
> -			freq="5"
> -		fi
> +	for radio in $(wifiListRadio); do
> +		freq="$(wifiGetFreq $radio)"
> +
>  		# Break: wXconfig is up
> -		uci -q get "wireless.w${freq}configap" > /dev/null &&
> continue
> +		[ "$(uci get "wireless.w${freq}configap.disabled")" = "0"
> ] && continue
>  		# Break: No mesh interface
> -		uci -q get "wireless.w${freq}mesh" > /dev/null || continue
> +		[ "$(uci get "wireless.w${freq}mesh.disabled")" = "0" ] ||
> continue
> 
> -		# Create configap
> -		iface="configap$freq"
> -		uci set network.${iface}=interface
> -		uci set network.${iface}.proto='static'
> -		uci set network.${iface}.ip6addr='fe80::1/64'
> -		uci commit network
> -		reload_config
> -		if ! wifiAddAP "$radio" "config.franken.freifunk.net"
> "$iface" "configap" "1"; then
> -			echo "Can't add Config interface on $radio."
> -			exit 1
> -		fi
> +		# Enable configap
> +		uci set wireless.w${freq}configap.disabled='0'
> +		uci commit wireless
>  		needwifi="1"
>  	done
> 
> @@ -99,7 +89,7 @@ else
> 
>  			uci -q del "system.@system[0].hood"
>  			uci -q del "system.@system[0].hoodid"
> -			uci -q commit system
> +			uci commit system
>  			reload_config
> 
>  			sleep 30 # Wait for the config AP, which may be
> created at the same time as this script has started
> @@ -152,43 +142,55 @@ if [ -s "$hoodfiletmp" ]; then
>  		fi
> 
>  		echo "Setting hood name: $hood (ID $hoodid)"
> -		uci -q set "system.@system[0].hood=$hood"
> -		uci -q set "system.@system[0].hoodid=$hoodid"
> -		uci -q commit system
> +		uci set "system.@system[0].hood=$hood"
> +		uci set "system.@system[0].hoodid=$hoodid"
> +		uci commit system
>  		reload_config
> 
> -		if ! wifiDelIface; then
> -			echo "Can't delete current wifi setup"
> -			exit 1
> -		fi
> -
> -		for phy in $(iw phy | awk '/^Wiphy/{ print $2 }'); do
> -			radio="$(wifiAddPhyCond "$phy" "2" "$chan2ghz")"
> -			radio5="$(wifiAddPhyCond "$phy" "5" "$chan5ghz")"
> -			[ -n "$radio5" ] && radio="$radio5"
> -
> -			if ! wifiAddAP "$radio" "$essid" "mesh" "ap" "0";
> then
> -				echo "Can't add AP interface on $radio."
> -				exit 1
> -			fi
> +		for radio in $(wifiListRadio); do
> +			freq="$(wifiGetFreq $radio)"
> 
> -			# add 802.11s mesh if type = "802.11s"
> -			if ( [ -n "$radio5" ] && [ "$mesh_type5" =
> "802.11s" ] ) || [ "$mesh_type2" = "802.11s" ]; then
> -				if ! wifiAddMesh "$radio" "$mesh_id"; then
> -					echo "Can't add Mesh interface on
> $radio."
> -					exit 1
> -				fi
> +			if [ "$freq" = "5" ]; then
> +				uci set
> wireless.${radio}.channel="$chan5ghz"
> +				mesh_type="$mesh_type5"
> +			elif [ "$freq" = "2" ]; then
> +				uci set
> wireless.${radio}.channel="$chan2ghz"
> +				mesh_type="$mesh_type2"
>  			fi
> 
> -			# add IBSS mesh if type = "ibss"
> -			if ( [ -n "$radio5" ] && [ "$mesh_type5" = "ibss"
> ] ) || [ "$mesh_type2" = "ibss" ]; then
> -				if ! wifiAddAdHocMesh "$radio"
> "$mesh_essid" "$mesh_bssid"; then
> -					echo "Can't add AdHocMesh
> interface on $radio."
> -					exit 1
> -				fi
> +			# Disable wXsta, wXconfigap
> +			uci set wireless.w${freq}sta.disabled='1'
> +			uci set wireless.w${freq}configap.disabled='1'
> +
> +			# Configure wXap
> +			uci set wireless.w${freq}ap.ssid="$essid"
> +			uci set wireless.w${freq}ap.disabled='0'
> +
> +			# Configure 802.11s mesh if type = "802.11s"
> +			if [ "$mesh_type" = "802.11s" ]; then
> +				uci set wireless.w${freq}mesh.mode='mesh'
> +				uci -q del wireless.w${freq}mesh.bssid
> +				uci -q del wireless.w${freq}mesh.ssid
> +				uci -q del
> wireless.w${freq}mesh.mcast_rate
> +				uci set
> wireless.w${freq}mesh.mesh_id="$mesh_id"
> +				uci set
> wireless.w${freq}mesh.mesh_fwding='0'
> +				uci set wireless.w${freq}mesh.disabled='0'
> +			# Configure IBSS mesh if type = "ibss"
> +			elif [ "$mesh_type" = "ibss" ]; then
> +				uci set wireless.w${freq}mesh.mode='adhoc'
> +				uci -q del wireless.w${freq}mesh.mesh_id
> +				uci -q del
> wireless.w${freq}mesh.mesh_fwding
> +				uci set
> wireless.w${freq}mesh.bssid="$mesh_bssid"
> +				uci set
> wireless.w${freq}mesh.ssid="$mesh_essid"
> +				uci set
> wireless.w${freq}mesh.mcast_rate='6000'
> +				uci set wireless.w${freq}mesh.disabled='0'
> +			# Disable mesh by setting no mesh_type
> +			else
> +				uci set wireless.w${freq}mesh.disabled='1'
>  			fi
>  		done
> 
> +		uci commit wireless
>  		echo "Loading wifi"
>  		wifi
> 
> diff --git
> a/src/packages/fff/fff-wireless/files/etc/uci-defaults/20a-fff-wireless
> b/src/packages/fff/fff-wireless/files/etc/uci-defaults/20a-fff-wireless
> index 860f47f6..d1444bbb 100644
> ---
> a/src/packages/fff/fff-wireless/files/etc/uci-defaults/20a-fff-wireless
> +++
> b/src/packages/fff/fff-wireless/files/etc/uci-defaults/20a-fff-wireless
> @@ -2,21 +2,95 @@
>  # Copyright 2016 Tim Niemeyer
>  # License GPLv3
> 
> -. /lib/functions/fff/wireless
> -
> -if ! wifiDelAll; then
> -	echo "Can't delete current wifi setup"
> -	exit 1
> -fi
> +# Remove WiFi config
> +> /etc/config/wireless
> 
> +# Set up WiFi devices and interfaces, but leave them disabled
>  for phy in $(iw phy | awk '/^Wiphy/{ print $2 }'); do
> -	radio="$(wifiAddPhyCond "$phy" "2" "1")"
> -	radio5="$(wifiAddPhyCond "$phy" "5" "36")"
> -	[ -n "$radio5" ] && radio="$radio5"
> -	if [ -z "$radio" ] ; then
> -		echo "Can't create radio for $phy"
> -		exit 1
> +	# 2.4 or 5 GHz
> +	if iw phy "$phy" info | grep -q -m1 "5... MHz"; then
> +		freq=5
> +		channel=36
> +		hwmode="11a"
> +	elif iw phy "$phy" info | grep -q -m1 "2... MHz"; then
> +		freq=2
> +		channel=1
> +		hwmode="11g"
> +	else # additional devices ignored, e.g. 60 GHz
> +		continue
>  	fi
> +
> +	radio="radio$(echo "$phy" | tr -d -C "0-9")"
> +
> +	uci batch <<-__EOF__
> +		set wireless.${radio}='wifi-device'
> +		set wireless.${radio}.type='mac80211'
> +		set wireless.${radio}.channel='${channel}'
> +		set wireless.${radio}.phy='${phy}'
> +		set wireless.${radio}.hwmode='${hwmode}'
> +		set wireless.${radio}.htmode='HT20'
> +		set wireless.${radio}.country='DE'
> +	__EOF__
> +	[ "$hwmode" = "11g" ] && uci set
> "wireless.${radio}.legacy_rates=0"
> +
> +	# Comments
> +	# wXmesh: use 802.11s mesh as "default"
> +	# wXsta: We can use $freq here, as the initial radios are not set
> up with auto
> +
> +	uci batch <<-__EOF__
> +		set wireless.w${freq}ap='wifi-iface'
> +		set wireless.w${freq}ap.device='${radio}'
> +		set wireless.w${freq}ap.network='mesh'
> +		set wireless.w${freq}ap.ifname='w${freq}ap'
> +		set wireless.w${freq}ap.mode='ap'
> +		set wireless.w${freq}ap.ssid='noservice.freifunk'
> +		set wireless.w${freq}ap.encryption='none'
> +		set wireless.w${freq}ap.hidden='0'
> +		set wireless.w${freq}ap.disabled='1'
> +
> +		set network.w${freq}mesh='interface'
> +		set network.w${freq}mesh.mtu='1528'
> +		set network.w${freq}mesh.proto='batadv'
> +		set network.w${freq}mesh.mesh='bat0'
> +
> +		set wireless.w${freq}mesh='wifi-iface'
> +		set wireless.w${freq}mesh.device='${radio}'
> +		set wireless.w${freq}mesh.network='w${freq}mesh'
> +		set wireless.w${freq}mesh.ifname='w${freq}mesh'
> +		set wireless.w${freq}mesh.mode='mesh'
> +		set wireless.w${freq}mesh.mesh_id='nomesh.freifunk'
> +		set wireless.w${freq}mesh.encryption='none'
> +		set wireless.w${freq}mesh.mesh_fwding=0
> +		set wireless.w${freq}mesh.disabled='1'
> +
> +		set network.configap${freq}=interface
> +		set network.configap${freq}.proto='static'
> +		set network.configap${freq}.ip6addr='fe80::1/64'
> +
> +		set wireless.w${freq}configap='wifi-iface'
> +		set wireless.w${freq}configap.device='${radio}'
> +		set wireless.w${freq}configap.network='configap${freq}'
> +		set wireless.w${freq}configap.ifname='w${freq}configap'
> +		set wireless.w${freq}configap.mode='ap'
> +		set
> wireless.w${freq}configap.ssid='config.franken.freifunk.net'
> +		set wireless.w${freq}configap.encryption='none'
> +		set wireless.w${freq}configap.hidden='1'
> +		set wireless.w${freq}configap.disabled='1'
> +
> +		set network.configsta${freq}=interface
> +		set network.configsta${freq}.proto='static'
> +
> +		set wireless.w${freq}sta='wifi-iface'
> +		set wireless.w${freq}sta.device='${radio}'
> +		set wireless.w${freq}sta.network='configsta${freq}'
> +		set wireless.w${freq}sta.ifname='w${freq}sta'
> +		set wireless.w${freq}sta.mode='sta'
> +		set
> wireless.w${freq}sta.ssid='config.franken.freifunk.net'
> +		set wireless.w${freq}sta.disabled='1'
> +	__EOF__
>  done
> 
> +uci commit network
> +uci commit wireless
> +
>  # vim: set noexpandtab:tabstop=4
> diff --git
> a/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
> b/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
> index 71a07f93..29803a1f 100644
> --- a/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
> +++ b/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
> @@ -1,229 +1,30 @@
>  # Copyright 2016 Tim Niemeyer
>  # License GPLv3
> 
> -wifiDelAll() {
> +wifiListRadio() {
>  	if [ $# -ne "0" ]
>  	then
> -		echo "Usage: wifiDelAll"
> +		echo "Usage: wifiListRadio"
>  		return 1
>  	fi
> 
> -	> /etc/config/wireless
> -
> -	return 0
> -}
> -
> -wifiDelIface() {
> -	if [ $# -ne "0" ]
> -	then
> -		echo "Usage: wifiDelIface"
> -		return 1
> -	fi
> -
> -	grep 'config wifi-iface' /etc/config/wireless | sed -n -e
> "s/.*'\([^']*\)'.*/\1/p" | while read -r line ; do
> -		uci -q delete "wireless.$line"
> -	done
> -	uci -q commit wireless
> -
> -	return 0
> -}
> -
> -wifiAddPhy() {
> -	if [ $# -ne "2" ]
> -	then
> -		echo "Usage: wifiAddPhy <phy> <channel>"
> -		return 1
> -	fi
> -
> -	local phy=$1
> -	local channel=$2
> -	local radio="radio$(echo "$phy" | tr -d -C "0-9")"
> -	local hwmode="11g"
> -	if [ "$channel" = "auto5" ] ; then
> -		hwmode="11a"
> -		channel="auto"
> -	elif ( ! [ "$channel" = "auto" ] ) && [ "$channel" -gt "14" ];
> then
> -		hwmode="11a"
> -	fi
> -
> -	uci batch <<-__EOF__
> -		set wireless.${radio}='wifi-device'
> -		set wireless.${radio}.type='mac80211'
> -		set wireless.${radio}.channel='${channel}'
> -		set wireless.${radio}.phy='${phy}'
> -		set wireless.${radio}.hwmode='${hwmode}'
> -		set wireless.${radio}.htmode='HT20'
> -		set wireless.${radio}.country='DE'
> -	__EOF__
> -	if [ "$hwmode" = "11g" ]; then
> -		uci batch <<-__EOF__
> -			set wireless.${radio}.legacy_rates='0'
> -		__EOF__
> -	fi
> -	uci commit wireless
> -
> -	echo "${radio}"
> -	return 0
> -}
> -
> -wifiAddPhyCond() {
> -	if [ $# -ne "3" ]
> -	then
> -		return 1
> -	fi
> -
> -	local phy=$1
> -	local freq=$2
> -	local channel=$3
> -	local radio=""
> -
> -	if iw phy "$phy" info | grep -q -m1 "${freq}... MHz"; then
> -		radio="$(wifiAddPhy "$phy" "$channel")"
> -		if [ -z "$radio" ]; then
> -			return 1
> -		fi
> -	fi
> -
> -	echo "$radio"
> -	return 0 # also returns success if outermost if is false
> -}
> -
> -wifiAddAdHocMesh() {
> -	if [ $# -ne "3" ]
> -	then
> -		echo "Usage: wifiAddAdHocMesh <radio> <essid> <bssid>"
> -		return 1
> -	fi
> -
> -	local radio=$1
> -	local essid=$2
> -	local bssid=$3
> -
> -	local channel=$(uci get "wireless.${radio}.channel")
> -	local iface="w2mesh"
> -	if [ "$channel" -gt "14" ]; then
> -		iface="w5mesh"
> -	fi
> -
> -	uci batch <<-__EOF__
> -		set wireless.${iface}='wifi-iface'
> -		set wireless.${iface}.device='${radio}'
> -		set wireless.${iface}.network='${iface}'
> -		set wireless.${iface}.ifname='${iface}'
> -		set wireless.${iface}.mode='adhoc'
> -		set wireless.${iface}.bssid='${bssid}'
> -		set wireless.${iface}.ssid='${essid}'
> -		set wireless.${iface}.mcast_rate='6000'
> -		set wireless.${iface}.encryption='none'
> -		commit wireless
> -
> -		set network.${iface}='interface'
> -		set network.${iface}.mtu='1528'
> -		set network.${iface}.proto='batadv'
> -		set network.${iface}.mesh='bat0'
> -		commit network
> -	__EOF__
> -
> -	echo "${iface}"
> +	uci show wireless | sed -n 's,.*\.\([a-z0-9]*\)=wifi-device,\1,p'
>  	return 0
>  }
> 
> -wifiAddAP() {
> -	if [ $# -ne "5" ]
> +wifiGetFreq() {
> +	if [ $# -ne "1" ]
>  	then
> -		echo "Usage: wifiAddAP <radio> <essid> <network> <iface>
> <hidden>"
> +		echo "Usage: wifiGetFreq <radio>"
>  		return 1
>  	fi
> 
>  	local radio=$1
> -	local essid=$2
> -	local network=$3
> -	local inface=$4
> -	local hidden=$5
> 
> -	local channel=$(uci get "wireless.${radio}.channel")
> -	local iface="w2${inface}"
> -	if [ "$channel" -gt "14" ]; then
> -		iface="w5${inface}"
> -	fi
> -	uci batch <<-__EOF__
> -		set wireless.${iface}='wifi-iface'
> -		set wireless.${iface}.device='${radio}'
> -		set wireless.${iface}.network='${network}'
> -		set wireless.${iface}.ifname='${iface}'
> -		set wireless.${iface}.mode='ap'
> -		set wireless.${iface}.ssid='${essid}'
> -		set wireless.${iface}.encryption='none'
> -		set wireless.${iface}.hidden='${hidden}'
> -
> -		commit wireless
> -	__EOF__
> -
> -	echo "${iface}"
> +	# Use hwmode for switching, since this is always set by firmware
> (effectively hard-coded)
> +	# Do not use channel, as this might be "auto" for both
> +	[ "$(uci get "wireless.${radio}.hwmode")" = "11a" ] && echo "5" ||
> echo "2"
>  	return 0
>  }
> 
> -wifiAddSta() {
> -	if [ $# -ne "4" ]
> -	then
> -		echo "Usage: wifiAddSta <radio> <essid> <network> <iface>"
> -		return 1
> -	fi
> -
> -	local radio=$1
> -	local essid=$2
> -	local network=$3
> -	local iface=$4
> -
> -	uci batch <<-__EOF__
> -		set wireless.${iface}='wifi-iface'
> -		set wireless.${iface}.device='${radio}'
> -		set wireless.${iface}.network='${network}'
> -		set wireless.${iface}.ifname='${iface}'
> -		set wireless.${iface}.mode='sta'
> -		set wireless.${iface}.ssid='${essid}'
> -
> -		commit wireless
> -	__EOF__
> -
> -	echo "${iface}"
> -	return 0
> -}
> -
> -wifiAddMesh() {
> -	if [ $# -ne "2" ]
> -	then
> -		echo "Usage: wifiAddMesh <radio> <mesh-id>"
> -		return 1
> -	fi
> -
> -	local radio=$1
> -	local mesh_id=$2
> -
> -	local channel=$(uci get "wireless.${radio}.channel")
> -	local iface="w2mesh"
> -	if [ "$channel" -gt "14" ]; then
> -		iface="w5mesh"
> -	fi
> -	uci batch <<-__EOF__
> -		set wireless.${iface}='wifi-iface'
> -		set wireless.${iface}.device='${radio}'
> -		set wireless.${iface}.network='${iface}'
> -		set wireless.${iface}.ifname='${iface}'
> -		set wireless.${iface}.mode='mesh'
> -		set wireless.${iface}.mesh_id='${mesh_id}'
> -		set wireless.${iface}.encryption='none'
> -		set wireless.${iface}.mesh_fwding=0
> -		commit wireless
> -
> -		set network.${iface}='interface'
> -		set network.${iface}.mtu='1528'
> -		set network.${iface}.proto='batadv'
> -		set network.${iface}.mesh='bat0'
> -		commit network
> -	__EOF__
> -
> -	echo "${iface}"
> -	return 0
> -}
>  # vim: set noexpandtab:tabstop=4
> --
> 2.11.0
Fabian Blaese June 15, 2019, 7:56 p.m.
Hallo Adrian,

Dieser Patch gefällt mir soweit sehr gut, vielen Dank!
Außerdem ist er für die Gatewayfirmware sehr wichtig, dort sind das ständige Löschen der Interfaces (und vor allem die dazugehörenden uci commits) ziemlich hinderlich.

Das ganze applied auf dem aktuellen master nicht wirklich schön, das ist aber ein lösbares Problem. :-)

Weiter inline:

On 15.04.19 00:09, Adrian Schmutzler wrote:
> +	# Set channel to auto, enable wXsta, disable other interfaces
> +	for radio in $(wifiListRadio); do
> +		uci set "wireless.${radio}.channel=auto"
> +
> +		freq="$(wifiGetFreq $radio)"
> +		uci set wireless.w${freq}ap.disabled='1'
> +		uci set wireless.w${freq}mesh.disabled='1'
> +		uci set wireless.w${freq}config.disabled='1'
> +		uci set wireless.w${freq}sta.disabled='0'
>  	done
Das ganze Wechseln in einen anderen Modus analog zum Kommentar von mir beim Patch 1/2 in eine Funktion bringen?

> 
> +	uci commit wireless
Ich würde diese temporäre Änderung gar nicht in den Flash schreiben, sondern im RAM belassen.


> diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> index 1f307fbd..9b60937d 100755
> --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> @@ -99,7 +89,7 @@ else
>  
>  			uci -q del "system.@system[0].hood"
>  			uci -q del "system.@system[0].hoodid"
> -			uci -q commit system
> +			uci commit system
Bitte in separaten Patch, falls das tatsächlich gewollt ist, dass das hier steht.

> @@ -152,43 +142,55 @@ if [ -s "$hoodfiletmp" ]; then
>  		fi
>  
>  		echo "Setting hood name: $hood (ID $hoodid)"
> -		uci -q set "system.@system[0].hood=$hood"
> -		uci -q set "system.@system[0].hoodid=$hoodid"
> -		uci -q commit system
> +		uci set "system.@system[0].hood=$hood"
> +		uci set "system.@system[0].hoodid=$hoodid"
> +		uci commit system
Siehe oben. :-)


> diff --git a/src/packages/fff/fff-wireless/files/etc/uci-defaults/20a-fff-wireless b/src/packages/fff/fff-wireless/files/etc/uci-defaults/20a-fff-wireless
> index 860f47f6..d1444bbb 100644
> --- a/src/packages/fff/fff-wireless/files/etc/uci-defaults/20a-fff-wireless
> +++ b/src/packages/fff/fff-wireless/files/etc/uci-defaults/20a-fff-wireless
Sieht soweit gut aus.


> diff --git a/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless b/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
> index 71a07f93..29803a1f 100644
> --- a/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
> +++ b/src/packages/fff/fff-wireless/files/lib/functions/fff/wireless
Die Änderungen sehen in diesem Diff ziemlich kompliziert aus, in Wirklichkeit lässt es sich aber sehr leicht auf:
- Alles weg
- Funktionen wifiListRadio() und wifiGetFreq() hinzufügen
aufbrechen.

Falls das noch jemand reviwen möchte: Lieber das Ergebnis anschauen, ist einfacher. :-)

Zusammengefasst:
- Die ListRadio Funktion passt.
- Die Erkennung per hwmode erscheint mir sinnvoll. Ich würde allerdings noch einen Fehlerfall mit passendem Rückgabewert einführen. (Stichwort 60GHz.. :-))

Gruß
Fabian
Fabian Blaese June 15, 2019, 10:07 p.m.
Eine Sache habe ich vergessen:
Zum aktuellen Stand sollte disabled bei allem außer 'wXsta' auf 0 stehen.
Aktuell haben wir weiterhin die Abhängigkeit mit ETH0MAC="w2ap" in configurenetwork.
Ich würde diesen Patch gerne vor eine Überarbeitung von configurenetwork vorziehen.

Gruß
Fabian
Adrian Schmutzler June 16, 2019, 2:26 p.m.
Ja, wXap und wXmesh.

 

From: Fabian Bläse [mailto:fabian@blaese.de] 
Sent: Sonntag, 16. Juni 2019 00:08
To: Adrian Schmutzler <freifunk@adrianschmutzler.de>; franken-dev@freifunk.net
Subject: Re: [PATCH 2/2] fff-hoods/fff-wireless: Reconfigure instead of delete and create

 

Eine Sache habe ich vergessen: 
Zum aktuellen Stand sollte disabled bei allem außer 'wXsta' auf 0 stehen. 
Aktuell haben wir weiterhin die Abhängigkeit mit ETH0MAC="w2ap" in configurenetwork. 
Ich würde diesen Patch gerne vor eine Überarbeitung von configurenetwork vorziehen. 

Gruß 
Fabian