]>
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 ()
14 from wpasupplicant
import WpaSupplicant
15 from utils
import alloc_fail
17 def test_wpas_ctrl_network ( dev
):
18 """wpa_supplicant ctrl_iface network set/get"""
19 id = dev
[ 0 ]. add_network ()
21 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id )):
22 raise Exception ( "Unexpected success for invalid SET_NETWORK" )
23 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + " name" ):
24 raise Exception ( "Unexpected success for invalid SET_NETWORK" )
25 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id + 1 ) + " proto OPEN" ):
26 raise Exception ( "Unexpected success for invalid network id" )
27 if "FAIL" not in dev
[ 0 ]. request ( "GET_NETWORK " + str ( id )):
28 raise Exception ( "Unexpected success for invalid GET_NETWORK" )
29 if "FAIL" not in dev
[ 0 ]. request ( "GET_NETWORK " + str ( id + 1 ) + " proto" ):
30 raise Exception ( "Unexpected success for invalid network id" )
32 tests
= (( "key_mgmt" , "WPA-PSK WPA-EAP IEEE8021X NONE WPA-NONE FT-PSK FT-EAP WPA-PSK-SHA256 WPA-EAP-SHA256" ),
33 ( "pairwise" , "CCMP-256 GCMP-256 CCMP GCMP TKIP" ),
34 ( "group" , "CCMP-256 GCMP-256 CCMP GCMP TKIP WEP104 WEP40" ),
35 ( "auth_alg" , "OPEN SHARED LEAP" ),
36 ( "scan_freq" , "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15" ),
37 ( "freq_list" , "2412 2417" ),
39 ( "bssid" , "00:11:22:33:44:55" ),
40 ( "proto" , "WPA RSN OSEN" ),
42 ( "go_p2p_dev_addr" , "22:33:44:55:66:aa" ),
43 ( "p2p_client_list" , "22:33:44:55:66:bb 02:11:22:33:44:55" ))
45 dev
[ 0 ]. set_network_quoted ( id , "ssid" , "test" )
46 for field
, value
in tests
:
47 dev
[ 0 ]. set_network ( id , field
, value
)
48 res
= dev
[ 0 ]. get_network ( id , field
)
50 raise Exception ( "Unexpected response for '" + field
+ "': '" + res
+ "'" )
52 q_tests
= (( "identity" , "hello" ),
53 ( "anonymous_identity" , "foo@nowhere.com" ))
54 for field
, value
in q_tests
:
55 dev
[ 0 ]. set_network_quoted ( id , field
, value
)
56 res
= dev
[ 0 ]. get_network ( id , field
)
57 if res
!= '"' + value
+ '"' :
58 raise Exception ( "Unexpected quoted response for '" + field
+ "': '" + res
+ "'" )
60 get_tests
= (( "foo" , None ), ( "ssid" , '"test"' ))
61 for field
, value
in get_tests
:
62 res
= dev
[ 0 ]. get_network ( id , field
)
64 raise Exception ( "Unexpected response for '" + field
+ "': '" + res
+ "'" )
66 if dev
[ 0 ]. get_network ( id , "password" ):
67 raise Exception ( "Unexpected response for 'password'" )
68 dev
[ 0 ]. set_network_quoted ( id , "password" , "foo" )
69 if dev
[ 0 ]. get_network ( id , "password" ) != '*' :
70 raise Exception ( "Unexpected response for 'password' (expected *)" )
71 dev
[ 0 ]. set_network ( id , "password" , "hash:12345678901234567890123456789012" )
72 if dev
[ 0 ]. get_network ( id , "password" ) != '*' :
73 raise Exception ( "Unexpected response for 'password' (expected *)" )
74 dev
[ 0 ]. set_network ( id , "password" , "NULL" )
75 if dev
[ 0 ]. get_network ( id , "password" ):
76 raise Exception ( "Unexpected response for 'password'" )
77 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + " password hash:12" ):
78 raise Exception ( "Unexpected success for invalid password hash" )
79 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + " password hash:123456789012345678x0123456789012" ):
80 raise Exception ( "Unexpected success for invalid password hash" )
82 dev
[ 0 ]. set_network ( id , "identity" , "414243" )
83 if dev
[ 0 ]. get_network ( id , "identity" ) != '"ABC"' :
84 raise Exception ( "Unexpected identity hex->text response" )
86 dev
[ 0 ]. set_network ( id , "identity" , 'P"abc \n def"' )
87 if dev
[ 0 ]. get_network ( id , "identity" ) != "6162630a646566" :
88 raise Exception ( "Unexpected identity printf->hex response" )
90 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' identity P"foo' ):
91 raise Exception ( "Unexpected success for invalid identity string" )
93 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' identity 12x3' ):
94 raise Exception ( "Unexpected success for invalid identity string" )
97 if "FAIL" in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' wep_key' + str ( i
) + ' aabbccddee' ):
98 raise Exception ( "Unexpected wep_key set failure" )
99 if dev
[ 0 ]. get_network ( id , "wep_key" + str ( i
)) != '*' :
100 raise Exception ( "Unexpected wep_key get failure" )
102 if "FAIL" in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-00:11:22:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' ):
103 raise Exception ( "Unexpected failure for psk_list string" )
105 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list 00:11:x2:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' ):
106 raise Exception ( "Unexpected success for invalid psk_list string" )
108 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-00:11:x2:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' ):
109 raise Exception ( "Unexpected success for invalid psk_list string" )
111 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-00:11:22:33:44:55+0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' ):
112 raise Exception ( "Unexpected success for invalid psk_list string" )
114 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-00:11:22:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde' ):
115 raise Exception ( "Unexpected success for invalid psk_list string" )
117 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-00:11:22:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdex' ):
118 raise Exception ( "Unexpected success for invalid psk_list string" )
120 if dev
[ 0 ]. get_network ( id , "psk_list" ):
121 raise Exception ( "Unexpected psk_list get response" )
123 if dev
[ 0 ]. list_networks ()[ 0 ][ 'ssid' ] != "test" :
124 raise Exception ( "Unexpected ssid in LIST_NETWORKS" )
125 dev
[ 0 ]. set_network ( id , "ssid" , "NULL" )
126 if dev
[ 0 ]. list_networks ()[ 0 ][ 'ssid' ] != "" :
127 raise Exception ( "Unexpected ssid in LIST_NETWORKS after clearing it" )
129 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' ssid "0123456789abcdef0123456789abcdef0"' ):
130 raise Exception ( "Too long SSID accepted" )
131 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' scan_ssid qwerty' ):
132 raise Exception ( "Invalid integer accepted" )
133 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' scan_ssid 2' ):
134 raise Exception ( "Too large integer accepted" )
135 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' psk 12345678' ):
136 raise Exception ( "Invalid PSK accepted" )
137 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' psk "1234567"' ):
138 raise Exception ( "Too short PSK accepted" )
139 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' psk "1234567890123456789012345678901234567890123456789012345678901234"' ):
140 raise Exception ( "Too long PSK accepted" )
141 dev
[ 0 ]. set_network_quoted ( id , "psk" , "123456768" );
142 dev
[ 0 ]. set_network_quoted ( id , "psk" , "123456789012345678901234567890123456789012345678901234567890123" );
143 if dev
[ 0 ]. get_network ( id , "psk" ) != '*' :
144 raise Exception ( "Unexpected psk read result" );
146 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' eap UNKNOWN' ):
147 raise Exception ( "Unknown EAP method accepted" )
149 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' password "foo' ):
150 raise Exception ( "Invalid password accepted" )
152 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' wep_key0 "foo' ):
153 raise Exception ( "Invalid WEP key accepted" )
154 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' wep_key0 "12345678901234567"' ):
155 raise Exception ( "Too long WEP key accepted" )
156 # too short WEP key is ignored
157 dev
[ 0 ]. set_network_quoted ( id , "wep_key0" , "1234" )
158 dev
[ 0 ]. set_network_quoted ( id , "wep_key1" , "12345" )
159 dev
[ 0 ]. set_network_quoted ( id , "wep_key2" , "1234567890123" )
160 dev
[ 0 ]. set_network_quoted ( id , "wep_key3" , "1234567890123456" )
162 dev
[ 0 ]. set_network ( id , "go_p2p_dev_addr" , "any" )
163 if dev
[ 0 ]. get_network ( id , "go_p2p_dev_addr" ) is not None :
164 raise Exception ( "Unexpected go_p2p_dev_addr value" )
165 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' go_p2p_dev_addr 00:11:22:33:44' ):
166 raise Exception ( "Invalid go_p2p_dev_addr accepted" )
167 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' p2p_client_list 00:11:22:33:44' ):
168 raise Exception ( "Invalid p2p_client_list accepted" )
169 if "FAIL" in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' p2p_client_list 00:11:22:33:44:55 00:1' ):
170 raise Exception ( "p2p_client_list truncation workaround failed" )
171 if dev
[ 0 ]. get_network ( id , "p2p_client_list" ) != "00:11:22:33:44:55" :
172 raise Exception ( "p2p_client_list truncation workaround did not work" )
174 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' auth_alg ' ):
175 raise Exception ( "Empty auth_alg accepted" )
176 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' auth_alg FOO' ):
177 raise Exception ( "Invalid auth_alg accepted" )
179 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' proto ' ):
180 raise Exception ( "Empty proto accepted" )
181 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' proto FOO' ):
182 raise Exception ( "Invalid proto accepted" )
184 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' pairwise ' ):
185 raise Exception ( "Empty pairwise accepted" )
186 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' pairwise FOO' ):
187 raise Exception ( "Invalid pairwise accepted" )
188 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' pairwise WEP40' ):
189 raise Exception ( "Invalid pairwise accepted" )
191 if "OK" not in dev
[ 0 ]. request ( 'BSSID ' + str ( id ) + ' 00:11:22:33:44:55' ):
192 raise Exception ( "Unexpected BSSID failure" )
193 if dev
[ 0 ]. request ( "GET_NETWORK 0 bssid" ) != '00:11:22:33:44:55' :
194 raise Exception ( "BSSID command did not set network bssid" )
195 if "OK" not in dev
[ 0 ]. request ( 'BSSID ' + str ( id ) + ' 00:00:00:00:00:00' ):
196 raise Exception ( "Unexpected BSSID failure" )
197 if "FAIL" not in dev
[ 0 ]. request ( "GET_NETWORK 0 bssid" ):
198 raise Exception ( "bssid claimed configured after clearing" )
199 if "FAIL" not in dev
[ 0 ]. request ( 'BSSID 123 00:11:22:33:44:55' ):
200 raise Exception ( "Unexpected BSSID success" )
201 if "FAIL" not in dev
[ 0 ]. request ( 'BSSID ' + str ( id ) + ' 00:11:22:33:44' ):
202 raise Exception ( "Unexpected BSSID success" )
203 if "FAIL" not in dev
[ 0 ]. request ( 'BSSID ' + str ( id )):
204 raise Exception ( "Unexpected BSSID success" )
206 tests
= [ "02:11:22:33:44:55" ,
207 "02:11:22:33:44:55 02:ae:be:ce:53:77" ,
208 "02:11:22:33:44:55/ff:00:ff:00:ff:00" ,
209 "02:11:22:33:44:55/ff:00:ff:00:ff:00 f2:99:88:77:66:55" ,
210 "f2:99:88:77:66:55 02:11:22:33:44:55/ff:00:ff:00:ff:00" ,
211 "f2:99:88:77:66:55 02:11:22:33:44:55/ff:00:ff:00:ff:00 12:34:56:78:90:ab" ,
212 "02:11:22:33:44:55/ff:ff:ff:00:00:00 02:ae:be:ce:53:77/00:00:00:00:00:ff" ]
214 dev
[ 0 ]. set_network ( id , "bssid_blacklist" , val
)
215 res
= dev
[ 0 ]. get_network ( id , "bssid_blacklist" )
217 raise Exception ( "Unexpected bssid_blacklist value: %s != %s " % ( res
, val
))
218 dev
[ 0 ]. set_network ( id , "bssid_whitelist" , val
)
219 res
= dev
[ 0 ]. get_network ( id , "bssid_whitelist" )
221 raise Exception ( "Unexpected bssid_whitelist value: %s != %s " % ( res
, val
))
225 "00:11:22:33:44:55q" ,
226 "00:11:22:33:44:55/" ,
227 "00:11:22:33:44:55/66:77:88:99:aa:b" ]
229 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK %d bssid_blacklist %s " % ( id , val
)):
230 raise Exception ( "Invalid bssid_blacklist value accepted" )
232 def test_wpas_ctrl_many_networks ( dev
, apdev
):
233 """wpa_supplicant ctrl_iface LIST_NETWORKS with huge number of networks"""
234 for i
in range ( 1000 ):
235 id = dev
[ 0 ]. add_network ()
236 res
= dev
[ 0 ]. request ( "LIST_NETWORKS" )
238 raise Exception ( "Last added network was unexpectedly included" )
239 res
= dev
[ 0 ]. request ( "LIST_NETWORKS LAST_ID= %d " % ( id - 2 ))
240 if str ( id ) not in res
:
241 raise Exception ( "Last added network was not present when using LAST_ID" )
242 # This command can take a very long time under valgrind testing on a low
243 # power CPU, so increase the command timeout significantly to avoid issues
244 # with the test case failing and following reset operation timing out.
245 dev
[ 0 ]. request ( "REMOVE_NETWORK all" , timeout
= 60 )
247 def test_wpas_ctrl_dup_network ( dev
, apdev
):
248 """wpa_supplicant ctrl_iface DUP_NETWORK"""
250 passphrase
= 'qwertyuiop'
251 params
= hostapd
. wpa2_params ( ssid
= ssid
, passphrase
= passphrase
)
252 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
254 src
= dev
[ 0 ]. connect ( "another" , psk
= passphrase
, scan_freq
= "2412" ,
255 only_add_network
= True )
256 id = dev
[ 0 ]. add_network ()
257 dev
[ 0 ]. set_network_quoted ( id , "ssid" , ssid
)
258 for f
in [ "key_mgmt" , "psk" , "scan_freq" ]:
259 res
= dev
[ 0 ]. request ( "DUP_NETWORK {} {} {}" . format ( src
, id , f
))
261 raise Exception ( "DUP_NETWORK failed" )
262 dev
[ 0 ]. connect_network ( id )
264 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK " ):
265 raise Exception ( "Unexpected DUP_NETWORK success" )
266 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK %d " % id ):
267 raise Exception ( "Unexpected DUP_NETWORK success" )
268 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK %d %d " % ( id , id )):
269 raise Exception ( "Unexpected DUP_NETWORK success" )
270 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK 123456 1234567 " ):
271 raise Exception ( "Unexpected DUP_NETWORK success" )
272 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK %d 123456 " % id ):
273 raise Exception ( "Unexpected DUP_NETWORK success" )
274 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK %d %d foo" % ( id , id )):
275 raise Exception ( "Unexpected DUP_NETWORK success" )
276 dev
[ 0 ]. request ( "DISCONNECT" )
277 if "OK" not in dev
[ 0 ]. request ( "DUP_NETWORK %d %d ssid" % ( id , id )):
278 raise Exception ( "Unexpected DUP_NETWORK failure" )
282 ev
= dev
. wait_event ([ "CRED-ADDED" ])
284 raise Exception ( "Missing CRED-ADDED event" )
285 if " " + str ( id ) not in ev
:
286 raise Exception ( "CRED-ADDED event without matching id" )
289 def set_cred ( dev
, id , field
, value
):
290 dev
. set_cred ( id , field
, value
)
291 ev
= dev
. wait_event ([ "CRED-MODIFIED" ])
293 raise Exception ( "Missing CRED-MODIFIED event" )
294 if " " + str ( id ) + " " not in ev
:
295 raise Exception ( "CRED-MODIFIED event without matching id" )
297 raise Exception ( "CRED-MODIFIED event without matching field" )
299 def set_cred_quoted ( dev
, id , field
, value
):
300 dev
. set_cred_quoted ( id , field
, value
)
301 ev
= dev
. wait_event ([ "CRED-MODIFIED" ])
303 raise Exception ( "Missing CRED-MODIFIED event" )
304 if " " + str ( id ) + " " not in ev
:
305 raise Exception ( "CRED-MODIFIED event without matching id" )
307 raise Exception ( "CRED-MODIFIED event without matching field" )
309 def remove_cred ( dev
, id ):
311 ev
= dev
. wait_event ([ "CRED-REMOVED" ])
313 raise Exception ( "Missing CRED-REMOVED event" )
314 if " " + str ( id ) not in ev
:
315 raise Exception ( "CRED-REMOVED event without matching id" )
317 def test_wpas_ctrl_cred ( dev
):
318 """wpa_supplicant ctrl_iface cred set"""
319 id1
= add_cred ( dev
[ 0 ])
320 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id1
+ 1 ) + " temporary 1" ):
321 raise Exception ( "SET_CRED succeeded unexpectedly on unknown cred id" )
322 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id1
)):
323 raise Exception ( "Invalid SET_CRED succeeded unexpectedly" )
324 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id1
) + " temporary" ):
325 raise Exception ( "Invalid SET_CRED succeeded unexpectedly" )
326 if "FAIL" not in dev
[ 0 ]. request ( "GET_CRED " + str ( id1
+ 1 ) + " temporary" ):
327 raise Exception ( "GET_CRED succeeded unexpectedly on unknown cred id" )
328 if "FAIL" not in dev
[ 0 ]. request ( "GET_CRED " + str ( id1
)):
329 raise Exception ( "Invalid GET_CRED succeeded unexpectedly" )
330 if "FAIL" not in dev
[ 0 ]. request ( "GET_CRED " + str ( id1
) + " foo" ):
331 raise Exception ( "Invalid GET_CRED succeeded unexpectedly" )
332 id = add_cred ( dev
[ 0 ])
333 id2
= add_cred ( dev
[ 0 ])
334 set_cred ( dev
[ 0 ], id , "temporary" , "1" )
335 set_cred ( dev
[ 0 ], id , "priority" , "1" )
336 set_cred ( dev
[ 0 ], id , "pcsc" , "1" )
337 set_cred_quoted ( dev
[ 0 ], id , "private_key_passwd" , "test" )
338 set_cred_quoted ( dev
[ 0 ], id , "domain_suffix_match" , "test" )
339 set_cred_quoted ( dev
[ 0 ], id , "phase1" , "test" )
340 set_cred_quoted ( dev
[ 0 ], id , "phase2" , "test" )
342 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " eap FOO" ):
343 raise Exception ( "Unexpected success on unknown EAP method" )
345 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " username 12xa" ):
346 raise Exception ( "Unexpected success on invalid string" )
348 for i
in ( "11" , "1122" , "112233445566778899aabbccddeeff00" ):
349 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " roaming_consortium " + i
):
350 raise Exception ( "Unexpected success on invalid roaming_consortium" )
352 dev
[ 0 ]. set_cred ( id , "excluded_ssid" , "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff" )
353 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " excluded_ssid 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00" ):
354 raise Exception ( "Unexpected success on invalid excluded_ssid" )
356 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " foo 4142" ):
357 raise Exception ( "Unexpected success on unknown field" )
359 id3
= add_cred ( dev
[ 0 ])
360 id4
= add_cred ( dev
[ 0 ])
361 if len ( dev
[ 0 ]. request ( "LIST_CREDS" ). splitlines ()) != 6 :
362 raise Exception ( "Unexpected LIST_CREDS result(1)" )
364 remove_cred ( dev
[ 0 ], id1
)
365 remove_cred ( dev
[ 0 ], id3
)
366 remove_cred ( dev
[ 0 ], id4
)
367 remove_cred ( dev
[ 0 ], id2
)
368 remove_cred ( dev
[ 0 ], id )
369 if "FAIL" not in dev
[ 0 ]. request ( "REMOVE_CRED 1" ):
370 raise Exception ( "Unexpected success on invalid remove cred" )
371 if len ( dev
[ 0 ]. request ( "LIST_CREDS" ). splitlines ()) != 1 :
372 raise Exception ( "Unexpected LIST_CREDS result(2)" )
374 id = add_cred ( dev
[ 0 ])
375 values
= [ ( "temporary" , "1" , False ),
376 ( "temporary" , "0" , False ),
377 ( "pcsc" , "1" , False ),
378 ( "realm" , "example.com" , True ),
379 ( "username" , "user@example.com" , True ),
380 ( "password" , "foo" , True , "*" ),
381 ( "ca_cert" , "ca.pem" , True ),
382 ( "client_cert" , "user.pem" , True ),
383 ( "private_key" , "key.pem" , True ),
384 ( "private_key_passwd" , "foo" , True , "*" ),
385 ( "imsi" , "310026-000000000" , True ),
386 ( "milenage" , "foo" , True , "*" ),
387 ( "domain_suffix_match" , "example.com" , True ),
388 ( "domain" , "example.com" , True ),
389 ( "domain" , "example.org" , True , "example.com \n example.org" ),
390 ( "roaming_consortium" , "0123456789" , False ),
391 ( "required_roaming_consortium" , "456789" , False ),
392 ( "eap" , "TTLS" , False ),
393 ( "phase1" , "foo=bar1" , True ),
394 ( "phase2" , "foo=bar2" , True ),
395 ( "excluded_ssid" , "test" , True ),
396 ( "excluded_ssid" , "foo" , True , "test \n foo" ),
397 ( "roaming_partner" , "example.com,0,4,*" , True ),
398 ( "roaming_partner" , "example.org,1,2,US" , True ,
399 "example.com,0,4,* \n example.org,1,2,US" ),
400 ( "update_identifier" , "4" , False ),
401 ( "provisioning_sp" , "sp.example.com" , True ),
402 ( "sp_priority" , "7" , False ),
403 ( "min_dl_bandwidth_home" , "100" , False ),
404 ( "min_ul_bandwidth_home" , "101" , False ),
405 ( "min_dl_bandwidth_roaming" , "102" , False ),
406 ( "min_ul_bandwidth_roaming" , "103" , False ),
407 ( "max_bss_load" , "57" , False ),
408 ( "req_conn_capab" , "6:22,80,443" , False ),
409 ( "req_conn_capab" , "17:500" , False , "6:22,80,443 \n 17:500" ),
410 ( "req_conn_capab" , "50" , False , "6:22,80,443 \n 17:500 \n 50" ),
411 ( "ocsp" , "1" , False ) ]
414 set_cred_quoted ( dev
[ 0 ], id , v
[ 0 ], v
[ 1 ])
416 set_cred ( dev
[ 0 ], id , v
[ 0 ], v
[ 1 ])
417 val
= dev
[ 0 ]. get_cred ( id , v
[ 0 ])
423 raise Exception ( "Unexpected GET_CRED value for {}: {} != {}" . format ( v
[ 0 ], val
, expect
))
424 creds
= dev
[ 0 ]. request ( "LIST_CREDS" ). splitlines ()
426 raise Exception ( "Unexpected LIST_CREDS result(3)" )
427 if creds
[ 1 ] != "0 \t example.com \t user@example.com \t example.com \t 310026-000000000" :
428 raise Exception ( "Unexpected LIST_CREDS value" )
429 remove_cred ( dev
[ 0 ], id )
430 if len ( dev
[ 0 ]. request ( "LIST_CREDS" ). splitlines ()) != 1 :
431 raise Exception ( "Unexpected LIST_CREDS result(4)" )
433 id = add_cred ( dev
[ 0 ])
434 set_cred_quoted ( dev
[ 0 ], id , "domain" , "foo.example.com" )
435 id = add_cred ( dev
[ 0 ])
436 set_cred_quoted ( dev
[ 0 ], id , "domain" , "bar.example.com" )
437 id = add_cred ( dev
[ 0 ])
438 set_cred_quoted ( dev
[ 0 ], id , "domain" , "foo.example.com" )
439 if "OK" not in dev
[ 0 ]. request ( "REMOVE_CRED sp_fqdn=foo.example.com" ):
440 raise Exception ( "REMOVE_CRED failed" )
441 creds
= dev
[ 0 ]. request ( "LIST_CREDS" )
442 if "foo.example.com" in creds
:
443 raise Exception ( "REMOVE_CRED sp_fqdn did not remove cred" )
444 if "bar.example.com" not in creds
:
445 raise Exception ( "REMOVE_CRED sp_fqdn removed incorrect cred" )
446 dev
[ 0 ]. request ( "REMOVE_CRED all" )
448 id = add_cred ( dev
[ 0 ])
449 set_cred_quoted ( dev
[ 0 ], id , "domain" , "foo.example.com" )
450 set_cred_quoted ( dev
[ 0 ], id , "provisioning_sp" , "sp.foo.example.com" )
451 id = add_cred ( dev
[ 0 ])
452 set_cred_quoted ( dev
[ 0 ], id , "domain" , "bar.example.com" )
453 set_cred_quoted ( dev
[ 0 ], id , "provisioning_sp" , "sp.bar.example.com" )
454 id = add_cred ( dev
[ 0 ])
455 set_cred_quoted ( dev
[ 0 ], id , "domain" , "foo.example.com" )
456 set_cred_quoted ( dev
[ 0 ], id , "provisioning_sp" , "sp.foo.example.com" )
457 if "OK" not in dev
[ 0 ]. request ( "REMOVE_CRED provisioning_sp=sp.foo.example.com" ):
458 raise Exception ( "REMOVE_CRED failed" )
459 creds
= dev
[ 0 ]. request ( "LIST_CREDS" )
460 if "foo.example.com" in creds
:
461 raise Exception ( "REMOVE_CRED provisioning_sp did not remove cred" )
462 if "bar.example.com" not in creds
:
463 raise Exception ( "REMOVE_CRED provisioning_sp removed incorrect cred" )
464 dev
[ 0 ]. request ( "REMOVE_CRED all" )
466 # Test large number of creds and LIST_CREDS truncation
467 dev
[ 0 ]. dump_monitor ()
468 for i
in range ( 0 , 100 ):
469 id = add_cred ( dev
[ 0 ])
470 set_cred_quoted ( dev
[ 0 ], id , "realm" , "relatively.long.realm.test %d .example.com" % i
)
471 dev
[ 0 ]. dump_monitor ()
472 creds
= dev
[ 0 ]. request ( "LIST_CREDS" )
473 for i
in range ( 0 , 100 ):
474 dev
[ 0 ]. remove_cred ( i
)
475 dev
[ 0 ]. dump_monitor ()
476 if len ( creds
) < 3900 or len ( creds
) > 4100 :
477 raise Exception ( "Unexpected LIST_CREDS length: %d " % len ( creds
))
478 if "test10.example.com" not in creds
:
479 raise Exception ( "Missing credential" )
480 if len ( creds
. splitlines ()) > 95 :
481 raise Exception ( "Too many LIST_CREDS entries in the buffer" )
483 def test_wpas_ctrl_pno ( dev
):
484 """wpa_supplicant ctrl_iface pno"""
485 if "FAIL" not in dev
[ 0 ]. request ( "SET pno 1" ):
486 raise Exception ( "Unexpected success in enabling PNO without enabled network blocks" )
487 id = dev
[ 0 ]. add_network ()
488 dev
[ 0 ]. set_network_quoted ( id , "ssid" , "test" )
489 dev
[ 0 ]. set_network ( id , "key_mgmt" , "NONE" )
490 dev
[ 0 ]. request ( "ENABLE_NETWORK " + str ( id ) + " no-connect" )
491 #mac80211_hwsim does not yet support PNO, so this fails
492 if "FAIL" not in dev
[ 0 ]. request ( "SET pno 1" ):
493 raise Exception ( "Unexpected success in enabling PNO" )
494 if "FAIL" not in dev
[ 0 ]. request ( "SET pno 1 freq=2000-3000,5180" ):
495 raise Exception ( "Unexpected success in enabling PNO" )
496 if "FAIL" not in dev
[ 0 ]. request ( "SET pno 1 freq=0-6000" ):
497 raise Exception ( "Unexpected success in enabling PNO" )
498 if "FAIL" in dev
[ 0 ]. request ( "SET pno 0" ):
499 raise Exception ( "Unexpected failure in disabling PNO" )
501 def test_wpas_ctrl_get ( dev
):
502 """wpa_supplicant ctrl_iface get"""
503 if "FAIL" in dev
[ 0 ]. request ( "GET version" ):
504 raise Exception ( "Unexpected get failure for version" )
505 if "FAIL" in dev
[ 0 ]. request ( "GET wifi_display" ):
506 raise Exception ( "Unexpected get failure for wifi_display" )
507 if "FAIL" not in dev
[ 0 ]. request ( "GET foo" ):
508 raise Exception ( "Unexpected success on get command" )
510 def test_wpas_ctrl_preauth ( dev
):
511 """wpa_supplicant ctrl_iface preauth"""
512 if "FAIL" not in dev
[ 0 ]. request ( "PREAUTH " ):
513 raise Exception ( "Unexpected success on invalid PREAUTH" )
514 if "FAIL" in dev
[ 0 ]. request ( "PREAUTH 00:11:22:33:44:55" ):
515 raise Exception ( "Unexpected failure on PREAUTH" )
517 def test_wpas_ctrl_stkstart ( dev
):
518 """wpa_supplicant ctrl_iface strkstart"""
519 if "FAIL" not in dev
[ 0 ]. request ( "STKSTART " ):
520 raise Exception ( "Unexpected success on invalid STKSTART" )
521 if "FAIL" not in dev
[ 0 ]. request ( "STKSTART 00:11:22:33:44:55" ):
522 raise Exception ( "Unexpected success on STKSTART" )
524 def test_wpas_ctrl_tdls_discover ( dev
):
525 """wpa_supplicant ctrl_iface tdls_discover"""
526 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_DISCOVER " ):
527 raise Exception ( "Unexpected success on invalid TDLS_DISCOVER" )
528 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_DISCOVER 00:11:22:33:44:55" ):
529 raise Exception ( "Unexpected success on TDLS_DISCOVER" )
531 def test_wpas_ctrl_tdls_chan_switch ( dev
):
532 """wpa_supplicant ctrl_iface tdls_chan_switch error cases"""
533 for args
in [ '' , '00:11:22:33:44:55' ]:
534 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_CANCEL_CHAN_SWITCH " + args
):
535 raise Exception ( "Unexpected success on invalid TDLS_CANCEL_CHAN_SWITCH: " + args
)
537 for args
in [ '' , 'foo ' , '00:11:22:33:44:55 ' , '00:11:22:33:44:55 q' ,
538 '00:11:22:33:44:55 81' , '00:11:22:33:44:55 81 1234' ,
539 '00:11:22:33:44:55 81 1234 center_freq1=234 center_freq2=345 bandwidth=456 sec_channel_offset=567 ht vht' ]:
540 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_CHAN_SWITCH " + args
):
541 raise Exception ( "Unexpected success on invalid TDLS_CHAN_SWITCH: " + args
)
543 def test_wpas_ctrl_addr ( dev
):
544 """wpa_supplicant ctrl_iface invalid address"""
545 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_SETUP " ):
546 raise Exception ( "Unexpected success on invalid TDLS_SETUP" )
547 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_TEARDOWN " ):
548 raise Exception ( "Unexpected success on invalid TDLS_TEARDOWN" )
549 if "FAIL" not in dev
[ 0 ]. request ( "FT_DS " ):
550 raise Exception ( "Unexpected success on invalid FT_DS" )
551 if "FAIL" not in dev
[ 0 ]. request ( "WPS_PBC 00:11:22:33:44" ):
552 raise Exception ( "Unexpected success on invalid WPS_PBC" )
553 if "FAIL" not in dev
[ 0 ]. request ( "WPS_PIN 00:11:22:33:44" ):
554 raise Exception ( "Unexpected success on invalid WPS_PIN" )
555 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC 00:11:22:33:44" ):
556 raise Exception ( "Unexpected success on invalid WPS_NFC" )
557 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44 12345670" ):
558 raise Exception ( "Unexpected success on invalid WPS_REG" )
559 if "FAIL" not in dev
[ 0 ]. request ( "IBSS_RSN 00:11:22:33:44" ):
560 raise Exception ( "Unexpected success on invalid IBSS_RSN" )
561 if "FAIL" not in dev
[ 0 ]. request ( "BLACKLIST 00:11:22:33:44" ):
562 raise Exception ( "Unexpected success on invalid BLACKLIST" )
564 def test_wpas_ctrl_wps_errors ( dev
):
565 """wpa_supplicant ctrl_iface WPS error cases"""
566 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44:55" ):
567 raise Exception ( "Unexpected success on invalid WPS_REG" )
568 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44:55 12345670 2233" ):
569 raise Exception ( "Unexpected success on invalid WPS_REG" )
570 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44:55 12345670 2233 OPEN" ):
571 raise Exception ( "Unexpected success on invalid WPS_REG" )
572 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44:55 12345670 2233 OPEN NONE" ):
573 raise Exception ( "Unexpected success on invalid WPS_REG" )
575 if "FAIL" not in dev
[ 0 ]. request ( "WPS_AP_PIN random" ):
576 raise Exception ( "Unexpected success on WPS_AP_PIN in non-AP mode" )
578 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_PIN any" ):
579 raise Exception ( "Unexpected success on invalid WPS_ER_PIN" )
581 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_LEARN 00:11:22:33:44:55" ):
582 raise Exception ( "Unexpected success on invalid WPS_ER_LEARN" )
584 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_SET_CONFIG 00:11:22:33:44:55" ):
585 raise Exception ( "Unexpected success on invalid WPS_ER_SET_CONFIG" )
587 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55" ):
588 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
589 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55 12345670" ):
590 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
591 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55 12345670 2233" ):
592 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
593 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55 12345670 2233 OPEN" ):
594 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
595 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55 12345670 2233 OPEN NONE" ):
596 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
598 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_NFC_CONFIG_TOKEN WPS" ):
599 raise Exception ( "Unexpected success on invalid WPS_ER_NFC_CONFIG_TOKEN" )
600 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_NFC_CONFIG_TOKEN FOO 00:11:22:33:44:55" ):
601 raise Exception ( "Unexpected success on invalid WPS_ER_NFC_CONFIG_TOKEN" )
602 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_NFC_CONFIG_TOKEN NDEF 00:11:22:33:44:55" ):
603 raise Exception ( "Unexpected success on invalid WPS_ER_NFC_CONFIG_TOKEN" )
605 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC_CONFIG_TOKEN FOO" ):
606 raise Exception ( "Unexpected success on invalid WPS_NFC_CONFIG_TOKEN" )
607 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC_CONFIG_TOKEN WPS FOO" ):
608 raise Exception ( "Unexpected success on invalid WPS_NFC_CONFIG_TOKEN" )
609 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC_TOKEN FOO" ):
610 raise Exception ( "Unexpected success on invalid WPS_NFC_TOKEN" )
612 def test_wpas_ctrl_config_parser ( dev
):
613 """wpa_supplicant ctrl_iface SET config parser"""
614 if "FAIL" not in dev
[ 0 ]. request ( "SET pbc_in_m1 qwerty" ):
615 raise Exception ( "Non-number accepted as integer" )
616 if "FAIL" not in dev
[ 0 ]. request ( "SET eapol_version 0" ):
617 raise Exception ( "Out-of-range value accepted" )
618 if "FAIL" not in dev
[ 0 ]. request ( "SET eapol_version 10" ):
619 raise Exception ( "Out-of-range value accepted" )
621 if "FAIL" not in dev
[ 0 ]. request ( "SET serial_number 0123456789abcdef0123456789abcdef0" ):
622 raise Exception ( "Too long string accepted" )
624 def test_wpas_ctrl_mib ( dev
):
625 """wpa_supplicant ctrl_iface MIB"""
626 mib
= dev
[ 0 ]. get_mib ()
627 if "dot11RSNAOptionImplemented" not in mib
:
628 raise Exception ( "Missing MIB entry" )
629 if mib
[ "dot11RSNAOptionImplemented" ] != "TRUE" :
630 raise Exception ( "Unexpected dot11RSNAOptionImplemented value" )
632 def test_wpas_ctrl_set_wps_params ( dev
):
633 """wpa_supplicant ctrl_iface SET config_methods"""
634 ts
= [ "config_methods label virtual_display virtual_push_button keypad" ,
635 "device_type 1-0050F204-1" ,
636 "os_version 01020300" ,
637 "uuid 12345678-9abc-def0-1234-56789abcdef0" ]
639 if "OK" not in dev
[ 2 ]. request ( "SET " + t
):
640 raise Exception ( "SET failed for: " + t
)
642 def test_wpas_ctrl_level ( dev
):
643 """wpa_supplicant ctrl_iface LEVEL"""
645 if "FAIL" not in dev
[ 2 ]. request ( "LEVEL 3" ):
646 raise Exception ( "Unexpected LEVEL success" )
647 if "OK" not in dev
[ 2 ]. mon
. request ( "LEVEL 2" ):
648 raise Exception ( "Unexpected LEVEL failure" )
649 dev
[ 2 ]. request ( "SCAN freq=2412" )
650 ev
= dev
[ 2 ]. wait_event ([ "State:" ], timeout
= 5 )
652 raise Exception ( "No debug message received" )
653 dev
[ 2 ]. wait_event ([ "CTRL-EVENT-SCAN-RESULTS" ], timeout
= 5 )
655 dev
[ 2 ]. mon
. request ( "LEVEL 3" )
657 def test_wpas_ctrl_bssid_filter ( dev
, apdev
):
658 """wpa_supplicant bssid_filter"""
660 if "OK" not in dev
[ 2 ]. request ( "SET bssid_filter " + apdev
[ 0 ][ 'bssid' ]):
661 raise Exception ( "Failed to set bssid_filter" )
662 params
= { "ssid" : "test" }
663 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
664 hostapd
. add_ap ( apdev
[ 1 ][ 'ifname' ], params
)
665 dev
[ 2 ]. scan_for_bss ( apdev
[ 0 ][ 'bssid' ], freq
= "2412" )
666 dev
[ 2 ]. scan ( freq
= "2412" )
667 bss
= dev
[ 2 ]. get_bss ( apdev
[ 0 ][ 'bssid' ])
668 if bss
is None or len ( bss
) == 0 :
669 raise Exception ( "Missing BSS data" )
670 bss
= dev
[ 2 ]. get_bss ( apdev
[ 1 ][ 'bssid' ])
671 if bss
and len ( bss
) != 0 :
672 raise Exception ( "Unexpected BSS data" )
673 dev
[ 2 ]. request ( "SET bssid_filter " )
674 dev
[ 2 ]. scan ( freq
= "2412" )
675 bss
= dev
[ 2 ]. get_bss ( apdev
[ 0 ][ 'bssid' ])
676 if bss
is None or len ( bss
) == 0 :
677 raise Exception ( "Missing BSS data" )
678 bss
= dev
[ 2 ]. get_bss ( apdev
[ 1 ][ 'bssid' ])
679 if bss
is None or len ( bss
) == 0 :
680 raise Exception ( "Missing BSS data(2)" )
681 res
= dev
[ 2 ]. request ( "SCAN_RESULTS" ). splitlines ()
682 if "test" not in res
[ 1 ] or "test" not in res
[ 2 ]:
683 raise Exception ( "SSID missing from SCAN_RESULTS" )
684 if apdev
[ 0 ][ 'bssid' ] not in res
[ 1 ] and apdev
[ 1 ][ 'bssid' ] not in res
[ 1 ]:
685 raise Exception ( "BSS1 missing from SCAN_RESULTS" )
686 if apdev
[ 0 ][ 'bssid' ] not in res
[ 2 ] and apdev
[ 1 ][ 'bssid' ] not in res
[ 2 ]:
687 raise Exception ( "BSS1 missing from SCAN_RESULTS" )
689 if "FAIL" not in dev
[ 2 ]. request ( "SET bssid_filter 00:11:22:33:44:55 00:11:22:33:44" ):
690 raise Exception ( "Unexpected success for invalid SET bssid_filter" )
692 dev
[ 2 ]. request ( "SET bssid_filter " )
694 def test_wpas_ctrl_disallow_aps ( dev
, apdev
):
695 """wpa_supplicant ctrl_iface disallow_aps"""
696 params
= { "ssid" : "test" }
697 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
699 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps bssid " ):
700 raise Exception ( "Unexpected success on invalid disallow_aps" )
701 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps bssid 00:11:22:33:44" ):
702 raise Exception ( "Unexpected success on invalid disallow_aps" )
703 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps ssid 0" ):
704 raise Exception ( "Unexpected success on invalid disallow_aps" )
705 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps ssid 4q" ):
706 raise Exception ( "Unexpected success on invalid disallow_aps" )
707 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps bssid 00:11:22:33:44:55 ssid 112233 ssid 123" ):
708 raise Exception ( "Unexpected success on invalid disallow_aps" )
709 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps ssid 000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f00" ):
710 raise Exception ( "Unexpected success on invalid disallow_aps" )
711 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps foo 112233445566" ):
712 raise Exception ( "Unexpected success on invalid disallow_aps" )
714 dev
[ 0 ]. connect ( "test" , key_mgmt
= "NONE" , scan_freq
= "2412" )
715 hostapd
. add_ap ( apdev
[ 1 ][ 'ifname' ], params
)
716 dev
[ 0 ]. scan_for_bss ( apdev
[ 1 ][ 'bssid' ], freq
= "2412" )
717 dev
[ 0 ]. dump_monitor ()
718 if "OK" not in dev
[ 0 ]. request ( "SET disallow_aps bssid 00:11:22:33:44:55 bssid 00:22:33:44:55:66" ):
719 raise Exception ( "Failed to set disallow_aps" )
720 if "OK" not in dev
[ 0 ]. request ( "SET disallow_aps bssid " + apdev
[ 0 ][ 'bssid' ]):
721 raise Exception ( "Failed to set disallow_aps" )
722 ev
= dev
[ 0 ]. wait_connected ( timeout
= 30 , error
= "Reassociation timed out" )
723 if apdev
[ 1 ][ 'bssid' ] not in ev
:
724 raise Exception ( "Unexpected BSSID" )
726 dev
[ 0 ]. dump_monitor ()
727 if "OK" not in dev
[ 0 ]. request ( "SET disallow_aps ssid " + "test" . encode ( "hex" )):
728 raise Exception ( "Failed to set disallow_aps" )
729 dev
[ 0 ]. wait_disconnected ( timeout
= 5 , error
= "Disconnection not seen" )
730 ev
= dev
[ 0 ]. wait_event ([ "CTRL-EVENT-CONNECTED" ], timeout
= 1 )
732 raise Exception ( "Unexpected reassociation" )
734 dev
[ 0 ]. request ( "DISCONNECT" )
735 dev
[ 0 ]. p2p_start_go ( freq
= 2412 )
736 if "OK" not in dev
[ 0 ]. request ( "SET disallow_aps " ):
737 raise Exception ( "Failed to set disallow_aps" )
739 def test_wpas_ctrl_blob ( dev
):
740 """wpa_supplicant ctrl_iface SET blob"""
741 if "FAIL" not in dev
[ 0 ]. request ( "SET blob foo" ):
742 raise Exception ( "Unexpected SET success" )
743 if "FAIL" not in dev
[ 0 ]. request ( "SET blob foo 0" ):
744 raise Exception ( "Unexpected SET success" )
745 if "FAIL" not in dev
[ 0 ]. request ( "SET blob foo 0q" ):
746 raise Exception ( "Unexpected SET success" )
747 if "OK" not in dev
[ 0 ]. request ( "SET blob foo 00" ):
748 raise Exception ( "Unexpected SET failure" )
749 if "OK" not in dev
[ 0 ]. request ( "SET blob foo 0011" ):
750 raise Exception ( "Unexpected SET failure" )
752 def test_wpas_ctrl_set_uapsd ( dev
):
753 """wpa_supplicant ctrl_iface SET uapsd"""
754 if "FAIL" not in dev
[ 0 ]. request ( "SET uapsd foo" ):
755 raise Exception ( "Unexpected SET success" )
756 if "FAIL" not in dev
[ 0 ]. request ( "SET uapsd 0,0,0" ):
757 raise Exception ( "Unexpected SET success" )
758 if "FAIL" not in dev
[ 0 ]. request ( "SET uapsd 0,0" ):
759 raise Exception ( "Unexpected SET success" )
760 if "FAIL" not in dev
[ 0 ]. request ( "SET uapsd 0" ):
761 raise Exception ( "Unexpected SET success" )
762 if "OK" not in dev
[ 0 ]. request ( "SET uapsd 1,1,1,1;1" ):
763 raise Exception ( "Unexpected SET failure" )
764 if "OK" not in dev
[ 0 ]. request ( "SET uapsd 0,0,0,0;0" ):
765 raise Exception ( "Unexpected SET failure" )
766 if "OK" not in dev
[ 0 ]. request ( "SET uapsd disable" ):
767 raise Exception ( "Unexpected SET failure" )
769 def test_wpas_ctrl_set ( dev
):
770 """wpa_supplicant ctrl_iface SET"""
776 "dot11RSNAConfigPMKLifetime 0" ,
777 "dot11RSNAConfigPMKReauthThreshold 101" ,
778 "dot11RSNAConfigSATimeout 0" ,
779 "wps_version_number -1" ,
780 "wps_version_number 256" ]
782 if "FAIL" not in dev
[ 0 ]. request ( "SET " + val
):
783 raise Exception ( "Unexpected SET success for " + val
)
785 vals
= [ "EAPOL::heldPeriod 60" ,
786 "EAPOL::authPeriod 30" ,
787 "EAPOL::startPeriod 30" ,
789 "dot11RSNAConfigSATimeout 60" ,
796 if "OK" not in dev
[ 0 ]. request ( "SET " + val
):
797 raise Exception ( "Unexpected SET failure for " + val
)
799 def test_wpas_ctrl_get_capability ( dev
):
800 """wpa_supplicant ctrl_iface GET_CAPABILITY"""
801 if "FAIL" not in dev
[ 0 ]. request ( "GET_CAPABILITY 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" ):
802 raise Exception ( "Unexpected success on invalid GET_CAPABILITY" )
803 if "FAIL" not in dev
[ 0 ]. request ( "GET_CAPABILITY eap foo" ):
804 raise Exception ( "Unexpected success on invalid GET_CAPABILITY" )
805 if "AP" not in dev
[ 0 ]. request ( "GET_CAPABILITY modes strict" ):
806 raise Exception ( "Unexpected GET_CAPABILITY response" )
807 res
= dev
[ 0 ]. get_capability ( "eap" )
808 if "TTLS" not in res
:
809 raise Exception ( "Unexpected GET_CAPABILITY eap response: " + str ( res
))
811 res
= dev
[ 0 ]. get_capability ( "pairwise" )
812 if "CCMP" not in res
:
813 raise Exception ( "Unexpected GET_CAPABILITY pairwise response: " + str ( res
))
815 res
= dev
[ 0 ]. get_capability ( "group" )
816 if "CCMP" not in res
:
817 raise Exception ( "Unexpected GET_CAPABILITY group response: " + str ( res
))
819 res
= dev
[ 0 ]. get_capability ( "key_mgmt" )
820 if "WPA-PSK" not in res
or "WPA-EAP" not in res
:
821 raise Exception ( "Unexpected GET_CAPABILITY key_mgmt response: " + str ( res
))
823 res
= dev
[ 0 ]. get_capability ( "proto" )
824 if "WPA" not in res
or "RSN" not in res
:
825 raise Exception ( "Unexpected GET_CAPABILITY proto response: " + str ( res
))
827 res
= dev
[ 0 ]. get_capability ( "auth_alg" )
828 if "OPEN" not in res
or "SHARED" not in res
:
829 raise Exception ( "Unexpected GET_CAPABILITY auth_alg response: " + str ( res
))
831 res
= dev
[ 0 ]. get_capability ( "modes" )
832 if "IBSS" not in res
or "AP" not in res
:
833 raise Exception ( "Unexpected GET_CAPABILITY modes response: " + str ( res
))
835 res
= dev
[ 0 ]. get_capability ( "channels" )
836 if "8" not in res
or "36" not in res
:
837 raise Exception ( "Unexpected GET_CAPABILITY channels response: " + str ( res
))
839 res
= dev
[ 0 ]. get_capability ( "freq" )
840 if "2457" not in res
or "5180" not in res
:
841 raise Exception ( "Unexpected GET_CAPABILITY freq response: " + str ( res
))
843 res
= dev
[ 0 ]. get_capability ( "tdls" )
844 if "EXTERNAL" not in res
[ 0 ]:
845 raise Exception ( "Unexpected GET_CAPABILITY tdls response: " + str ( res
))
847 res
= dev
[ 0 ]. get_capability ( "erp" )
848 if res
is None or "ERP" not in res
[ 0 ]:
849 raise Exception ( "Unexpected GET_CAPABILITY erp response: " + str ( res
))
851 if dev
[ 0 ]. get_capability ( "foo" ) is not None :
852 raise Exception ( "Unexpected GET_CAPABILITY foo response: " + str ( res
))
854 def test_wpas_ctrl_nfc_report_handover ( dev
):
855 """wpa_supplicant ctrl_iface NFC_REPORT_HANDOVER"""
866 if "FAIL" not in dev
[ 0 ]. request ( "NFC_REPORT_HANDOVER " + v
):
867 raise Exception ( "Unexpected NFC_REPORT_HANDOVER success for " + v
)
869 def test_wpas_ctrl_nfc_tag_read ( dev
):
870 """wpa_supplicant ctrl_iface WPS_NFC_TAG_READ"""
871 vals
= [ "FOO" , "0Q" , "00" , "000000" , "10000001" , "10000000" , "00000000" ,
872 "100e0000" , "100e0001ff" , "100e000411110000" , "100e0004100e0001" ]
874 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC_TAG_READ " + v
):
875 raise Exception ( "Unexpected WPS_NFC_TAG_READ success for " + v
)
877 def test_wpas_ctrl_nfc_get_handover ( dev
):
878 """wpa_supplicant ctrl_iface NFC_GET_HANDOVER"""
879 vals
= [ "FOO" , "FOO BAR" , "WPS WPS" , "WPS WPS-CR" , "WPS FOO" , "NDEF P2P" ]
881 if "FAIL" not in dev
[ 0 ]. request ( "NFC_GET_HANDOVER_REQ " + v
):
882 raise Exception ( "Unexpected NFC_GET_HANDOVER_REQ success for " + v
)
884 vals
= [ "NDEF WPS" , "NDEF P2P-CR" , "WPS P2P-CR" ]
886 if "FAIL" in dev
[ 0 ]. request ( "NFC_GET_HANDOVER_REQ " + v
):
887 raise Exception ( "Unexpected NFC_GET_HANDOVER_REQ failure for " + v
)
889 vals
= [ "FOO" , "FOO BAR" , "WPS WPS" , "WPS WPS-CR" , "WPS FOO" , "NDEF P2P" ,
890 "NDEF WPS" , "NDEF WPS uuid" ]
892 if "FAIL" not in dev
[ 0 ]. request ( "NFC_GET_HANDOVER_SEL " + v
):
893 raise Exception ( "Unexpected NFC_GET_HANDOVER_SEL success for " + v
)
895 vals
= [ "NDEF P2P-CR" , "WPS P2P-CR" , "NDEF P2P-CR-TAG" ,
898 if "FAIL" in dev
[ 0 ]. request ( "NFC_GET_HANDOVER_SEL " + v
):
899 raise Exception ( "Unexpected NFC_GET_HANDOVER_SEL failure for " + v
)
901 def get_blacklist ( dev
):
902 return dev
. request ( "BLACKLIST" ). splitlines ()
904 def test_wpas_ctrl_blacklist ( dev
):
905 """wpa_supplicant ctrl_iface BLACKLIST"""
906 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST clear" ):
907 raise Exception ( "BLACKLIST clear failed" )
908 b
= get_blacklist ( dev
[ 0 ])
910 raise Exception ( "Unexpected blacklist contents: " + str ( b
))
911 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST 00:11:22:33:44:55" ):
912 raise Exception ( "BLACKLIST add failed" )
913 b
= get_blacklist ( dev
[ 0 ])
914 if "00:11:22:33:44:55" not in b
:
915 raise Exception ( "Unexpected blacklist contents: " + str ( b
))
916 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST 00:11:22:33:44:56" ):
917 raise Exception ( "BLACKLIST add failed" )
918 b
= get_blacklist ( dev
[ 0 ])
919 if "00:11:22:33:44:55" not in b
or "00:11:22:33:44:56" not in b
:
920 raise Exception ( "Unexpected blacklist contents: " + str ( b
))
921 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST 00:11:22:33:44:56" ):
922 raise Exception ( "BLACKLIST add failed" )
923 b
= get_blacklist ( dev
[ 0 ])
924 if "00:11:22:33:44:55" not in b
or "00:11:22:33:44:56" not in b
or len ( b
) != 2 :
925 raise Exception ( "Unexpected blacklist contents: " + str ( b
))
927 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST clear" ):
928 raise Exception ( "BLACKLIST clear failed" )
929 if dev
[ 0 ]. request ( "BLACKLIST" ) != "" :
930 raise Exception ( "Unexpected blacklist contents" )
932 def test_wpas_ctrl_blacklist_oom ( dev
):
933 """wpa_supplicant ctrl_iface BLACKLIST and out-of-memory"""
934 with
alloc_fail ( dev
[ 0 ], 1 , "wpa_blacklist_add" ):
935 if "FAIL" not in dev
[ 0 ]. request ( "BLACKLIST aa:bb:cc:dd:ee:ff" ):
936 raise Exception ( "Unexpected success with allocation failure" )
938 def test_wpas_ctrl_log_level ( dev
):
939 """wpa_supplicant ctrl_iface LOG_LEVEL"""
940 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
941 if "Current level: MSGDUMP" not in level
:
942 raise Exception ( "Unexpected debug level(1): " + level
)
943 if "Timestamp: 1" not in level
:
944 raise Exception ( "Unexpected timestamp(1): " + level
)
946 if "OK" not in dev
[ 2 ]. request ( "LOG_LEVEL MSGDUMP 0" ):
947 raise Exception ( "LOG_LEVEL failed" )
948 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
949 if "Current level: MSGDUMP" not in level
:
950 raise Exception ( "Unexpected debug level(2): " + level
)
951 if "Timestamp: 0" not in level
:
952 raise Exception ( "Unexpected timestamp(2): " + level
)
954 if "OK" not in dev
[ 2 ]. request ( "LOG_LEVEL MSGDUMP 1" ):
955 raise Exception ( "LOG_LEVEL failed" )
956 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
957 if "Current level: MSGDUMP" not in level
:
958 raise Exception ( "Unexpected debug level(3): " + level
)
959 if "Timestamp: 1" not in level
:
960 raise Exception ( "Unexpected timestamp(3): " + level
)
962 if "FAIL" not in dev
[ 2 ]. request ( "LOG_LEVEL FOO" ):
963 raise Exception ( "Invalid LOG_LEVEL accepted" )
965 for lev
in [ "EXCESSIVE" , "MSGDUMP" , "DEBUG" , "INFO" , "WARNING" , "ERROR" ]:
966 if "OK" not in dev
[ 2 ]. request ( "LOG_LEVEL " + lev
):
967 raise Exception ( "LOG_LEVEL failed for " + lev
)
968 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
969 if "Current level: " + lev
not in level
:
970 raise Exception ( "Unexpected debug level: " + level
)
972 if "OK" not in dev
[ 2 ]. request ( "LOG_LEVEL MSGDUMP 1" ):
973 raise Exception ( "LOG_LEVEL failed" )
974 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
975 if "Current level: MSGDUMP" not in level
:
976 raise Exception ( "Unexpected debug level(3): " + level
)
977 if "Timestamp: 1" not in level
:
978 raise Exception ( "Unexpected timestamp(3): " + level
)
980 def test_wpas_ctrl_enable_disable_network ( dev
, apdev
):
981 """wpa_supplicant ctrl_iface ENABLE/DISABLE_NETWORK"""
982 params
= { "ssid" : "test" }
983 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
985 id = dev
[ 0 ]. connect ( "test" , key_mgmt
= "NONE" , scan_freq
= "2412" ,
986 only_add_network
= True )
987 if "OK" not in dev
[ 0 ]. request ( "DISABLE_NETWORK " + str ( id )):
988 raise Exception ( "Failed to disable network" )
989 if "OK" not in dev
[ 0 ]. request ( "ENABLE_NETWORK " + str ( id ) + " no-connect" ):
990 raise Exception ( "Failed to enable network" )
991 if "OK" not in dev
[ 0 ]. request ( "DISABLE_NETWORK all" ):
992 raise Exception ( "Failed to disable networks" )
993 if "OK" not in dev
[ 0 ]. request ( "ENABLE_NETWORK " + str ( id )):
994 raise Exception ( "Failed to enable network" )
995 dev
[ 0 ]. wait_connected ( timeout
= 10 )
996 if "OK" not in dev
[ 0 ]. request ( "DISABLE_NETWORK " + str ( id )):
997 raise Exception ( "Failed to disable network" )
998 dev
[ 0 ]. wait_disconnected ( timeout
= 10 )
1001 if "OK" not in dev
[ 0 ]. request ( "ENABLE_NETWORK all" ):
1002 raise Exception ( "Failed to enable network" )
1003 dev
[ 0 ]. wait_connected ( timeout
= 10 )
1004 if "OK" not in dev
[ 0 ]. request ( "DISABLE_NETWORK all" ):
1005 raise Exception ( "Failed to disable network" )
1006 dev
[ 0 ]. wait_disconnected ( timeout
= 10 )
1008 def test_wpas_ctrl_country ( dev
, apdev
):
1009 """wpa_supplicant SET/GET country code"""
1011 # work around issues with possible pending regdom event from the end of
1012 # the previous test case
1014 dev
[ 0 ]. dump_monitor ()
1016 if "OK" not in dev
[ 0 ]. request ( "SET country FI" ):
1017 raise Exception ( "Failed to set country code" )
1018 if dev
[ 0 ]. request ( "GET country" ) != "FI" :
1019 raise Exception ( "Country code set failed" )
1020 ev
= dev
[ 0 ]. wait_event ([ "CTRL-EVENT-REGDOM-CHANGE" ])
1022 raise Exception ( "regdom change event not seen" )
1023 if "init=USER type=COUNTRY alpha2=FI" not in ev
:
1024 raise Exception ( "Unexpected event contents: " + ev
)
1025 dev
[ 0 ]. request ( "SET country 00" )
1026 if dev
[ 0 ]. request ( "GET country" ) != "00" :
1027 raise Exception ( "Country code set failed" )
1028 ev
= dev
[ 0 ]. wait_event ([ "CTRL-EVENT-REGDOM-CHANGE" ])
1030 raise Exception ( "regdom change event not seen" )
1031 if "init=CORE type=WORLD" not in ev
:
1032 raise Exception ( "Unexpected event contents: " + ev
)
1034 subprocess
. call ([ 'iw' , 'reg' , 'set' , '00' ])
1036 def test_wpas_ctrl_suspend_resume ( dev
):
1037 """wpa_supplicant SUSPEND/RESUME"""
1038 wpas
= WpaSupplicant ( global_iface
= '/tmp/wpas-wlan5' )
1039 wpas
. interface_add ( "wlan5" )
1040 if "OK" not in wpas
. global_request ( "SUSPEND" ):
1041 raise Exception ( "SUSPEND failed" )
1043 if "OK" not in wpas
. global_request ( "RESUME" ):
1044 raise Exception ( "RESUME failed" )
1045 if "OK" not in wpas
. request ( "SUSPEND" ):
1046 raise Exception ( "Per-interface SUSPEND failed" )
1047 if "OK" not in wpas
. request ( "RESUME" ):
1048 raise Exception ( "Per-interface RESUME failed" )
1049 ev
= wpas
. wait_event ([ "CTRL-EVENT-SCAN-RESULTS" ], timeout
= 10 )
1051 raise Exception ( "Scan not completed" )
1053 def test_wpas_ctrl_global ( dev
):
1054 """wpa_supplicant global control interface"""
1055 wpas
= WpaSupplicant ( global_iface
= '/tmp/wpas-wlan5' )
1056 wpas
. interface_add ( "wlan5" )
1058 if "PONG" not in wpas
. global_request ( "PING" ):
1059 raise Exception ( "PING failed" )
1060 if "wlan5" not in wpas
. global_request ( "INTERFACES" ):
1061 raise Exception ( "Interface not found" )
1062 if "UNKNOWN COMMAND" not in wpas
. global_request ( "FOO" ):
1063 raise Exception ( "Unexpected response to unknown command" )
1064 if "PONG" not in wpas
. global_request ( "IFNAME=wlan5 PING" ):
1065 raise Exception ( "Per-interface PING failed" )
1066 if "FAIL-NO-IFNAME-MATCH" not in wpas
. global_request ( "IFNAME=notfound PING" ):
1067 raise Exception ( "Unknown interface not reported correctly" )
1068 if "FAIL" not in wpas
. global_request ( "SAVE_CONFIG" ):
1069 raise Exception ( "SAVE_CONFIG succeeded unexpectedly" )
1070 if "OK" not in wpas
. global_request ( "SET wifi_display 0" ):
1071 raise Exception ( "SET failed" )
1072 if "wifi_display=0" not in wpas
. global_request ( "STATUS" ):
1073 raise Exception ( "wifi_display not disabled" )
1074 if "OK" not in wpas
. global_request ( "SET wifi_display 1" ):
1075 raise Exception ( "SET failed" )
1076 if "wifi_display=1" not in wpas
. global_request ( "STATUS" ):
1077 raise Exception ( "wifi_display not enabled" )
1078 if "FAIL" not in wpas
. global_request ( "SET foo 1" ):
1079 raise Exception ( "SET succeeded unexpectedly" )
1081 if "p2p_state=IDLE" not in wpas
. global_request ( "STATUS" ):
1082 raise Exception ( "P2P was disabled" )
1083 wpas
. global_request ( "P2P_SET disabled 1" )
1084 if "p2p_state=DISABLED" not in wpas
. global_request ( "STATUS" ):
1085 raise Exception ( "P2P was not disabled" )
1086 wpas
. global_request ( "P2P_SET disabled 0" )
1087 if "p2p_state=IDLE" not in wpas
. global_request ( "STATUS" ):
1088 raise Exception ( "P2P was not enabled" )
1090 # driver_nl80211.c does not support interface list, so do not fail because
1092 logger
. debug ( wpas
. global_request ( "INTERFACE_LIST" ))
1094 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD " ):
1095 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1096 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO" ):
1097 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1098 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf" ):
1099 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1100 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver" ):
1101 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1102 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver ctrliface" ):
1103 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1104 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver ctrliface driverparam" ):
1105 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1106 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver ctrliface driverparam bridge" ):
1107 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1108 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver ctrliface driverparam bridge foo" ):
1109 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1110 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO " ):
1111 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1113 def test_wpas_ctrl_roam ( dev
, apdev
):
1114 """wpa_supplicant ctrl_iface ROAM error cases"""
1115 if "FAIL" not in dev
[ 0 ]. request ( "ROAM 00:11:22:33:44" ):
1116 raise Exception ( "Unexpected success" )
1117 if "FAIL" not in dev
[ 0 ]. request ( "ROAM 00:11:22:33:44:55" ):
1118 raise Exception ( "Unexpected success" )
1119 params
= { "ssid" : "test" }
1120 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
1121 id = dev
[ 0 ]. connect ( "test" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1122 if "FAIL" not in dev
[ 0 ]. request ( "ROAM 00:11:22:33:44:55" ):
1123 raise Exception ( "Unexpected success" )
1125 def test_wpas_ctrl_ipaddr ( dev
, apdev
):
1126 """wpa_supplicant IP address in STATUS"""
1128 subprocess
. call ([ 'ip' , 'addr' , 'add' , '10.174.65.207/32' , 'dev' ,
1130 ipaddr
= dev
[ 0 ]. get_status_field ( 'ip_address' )
1131 if ipaddr
!= '10.174.65.207' :
1132 raise Exception ( "IP address not in STATUS output" )
1134 subprocess
. call ([ 'ip' , 'addr' , 'del' , '10.174.65.207/32' , 'dev' ,
1137 def test_wpas_ctrl_neighbor_rep_req ( dev
, apdev
):
1138 """wpa_supplicant ctrl_iface NEIGHBOR_REP_REQUEST"""
1139 params
= { "ssid" : "test" }
1140 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
1141 params
= { "ssid" : "test2" , "radio_measurements" : "1" }
1142 hostapd
. add_ap ( apdev
[ 1 ][ 'ifname' ], params
)
1144 dev
[ 0 ]. connect ( "test" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1145 if "FAIL" not in dev
[ 0 ]. request ( "NEIGHBOR_REP_REQUEST" ):
1146 raise Exception ( "Request succeeded unexpectedly" )
1147 if "FAIL" not in dev
[ 0 ]. request ( "NEIGHBOR_REP_REQUEST ssid=abcdef" ):
1148 raise Exception ( "Request succeeded unexpectedly" )
1149 dev
[ 0 ]. request ( "DISCONNECT" )
1151 rrm
= int ( dev
[ 0 ]. get_driver_status_field ( "capa.rrm_flags" ), 16 )
1152 if rrm
& 0x5 != 0x5 :
1153 logger
. info ( "Driver does not support required RRM capabilities - skip rest of the test case" )
1156 dev
[ 0 ]. connect ( "test2" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1158 # These requests are expected to get sent properly, but since hostapd does
1159 # not yet support processing of the request, these are expected to fail.
1161 if "OK" not in dev
[ 0 ]. request ( "NEIGHBOR_REP_REQUEST" ):
1162 raise Exception ( "Request failed" )
1163 ev
= dev
[ 0 ]. wait_event ([ "RRM-NEIGHBOR-REP-RECEIVED" ,
1164 "RRM-NEIGHBOR-REP-REQUEST-FAILED" ], timeout
= 10 )
1166 raise Exception ( "RRM report result not indicated" )
1167 logger
. info ( "RRM result: " + ev
)
1169 if "OK" not in dev
[ 0 ]. request ( "NEIGHBOR_REP_REQUEST ssid=abcdef" ):
1170 raise Exception ( "Request failed" )
1171 ev
= dev
[ 0 ]. wait_event ([ "RRM-NEIGHBOR-REP-RECEIVED" ,
1172 "RRM-NEIGHBOR-REP-REQUEST-FAILED" ], timeout
= 10 )
1174 raise Exception ( "RRM report result not indicated" )
1175 logger
. info ( "RRM result: " + ev
)
1177 def test_wpas_ctrl_rsp ( dev
, apdev
):
1178 """wpa_supplicant ctrl_iface CTRL-RSP-"""
1179 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-" ):
1180 raise Exception ( "Request succeeded unexpectedly" )
1181 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-foo-" ):
1182 raise Exception ( "Request succeeded unexpectedly" )
1183 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-foo-1234567" ):
1184 raise Exception ( "Request succeeded unexpectedly" )
1185 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-foo-1234567:" ):
1186 raise Exception ( "Request succeeded unexpectedly" )
1187 id = dev
[ 0 ]. add_network ()
1188 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-foo- %d :" % id ):
1189 raise Exception ( "Request succeeded unexpectedly" )
1190 for req
in [ "IDENTITY" , "PASSWORD" , "NEW_PASSWORD" , "PIN" , "OTP" ,
1191 "PASSPHRASE" , "SIM" ]:
1192 if "OK" not in dev
[ 0 ]. request ( "CTRL-RSP- %s-%d :" % ( req
, id )):
1193 raise Exception ( "Request failed unexpectedly" )
1194 if "OK" not in dev
[ 0 ]. request ( "CTRL-RSP- %s-%d :" % ( req
, id )):
1195 raise Exception ( "Request failed unexpectedly" )
1197 def test_wpas_ctrl_vendor ( dev
, apdev
):
1198 """wpa_supplicant ctrl_iface VENDOR"""
1205 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR " + cmd
):
1206 raise Exception ( "Invalid VENDOR command accepted: " + cmd
)
1208 def test_wpas_ctrl_mgmt_tx ( dev
, apdev
):
1209 """wpa_supplicant ctrl_iface MGMT_TX"""
1211 "00:11:22:33:44:55 foo" ,
1212 "00:11:22:33:44:55 11:22:33:44:55:66" ,
1213 "00:11:22:33:44:55 11:22:33:44:55:66 freq=0 no_cck=0 wait_time=0 action=123" ,
1214 "00:11:22:33:44:55 11:22:33:44:55:66 action=12qq" ]
1216 if "FAIL" not in dev
[ 0 ]. request ( "MGMT_TX " + cmd
):
1217 raise Exception ( "Invalid MGMT_TX command accepted: " + cmd
)
1219 if "OK" not in dev
[ 0 ]. request ( "MGMT_TX_DONE" ):
1220 raise Exception ( "MGMT_TX_DONE failed" )
1222 def test_wpas_ctrl_driver_event ( dev
, apdev
):
1223 """wpa_supplicant ctrl_iface DRIVER_EVENT"""
1224 if "FAIL" not in dev
[ 0 ]. request ( "DRIVER_EVENT foo" ):
1225 raise Exception ( "Invalid DRIVER_EVENT accepted" )
1227 def test_wpas_ctrl_eapol_rx ( dev
, apdev
):
1228 """wpa_supplicant ctrl_iface EAPOL_RX"""
1230 "00:11:22:33:44:55 123" ,
1231 "00:11:22:33:44:55 12qq" ]
1233 if "FAIL" not in dev
[ 0 ]. request ( "EAPOL_RX " + cmd
):
1234 raise Exception ( "Invalid EAPOL_RX command accepted: " + cmd
)
1236 def test_wpas_ctrl_data_test ( dev
, apdev
):
1237 """wpa_supplicant ctrl_iface DATA_TEST"""
1238 dev
[ 0 ]. request ( "DATA_TEST_CONFIG 0" )
1239 if "FAIL" not in dev
[ 0 ]. request ( "DATA_TEST_TX 00:11:22:33:44:55 00:11:22:33:44:55 0" ):
1240 raise Exception ( "DATA_TEST_TX accepted when not in test mode" )
1243 if "OK" not in dev
[ 0 ]. request ( "DATA_TEST_CONFIG 1" ):
1244 raise Exception ( "DATA_TEST_CONFIG failed" )
1245 if "OK" not in dev
[ 0 ]. request ( "DATA_TEST_CONFIG 1" ):
1246 raise Exception ( "DATA_TEST_CONFIG failed" )
1248 "00:11:22:33:44:55 foo" ,
1249 "00:11:22:33:44:55 00:11:22:33:44:55 -1" ,
1250 "00:11:22:33:44:55 00:11:22:33:44:55 256" ]
1252 if "FAIL" not in dev
[ 0 ]. request ( "DATA_TEST_TX " + cmd
):
1253 raise Exception ( "Invalid DATA_TEST_TX command accepted: " + cmd
)
1254 if "OK" not in dev
[ 0 ]. request ( "DATA_TEST_TX 00:11:22:33:44:55 00:11:22:33:44:55 0" ):
1255 raise Exception ( "DATA_TEST_TX failed" )
1257 dev
[ 0 ]. request ( "DATA_TEST_CONFIG 0" )
1261 "00112233445566778899aabbccdde" ,
1262 "00112233445566778899aabbccdq" ]
1264 if "FAIL" not in dev
[ 0 ]. request ( "DATA_TEST_FRAME " + cmd
):
1265 raise Exception ( "Invalid DATA_TEST_FRAME command accepted: " + cmd
)
1267 if "OK" not in dev
[ 0 ]. request ( "DATA_TEST_FRAME 00112233445566778899aabbccddee" ):
1268 raise Exception ( "DATA_TEST_FRAME failed" )
1270 def test_wpas_ctrl_vendor_elem ( dev
, apdev
):
1271 """wpa_supplicant ctrl_iface VENDOR_ELEM"""
1272 if "OK" not in dev
[ 0 ]. request ( "VENDOR_ELEM_ADD 1 " ):
1273 raise Exception ( "VENDOR_ELEM_ADD failed" )
1280 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR_ELEM_ADD " + cmd
):
1281 raise Exception ( "Invalid VENDOR_ELEM_ADD command accepted: " + cmd
)
1286 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR_ELEM_GET " + cmd
):
1287 raise Exception ( "Invalid VENDOR_ELEM_GET command accepted: " + cmd
)
1289 dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE 1 *" )
1299 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE " + cmd
):
1300 raise Exception ( "Invalid VENDOR_ELEM_REMOVE command accepted: " + cmd
)
1302 dev
[ 0 ]. request ( "VENDOR_ELEM_ADD 1 000100" )
1303 if "OK" not in dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE 1 " ):
1304 raise Exception ( "VENDOR_ELEM_REMOVE failed" )
1313 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE " + cmd
):
1314 raise Exception ( "Invalid VENDOR_ELEM_REMOVE command accepted: " + cmd
)
1315 if "OK" not in dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE 1 000100" ):
1316 raise Exception ( "VENDOR_ELEM_REMOVE failed" )
1318 def test_wpas_ctrl_misc ( dev
, apdev
):
1319 """wpa_supplicant ctrl_iface and miscellaneous commands"""
1320 if "OK" not in dev
[ 0 ]. request ( "RELOG" ):
1321 raise Exception ( "RELOG failed" )
1322 if dev
[ 0 ]. request ( "IFNAME" ) != dev
[ 0 ]. ifname
:
1323 raise Exception ( "IFNAME returned unexpected response" )
1324 if "FAIL" not in dev
[ 0 ]. request ( "REATTACH" ):
1325 raise Exception ( "REATTACH accepted while disabled" )
1326 if "OK" not in dev
[ 2 ]. request ( "RECONFIGURE" ):
1327 raise Exception ( "RECONFIGURE failed" )
1328 if "FAIL" in dev
[ 0 ]. request ( "INTERFACE_LIST" ):
1329 raise Exception ( "INTERFACE_LIST failed" )
1330 if "UNKNOWN COMMAND" not in dev
[ 0 ]. request ( "FOO" ):
1331 raise Exception ( "Unknown command accepted" )
1333 if "FAIL" not in dev
[ 0 ]. global_request ( "INTERFACE_REMOVE foo" ):
1334 raise Exception ( "Invalid INTERFACE_REMOVE accepted" )
1335 if "FAIL" not in dev
[ 0 ]. global_request ( "SET foo" ):
1336 raise Exception ( "Invalid global SET accepted" )
1338 def test_wpas_ctrl_dump ( dev
, apdev
):
1339 """wpa_supplicant ctrl_iface and DUMP/GET global parameters"""
1340 vals
= dev
[ 0 ]. get_config ()
1341 logger
. info ( "Config values from DUMP: " + str ( vals
))
1343 res
= dev
[ 0 ]. request ( "GET " + field
)
1346 if res
!= vals
[ field
]:
1347 print "'{}' != '{}'" . format ( res
, vals
[ field
])
1348 raise Exception ( "Mismatch in config field " + field
)
1349 if "beacon_int" not in vals
:
1350 raise Exception ( "Missing config field" )
1352 def test_wpas_ctrl_interface_add ( dev
, apdev
):
1353 """wpa_supplicant INTERFACE_ADD/REMOVE with vif creation/removal"""
1354 hapd
= hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], { "ssid" : "open" })
1355 dev
[ 0 ]. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1356 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1358 ifname
= "test-" + dev
[ 0 ]. ifname
1359 dev
[ 0 ]. interface_add ( ifname
, create
= True )
1360 wpas
= WpaSupplicant ( ifname
= ifname
)
1361 wpas
. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1362 hwsim_utils
. test_connectivity ( wpas
, hapd
)
1363 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1364 dev
[ 0 ]. global_request ( "INTERFACE_REMOVE " + ifname
)
1365 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1367 def test_wpas_ctrl_interface_add_many ( dev
, apdev
):
1368 """wpa_supplicant INTERFACE_ADD/REMOVE with vif creation/removal (many)"""
1370 _test_wpas_ctrl_interface_add_many ( dev
, apdev
)
1373 ifname
= "test %d- " % i
+ dev
[ 0 ]. ifname
1374 dev
[ 0 ]. global_request ( "INTERFACE_REMOVE " + ifname
)
1376 def _test_wpas_ctrl_interface_add_many ( dev
, apdev
):
1377 hapd
= hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], { "ssid" : "open" })
1378 dev
[ 0 ]. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1379 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1383 ifname
= "test %d- " % i
+ dev
[ 0 ]. ifname
1384 dev
[ 0 ]. interface_add ( ifname
, create
= True )
1385 wpas
= WpaSupplicant ( ifname
= ifname
)
1386 wpas
. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1389 hwsim_utils
. test_connectivity ( wpas
, hapd
)
1391 def test_wpas_ctrl_interface_add2 ( dev
, apdev
):
1392 """wpa_supplicant INTERFACE_ADD/REMOVE with vif without creation/removal"""
1393 ifname
= "test-ext-" + dev
[ 0 ]. ifname
1395 _test_wpas_ctrl_interface_add2 ( dev
, apdev
, ifname
)
1397 subprocess
. call ([ 'iw' , 'dev' , ifname
, 'del' ])
1399 def _test_wpas_ctrl_interface_add2 ( dev
, apdev
, ifname
):
1400 hapd
= hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], { "ssid" : "open" })
1401 dev
[ 0 ]. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1402 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1404 subprocess
. call ([ 'iw' , 'dev' , dev
[ 0 ]. ifname
, 'interface' , 'add' , ifname
,
1406 dev
[ 0 ]. interface_add ( ifname
, set_ifname
= False , all_params
= True )
1407 wpas
= WpaSupplicant ( ifname
= ifname
)
1408 wpas
. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1409 hwsim_utils
. test_connectivity ( wpas
, hapd
)
1410 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1412 dev
[ 0 ]. global_request ( "INTERFACE_REMOVE " + ifname
)
1413 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)