4 # Netcfg2 support for ralink wireless devices with WPA support.
5 # Author: Paulo Matias <matias at archlinux-br dot org>
8 # Uses wireless_tools, to check for association to a network.
9 # wep_check interface [timeout]
12 INTERFACE
=$1; TIMEOUT
=$2
14 [[ -z "$TIMEOUT" ]] && TIMEOUT
=15
16 while [[ $timeout -ne $TIMEOUT ]]; do
17 bssid
=`iwgetid $INTERFACE -ra`
18 [[ ! "$bssid" = "00:00:00:00:00:00" ]] && return 0
23 err_append
"Wireless association failed."
27 # Check if a particular network is within range
28 # find_essid interface essid
31 INTERFACE
=$1; ESSID
=$2; RETRIES
=4
33 while [[ $try -ne $RETRIES ]]; do
34 if iwlist
$INTERFACE scan|
sed "s/ESSID://g"|
grep -q "\"$ESSID\""; then
35 return 0 # network found
43 # Return a filename containing a list of network ESSID's found.
44 # list_networks interface
47 # temp file used, as keeping ESSID's with spaces in their name in arrays
48 # is hard, obscure and kinda nasty. This is simpler and clearer.
50 [[ -z "$1" ]] && return 1
51 essids
=$
(mktemp
/tmp
/essid.XXXXX
)
55 while [[ $try -ne $RETRIES ]]; do
56 iwlist
$1 scan
2> /dev
/null|
grep ESSID|
sed 's/.*ESSID:"\([^"]\+\)".*/\1/' > $essids
59 sort -u $essids -o $essids
61 # File of 0 length, ie. no ssid's.
62 if [[ ! -s $essids ]]; then
74 if [[ ! -d /sys
/class
/net
/$INTERFACE/wireless
]]; then
75 err_append
"Interface $INTERFACE is not a wireless interface"
79 # Required by ralink to enable device
80 ifconfig
$INTERFACE up
82 # Helps ralink finding networks faster
83 iwlist
$INTERFACE scan
&> /dev
/null
85 # Ensure we are not in monitor mode and start finding the essid
86 eval "iwconfig $INTERFACE mode managed essid \"$ESSID\""
88 if checkyesno
$SCAN; then
89 if ! find_essid
$INTERFACE "$ESSID"; then
90 err_append
"Network unavailable"
97 # 'none' security uses iwconfig, like wep, so use same code, minus keysetting.
98 # Use sane default if no alternative is specified
99 if [[ "$SECURITY" = "wep" && "$WEP_OPTS" = "" ]]; then
100 WEP_OPTS
="mode managed essid \"$ESSID\" key open $KEY"
101 elif [[ "$SECURITY" = "none" && "$WEP_OPTS" = "" ]]; then
102 WEP_OPTS
="mode managed essid \"$ESSID\""
105 if ! eval iwconfig
$INTERFACE $WEP_OPTS; then
106 err_append
"Could not set wireless configuration"
110 wep_check
$INTERFACE $TIMEOUT||
return 1
113 # Temporary bugfix for broken drivers... http://bbs.archlinux.org/viewtopic.php?id=36384
114 if ! eval iwconfig
$INTERFACE mode managed essid
"\"$ESSID\""; then
115 err_append
"Could not set wireless configuration"
119 if ! iwpriv
$INTERFACE set AuthMode
=WPAPSK
; then
120 err_append
"Could not set interface in WPA mode"
124 if [ -z "$ENCRYPTYPE" ]; then
128 if ! iwpriv
$INTERFACE set EncrypType
=$ENCRYPTYPE; then
129 err_append
"Could not set $ENCRYPTYPE encryption"
133 if ! iwpriv
$INTERFACE set "WPAPSK=$KEY"; then
134 err_append
"Could not set encryption key"
138 # Use same check as WEP - we are using wireless_tools
139 wep_check
$INTERFACE $TIMEOUT ||
return 1
142 err_append
"wpa-config option not implemented"
147 .
$SUBR_DIR/ethernet.subr
148 if ! ethernet_up
$1; then
149 wirelessral_down
$1 YES
155 PROFILE
=$1 NOETHERNETDOWN
=$2
156 if ! checkyesno
$2; then
157 .
$SUBR_DIR/ethernet.subr
160 iwconfig
$INTERFACE essid off key off
&> /dev
/null
161 #ifconfig $INTERFACE down
164 wirelessral_clean_scope
() {
165 unset INTERFACE CONNECTION
166 unset TIMEOUT WPA_CONF WPA_OPTS KEY ESSID SECURITY WEP_OPTS ENCRYPTYPE
167 .
$SUBR_DIR/ethernet.subr
172 # vim: set ts=4 et sw=4: