]>
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 ()
13 from wpasupplicant
import WpaSupplicant
14 from utils
import alloc_fail
16 def test_wpas_ctrl_network ( dev
):
17 """wpa_supplicant ctrl_iface network set/get"""
18 id = dev
[ 0 ]. add_network ()
20 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id )):
21 raise Exception ( "Unexpected success for invalid SET_NETWORK" )
22 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + " name" ):
23 raise Exception ( "Unexpected success for invalid SET_NETWORK" )
24 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id + 1 ) + " proto OPEN" ):
25 raise Exception ( "Unexpected success for invalid network id" )
26 if "FAIL" not in dev
[ 0 ]. request ( "GET_NETWORK " + str ( id )):
27 raise Exception ( "Unexpected success for invalid GET_NETWORK" )
28 if "FAIL" not in dev
[ 0 ]. request ( "GET_NETWORK " + str ( id + 1 ) + " proto" ):
29 raise Exception ( "Unexpected success for invalid network id" )
31 tests
= (( "key_mgmt" , "WPA-PSK WPA-EAP IEEE8021X NONE WPA-NONE FT-PSK FT-EAP WPA-PSK-SHA256 WPA-EAP-SHA256" ),
32 ( "pairwise" , "CCMP-256 GCMP-256 CCMP GCMP TKIP" ),
33 ( "group" , "CCMP-256 GCMP-256 CCMP GCMP TKIP WEP104 WEP40" ),
34 ( "auth_alg" , "OPEN SHARED LEAP" ),
35 ( "scan_freq" , "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15" ),
36 ( "freq_list" , "2412 2417" ),
38 ( "bssid" , "00:11:22:33:44:55" ),
39 ( "proto" , "WPA RSN OSEN" ),
41 ( "go_p2p_dev_addr" , "22:33:44:55:66:aa" ),
42 ( "p2p_client_list" , "22:33:44:55:66:bb 02:11:22:33:44:55" ))
44 dev
[ 0 ]. set_network_quoted ( id , "ssid" , "test" )
45 for field
, value
in tests
:
46 dev
[ 0 ]. set_network ( id , field
, value
)
47 res
= dev
[ 0 ]. get_network ( id , field
)
49 raise Exception ( "Unexpected response for '" + field
+ "': '" + res
+ "'" )
51 q_tests
= (( "identity" , "hello" ),
52 ( "anonymous_identity" , "foo@nowhere.com" ))
53 for field
, value
in q_tests
:
54 dev
[ 0 ]. set_network_quoted ( id , field
, value
)
55 res
= dev
[ 0 ]. get_network ( id , field
)
56 if res
!= '"' + value
+ '"' :
57 raise Exception ( "Unexpected quoted response for '" + field
+ "': '" + res
+ "'" )
59 get_tests
= (( "foo" , None ), ( "ssid" , '"test"' ))
60 for field
, value
in get_tests
:
61 res
= dev
[ 0 ]. get_network ( id , field
)
63 raise Exception ( "Unexpected response for '" + field
+ "': '" + res
+ "'" )
65 if dev
[ 0 ]. get_network ( id , "password" ):
66 raise Exception ( "Unexpected response for 'password'" )
67 dev
[ 0 ]. set_network_quoted ( id , "password" , "foo" )
68 if dev
[ 0 ]. get_network ( id , "password" ) != '*' :
69 raise Exception ( "Unexpected response for 'password' (expected *)" )
70 dev
[ 0 ]. set_network ( id , "password" , "hash:12345678901234567890123456789012" )
71 if dev
[ 0 ]. get_network ( id , "password" ) != '*' :
72 raise Exception ( "Unexpected response for 'password' (expected *)" )
73 dev
[ 0 ]. set_network ( id , "password" , "NULL" )
74 if dev
[ 0 ]. get_network ( id , "password" ):
75 raise Exception ( "Unexpected response for 'password'" )
76 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + " password hash:12" ):
77 raise Exception ( "Unexpected success for invalid password hash" )
78 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + " password hash:123456789012345678x0123456789012" ):
79 raise Exception ( "Unexpected success for invalid password hash" )
81 dev
[ 0 ]. set_network ( id , "identity" , "414243" )
82 if dev
[ 0 ]. get_network ( id , "identity" ) != '"ABC"' :
83 raise Exception ( "Unexpected identity hex->text response" )
85 dev
[ 0 ]. set_network ( id , "identity" , 'P"abc \n def"' )
86 if dev
[ 0 ]. get_network ( id , "identity" ) != "6162630a646566" :
87 raise Exception ( "Unexpected identity printf->hex response" )
89 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' identity P"foo' ):
90 raise Exception ( "Unexpected success for invalid identity string" )
92 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' identity 12x3' ):
93 raise Exception ( "Unexpected success for invalid identity string" )
96 if "FAIL" in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' wep_key' + str ( i
) + ' aabbccddee' ):
97 raise Exception ( "Unexpected wep_key set failure" )
98 if dev
[ 0 ]. get_network ( id , "wep_key" + str ( i
)) != '*' :
99 raise Exception ( "Unexpected wep_key get failure" )
101 if "FAIL" in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-00:11:22:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' ):
102 raise Exception ( "Unexpected failure for psk_list string" )
104 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list 00:11:x2:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' ):
105 raise Exception ( "Unexpected success for invalid psk_list string" )
107 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-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:22: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-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde' ):
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-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdex' ):
117 raise Exception ( "Unexpected success for invalid psk_list string" )
119 if dev
[ 0 ]. get_network ( id , "psk_list" ):
120 raise Exception ( "Unexpected psk_list get response" )
122 if dev
[ 0 ]. list_networks ()[ 0 ][ 'ssid' ] != "test" :
123 raise Exception ( "Unexpected ssid in LIST_NETWORKS" )
124 dev
[ 0 ]. set_network ( id , "ssid" , "NULL" )
125 if dev
[ 0 ]. list_networks ()[ 0 ][ 'ssid' ] != "" :
126 raise Exception ( "Unexpected ssid in LIST_NETWORKS after clearing it" )
128 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' ssid "0123456789abcdef0123456789abcdef0"' ):
129 raise Exception ( "Too long SSID accepted" )
130 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' scan_ssid qwerty' ):
131 raise Exception ( "Invalid integer accepted" )
132 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' scan_ssid 2' ):
133 raise Exception ( "Too large integer accepted" )
134 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' psk 12345678' ):
135 raise Exception ( "Invalid PSK accepted" )
136 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' psk "1234567"' ):
137 raise Exception ( "Too short PSK accepted" )
138 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' psk "1234567890123456789012345678901234567890123456789012345678901234"' ):
139 raise Exception ( "Too long PSK accepted" )
140 dev
[ 0 ]. set_network_quoted ( id , "psk" , "123456768" );
141 dev
[ 0 ]. set_network_quoted ( id , "psk" , "123456789012345678901234567890123456789012345678901234567890123" );
142 if dev
[ 0 ]. get_network ( id , "psk" ) != '*' :
143 raise Exception ( "Unexpected psk read result" );
145 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' eap UNKNOWN' ):
146 raise Exception ( "Unknown EAP method accepted" )
148 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' password "foo' ):
149 raise Exception ( "Invalid password accepted" )
151 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' wep_key0 "foo' ):
152 raise Exception ( "Invalid WEP key accepted" )
153 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' wep_key0 "12345678901234567"' ):
154 raise Exception ( "Too long WEP key accepted" )
155 # too short WEP key is ignored
156 dev
[ 0 ]. set_network_quoted ( id , "wep_key0" , "1234" )
157 dev
[ 0 ]. set_network_quoted ( id , "wep_key1" , "12345" )
158 dev
[ 0 ]. set_network_quoted ( id , "wep_key2" , "1234567890123" )
159 dev
[ 0 ]. set_network_quoted ( id , "wep_key3" , "1234567890123456" )
161 dev
[ 0 ]. set_network ( id , "go_p2p_dev_addr" , "any" )
162 if dev
[ 0 ]. get_network ( id , "go_p2p_dev_addr" ) is not None :
163 raise Exception ( "Unexpected go_p2p_dev_addr value" )
164 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' go_p2p_dev_addr 00:11:22:33:44' ):
165 raise Exception ( "Invalid go_p2p_dev_addr accepted" )
166 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' p2p_client_list 00:11:22:33:44' ):
167 raise Exception ( "Invalid p2p_client_list accepted" )
168 if "FAIL" in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' p2p_client_list 00:11:22:33:44:55 00:1' ):
169 raise Exception ( "p2p_client_list truncation workaround failed" )
170 if dev
[ 0 ]. get_network ( id , "p2p_client_list" ) != "00:11:22:33:44:55" :
171 raise Exception ( "p2p_client_list truncation workaround did not work" )
173 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' auth_alg ' ):
174 raise Exception ( "Empty auth_alg accepted" )
175 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' auth_alg FOO' ):
176 raise Exception ( "Invalid auth_alg accepted" )
178 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' proto ' ):
179 raise Exception ( "Empty proto accepted" )
180 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' proto FOO' ):
181 raise Exception ( "Invalid proto accepted" )
183 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' pairwise ' ):
184 raise Exception ( "Empty pairwise accepted" )
185 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' pairwise FOO' ):
186 raise Exception ( "Invalid pairwise accepted" )
187 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' pairwise WEP40' ):
188 raise Exception ( "Invalid pairwise accepted" )
190 if "OK" not in dev
[ 0 ]. request ( 'BSSID ' + str ( id ) + ' 00:11:22:33:44:55' ):
191 raise Exception ( "Unexpected BSSID failure" )
192 if dev
[ 0 ]. request ( "GET_NETWORK 0 bssid" ) != '00:11:22:33:44:55' :
193 raise Exception ( "BSSID command did not set network bssid" )
194 if "OK" not in dev
[ 0 ]. request ( 'BSSID ' + str ( id ) + ' 00:00:00:00:00:00' ):
195 raise Exception ( "Unexpected BSSID failure" )
196 if "FAIL" not in dev
[ 0 ]. request ( "GET_NETWORK 0 bssid" ):
197 raise Exception ( "bssid claimed configured after clearing" )
198 if "FAIL" not in dev
[ 0 ]. request ( 'BSSID 123 00:11:22:33:44:55' ):
199 raise Exception ( "Unexpected BSSID success" )
200 if "FAIL" not in dev
[ 0 ]. request ( 'BSSID ' + str ( id ) + ' 00:11:22:33:44' ):
201 raise Exception ( "Unexpected BSSID success" )
202 if "FAIL" not in dev
[ 0 ]. request ( 'BSSID ' + str ( id )):
203 raise Exception ( "Unexpected BSSID success" )
205 def test_wpas_ctrl_many_networks ( dev
, apdev
):
206 """wpa_supplicant ctrl_iface LIST_NETWORKS with huge number of networks"""
207 for i
in range ( 1000 ):
208 id = dev
[ 0 ]. add_network ()
209 res
= dev
[ 0 ]. request ( "LIST_NETWORKS" )
211 raise Exception ( "Last added network was unexpectedly included" )
212 res
= dev
[ 0 ]. request ( "LIST_NETWORKS LAST_ID= %d " % ( id - 2 ))
213 if str ( id ) not in res
:
214 raise Exception ( "Last added network was not present when using LAST_ID" )
216 def test_wpas_ctrl_dup_network ( dev
, apdev
):
217 """wpa_supplicant ctrl_iface DUP_NETWORK"""
219 passphrase
= 'qwertyuiop'
220 params
= hostapd
. wpa2_params ( ssid
= ssid
, passphrase
= passphrase
)
221 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
223 src
= dev
[ 0 ]. connect ( "another" , psk
= passphrase
, scan_freq
= "2412" ,
224 only_add_network
= True )
225 id = dev
[ 0 ]. add_network ()
226 dev
[ 0 ]. set_network_quoted ( id , "ssid" , ssid
)
227 for f
in [ "key_mgmt" , "psk" , "scan_freq" ]:
228 res
= dev
[ 0 ]. request ( "DUP_NETWORK {} {} {}" . format ( src
, id , f
))
230 raise Exception ( "DUP_NETWORK failed" )
231 dev
[ 0 ]. connect_network ( id )
233 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK " ):
234 raise Exception ( "Unexpected DUP_NETWORK success" )
235 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK %d " % id ):
236 raise Exception ( "Unexpected DUP_NETWORK success" )
237 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK %d %d " % ( id , id )):
238 raise Exception ( "Unexpected DUP_NETWORK success" )
239 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK 123456 1234567 " ):
240 raise Exception ( "Unexpected DUP_NETWORK success" )
241 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK %d 123456 " % id ):
242 raise Exception ( "Unexpected DUP_NETWORK success" )
243 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK %d %d foo" % ( id , id )):
244 raise Exception ( "Unexpected DUP_NETWORK success" )
245 dev
[ 0 ]. request ( "DISCONNECT" )
246 if "OK" not in dev
[ 0 ]. request ( "DUP_NETWORK %d %d ssid" % ( id , id )):
247 raise Exception ( "Unexpected DUP_NETWORK failure" )
251 ev
= dev
. wait_event ([ "CRED-ADDED" ])
253 raise Exception ( "Missing CRED-ADDED event" )
254 if " " + str ( id ) not in ev
:
255 raise Exception ( "CRED-ADDED event without matching id" )
258 def set_cred ( dev
, id , field
, value
):
259 dev
. set_cred ( id , field
, value
)
260 ev
= dev
. wait_event ([ "CRED-MODIFIED" ])
262 raise Exception ( "Missing CRED-MODIFIED event" )
263 if " " + str ( id ) + " " not in ev
:
264 raise Exception ( "CRED-MODIFIED event without matching id" )
266 raise Exception ( "CRED-MODIFIED event without matching field" )
268 def set_cred_quoted ( dev
, id , field
, value
):
269 dev
. set_cred_quoted ( id , field
, value
)
270 ev
= dev
. wait_event ([ "CRED-MODIFIED" ])
272 raise Exception ( "Missing CRED-MODIFIED event" )
273 if " " + str ( id ) + " " not in ev
:
274 raise Exception ( "CRED-MODIFIED event without matching id" )
276 raise Exception ( "CRED-MODIFIED event without matching field" )
278 def remove_cred ( dev
, id ):
280 ev
= dev
. wait_event ([ "CRED-REMOVED" ])
282 raise Exception ( "Missing CRED-REMOVED event" )
283 if " " + str ( id ) not in ev
:
284 raise Exception ( "CRED-REMOVED event without matching id" )
286 def test_wpas_ctrl_cred ( dev
):
287 """wpa_supplicant ctrl_iface cred set"""
288 id1
= add_cred ( dev
[ 0 ])
289 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id1
+ 1 ) + " temporary 1" ):
290 raise Exception ( "SET_CRED succeeded unexpectedly on unknown cred id" )
291 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id1
)):
292 raise Exception ( "Invalid SET_CRED succeeded unexpectedly" )
293 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id1
) + " temporary" ):
294 raise Exception ( "Invalid SET_CRED succeeded unexpectedly" )
295 if "FAIL" not in dev
[ 0 ]. request ( "GET_CRED " + str ( id1
+ 1 ) + " temporary" ):
296 raise Exception ( "GET_CRED succeeded unexpectedly on unknown cred id" )
297 if "FAIL" not in dev
[ 0 ]. request ( "GET_CRED " + str ( id1
)):
298 raise Exception ( "Invalid GET_CRED succeeded unexpectedly" )
299 if "FAIL" not in dev
[ 0 ]. request ( "GET_CRED " + str ( id1
) + " foo" ):
300 raise Exception ( "Invalid GET_CRED succeeded unexpectedly" )
301 id = add_cred ( dev
[ 0 ])
302 id2
= add_cred ( dev
[ 0 ])
303 set_cred ( dev
[ 0 ], id , "temporary" , "1" )
304 set_cred ( dev
[ 0 ], id , "priority" , "1" )
305 set_cred ( dev
[ 0 ], id , "pcsc" , "1" )
306 set_cred_quoted ( dev
[ 0 ], id , "private_key_passwd" , "test" )
307 set_cred_quoted ( dev
[ 0 ], id , "domain_suffix_match" , "test" )
308 set_cred_quoted ( dev
[ 0 ], id , "phase1" , "test" )
309 set_cred_quoted ( dev
[ 0 ], id , "phase2" , "test" )
311 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " eap FOO" ):
312 raise Exception ( "Unexpected success on unknown EAP method" )
314 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " username 12xa" ):
315 raise Exception ( "Unexpected success on invalid string" )
317 for i
in ( "11" , "1122" , "112233445566778899aabbccddeeff00" ):
318 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " roaming_consortium " + i
):
319 raise Exception ( "Unexpected success on invalid roaming_consortium" )
321 dev
[ 0 ]. set_cred ( id , "excluded_ssid" , "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff" )
322 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " excluded_ssid 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00" ):
323 raise Exception ( "Unexpected success on invalid excluded_ssid" )
325 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " foo 4142" ):
326 raise Exception ( "Unexpected success on unknown field" )
328 id3
= add_cred ( dev
[ 0 ])
329 id4
= add_cred ( dev
[ 0 ])
330 if len ( dev
[ 0 ]. request ( "LIST_CREDS" ). splitlines ()) != 6 :
331 raise Exception ( "Unexpected LIST_CREDS result(1)" )
333 remove_cred ( dev
[ 0 ], id1
)
334 remove_cred ( dev
[ 0 ], id3
)
335 remove_cred ( dev
[ 0 ], id4
)
336 remove_cred ( dev
[ 0 ], id2
)
337 remove_cred ( dev
[ 0 ], id )
338 if "FAIL" not in dev
[ 0 ]. request ( "REMOVE_CRED 1" ):
339 raise Exception ( "Unexpected success on invalid remove cred" )
340 if len ( dev
[ 0 ]. request ( "LIST_CREDS" ). splitlines ()) != 1 :
341 raise Exception ( "Unexpected LIST_CREDS result(2)" )
343 id = add_cred ( dev
[ 0 ])
344 values
= [ ( "temporary" , "1" , False ),
345 ( "temporary" , "0" , False ),
346 ( "pcsc" , "1" , False ),
347 ( "realm" , "example.com" , True ),
348 ( "username" , "user@example.com" , True ),
349 ( "password" , "foo" , True , "*" ),
350 ( "ca_cert" , "ca.pem" , True ),
351 ( "client_cert" , "user.pem" , True ),
352 ( "private_key" , "key.pem" , True ),
353 ( "private_key_passwd" , "foo" , True , "*" ),
354 ( "imsi" , "310026-000000000" , True ),
355 ( "milenage" , "foo" , True , "*" ),
356 ( "domain_suffix_match" , "example.com" , True ),
357 ( "domain" , "example.com" , True ),
358 ( "domain" , "example.org" , True , "example.com \n example.org" ),
359 ( "roaming_consortium" , "0123456789" , False ),
360 ( "required_roaming_consortium" , "456789" , False ),
361 ( "eap" , "TTLS" , False ),
362 ( "phase1" , "foo=bar1" , True ),
363 ( "phase2" , "foo=bar2" , True ),
364 ( "excluded_ssid" , "test" , True ),
365 ( "excluded_ssid" , "foo" , True , "test \n foo" ),
366 ( "roaming_partner" , "example.com,0,4,*" , True ),
367 ( "roaming_partner" , "example.org,1,2,US" , True ,
368 "example.com,0,4,* \n example.org,1,2,US" ),
369 ( "update_identifier" , "4" , False ),
370 ( "provisioning_sp" , "sp.example.com" , True ),
371 ( "sp_priority" , "7" , False ),
372 ( "min_dl_bandwidth_home" , "100" , False ),
373 ( "min_ul_bandwidth_home" , "101" , False ),
374 ( "min_dl_bandwidth_roaming" , "102" , False ),
375 ( "min_ul_bandwidth_roaming" , "103" , False ),
376 ( "max_bss_load" , "57" , False ),
377 ( "req_conn_capab" , "6:22,80,443" , False ),
378 ( "req_conn_capab" , "17:500" , False , "6:22,80,443 \n 17:500" ),
379 ( "req_conn_capab" , "50" , False , "6:22,80,443 \n 17:500 \n 50" ),
380 ( "ocsp" , "1" , False ) ]
383 set_cred_quoted ( dev
[ 0 ], id , v
[ 0 ], v
[ 1 ])
385 set_cred ( dev
[ 0 ], id , v
[ 0 ], v
[ 1 ])
386 val
= dev
[ 0 ]. get_cred ( id , v
[ 0 ])
392 raise Exception ( "Unexpected GET_CRED value for {}: {} != {}" . format ( v
[ 0 ], val
, expect
))
393 creds
= dev
[ 0 ]. request ( "LIST_CREDS" ). splitlines ()
395 raise Exception ( "Unexpected LIST_CREDS result(3)" )
396 if creds
[ 1 ] != "0 \t example.com \t user@example.com \t example.com \t 310026-000000000" :
397 raise Exception ( "Unexpected LIST_CREDS value" )
398 remove_cred ( dev
[ 0 ], id )
399 if len ( dev
[ 0 ]. request ( "LIST_CREDS" ). splitlines ()) != 1 :
400 raise Exception ( "Unexpected LIST_CREDS result(4)" )
402 id = add_cred ( dev
[ 0 ])
403 set_cred_quoted ( dev
[ 0 ], id , "domain" , "foo.example.com" )
404 id = add_cred ( dev
[ 0 ])
405 set_cred_quoted ( dev
[ 0 ], id , "domain" , "bar.example.com" )
406 id = add_cred ( dev
[ 0 ])
407 set_cred_quoted ( dev
[ 0 ], id , "domain" , "foo.example.com" )
408 if "OK" not in dev
[ 0 ]. request ( "REMOVE_CRED sp_fqdn=foo.example.com" ):
409 raise Exception ( "REMOVE_CRED failed" )
410 creds
= dev
[ 0 ]. request ( "LIST_CREDS" )
411 if "foo.example.com" in creds
:
412 raise Exception ( "REMOVE_CRED sp_fqdn did not remove cred" )
413 if "bar.example.com" not in creds
:
414 raise Exception ( "REMOVE_CRED sp_fqdn removed incorrect cred" )
415 dev
[ 0 ]. request ( "REMOVE_CRED all" )
417 id = add_cred ( dev
[ 0 ])
418 set_cred_quoted ( dev
[ 0 ], id , "domain" , "foo.example.com" )
419 set_cred_quoted ( dev
[ 0 ], id , "provisioning_sp" , "sp.foo.example.com" )
420 id = add_cred ( dev
[ 0 ])
421 set_cred_quoted ( dev
[ 0 ], id , "domain" , "bar.example.com" )
422 set_cred_quoted ( dev
[ 0 ], id , "provisioning_sp" , "sp.bar.example.com" )
423 id = add_cred ( dev
[ 0 ])
424 set_cred_quoted ( dev
[ 0 ], id , "domain" , "foo.example.com" )
425 set_cred_quoted ( dev
[ 0 ], id , "provisioning_sp" , "sp.foo.example.com" )
426 if "OK" not in dev
[ 0 ]. request ( "REMOVE_CRED provisioning_sp=sp.foo.example.com" ):
427 raise Exception ( "REMOVE_CRED failed" )
428 creds
= dev
[ 0 ]. request ( "LIST_CREDS" )
429 if "foo.example.com" in creds
:
430 raise Exception ( "REMOVE_CRED provisioning_sp did not remove cred" )
431 if "bar.example.com" not in creds
:
432 raise Exception ( "REMOVE_CRED provisioning_sp removed incorrect cred" )
433 dev
[ 0 ]. request ( "REMOVE_CRED all" )
435 # Test large number of creds and LIST_CREDS truncation
436 dev
[ 0 ]. dump_monitor ()
437 for i
in range ( 0 , 100 ):
438 id = add_cred ( dev
[ 0 ])
439 set_cred_quoted ( dev
[ 0 ], id , "realm" , "relatively.long.realm.test %d .example.com" % i
)
440 dev
[ 0 ]. dump_monitor ()
441 creds
= dev
[ 0 ]. request ( "LIST_CREDS" )
442 for i
in range ( 0 , 100 ):
443 dev
[ 0 ]. remove_cred ( i
)
444 dev
[ 0 ]. dump_monitor ()
445 if len ( creds
) < 3900 or len ( creds
) > 4100 :
446 raise Exception ( "Unexpected LIST_CREDS length: %d " % len ( creds
))
447 if "test10.example.com" not in creds
:
448 raise Exception ( "Missing credential" )
449 if len ( creds
. splitlines ()) > 95 :
450 raise Exception ( "Too many LIST_CREDS entries in the buffer" )
452 def test_wpas_ctrl_pno ( dev
):
453 """wpa_supplicant ctrl_iface pno"""
454 if "FAIL" not in dev
[ 0 ]. request ( "SET pno 1" ):
455 raise Exception ( "Unexpected success in enabling PNO without enabled network blocks" )
456 id = dev
[ 0 ]. add_network ()
457 dev
[ 0 ]. set_network_quoted ( id , "ssid" , "test" )
458 dev
[ 0 ]. set_network ( id , "key_mgmt" , "NONE" )
459 dev
[ 0 ]. request ( "ENABLE_NETWORK " + str ( id ) + " no-connect" )
460 #mac80211_hwsim does not yet support PNO, so this fails
461 if "FAIL" not in dev
[ 0 ]. request ( "SET pno 1" ):
462 raise Exception ( "Unexpected success in enabling PNO" )
463 if "FAIL" not in dev
[ 0 ]. request ( "SET pno 1 freq=2000-3000,5180" ):
464 raise Exception ( "Unexpected success in enabling PNO" )
465 if "FAIL" not in dev
[ 0 ]. request ( "SET pno 1 freq=0-6000" ):
466 raise Exception ( "Unexpected success in enabling PNO" )
467 if "FAIL" in dev
[ 0 ]. request ( "SET pno 0" ):
468 raise Exception ( "Unexpected failure in disabling PNO" )
470 def test_wpas_ctrl_get ( dev
):
471 """wpa_supplicant ctrl_iface get"""
472 if "FAIL" in dev
[ 0 ]. request ( "GET version" ):
473 raise Exception ( "Unexpected get failure for version" )
474 if "FAIL" in dev
[ 0 ]. request ( "GET wifi_display" ):
475 raise Exception ( "Unexpected get failure for wifi_display" )
476 if "FAIL" not in dev
[ 0 ]. request ( "GET foo" ):
477 raise Exception ( "Unexpected success on get command" )
479 def test_wpas_ctrl_preauth ( dev
):
480 """wpa_supplicant ctrl_iface preauth"""
481 if "FAIL" not in dev
[ 0 ]. request ( "PREAUTH " ):
482 raise Exception ( "Unexpected success on invalid PREAUTH" )
483 if "FAIL" in dev
[ 0 ]. request ( "PREAUTH 00:11:22:33:44:55" ):
484 raise Exception ( "Unexpected failure on PREAUTH" )
486 def test_wpas_ctrl_stkstart ( dev
):
487 """wpa_supplicant ctrl_iface strkstart"""
488 if "FAIL" not in dev
[ 0 ]. request ( "STKSTART " ):
489 raise Exception ( "Unexpected success on invalid STKSTART" )
490 if "FAIL" not in dev
[ 0 ]. request ( "STKSTART 00:11:22:33:44:55" ):
491 raise Exception ( "Unexpected success on STKSTART" )
493 def test_wpas_ctrl_tdls_discover ( dev
):
494 """wpa_supplicant ctrl_iface tdls_discover"""
495 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_DISCOVER " ):
496 raise Exception ( "Unexpected success on invalid TDLS_DISCOVER" )
497 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_DISCOVER 00:11:22:33:44:55" ):
498 raise Exception ( "Unexpected success on TDLS_DISCOVER" )
500 def test_wpas_ctrl_tdls_chan_switch ( dev
):
501 """wpa_supplicant ctrl_iface tdls_chan_switch error cases"""
502 for args
in [ '' , '00:11:22:33:44:55' ]:
503 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_CANCEL_CHAN_SWITCH " + args
):
504 raise Exception ( "Unexpected success on invalid TDLS_CANCEL_CHAN_SWITCH: " + args
)
506 for args
in [ '' , 'foo ' , '00:11:22:33:44:55 ' , '00:11:22:33:44:55 q' ,
507 '00:11:22:33:44:55 81' , '00:11:22:33:44:55 81 1234' ,
508 '00:11:22:33:44:55 81 1234 center_freq1=234 center_freq2=345 bandwidth=456 sec_channel_offset=567 ht vht' ]:
509 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_CHAN_SWITCH " + args
):
510 raise Exception ( "Unexpected success on invalid TDLS_CHAN_SWITCH: " + args
)
512 def test_wpas_ctrl_addr ( dev
):
513 """wpa_supplicant ctrl_iface invalid address"""
514 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_SETUP " ):
515 raise Exception ( "Unexpected success on invalid TDLS_SETUP" )
516 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_TEARDOWN " ):
517 raise Exception ( "Unexpected success on invalid TDLS_TEARDOWN" )
518 if "FAIL" not in dev
[ 0 ]. request ( "FT_DS " ):
519 raise Exception ( "Unexpected success on invalid FT_DS" )
520 if "FAIL" not in dev
[ 0 ]. request ( "WPS_PBC 00:11:22:33:44" ):
521 raise Exception ( "Unexpected success on invalid WPS_PBC" )
522 if "FAIL" not in dev
[ 0 ]. request ( "WPS_PIN 00:11:22:33:44" ):
523 raise Exception ( "Unexpected success on invalid WPS_PIN" )
524 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC 00:11:22:33:44" ):
525 raise Exception ( "Unexpected success on invalid WPS_NFC" )
526 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44 12345670" ):
527 raise Exception ( "Unexpected success on invalid WPS_REG" )
528 if "FAIL" not in dev
[ 0 ]. request ( "IBSS_RSN 00:11:22:33:44" ):
529 raise Exception ( "Unexpected success on invalid IBSS_RSN" )
530 if "FAIL" not in dev
[ 0 ]. request ( "BLACKLIST 00:11:22:33:44" ):
531 raise Exception ( "Unexpected success on invalid BLACKLIST" )
533 def test_wpas_ctrl_wps_errors ( dev
):
534 """wpa_supplicant ctrl_iface WPS error cases"""
535 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44:55" ):
536 raise Exception ( "Unexpected success on invalid WPS_REG" )
537 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44:55 12345670 2233" ):
538 raise Exception ( "Unexpected success on invalid WPS_REG" )
539 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44:55 12345670 2233 OPEN" ):
540 raise Exception ( "Unexpected success on invalid WPS_REG" )
541 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44:55 12345670 2233 OPEN NONE" ):
542 raise Exception ( "Unexpected success on invalid WPS_REG" )
544 if "FAIL" not in dev
[ 0 ]. request ( "WPS_AP_PIN random" ):
545 raise Exception ( "Unexpected success on WPS_AP_PIN in non-AP mode" )
547 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_PIN any" ):
548 raise Exception ( "Unexpected success on invalid WPS_ER_PIN" )
550 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_LEARN 00:11:22:33:44:55" ):
551 raise Exception ( "Unexpected success on invalid WPS_ER_LEARN" )
553 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_SET_CONFIG 00:11:22:33:44:55" ):
554 raise Exception ( "Unexpected success on invalid WPS_ER_SET_CONFIG" )
556 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55" ):
557 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
558 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55 12345670" ):
559 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
560 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55 12345670 2233" ):
561 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
562 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55 12345670 2233 OPEN" ):
563 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
564 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55 12345670 2233 OPEN NONE" ):
565 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
567 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_NFC_CONFIG_TOKEN WPS" ):
568 raise Exception ( "Unexpected success on invalid WPS_ER_NFC_CONFIG_TOKEN" )
569 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_NFC_CONFIG_TOKEN FOO 00:11:22:33:44:55" ):
570 raise Exception ( "Unexpected success on invalid WPS_ER_NFC_CONFIG_TOKEN" )
571 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_NFC_CONFIG_TOKEN NDEF 00:11:22:33:44:55" ):
572 raise Exception ( "Unexpected success on invalid WPS_ER_NFC_CONFIG_TOKEN" )
574 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC_CONFIG_TOKEN FOO" ):
575 raise Exception ( "Unexpected success on invalid WPS_NFC_CONFIG_TOKEN" )
576 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC_CONFIG_TOKEN WPS FOO" ):
577 raise Exception ( "Unexpected success on invalid WPS_NFC_CONFIG_TOKEN" )
578 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC_TOKEN FOO" ):
579 raise Exception ( "Unexpected success on invalid WPS_NFC_TOKEN" )
581 def test_wpas_ctrl_config_parser ( dev
):
582 """wpa_supplicant ctrl_iface SET config parser"""
583 if "FAIL" not in dev
[ 0 ]. request ( "SET pbc_in_m1 qwerty" ):
584 raise Exception ( "Non-number accepted as integer" )
585 if "FAIL" not in dev
[ 0 ]. request ( "SET eapol_version 0" ):
586 raise Exception ( "Out-of-range value accepted" )
587 if "FAIL" not in dev
[ 0 ]. request ( "SET eapol_version 10" ):
588 raise Exception ( "Out-of-range value accepted" )
590 if "FAIL" not in dev
[ 0 ]. request ( "SET serial_number 0123456789abcdef0123456789abcdef0" ):
591 raise Exception ( "Too long string accepted" )
593 def test_wpas_ctrl_mib ( dev
):
594 """wpa_supplicant ctrl_iface MIB"""
595 mib
= dev
[ 0 ]. get_mib ()
596 if "dot11RSNAOptionImplemented" not in mib
:
597 raise Exception ( "Missing MIB entry" )
598 if mib
[ "dot11RSNAOptionImplemented" ] != "TRUE" :
599 raise Exception ( "Unexpected dot11RSNAOptionImplemented value" )
601 def test_wpas_ctrl_set_wps_params ( dev
):
602 """wpa_supplicant ctrl_iface SET config_methods"""
603 ts
= [ "config_methods label virtual_display virtual_push_button keypad" ,
604 "device_type 1-0050F204-1" ,
605 "os_version 01020300" ,
606 "uuid 12345678-9abc-def0-1234-56789abcdef0" ]
608 if "OK" not in dev
[ 2 ]. request ( "SET " + t
):
609 raise Exception ( "SET failed for: " + t
)
611 def test_wpas_ctrl_level ( dev
):
612 """wpa_supplicant ctrl_iface LEVEL"""
614 if "FAIL" not in dev
[ 2 ]. request ( "LEVEL 3" ):
615 raise Exception ( "Unexpected LEVEL success" )
616 if "OK" not in dev
[ 2 ]. mon
. request ( "LEVEL 2" ):
617 raise Exception ( "Unexpected LEVEL failure" )
618 dev
[ 2 ]. request ( "SCAN freq=2412" )
619 ev
= dev
[ 2 ]. wait_event ([ "State:" ], timeout
= 5 )
621 raise Exception ( "No debug message received" )
622 dev
[ 2 ]. wait_event ([ "CTRL-EVENT-SCAN-RESULTS" ], timeout
= 5 )
624 dev
[ 2 ]. mon
. request ( "LEVEL 3" )
626 def test_wpas_ctrl_bssid_filter ( dev
, apdev
):
627 """wpa_supplicant bssid_filter"""
629 if "OK" not in dev
[ 2 ]. request ( "SET bssid_filter " + apdev
[ 0 ][ 'bssid' ]):
630 raise Exception ( "Failed to set bssid_filter" )
631 params
= { "ssid" : "test" }
632 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
633 hostapd
. add_ap ( apdev
[ 1 ][ 'ifname' ], params
)
634 dev
[ 2 ]. scan_for_bss ( apdev
[ 0 ][ 'bssid' ], freq
= "2412" )
635 dev
[ 2 ]. scan ( freq
= "2412" )
636 bss
= dev
[ 2 ]. get_bss ( apdev
[ 0 ][ 'bssid' ])
637 if bss
is None or len ( bss
) == 0 :
638 raise Exception ( "Missing BSS data" )
639 bss
= dev
[ 2 ]. get_bss ( apdev
[ 1 ][ 'bssid' ])
640 if bss
and len ( bss
) != 0 :
641 raise Exception ( "Unexpected BSS data" )
642 dev
[ 2 ]. request ( "SET bssid_filter " )
643 dev
[ 2 ]. scan ( freq
= "2412" )
644 bss
= dev
[ 2 ]. get_bss ( apdev
[ 0 ][ 'bssid' ])
645 if bss
is None or len ( bss
) == 0 :
646 raise Exception ( "Missing BSS data" )
647 bss
= dev
[ 2 ]. get_bss ( apdev
[ 1 ][ 'bssid' ])
648 if bss
is None or len ( bss
) == 0 :
649 raise Exception ( "Missing BSS data(2)" )
650 res
= dev
[ 2 ]. request ( "SCAN_RESULTS" ). splitlines ()
651 if "test" not in res
[ 1 ] or "test" not in res
[ 2 ]:
652 raise Exception ( "SSID missing from SCAN_RESULTS" )
653 if apdev
[ 0 ][ 'bssid' ] not in res
[ 1 ] and apdev
[ 1 ][ 'bssid' ] not in res
[ 1 ]:
654 raise Exception ( "BSS1 missing from SCAN_RESULTS" )
655 if apdev
[ 0 ][ 'bssid' ] not in res
[ 2 ] and apdev
[ 1 ][ 'bssid' ] not in res
[ 2 ]:
656 raise Exception ( "BSS1 missing from SCAN_RESULTS" )
658 if "FAIL" not in dev
[ 2 ]. request ( "SET bssid_filter 00:11:22:33:44:55 00:11:22:33:44" ):
659 raise Exception ( "Unexpected success for invalid SET bssid_filter" )
661 dev
[ 2 ]. request ( "SET bssid_filter " )
663 def test_wpas_ctrl_disallow_aps ( dev
, apdev
):
664 """wpa_supplicant ctrl_iface disallow_aps"""
665 params
= { "ssid" : "test" }
666 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
668 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps bssid " ):
669 raise Exception ( "Unexpected success on invalid disallow_aps" )
670 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps bssid 00:11:22:33:44" ):
671 raise Exception ( "Unexpected success on invalid disallow_aps" )
672 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps ssid 0" ):
673 raise Exception ( "Unexpected success on invalid disallow_aps" )
674 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps ssid 4q" ):
675 raise Exception ( "Unexpected success on invalid disallow_aps" )
676 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps bssid 00:11:22:33:44:55 ssid 112233 ssid 123" ):
677 raise Exception ( "Unexpected success on invalid disallow_aps" )
678 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps ssid 000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f00" ):
679 raise Exception ( "Unexpected success on invalid disallow_aps" )
680 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps foo 112233445566" ):
681 raise Exception ( "Unexpected success on invalid disallow_aps" )
683 dev
[ 0 ]. connect ( "test" , key_mgmt
= "NONE" , scan_freq
= "2412" )
684 hostapd
. add_ap ( apdev
[ 1 ][ 'ifname' ], params
)
685 dev
[ 0 ]. dump_monitor ()
686 if "OK" not in dev
[ 0 ]. request ( "SET disallow_aps bssid 00:11:22:33:44:55 bssid 00:22:33:44:55:66" ):
687 raise Exception ( "Failed to set disallow_aps" )
688 if "OK" not in dev
[ 0 ]. request ( "SET disallow_aps bssid " + apdev
[ 0 ][ 'bssid' ]):
689 raise Exception ( "Failed to set disallow_aps" )
690 ev
= dev
[ 0 ]. wait_connected ( timeout
= 15 , error
= "Reassociation timed out" )
691 if apdev
[ 1 ][ 'bssid' ] not in ev
:
692 raise Exception ( "Unexpected BSSID" )
694 dev
[ 0 ]. dump_monitor ()
695 if "OK" not in dev
[ 0 ]. request ( "SET disallow_aps ssid " + "test" . encode ( "hex" )):
696 raise Exception ( "Failed to set disallow_aps" )
697 dev
[ 0 ]. wait_disconnected ( timeout
= 5 , error
= "Disconnection not seen" )
698 ev
= dev
[ 0 ]. wait_event ([ "CTRL-EVENT-CONNECTED" ], timeout
= 1 )
700 raise Exception ( "Unexpected reassociation" )
702 dev
[ 0 ]. request ( "DISCONNECT" )
703 dev
[ 0 ]. p2p_start_go ( freq
= 2412 )
704 if "OK" not in dev
[ 0 ]. request ( "SET disallow_aps " ):
705 raise Exception ( "Failed to set disallow_aps" )
707 def test_wpas_ctrl_blob ( dev
):
708 """wpa_supplicant ctrl_iface SET blob"""
709 if "FAIL" not in dev
[ 0 ]. request ( "SET blob foo" ):
710 raise Exception ( "Unexpected SET success" )
711 if "FAIL" not in dev
[ 0 ]. request ( "SET blob foo 0" ):
712 raise Exception ( "Unexpected SET success" )
713 if "FAIL" not in dev
[ 0 ]. request ( "SET blob foo 0q" ):
714 raise Exception ( "Unexpected SET success" )
715 if "OK" not in dev
[ 0 ]. request ( "SET blob foo 00" ):
716 raise Exception ( "Unexpected SET failure" )
717 if "OK" not in dev
[ 0 ]. request ( "SET blob foo 0011" ):
718 raise Exception ( "Unexpected SET failure" )
720 def test_wpas_ctrl_set_uapsd ( dev
):
721 """wpa_supplicant ctrl_iface SET uapsd"""
722 if "FAIL" not in dev
[ 0 ]. request ( "SET uapsd foo" ):
723 raise Exception ( "Unexpected SET success" )
724 if "FAIL" not in dev
[ 0 ]. request ( "SET uapsd 0,0,0" ):
725 raise Exception ( "Unexpected SET success" )
726 if "FAIL" not in dev
[ 0 ]. request ( "SET uapsd 0,0" ):
727 raise Exception ( "Unexpected SET success" )
728 if "FAIL" not in dev
[ 0 ]. request ( "SET uapsd 0" ):
729 raise Exception ( "Unexpected SET success" )
730 if "OK" not in dev
[ 0 ]. request ( "SET uapsd 1,1,1,1;1" ):
731 raise Exception ( "Unexpected SET failure" )
732 if "OK" not in dev
[ 0 ]. request ( "SET uapsd 0,0,0,0;0" ):
733 raise Exception ( "Unexpected SET failure" )
734 if "OK" not in dev
[ 0 ]. request ( "SET uapsd disable" ):
735 raise Exception ( "Unexpected SET failure" )
737 def test_wpas_ctrl_set ( dev
):
738 """wpa_supplicant ctrl_iface SET"""
744 "dot11RSNAConfigPMKLifetime 0" ,
745 "dot11RSNAConfigPMKReauthThreshold 101" ,
746 "dot11RSNAConfigSATimeout 0" ,
747 "wps_version_number -1" ,
748 "wps_version_number 256" ]
750 if "FAIL" not in dev
[ 0 ]. request ( "SET " + val
):
751 raise Exception ( "Unexpected SET success for " + val
)
753 vals
= [ "EAPOL::heldPeriod 60" ,
754 "EAPOL::authPeriod 30" ,
755 "EAPOL::startPeriod 30" ,
757 "dot11RSNAConfigSATimeout 60" ,
764 if "OK" not in dev
[ 0 ]. request ( "SET " + val
):
765 raise Exception ( "Unexpected SET failure for " + val
)
767 def test_wpas_ctrl_get_capability ( dev
):
768 """wpa_supplicant ctrl_iface GET_CAPABILITY"""
769 if "FAIL" not in dev
[ 0 ]. request ( "GET_CAPABILITY 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" ):
770 raise Exception ( "Unexpected success on invalid GET_CAPABILITY" )
771 if "FAIL" not in dev
[ 0 ]. request ( "GET_CAPABILITY eap foo" ):
772 raise Exception ( "Unexpected success on invalid GET_CAPABILITY" )
773 if "AP" not in dev
[ 0 ]. request ( "GET_CAPABILITY modes strict" ):
774 raise Exception ( "Unexpected GET_CAPABILITY response" )
775 res
= dev
[ 0 ]. get_capability ( "eap" )
776 if "TTLS" not in res
:
777 raise Exception ( "Unexpected GET_CAPABILITY eap response: " + str ( res
))
779 res
= dev
[ 0 ]. get_capability ( "pairwise" )
780 if "CCMP" not in res
:
781 raise Exception ( "Unexpected GET_CAPABILITY pairwise response: " + str ( res
))
783 res
= dev
[ 0 ]. get_capability ( "group" )
784 if "CCMP" not in res
:
785 raise Exception ( "Unexpected GET_CAPABILITY group response: " + str ( res
))
787 res
= dev
[ 0 ]. get_capability ( "key_mgmt" )
788 if "WPA-PSK" not in res
or "WPA-EAP" not in res
:
789 raise Exception ( "Unexpected GET_CAPABILITY key_mgmt response: " + str ( res
))
791 res
= dev
[ 0 ]. get_capability ( "proto" )
792 if "WPA" not in res
or "RSN" not in res
:
793 raise Exception ( "Unexpected GET_CAPABILITY proto response: " + str ( res
))
795 res
= dev
[ 0 ]. get_capability ( "auth_alg" )
796 if "OPEN" not in res
or "SHARED" not in res
:
797 raise Exception ( "Unexpected GET_CAPABILITY auth_alg response: " + str ( res
))
799 res
= dev
[ 0 ]. get_capability ( "modes" )
800 if "IBSS" not in res
or "AP" not in res
:
801 raise Exception ( "Unexpected GET_CAPABILITY modes response: " + str ( res
))
803 res
= dev
[ 0 ]. get_capability ( "channels" )
804 if "8" not in res
or "36" not in res
:
805 raise Exception ( "Unexpected GET_CAPABILITY channels response: " + str ( res
))
807 res
= dev
[ 0 ]. get_capability ( "freq" )
808 if "2457" not in res
or "5180" not in res
:
809 raise Exception ( "Unexpected GET_CAPABILITY freq response: " + str ( res
))
811 res
= dev
[ 0 ]. get_capability ( "tdls" )
812 if "EXTERNAL" not in res
[ 0 ]:
813 raise Exception ( "Unexpected GET_CAPABILITY tdls response: " + str ( res
))
815 res
= dev
[ 0 ]. get_capability ( "erp" )
816 if res
is None or "ERP" not in res
[ 0 ]:
817 raise Exception ( "Unexpected GET_CAPABILITY erp response: " + str ( res
))
819 if dev
[ 0 ]. get_capability ( "foo" ) is not None :
820 raise Exception ( "Unexpected GET_CAPABILITY foo response: " + str ( res
))
822 def test_wpas_ctrl_nfc_report_handover ( dev
):
823 """wpa_supplicant ctrl_iface NFC_REPORT_HANDOVER"""
834 if "FAIL" not in dev
[ 0 ]. request ( "NFC_REPORT_HANDOVER " + v
):
835 raise Exception ( "Unexpected NFC_REPORT_HANDOVER success for " + v
)
837 def test_wpas_ctrl_nfc_tag_read ( dev
):
838 """wpa_supplicant ctrl_iface WPS_NFC_TAG_READ"""
839 vals
= [ "FOO" , "0Q" , "00" , "000000" , "10000001" , "10000000" , "00000000" ,
840 "100e0000" , "100e0001ff" , "100e000411110000" , "100e0004100e0001" ]
842 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC_TAG_READ " + v
):
843 raise Exception ( "Unexpected WPS_NFC_TAG_READ success for " + v
)
845 def test_wpas_ctrl_nfc_get_handover ( dev
):
846 """wpa_supplicant ctrl_iface NFC_GET_HANDOVER"""
847 vals
= [ "FOO" , "FOO BAR" , "WPS WPS" , "WPS WPS-CR" , "WPS FOO" , "NDEF P2P" ]
849 if "FAIL" not in dev
[ 0 ]. request ( "NFC_GET_HANDOVER_REQ " + v
):
850 raise Exception ( "Unexpected NFC_GET_HANDOVER_REQ success for " + v
)
852 vals
= [ "NDEF WPS" , "NDEF P2P-CR" , "WPS P2P-CR" ]
854 if "FAIL" in dev
[ 0 ]. request ( "NFC_GET_HANDOVER_REQ " + v
):
855 raise Exception ( "Unexpected NFC_GET_HANDOVER_REQ failure for " + v
)
857 vals
= [ "FOO" , "FOO BAR" , "WPS WPS" , "WPS WPS-CR" , "WPS FOO" , "NDEF P2P" ,
858 "NDEF WPS" , "NDEF WPS uuid" ]
860 if "FAIL" not in dev
[ 0 ]. request ( "NFC_GET_HANDOVER_SEL " + v
):
861 raise Exception ( "Unexpected NFC_GET_HANDOVER_SEL success for " + v
)
863 vals
= [ "NDEF P2P-CR" , "WPS P2P-CR" , "NDEF P2P-CR-TAG" ,
866 if "FAIL" in dev
[ 0 ]. request ( "NFC_GET_HANDOVER_SEL " + v
):
867 raise Exception ( "Unexpected NFC_GET_HANDOVER_SEL failure for " + v
)
869 def get_blacklist ( dev
):
870 return dev
. request ( "BLACKLIST" ). splitlines ()
872 def test_wpas_ctrl_blacklist ( dev
):
873 """wpa_supplicant ctrl_iface BLACKLIST"""
874 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST clear" ):
875 raise Exception ( "BLACKLIST clear failed" )
876 b
= get_blacklist ( dev
[ 0 ])
878 raise Exception ( "Unexpected blacklist contents: " + str ( b
))
879 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST 00:11:22:33:44:55" ):
880 raise Exception ( "BLACKLIST add failed" )
881 b
= get_blacklist ( dev
[ 0 ])
882 if "00:11:22:33:44:55" not in b
:
883 raise Exception ( "Unexpected blacklist contents: " + str ( b
))
884 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST 00:11:22:33:44:56" ):
885 raise Exception ( "BLACKLIST add failed" )
886 b
= get_blacklist ( dev
[ 0 ])
887 if "00:11:22:33:44:55" not in b
or "00:11:22:33:44:56" not in b
:
888 raise Exception ( "Unexpected blacklist contents: " + str ( b
))
889 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST 00:11:22:33:44:56" ):
890 raise Exception ( "BLACKLIST add failed" )
891 b
= get_blacklist ( dev
[ 0 ])
892 if "00:11:22:33:44:55" not in b
or "00:11:22:33:44:56" not in b
or len ( b
) != 2 :
893 raise Exception ( "Unexpected blacklist contents: " + str ( b
))
895 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST clear" ):
896 raise Exception ( "BLACKLIST clear failed" )
897 if dev
[ 0 ]. request ( "BLACKLIST" ) != "" :
898 raise Exception ( "Unexpected blacklist contents" )
900 def test_wpas_ctrl_blacklist_oom ( dev
):
901 """wpa_supplicant ctrl_iface BLACKLIST and out-of-memory"""
902 with
alloc_fail ( dev
[ 0 ], 1 , "wpa_blacklist_add" ):
903 if "FAIL" not in dev
[ 0 ]. request ( "BLACKLIST aa:bb:cc:dd:ee:ff" ):
904 raise Exception ( "Unexpected success with allocation failure" )
906 def test_wpas_ctrl_log_level ( dev
):
907 """wpa_supplicant ctrl_iface LOG_LEVEL"""
908 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
909 if "Current level: MSGDUMP" not in level
:
910 raise Exception ( "Unexpected debug level(1): " + level
)
911 if "Timestamp: 1" not in level
:
912 raise Exception ( "Unexpected timestamp(1): " + level
)
914 if "OK" not in dev
[ 2 ]. request ( "LOG_LEVEL MSGDUMP 0" ):
915 raise Exception ( "LOG_LEVEL failed" )
916 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
917 if "Current level: MSGDUMP" not in level
:
918 raise Exception ( "Unexpected debug level(2): " + level
)
919 if "Timestamp: 0" not in level
:
920 raise Exception ( "Unexpected timestamp(2): " + level
)
922 if "OK" not in dev
[ 2 ]. request ( "LOG_LEVEL MSGDUMP 1" ):
923 raise Exception ( "LOG_LEVEL failed" )
924 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
925 if "Current level: MSGDUMP" not in level
:
926 raise Exception ( "Unexpected debug level(3): " + level
)
927 if "Timestamp: 1" not in level
:
928 raise Exception ( "Unexpected timestamp(3): " + level
)
930 if "FAIL" not in dev
[ 2 ]. request ( "LOG_LEVEL FOO" ):
931 raise Exception ( "Invalid LOG_LEVEL accepted" )
933 for lev
in [ "EXCESSIVE" , "MSGDUMP" , "DEBUG" , "INFO" , "WARNING" , "ERROR" ]:
934 if "OK" not in dev
[ 2 ]. request ( "LOG_LEVEL " + lev
):
935 raise Exception ( "LOG_LEVEL failed for " + lev
)
936 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
937 if "Current level: " + lev
not in level
:
938 raise Exception ( "Unexpected debug level: " + level
)
940 if "OK" not in dev
[ 2 ]. request ( "LOG_LEVEL MSGDUMP 1" ):
941 raise Exception ( "LOG_LEVEL failed" )
942 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
943 if "Current level: MSGDUMP" not in level
:
944 raise Exception ( "Unexpected debug level(3): " + level
)
945 if "Timestamp: 1" not in level
:
946 raise Exception ( "Unexpected timestamp(3): " + level
)
948 def test_wpas_ctrl_enable_disable_network ( dev
, apdev
):
949 """wpa_supplicant ctrl_iface ENABLE/DISABLE_NETWORK"""
950 params
= { "ssid" : "test" }
951 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
953 id = dev
[ 0 ]. connect ( "test" , key_mgmt
= "NONE" , scan_freq
= "2412" ,
954 only_add_network
= True )
955 if "OK" not in dev
[ 0 ]. request ( "DISABLE_NETWORK " + str ( id )):
956 raise Exception ( "Failed to disable network" )
957 if "OK" not in dev
[ 0 ]. request ( "ENABLE_NETWORK " + str ( id ) + " no-connect" ):
958 raise Exception ( "Failed to enable network" )
959 if "OK" not in dev
[ 0 ]. request ( "DISABLE_NETWORK all" ):
960 raise Exception ( "Failed to disable networks" )
961 if "OK" not in dev
[ 0 ]. request ( "ENABLE_NETWORK " + str ( id )):
962 raise Exception ( "Failed to enable network" )
963 dev
[ 0 ]. wait_connected ( timeout
= 10 )
964 if "OK" not in dev
[ 0 ]. request ( "DISABLE_NETWORK " + str ( id )):
965 raise Exception ( "Failed to disable network" )
966 dev
[ 0 ]. wait_disconnected ( timeout
= 10 )
969 if "OK" not in dev
[ 0 ]. request ( "ENABLE_NETWORK all" ):
970 raise Exception ( "Failed to enable network" )
971 dev
[ 0 ]. wait_connected ( timeout
= 10 )
972 if "OK" not in dev
[ 0 ]. request ( "DISABLE_NETWORK all" ):
973 raise Exception ( "Failed to disable network" )
974 dev
[ 0 ]. wait_disconnected ( timeout
= 10 )
976 def test_wpas_ctrl_country ( dev
, apdev
):
977 """wpa_supplicant SET/GET country code"""
979 # work around issues with possible pending regdom event from the end of
980 # the previous test case
982 dev
[ 0 ]. dump_monitor ()
984 if "OK" not in dev
[ 0 ]. request ( "SET country FI" ):
985 raise Exception ( "Failed to set country code" )
986 if dev
[ 0 ]. request ( "GET country" ) != "FI" :
987 raise Exception ( "Country code set failed" )
988 ev
= dev
[ 0 ]. wait_event ([ "CTRL-EVENT-REGDOM-CHANGE" ])
990 raise Exception ( "regdom change event not seen" )
991 if "init=USER type=COUNTRY alpha2=FI" not in ev
:
992 raise Exception ( "Unexpected event contents: " + ev
)
993 dev
[ 0 ]. request ( "SET country 00" )
994 if dev
[ 0 ]. request ( "GET country" ) != "00" :
995 raise Exception ( "Country code set failed" )
996 ev
= dev
[ 0 ]. wait_event ([ "CTRL-EVENT-REGDOM-CHANGE" ])
998 raise Exception ( "regdom change event not seen" )
999 if "init=CORE type=WORLD" not in ev
:
1000 raise Exception ( "Unexpected event contents: " + ev
)
1002 subprocess
. call ([ 'sudo' , 'iw' , 'reg' , 'set' , '00' ])
1004 def test_wpas_ctrl_suspend_resume ( dev
):
1005 """wpa_supplicant SUSPEND/RESUME"""
1006 wpas
= WpaSupplicant ( global_iface
= '/tmp/wpas-wlan5' )
1007 wpas
. interface_add ( "wlan5" )
1008 if "OK" not in wpas
. global_request ( "SUSPEND" ):
1009 raise Exception ( "SUSPEND failed" )
1011 if "OK" not in wpas
. global_request ( "RESUME" ):
1012 raise Exception ( "RESUME failed" )
1013 if "OK" not in wpas
. request ( "SUSPEND" ):
1014 raise Exception ( "Per-interface SUSPEND failed" )
1015 if "OK" not in wpas
. request ( "RESUME" ):
1016 raise Exception ( "Per-interface RESUME failed" )
1017 ev
= wpas
. wait_event ([ "CTRL-EVENT-SCAN-RESULTS" ], timeout
= 10 )
1019 raise Exception ( "Scan not completed" )
1021 def test_wpas_ctrl_global ( dev
):
1022 """wpa_supplicant global control interface"""
1023 wpas
= WpaSupplicant ( global_iface
= '/tmp/wpas-wlan5' )
1024 wpas
. interface_add ( "wlan5" )
1026 if "PONG" not in wpas
. global_request ( "PING" ):
1027 raise Exception ( "PING failed" )
1028 if "wlan5" not in wpas
. global_request ( "INTERFACES" ):
1029 raise Exception ( "Interface not found" )
1030 if "UNKNOWN COMMAND" not in wpas
. global_request ( "FOO" ):
1031 raise Exception ( "Unexpected response to unknown command" )
1032 if "PONG" not in wpas
. global_request ( "IFNAME=wlan5 PING" ):
1033 raise Exception ( "Per-interface PING failed" )
1034 if "FAIL-NO-IFNAME-MATCH" not in wpas
. global_request ( "IFNAME=notfound PING" ):
1035 raise Exception ( "Unknown interface not reported correctly" )
1036 if "FAIL" not in wpas
. global_request ( "SAVE_CONFIG" ):
1037 raise Exception ( "SAVE_CONFIG succeeded unexpectedly" )
1038 if "OK" not in wpas
. global_request ( "SET wifi_display 0" ):
1039 raise Exception ( "SET failed" )
1040 if "wifi_display=0" not in wpas
. global_request ( "STATUS" ):
1041 raise Exception ( "wifi_display not disabled" )
1042 if "OK" not in wpas
. global_request ( "SET wifi_display 1" ):
1043 raise Exception ( "SET failed" )
1044 if "wifi_display=1" not in wpas
. global_request ( "STATUS" ):
1045 raise Exception ( "wifi_display not enabled" )
1046 if "FAIL" not in wpas
. global_request ( "SET foo 1" ):
1047 raise Exception ( "SET succeeded unexpectedly" )
1049 if "p2p_state=IDLE" not in wpas
. global_request ( "STATUS" ):
1050 raise Exception ( "P2P was disabled" )
1051 wpas
. request ( "P2P_SET disabled 1" )
1052 if "p2p_state=DISABLED" not in wpas
. global_request ( "STATUS" ):
1053 raise Exception ( "P2P was not disabled" )
1054 wpas
. request ( "P2P_SET disabled 0" )
1055 if "p2p_state=IDLE" not in wpas
. global_request ( "STATUS" ):
1056 raise Exception ( "P2P was not enabled" )
1058 # driver_nl80211.c does not support interface list, so do not fail because
1060 logger
. debug ( wpas
. global_request ( "INTERFACE_LIST" ))
1062 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD " ):
1063 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1064 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO" ):
1065 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1066 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf" ):
1067 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1068 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver" ):
1069 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1070 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver ctrliface" ):
1071 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1072 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver ctrliface driverparam" ):
1073 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1074 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver ctrliface driverparam bridge" ):
1075 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1076 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver ctrliface driverparam bridge foo" ):
1077 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1078 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO " ):
1079 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1081 def test_wpas_ctrl_roam ( dev
, apdev
):
1082 """wpa_supplicant ctrl_iface ROAM error cases"""
1083 if "FAIL" not in dev
[ 0 ]. request ( "ROAM 00:11:22:33:44" ):
1084 raise Exception ( "Unexpected success" )
1085 if "FAIL" not in dev
[ 0 ]. request ( "ROAM 00:11:22:33:44:55" ):
1086 raise Exception ( "Unexpected success" )
1087 params
= { "ssid" : "test" }
1088 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
1089 id = dev
[ 0 ]. connect ( "test" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1090 if "FAIL" not in dev
[ 0 ]. request ( "ROAM 00:11:22:33:44:55" ):
1091 raise Exception ( "Unexpected success" )
1093 def test_wpas_ctrl_ipaddr ( dev
, apdev
):
1094 """wpa_supplicant IP address in STATUS"""
1096 subprocess
. call ([ 'ip' , 'addr' , 'add' , '10.174.65.207/32' , 'dev' ,
1098 ipaddr
= dev
[ 0 ]. get_status_field ( 'ip_address' )
1099 if ipaddr
!= '10.174.65.207' :
1100 raise Exception ( "IP address not in STATUS output" )
1102 subprocess
. call ([ 'ip' , 'addr' , 'del' , '10.174.65.207/32' , 'dev' ,
1105 def test_wpas_ctrl_neighbor_rep_req ( dev
, apdev
):
1106 """wpa_supplicant ctrl_iface NEIGHBOR_REP_REQUEST"""
1107 params
= { "ssid" : "test" }
1108 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
1109 params
= { "ssid" : "test2" , "radio_measurements" : "1" }
1110 hostapd
. add_ap ( apdev
[ 1 ][ 'ifname' ], params
)
1112 dev
[ 0 ]. connect ( "test" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1113 if "FAIL" not in dev
[ 0 ]. request ( "NEIGHBOR_REP_REQUEST" ):
1114 raise Exception ( "Request succeeded unexpectedly" )
1115 if "FAIL" not in dev
[ 0 ]. request ( "NEIGHBOR_REP_REQUEST ssid=abcdef" ):
1116 raise Exception ( "Request succeeded unexpectedly" )
1117 dev
[ 0 ]. request ( "DISCONNECT" )
1119 rrm
= int ( dev
[ 0 ]. get_driver_status_field ( "capa.rrm_flags" ), 16 )
1120 if rrm
& 0x5 != 0x5 :
1121 logger
. info ( "Driver does not support required RRM capabilities - skip rest of the test case" )
1124 dev
[ 0 ]. connect ( "test2" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1126 # These requests are expected to get sent properly, but since hostapd does
1127 # not yet support processing of the request, these are expected to fail.
1129 if "OK" not in dev
[ 0 ]. request ( "NEIGHBOR_REP_REQUEST" ):
1130 raise Exception ( "Request failed" )
1131 ev
= dev
[ 0 ]. wait_event ([ "RRM-NEIGHBOR-REP-RECEIVED" ,
1132 "RRM-NEIGHBOR-REP-REQUEST-FAILED" ], timeout
= 10 )
1134 raise Exception ( "RRM report result not indicated" )
1135 logger
. info ( "RRM result: " + ev
)
1137 if "OK" not in dev
[ 0 ]. request ( "NEIGHBOR_REP_REQUEST ssid=abcdef" ):
1138 raise Exception ( "Request failed" )
1139 ev
= dev
[ 0 ]. wait_event ([ "RRM-NEIGHBOR-REP-RECEIVED" ,
1140 "RRM-NEIGHBOR-REP-REQUEST-FAILED" ], timeout
= 10 )
1142 raise Exception ( "RRM report result not indicated" )
1143 logger
. info ( "RRM result: " + ev
)
1145 def test_wpas_ctrl_rsp ( dev
, apdev
):
1146 """wpa_supplicant ctrl_iface CTRL-RSP-"""
1147 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-" ):
1148 raise Exception ( "Request succeeded unexpectedly" )
1149 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-foo-" ):
1150 raise Exception ( "Request succeeded unexpectedly" )
1151 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-foo-1234567" ):
1152 raise Exception ( "Request succeeded unexpectedly" )
1153 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-foo-1234567:" ):
1154 raise Exception ( "Request succeeded unexpectedly" )
1155 id = dev
[ 0 ]. add_network ()
1156 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-foo- %d :" % id ):
1157 raise Exception ( "Request succeeded unexpectedly" )
1158 for req
in [ "IDENTITY" , "PASSWORD" , "NEW_PASSWORD" , "PIN" , "OTP" ,
1159 "PASSPHRASE" , "SIM" ]:
1160 if "OK" not in dev
[ 0 ]. request ( "CTRL-RSP- %s-%d :" % ( req
, id )):
1161 raise Exception ( "Request failed unexpectedly" )
1162 if "OK" not in dev
[ 0 ]. request ( "CTRL-RSP- %s-%d :" % ( req
, id )):
1163 raise Exception ( "Request failed unexpectedly" )
1165 def test_wpas_ctrl_vendor ( dev
, apdev
):
1166 """wpa_supplicant ctrl_iface VENDOR"""
1173 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR " + cmd
):
1174 raise Exception ( "Invalid VENDOR command accepted: " + cmd
)
1176 def test_wpas_ctrl_mgmt_tx ( dev
, apdev
):
1177 """wpa_supplicant ctrl_iface MGMT_TX"""
1179 "00:11:22:33:44:55 foo" ,
1180 "00:11:22:33:44:55 11:22:33:44:55:66" ,
1181 "00:11:22:33:44:55 11:22:33:44:55:66 freq=0 no_cck=0 wait_time=0 action=123" ,
1182 "00:11:22:33:44:55 11:22:33:44:55:66 action=12qq" ]
1184 if "FAIL" not in dev
[ 0 ]. request ( "MGMT_TX " + cmd
):
1185 raise Exception ( "Invalid MGMT_TX command accepted: " + cmd
)
1187 if "OK" not in dev
[ 0 ]. request ( "MGMT_TX_DONE" ):
1188 raise Exception ( "MGMT_TX_DONE failed" )
1190 def test_wpas_ctrl_driver_event ( dev
, apdev
):
1191 """wpa_supplicant ctrl_iface DRIVER_EVENT"""
1192 if "FAIL" not in dev
[ 0 ]. request ( "DRIVER_EVENT foo" ):
1193 raise Exception ( "Invalid DRIVER_EVENT accepted" )
1195 def test_wpas_ctrl_eapol_rx ( dev
, apdev
):
1196 """wpa_supplicant ctrl_iface EAPOL_RX"""
1198 "00:11:22:33:44:55 123" ,
1199 "00:11:22:33:44:55 12qq" ]
1201 if "FAIL" not in dev
[ 0 ]. request ( "EAPOL_RX " + cmd
):
1202 raise Exception ( "Invalid EAPOL_RX command accepted: " + cmd
)
1204 def test_wpas_ctrl_data_test ( dev
, apdev
):
1205 """wpa_supplicant ctrl_iface DATA_TEST"""
1206 dev
[ 0 ]. request ( "DATA_TEST_CONFIG 0" )
1207 if "FAIL" not in dev
[ 0 ]. request ( "DATA_TEST_TX 00:11:22:33:44:55 00:11:22:33:44:55 0" ):
1208 raise Exception ( "DATA_TEST_TX accepted when not in test mode" )
1211 if "OK" not in dev
[ 0 ]. request ( "DATA_TEST_CONFIG 1" ):
1212 raise Exception ( "DATA_TEST_CONFIG failed" )
1213 if "OK" not in dev
[ 0 ]. request ( "DATA_TEST_CONFIG 1" ):
1214 raise Exception ( "DATA_TEST_CONFIG failed" )
1216 "00:11:22:33:44:55 foo" ,
1217 "00:11:22:33:44:55 00:11:22:33:44:55 -1" ,
1218 "00:11:22:33:44:55 00:11:22:33:44:55 256" ]
1220 if "FAIL" not in dev
[ 0 ]. request ( "DATA_TEST_TX " + cmd
):
1221 raise Exception ( "Invalid DATA_TEST_TX command accepted: " + cmd
)
1222 if "OK" not in dev
[ 0 ]. request ( "DATA_TEST_TX 00:11:22:33:44:55 00:11:22:33:44:55 0" ):
1223 raise Exception ( "DATA_TEST_TX failed" )
1225 dev
[ 0 ]. request ( "DATA_TEST_CONFIG 0" )
1229 "00112233445566778899aabbccdde" ,
1230 "00112233445566778899aabbccdq" ]
1232 if "FAIL" not in dev
[ 0 ]. request ( "DATA_TEST_FRAME " + cmd
):
1233 raise Exception ( "Invalid DATA_TEST_FRAME command accepted: " + cmd
)
1235 if "OK" not in dev
[ 0 ]. request ( "DATA_TEST_FRAME 00112233445566778899aabbccddee" ):
1236 raise Exception ( "DATA_TEST_FRAME failed" )
1238 def test_wpas_ctrl_vendor_elem ( dev
, apdev
):
1239 """wpa_supplicant ctrl_iface VENDOR_ELEM"""
1240 if "OK" not in dev
[ 0 ]. request ( "VENDOR_ELEM_ADD 1 " ):
1241 raise Exception ( "VENDOR_ELEM_ADD failed" )
1248 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR_ELEM_ADD " + cmd
):
1249 raise Exception ( "Invalid VENDOR_ELEM_ADD command accepted: " + cmd
)
1254 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR_ELEM_GET " + cmd
):
1255 raise Exception ( "Invalid VENDOR_ELEM_GET command accepted: " + cmd
)
1257 dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE 1 *" )
1267 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE " + cmd
):
1268 raise Exception ( "Invalid VENDOR_ELEM_REMOVE command accepted: " + cmd
)
1270 dev
[ 0 ]. request ( "VENDOR_ELEM_ADD 1 000100" )
1271 if "OK" not in dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE 1 " ):
1272 raise Exception ( "VENDOR_ELEM_REMOVE failed" )
1281 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE " + cmd
):
1282 raise Exception ( "Invalid VENDOR_ELEM_REMOVE command accepted: " + cmd
)
1283 if "OK" not in dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE 1 000100" ):
1284 raise Exception ( "VENDOR_ELEM_REMOVE failed" )
1286 def test_wpas_ctrl_misc ( dev
, apdev
):
1287 """wpa_supplicant ctrl_iface and miscellaneous commands"""
1288 if "OK" not in dev
[ 0 ]. request ( "RELOG" ):
1289 raise Exception ( "RELOG failed" )
1290 if dev
[ 0 ]. request ( "IFNAME" ) != dev
[ 0 ]. ifname
:
1291 raise Exception ( "IFNAME returned unexpected response" )
1292 if "FAIL" not in dev
[ 0 ]. request ( "REATTACH" ):
1293 raise Exception ( "REATTACH accepted while disabled" )
1294 if "OK" not in dev
[ 2 ]. request ( "RECONFIGURE" ):
1295 raise Exception ( "RECONFIGURE failed" )
1296 if "FAIL" in dev
[ 0 ]. request ( "INTERFACE_LIST" ):
1297 raise Exception ( "INTERFACE_LIST failed" )
1298 if "UNKNOWN COMMAND" not in dev
[ 0 ]. request ( "FOO" ):
1299 raise Exception ( "Unknown command accepted" )
1301 if "FAIL" not in dev
[ 0 ]. global_request ( "INTERFACE_REMOVE foo" ):
1302 raise Exception ( "Invalid INTERFACE_REMOVE accepted" )
1303 if "FAIL" not in dev
[ 0 ]. global_request ( "SET foo" ):
1304 raise Exception ( "Invalid global SET accepted" )