From b573d8ec23fe7dcba00cdea3be95608b72f37902 Mon Sep 17 00:00:00 2001 From: nbd Date: Sun, 15 Oct 2006 15:27:34 +0000 Subject: implement simple device autodetection for wifi drivers git-svn-id: svn://svn.openwrt.org/openwrt/trunk@5113 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/base-files/default/etc/init.d/S40network | 4 +- package/base-files/default/sbin/wifi | 60 ++++++++++++++++++++---- 2 files changed, 53 insertions(+), 11 deletions(-) (limited to 'package/base-files/default') diff --git a/package/base-files/default/etc/init.d/S40network b/package/base-files/default/etc/init.d/S40network index be045045e..c7720369f 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 4a3ec8cfe..759cfb0a8 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 -- cgit v1.2.3