Browse Source

implement simple device autodetection for wifi drivers

SVN-Revision: 5113
Felix Fietkau 19 years ago
parent
commit
2d072c5997

+ 0 - 14
package/base-files/brcm-2.4/etc/config/wireless

@@ -1,14 +0,0 @@
-# Copyright (C) 2006 OpenWrt.org
-
-config wifi-device	wl0
-	option type 	broadcom
-	option channel	5
-
-config wifi-iface
-	option device	wl0
-	option mode		ap
-	option ssid 	OpenWrt
-	option hidden	0
-	option encryption none
-
-

+ 3 - 1
package/base-files/default/etc/init.d/S40network

@@ -6,6 +6,8 @@ start() {
 
 	include /lib/network
 	setup_switch
-	/sbin/wifi
+	[ -e /etc/config/wireless ] || \
+		/sbin/wifi detect > /etc/config/wireless
+	/sbin/wifi up
 }
 

+ 50 - 10
package/base-files/default/sbin/wifi

@@ -3,6 +3,49 @@
 
 . /etc/functions.sh
 
+wifi_up() {
+	for device in ${2:-$DEVICES}; do (
+		config_get iftype "$device" type
+		if eval "type enable_$iftype" 2>/dev/null >/dev/null; then
+			eval "scan_$iftype '$device'"
+			eval "enable_$iftype '$device'" || echo "$device($iftype): Setup failed"
+		else
+			echo "$device($iftype): Interface type not supported"
+		fi
+	); done
+}
+
+wifi_down() {
+	for device in ${2:-$DEVICES}; do (
+		config_get iftype "$device" type
+		if eval "type disable_$iftype" 2>/dev/null >/dev/null; then
+			eval "scan_$iftype '$device'"
+			eval "disable_$iftype '$device'" || echo "$device($iftype): Setup failed"
+		else
+			echo "$device($iftype): Interface type not supported"
+		fi
+	); done
+}
+
+wifi_detect() {
+	for driver in ${2:-$DRIVERS}; do (
+		if eval "type detect_$driver" 2>/dev/null >/dev/null; then
+			eval "detect_$driver" || echo "$driver: Detect failed" >&2
+		else
+			echo "$driver: Hardware detection not supported" >&2
+		fi
+	); done
+}
+
+start_net() {(
+	local iface="$1"
+	local config="$2"
+
+	include /lib/network
+	scan_interfaces
+	setup_interface "$1" "$2"
+)}
+
 config_get_bool() {
 	local _tmp
 	config_get "$1" "$2" "$3"
@@ -29,16 +72,13 @@ config_cb() {
 	esac
 }
 
+DEVICES=
+DRIVERS=
 config_load wireless
 include /lib/wifi
 
-for device in $DEVICES; do (
-	config_get iftype "$device" type
-	eval "type setup_$iftype" 2>/dev/null >/dev/null && {
-		eval "scan_$iftype '$device'"
-		eval "setup_$iftype '$device'" && {
-			# TODO: set up network settings
-			/bin/true
-		} || echo "$device($iftype): Setup failed" || true
-	} || echo "$device($iftype): Interface type not supported"
-); done
+case "$1" in
+	down) wifi_down "$2";;
+	detect) wifi_detect "$2";;
+	*) wifi_up "$2";;
+esac

+ 25 - 1
package/broadcom-wl/files/lib/wifi/broadcom.sh

@@ -1,3 +1,5 @@
+append DRIVERS "broadcom"
+
 bridge_interface() {
 	(
 		. /etc/functions.sh
@@ -71,8 +73,12 @@ scan_broadcom() {
 	esac
 }
 
+disable_broadcom() {
+	wlc down
+	ifconfig wl0 down
+}
 
-setup_broadcom() {
+enable_broadcom() {
 	local _c
 	config_get channel "$device" channel
 	config_get country "$device" country
@@ -175,3 +181,21 @@ EOF
 }
 
 
+detect_broadcom() {
+	[ -f /proc/net/wl0 ] || return
+	config_get type wl0 type
+	[ "$type" = broadcom ] && return
+	cat <<EOF
+config wifi-device  wl0
+	option type     broadcom
+	option channel  5
+
+config wifi-iface
+	option device   wl0
+	option mode     ap
+	option ssid     OpenWrt
+	option hidden   0
+	option encryption none
+
+EOF
+}