[source] base-files, mac80211, broadcom-wl: wifi detection and configuration

LEDE Commits lede-commits at lists.infradead.org
Thu Nov 3 03:08:06 PDT 2016


nbd pushed a commit to source.git, branch master:
https://git.lede-project.org/5f8f8a366136a07df661e31decce2458357c167a

commit 5f8f8a366136a07df661e31decce2458357c167a
Author: Christian Lamparter <chunkeey at googlemail.com>
AuthorDate: Mon Oct 17 15:59:14 2016 +0200

    base-files, mac80211, broadcom-wl: wifi detection and configuration
    
    Currently, the wifi detection script is executed as part of
    the (early) boot process. Pluggable wifi USB devices, which
    are inserted at a later time are not automatically
    detected and therefore they don't show up in LuCI.
    
    A user has to deal with wifi detection manually, or restart
    the router.
    
    However, the current "sleep 1" window - which the boot
    process waits for wifi devices to "settle down" - is too
    short to detect wifi devices for some routers anyway.
    
    For example, this can happen with USB WLAN devices on the
    WNDR4700. This is because the usb controller needs to load
    its firmware from UBI and initialize, before it can operate.
    
    The issue can be seen on a BT HomeHub 5A as well as soon as
    the caldata are on an ubi volume. This is because the ath9k
    card has to be initialized by owl-loader first. Which has to
    wait for the firmware extraction script to retrieve the pci
    initialization values inside the caldata.
    
    This patch moves the wifi configuration to hotplug scripts.
    For mac80211, the wifi configuration will now automatically
    run any time a "ieee80211" device is added. Likewise
    broadcom-wl's script checks for new "net" devices which
    have the "wl$NUMBER" moniker.
    
    Issues with spawning multiple interface configuration - in
    case the detection script is run concurrently - have been
    resolved by using a named section for the initial
    configuration. Concurrent configuration scripts will now
    simply overwrite the same existing configuration.
    
    A workaround which preserves the "sleep 1" window for just
    the first boot has been added. This allows the existing
    brcm47xx boot and mvebu uci-default scripts to correctly
    setup the initial mac addresses and regulatory domain.
    
    And finally, the patch renames the "wifi detect" into
    "wifi config". As the script no longer produces any output
    that has to be redirected or appended to the configuration
    file.
    
    Thanks to Martin Blumenstingl for helping with the implementation
    and testing of the patch.
    
    Acked-by: Jo-Philipp Wich <jo at mein.io>
    Signed-off-by: Mathias Kresin <dev at kresin.me>
    Signed-off-by: Christian Lamparter <chunkeey at gmail.com>
    Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
 package/base-files/files/etc/init.d/boot                          | 8 ++++----
 package/base-files/files/sbin/wifi                                | 5 +++--
 .../broadcom-wl/files/etc/hotplug.d/net/00-broadcom-wifi-detect   | 5 +++++
 package/kernel/mac80211/Makefile                                  | 2 ++
 package/kernel/mac80211/files/mac80211.hotplug                    | 5 +++++
 5 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/package/base-files/files/etc/init.d/boot b/package/base-files/files/etc/init.d/boot
index 03b0fa0..31f245f 100755
--- a/package/base-files/files/etc/init.d/boot
+++ b/package/base-files/files/etc/init.d/boot
@@ -38,10 +38,10 @@ boot() {
 
 	/sbin/kmodloader
 
-	# allow wifi modules time to settle
-	sleep 1
-
-	/sbin/wifi detect
+	[ ! -f /etc/config/wireless ] && {
+		# compat for brcm47xx and mvebu
+		sleep 1
+	}
 
 	/bin/config_generate
 	uci_apply_defaults
diff --git a/package/base-files/files/sbin/wifi b/package/base-files/files/sbin/wifi
index 2ef333a..f2845c8 100755
--- a/package/base-files/files/sbin/wifi
+++ b/package/base-files/files/sbin/wifi
@@ -145,7 +145,7 @@ wifi_reload() {
 	wifi_reload_legacy
 }
 
-wifi_detect() {
+wifi_config() {
 	[ ! -f /etc/config/wireless ] && touch /etc/config/wireless
 
 	for driver in $DRIVERS; do (
@@ -229,7 +229,8 @@ scan_wifi
 
 case "$1" in
 	down) wifi_updown "disable" "$2";;
-	detect) wifi_detect ;;
+	detect) ;;
+	config) wifi_config ;;
 	status) ubus_wifi_cmd "status" "$2";;
 	reload) wifi_reload "$2";;
 	reload_legacy) wifi_reload_legacy "$2";;
diff --git a/package/kernel/broadcom-wl/files/etc/hotplug.d/net/00-broadcom-wifi-detect b/package/kernel/broadcom-wl/files/etc/hotplug.d/net/00-broadcom-wifi-detect
new file mode 100644
index 0000000..a63d6bc
--- /dev/null
+++ b/package/kernel/broadcom-wl/files/etc/hotplug.d/net/00-broadcom-wifi-detect
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+[ "${ACTION}" = "add" ] && [ "${INTERFACE%%[0-9]}" = "wl" ] && {
+	/sbin/wifi config
+}
diff --git a/package/kernel/mac80211/Makefile b/package/kernel/mac80211/Makefile
index f9f5093..25adbfb 100644
--- a/package/kernel/mac80211/Makefile
+++ b/package/kernel/mac80211/Makefile
@@ -1732,6 +1732,8 @@ define KernelPackage/cfg80211/install
 	$(INSTALL_DIR) $(1)/lib/wifi $(1)/lib/netifd/wireless
 	$(INSTALL_DATA) ./files/lib/wifi/mac80211.sh $(1)/lib/wifi
 	$(INSTALL_BIN) ./files/lib/netifd/wireless/mac80211.sh $(1)/lib/netifd/wireless
+	$(INSTALL_DIR) $(1)/etc/hotplug.d/ieee80211
+	$(INSTALL_DATA) ./files/mac80211.hotplug $(1)/etc/hotplug.d/ieee80211/00-wifi-detect
 endef
 
 define KernelPackage/ipw2100/install
diff --git a/package/kernel/mac80211/files/mac80211.hotplug b/package/kernel/mac80211/files/mac80211.hotplug
new file mode 100644
index 0000000..b865552
--- /dev/null
+++ b/package/kernel/mac80211/files/mac80211.hotplug
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+[ "${ACTION}" = "add" ] && {
+	/sbin/wifi config
+}



More information about the lede-commits mailing list