X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/8f53d03355013cd750d3c3bc7699b52efb2c598f..5f0b41bae50fcefc07dd10acaaeca3cadb8007a2:/package/base-files/files/sbin/wifi

diff --git a/package/base-files/files/sbin/wifi b/package/base-files/files/sbin/wifi
index 90aeef725..5cbf50b5f 100755
--- a/package/base-files/files/sbin/wifi
+++ b/package/base-files/files/sbin/wifi
@@ -3,6 +3,14 @@
 
 . /etc/functions.sh
 
+usage() {
+	cat <<EOF
+Usage: $0 [down|detect]
+enables (default), disables or detects a wifi configuration.
+EOF
+	exit 1
+}
+
 find_net_config() {(
 	local vif="$1"
 	local cfg
@@ -32,8 +40,22 @@ bridge_interface() {(
 
 	config_get iftype "$cfg" type
 	[ "$iftype" = bridge ] && config_get "$cfg" ifname
+	prepare_interface_bridge "$cfg"
 )}
 
+prepare_key_wep() {
+	local key="$1"
+	local hex=1
+
+	echo -n "$key" | grep -qE "[^a-fA-F0-9]" && hex=0
+	[ "${#key}" -eq 10 -a $hex -eq 1 ] || \
+	[ "${#key}" -eq 26 -a $hex -eq 1 ] || {
+		[ "${key:0:2}" = "s:" ] && key="${key#s:}"
+        	key="$(echo -n "$key" | hexdump -ve '1/1 "%02x" ""')"
+	}
+	echo "$key"
+}
+
 wifi_fixup_hwmode() {
 	local device="$1"
 	local default="$2"
@@ -48,7 +70,7 @@ wifi_fixup_hwmode() {
 		11g) hwmode=g;;
 		11n*)
 			hwmode_11n="${hwmode##11n}"
-			case "$hwmode" in
+			case "$hwmode_11n" in
 				a|g) ;;
 				default) hwmode_11n="$default"
 			esac
@@ -71,7 +93,10 @@ wifi_fixup_hwmode() {
 }
 
 wifi_updown() {
-	[ enable = "$1" ] && wifi_updown disable "$2"
+	[ enable = "$1" ] && {
+		wifi_updown disable "$2"
+		scan_wifi
+	}
 	for device in ${2:-$DEVICES}; do (
 		config_get disabled "$device" disabled
 		[ 1 == "$disabled" ] && {
@@ -104,9 +129,11 @@ start_net() {(
 	local vifmac="$3"
 
 	[ -f "/var/run/$iface.pid" ] && kill "$(cat /var/run/${iface}.pid)" 2>/dev/null
-	include /lib/network
-	scan_interfaces
-	setup_interface "$iface" "$config" "" "$vifmac"
+	[ -z "$config" ] || {
+		include /lib/network
+		scan_interfaces
+		setup_interface "$iface" "$config" "" "$vifmac"
+	}
 )}
 
 set_wifi_up() {
@@ -121,7 +148,7 @@ set_wifi_down() {
 	local vifs vif vifstr
 
 	[ -f "/var/run/wifi-${cfg}.pid" ] &&
-		kill "$(cat "/var/run/wifi-${cfg}.pid")"
+		kill "$(cat "/var/run/wifi-${cfg}.pid")" 2>/dev/null
 	uci_revert_state wireless "$cfg"
 	config_get vifs "$cfg" vifs
 	for vif in $vifs; do
@@ -131,12 +158,23 @@ set_wifi_down() {
 
 scan_wifi() {
 	local cfgfile="$1"
+	DEVICES=
 	config_cb() {
-		config_get TYPE "$CONFIG_SECTION" TYPE
-		case "$TYPE" in
+		local type="$1"
+		local section="$2"
+
+		# section start
+		case "$type" in
 			wifi-device)
-				append DEVICES "$CONFIG_SECTION"
+				append DEVICES "$section"
+				config_set "$section" vifs ""
+				config_set "$section" ht_capab ""
 			;;
+		esac
+
+		# section end
+		config_get TYPE "$CONFIG_SECTION" TYPE
+		case "$TYPE" in
 			wifi-iface)
 				config_get device "$CONFIG_SECTION" device
 				config_get vifs "$device" vifs 
@@ -156,5 +194,6 @@ scan_wifi
 case "$1" in
 	down) wifi_updown "disable" "$2";;
 	detect) wifi_detect "$2";;
+	--help|help) usage;;
 	*) wifi_updown "enable" "$2";;
 esac