]> git.ipfire.org Git - thirdparty/hostap.git/blame - tests/hwsim/test_wpas_mesh.py
mesh: Remove unreachable code
[thirdparty/hostap.git] / tests / hwsim / test_wpas_mesh.py
CommitLineData
68157c06
JL
1# wpa_supplicant mesh mode tests
2# Copyright (c) 2014, cozybit Inc.
3#
4# This software may be distributed under the terms of the BSD license.
5# See README for more details.
6
7e3614df
JM
7import logging
8logger = logging.getLogger()
fa7f9570 9import os
de1d5049 10import subprocess
fa7f9570 11import time
7e3614df
JM
12
13import hwsim_utils
14from wpasupplicant import WpaSupplicant
58284168 15from utils import HwsimSkip, alloc_fail, fail_test, wait_fail_trigger
fa7f9570 16from tshark import run_tshark
68157c06 17
b9749b6a 18def check_mesh_support(dev, secure=False):
2f034795 19 if "MESH" not in dev.get_capability("modes"):
81e787b7 20 raise HwsimSkip("Driver does not support mesh")
b9749b6a
JM
21 if secure and "SAE" not in dev.get_capability("auth_alg"):
22 raise HwsimSkip("SAE not supported")
31705bf4 23
8b260032 24def check_mesh_scan(dev, params, other_started=False, beacon_int=0):
68157c06
JL
25 if not other_started:
26 dev.dump_monitor()
27 id = dev.request("SCAN " + params)
28 if "FAIL" in id:
29 raise Exception("Failed to start scan")
30 id = int(id)
31
32 if other_started:
33 ev = dev.wait_event(["CTRL-EVENT-SCAN-STARTED"])
34 if ev is None:
35 raise Exception("Other scan did not start")
36 if "id=" + str(id) in ev:
37 raise Exception("Own scan id unexpectedly included in start event")
38
39 ev = dev.wait_event(["CTRL-EVENT-SCAN-RESULTS"])
40 if ev is None:
41 raise Exception("Other scan did not complete")
42 if "id=" + str(id) in ev:
43 raise Exception(
44 "Own scan id unexpectedly included in completed event")
45
46 ev = dev.wait_event(["CTRL-EVENT-SCAN-STARTED"])
47 if ev is None:
48 raise Exception("Scan did not start")
49 if "id=" + str(id) not in ev:
50 raise Exception("Scan id not included in start event")
51
52 ev = dev.wait_event(["CTRL-EVENT-SCAN-RESULTS"])
53 if ev is None:
54 raise Exception("Scan did not complete")
55 if "id=" + str(id) not in ev:
56 raise Exception("Scan id not included in completed event")
57
58 res = dev.request("SCAN_RESULTS")
59
f54b926b 60 if res.find("[MESH]") < 0:
68157c06
JL
61 raise Exception("Scan did not contain a MESH network")
62
fba65f72
JM
63 bssid = res.splitlines()[1].split(' ')[0]
64 bss = dev.get_bss(bssid)
65 if bss is None:
66 raise Exception("Could not get BSS entry for mesh")
67 if 'mesh_capability' not in bss:
68 raise Exception("mesh_capability missing from BSS entry")
8b260032
JM
69 if beacon_int:
70 if 'beacon_int' not in bss:
71 raise Exception("beacon_int missing from BSS entry")
72 if str(beacon_int) != bss['beacon_int']:
73 raise Exception("Unexpected beacon_int in BSS entry: " + bss['beacon_int'])
68157c06
JL
74
75def check_mesh_group_added(dev):
76 ev = dev.wait_event(["MESH-GROUP-STARTED"])
77 if ev is None:
78 raise Exception("Test exception: Couldn't join mesh")
79
80
81def check_mesh_group_removed(dev):
82 ev = dev.wait_event(["MESH-GROUP-REMOVED"])
83 if ev is None:
84 raise Exception("Test exception: Couldn't leave mesh")
85
86
e0cfd223
JM
87def check_mesh_peer_connected(dev, timeout=10):
88 ev = dev.wait_event(["MESH-PEER-CONNECTED"], timeout=timeout)
68157c06
JL
89 if ev is None:
90 raise Exception("Test exception: Remote peer did not connect.")
91
92
93def check_mesh_peer_disconnected(dev):
94 ev = dev.wait_event(["MESH-PEER-DISCONNECTED"])
95 if ev is None:
96 raise Exception("Test exception: Peer disconnect event not detected.")
97
98
99def test_wpas_add_set_remove_support(dev):
100 """wpa_supplicant MESH add/set/remove network support"""
0ff7afbc 101 check_mesh_support(dev[0])
68157c06
JL
102 id = dev[0].add_network()
103 dev[0].set_network(id, "mode", "5")
104 dev[0].remove_network(id)
105
71a3b85f 106def add_open_mesh_network(dev, freq="2412", start=True, beacon_int=0,
a74a1e4e 107 basic_rates=None, chwidth=0):
7e3614df
JM
108 id = dev.add_network()
109 dev.set_network(id, "mode", "5")
110 dev.set_network_quoted(id, "ssid", "wpas-mesh-open")
111 dev.set_network(id, "key_mgmt", "NONE")
f1381f99 112 dev.set_network(id, "frequency", freq)
a74a1e4e
JM
113 if chwidth > 0:
114 dev.set_network(id, "max_oper_chwidth", str(chwidth))
8b260032
JM
115 if beacon_int:
116 dev.set_network(id, "beacon_int", str(beacon_int))
71a3b85f
JM
117 if basic_rates:
118 dev.set_network(id, "mesh_basic_rates", basic_rates)
d48b64ba
JM
119 if start:
120 dev.mesh_group_add(id)
7e3614df 121 return id
68157c06
JL
122
123def test_wpas_mesh_group_added(dev):
124 """wpa_supplicant MESH group add"""
81e787b7 125 check_mesh_support(dev[0])
d48b64ba 126 add_open_mesh_network(dev[0])
68157c06
JL
127
128 # Check for MESH-GROUP-STARTED event
129 check_mesh_group_added(dev[0])
130
131
132def test_wpas_mesh_group_remove(dev):
133 """wpa_supplicant MESH group remove"""
81e787b7 134 check_mesh_support(dev[0])
70437ae5 135 add_open_mesh_network(dev[0])
68157c06
JL
136 # Check for MESH-GROUP-STARTED event
137 check_mesh_group_added(dev[0])
138 dev[0].mesh_group_remove()
139 # Check for MESH-GROUP-REMOVED event
140 check_mesh_group_removed(dev[0])
7e3614df 141 dev[0].mesh_group_remove()
68157c06
JL
142
143def test_wpas_mesh_peer_connected(dev):
144 """wpa_supplicant MESH peer connected"""
81e787b7 145 check_mesh_support(dev[0])
70437ae5
JM
146 add_open_mesh_network(dev[0], beacon_int=160)
147 add_open_mesh_network(dev[1], beacon_int=160)
68157c06
JL
148
149 # Check for mesh joined
150 check_mesh_group_added(dev[0])
151 check_mesh_group_added(dev[1])
152
153 # Check for peer connected
154 check_mesh_peer_connected(dev[0])
155 check_mesh_peer_connected(dev[1])
156
157
158def test_wpas_mesh_peer_disconnected(dev):
159 """wpa_supplicant MESH peer disconnected"""
81e787b7 160 check_mesh_support(dev[0])
d48b64ba
JM
161 add_open_mesh_network(dev[0])
162 add_open_mesh_network(dev[1])
68157c06
JL
163
164 # Check for mesh joined
165 check_mesh_group_added(dev[0])
166 check_mesh_group_added(dev[1])
167
168 # Check for peer connected
169 check_mesh_peer_connected(dev[0])
170 check_mesh_peer_connected(dev[1])
171
172 # Remove group on dev 1
173 dev[1].mesh_group_remove()
174 # Device 0 should get a disconnection event
175 check_mesh_peer_disconnected(dev[0])
176
177
178def test_wpas_mesh_mode_scan(dev):
179 """wpa_supplicant MESH scan support"""
81e787b7 180 check_mesh_support(dev[0])
70437ae5
JM
181 add_open_mesh_network(dev[0])
182 add_open_mesh_network(dev[1], beacon_int=175)
68157c06
JL
183
184 # Check for mesh joined
185 check_mesh_group_added(dev[0])
186 check_mesh_group_added(dev[1])
187
188 # Check for Mesh scan
8b260032 189 check_mesh_scan(dev[0], "use_id=1", beacon_int=175)
68157c06 190
4b9481bc
JM
191def test_wpas_mesh_open(dev, apdev):
192 """wpa_supplicant open MESH network connectivity"""
81e787b7 193 check_mesh_support(dev[0])
71a3b85f
JM
194 add_open_mesh_network(dev[0], freq="2462", basic_rates="60 120 240")
195 add_open_mesh_network(dev[1], freq="2462", basic_rates="60 120 240")
68157c06
JL
196
197 # Check for mesh joined
198 check_mesh_group_added(dev[0])
199 check_mesh_group_added(dev[1])
200
201 # Check for peer connected
202 check_mesh_peer_connected(dev[0])
203 check_mesh_peer_connected(dev[1])
204
205 # Test connectivity 0->1 and 1->0
4b9481bc 206 hwsim_utils.test_connectivity(dev[0], dev[1])
68157c06 207
4b9481bc 208def test_wpas_mesh_open_no_auto(dev, apdev):
14637401 209 """wpa_supplicant open MESH network connectivity"""
81e787b7 210 check_mesh_support(dev[0])
d48b64ba 211 id = add_open_mesh_network(dev[0], start=False)
73a2f828
JM
212 dev[0].set_network(id, "dot11MeshMaxRetries", "16")
213 dev[0].set_network(id, "dot11MeshRetryTimeout", "255")
68157c06
JL
214 dev[0].mesh_group_add(id)
215
d48b64ba 216 id = add_open_mesh_network(dev[1], start=False)
68157c06
JL
217 dev[1].set_network(id, "no_auto_peer", "1")
218 dev[1].mesh_group_add(id)
219
220 # Check for mesh joined
221 check_mesh_group_added(dev[0])
222 check_mesh_group_added(dev[1])
223
224 # Check for peer connected
e0cfd223 225 check_mesh_peer_connected(dev[0], timeout=30)
68157c06
JL
226 check_mesh_peer_connected(dev[1])
227
228 # Test connectivity 0->1 and 1->0
4b9481bc 229 hwsim_utils.test_connectivity(dev[0], dev[1])
68157c06 230
11ace2ed 231def add_mesh_secure_net(dev, psk=True):
54cacef5
JM
232 id = dev.add_network()
233 dev.set_network(id, "mode", "5")
234 dev.set_network_quoted(id, "ssid", "wpas-mesh-sec")
235 dev.set_network(id, "key_mgmt", "SAE")
236 dev.set_network(id, "frequency", "2412")
11ace2ed
JM
237 if psk:
238 dev.set_network_quoted(id, "psk", "thisismypassphrase!")
54cacef5 239 return id
68157c06 240
4b9481bc
JM
241def test_wpas_mesh_secure(dev, apdev):
242 """wpa_supplicant secure MESH network connectivity"""
b9749b6a 243 check_mesh_support(dev[0], secure=True)
17ffdf39 244 dev[0].request("SET sae_groups ")
54cacef5 245 id = add_mesh_secure_net(dev[0])
68157c06
JL
246 dev[0].mesh_group_add(id)
247
17ffdf39 248 dev[1].request("SET sae_groups ")
54cacef5 249 id = add_mesh_secure_net(dev[1])
68157c06
JL
250 dev[1].mesh_group_add(id)
251
252 # Check for mesh joined
253 check_mesh_group_added(dev[0])
254 check_mesh_group_added(dev[1])
255
256 # Check for peer connected
257 check_mesh_peer_connected(dev[0])
258 check_mesh_peer_connected(dev[1])
259
260 # Test connectivity 0->1 and 1->0
4b9481bc 261 hwsim_utils.test_connectivity(dev[0], dev[1])
68157c06 262
54cacef5
JM
263def test_wpas_mesh_secure_sae_group_mismatch(dev, apdev):
264 """wpa_supplicant secure MESH and SAE group mismatch"""
b9749b6a 265 check_mesh_support(dev[0], secure=True)
54cacef5
JM
266 addr0 = dev[0].p2p_interface_addr()
267 addr1 = dev[1].p2p_interface_addr()
268 addr2 = dev[2].p2p_interface_addr()
68157c06 269
54cacef5
JM
270 dev[0].request("SET sae_groups 19 25")
271 id = add_mesh_secure_net(dev[0])
68157c06
JL
272 dev[0].mesh_group_add(id)
273
54cacef5
JM
274 dev[1].request("SET sae_groups 19")
275 id = add_mesh_secure_net(dev[1])
276 dev[1].mesh_group_add(id)
277
278 dev[2].request("SET sae_groups 26")
279 id = add_mesh_secure_net(dev[2])
280 dev[2].mesh_group_add(id)
281
282 check_mesh_group_added(dev[0])
283 check_mesh_group_added(dev[1])
284 check_mesh_group_added(dev[2])
285
286 ev = dev[0].wait_event(["MESH-PEER-CONNECTED"])
287 if ev is None:
288 raise Exception("Remote peer did not connect")
289 if addr1 not in ev:
290 raise Exception("Unexpected peer connected: " + ev)
291
292 ev = dev[1].wait_event(["MESH-PEER-CONNECTED"])
293 if ev is None:
294 raise Exception("Remote peer did not connect")
295 if addr0 not in ev:
296 raise Exception("Unexpected peer connected: " + ev)
297
298 ev = dev[2].wait_event(["MESH-PEER-CONNECTED"], timeout=1)
299 if ev is not None:
300 raise Exception("Unexpected peer connection at dev[2]: " + ev)
301
302 ev = dev[0].wait_event(["MESH-PEER-CONNECTED"], timeout=0.1)
303 if ev is not None:
304 raise Exception("Unexpected peer connection: " + ev)
305
306 ev = dev[1].wait_event(["MESH-PEER-CONNECTED"], timeout=0.1)
307 if ev is not None:
308 raise Exception("Unexpected peer connection: " + ev)
309
310 dev[0].request("SET sae_groups ")
17ffdf39 311 dev[1].request("SET sae_groups ")
54cacef5 312 dev[2].request("SET sae_groups ")
9ec916e9
JM
313
314def test_wpas_mesh_secure_sae_group_negotiation(dev, apdev):
315 """wpa_supplicant secure MESH and SAE group negotiation"""
316 check_mesh_support(dev[0], secure=True)
317 addr0 = dev[0].own_addr()
318 addr1 = dev[1].own_addr()
319
320 #dev[0].request("SET sae_groups 21 20 25 26")
321 dev[0].request("SET sae_groups 25")
322 id = add_mesh_secure_net(dev[0])
323 dev[0].mesh_group_add(id)
324
325 dev[1].request("SET sae_groups 19 25")
326 id = add_mesh_secure_net(dev[1])
327 dev[1].mesh_group_add(id)
328
329 check_mesh_group_added(dev[0])
330 check_mesh_group_added(dev[1])
331
332 check_mesh_peer_connected(dev[0])
333 check_mesh_peer_connected(dev[1])
334
335 dev[0].request("SET sae_groups ")
336 dev[1].request("SET sae_groups ")
54cacef5 337
11ace2ed
JM
338def test_wpas_mesh_secure_sae_missing_password(dev, apdev):
339 """wpa_supplicant secure MESH and missing SAE password"""
b9749b6a 340 check_mesh_support(dev[0], secure=True)
11ace2ed
JM
341 id = add_mesh_secure_net(dev[0], psk=False)
342 dev[0].set_network(id, "psk", "8f20b381f9b84371d61b5080ad85cac3c61ab3ca9525be5b2d0f4da3d979187a")
343 dev[0].mesh_group_add(id)
344 ev = dev[0].wait_event(["MESH-GROUP-STARTED", "Could not join mesh"],
345 timeout=5)
346 if ev is None:
347 raise Exception("Timeout on mesh start event")
348 if "MESH-GROUP-STARTED" in ev:
349 raise Exception("Unexpected mesh group start")
350 ev = dev[0].wait_event(["MESH-GROUP-STARTED"], timeout=0.1)
351 if ev is not None:
352 raise Exception("Unexpected mesh group start")
353
4b9481bc
JM
354def test_wpas_mesh_secure_no_auto(dev, apdev):
355 """wpa_supplicant secure MESH network connectivity"""
b9749b6a 356 check_mesh_support(dev[0], secure=True)
54cacef5
JM
357 dev[0].request("SET sae_groups 19")
358 id = add_mesh_secure_net(dev[0])
359 dev[0].mesh_group_add(id)
360
361 dev[1].request("SET sae_groups 19")
362 id = add_mesh_secure_net(dev[1])
68157c06
JL
363 dev[1].set_network(id, "no_auto_peer", "1")
364 dev[1].mesh_group_add(id)
365
366 # Check for mesh joined
367 check_mesh_group_added(dev[0])
368 check_mesh_group_added(dev[1])
369
370 # Check for peer connected
e0cfd223 371 check_mesh_peer_connected(dev[0], timeout=30)
68157c06
JL
372 check_mesh_peer_connected(dev[1])
373
374 # Test connectivity 0->1 and 1->0
4b9481bc 375 hwsim_utils.test_connectivity(dev[0], dev[1])
68157c06 376
54cacef5
JM
377 dev[0].request("SET sae_groups ")
378 dev[1].request("SET sae_groups ")
68157c06 379
df49b90e
JM
380def test_wpas_mesh_secure_dropped_frame(dev, apdev):
381 """Secure mesh network connectivity when the first plink Open is dropped"""
382 check_mesh_support(dev[0], secure=True)
383
384 dev[0].request("SET ext_mgmt_frame_handling 1")
385 dev[0].request("SET sae_groups ")
386 id = add_mesh_secure_net(dev[0])
387 dev[0].mesh_group_add(id)
388
389 dev[1].request("SET sae_groups ")
390 id = add_mesh_secure_net(dev[1])
391 dev[1].mesh_group_add(id)
392
393 # Check for mesh joined
394 check_mesh_group_added(dev[0])
395 check_mesh_group_added(dev[1])
396
397 # Drop the first Action frame (plink Open) to test unexpected order of
398 # Confirm/Open messages.
399 count = 0
400 while True:
401 count += 1
402 if count > 10:
403 raise Exception("Did not see Action frames")
404 rx_msg = dev[0].mgmt_rx()
405 if rx_msg is None:
406 raise Exception("MGMT-RX timeout")
407 if rx_msg['subtype'] == 13:
408 logger.info("Drop the first Action frame")
409 break
410 if "OK" not in dev[0].request("MGMT_RX_PROCESS freq={} datarate={} ssi_signal={} frame={}".format(rx_msg['freq'], rx_msg['datarate'], rx_msg['ssi_signal'], rx_msg['frame'].encode('hex'))):
411 raise Exception("MGMT_RX_PROCESS failed")
412
413 dev[0].request("SET ext_mgmt_frame_handling 0")
414
415 # Check for peer connected
416 check_mesh_peer_connected(dev[0])
417 check_mesh_peer_connected(dev[1])
418
419 # Test connectivity 0->1 and 1->0
420 hwsim_utils.test_connectivity(dev[0], dev[1])
421
5e2a8ec9
JM
422def test_wpas_mesh_ctrl(dev):
423 """wpa_supplicant ctrl_iface mesh command error cases"""
81e787b7 424 check_mesh_support(dev[0])
5e2a8ec9
JM
425 if "FAIL" not in dev[0].request("MESH_GROUP_ADD 123"):
426 raise Exception("Unexpected MESH_GROUP_ADD success")
427 id = dev[0].add_network()
428 if "FAIL" not in dev[0].request("MESH_GROUP_ADD %d" % id):
429 raise Exception("Unexpected MESH_GROUP_ADD success")
430 dev[0].set_network(id, "mode", "5")
431 dev[0].set_network(id, "key_mgmt", "WPA-PSK")
432 if "FAIL" not in dev[0].request("MESH_GROUP_ADD %d" % id):
433 raise Exception("Unexpected MESH_GROUP_ADD success")
434
435 if "FAIL" not in dev[0].request("MESH_GROUP_REMOVE foo"):
436 raise Exception("Unexpected MESH_GROUP_REMOVE success")
7e3614df
JM
437
438def test_wpas_mesh_dynamic_interface(dev):
439 """wpa_supplicant mesh with dynamic interface"""
81e787b7 440 check_mesh_support(dev[0])
7e3614df
JM
441 mesh0 = None
442 mesh1 = None
443 try:
444 mesh0 = dev[0].request("MESH_INTERFACE_ADD ifname=mesh0")
445 if "FAIL" in mesh0:
446 raise Exception("MESH_INTERFACE_ADD failed")
447 mesh1 = dev[1].request("MESH_INTERFACE_ADD")
448 if "FAIL" in mesh1:
449 raise Exception("MESH_INTERFACE_ADD failed")
450
451 wpas0 = WpaSupplicant(ifname=mesh0)
452 wpas1 = WpaSupplicant(ifname=mesh1)
453 logger.info(mesh0 + " address " + wpas0.get_status_field("address"))
454 logger.info(mesh1 + " address " + wpas1.get_status_field("address"))
455
456 add_open_mesh_network(wpas0)
457 add_open_mesh_network(wpas1)
458 check_mesh_group_added(wpas0)
459 check_mesh_group_added(wpas1)
460 check_mesh_peer_connected(wpas0)
461 check_mesh_peer_connected(wpas1)
462 hwsim_utils.test_connectivity(wpas0, wpas1)
463
464 # Must not allow MESH_GROUP_REMOVE on dynamic interface
465 if "FAIL" not in wpas0.request("MESH_GROUP_REMOVE " + mesh0):
466 raise Exception("Invalid MESH_GROUP_REMOVE accepted")
467 if "FAIL" not in wpas1.request("MESH_GROUP_REMOVE " + mesh1):
468 raise Exception("Invalid MESH_GROUP_REMOVE accepted")
469
470 # Must not allow MESH_GROUP_REMOVE on another radio interface
471 if "FAIL" not in wpas0.request("MESH_GROUP_REMOVE " + mesh1):
472 raise Exception("Invalid MESH_GROUP_REMOVE accepted")
473 if "FAIL" not in wpas1.request("MESH_GROUP_REMOVE " + mesh0):
474 raise Exception("Invalid MESH_GROUP_REMOVE accepted")
475
476 wpas0.remove_ifname()
477 wpas1.remove_ifname()
478
479 if "OK" not in dev[0].request("MESH_GROUP_REMOVE " + mesh0):
480 raise Exception("MESH_GROUP_REMOVE failed")
481 if "OK" not in dev[1].request("MESH_GROUP_REMOVE " + mesh1):
482 raise Exception("MESH_GROUP_REMOVE failed")
483
484 if "FAIL" not in dev[0].request("MESH_GROUP_REMOVE " + mesh0):
485 raise Exception("Invalid MESH_GROUP_REMOVE accepted")
486 if "FAIL" not in dev[1].request("MESH_GROUP_REMOVE " + mesh1):
487 raise Exception("Invalid MESH_GROUP_REMOVE accepted")
488
489 logger.info("Make sure another dynamic group can be added")
490 mesh0 = dev[0].request("MESH_INTERFACE_ADD ifname=mesh0")
491 if "FAIL" in mesh0:
492 raise Exception("MESH_INTERFACE_ADD failed")
493 mesh1 = dev[1].request("MESH_INTERFACE_ADD")
494 if "FAIL" in mesh1:
495 raise Exception("MESH_INTERFACE_ADD failed")
496
497 wpas0 = WpaSupplicant(ifname=mesh0)
498 wpas1 = WpaSupplicant(ifname=mesh1)
499 logger.info(mesh0 + " address " + wpas0.get_status_field("address"))
500 logger.info(mesh1 + " address " + wpas1.get_status_field("address"))
501
502 add_open_mesh_network(wpas0)
503 add_open_mesh_network(wpas1)
504 check_mesh_group_added(wpas0)
505 check_mesh_group_added(wpas1)
506 check_mesh_peer_connected(wpas0)
507 check_mesh_peer_connected(wpas1)
508 hwsim_utils.test_connectivity(wpas0, wpas1)
509 finally:
510 if mesh0:
511 dev[0].request("MESH_GROUP_REMOVE " + mesh0)
512 if mesh1:
513 dev[1].request("MESH_GROUP_REMOVE " + mesh1)
9be2b811
JM
514
515def test_wpas_mesh_max_peering(dev, apdev):
516 """Mesh max peering limit"""
81e787b7 517 check_mesh_support(dev[0])
9be2b811
JM
518 try:
519 dev[0].request("SET max_peer_links 1")
9be2b811 520
ce8ca2f9
JM
521 # first, connect dev[0] and dev[1]
522 add_open_mesh_network(dev[0])
523 add_open_mesh_network(dev[1])
524 for i in range(2):
9be2b811
JM
525 ev = dev[i].wait_event(["MESH-PEER-CONNECTED"])
526 if ev is None:
527 raise Exception("dev%d did not connect with any peer" % i)
528
ce8ca2f9
JM
529 # add dev[2] which will try to connect with both dev[0] and dev[1],
530 # but can complete connection only with dev[1]
531 add_open_mesh_network(dev[2])
9be2b811
JM
532 for i in range(1, 3):
533 ev = dev[i].wait_event(["MESH-PEER-CONNECTED"])
534 if ev is None:
535 raise Exception("dev%d did not connect the second peer" % i)
536
537 ev = dev[0].wait_event(["MESH-PEER-CONNECTED"], timeout=1)
538 if ev is not None:
539 raise Exception("dev0 connection beyond max peering limit")
540
ce8ca2f9
JM
541 ev = dev[2].wait_event(["MESH-PEER-CONNECTED"], timeout=0.1)
542 if ev is not None:
543 raise Exception("dev2 reported unexpected peering: " + ev)
544
9be2b811
JM
545 for i in range(3):
546 dev[i].mesh_group_remove()
547 check_mesh_group_removed(dev[i])
548 finally:
549 dev[0].request("SET max_peer_links 99")
de1d5049
JM
550
551def test_wpas_mesh_open_5ghz(dev, apdev):
552 """wpa_supplicant open MESH network on 5 GHz band"""
553 try:
554 _test_wpas_mesh_open_5ghz(dev, apdev)
555 finally:
556 subprocess.call(['iw', 'reg', 'set', '00'])
557 dev[0].flush_scan_cache()
558 dev[1].flush_scan_cache()
559
560def _test_wpas_mesh_open_5ghz(dev, apdev):
561 check_mesh_support(dev[0])
562 subprocess.call(['iw', 'reg', 'set', 'US'])
563 for i in range(2):
564 for j in range(5):
565 ev = dev[i].wait_event(["CTRL-EVENT-REGDOM-CHANGE"], timeout=5)
566 if ev is None:
567 raise Exception("No regdom change event")
568 if "alpha2=US" in ev:
569 break
570 add_open_mesh_network(dev[i], freq="5180")
571
572 # Check for mesh joined
573 check_mesh_group_added(dev[0])
574 check_mesh_group_added(dev[1])
575
576 # Check for peer connected
577 check_mesh_peer_connected(dev[0])
578 check_mesh_peer_connected(dev[1])
579
580 # Test connectivity 0->1 and 1->0
581 hwsim_utils.test_connectivity(dev[0], dev[1])
f77d6d4b 582
a74a1e4e
JM
583def test_wpas_mesh_open_vht_80p80(dev, apdev):
584 """wpa_supplicant open MESH network on VHT 80+80 MHz channel"""
585 try:
586 _test_wpas_mesh_open_vht_80p80(dev, apdev)
587 finally:
588 subprocess.call(['iw', 'reg', 'set', '00'])
589 dev[0].flush_scan_cache()
590 dev[1].flush_scan_cache()
591
592def _test_wpas_mesh_open_vht_80p80(dev, apdev):
593 check_mesh_support(dev[0])
594 subprocess.call(['iw', 'reg', 'set', 'US'])
595 for i in range(2):
596 for j in range(5):
597 ev = dev[i].wait_event(["CTRL-EVENT-REGDOM-CHANGE"], timeout=5)
598 if ev is None:
599 raise Exception("No regdom change event")
600 if "alpha2=US" in ev:
601 break
602 add_open_mesh_network(dev[i], freq="5180", chwidth=3)
603
604 # Check for mesh joined
605 check_mesh_group_added(dev[0])
606 check_mesh_group_added(dev[1])
607
608 # Check for peer connected
609 check_mesh_peer_connected(dev[0])
610 check_mesh_peer_connected(dev[1])
611
612 # Test connectivity 0->1 and 1->0
613 hwsim_utils.test_connectivity(dev[0], dev[1])
614
615 sig = dev[0].request("SIGNAL_POLL").splitlines()
616 if "WIDTH=80+80 MHz" not in sig:
617 raise Exception("Unexpected SIGNAL_POLL value(2): " + str(sig))
618 if "CENTER_FRQ1=5210" not in sig:
619 raise Exception("Unexpected SIGNAL_POLL value(3): " + str(sig))
620 if "CENTER_FRQ2=5775" not in sig:
621 raise Exception("Unexpected SIGNAL_POLL value(4): " + str(sig))
622
623 sig = dev[1].request("SIGNAL_POLL").splitlines()
624 if "WIDTH=80+80 MHz" not in sig:
625 raise Exception("Unexpected SIGNAL_POLL value(2b): " + str(sig))
626 if "CENTER_FRQ1=5210" not in sig:
627 raise Exception("Unexpected SIGNAL_POLL value(3b): " + str(sig))
628 if "CENTER_FRQ2=5775" not in sig:
629 raise Exception("Unexpected SIGNAL_POLL value(4b): " + str(sig))
630
f77d6d4b
JM
631def test_wpas_mesh_password_mismatch(dev, apdev):
632 """Mesh network and one device with mismatching password"""
633 check_mesh_support(dev[0], secure=True)
634 dev[0].request("SET sae_groups ")
635 id = add_mesh_secure_net(dev[0])
636 dev[0].mesh_group_add(id)
637
638 dev[1].request("SET sae_groups ")
639 id = add_mesh_secure_net(dev[1])
640 dev[1].mesh_group_add(id)
641
642 dev[2].request("SET sae_groups ")
643 id = add_mesh_secure_net(dev[2])
644 dev[2].set_network_quoted(id, "psk", "wrong password")
645 dev[2].mesh_group_add(id)
646
647 # The two peers with matching password need to be able to connect
648 check_mesh_group_added(dev[0])
649 check_mesh_group_added(dev[1])
650 check_mesh_peer_connected(dev[0])
651 check_mesh_peer_connected(dev[1])
652
653 ev = dev[2].wait_event(["MESH-SAE-AUTH-FAILURE"], timeout=20)
654 if ev is None:
655 raise Exception("dev2 did not report auth failure (1)")
656 ev = dev[2].wait_event(["MESH-SAE-AUTH-FAILURE"], timeout=20)
657 if ev is None:
658 raise Exception("dev2 did not report auth failure (2)")
659
792eafa0 660 count = 0
f77d6d4b
JM
661 ev = dev[0].wait_event(["MESH-SAE-AUTH-FAILURE"], timeout=1)
662 if ev is None:
792eafa0
JM
663 logger.info("dev0 did not report auth failure")
664 else:
665 if "addr=" + dev[2].own_addr() not in ev:
666 raise Exception("Unexpected peer address in dev0 event: " + ev)
667 count += 1
f77d6d4b
JM
668
669 ev = dev[1].wait_event(["MESH-SAE-AUTH-FAILURE"], timeout=1)
670 if ev is None:
792eafa0
JM
671 logger.info("dev1 did not report auth failure")
672 else:
673 if "addr=" + dev[2].own_addr() not in ev:
674 raise Exception("Unexpected peer address in dev1 event: " + ev)
675 count += 1
f77d6d4b
JM
676
677 hwsim_utils.test_connectivity(dev[0], dev[1])
678
679 for i in range(2):
680 try:
681 hwsim_utils.test_connectivity(dev[i], dev[2], timeout=1)
682 raise Exception("Data connectivity test passed unexpectedly")
683 except Exception, e:
684 if "data delivery failed" not in str(e):
685 raise
686
792eafa0
JM
687 if count == 0:
688 raise Exception("Neither dev0 nor dev1 reported auth failure")
689
f77d6d4b
JM
690def test_wpas_mesh_password_mismatch_retry(dev, apdev, params):
691 """Mesh password mismatch and retry [long]"""
692 if not params['long']:
693 raise HwsimSkip("Skip test case with long duration due to --long not specified")
694 check_mesh_support(dev[0], secure=True)
695 dev[0].request("SET sae_groups ")
696 id = add_mesh_secure_net(dev[0])
697 dev[0].mesh_group_add(id)
698
699 dev[1].request("SET sae_groups ")
700 id = add_mesh_secure_net(dev[1])
701 dev[1].set_network_quoted(id, "psk", "wrong password")
702 dev[1].mesh_group_add(id)
703
704 # Check for mesh joined
705 check_mesh_group_added(dev[0])
706 check_mesh_group_added(dev[1])
707
708 for i in range(4):
709 ev = dev[0].wait_event(["MESH-SAE-AUTH-FAILURE"], timeout=20)
710 if ev is None:
711 raise Exception("dev0 did not report auth failure (%d)" % i)
712 ev = dev[1].wait_event(["MESH-SAE-AUTH-FAILURE"], timeout=20)
713 if ev is None:
714 raise Exception("dev1 did not report auth failure (%d)" % i)
715
716 ev = dev[0].wait_event(["MESH-SAE-AUTH-BLOCKED"], timeout=10)
717 if ev is None:
718 raise Exception("dev0 did not report auth blocked")
719 ev = dev[1].wait_event(["MESH-SAE-AUTH-BLOCKED"], timeout=10)
720 if ev is None:
721 raise Exception("dev1 did not report auth blocked")
2fca1f67
JM
722
723def test_mesh_wpa_auth_init_oom(dev, apdev):
724 """Secure mesh network setup failing due to wpa_init() OOM"""
725 check_mesh_support(dev[0], secure=True)
726 dev[0].request("SET sae_groups ")
727 with alloc_fail(dev[0], 1, "wpa_init"):
728 id = add_mesh_secure_net(dev[0])
729 dev[0].mesh_group_add(id)
730 ev = dev[0].wait_event(["MESH-GROUP-STARTED"], timeout=0.2)
731 if ev is not None:
732 raise Exception("Unexpected mesh group start during OOM")
fe28ed3f 733
58284168
JM
734def test_mesh_wpa_init_fail(dev, apdev):
735 """Secure mesh network setup local failure"""
736 check_mesh_support(dev[0], secure=True)
737 dev[0].request("SET sae_groups ")
738
739 with fail_test(dev[0], 1, "os_get_random;=__mesh_rsn_auth_init"):
740 id = add_mesh_secure_net(dev[0])
741 dev[0].mesh_group_add(id)
742 wait_fail_trigger(dev[0], "GET_FAIL")
743
744 with alloc_fail(dev[0], 1, "mesh_rsn_auth_init"):
745 id = add_mesh_secure_net(dev[0])
746 dev[0].mesh_group_add(id)
747 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL")
748
fe28ed3f
JM
749def test_wpas_mesh_reconnect(dev, apdev):
750 """Secure mesh network plink counting during reconnection"""
751 check_mesh_support(dev[0])
752 try:
753 _test_wpas_mesh_reconnect(dev)
754 finally:
755 dev[0].request("SET max_peer_links 99")
756
757def _test_wpas_mesh_reconnect(dev):
758 dev[0].request("SET max_peer_links 2")
759 dev[0].request("SET sae_groups ")
760 id = add_mesh_secure_net(dev[0])
761 dev[0].set_network(id, "beacon_int", "100")
762 dev[0].mesh_group_add(id)
763 dev[1].request("SET sae_groups ")
764 id = add_mesh_secure_net(dev[1])
765 dev[1].mesh_group_add(id)
766 check_mesh_group_added(dev[0])
767 check_mesh_group_added(dev[1])
768 check_mesh_peer_connected(dev[0])
769 check_mesh_peer_connected(dev[1])
770
771 for i in range(3):
772 # Drop incoming management frames to avoid handling link close
773 dev[0].request("SET ext_mgmt_frame_handling 1")
774 dev[1].mesh_group_remove()
775 check_mesh_group_removed(dev[1])
776 dev[1].request("FLUSH")
777 dev[0].request("SET ext_mgmt_frame_handling 0")
778 id = add_mesh_secure_net(dev[1])
779 dev[1].mesh_group_add(id)
780 check_mesh_group_added(dev[1])
781 check_mesh_peer_connected(dev[1])
782 dev[0].dump_monitor()
783 dev[1].dump_monitor()
fa7f9570
BC
784
785def test_wpas_mesh_gate_forwarding(dev, apdev, p):
786 """Mesh forwards traffic to unknown sta to mesh gates"""
787 addr0 = dev[0].own_addr()
788 addr1 = dev[1].own_addr()
789 addr2 = dev[2].own_addr()
790 external_sta = '02:11:22:33:44:55'
791
792 # start 3 node connected mesh
793 check_mesh_support(dev[0])
794 for i in range(3):
795 add_open_mesh_network(dev[i])
796 check_mesh_group_added(dev[i])
797 for i in range(3):
798 check_mesh_peer_connected(dev[i])
799
800 hwsim_utils.test_connectivity(dev[0], dev[1])
801 hwsim_utils.test_connectivity(dev[1], dev[2])
802 hwsim_utils.test_connectivity(dev[0], dev[2])
803
804 # dev0 and dev1 are mesh gates
805 subprocess.call(['iw', 'dev', dev[0].ifname, 'set', 'mesh_param',
806 'mesh_gate_announcements=1'])
807 subprocess.call(['iw', 'dev', dev[1].ifname, 'set', 'mesh_param',
808 'mesh_gate_announcements=1'])
809
810 # wait for gate announcement frames
811 time.sleep(1)
812
813 # data frame from dev2 -> external sta should be sent to both gates
814 dev[2].request("DATA_TEST_CONFIG 1")
815 dev[2].request("DATA_TEST_TX {} {} 0".format(external_sta, addr2))
816 dev[2].request("DATA_TEST_CONFIG 0")
817
818 capfile = os.path.join(p['logdir'], "hwsim0.pcapng")
819 filt = "wlan.sa==%s && wlan_mgt.fixed.mesh_addr5==%s" % (addr2,
820 external_sta)
821 for i in range(15):
822 da = run_tshark(capfile, filt, [ "wlan.da" ])
823 if addr0 in da and addr1 in da:
824 logger.debug("Frames seen in tshark iteration %d" % i)
825 break
826 time.sleep(0.3)
827
828 if addr0 not in da:
829 raise Exception("Frame to gate %s not observed" % addr0)
830 if addr1 not in da:
831 raise Exception("Frame to gate %s not observed" % addr1)
5a34d359
JM
832
833def test_wpas_mesh_pmksa_caching(dev, apdev):
834 """Secure mesh network and PMKSA caching"""
835 check_mesh_support(dev[0], secure=True)
836 dev[0].request("SET sae_groups ")
837 id = add_mesh_secure_net(dev[0])
838 dev[0].mesh_group_add(id)
839
840 dev[1].request("SET sae_groups ")
841 id = add_mesh_secure_net(dev[1])
842 dev[1].mesh_group_add(id)
843
844 # Check for mesh joined
845 check_mesh_group_added(dev[0])
846 check_mesh_group_added(dev[1])
847
848 # Check for peer connected
849 check_mesh_peer_connected(dev[0])
850 check_mesh_peer_connected(dev[1])
851
852 addr0 = dev[0].own_addr()
853 addr1 = dev[1].own_addr()
854 pmksa0 = dev[0].get_pmksa(addr1)
855 pmksa1 = dev[1].get_pmksa(addr0)
856 if pmksa0 is None or pmksa1 is None:
857 raise Exception("No PMKSA cache entry created")
858 if pmksa0['pmkid'] != pmksa1['pmkid']:
859 raise Exception("PMKID mismatch in PMKSA cache entries")
860
861 if "OK" not in dev[0].request("MESH_PEER_REMOVE " + addr1):
862 raise Exception("Failed to remove peer")
863 pmksa0b = dev[0].get_pmksa(addr1)
864 if pmksa0b is None:
865 raise Exception("PMKSA cache entry not maintained")
866 time.sleep(0.1)
867
868 if "FAIL" not in dev[0].request("MESH_PEER_ADD " + addr1):
869 raise Exception("MESH_PEER_ADD unexpectedly succeeded in no_auto_peer=0 case")
870
871def test_wpas_mesh_pmksa_caching2(dev, apdev):
872 """Secure mesh network and PMKSA caching with no_auto_peer=1"""
873 check_mesh_support(dev[0], secure=True)
874 addr0 = dev[0].own_addr()
875 addr1 = dev[1].own_addr()
876 dev[0].request("SET sae_groups ")
877 id = add_mesh_secure_net(dev[0])
878 dev[0].set_network(id, "no_auto_peer", "1")
879 dev[0].mesh_group_add(id)
880
881 dev[1].request("SET sae_groups ")
882 id = add_mesh_secure_net(dev[1])
883 dev[1].set_network(id, "no_auto_peer", "1")
884 dev[1].mesh_group_add(id)
885
886 # Check for mesh joined
887 check_mesh_group_added(dev[0])
888 check_mesh_group_added(dev[1])
889
890 # Check for peer connected
891 ev = dev[0].wait_event(["will not initiate new peer link"], timeout=10)
892 if ev is None:
893 raise Exception("Missing no-initiate message")
894 if "OK" not in dev[0].request("MESH_PEER_ADD " + addr1):
895 raise Exception("MESH_PEER_ADD failed")
896 check_mesh_peer_connected(dev[0])
897 check_mesh_peer_connected(dev[1])
898
899 pmksa0 = dev[0].get_pmksa(addr1)
900 pmksa1 = dev[1].get_pmksa(addr0)
901 if pmksa0 is None or pmksa1 is None:
902 raise Exception("No PMKSA cache entry created")
903 if pmksa0['pmkid'] != pmksa1['pmkid']:
904 raise Exception("PMKID mismatch in PMKSA cache entries")
905
906 if "OK" not in dev[0].request("MESH_PEER_REMOVE " + addr1):
907 raise Exception("Failed to remove peer")
908 pmksa0b = dev[0].get_pmksa(addr1)
909 if pmksa0b is None:
910 raise Exception("PMKSA cache entry not maintained")
911
912 ev = dev[0].wait_event(["will not initiate new peer link"], timeout=10)
913 if ev is None:
914 raise Exception("Missing no-initiate message (2)")
915 if "OK" not in dev[0].request("MESH_PEER_ADD " + addr1):
916 raise Exception("MESH_PEER_ADD failed (2)")
917 check_mesh_peer_connected(dev[0])
918 check_mesh_peer_connected(dev[1])
919
920 pmksa0c = dev[0].get_pmksa(addr1)
921 pmksa1c = dev[1].get_pmksa(addr0)
922 if pmksa0c is None or pmksa1c is None:
923 raise Exception("No PMKSA cache entry created (2)")
924 if pmksa0c['pmkid'] != pmksa1c['pmkid']:
925 raise Exception("PMKID mismatch in PMKSA cache entries")
926 if pmksa0['pmkid'] != pmksa0c['pmkid']:
927 raise Exception("PMKID changed")
928
929 hwsim_utils.test_connectivity(dev[0], dev[1])
930
931def test_wpas_mesh_pmksa_caching_no_match(dev, apdev):
932 """Secure mesh network and PMKSA caching with no PMKID match"""
933 check_mesh_support(dev[0], secure=True)
934 addr0 = dev[0].own_addr()
935 addr1 = dev[1].own_addr()
936 dev[0].request("SET sae_groups ")
937 id = add_mesh_secure_net(dev[0])
938 dev[0].set_network(id, "no_auto_peer", "1")
939 dev[0].mesh_group_add(id)
940
941 dev[1].request("SET sae_groups ")
942 id = add_mesh_secure_net(dev[1])
943 dev[1].set_network(id, "no_auto_peer", "1")
944 dev[1].mesh_group_add(id)
945
946 # Check for mesh joined
947 check_mesh_group_added(dev[0])
948 check_mesh_group_added(dev[1])
949
950 # Check for peer connected
951 ev = dev[0].wait_event(["will not initiate new peer link"], timeout=10)
952 if ev is None:
953 raise Exception("Missing no-initiate message")
954 if "OK" not in dev[0].request("MESH_PEER_ADD " + addr1):
955 raise Exception("MESH_PEER_ADD failed")
956 check_mesh_peer_connected(dev[0])
957 check_mesh_peer_connected(dev[1])
958
959 pmksa0 = dev[0].get_pmksa(addr1)
960 pmksa1 = dev[1].get_pmksa(addr0)
961 if pmksa0 is None or pmksa1 is None:
962 raise Exception("No PMKSA cache entry created")
963 if pmksa0['pmkid'] != pmksa1['pmkid']:
964 raise Exception("PMKID mismatch in PMKSA cache entries")
965
966 if "OK" not in dev[0].request("MESH_PEER_REMOVE " + addr1):
967 raise Exception("Failed to remove peer")
968
969 if "OK" not in dev[1].request("PMKSA_FLUSH"):
970 raise Exception("Failed to flush PMKSA cache")
971
972 ev = dev[0].wait_event(["will not initiate new peer link"], timeout=10)
973 if ev is None:
974 raise Exception("Missing no-initiate message (2)")
975 if "OK" not in dev[0].request("MESH_PEER_ADD " + addr1):
976 raise Exception("MESH_PEER_ADD failed (2)")
977 check_mesh_peer_connected(dev[0])
978 check_mesh_peer_connected(dev[1])
979
980 pmksa0c = dev[0].get_pmksa(addr1)
981 pmksa1c = dev[1].get_pmksa(addr0)
982 if pmksa0c is None or pmksa1c is None:
983 raise Exception("No PMKSA cache entry created (2)")
984 if pmksa0c['pmkid'] != pmksa1c['pmkid']:
985 raise Exception("PMKID mismatch in PMKSA cache entries")
986 if pmksa0['pmkid'] == pmksa0c['pmkid']:
987 raise Exception("PMKID did not change")
988
989 hwsim_utils.test_connectivity(dev[0], dev[1])
b15acadc
JM
990
991def test_mesh_oom(dev, apdev):
992 """Mesh network setup failing due to OOM"""
993 check_mesh_support(dev[0], secure=True)
994 dev[0].request("SET sae_groups ")
995
996 with alloc_fail(dev[0], 1, "mesh_config_create"):
997 add_open_mesh_network(dev[0])
998 ev = dev[0].wait_event(["Failed to init mesh"])
999 if ev is None:
1000 raise Exception("Init failure not reported")
1001
1002 for i in range(1, 65):
1003 with alloc_fail(dev[0], i, "wpa_supplicant_mesh_init"):
1004 add_open_mesh_network(dev[0])
1005 wait_fail_trigger(dev[0], "GET_ALLOC_FAIL")
1006 ev = dev[0].wait_event(["Failed to init mesh",
1007 "MESH-GROUP-STARTED"])
1008 if ev is None:
1009 raise Exception("Init failure not reported")
aa59370b
JM
1010
1011def test_mesh_add_interface_oom(dev):
1012 """wpa_supplicant mesh with dynamic interface addition failing"""
1013 check_mesh_support(dev[0])
1014 for i in range(1, 3):
1015 mesh = None
1016 try:
1017 with alloc_fail(dev[0], i, "wpas_mesh_add_interface"):
1018 mesh = dev[0].request("MESH_INTERFACE_ADD").strip()
1019 finally:
1020 if mesh and mesh != "FAIL":
1021 dev[0].request("MESH_GROUP_REMOVE " + mesh)
4d4cdc3b
JM
1022
1023def test_mesh_scan_oom(dev):
1024 """wpa_supplicant mesh scan results and OOM"""
1025 check_mesh_support(dev[0])
1026 add_open_mesh_network(dev[0])
1027 check_mesh_group_added(dev[0])
1028 for i in range(5):
1029 dev[1].scan(freq="2412")
1030 res = dev[1].request("SCAN_RESULTS")
1031 if "[MESH]" in res:
1032 break
1033 for r in res.splitlines():
1034 if "[MESH]" in r:
1035 break
1036 bssid = r.split('\t')[0]
1037
1038 bss = dev[1].get_bss(bssid)
1039 if bss is None:
1040 raise Exception("Could not get BSS entry for mesh")
1041
1042 for i in range(1, 3):
1043 with alloc_fail(dev[1], i, "mesh_attr_text"):
1044 bss = dev[1].get_bss(bssid)
1045 if bss is not None:
1046 raise Exception("Unexpected BSS result during OOM")
f0ee4535
JM
1047
1048def test_mesh_sae_groups_invalid(dev, apdev):
1049 """Mesh with invalid SAE group configuration"""
1050 check_mesh_support(dev[0], secure=True)
1051
1052 dev[0].request("SET sae_groups 25")
1053 id = add_mesh_secure_net(dev[0])
1054 dev[0].mesh_group_add(id)
1055
1056 dev[1].request("SET sae_groups 123 122 121")
1057 id = add_mesh_secure_net(dev[1])
1058 dev[1].mesh_group_add(id)
1059
1060 check_mesh_group_added(dev[0])
1061 check_mesh_group_added(dev[1])
1062
1063 ev = dev[0].wait_event(["new peer notification"], timeout=10)
1064 if ev is None:
1065 raise Exception("dev[0] did not see peer")
1066 ev = dev[1].wait_event(["new peer notification"], timeout=10)
1067 if ev is None:
1068 raise Exception("dev[1] did not see peer")
1069
1070 ev = dev[0].wait_event(["MESH-PEER-CONNECTED"], timeout=0.1)
1071 if ev is not None:
1072 raise Exception("Unexpected connection(0)")
1073
1074 ev = dev[1].wait_event(["MESH-PEER-CONNECTED"], timeout=0.01)
1075 if ev is not None:
1076 raise Exception("Unexpected connection(1)")
1077
1078 dev[0].request("SET sae_groups ")
1079 dev[1].request("SET sae_groups ")
b0ec3d77
JM
1080
1081def test_mesh_sae_failure(dev, apdev):
1082 """Mesh and local SAE failures"""
1083 check_mesh_support(dev[0], secure=True)
1084
1085 dev[0].request("SET sae_groups ")
1086 dev[1].request("SET sae_groups ")
1087
1088 funcs = [ (1, "=mesh_rsn_auth_sae_sta", True),
1089 (1, "mesh_rsn_build_sae_commit;mesh_rsn_auth_sae_sta", False),
1090 (1, "auth_sae_init_committed;mesh_rsn_auth_sae_sta", True),
1091 (1, "=mesh_rsn_protect_frame", True),
1092 (2, "=mesh_rsn_protect_frame", True),
1093 (1, "aes_siv_encrypt;mesh_rsn_protect_frame", True),
1094 (1, "=mesh_rsn_process_ampe", True),
1095 (1, "aes_siv_decrypt;mesh_rsn_process_ampe", True) ]
1096 for count, func, success in funcs:
1097 id = add_mesh_secure_net(dev[0])
1098 dev[0].mesh_group_add(id)
1099
1100 with alloc_fail(dev[1], count, func):
1101 id = add_mesh_secure_net(dev[1])
1102 dev[1].mesh_group_add(id)
1103 check_mesh_group_added(dev[0])
1104 check_mesh_group_added(dev[1])
1105 if success:
1106 # retry is expected to work
1107 check_mesh_peer_connected(dev[0])
1108 check_mesh_peer_connected(dev[1])
1109 else:
1110 wait_fail_trigger(dev[1], "GET_ALLOC_FAIL")
1111 dev[0].mesh_group_remove()
1112 dev[1].mesh_group_remove()
1113 check_mesh_group_removed(dev[0])
1114 check_mesh_group_removed(dev[1])
a6447640
JM
1115
1116def test_mesh_failure(dev, apdev):
1117 """Mesh and local failures"""
1118 check_mesh_support(dev[0])
1119
1120 funcs = [ (1, "ap_sta_add;mesh_mpm_add_peer", True),
1121 (1, "wpabuf_alloc;mesh_mpm_send_plink_action", True) ]
1122 for count, func, success in funcs:
1123 add_open_mesh_network(dev[0])
1124
1125 with alloc_fail(dev[1], count, func):
1126 add_open_mesh_network(dev[1])
1127 check_mesh_group_added(dev[0])
1128 check_mesh_group_added(dev[1])
1129 if success:
1130 # retry is expected to work
1131 check_mesh_peer_connected(dev[0])
1132 check_mesh_peer_connected(dev[1])
1133 else:
1134 wait_fail_trigger(dev[1], "GET_ALLOC_FAIL")
1135 dev[0].mesh_group_remove()
1136 dev[1].mesh_group_remove()
1137 check_mesh_group_removed(dev[0])
1138 check_mesh_group_removed(dev[1])
1139
1140 funcs = [ (1, "mesh_mpm_init_link", True) ]
1141 for count, func, success in funcs:
1142 add_open_mesh_network(dev[0])
1143
1144 with fail_test(dev[1], count, func):
1145 add_open_mesh_network(dev[1])
1146 check_mesh_group_added(dev[0])
1147 check_mesh_group_added(dev[1])
1148 if success:
1149 # retry is expected to work
1150 check_mesh_peer_connected(dev[0])
1151 check_mesh_peer_connected(dev[1])
1152 else:
1153 wait_fail_trigger(dev[1], "GET_FAIL")
1154 dev[0].mesh_group_remove()
1155 dev[1].mesh_group_remove()
1156 check_mesh_group_removed(dev[0])
1157 check_mesh_group_removed(dev[1])