]>
Commit | Line | Data |
---|---|---|
6d4eec4c MT |
1 | #!/bin/bash |
2 | ############################################################################### | |
3 | # # | |
4 | # IPFire.org - A linux based firewall # | |
5 | # Copyright (C) 2012 IPFire Network Development Team # | |
6 | # # | |
7 | # This program is free software: you can redistribute it and/or modify # | |
8 | # it under the terms of the GNU General Public License as published by # | |
9 | # the Free Software Foundation, either version 3 of the License, or # | |
10 | # (at your option) any later version. # | |
11 | # # | |
12 | # This program is distributed in the hope that it will be useful, # | |
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of # | |
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # | |
15 | # GNU General Public License for more details. # | |
16 | # # | |
17 | # You should have received a copy of the GNU General Public License # | |
18 | # along with this program. If not, see <http://www.gnu.org/licenses/>. # | |
19 | # # | |
20 | ############################################################################### | |
21 | ||
22a61046 MT |
22 | WPA_SUPPLICANT_SOCKET_DIR="${RUN_DIR}/wpa_supplicant/ctrl" |
23 | ||
f1b49125 MT |
24 | wpa_supplicant_config_header() { |
25 | config_header "WPA supplicant configuration file" | |
26 | ||
27 | # Set control socket directory. | |
28 | print "ctrl_interface=${WPA_SUPPLICANT_SOCKET_DIR}" | |
29 | ||
30 | # Honour country | |
b7ab3b4f | 31 | local country="$(wireless_get_reg_domain)" |
f1b49125 MT |
32 | if isset country; then |
33 | print "country=${country}" | |
34 | fi | |
8241d83a MT |
35 | |
36 | ||
37 | print "# Privacy" | |
38 | ||
39 | # Use a random MAC address for any pre-association | |
40 | # operations like scanning or ANQP | |
41 | print "preassoc_mac_addr=1" | |
f1b49125 MT |
42 | |
43 | print # end of header | |
44 | } | |
45 | ||
02807ad2 MT |
46 | wpa_supplicant_config_destroy() { |
47 | local device="${1}" | |
48 | assert isset device | |
49 | ||
231bce76 | 50 | file_delete "${WPA_SUPPLICANT_CONF_DIR}/${device}.conf" |
6d4eec4c MT |
51 | } |
52 | ||
1c6a4e30 | 53 | wpa_supplicant_start() { |
6d4eec4c | 54 | local device=${1} |
22a61046 | 55 | assert isset device |
6d4eec4c | 56 | |
22a61046 MT |
57 | service_start "wpa_supplicant@${device}.service" |
58 | } | |
6d4eec4c | 59 | |
1c6a4e30 | 60 | wpa_supplicant_stop() { |
22a61046 MT |
61 | local device=${1} |
62 | assert isset device | |
6d4eec4c | 63 | |
22a61046 MT |
64 | service_stop "wpa_supplicant@${device}.service" |
65 | } | |
66 | ||
1c6a4e30 | 67 | wpa_supplicant_client() { |
22a61046 MT |
68 | local device=${1} |
69 | assert isset device | |
70 | shift | |
6d4eec4c | 71 | |
22a61046 MT |
72 | local cmd="$@" |
73 | assert isset cmd | |
74 | ||
75 | # Run the command and return the output. | |
76 | cmd wpa_cli -p${WPA_SUPPLICANT_SOCKET_DIR} -i${device} ${cmd} | |
6d4eec4c MT |
77 | } |
78 | ||
1c6a4e30 | 79 | wpa_cli_status() { |
6d4eec4c | 80 | local device=${1} |
22a61046 MT |
81 | assert isset device |
82 | ||
83 | wpa_supplicant_client ${device} status verbose | |
84 | } | |
6d4eec4c | 85 | |
1c6a4e30 | 86 | wpa_cli_status_get() { |
22a61046 | 87 | local device=${1} |
6d4eec4c MT |
88 | assert isset device |
89 | ||
22a61046 MT |
90 | local arg=${2} |
91 | assert isset arg | |
6d4eec4c | 92 | |
22a61046 MT |
93 | local line key |
94 | while read -r line; do | |
95 | key=$(cli_get_key ${line}) | |
6d4eec4c | 96 | |
22a61046 MT |
97 | if [ "${key}" = "${arg}" ]; then |
98 | cli_get_val "${line}" | |
99 | return ${EXIT_OK} | |
100 | fi | |
101 | done <<< "$(wpa_cli_status ${device})" | |
102 | ||
103 | return ${EXIT_ERROR} | |
6d4eec4c MT |
104 | } |
105 | ||
1c6a4e30 | 106 | wpa_cli_bss() { |
6d4eec4c | 107 | local device=${1} |
22a61046 MT |
108 | assert isset device |
109 | ||
110 | local bss=${2} | |
111 | assert isset bss | |
6d4eec4c | 112 | |
22a61046 MT |
113 | wpa_supplicant_client ${device} bss ${bss} |
114 | } | |
115 | ||
1c6a4e30 | 116 | wpa_cli_bss_get() { |
22a61046 | 117 | local device=${1} |
6d4eec4c MT |
118 | assert isset device |
119 | ||
22a61046 MT |
120 | local bss=${2} |
121 | assert isset bss | |
6d4eec4c | 122 | |
22a61046 MT |
123 | local arg=${3} |
124 | assert isset arg | |
6d4eec4c | 125 | |
22a61046 MT |
126 | local line key |
127 | while read -r line; do | |
128 | key=$(cli_get_key ${line}) | |
129 | ||
130 | if [ "${key}" = "${arg}" ]; then | |
131 | cli_get_val "${line}" | |
132 | return ${EXIT_OK} | |
133 | fi | |
134 | done <<< "$(wpa_cli_bss ${device} ${bss})" | |
135 | ||
136 | return ${EXIT_ERROR} | |
6d4eec4c MT |
137 | } |
138 | ||
1c6a4e30 | 139 | wpa_cli_bss_get_frequency() { |
6d4eec4c | 140 | local device=${1} |
6d4eec4c MT |
141 | assert isset device |
142 | ||
22a61046 MT |
143 | local bssid=${2} |
144 | assert isset bssid | |
6d4eec4c | 145 | |
22a61046 MT |
146 | wpa_cli_bss_get ${device} ${bssid} freq |
147 | } | |
6d4eec4c | 148 | |
1c6a4e30 | 149 | wpa_cli_bss_get_noise() { |
22a61046 MT |
150 | local device=${1} |
151 | assert isset device | |
152 | ||
153 | local bssid=${2} | |
154 | assert isset bssid | |
155 | ||
156 | wpa_cli_bss_get ${device} ${bssid} noise | |
6d4eec4c MT |
157 | } |
158 | ||
1c6a4e30 | 159 | wpa_cli_bss_get_quality() { |
22a61046 MT |
160 | local device=${1} |
161 | assert isset device | |
6d4eec4c | 162 | |
22a61046 MT |
163 | local bssid=${2} |
164 | assert isset bssid | |
165 | ||
324c09bc MT |
166 | local quality=$(wpa_cli_bss_get ${device} ${bssid} qual) |
167 | ||
168 | # Convert to percent | |
169 | print $(( ${quality} * 100 / 70 )) | |
6d4eec4c MT |
170 | } |
171 | ||
1c6a4e30 | 172 | wpa_cli_bss_get_flags() { |
22a61046 MT |
173 | local device=${1} |
174 | assert isset device | |
175 | ||
176 | local bssid=${2} | |
177 | assert isset bssid | |
6d4eec4c | 178 | |
22a61046 | 179 | wpa_cli_bss_get ${device} ${bssid} flags |
6d4eec4c | 180 | } |