blob: a3b324bf8a513ea043250a34793b496f78f6b99d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
# Wireless connection support for netctl
. "$SUBR_DIR/8021x"
. "$SUBR_DIR/ip"
. "$SUBR_DIR/rfkill"
wireless_up() {
local config_file
if ! is_interface "$Interface"; then
report_error "Interface '$Interface' does not exist"
return 1
fi
# Default settings
: ${Security:=none}
: ${WPADriver:=nl80211,wext}
: ${TimeoutWPA:=15}
if [[ $RFKill ]]; then
enable_rf "$Interface" "$RFKill" || return 1
fi
# Kill any lingering WPA supplicants
WPAConfigFile= wpa_stop "$Interface" &> /dev/null
if [[ $Security == "wpa-config" ]]; then
: ${WPAConfigFile:=/etc/wpa_supplicant.conf}
config_file=$WPAConfigFile
else
config_file=$(wpa_make_config_file "$Interface")
if [[ -z $config_file ]]; then
report_error "Could not create a wpa config file for interface '$Interface'"
bring_interface_down "$Interface"
return 1
fi
printf "%s\n" "network={" "$(wpa_make_config_block)" "}" >> "$config_file"
fi
# Start the WPA supplicant
if ! do_debug wpa_start "$Interface" "$WPADriver" "$config_file"; then
report_error "The WPA supplicant did not start for interface '$Interface'"
bring_interface_down "$Interface"
return 1
fi
if is_yes "${Scan:-no}"; then
if ! wpa_wait_while_state "$TimeoutWPA" "$Interface" "DISCONNECTED" "SCANNING"; then
report_error "Wireless network '$ESSID' (or access point) not present"
wpa_stop "$Interface"
bring_interface_down "$interface"
return 1
fi
fi
# Bring interface up after starting wpa_supplicant
# This is important since cards such as iwl3945 do not support
# mode switching when they are already up.
bring_interface_up "$Interface" || return 1
if ! wpa_wait_until_state "$TimeoutWPA" "$Interface" "COMPLETED"; then
report_error "WPA association/authentication failed for interface '$Interface'"
wpa_stop "$Interface"
bring_interface_down "$Interface"
return 1
fi
if ! ip_set; then
wpa_stop "$Interface"
bring_interface_down "$Interface"
return 1
fi
}
wireless_down() {
ip_unset
if [[ $Security == "wpa-config" ]]; then
: ${WPAConfigFile:=/etc/wpa_supplicant.conf}
fi
wpa_stop "$Interface"
bring_interface_down "$Interface" || return 1
if [[ $RFKill ]]; then
disable_rf "$Interface" "$RFKill"
fi
}
# vim: ft=sh ts=4 et sw=4 tw=0:
|