[PATCH] fff-hoods: manually create wifi station interface

mail at adrianschmutzler.de mail at adrianschmutzler.de
So Jan 5 23:17:45 CET 2020


Hi,

coole Sache. Leider habe ich morgen keine Zeit, das auszuprobieren, bevor es wieder mit der Arbeit los geht.

Zwei schnelle Fragen unten.

> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces at freifunk.net] On Behalf
> Of Fabian Bläse
> Sent: Sonntag, 5. Januar 2020 22:43
> To: franken-dev at freifunk.net
> Subject: [PATCH] fff-hoods: manually create wifi station interface
> 
> The mac80211 interface script in OpenWrt depends on wpa_supplicant for
> the creation of station interfaces. While this is conveniant, it isn't strictly
> necessary for connecting to unencrypted networks.
> 
> To be able to create station interfaces if wpa_supplicant is removed, the
> station interface for obtaining the initial configuration is now created using iw
> commands only.
> 
> This makes it possible to replace wpad-mini with hostapd-mini, which does
> not include wpa_supplicant and therefore shrinks the uncompressed binary
> by around 200KiB.
> 
> Signed-off-by: Fabian Bläse <fabian at blaese.de>
> ---
>  .../files/etc/uci-defaults/24c-fff-wXsta      | 27 -----------------
>  .../files/usr/lib/functions/fff/hoodfile      | 30 +++++++++++--------
>  2 files changed, 17 insertions(+), 40 deletions(-)  delete mode 100644
> src/packages/fff/fff-hoods/files/etc/uci-defaults/24c-fff-wXsta
> 
> diff --git a/src/packages/fff/fff-hoods/files/etc/uci-defaults/24c-fff-wXsta
> b/src/packages/fff/fff-hoods/files/etc/uci-defaults/24c-fff-wXsta
> deleted file mode 100644
> index e9867b9..0000000
> --- a/src/packages/fff/fff-hoods/files/etc/uci-defaults/24c-fff-wXsta
> +++ /dev/null
> @@ -1,27 +0,0 @@
> -#!/bin/sh
> -
> -. /lib/functions/fff/wireless
> -
> -# Set up wXsta
> -for radio in $(wifiListRadio); do
> -	# wXsta: We can use $freq here, as the initial radios are not set up
> with auto
> -	freq="$(wifiGetFreq $radio)"
> -
> -	uci batch <<-__EOF__
> -		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-hoods/files/usr/lib/functions/fff/hoodfile
> b/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfile
> index b148eca..d9119ac 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
> @@ -15,29 +15,33 @@ getWirelessHoodfile() {
> 
>  	# 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}configap.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;
> +	# wait for wireless interfaces to vanish
> +	sleep 5;
> 
> -	if /bin/busybox wget -T15 -O "$file"
> "http://[fe80::1%w2sta]:2342/keyxchangev2data"; then
> -		return 0
> -	elif /bin/busybox wget -T15 -O "$file"
> "http://[fe80::1%w5sta]:2342/keyxchangev2data"; then
> -		return 0
> -	else
> -		return 1
> -	fi
> +
> +	for phy in $(ls /sys/class/ieee80211); do
> +		iw phy $phy interface add configsta type managed
> +		ip link set up configsta
> +		iw dev configsta connect -w config.franken.freifunk.net
> 2>/dev/null
> +
> +		if /bin/busybox wget -T15 -O "$file"
> "http://[fe80::1%configsta]:2342/keyxchangev2data"; then
> +			iw dev configsta del
> +			return 0
> +		fi
> +
> +		iw dev configsta del

Brauchen wir da vorher noch sowas wie "ip link set down configsta" oder macht das iw automatisch mit? Nicht, dass da irgendwelche Leichen übrig bleiben.

Außerdem:
In configurehood gibt es noch eine Zeile, die das wXsta im Erfolgsfall wieder ausmacht. Die müsstest du auch noch löschen.

Sobald ich Zeit habe, werde ich damit etwas herumspielen und weiteres Feedback geben.

Grüße

Adrian

> +	done
> +
> +	return 1
>  }
> 
>  getEthernetHoodfile() {
> --
> 2.24.1
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : openpgp-digital-signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 834 bytes
Beschreibung: nicht verfügbar
URL         : <https://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20200105/2e61c141/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev