summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2006-10-15 15:27:34 +0000
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2006-10-15 15:27:34 +0000
commitb573d8ec23fe7dcba00cdea3be95608b72f37902 (patch)
tree7d2d7b9f697f0b32614e2772b0315f2b8b81a823
parenta454958a86d36508f75febc37ede96243a614fe0 (diff)
implement simple device autodetection for wifi drivers
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@5113 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--package/base-files/brcm-2.4/etc/config/wireless14
-rwxr-xr-xpackage/base-files/default/etc/init.d/S40network4
-rwxr-xr-xpackage/base-files/default/sbin/wifi60
-rw-r--r--package/broadcom-wl/files/lib/wifi/broadcom.sh26
4 files changed, 78 insertions, 26 deletions
diff --git a/package/base-files/brcm-2.4/etc/config/wireless b/package/base-files/brcm-2.4/etc/config/wireless
deleted file mode 100644
index 9dc4945e07..0000000000
--- a/package/base-files/brcm-2.4/etc/config/wireless
+++ /dev/null
@@ -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
-
-
diff --git a/package/base-files/default/etc/init.d/S40network b/package/base-files/default/etc/init.d/S40network
index be045045e7..c7720369fd 100755
--- a/package/base-files/default/etc/init.d/S40network
+++ b/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
}
diff --git a/package/base-files/default/sbin/wifi b/package/base-files/default/sbin/wifi
index 4a3ec8cfef..759cfb0a84 100755
--- a/package/base-files/default/sbin/wifi
+++ b/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
diff --git a/package/broadcom-wl/files/lib/wifi/broadcom.sh b/package/broadcom-wl/files/lib/wifi/broadcom.sh
index 435c440e2e..1ce85c4c5f 100644
--- a/package/broadcom-wl/files/lib/wifi/broadcom.sh
+++ b/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
+}