implement simple device autodetection for wifi drivers
SVN-Revision: 5113
This commit is contained in:
		| @@ -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 | ||||
|  | ||||
|  | ||||
| @@ -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 | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau