Root/package/base-files/files/sbin/wifi

1#!/bin/sh
2# Copyright (C) 2006 OpenWrt.org
3
4. /etc/functions.sh
5
6find_net_config() {(
7    local vif="$1"
8    local cfg
9    local ifname
10
11    config_get cfg "$vif" network
12
13    [ -z "$cfg" ] && {
14        include /lib/network
15        scan_interfaces
16
17        config_get ifname "$vif" ifname
18
19        cfg="$(find_config "$ifname")"
20    }
21    [ -z "$cfg" ] && return 0
22    echo "$cfg"
23)}
24
25
26bridge_interface() {(
27    local cfg="$1"
28    [ -z "$cfg" ] && return 0
29
30    include /lib/network
31    scan_interfaces
32
33    config_get iftype "$cfg" type
34    [ "$iftype" = bridge ] && config_get "$cfg" ifname
35)}
36
37prepare_key_wep() {
38    local key="$1"
39    local hex=1
40
41    echo -n "$key" | grep -qE "[^a-fA-F0-9]" && hex=0
42    [ "${#key}" -eq 10 -a $hex -eq 1 ] || \
43    [ "${#key}" -eq 26 -a $hex -eq 1 ] || {
44        [ "${key:0:2}" = "s:" ] && key="${key#s:}"
45            key="$(echo -n "$key" | hexdump -ve '1/1 "%02x" ""')"
46    }
47    echo "$key"
48}
49
50wifi_fixup_hwmode() {
51    local device="$1"
52    local default="$2"
53    local hwmode hwmode_11n
54
55    config_get channel "$device" channel
56    config_get hwmode "$device" hwmode
57    case "$hwmode" in
58        11bg) hwmode=bg;;
59        11a) hwmode=a;;
60        11b) hwmode=b;;
61        11g) hwmode=g;;
62        11n*)
63            hwmode_11n="${hwmode##11n}"
64            case "$hwmode_11n" in
65                a|g) ;;
66                default) hwmode_11n="$default"
67            esac
68            config_set "$device" hwmode_11n "$hwmode_11n"
69        ;;
70        *)
71            hwmode=
72            if [ "${channel:-0}" -gt 0 ]; then
73                if [ "${channel:-0}" -gt 14 ]; then
74                    hwmode=a
75                else
76                    hwmode=g
77                fi
78            else
79                hwmode="$default"
80            fi
81        ;;
82    esac
83    config_set "$device" hwmode "$hwmode"
84}
85
86wifi_updown() {
87    [ enable = "$1" ] && {
88        wifi_updown disable "$2"
89        scan_wifi
90    }
91    for device in ${2:-$DEVICES}; do (
92        config_get disabled "$device" disabled
93        [ 1 == "$disabled" ] && {
94            echo "'$device' is disabled"
95            set disable
96        }
97        config_get iftype "$device" type
98        if eval "type ${1}_$iftype" 2>/dev/null >/dev/null; then
99            eval "scan_$iftype '$device'"
100            eval "${1}_$iftype '$device'" || echo "$device($iftype): ${1} failed"
101        else
102            echo "$device($iftype): Interface type not supported"
103        fi
104    ); done
105}
106
107wifi_detect() {
108    for driver in ${2:-$DRIVERS}; do (
109        if eval "type detect_$driver" 2>/dev/null >/dev/null; then
110            eval "detect_$driver" || echo "$driver: Detect failed" >&2
111        else
112            echo "$driver: Hardware detection not supported" >&2
113        fi
114    ); done
115}
116
117start_net() {(
118    local iface="$1"
119    local config="$2"
120    local vifmac="$3"
121
122    [ -f "/var/run/$iface.pid" ] && kill "$(cat /var/run/${iface}.pid)" 2>/dev/null
123    include /lib/network
124    scan_interfaces
125    setup_interface "$iface" "$config" "" "$vifmac"
126)}
127
128set_wifi_up() {
129    local cfg="$1"
130    local ifname="$2"
131    uci_set_state wireless "$cfg" up 1
132    uci_set_state wireless "$cfg" ifname "$ifname"
133}
134
135set_wifi_down() {
136    local cfg="$1"
137    local vifs vif vifstr
138
139    [ -f "/var/run/wifi-${cfg}.pid" ] &&
140        kill "$(cat "/var/run/wifi-${cfg}.pid")" 2>/dev/null
141    uci_revert_state wireless "$cfg"
142    config_get vifs "$cfg" vifs
143    for vif in $vifs; do
144        uci_revert_state wireless "$vif"
145    done
146}
147
148scan_wifi() {
149    local cfgfile="$1"
150    DEVICES=
151    config_cb() {
152        config_get TYPE "$CONFIG_SECTION" TYPE
153        case "$TYPE" in
154            wifi-device)
155                append DEVICES "$CONFIG_SECTION"
156                config_set "$CONFIG_SECTION" vifs ""
157            ;;
158            wifi-iface)
159                config_get device "$CONFIG_SECTION" device
160                config_get vifs "$device" vifs
161                append vifs "$CONFIG_SECTION"
162                config_set "$device" vifs "$vifs"
163            ;;
164        esac
165    }
166    config_load "${cfgfile:-wireless}"
167}
168
169DEVICES=
170DRIVERS=
171include /lib/wifi
172scan_wifi
173
174case "$1" in
175    down) wifi_updown "disable" "$2";;
176    detect) wifi_detect "$2";;
177    *) wifi_updown "enable" "$2";;
178esac
179

Archive Download this file



interactive