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

Fabian Bläse fabian at blaese.de
So Jan 5 22:43:22 CET 2020


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
+	done
+
+	return 1
 }
 
 getEthernetHoodfile() {
-- 
2.24.1



Mehr Informationen über die Mailingliste franken-dev