[PATCH v2 1/5] fff-hoods: manually create wifi station interface

Fabian Bläse fabian at blaese.de
Mi Mär 11 18:11:01 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>
Acked-by: Christian Dresel <fff at chrisi01.de>
Reviewed-by: Robert Langhammer <rlanghammer at web.de>
---
Changes in v2:
- Remove leftover configsta uci config from configurehood
- Bump PKG_RELEASE
---
 src/packages/fff/fff-hoods/Makefile           |  2 +-
 .../files/etc/uci-defaults/24c-fff-wXsta      | 27 -----------------
 .../files/usr/lib/functions/fff/hoodfile      | 30 +++++++++++--------
 .../fff-hoods/files/usr/sbin/configurehood    |  3 +-
 4 files changed, 19 insertions(+), 43 deletions(-)
 delete mode 100644 src/packages/fff/fff-hoods/files/etc/uci-defaults/24c-fff-wXsta

diff --git a/src/packages/fff/fff-hoods/Makefile b/src/packages/fff/fff-hoods/Makefile
index 5eb20ca..423403c 100644
--- a/src/packages/fff/fff-hoods/Makefile
+++ b/src/packages/fff/fff-hoods/Makefile
@@ -1,7 +1,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=fff-hoods
-PKG_RELEASE:=7
+PKG_RELEASE:=8
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
 
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() {
diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
index d5dc2c0..dcdba89 100755
--- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
+++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
@@ -158,8 +158,7 @@ if [ -s "$hoodfiletmp" ]; then
 				mesh_type="$mesh_type2"
 			fi
 
-			# Disable wXsta, wXconfigap
-			uci set wireless.w${freq}sta.disabled='1'
+			# Disable wXconfigap
 			uci set wireless.w${freq}configap.disabled='1'
 
 			# Configure wXap
-- 
2.25.1



Mehr Informationen über die Mailingliste franken-dev