]>
git.ipfire.org Git - thirdparty/hostap.git/blob - tests/hwsim/test_wpas_ctrl.py
1 # wpa_supplicant control interface
2 # Copyright (c) 2014, Qualcomm Atheros, Inc.
4 # This software may be distributed under the terms of the BSD license.
5 # See README for more details.
8 logger
= logging
. getLogger ()
15 from hwsim
import HWSimRadio
16 from wpasupplicant
import WpaSupplicant
17 from utils
import alloc_fail
19 def test_wpas_ctrl_network ( dev
):
20 """wpa_supplicant ctrl_iface network set/get"""
21 id = dev
[ 0 ]. add_network ()
23 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id )):
24 raise Exception ( "Unexpected success for invalid SET_NETWORK" )
25 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + " name" ):
26 raise Exception ( "Unexpected success for invalid SET_NETWORK" )
27 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id + 1 ) + " proto OPEN" ):
28 raise Exception ( "Unexpected success for invalid network id" )
29 if "FAIL" not in dev
[ 0 ]. request ( "GET_NETWORK " + str ( id )):
30 raise Exception ( "Unexpected success for invalid GET_NETWORK" )
31 if "FAIL" not in dev
[ 0 ]. request ( "GET_NETWORK " + str ( id + 1 ) + " proto" ):
32 raise Exception ( "Unexpected success for invalid network id" )
34 tests
= (( "key_mgmt" , "WPA-PSK WPA-EAP IEEE8021X NONE WPA-NONE FT-PSK FT-EAP WPA-PSK-SHA256 WPA-EAP-SHA256" ),
35 ( "pairwise" , "CCMP-256 GCMP-256 CCMP GCMP TKIP" ),
36 ( "group" , "CCMP-256 GCMP-256 CCMP GCMP TKIP" ),
37 ( "auth_alg" , "OPEN SHARED LEAP" ),
38 ( "scan_freq" , "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15" ),
39 ( "freq_list" , "2412 2417" ),
41 ( "bssid" , "00:11:22:33:44:55" ),
42 ( "proto" , "WPA RSN OSEN" ),
44 ( "go_p2p_dev_addr" , "22:33:44:55:66:aa" ),
45 ( "p2p_client_list" , "22:33:44:55:66:bb 02:11:22:33:44:55" ))
47 dev
[ 0 ]. set_network_quoted ( id , "ssid" , "test" )
48 for field
, value
in tests
:
49 dev
[ 0 ]. set_network ( id , field
, value
)
50 res
= dev
[ 0 ]. get_network ( id , field
)
52 raise Exception ( "Unexpected response for '" + field
+ "': '" + res
+ "'" )
54 q_tests
= (( "identity" , "hello" ),
55 ( "anonymous_identity" , "foo@nowhere.com" ))
56 for field
, value
in q_tests
:
57 dev
[ 0 ]. set_network_quoted ( id , field
, value
)
58 res
= dev
[ 0 ]. get_network ( id , field
)
59 if res
!= '"' + value
+ '"' :
60 raise Exception ( "Unexpected quoted response for '" + field
+ "': '" + res
+ "'" )
62 get_tests
= (( "foo" , None ), ( "ssid" , '"test"' ))
63 for field
, value
in get_tests
:
64 res
= dev
[ 0 ]. get_network ( id , field
)
66 raise Exception ( "Unexpected response for '" + field
+ "': '" + res
+ "'" )
68 if dev
[ 0 ]. get_network ( id , "password" ):
69 raise Exception ( "Unexpected response for 'password'" )
70 dev
[ 0 ]. set_network_quoted ( id , "password" , "foo" )
71 if dev
[ 0 ]. get_network ( id , "password" ) != '*' :
72 raise Exception ( "Unexpected response for 'password' (expected *)" )
73 dev
[ 0 ]. set_network ( id , "password" , "hash:12345678901234567890123456789012" )
74 if dev
[ 0 ]. get_network ( id , "password" ) != '*' :
75 raise Exception ( "Unexpected response for 'password' (expected *)" )
76 dev
[ 0 ]. set_network ( id , "password" , "NULL" )
77 if dev
[ 0 ]. get_network ( id , "password" ):
78 raise Exception ( "Unexpected response for 'password'" )
79 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + " password hash:12" ):
80 raise Exception ( "Unexpected success for invalid password hash" )
81 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + " password hash:123456789012345678x0123456789012" ):
82 raise Exception ( "Unexpected success for invalid password hash" )
84 dev
[ 0 ]. set_network ( id , "identity" , "414243" )
85 if dev
[ 0 ]. get_network ( id , "identity" ) != '"ABC"' :
86 raise Exception ( "Unexpected identity hex->text response" )
88 dev
[ 0 ]. set_network ( id , "identity" , 'P"abc \n def"' )
89 if dev
[ 0 ]. get_network ( id , "identity" ) != "6162630a646566" :
90 raise Exception ( "Unexpected identity printf->hex response" )
92 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' identity P"foo' ):
93 raise Exception ( "Unexpected success for invalid identity string" )
95 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' identity 12x3' ):
96 raise Exception ( "Unexpected success for invalid identity string" )
99 if "FAIL" in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' wep_key' + str ( i
) + ' aabbccddee' ):
100 raise Exception ( "Unexpected wep_key set failure" )
101 if dev
[ 0 ]. get_network ( id , "wep_key" + str ( i
)) != '*' :
102 raise Exception ( "Unexpected wep_key get failure" )
104 if "FAIL" in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-00:11:22:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' ):
105 raise Exception ( "Unexpected failure for psk_list string" )
107 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list 00:11:x2:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' ):
108 raise Exception ( "Unexpected success for invalid psk_list string" )
110 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-00:11:x2:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' ):
111 raise Exception ( "Unexpected success for invalid psk_list string" )
113 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-00:11:22:33:44:55+0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' ):
114 raise Exception ( "Unexpected success for invalid psk_list string" )
116 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-00:11:22:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde' ):
117 raise Exception ( "Unexpected success for invalid psk_list string" )
119 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-00:11:22:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdex' ):
120 raise Exception ( "Unexpected success for invalid psk_list string" )
122 if dev
[ 0 ]. get_network ( id , "psk_list" ):
123 raise Exception ( "Unexpected psk_list get response" )
125 if dev
[ 0 ]. list_networks ()[ 0 ][ 'ssid' ] != "test" :
126 raise Exception ( "Unexpected ssid in LIST_NETWORKS" )
127 dev
[ 0 ]. set_network ( id , "ssid" , "NULL" )
128 if dev
[ 0 ]. list_networks ()[ 0 ][ 'ssid' ] != "" :
129 raise Exception ( "Unexpected ssid in LIST_NETWORKS after clearing it" )
131 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' ssid "0123456789abcdef0123456789abcdef0"' ):
132 raise Exception ( "Too long SSID accepted" )
133 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' scan_ssid qwerty' ):
134 raise Exception ( "Invalid integer accepted" )
135 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' scan_ssid 2' ):
136 raise Exception ( "Too large integer accepted" )
137 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' psk 12345678' ):
138 raise Exception ( "Invalid PSK accepted" )
139 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' psk "1234567"' ):
140 raise Exception ( "Too short PSK accepted" )
141 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' psk "1234567890123456789012345678901234567890123456789012345678901234"' ):
142 raise Exception ( "Too long PSK accepted" )
143 dev
[ 0 ]. set_network_quoted ( id , "psk" , "123456768" );
144 dev
[ 0 ]. set_network_quoted ( id , "psk" , "123456789012345678901234567890123456789012345678901234567890123" );
145 if dev
[ 0 ]. get_network ( id , "psk" ) != '*' :
146 raise Exception ( "Unexpected psk read result" );
148 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' eap UNKNOWN' ):
149 raise Exception ( "Unknown EAP method accepted" )
151 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' password "foo' ):
152 raise Exception ( "Invalid password accepted" )
154 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' wep_key0 "foo' ):
155 raise Exception ( "Invalid WEP key accepted" )
156 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' wep_key0 "12345678901234567"' ):
157 raise Exception ( "Too long WEP key accepted" )
158 # too short WEP key is ignored
159 dev
[ 0 ]. set_network_quoted ( id , "wep_key0" , "1234" )
160 dev
[ 0 ]. set_network_quoted ( id , "wep_key1" , "12345" )
161 dev
[ 0 ]. set_network_quoted ( id , "wep_key2" , "1234567890123" )
162 dev
[ 0 ]. set_network_quoted ( id , "wep_key3" , "1234567890123456" )
164 dev
[ 0 ]. set_network ( id , "go_p2p_dev_addr" , "any" )
165 if dev
[ 0 ]. get_network ( id , "go_p2p_dev_addr" ) is not None :
166 raise Exception ( "Unexpected go_p2p_dev_addr value" )
167 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' go_p2p_dev_addr 00:11:22:33:44' ):
168 raise Exception ( "Invalid go_p2p_dev_addr accepted" )
169 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' p2p_client_list 00:11:22:33:44' ):
170 raise Exception ( "Invalid p2p_client_list accepted" )
171 if "FAIL" in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' p2p_client_list 00:11:22:33:44:55 00:1' ):
172 raise Exception ( "p2p_client_list truncation workaround failed" )
173 if dev
[ 0 ]. get_network ( id , "p2p_client_list" ) != "00:11:22:33:44:55" :
174 raise Exception ( "p2p_client_list truncation workaround did not work" )
176 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' auth_alg ' ):
177 raise Exception ( "Empty auth_alg accepted" )
178 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' auth_alg FOO' ):
179 raise Exception ( "Invalid auth_alg accepted" )
181 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' proto ' ):
182 raise Exception ( "Empty proto accepted" )
183 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' proto FOO' ):
184 raise Exception ( "Invalid proto accepted" )
186 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' pairwise ' ):
187 raise Exception ( "Empty pairwise accepted" )
188 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' pairwise FOO' ):
189 raise Exception ( "Invalid pairwise accepted" )
190 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' pairwise WEP40' ):
191 raise Exception ( "Invalid pairwise accepted" )
193 if "OK" not in dev
[ 0 ]. request ( 'BSSID ' + str ( id ) + ' 00:11:22:33:44:55' ):
194 raise Exception ( "Unexpected BSSID failure" )
195 if dev
[ 0 ]. request ( "GET_NETWORK 0 bssid" ) != '00:11:22:33:44:55' :
196 raise Exception ( "BSSID command did not set network bssid" )
197 if "OK" not in dev
[ 0 ]. request ( 'BSSID ' + str ( id ) + ' 00:00:00:00:00:00' ):
198 raise Exception ( "Unexpected BSSID failure" )
199 if "FAIL" not in dev
[ 0 ]. request ( "GET_NETWORK 0 bssid" ):
200 raise Exception ( "bssid claimed configured after clearing" )
201 if "FAIL" not in dev
[ 0 ]. request ( 'BSSID 123 00:11:22:33:44:55' ):
202 raise Exception ( "Unexpected BSSID success" )
203 if "FAIL" not in dev
[ 0 ]. request ( 'BSSID ' + str ( id ) + ' 00:11:22:33:44' ):
204 raise Exception ( "Unexpected BSSID success" )
205 if "FAIL" not in dev
[ 0 ]. request ( 'BSSID ' + str ( id )):
206 raise Exception ( "Unexpected BSSID success" )
208 tests
= [ "02:11:22:33:44:55" ,
209 "02:11:22:33:44:55 02:ae:be:ce:53:77" ,
210 "02:11:22:33:44:55/ff:00:ff:00:ff:00" ,
211 "02:11:22:33:44:55/ff:00:ff:00:ff:00 f2:99:88:77:66:55" ,
212 "f2:99:88:77:66:55 02:11:22:33:44:55/ff:00:ff:00:ff:00" ,
213 "f2:99:88:77:66:55 02:11:22:33:44:55/ff:00:ff:00:ff:00 12:34:56:78:90:ab" ,
214 "02:11:22:33:44:55/ff:ff:ff:00:00:00 02:ae:be:ce:53:77/00:00:00:00:00:ff" ]
216 dev
[ 0 ]. set_network ( id , "bssid_blacklist" , val
)
217 res
= dev
[ 0 ]. get_network ( id , "bssid_blacklist" )
219 raise Exception ( "Unexpected bssid_blacklist value: %s != %s " % ( res
, val
))
220 dev
[ 0 ]. set_network ( id , "bssid_whitelist" , val
)
221 res
= dev
[ 0 ]. get_network ( id , "bssid_whitelist" )
223 raise Exception ( "Unexpected bssid_whitelist value: %s != %s " % ( res
, val
))
227 "00:11:22:33:44:55q" ,
228 "00:11:22:33:44:55/" ,
229 "00:11:22:33:44:55/66:77:88:99:aa:b" ]
231 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK %d bssid_blacklist %s " % ( id , val
)):
232 raise Exception ( "Invalid bssid_blacklist value accepted" )
234 def test_wpas_ctrl_network_oom ( dev
):
235 """wpa_supplicant ctrl_iface network OOM in string parsing"""
236 id = dev
[ 0 ]. add_network ()
238 tests
= [ ( '"foo"' , 1 , 'dup_binstr;wpa_config_set' ),
239 ( 'P"foo"' , 1 , 'dup_binstr;wpa_config_set' ),
240 ( 'P"foo"' , 2 , 'wpa_config_set' ),
241 ( '112233' , 1 , 'wpa_config_set' ) ]
242 for val
, count
, func
in tests
:
243 with
alloc_fail ( dev
[ 0 ], count
, func
):
244 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' ssid ' + val
):
245 raise Exception ( "Unexpected success for SET_NETWORK during OOM" )
247 def test_wpas_ctrl_many_networks ( dev
, apdev
):
248 """wpa_supplicant ctrl_iface LIST_NETWORKS with huge number of networks"""
249 for i
in range ( 1000 ):
250 id = dev
[ 0 ]. add_network ()
251 res
= dev
[ 0 ]. request ( "LIST_NETWORKS" )
253 raise Exception ( "Last added network was unexpectedly included" )
254 res
= dev
[ 0 ]. request ( "LIST_NETWORKS LAST_ID= %d " % ( id - 2 ))
255 if str ( id ) not in res
:
256 raise Exception ( "Last added network was not present when using LAST_ID" )
257 # This command can take a very long time under valgrind testing on a low
258 # power CPU, so increase the command timeout significantly to avoid issues
259 # with the test case failing and following reset operation timing out.
260 dev
[ 0 ]. request ( "REMOVE_NETWORK all" , timeout
= 60 )
262 def test_wpas_ctrl_dup_network ( dev
, apdev
):
263 """wpa_supplicant ctrl_iface DUP_NETWORK"""
265 passphrase
= 'qwertyuiop'
266 params
= hostapd
. wpa2_params ( ssid
= ssid
, passphrase
= passphrase
)
267 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
269 src
= dev
[ 0 ]. connect ( "another" , psk
= passphrase
, scan_freq
= "2412" ,
270 only_add_network
= True )
271 id = dev
[ 0 ]. add_network ()
272 dev
[ 0 ]. set_network_quoted ( id , "ssid" , ssid
)
273 for f
in [ "key_mgmt" , "psk" , "scan_freq" ]:
274 res
= dev
[ 0 ]. request ( "DUP_NETWORK {} {} {}" . format ( src
, id , f
))
276 raise Exception ( "DUP_NETWORK failed" )
277 dev
[ 0 ]. connect_network ( id )
279 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK " ):
280 raise Exception ( "Unexpected DUP_NETWORK success" )
281 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK %d " % id ):
282 raise Exception ( "Unexpected DUP_NETWORK success" )
283 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK %d %d " % ( id , id )):
284 raise Exception ( "Unexpected DUP_NETWORK success" )
285 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK 123456 1234567 " ):
286 raise Exception ( "Unexpected DUP_NETWORK success" )
287 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK %d 123456 " % id ):
288 raise Exception ( "Unexpected DUP_NETWORK success" )
289 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK %d %d foo" % ( id , id )):
290 raise Exception ( "Unexpected DUP_NETWORK success" )
291 dev
[ 0 ]. request ( "DISCONNECT" )
292 if "OK" not in dev
[ 0 ]. request ( "DUP_NETWORK %d %d ssid" % ( id , id )):
293 raise Exception ( "Unexpected DUP_NETWORK failure" )
295 def test_wpas_ctrl_dup_network_global ( dev
, apdev
):
296 """wpa_supplicant ctrl_iface DUP_NETWORK (global)"""
298 passphrase
= 'qwertyuiop'
299 params
= hostapd
. wpa2_params ( ssid
= ssid
, passphrase
= passphrase
)
300 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
302 src
= dev
[ 0 ]. connect ( "another" , psk
= passphrase
, scan_freq
= "2412" ,
303 only_add_network
= True )
304 id = dev
[ 0 ]. add_network ()
305 dev
[ 0 ]. set_network_quoted ( id , "ssid" , ssid
)
306 for f
in [ "key_mgmt" , "psk" , "scan_freq" ]:
307 res
= dev
[ 0 ]. global_request ( "DUP_NETWORK {} {} {} {} {}" . format ( dev
[ 0 ]. ifname
, dev
[ 0 ]. ifname
, src
, id , f
))
309 raise Exception ( "DUP_NETWORK failed" )
310 dev
[ 0 ]. connect_network ( id )
312 if "FAIL" not in dev
[ 0 ]. global_request ( "DUP_NETWORK " ):
313 raise Exception ( "Unexpected DUP_NETWORK success" )
314 if "FAIL" not in dev
[ 0 ]. global_request ( "DUP_NETWORK %s " % dev
[ 0 ]. ifname
):
315 raise Exception ( "Unexpected DUP_NETWORK success" )
316 if "FAIL" not in dev
[ 0 ]. global_request ( "DUP_NETWORK %s %s " % ( dev
[ 0 ]. ifname
, dev
[ 0 ]. ifname
)):
317 raise Exception ( "Unexpected DUP_NETWORK success" )
318 if "FAIL" not in dev
[ 0 ]. global_request ( "DUP_NETWORK %s %s %d " % ( dev
[ 0 ]. ifname
, dev
[ 0 ]. ifname
, id )):
319 raise Exception ( "Unexpected DUP_NETWORK success" )
320 if "FAIL" not in dev
[ 0 ]. global_request ( "DUP_NETWORK %s %s %d %d " % ( dev
[ 0 ]. ifname
, dev
[ 0 ]. ifname
, id , id )):
321 raise Exception ( "Unexpected DUP_NETWORK success" )
322 dev
[ 0 ]. request ( "DISCONNECT" )
323 if "OK" not in dev
[ 0 ]. global_request ( "DUP_NETWORK %s %s %d %d ssid" % ( dev
[ 0 ]. ifname
, dev
[ 0 ]. ifname
, id , id )):
324 raise Exception ( "Unexpected DUP_NETWORK failure" )
328 ev
= dev
. wait_event ([ "CRED-ADDED" ])
330 raise Exception ( "Missing CRED-ADDED event" )
331 if " " + str ( id ) not in ev
:
332 raise Exception ( "CRED-ADDED event without matching id" )
335 def set_cred ( dev
, id , field
, value
):
336 dev
. set_cred ( id , field
, value
)
337 ev
= dev
. wait_event ([ "CRED-MODIFIED" ])
339 raise Exception ( "Missing CRED-MODIFIED event" )
340 if " " + str ( id ) + " " not in ev
:
341 raise Exception ( "CRED-MODIFIED event without matching id" )
343 raise Exception ( "CRED-MODIFIED event without matching field" )
345 def set_cred_quoted ( dev
, id , field
, value
):
346 dev
. set_cred_quoted ( id , field
, value
)
347 ev
= dev
. wait_event ([ "CRED-MODIFIED" ])
349 raise Exception ( "Missing CRED-MODIFIED event" )
350 if " " + str ( id ) + " " not in ev
:
351 raise Exception ( "CRED-MODIFIED event without matching id" )
353 raise Exception ( "CRED-MODIFIED event without matching field" )
355 def remove_cred ( dev
, id ):
357 ev
= dev
. wait_event ([ "CRED-REMOVED" ])
359 raise Exception ( "Missing CRED-REMOVED event" )
360 if " " + str ( id ) not in ev
:
361 raise Exception ( "CRED-REMOVED event without matching id" )
363 def test_wpas_ctrl_cred ( dev
):
364 """wpa_supplicant ctrl_iface cred set"""
365 id1
= add_cred ( dev
[ 0 ])
366 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id1
+ 1 ) + " temporary 1" ):
367 raise Exception ( "SET_CRED succeeded unexpectedly on unknown cred id" )
368 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id1
)):
369 raise Exception ( "Invalid SET_CRED succeeded unexpectedly" )
370 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id1
) + " temporary" ):
371 raise Exception ( "Invalid SET_CRED succeeded unexpectedly" )
372 if "FAIL" not in dev
[ 0 ]. request ( "GET_CRED " + str ( id1
+ 1 ) + " temporary" ):
373 raise Exception ( "GET_CRED succeeded unexpectedly on unknown cred id" )
374 if "FAIL" not in dev
[ 0 ]. request ( "GET_CRED " + str ( id1
)):
375 raise Exception ( "Invalid GET_CRED succeeded unexpectedly" )
376 if "FAIL" not in dev
[ 0 ]. request ( "GET_CRED " + str ( id1
) + " foo" ):
377 raise Exception ( "Invalid GET_CRED succeeded unexpectedly" )
378 id = add_cred ( dev
[ 0 ])
379 id2
= add_cred ( dev
[ 0 ])
380 set_cred ( dev
[ 0 ], id , "temporary" , "1" )
381 set_cred ( dev
[ 0 ], id , "priority" , "1" )
382 set_cred ( dev
[ 0 ], id , "pcsc" , "1" )
383 set_cred_quoted ( dev
[ 0 ], id , "private_key_passwd" , "test" )
384 set_cred_quoted ( dev
[ 0 ], id , "domain_suffix_match" , "test" )
385 set_cred_quoted ( dev
[ 0 ], id , "phase1" , "test" )
386 set_cred_quoted ( dev
[ 0 ], id , "phase2" , "test" )
388 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " eap FOO" ):
389 raise Exception ( "Unexpected success on unknown EAP method" )
391 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " username 12xa" ):
392 raise Exception ( "Unexpected success on invalid string" )
394 for i
in ( "11" , "1122" , "112233445566778899aabbccddeeff00" ):
395 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " roaming_consortium " + i
):
396 raise Exception ( "Unexpected success on invalid roaming_consortium" )
398 dev
[ 0 ]. set_cred ( id , "excluded_ssid" , "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff" )
399 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " excluded_ssid 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00" ):
400 raise Exception ( "Unexpected success on invalid excluded_ssid" )
402 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " foo 4142" ):
403 raise Exception ( "Unexpected success on unknown field" )
405 id3
= add_cred ( dev
[ 0 ])
406 id4
= add_cred ( dev
[ 0 ])
407 if len ( dev
[ 0 ]. request ( "LIST_CREDS" ). splitlines ()) != 6 :
408 raise Exception ( "Unexpected LIST_CREDS result(1)" )
410 remove_cred ( dev
[ 0 ], id1
)
411 remove_cred ( dev
[ 0 ], id3
)
412 remove_cred ( dev
[ 0 ], id4
)
413 remove_cred ( dev
[ 0 ], id2
)
414 remove_cred ( dev
[ 0 ], id )
415 if "FAIL" not in dev
[ 0 ]. request ( "REMOVE_CRED 1" ):
416 raise Exception ( "Unexpected success on invalid remove cred" )
417 if len ( dev
[ 0 ]. request ( "LIST_CREDS" ). splitlines ()) != 1 :
418 raise Exception ( "Unexpected LIST_CREDS result(2)" )
420 id = add_cred ( dev
[ 0 ])
421 values
= [ ( "temporary" , "1" , False ),
422 ( "temporary" , "0" , False ),
423 ( "pcsc" , "1" , False ),
424 ( "realm" , "example.com" , True ),
425 ( "username" , "user@example.com" , True ),
426 ( "password" , "foo" , True , "*" ),
427 ( "ca_cert" , "ca.pem" , True ),
428 ( "client_cert" , "user.pem" , True ),
429 ( "private_key" , "key.pem" , True ),
430 ( "private_key_passwd" , "foo" , True , "*" ),
431 ( "imsi" , "310026-000000000" , True ),
432 ( "milenage" , "foo" , True , "*" ),
433 ( "domain_suffix_match" , "example.com" , True ),
434 ( "domain" , "example.com" , True ),
435 ( "domain" , "example.org" , True , "example.com \n example.org" ),
436 ( "roaming_consortium" , "0123456789" , False ),
437 ( "required_roaming_consortium" , "456789" , False ),
438 ( "eap" , "TTLS" , False ),
439 ( "phase1" , "foo=bar1" , True ),
440 ( "phase2" , "foo=bar2" , True ),
441 ( "excluded_ssid" , "test" , True ),
442 ( "excluded_ssid" , "foo" , True , "test \n foo" ),
443 ( "roaming_partner" , "example.com,0,4,*" , True ),
444 ( "roaming_partner" , "example.org,1,2,US" , True ,
445 "example.com,0,4,* \n example.org,1,2,US" ),
446 ( "update_identifier" , "4" , False ),
447 ( "provisioning_sp" , "sp.example.com" , True ),
448 ( "sp_priority" , "7" , False ),
449 ( "min_dl_bandwidth_home" , "100" , False ),
450 ( "min_ul_bandwidth_home" , "101" , False ),
451 ( "min_dl_bandwidth_roaming" , "102" , False ),
452 ( "min_ul_bandwidth_roaming" , "103" , False ),
453 ( "max_bss_load" , "57" , False ),
454 ( "req_conn_capab" , "6:22,80,443" , False ),
455 ( "req_conn_capab" , "17:500" , False , "6:22,80,443 \n 17:500" ),
456 ( "req_conn_capab" , "50" , False , "6:22,80,443 \n 17:500 \n 50" ),
457 ( "ocsp" , "1" , False ) ]
460 set_cred_quoted ( dev
[ 0 ], id , v
[ 0 ], v
[ 1 ])
462 set_cred ( dev
[ 0 ], id , v
[ 0 ], v
[ 1 ])
463 val
= dev
[ 0 ]. get_cred ( id , v
[ 0 ])
469 raise Exception ( "Unexpected GET_CRED value for {}: {} != {}" . format ( v
[ 0 ], val
, expect
))
470 creds
= dev
[ 0 ]. request ( "LIST_CREDS" ). splitlines ()
472 raise Exception ( "Unexpected LIST_CREDS result(3)" )
473 if creds
[ 1 ] != "0 \t example.com \t user@example.com \t example.com \t 310026-000000000" :
474 raise Exception ( "Unexpected LIST_CREDS value" )
475 remove_cred ( dev
[ 0 ], id )
476 if len ( dev
[ 0 ]. request ( "LIST_CREDS" ). splitlines ()) != 1 :
477 raise Exception ( "Unexpected LIST_CREDS result(4)" )
479 id = add_cred ( dev
[ 0 ])
480 set_cred_quoted ( dev
[ 0 ], id , "domain" , "foo.example.com" )
481 id = add_cred ( dev
[ 0 ])
482 set_cred_quoted ( dev
[ 0 ], id , "domain" , "bar.example.com" )
483 id = add_cred ( dev
[ 0 ])
484 set_cred_quoted ( dev
[ 0 ], id , "domain" , "foo.example.com" )
485 if "OK" not in dev
[ 0 ]. request ( "REMOVE_CRED sp_fqdn=foo.example.com" ):
486 raise Exception ( "REMOVE_CRED failed" )
487 creds
= dev
[ 0 ]. request ( "LIST_CREDS" )
488 if "foo.example.com" in creds
:
489 raise Exception ( "REMOVE_CRED sp_fqdn did not remove cred" )
490 if "bar.example.com" not in creds
:
491 raise Exception ( "REMOVE_CRED sp_fqdn removed incorrect cred" )
492 dev
[ 0 ]. request ( "REMOVE_CRED all" )
494 id = add_cred ( dev
[ 0 ])
495 set_cred_quoted ( dev
[ 0 ], id , "domain" , "foo.example.com" )
496 set_cred_quoted ( dev
[ 0 ], id , "provisioning_sp" , "sp.foo.example.com" )
497 id = add_cred ( dev
[ 0 ])
498 set_cred_quoted ( dev
[ 0 ], id , "domain" , "bar.example.com" )
499 set_cred_quoted ( dev
[ 0 ], id , "provisioning_sp" , "sp.bar.example.com" )
500 id = add_cred ( dev
[ 0 ])
501 set_cred_quoted ( dev
[ 0 ], id , "domain" , "foo.example.com" )
502 set_cred_quoted ( dev
[ 0 ], id , "provisioning_sp" , "sp.foo.example.com" )
503 if "OK" not in dev
[ 0 ]. request ( "REMOVE_CRED provisioning_sp=sp.foo.example.com" ):
504 raise Exception ( "REMOVE_CRED failed" )
505 creds
= dev
[ 0 ]. request ( "LIST_CREDS" )
506 if "foo.example.com" in creds
:
507 raise Exception ( "REMOVE_CRED provisioning_sp did not remove cred" )
508 if "bar.example.com" not in creds
:
509 raise Exception ( "REMOVE_CRED provisioning_sp removed incorrect cred" )
510 dev
[ 0 ]. request ( "REMOVE_CRED all" )
512 # Test large number of creds and LIST_CREDS truncation
513 dev
[ 0 ]. dump_monitor ()
514 for i
in range ( 0 , 100 ):
515 id = add_cred ( dev
[ 0 ])
516 set_cred_quoted ( dev
[ 0 ], id , "realm" , "relatively.long.realm.test %d .example.com" % i
)
517 dev
[ 0 ]. dump_monitor ()
518 creds
= dev
[ 0 ]. request ( "LIST_CREDS" )
519 for i
in range ( 0 , 100 ):
520 dev
[ 0 ]. remove_cred ( i
)
521 dev
[ 0 ]. dump_monitor ()
522 if len ( creds
) < 3900 or len ( creds
) > 4100 :
523 raise Exception ( "Unexpected LIST_CREDS length: %d " % len ( creds
))
524 if "test10.example.com" not in creds
:
525 raise Exception ( "Missing credential" )
526 if len ( creds
. splitlines ()) > 95 :
527 raise Exception ( "Too many LIST_CREDS entries in the buffer" )
529 def test_wpas_ctrl_pno ( dev
):
530 """wpa_supplicant ctrl_iface pno"""
531 if "FAIL" not in dev
[ 0 ]. request ( "SET pno 1" ):
532 raise Exception ( "Unexpected success in enabling PNO without enabled network blocks" )
533 id = dev
[ 0 ]. add_network ()
534 dev
[ 0 ]. set_network_quoted ( id , "ssid" , "test" )
535 dev
[ 0 ]. set_network ( id , "key_mgmt" , "NONE" )
536 dev
[ 0 ]. request ( "ENABLE_NETWORK " + str ( id ) + " no-connect" )
537 #mac80211_hwsim does not yet support PNO, so this fails
538 if "FAIL" not in dev
[ 0 ]. request ( "SET pno 1" ):
539 raise Exception ( "Unexpected success in enabling PNO" )
540 if "FAIL" not in dev
[ 0 ]. request ( "SET pno 1 freq=2000-3000,5180" ):
541 raise Exception ( "Unexpected success in enabling PNO" )
542 if "FAIL" not in dev
[ 0 ]. request ( "SET pno 1 freq=0-6000" ):
543 raise Exception ( "Unexpected success in enabling PNO" )
544 if "FAIL" in dev
[ 0 ]. request ( "SET pno 0" ):
545 raise Exception ( "Unexpected failure in disabling PNO" )
547 def test_wpas_ctrl_get ( dev
):
548 """wpa_supplicant ctrl_iface get"""
549 if "FAIL" in dev
[ 0 ]. request ( "GET version" ):
550 raise Exception ( "Unexpected get failure for version" )
551 if "FAIL" in dev
[ 0 ]. request ( "GET wifi_display" ):
552 raise Exception ( "Unexpected get failure for wifi_display" )
553 if "FAIL" not in dev
[ 0 ]. request ( "GET foo" ):
554 raise Exception ( "Unexpected success on get command" )
556 def test_wpas_ctrl_preauth ( dev
):
557 """wpa_supplicant ctrl_iface preauth"""
558 if "FAIL" not in dev
[ 0 ]. request ( "PREAUTH " ):
559 raise Exception ( "Unexpected success on invalid PREAUTH" )
560 if "FAIL" in dev
[ 0 ]. request ( "PREAUTH 00:11:22:33:44:55" ):
561 raise Exception ( "Unexpected failure on PREAUTH" )
563 def test_wpas_ctrl_stkstart ( dev
):
564 """wpa_supplicant ctrl_iface strkstart"""
565 if "FAIL" not in dev
[ 0 ]. request ( "STKSTART " ):
566 raise Exception ( "Unexpected success on invalid STKSTART" )
567 if "FAIL" not in dev
[ 0 ]. request ( "STKSTART 00:11:22:33:44:55" ):
568 raise Exception ( "Unexpected success on STKSTART" )
570 def test_wpas_ctrl_tdls_discover ( dev
):
571 """wpa_supplicant ctrl_iface tdls_discover"""
572 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_DISCOVER " ):
573 raise Exception ( "Unexpected success on invalid TDLS_DISCOVER" )
574 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_DISCOVER 00:11:22:33:44:55" ):
575 raise Exception ( "Unexpected success on TDLS_DISCOVER" )
577 def test_wpas_ctrl_tdls_chan_switch ( dev
):
578 """wpa_supplicant ctrl_iface tdls_chan_switch error cases"""
579 for args
in [ '' , '00:11:22:33:44:55' ]:
580 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_CANCEL_CHAN_SWITCH " + args
):
581 raise Exception ( "Unexpected success on invalid TDLS_CANCEL_CHAN_SWITCH: " + args
)
583 for args
in [ '' , 'foo ' , '00:11:22:33:44:55 ' , '00:11:22:33:44:55 q' ,
584 '00:11:22:33:44:55 81' , '00:11:22:33:44:55 81 1234' ,
585 '00:11:22:33:44:55 81 1234 center_freq1=234 center_freq2=345 bandwidth=456 sec_channel_offset=567 ht vht' ]:
586 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_CHAN_SWITCH " + args
):
587 raise Exception ( "Unexpected success on invalid TDLS_CHAN_SWITCH: " + args
)
589 def test_wpas_ctrl_addr ( dev
):
590 """wpa_supplicant ctrl_iface invalid address"""
591 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_SETUP " ):
592 raise Exception ( "Unexpected success on invalid TDLS_SETUP" )
593 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_TEARDOWN " ):
594 raise Exception ( "Unexpected success on invalid TDLS_TEARDOWN" )
595 if "FAIL" not in dev
[ 0 ]. request ( "FT_DS " ):
596 raise Exception ( "Unexpected success on invalid FT_DS" )
597 if "FAIL" not in dev
[ 0 ]. request ( "WPS_PBC 00:11:22:33:44" ):
598 raise Exception ( "Unexpected success on invalid WPS_PBC" )
599 if "FAIL" not in dev
[ 0 ]. request ( "WPS_PIN 00:11:22:33:44" ):
600 raise Exception ( "Unexpected success on invalid WPS_PIN" )
601 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC 00:11:22:33:44" ):
602 raise Exception ( "Unexpected success on invalid WPS_NFC" )
603 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44 12345670" ):
604 raise Exception ( "Unexpected success on invalid WPS_REG" )
605 if "FAIL" not in dev
[ 0 ]. request ( "IBSS_RSN 00:11:22:33:44" ):
606 raise Exception ( "Unexpected success on invalid IBSS_RSN" )
607 if "FAIL" not in dev
[ 0 ]. request ( "BLACKLIST 00:11:22:33:44" ):
608 raise Exception ( "Unexpected success on invalid BLACKLIST" )
610 def test_wpas_ctrl_wps_errors ( dev
):
611 """wpa_supplicant ctrl_iface WPS error cases"""
612 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44:55" ):
613 raise Exception ( "Unexpected success on invalid WPS_REG" )
614 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44:55 12345670 2233" ):
615 raise Exception ( "Unexpected success on invalid WPS_REG" )
616 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44:55 12345670 2233 OPEN" ):
617 raise Exception ( "Unexpected success on invalid WPS_REG" )
618 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44:55 12345670 2233 OPEN NONE" ):
619 raise Exception ( "Unexpected success on invalid WPS_REG" )
621 if "FAIL" not in dev
[ 0 ]. request ( "WPS_AP_PIN random" ):
622 raise Exception ( "Unexpected success on WPS_AP_PIN in non-AP mode" )
624 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_PIN any" ):
625 raise Exception ( "Unexpected success on invalid WPS_ER_PIN" )
627 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_LEARN 00:11:22:33:44:55" ):
628 raise Exception ( "Unexpected success on invalid WPS_ER_LEARN" )
630 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_SET_CONFIG 00:11:22:33:44:55" ):
631 raise Exception ( "Unexpected success on invalid WPS_ER_SET_CONFIG" )
633 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55" ):
634 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
635 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55 12345670" ):
636 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
637 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55 12345670 2233" ):
638 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
639 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55 12345670 2233 OPEN" ):
640 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
641 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55 12345670 2233 OPEN NONE" ):
642 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
644 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_NFC_CONFIG_TOKEN WPS" ):
645 raise Exception ( "Unexpected success on invalid WPS_ER_NFC_CONFIG_TOKEN" )
646 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_NFC_CONFIG_TOKEN FOO 00:11:22:33:44:55" ):
647 raise Exception ( "Unexpected success on invalid WPS_ER_NFC_CONFIG_TOKEN" )
648 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_NFC_CONFIG_TOKEN NDEF 00:11:22:33:44:55" ):
649 raise Exception ( "Unexpected success on invalid WPS_ER_NFC_CONFIG_TOKEN" )
651 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC_CONFIG_TOKEN FOO" ):
652 raise Exception ( "Unexpected success on invalid WPS_NFC_CONFIG_TOKEN" )
653 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC_CONFIG_TOKEN WPS FOO" ):
654 raise Exception ( "Unexpected success on invalid WPS_NFC_CONFIG_TOKEN" )
655 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC_TOKEN FOO" ):
656 raise Exception ( "Unexpected success on invalid WPS_NFC_TOKEN" )
658 def test_wpas_ctrl_config_parser ( dev
):
659 """wpa_supplicant ctrl_iface SET config parser"""
660 if "FAIL" not in dev
[ 0 ]. request ( "SET pbc_in_m1 qwerty" ):
661 raise Exception ( "Non-number accepted as integer" )
662 if "FAIL" not in dev
[ 0 ]. request ( "SET eapol_version 0" ):
663 raise Exception ( "Out-of-range value accepted" )
664 if "FAIL" not in dev
[ 0 ]. request ( "SET eapol_version 10" ):
665 raise Exception ( "Out-of-range value accepted" )
667 if "FAIL" not in dev
[ 0 ]. request ( "SET serial_number 0123456789abcdef0123456789abcdef0" ):
668 raise Exception ( "Too long string accepted" )
670 def test_wpas_ctrl_mib ( dev
):
671 """wpa_supplicant ctrl_iface MIB"""
672 mib
= dev
[ 0 ]. get_mib ()
673 if "dot11RSNAOptionImplemented" not in mib
:
674 raise Exception ( "Missing MIB entry" )
675 if mib
[ "dot11RSNAOptionImplemented" ] != "TRUE" :
676 raise Exception ( "Unexpected dot11RSNAOptionImplemented value" )
678 def test_wpas_ctrl_set_wps_params ( dev
):
679 """wpa_supplicant ctrl_iface SET config_methods"""
680 ts
= [ "config_methods label virtual_display virtual_push_button keypad" ,
681 "device_type 1-0050F204-1" ,
682 "os_version 01020300" ,
683 "uuid 12345678-9abc-def0-1234-56789abcdef0" ]
685 if "OK" not in dev
[ 2 ]. request ( "SET " + t
):
686 raise Exception ( "SET failed for: " + t
)
688 ts
= [ "uuid 12345678+9abc-def0-1234-56789abcdef0" ,
689 "uuid 12345678-qabc-def0-1234-56789abcdef0" ,
690 "uuid 12345678-9abc+def0-1234-56789abcdef0" ,
691 "uuid 12345678-9abc-qef0-1234-56789abcdef0" ,
692 "uuid 12345678-9abc-def0+1234-56789abcdef0" ,
693 "uuid 12345678-9abc-def0-q234-56789abcdef0" ,
694 "uuid 12345678-9abc-def0-1234+56789abcdef0" ,
695 "uuid 12345678-9abc-def0-1234-q6789abcdef0" ,
698 if "FAIL" not in dev
[ 2 ]. request ( "SET " + t
):
699 raise Exception ( "SET succeeded for: " + t
)
701 def test_wpas_ctrl_level ( dev
):
702 """wpa_supplicant ctrl_iface LEVEL"""
704 if "FAIL" not in dev
[ 2 ]. request ( "LEVEL 3" ):
705 raise Exception ( "Unexpected LEVEL success" )
706 if "OK" not in dev
[ 2 ]. mon
. request ( "LEVEL 2" ):
707 raise Exception ( "Unexpected LEVEL failure" )
708 dev
[ 2 ]. request ( "SCAN freq=2412" )
709 ev
= dev
[ 2 ]. wait_event ([ "State:" ], timeout
= 5 )
711 raise Exception ( "No debug message received" )
712 dev
[ 2 ]. wait_event ([ "CTRL-EVENT-SCAN-RESULTS" ], timeout
= 5 )
714 dev
[ 2 ]. mon
. request ( "LEVEL 3" )
716 def test_wpas_ctrl_bssid_filter ( dev
, apdev
):
717 """wpa_supplicant bssid_filter"""
719 if "OK" not in dev
[ 2 ]. request ( "SET bssid_filter " + apdev
[ 0 ][ 'bssid' ]):
720 raise Exception ( "Failed to set bssid_filter" )
721 params
= { "ssid" : "test" }
722 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
723 hostapd
. add_ap ( apdev
[ 1 ][ 'ifname' ], params
)
724 dev
[ 2 ]. scan_for_bss ( apdev
[ 0 ][ 'bssid' ], freq
= "2412" )
725 dev
[ 2 ]. scan ( freq
= "2412" )
726 bss
= dev
[ 2 ]. get_bss ( apdev
[ 0 ][ 'bssid' ])
727 if bss
is None or len ( bss
) == 0 :
728 raise Exception ( "Missing BSS data" )
729 bss
= dev
[ 2 ]. get_bss ( apdev
[ 1 ][ 'bssid' ])
730 if bss
and len ( bss
) != 0 :
731 raise Exception ( "Unexpected BSS data" )
732 dev
[ 2 ]. request ( "SET bssid_filter " )
733 dev
[ 2 ]. scan ( freq
= "2412" )
734 bss
= dev
[ 2 ]. get_bss ( apdev
[ 0 ][ 'bssid' ])
735 if bss
is None or len ( bss
) == 0 :
736 raise Exception ( "Missing BSS data" )
737 bss
= dev
[ 2 ]. get_bss ( apdev
[ 1 ][ 'bssid' ])
738 if bss
is None or len ( bss
) == 0 :
739 raise Exception ( "Missing BSS data(2)" )
740 res
= dev
[ 2 ]. request ( "SCAN_RESULTS" ). splitlines ()
741 if "test" not in res
[ 1 ] or "test" not in res
[ 2 ]:
742 raise Exception ( "SSID missing from SCAN_RESULTS" )
743 if apdev
[ 0 ][ 'bssid' ] not in res
[ 1 ] and apdev
[ 1 ][ 'bssid' ] not in res
[ 1 ]:
744 raise Exception ( "BSS1 missing from SCAN_RESULTS" )
745 if apdev
[ 0 ][ 'bssid' ] not in res
[ 2 ] and apdev
[ 1 ][ 'bssid' ] not in res
[ 2 ]:
746 raise Exception ( "BSS1 missing from SCAN_RESULTS" )
748 if "FAIL" not in dev
[ 2 ]. request ( "SET bssid_filter 00:11:22:33:44:55 00:11:22:33:44" ):
749 raise Exception ( "Unexpected success for invalid SET bssid_filter" )
751 dev
[ 2 ]. request ( "SET bssid_filter " )
753 def test_wpas_ctrl_disallow_aps ( dev
, apdev
):
754 """wpa_supplicant ctrl_iface disallow_aps"""
755 params
= { "ssid" : "test" }
756 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
758 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps bssid " ):
759 raise Exception ( "Unexpected success on invalid disallow_aps" )
760 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps bssid 00:11:22:33:44" ):
761 raise Exception ( "Unexpected success on invalid disallow_aps" )
762 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps ssid 0" ):
763 raise Exception ( "Unexpected success on invalid disallow_aps" )
764 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps ssid 4q" ):
765 raise Exception ( "Unexpected success on invalid disallow_aps" )
766 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps bssid 00:11:22:33:44:55 ssid 112233 ssid 123" ):
767 raise Exception ( "Unexpected success on invalid disallow_aps" )
768 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps ssid 000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f00" ):
769 raise Exception ( "Unexpected success on invalid disallow_aps" )
770 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps foo 112233445566" ):
771 raise Exception ( "Unexpected success on invalid disallow_aps" )
773 dev
[ 0 ]. connect ( "test" , key_mgmt
= "NONE" , scan_freq
= "2412" )
774 hostapd
. add_ap ( apdev
[ 1 ][ 'ifname' ], params
)
775 dev
[ 0 ]. scan_for_bss ( apdev
[ 1 ][ 'bssid' ], freq
= "2412" )
776 dev
[ 0 ]. dump_monitor ()
777 if "OK" not in dev
[ 0 ]. request ( "SET disallow_aps bssid 00:11:22:33:44:55 bssid 00:22:33:44:55:66" ):
778 raise Exception ( "Failed to set disallow_aps" )
779 if "OK" not in dev
[ 0 ]. request ( "SET disallow_aps bssid " + apdev
[ 0 ][ 'bssid' ]):
780 raise Exception ( "Failed to set disallow_aps" )
781 ev
= dev
[ 0 ]. wait_connected ( timeout
= 30 , error
= "Reassociation timed out" )
782 if apdev
[ 1 ][ 'bssid' ] not in ev
:
783 raise Exception ( "Unexpected BSSID" )
785 dev
[ 0 ]. dump_monitor ()
786 if "OK" not in dev
[ 0 ]. request ( "SET disallow_aps ssid " + "test" . encode ( "hex" )):
787 raise Exception ( "Failed to set disallow_aps" )
788 dev
[ 0 ]. wait_disconnected ( timeout
= 5 , error
= "Disconnection not seen" )
789 ev
= dev
[ 0 ]. wait_event ([ "CTRL-EVENT-CONNECTED" ], timeout
= 1 )
791 raise Exception ( "Unexpected reassociation" )
793 dev
[ 0 ]. request ( "DISCONNECT" )
794 dev
[ 0 ]. p2p_start_go ( freq
= 2412 )
795 if "OK" not in dev
[ 0 ]. request ( "SET disallow_aps " ):
796 raise Exception ( "Failed to set disallow_aps" )
798 def test_wpas_ctrl_blob ( dev
):
799 """wpa_supplicant ctrl_iface SET blob"""
800 if "FAIL" not in dev
[ 0 ]. request ( "SET blob foo" ):
801 raise Exception ( "Unexpected SET success" )
802 if "FAIL" not in dev
[ 0 ]. request ( "SET blob foo 0" ):
803 raise Exception ( "Unexpected SET success" )
804 if "FAIL" not in dev
[ 0 ]. request ( "SET blob foo 0q" ):
805 raise Exception ( "Unexpected SET success" )
806 if "OK" not in dev
[ 0 ]. request ( "SET blob foo 00" ):
807 raise Exception ( "Unexpected SET failure" )
808 if "OK" not in dev
[ 0 ]. request ( "SET blob foo 0011" ):
809 raise Exception ( "Unexpected SET failure" )
811 def test_wpas_ctrl_set_uapsd ( dev
):
812 """wpa_supplicant ctrl_iface SET uapsd"""
813 if "FAIL" not in dev
[ 0 ]. request ( "SET uapsd foo" ):
814 raise Exception ( "Unexpected SET success" )
815 if "FAIL" not in dev
[ 0 ]. request ( "SET uapsd 0,0,0" ):
816 raise Exception ( "Unexpected SET success" )
817 if "FAIL" not in dev
[ 0 ]. request ( "SET uapsd 0,0" ):
818 raise Exception ( "Unexpected SET success" )
819 if "FAIL" not in dev
[ 0 ]. request ( "SET uapsd 0" ):
820 raise Exception ( "Unexpected SET success" )
821 if "OK" not in dev
[ 0 ]. request ( "SET uapsd 1,1,1,1;1" ):
822 raise Exception ( "Unexpected SET failure" )
823 if "OK" not in dev
[ 0 ]. request ( "SET uapsd 0,0,0,0;0" ):
824 raise Exception ( "Unexpected SET failure" )
825 if "OK" not in dev
[ 0 ]. request ( "SET uapsd disable" ):
826 raise Exception ( "Unexpected SET failure" )
828 def test_wpas_ctrl_set ( dev
):
829 """wpa_supplicant ctrl_iface SET"""
835 "dot11RSNAConfigPMKLifetime 0" ,
836 "dot11RSNAConfigPMKReauthThreshold 101" ,
837 "dot11RSNAConfigSATimeout 0" ,
838 "wps_version_number -1" ,
839 "wps_version_number 256" ]
841 if "FAIL" not in dev
[ 0 ]. request ( "SET " + val
):
842 raise Exception ( "Unexpected SET success for " + val
)
844 vals
= [ "EAPOL::heldPeriod 60" ,
845 "EAPOL::authPeriod 30" ,
846 "EAPOL::startPeriod 30" ,
848 "dot11RSNAConfigSATimeout 60" ,
855 if "OK" not in dev
[ 0 ]. request ( "SET " + val
):
856 raise Exception ( "Unexpected SET failure for " + val
)
858 def test_wpas_ctrl_get_capability ( dev
):
859 """wpa_supplicant ctrl_iface GET_CAPABILITY"""
860 if "FAIL" not in dev
[ 0 ]. request ( "GET_CAPABILITY 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" ):
861 raise Exception ( "Unexpected success on invalid GET_CAPABILITY" )
862 if "FAIL" not in dev
[ 0 ]. request ( "GET_CAPABILITY eap foo" ):
863 raise Exception ( "Unexpected success on invalid GET_CAPABILITY" )
864 if "AP" not in dev
[ 0 ]. request ( "GET_CAPABILITY modes strict" ):
865 raise Exception ( "Unexpected GET_CAPABILITY response" )
866 res
= dev
[ 0 ]. get_capability ( "eap" )
867 if "TTLS" not in res
:
868 raise Exception ( "Unexpected GET_CAPABILITY eap response: " + str ( res
))
870 res
= dev
[ 0 ]. get_capability ( "pairwise" )
871 if "CCMP" not in res
:
872 raise Exception ( "Unexpected GET_CAPABILITY pairwise response: " + str ( res
))
874 res
= dev
[ 0 ]. get_capability ( "group" )
875 if "CCMP" not in res
:
876 raise Exception ( "Unexpected GET_CAPABILITY group response: " + str ( res
))
878 res
= dev
[ 0 ]. get_capability ( "key_mgmt" )
879 if "WPA-PSK" not in res
or "WPA-EAP" not in res
:
880 raise Exception ( "Unexpected GET_CAPABILITY key_mgmt response: " + str ( res
))
882 res
= dev
[ 0 ]. get_capability ( "proto" )
883 if "WPA" not in res
or "RSN" not in res
:
884 raise Exception ( "Unexpected GET_CAPABILITY proto response: " + str ( res
))
886 res
= dev
[ 0 ]. get_capability ( "auth_alg" )
887 if "OPEN" not in res
or "SHARED" not in res
:
888 raise Exception ( "Unexpected GET_CAPABILITY auth_alg response: " + str ( res
))
890 res
= dev
[ 0 ]. get_capability ( "modes" )
891 if "IBSS" not in res
or "AP" not in res
:
892 raise Exception ( "Unexpected GET_CAPABILITY modes response: " + str ( res
))
894 res
= dev
[ 0 ]. get_capability ( "channels" )
895 if "8" not in res
or "36" not in res
:
896 raise Exception ( "Unexpected GET_CAPABILITY channels response: " + str ( res
))
898 res
= dev
[ 0 ]. get_capability ( "freq" )
899 if "2457" not in res
or "5180" not in res
:
900 raise Exception ( "Unexpected GET_CAPABILITY freq response: " + str ( res
))
902 res
= dev
[ 0 ]. get_capability ( "tdls" )
903 if "EXTERNAL" not in res
[ 0 ]:
904 raise Exception ( "Unexpected GET_CAPABILITY tdls response: " + str ( res
))
906 res
= dev
[ 0 ]. get_capability ( "erp" )
907 if res
is None or "ERP" not in res
[ 0 ]:
908 raise Exception ( "Unexpected GET_CAPABILITY erp response: " + str ( res
))
910 if dev
[ 0 ]. get_capability ( "foo" ) is not None :
911 raise Exception ( "Unexpected GET_CAPABILITY foo response: " + str ( res
))
913 def test_wpas_ctrl_nfc_report_handover ( dev
):
914 """wpa_supplicant ctrl_iface NFC_REPORT_HANDOVER"""
925 if "FAIL" not in dev
[ 0 ]. request ( "NFC_REPORT_HANDOVER " + v
):
926 raise Exception ( "Unexpected NFC_REPORT_HANDOVER success for " + v
)
928 def test_wpas_ctrl_nfc_tag_read ( dev
):
929 """wpa_supplicant ctrl_iface WPS_NFC_TAG_READ"""
930 vals
= [ "FOO" , "0Q" , "00" , "000000" , "10000001" , "10000000" , "00000000" ,
931 "100e0000" , "100e0001ff" , "100e000411110000" , "100e0004100e0001" ]
933 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC_TAG_READ " + v
):
934 raise Exception ( "Unexpected WPS_NFC_TAG_READ success for " + v
)
936 def test_wpas_ctrl_nfc_get_handover ( dev
):
937 """wpa_supplicant ctrl_iface NFC_GET_HANDOVER"""
938 vals
= [ "FOO" , "FOO BAR" , "WPS WPS" , "WPS WPS-CR" , "WPS FOO" , "NDEF P2P" ]
940 if "FAIL" not in dev
[ 0 ]. request ( "NFC_GET_HANDOVER_REQ " + v
):
941 raise Exception ( "Unexpected NFC_GET_HANDOVER_REQ success for " + v
)
943 vals
= [ "NDEF WPS" , "NDEF P2P-CR" , "WPS P2P-CR" ]
945 if "FAIL" in dev
[ 0 ]. request ( "NFC_GET_HANDOVER_REQ " + v
):
946 raise Exception ( "Unexpected NFC_GET_HANDOVER_REQ failure for " + v
)
948 vals
= [ "FOO" , "FOO BAR" , "WPS WPS" , "WPS WPS-CR" , "WPS FOO" , "NDEF P2P" ,
949 "NDEF WPS" , "NDEF WPS uuid" ]
951 if "FAIL" not in dev
[ 0 ]. request ( "NFC_GET_HANDOVER_SEL " + v
):
952 raise Exception ( "Unexpected NFC_GET_HANDOVER_SEL success for " + v
)
954 vals
= [ "NDEF P2P-CR" , "WPS P2P-CR" , "NDEF P2P-CR-TAG" ,
957 if "FAIL" in dev
[ 0 ]. request ( "NFC_GET_HANDOVER_SEL " + v
):
958 raise Exception ( "Unexpected NFC_GET_HANDOVER_SEL failure for " + v
)
960 def get_blacklist ( dev
):
961 return dev
. request ( "BLACKLIST" ). splitlines ()
963 def test_wpas_ctrl_blacklist ( dev
):
964 """wpa_supplicant ctrl_iface BLACKLIST"""
965 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST clear" ):
966 raise Exception ( "BLACKLIST clear failed" )
967 b
= get_blacklist ( dev
[ 0 ])
969 raise Exception ( "Unexpected blacklist contents: " + str ( b
))
970 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST 00:11:22:33:44:55" ):
971 raise Exception ( "BLACKLIST add failed" )
972 b
= get_blacklist ( dev
[ 0 ])
973 if "00:11:22:33:44:55" not in b
:
974 raise Exception ( "Unexpected blacklist contents: " + str ( b
))
975 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST 00:11:22:33:44:56" ):
976 raise Exception ( "BLACKLIST add failed" )
977 b
= get_blacklist ( dev
[ 0 ])
978 if "00:11:22:33:44:55" not in b
or "00:11:22:33:44:56" not in b
:
979 raise Exception ( "Unexpected blacklist contents: " + str ( b
))
980 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST 00:11:22:33:44:56" ):
981 raise Exception ( "BLACKLIST add failed" )
982 b
= get_blacklist ( dev
[ 0 ])
983 if "00:11:22:33:44:55" not in b
or "00:11:22:33:44:56" not in b
or len ( b
) != 2 :
984 raise Exception ( "Unexpected blacklist contents: " + str ( b
))
986 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST clear" ):
987 raise Exception ( "BLACKLIST clear failed" )
988 if dev
[ 0 ]. request ( "BLACKLIST" ) != "" :
989 raise Exception ( "Unexpected blacklist contents" )
991 def test_wpas_ctrl_blacklist_oom ( dev
):
992 """wpa_supplicant ctrl_iface BLACKLIST and out-of-memory"""
993 with
alloc_fail ( dev
[ 0 ], 1 , "wpa_blacklist_add" ):
994 if "FAIL" not in dev
[ 0 ]. request ( "BLACKLIST aa:bb:cc:dd:ee:ff" ):
995 raise Exception ( "Unexpected success with allocation failure" )
997 def test_wpas_ctrl_log_level ( dev
):
998 """wpa_supplicant ctrl_iface LOG_LEVEL"""
999 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
1000 if "Current level: MSGDUMP" not in level
:
1001 raise Exception ( "Unexpected debug level(1): " + level
)
1002 if "Timestamp: 1" not in level
:
1003 raise Exception ( "Unexpected timestamp(1): " + level
)
1005 if "OK" not in dev
[ 2 ]. request ( "LOG_LEVEL MSGDUMP 0" ):
1006 raise Exception ( "LOG_LEVEL failed" )
1007 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
1008 if "Current level: MSGDUMP" not in level
:
1009 raise Exception ( "Unexpected debug level(2): " + level
)
1010 if "Timestamp: 0" not in level
:
1011 raise Exception ( "Unexpected timestamp(2): " + level
)
1013 if "OK" not in dev
[ 2 ]. request ( "LOG_LEVEL MSGDUMP 1" ):
1014 raise Exception ( "LOG_LEVEL failed" )
1015 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
1016 if "Current level: MSGDUMP" not in level
:
1017 raise Exception ( "Unexpected debug level(3): " + level
)
1018 if "Timestamp: 1" not in level
:
1019 raise Exception ( "Unexpected timestamp(3): " + level
)
1021 if "FAIL" not in dev
[ 2 ]. request ( "LOG_LEVEL FOO" ):
1022 raise Exception ( "Invalid LOG_LEVEL accepted" )
1024 for lev
in [ "EXCESSIVE" , "MSGDUMP" , "DEBUG" , "INFO" , "WARNING" , "ERROR" ]:
1025 if "OK" not in dev
[ 2 ]. request ( "LOG_LEVEL " + lev
):
1026 raise Exception ( "LOG_LEVEL failed for " + lev
)
1027 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
1028 if "Current level: " + lev
not in level
:
1029 raise Exception ( "Unexpected debug level: " + level
)
1031 if "OK" not in dev
[ 2 ]. request ( "LOG_LEVEL MSGDUMP 1" ):
1032 raise Exception ( "LOG_LEVEL failed" )
1033 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
1034 if "Current level: MSGDUMP" not in level
:
1035 raise Exception ( "Unexpected debug level(3): " + level
)
1036 if "Timestamp: 1" not in level
:
1037 raise Exception ( "Unexpected timestamp(3): " + level
)
1039 def test_wpas_ctrl_enable_disable_network ( dev
, apdev
):
1040 """wpa_supplicant ctrl_iface ENABLE/DISABLE_NETWORK"""
1041 params
= { "ssid" : "test" }
1042 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
1044 id = dev
[ 0 ]. connect ( "test" , key_mgmt
= "NONE" , scan_freq
= "2412" ,
1045 only_add_network
= True )
1046 if "OK" not in dev
[ 0 ]. request ( "DISABLE_NETWORK " + str ( id )):
1047 raise Exception ( "Failed to disable network" )
1048 if "OK" not in dev
[ 0 ]. request ( "ENABLE_NETWORK " + str ( id ) + " no-connect" ):
1049 raise Exception ( "Failed to enable network" )
1050 if "OK" not in dev
[ 0 ]. request ( "DISABLE_NETWORK all" ):
1051 raise Exception ( "Failed to disable networks" )
1052 if "OK" not in dev
[ 0 ]. request ( "ENABLE_NETWORK " + str ( id )):
1053 raise Exception ( "Failed to enable network" )
1054 dev
[ 0 ]. wait_connected ( timeout
= 10 )
1055 if "OK" not in dev
[ 0 ]. request ( "DISABLE_NETWORK " + str ( id )):
1056 raise Exception ( "Failed to disable network" )
1057 dev
[ 0 ]. wait_disconnected ( timeout
= 10 )
1060 if "OK" not in dev
[ 0 ]. request ( "ENABLE_NETWORK all" ):
1061 raise Exception ( "Failed to enable network" )
1062 dev
[ 0 ]. wait_connected ( timeout
= 10 )
1063 if "OK" not in dev
[ 0 ]. request ( "DISABLE_NETWORK all" ):
1064 raise Exception ( "Failed to disable network" )
1065 dev
[ 0 ]. wait_disconnected ( timeout
= 10 )
1067 def test_wpas_ctrl_country ( dev
, apdev
):
1068 """wpa_supplicant SET/GET country code"""
1070 # work around issues with possible pending regdom event from the end of
1071 # the previous test case
1073 dev
[ 0 ]. dump_monitor ()
1075 if "OK" not in dev
[ 0 ]. request ( "SET country FI" ):
1076 raise Exception ( "Failed to set country code" )
1077 if dev
[ 0 ]. request ( "GET country" ) != "FI" :
1078 raise Exception ( "Country code set failed" )
1079 ev
= dev
[ 0 ]. wait_global_event ([ "CTRL-EVENT-REGDOM-CHANGE" ], 10 )
1081 raise Exception ( "regdom change event not seen" )
1082 if "init=USER type=COUNTRY alpha2=FI" not in ev
:
1083 raise Exception ( "Unexpected event contents: " + ev
)
1084 dev
[ 0 ]. request ( "SET country 00" )
1085 if dev
[ 0 ]. request ( "GET country" ) != "00" :
1086 raise Exception ( "Country code set failed" )
1087 ev
= dev
[ 0 ]. wait_global_event ([ "CTRL-EVENT-REGDOM-CHANGE" ], 10 )
1089 raise Exception ( "regdom change event not seen" )
1090 if "init=CORE type=WORLD" not in ev
:
1091 raise Exception ( "Unexpected event contents: " + ev
)
1093 subprocess
. call ([ 'iw' , 'reg' , 'set' , '00' ])
1095 def test_wpas_ctrl_suspend_resume ( dev
):
1096 """wpa_supplicant SUSPEND/RESUME"""
1097 wpas
= WpaSupplicant ( global_iface
= '/tmp/wpas-wlan5' )
1098 wpas
. interface_add ( "wlan5" )
1099 if "OK" not in wpas
. global_request ( "SUSPEND" ):
1100 raise Exception ( "SUSPEND failed" )
1102 if "OK" not in wpas
. global_request ( "RESUME" ):
1103 raise Exception ( "RESUME failed" )
1104 if "OK" not in wpas
. request ( "SUSPEND" ):
1105 raise Exception ( "Per-interface SUSPEND failed" )
1106 if "OK" not in wpas
. request ( "RESUME" ):
1107 raise Exception ( "Per-interface RESUME failed" )
1108 ev
= wpas
. wait_event ([ "CTRL-EVENT-SCAN-RESULTS" ], timeout
= 10 )
1110 raise Exception ( "Scan not completed" )
1112 def test_wpas_ctrl_global ( dev
):
1113 """wpa_supplicant global control interface"""
1114 wpas
= WpaSupplicant ( global_iface
= '/tmp/wpas-wlan5' )
1115 wpas
. interface_add ( "wlan5" )
1117 if "PONG" not in wpas
. global_request ( "PING" ):
1118 raise Exception ( "PING failed" )
1119 if "wlan5" not in wpas
. global_request ( "INTERFACES" ):
1120 raise Exception ( "Interface not found" )
1121 if "UNKNOWN COMMAND" not in wpas
. global_request ( "FOO" ):
1122 raise Exception ( "Unexpected response to unknown command" )
1123 if "PONG" not in wpas
. global_request ( "IFNAME=wlan5 PING" ):
1124 raise Exception ( "Per-interface PING failed" )
1125 if "FAIL-NO-IFNAME-MATCH" not in wpas
. global_request ( "IFNAME=notfound PING" ):
1126 raise Exception ( "Unknown interface not reported correctly" )
1127 if "FAIL" not in wpas
. global_request ( "SAVE_CONFIG" ):
1128 raise Exception ( "SAVE_CONFIG succeeded unexpectedly" )
1129 if "OK" not in wpas
. global_request ( "SET wifi_display 0" ):
1130 raise Exception ( "SET failed" )
1131 if "wifi_display=0" not in wpas
. global_request ( "STATUS" ):
1132 raise Exception ( "wifi_display not disabled" )
1133 if "OK" not in wpas
. global_request ( "SET wifi_display 1" ):
1134 raise Exception ( "SET failed" )
1135 if "wifi_display=1" not in wpas
. global_request ( "STATUS" ):
1136 raise Exception ( "wifi_display not enabled" )
1137 if "FAIL" not in wpas
. global_request ( "SET foo 1" ):
1138 raise Exception ( "SET succeeded unexpectedly" )
1140 if "p2p_state=IDLE" not in wpas
. global_request ( "STATUS" ):
1141 raise Exception ( "P2P was disabled" )
1142 wpas
. global_request ( "P2P_SET disabled 1" )
1143 if "p2p_state=DISABLED" not in wpas
. global_request ( "STATUS" ):
1144 raise Exception ( "P2P was not disabled" )
1145 wpas
. global_request ( "P2P_SET disabled 0" )
1146 if "p2p_state=IDLE" not in wpas
. global_request ( "STATUS" ):
1147 raise Exception ( "P2P was not enabled" )
1149 # driver_nl80211.c does not support interface list, so do not fail because
1151 logger
. debug ( wpas
. global_request ( "INTERFACE_LIST" ))
1153 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD " ):
1154 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1155 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO" ):
1156 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1157 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf" ):
1158 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1159 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver" ):
1160 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1161 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver ctrliface" ):
1162 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1163 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver ctrliface driverparam" ):
1164 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1165 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver ctrliface driverparam bridge" ):
1166 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1167 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver ctrliface driverparam bridge foo" ):
1168 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1169 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO " ):
1170 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1172 def test_wpas_ctrl_roam ( dev
, apdev
):
1173 """wpa_supplicant ctrl_iface ROAM error cases"""
1174 if "FAIL" not in dev
[ 0 ]. request ( "ROAM 00:11:22:33:44" ):
1175 raise Exception ( "Unexpected success" )
1176 if "FAIL" not in dev
[ 0 ]. request ( "ROAM 00:11:22:33:44:55" ):
1177 raise Exception ( "Unexpected success" )
1178 params
= { "ssid" : "test" }
1179 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
1180 id = dev
[ 0 ]. connect ( "test" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1181 if "FAIL" not in dev
[ 0 ]. request ( "ROAM 00:11:22:33:44:55" ):
1182 raise Exception ( "Unexpected success" )
1184 def test_wpas_ctrl_ipaddr ( dev
, apdev
):
1185 """wpa_supplicant IP address in STATUS"""
1187 subprocess
. call ([ 'ip' , 'addr' , 'add' , '10.174.65.207/32' , 'dev' ,
1189 ipaddr
= dev
[ 0 ]. get_status_field ( 'ip_address' )
1190 if ipaddr
!= '10.174.65.207' :
1191 raise Exception ( "IP address not in STATUS output" )
1193 subprocess
. call ([ 'ip' , 'addr' , 'del' , '10.174.65.207/32' , 'dev' ,
1196 def test_wpas_ctrl_neighbor_rep_req ( dev
, apdev
):
1197 """wpa_supplicant ctrl_iface NEIGHBOR_REP_REQUEST"""
1198 params
= { "ssid" : "test" }
1199 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
1200 params
= { "ssid" : "test2" , "radio_measurements" : "1" }
1201 hostapd
. add_ap ( apdev
[ 1 ][ 'ifname' ], params
)
1203 dev
[ 0 ]. connect ( "test" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1204 if "FAIL" not in dev
[ 0 ]. request ( "NEIGHBOR_REP_REQUEST" ):
1205 raise Exception ( "Request succeeded unexpectedly" )
1206 if "FAIL" not in dev
[ 0 ]. request ( "NEIGHBOR_REP_REQUEST ssid=abcdef" ):
1207 raise Exception ( "Request succeeded unexpectedly" )
1208 dev
[ 0 ]. request ( "DISCONNECT" )
1210 rrm
= int ( dev
[ 0 ]. get_driver_status_field ( "capa.rrm_flags" ), 16 )
1211 if rrm
& 0x5 != 0x5 :
1212 logger
. info ( "Driver does not support required RRM capabilities - skip rest of the test case" )
1215 dev
[ 0 ]. connect ( "test2" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1217 # These requests are expected to get sent properly, but since hostapd does
1218 # not yet support processing of the request, these are expected to fail.
1220 if "OK" not in dev
[ 0 ]. request ( "NEIGHBOR_REP_REQUEST" ):
1221 raise Exception ( "Request failed" )
1222 ev
= dev
[ 0 ]. wait_event ([ "RRM-NEIGHBOR-REP-RECEIVED" ,
1223 "RRM-NEIGHBOR-REP-REQUEST-FAILED" ], timeout
= 10 )
1225 raise Exception ( "RRM report result not indicated" )
1226 logger
. info ( "RRM result: " + ev
)
1228 if "OK" not in dev
[ 0 ]. request ( "NEIGHBOR_REP_REQUEST ssid=abcdef" ):
1229 raise Exception ( "Request failed" )
1230 ev
= dev
[ 0 ]. wait_event ([ "RRM-NEIGHBOR-REP-RECEIVED" ,
1231 "RRM-NEIGHBOR-REP-REQUEST-FAILED" ], timeout
= 10 )
1233 raise Exception ( "RRM report result not indicated" )
1234 logger
. info ( "RRM result: " + ev
)
1236 def test_wpas_ctrl_rsp ( dev
, apdev
):
1237 """wpa_supplicant ctrl_iface CTRL-RSP-"""
1238 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-" ):
1239 raise Exception ( "Request succeeded unexpectedly" )
1240 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-foo-" ):
1241 raise Exception ( "Request succeeded unexpectedly" )
1242 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-foo-1234567" ):
1243 raise Exception ( "Request succeeded unexpectedly" )
1244 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-foo-1234567:" ):
1245 raise Exception ( "Request succeeded unexpectedly" )
1246 id = dev
[ 0 ]. add_network ()
1247 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-foo- %d :" % id ):
1248 raise Exception ( "Request succeeded unexpectedly" )
1249 for req
in [ "IDENTITY" , "PASSWORD" , "NEW_PASSWORD" , "PIN" , "OTP" ,
1250 "PASSPHRASE" , "SIM" ]:
1251 if "OK" not in dev
[ 0 ]. request ( "CTRL-RSP- %s-%d :" % ( req
, id )):
1252 raise Exception ( "Request failed unexpectedly" )
1253 if "OK" not in dev
[ 0 ]. request ( "CTRL-RSP- %s-%d :" % ( req
, id )):
1254 raise Exception ( "Request failed unexpectedly" )
1256 def test_wpas_ctrl_vendor ( dev
, apdev
):
1257 """wpa_supplicant ctrl_iface VENDOR"""
1264 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR " + cmd
):
1265 raise Exception ( "Invalid VENDOR command accepted: " + cmd
)
1267 def test_wpas_ctrl_mgmt_tx ( dev
, apdev
):
1268 """wpa_supplicant ctrl_iface MGMT_TX"""
1270 "00:11:22:33:44:55 foo" ,
1271 "00:11:22:33:44:55 11:22:33:44:55:66" ,
1272 "00:11:22:33:44:55 11:22:33:44:55:66 freq=0 no_cck=0 wait_time=0 action=123" ,
1273 "00:11:22:33:44:55 11:22:33:44:55:66 action=12qq" ]
1275 if "FAIL" not in dev
[ 0 ]. request ( "MGMT_TX " + cmd
):
1276 raise Exception ( "Invalid MGMT_TX command accepted: " + cmd
)
1278 if "OK" not in dev
[ 0 ]. request ( "MGMT_TX_DONE" ):
1279 raise Exception ( "MGMT_TX_DONE failed" )
1281 def test_wpas_ctrl_driver_event ( dev
, apdev
):
1282 """wpa_supplicant ctrl_iface DRIVER_EVENT"""
1283 if "FAIL" not in dev
[ 0 ]. request ( "DRIVER_EVENT foo" ):
1284 raise Exception ( "Invalid DRIVER_EVENT accepted" )
1286 def test_wpas_ctrl_eapol_rx ( dev
, apdev
):
1287 """wpa_supplicant ctrl_iface EAPOL_RX"""
1289 "00:11:22:33:44:55 123" ,
1290 "00:11:22:33:44:55 12qq" ]
1292 if "FAIL" not in dev
[ 0 ]. request ( "EAPOL_RX " + cmd
):
1293 raise Exception ( "Invalid EAPOL_RX command accepted: " + cmd
)
1295 def test_wpas_ctrl_data_test ( dev
, apdev
):
1296 """wpa_supplicant ctrl_iface DATA_TEST"""
1297 dev
[ 0 ]. request ( "DATA_TEST_CONFIG 0" )
1298 if "FAIL" not in dev
[ 0 ]. request ( "DATA_TEST_TX 00:11:22:33:44:55 00:11:22:33:44:55 0" ):
1299 raise Exception ( "DATA_TEST_TX accepted when not in test mode" )
1302 if "OK" not in dev
[ 0 ]. request ( "DATA_TEST_CONFIG 1" ):
1303 raise Exception ( "DATA_TEST_CONFIG failed" )
1304 if "OK" not in dev
[ 0 ]. request ( "DATA_TEST_CONFIG 1" ):
1305 raise Exception ( "DATA_TEST_CONFIG failed" )
1307 "00:11:22:33:44:55 foo" ,
1308 "00:11:22:33:44:55 00:11:22:33:44:55 -1" ,
1309 "00:11:22:33:44:55 00:11:22:33:44:55 256" ]
1311 if "FAIL" not in dev
[ 0 ]. request ( "DATA_TEST_TX " + cmd
):
1312 raise Exception ( "Invalid DATA_TEST_TX command accepted: " + cmd
)
1313 if "OK" not in dev
[ 0 ]. request ( "DATA_TEST_TX 00:11:22:33:44:55 00:11:22:33:44:55 0" ):
1314 raise Exception ( "DATA_TEST_TX failed" )
1316 dev
[ 0 ]. request ( "DATA_TEST_CONFIG 0" )
1320 "00112233445566778899aabbccdde" ,
1321 "00112233445566778899aabbccdq" ]
1323 if "FAIL" not in dev
[ 0 ]. request ( "DATA_TEST_FRAME " + cmd
):
1324 raise Exception ( "Invalid DATA_TEST_FRAME command accepted: " + cmd
)
1326 if "OK" not in dev
[ 0 ]. request ( "DATA_TEST_FRAME 00112233445566778899aabbccddee" ):
1327 raise Exception ( "DATA_TEST_FRAME failed" )
1329 def test_wpas_ctrl_vendor_elem ( dev
, apdev
):
1330 """wpa_supplicant ctrl_iface VENDOR_ELEM"""
1331 if "OK" not in dev
[ 0 ]. request ( "VENDOR_ELEM_ADD 1 " ):
1332 raise Exception ( "VENDOR_ELEM_ADD failed" )
1339 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR_ELEM_ADD " + cmd
):
1340 raise Exception ( "Invalid VENDOR_ELEM_ADD command accepted: " + cmd
)
1345 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR_ELEM_GET " + cmd
):
1346 raise Exception ( "Invalid VENDOR_ELEM_GET command accepted: " + cmd
)
1348 dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE 1 *" )
1358 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE " + cmd
):
1359 raise Exception ( "Invalid VENDOR_ELEM_REMOVE command accepted: " + cmd
)
1361 dev
[ 0 ]. request ( "VENDOR_ELEM_ADD 1 000100" )
1362 if "OK" not in dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE 1 " ):
1363 raise Exception ( "VENDOR_ELEM_REMOVE failed" )
1372 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE " + cmd
):
1373 raise Exception ( "Invalid VENDOR_ELEM_REMOVE command accepted: " + cmd
)
1374 if "OK" not in dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE 1 000100" ):
1375 raise Exception ( "VENDOR_ELEM_REMOVE failed" )
1377 def test_wpas_ctrl_misc ( dev
, apdev
):
1378 """wpa_supplicant ctrl_iface and miscellaneous commands"""
1379 if "OK" not in dev
[ 0 ]. request ( "RELOG" ):
1380 raise Exception ( "RELOG failed" )
1381 if dev
[ 0 ]. request ( "IFNAME" ) != dev
[ 0 ]. ifname
:
1382 raise Exception ( "IFNAME returned unexpected response" )
1383 if "FAIL" not in dev
[ 0 ]. request ( "REATTACH" ):
1384 raise Exception ( "REATTACH accepted while disabled" )
1385 if "OK" not in dev
[ 2 ]. request ( "RECONFIGURE" ):
1386 raise Exception ( "RECONFIGURE failed" )
1387 if "FAIL" in dev
[ 0 ]. request ( "INTERFACE_LIST" ):
1388 raise Exception ( "INTERFACE_LIST failed" )
1389 if "UNKNOWN COMMAND" not in dev
[ 0 ]. request ( "FOO" ):
1390 raise Exception ( "Unknown command accepted" )
1392 if "FAIL" not in dev
[ 0 ]. global_request ( "INTERFACE_REMOVE foo" ):
1393 raise Exception ( "Invalid INTERFACE_REMOVE accepted" )
1394 if "FAIL" not in dev
[ 0 ]. global_request ( "SET foo" ):
1395 raise Exception ( "Invalid global SET accepted" )
1397 def test_wpas_ctrl_dump ( dev
, apdev
):
1398 """wpa_supplicant ctrl_iface and DUMP/GET global parameters"""
1399 vals
= dev
[ 0 ]. get_config ()
1400 logger
. info ( "Config values from DUMP: " + str ( vals
))
1402 res
= dev
[ 0 ]. request ( "GET " + field
)
1405 if res
!= vals
[ field
]:
1406 print "'{}' != '{}'" . format ( res
, vals
[ field
])
1407 raise Exception ( "Mismatch in config field " + field
)
1408 if "beacon_int" not in vals
:
1409 raise Exception ( "Missing config field" )
1411 def test_wpas_ctrl_interface_add ( dev
, apdev
):
1412 """wpa_supplicant INTERFACE_ADD/REMOVE with vif creation/removal"""
1413 hapd
= hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], { "ssid" : "open" })
1414 dev
[ 0 ]. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1415 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1417 ifname
= "test-" + dev
[ 0 ]. ifname
1418 dev
[ 0 ]. interface_add ( ifname
, create
= True )
1419 wpas
= WpaSupplicant ( ifname
= ifname
)
1420 wpas
. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1421 hwsim_utils
. test_connectivity ( wpas
, hapd
)
1422 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1423 dev
[ 0 ]. global_request ( "INTERFACE_REMOVE " + ifname
)
1424 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1426 def test_wpas_ctrl_interface_add_many ( dev
, apdev
):
1427 """wpa_supplicant INTERFACE_ADD/REMOVE with vif creation/removal (many)"""
1429 _test_wpas_ctrl_interface_add_many ( dev
, apdev
)
1432 ifname
= "test %d- " % i
+ dev
[ 0 ]. ifname
1433 dev
[ 0 ]. global_request ( "INTERFACE_REMOVE " + ifname
)
1435 def _test_wpas_ctrl_interface_add_many ( dev
, apdev
):
1436 hapd
= hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], { "ssid" : "open" })
1437 dev
[ 0 ]. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1438 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1442 ifname
= "test %d- " % i
+ dev
[ 0 ]. ifname
1443 dev
[ 0 ]. interface_add ( ifname
, create
= True )
1444 wpas
= WpaSupplicant ( ifname
= ifname
)
1445 wpas
. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1448 hwsim_utils
. test_connectivity ( wpas
, hapd
)
1450 def test_wpas_ctrl_interface_add2 ( dev
, apdev
):
1451 """wpa_supplicant INTERFACE_ADD/REMOVE with vif without creation/removal"""
1452 ifname
= "test-ext-" + dev
[ 0 ]. ifname
1454 _test_wpas_ctrl_interface_add2 ( dev
, apdev
, ifname
)
1456 subprocess
. call ([ 'iw' , 'dev' , ifname
, 'del' ])
1458 def _test_wpas_ctrl_interface_add2 ( dev
, apdev
, ifname
):
1459 hapd
= hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], { "ssid" : "open" })
1460 dev
[ 0 ]. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1461 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1463 subprocess
. call ([ 'iw' , 'dev' , dev
[ 0 ]. ifname
, 'interface' , 'add' , ifname
,
1465 dev
[ 0 ]. interface_add ( ifname
, set_ifname
= False , all_params
= True )
1466 wpas
= WpaSupplicant ( ifname
= ifname
)
1467 wpas
. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1468 hwsim_utils
. test_connectivity ( wpas
, hapd
)
1469 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1471 dev
[ 0 ]. global_request ( "INTERFACE_REMOVE " + ifname
)
1472 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1474 def test_wpas_ctrl_wait ( dev
, apdev
, test_params
):
1475 """wpa_supplicant control interface wait for client"""
1476 logfile
= os
. path
. join ( test_params
[ 'logdir' ], 'wpas_ctrl_wait.log-wpas' )
1477 pidfile
= os
. path
. join ( test_params
[ 'logdir' ], 'wpas_ctrl_wait.pid-wpas' )
1478 conffile
= os
. path
. join ( test_params
[ 'logdir' ], 'wpas_ctrl_wait.conf' )
1479 with
open ( conffile
, 'w' ) as f
:
1480 f
. write ( "ctrl_interface=DIR=/var/run/wpa_supplicant \n " )
1482 prg
= os
. path
. join ( test_params
[ 'logdir' ],
1483 'alt-wpa_supplicant/wpa_supplicant/wpa_supplicant' )
1484 if not os
. path
. exists ( prg
):
1485 prg
= '../../wpa_supplicant/wpa_supplicant'
1487 cmd
= subprocess
. Popen ( arg
, stdout
= subprocess
. PIPE
)
1488 out
= cmd
. communicate ()[ 0 ]
1490 tracing
= "Linux tracing" in out
1492 with
HWSimRadio () as ( radio
, iface
):
1493 arg
= [ prg
, '-BdddW' , '-P' , pidfile
, '-f' , logfile
,
1494 '-Dnl80211' , '-c' , conffile
, '-i' , iface
]
1497 logger
. info ( "Start wpa_supplicant: " + str ( arg
))
1498 subprocess
. call ( arg
)
1499 wpas
= WpaSupplicant ( ifname
= iface
)
1500 if "PONG" not in wpas
. request ( "PING" ):
1501 raise Exception ( "Could not PING wpa_supplicant" )
1502 if not os
. path
. exists ( pidfile
):
1503 raise Exception ( "PID file not created" )
1504 if "OK" not in wpas
. request ( "TERMINATE" ):
1505 raise Exception ( "Could not TERMINATE" )
1506 ev
= wpas
. wait_event ([ "CTRL-EVENT-TERMINATING" ], timeout
= 2 )
1508 raise Exception ( "No termination event received" )
1510 if not os
. path
. exists ( pidfile
):
1513 if os
. path
. exists ( pidfile
):
1514 raise Exception ( "PID file not removed" )