1# Test cases for Wi-Fi Direct R2 features like unsynchronized service discovery 2# (P2P USD), Bootstrapping and Pairing. 3# Copyright (c) 2024, Qualcomm Innovation Center, Inc. 4# 5# This software may be distributed under the terms of the BSD license. 6# See README for more details. 7 8import binascii 9import logging 10 11from hwsim import HWSimRadio 12 13logger = logging.getLogger() 14import os 15import hwsim_utils 16 17from wpasupplicant import WpaSupplicant 18from test_nan_usd import check_nan_usd_capab 19from test_pasn import check_pasn_capab 20 21def check_p2p2_capab(dev): 22 check_nan_usd_capab(dev) 23 check_pasn_capab(dev) 24 res = dev.request("GET_CAPABILITY p2p2") 25 if res is None or "not supported" in res: 26 raise HwsimSkip("P2P2 not supported") 27 res = dev.request("GET_CAPABILITY pcc_mode") 28 if res is None or "not supported" in res: 29 raise HwsimSkip("PCC mode not supported") 30 31def set_p2p2_configs(dev): 32 dev.global_request("P2P_SET pasn_type 3") 33 dev.global_request("P2P_SET supported_bootstrapmethods 6") 34 dev.global_request("P2P_SET pairing_setup 1") 35 dev.global_request("P2P_SET pairing_cache 1") 36 37def test_p2p_usd_publish_invalid_param(dev): 38 """P2P USD Publish with invalid parameters""" 39 check_p2p2_capab(dev[0]) 40 41 # Both solicited and unsolicited disabled is invalid 42 cmd = "NAN_PUBLISH service_name=_test solicited=0 unsolicited=0 p2p=1" 43 id0 = dev[0].global_request(cmd) 44 if "FAIL" not in id0: 45 raise Exception("NAN_PUBLISH accepts both solicited=0 and unsolicited=0 with p2p=1") 46 47def test_p2p_usd_publish(dev, apdev): 48 """P2P USD Publish""" 49 check_p2p2_capab(dev[0]) 50 cmd = "NAN_PUBLISH service_name=_test unsolicited=0 srv_proto_type=2 ssi=6677 p2p=1" 51 id0 = dev[0].global_request(cmd) 52 if "FAIL" in id0: 53 raise Exception("NAN_PUBLISH for P2P failed") 54 55 cmd = "NAN_UPDATE_PUBLISH publish_id=" + id0 + " ssi=1122334455" 56 if "FAIL" in dev[0].global_request(cmd): 57 raise Exception("NAN_UPDATE_PUBLISH for P2P failed") 58 59 cmd = "NAN_CANCEL_PUBLISH publish_id=" + id0 60 if "FAIL" in dev[0].global_request(cmd): 61 raise Exception("NAN_CANCEL_PUBLISH for P2P failed") 62 63 ev = dev[0].wait_global_event(["NAN-PUBLISH-TERMINATED"], timeout=1) 64 if ev is None: 65 raise Exception("PublishTerminated event not seen") 66 if "publish_id=" + id0 not in ev: 67 raise Exception("Unexpected publish_id: " + ev) 68 if "reason=user-request" not in ev: 69 raise Exception("Unexpected reason: " + ev) 70 71 cmd = "NAN_PUBLISH service_name=_test p2p=1" 72 count = 0 73 for i in range(256): 74 if "FAIL" in dev[0].global_request(cmd): 75 break 76 count += 1 77 logger.info("Maximum services: %d" % count) 78 for i in range(count): 79 cmd = "NAN_CANCEL_PUBLISH publish_id=%s" % (i + 1) 80 if "FAIL" in dev[0].global_request(cmd): 81 raise Exception("NAN_CANCEL_PUBLISH failed") 82 83 ev = dev[0].wait_global_event(["NAN-PUBLISH-TERMINATED"], timeout=1) 84 if ev is None: 85 raise Exception("PublishTerminated event not seen") 86 87def test_p2p_usd_subscribe(dev, apdev): 88 """P2P USD Subscribe""" 89 check_p2p2_capab(dev[0]) 90 cmd = "NAN_SUBSCRIBE service_name=_test active=1 srv_proto_type=2 ssi=1122334455 p2p=1" 91 id0 = dev[0].global_request(cmd) 92 if "FAIL" in id0: 93 raise Exception("NAN_SUBSCRIBE for P2P failed") 94 95 cmd = "NAN_CANCEL_SUBSCRIBE subscribe_id=" + id0 96 if "FAIL" in dev[0].global_request(cmd): 97 raise Exception("NAN_CANCEL_SUBSCRIBE for P2P failed") 98 99 ev = dev[0].wait_global_event(["NAN-SUBSCRIBE-TERMINATED"], timeout=1) 100 if ev is None: 101 raise Exception("SubscribeTerminated event not seen") 102 if "subscribe_id=" + id0 not in ev: 103 raise Exception("Unexpected subscribe_id: " + ev) 104 if "reason=user-request" not in ev: 105 raise Exception("Unexpected reason: " + ev) 106 107def test_p2p_usd_match(dev, apdev): 108 """P2P USD Publish/Subscribe match""" 109 check_p2p2_capab(dev[0]) 110 check_p2p2_capab(dev[1]) 111 cmd = "NAN_SUBSCRIBE service_name=_test active=1 srv_proto_type=2 ssi=1122334455 p2p=1" 112 id0 = dev[0].global_request(cmd) 113 if "FAIL" in id0: 114 raise Exception("NAN_SUBSCRIBE for P2P failed") 115 116 cmd = "NAN_PUBLISH service_name=_test unsolicited=0 srv_proto_type=2 ssi=6677 ttl=5 p2p=1" 117 id1 = dev[1].global_request(cmd) 118 if "FAIL" in id1: 119 raise Exception("NAN_PUBLISH for P2P failed") 120 121 ev = dev[0].wait_global_event(["P2P-DEVICE-FOUND"], timeout=5) 122 if ev is None: 123 raise Exception("Peer not found") 124 ev = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=5) 125 if ev is None: 126 raise Exception("Peer not found") 127 128 ev = dev[0].wait_global_event(["NAN-DISCOVERY-RESULT"], timeout=5) 129 if ev is None: 130 raise Exception("DiscoveryResult event not seen") 131 if "srv_proto_type=2" not in ev.split(' '): 132 raise Exception("Unexpected srv_proto_type: " + ev) 133 if "ssi=6677" not in ev.split(' '): 134 raise Exception("Unexpected ssi: " + ev) 135 136 dev[0].global_request("NAN_CANCEL_SUBSCRIBE subscribe_id=" + id0) 137 dev[1].global_request("NAN_CANCEL_PUBLISH publish_id=" + id1) 138 139def run_p2p_pairing_password(dev): 140 check_p2p2_capab(dev[0]) 141 check_p2p2_capab(dev[1]) 142 143 set_p2p2_configs(dev[0]) 144 set_p2p2_configs(dev[1]) 145 146 cmd = "NAN_SUBSCRIBE service_name=_test active=1 srv_proto_type=2 ssi=1122334455 ttl=10 p2p=1" 147 id0 = dev[0].global_request(cmd) 148 if "FAIL" in id0: 149 raise Exception("NAN_SUBSCRIBE for P2P failed") 150 151 cmd = "NAN_PUBLISH service_name=_test unsolicited=0 srv_proto_type=2 ssi=6677 ttl=10 p2p=1" 152 id1 = dev[1].global_request(cmd) 153 if "FAIL" in id1: 154 raise Exception("NAN_PUBLISH for P2P failed") 155 156 ev = dev[0].wait_global_event(["P2P-DEVICE-FOUND"], timeout=5) 157 if ev is None: 158 raise Exception("Peer not found") 159 ev = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=5) 160 if ev is None: 161 raise Exception("Peer not found") 162 163 ev = dev[0].wait_global_event(["NAN-DISCOVERY-RESULT"], timeout=5) 164 if ev is None: 165 raise Exception("DiscoveryResult event not seen") 166 if "srv_proto_type=2" not in ev.split(' '): 167 raise Exception("Unexpected srv_proto_type: " + ev) 168 if "ssi=6677" not in ev.split(' '): 169 raise Exception("Unexpected ssi: " + ev) 170 171 cmd = "NAN_CANCEL_SUBSCRIBE subscribe_id=" + id0 172 if "FAIL" in dev[0].global_request(cmd): 173 raise Exception("NAN_CANCEL_SUBSCRIBE for P2P failed") 174 cmd = "NAN_CANCEL_PUBLISH publish_id=" + id1 175 if "FAIL" in dev[1].global_request(cmd): 176 raise Exception("NAN_CANCEL_PUBLISH for P2P failed") 177 178 cmd = "P2P_CONNECT " + dev[0].p2p_dev_addr() + " pair provdisc he go_intent=15 p2p2 bstrapmethod=2 auth password=975310123 freq=2437" 179 id0 = dev[1].global_request(cmd) 180 if "FAIL" in id0: 181 raise Exception("P2P_CONNECT auth Failed") 182 183 cmd = "P2P_CONNECT " + dev[1].p2p_dev_addr() + " pair provdisc he go_intent=5 p2p2 bstrapmethod=32 password=975310123" 184 id0 = dev[0].global_request(cmd) 185 if "FAIL" in id0: 186 raise Exception("P2P_CONNECT Failed") 187 188 ev = dev[0].wait_global_event(["P2P-GROUP-STARTED"], timeout=10) 189 if ev is None: 190 raise Exception("Group formation timed out") 191 dev[0].group_form_result(ev, no_pwd=True) 192 dev[0].dump_monitor() 193 194 ev = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=10) 195 if ev is None: 196 raise Exception("Group formation timed out(2)") 197 dev[1].group_form_result(ev) 198 199 dev[1].remove_group() 200 dev[0].wait_go_ending_session() 201 dev[0].dump_monitor() 202 203def test_p2p_pairing_password(dev, apdev): 204 """P2P Pairing with Password""" 205 run_p2p_pairing_password(dev) 206 207def test_p2p_pairing_password_dev(dev, apdev): 208 """P2P Pairing with Password with dedicated P2P device""" 209 with HWSimRadio(use_p2p_device=True) as (radio, iface): 210 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5') 211 wpas.interface_add(iface) 212 run_p2p_pairing_password([dev[0], wpas]) 213 214def test_p2p_pairing_password_dev2(dev, apdev): 215 """P2P Pairing with Password with dedicated P2P device (reversed) and no group interface""" 216 with HWSimRadio(use_p2p_device=True) as (radio, iface): 217 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5') 218 wpas.interface_add(iface) 219 wpas.global_request("SET p2p_no_group_iface 1") 220 run_p2p_pairing_password([wpas, dev[0]]) 221 222def test_p2p_pairing_opportunistic(dev, apdev): 223 """P2P Pairing with Opportunistic""" 224 check_p2p2_capab(dev[0]) 225 check_p2p2_capab(dev[1]) 226 227 set_p2p2_configs(dev[0]) 228 set_p2p2_configs(dev[1]) 229 230 cmd = "NAN_SUBSCRIBE service_name=_test active=1 srv_proto_type=2 ssi=1122334455 ttl=10 p2p=1" 231 id0 = dev[0].global_request(cmd) 232 if "FAIL" in id0: 233 raise Exception("NAN_SUBSCRIBE for P2P failed") 234 235 cmd = "NAN_PUBLISH service_name=_test unsolicited=0 srv_proto_type=2 ssi=6677 ttl=10 p2p=1" 236 id1 = dev[1].global_request(cmd) 237 if "FAIL" in id1: 238 raise Exception("NAN_PUBLISH for P2P failed") 239 240 ev = dev[0].wait_global_event(["P2P-DEVICE-FOUND"], timeout=5) 241 if ev is None: 242 raise Exception("Peer not found") 243 ev = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=5) 244 if ev is None: 245 raise Exception("Peer not found") 246 247 ev = dev[0].wait_global_event(["NAN-DISCOVERY-RESULT"], timeout=5) 248 if ev is None: 249 raise Exception("DiscoveryResult event not seen") 250 if "srv_proto_type=2" not in ev.split(' '): 251 raise Exception("Unexpected srv_proto_type: " + ev) 252 if "ssi=6677" not in ev.split(' '): 253 raise Exception("Unexpected ssi: " + ev) 254 255 cmd = "NAN_CANCEL_SUBSCRIBE subscribe_id=" + id0 256 if "FAIL" in dev[0].global_request(cmd): 257 raise Exception("NAN_CANCEL_SUBSCRIBE for P2P failed") 258 cmd = "NAN_CANCEL_PUBLISH publish_id=" + id1 259 if "FAIL" in dev[1].global_request(cmd): 260 raise Exception("NAN_CANCEL_PUBLISH for P2P failed") 261 262 cmd = "P2P_CONNECT " + dev[0].p2p_dev_addr() + " pair provdisc he go_intent=15 p2p2 bstrapmethod=1 auth freq=2437" 263 id0 = dev[1].global_request(cmd) 264 if "FAIL" in id0: 265 raise Exception("P2P_CONNECT auth Failed") 266 267 cmd = "P2P_CONNECT " + dev[1].p2p_dev_addr() + " pair provdisc he go_intent=5 p2p2 bstrapmethod=1" 268 id0 = dev[0].global_request(cmd) 269 if "FAIL" in id0: 270 raise Exception("P2P_CONNECT Failed") 271 272 ev = dev[0].wait_global_event(["P2P-GROUP-STARTED"], timeout=10) 273 if ev is None: 274 raise Exception("Group formation timed out") 275 #dev[0].group_form_result(ev) 276 dev[0].dump_monitor() 277 278 ev = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=10) 279 if ev is None: 280 raise Exception("Group formation timed out(2)") 281 dev[1].group_form_result(ev) 282 dev[1].wait_sta() 283 284 dev[1].remove_group() 285 dev[0].wait_go_ending_session() 286 dev[0].dump_monitor() 287 288def test_p2p_auto_go_and_client_join(dev, apdev): 289 """A new client joining a group using P2P Pairing/Opportunistic""" 290 check_p2p2_capab(dev[0]) 291 check_p2p2_capab(dev[1]) 292 293 set_p2p2_configs(dev[0]) 294 set_p2p2_configs(dev[1]) 295 296 cmd = "NAN_SUBSCRIBE service_name=_test active=1 srv_proto_type=2 ssi=1122334455 ttl=10 p2p=1" 297 id0 = dev[0].global_request(cmd) 298 if "FAIL" in id0: 299 raise Exception("NAN_SUBSCRIBE for P2P failed") 300 301 cmd = "NAN_PUBLISH service_name=_test unsolicited=0 srv_proto_type=2 ssi=6677 ttl=10 p2p=1" 302 id1 = dev[1].global_request(cmd) 303 if "FAIL" in id1: 304 raise Exception("NAN_PUBLISH for P2P failed") 305 306 ev = dev[0].wait_global_event(["P2P-DEVICE-FOUND"], timeout=5) 307 if ev is None: 308 raise Exception("Peer not found") 309 ev = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=5) 310 if ev is None: 311 raise Exception("Peer not found") 312 313 ev = dev[0].wait_global_event(["NAN-DISCOVERY-RESULT"], timeout=5) 314 if ev is None: 315 raise Exception("DiscoveryResult event not seen") 316 if "srv_proto_type=2" not in ev.split(' '): 317 raise Exception("Unexpected srv_proto_type: " + ev) 318 if "ssi=6677" not in ev.split(' '): 319 raise Exception("Unexpected ssi: " + ev) 320 321 cmd = "NAN_CANCEL_SUBSCRIBE subscribe_id=" + id0 322 if "FAIL" in dev[0].global_request(cmd): 323 raise Exception("NAN_CANCEL_SUBSCRIBE for P2P failed") 324 cmd = "NAN_CANCEL_PUBLISH publish_id=" + id1 325 if "FAIL" in dev[1].global_request(cmd): 326 raise Exception("NAN_CANCEL_PUBLISH for P2P failed") 327 328 cmd = "P2P_GROUP_ADD p2p2" 329 res = dev[1].global_request(cmd) 330 if "FAIL" in res: 331 raise Exception("P2P_GROUP_ADD failed") 332 333 ev = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=10) 334 if ev is None: 335 raise Exception("Group formation timed out(2)") 336 337 cmd = "P2P_CONNECT " + dev[0].p2p_dev_addr() + " pair provdisc he go_intent=15 p2p2 bstrapmethod=1 join auth" 338 id0 = dev[1].global_request(cmd) 339 if "FAIL" in id0: 340 raise Exception("P2P_CONNECT auth failed") 341 342 cmd = "P2P_CONNECT " + dev[1].p2p_dev_addr() + " pair provdisc p2p2 join bstrapmethod=1" 343 id0 = dev[0].global_request(cmd) 344 if "FAIL" in id0: 345 raise Exception("P2P_CONNECT failed") 346 347 ev = dev[0].wait_global_event(["P2P-GROUP-STARTED"], timeout=10) 348 if ev is None: 349 raise Exception("Group formation timed out") 350 #dev[0].group_form_result(ev) 351 dev[0].dump_monitor() 352 353 dev[1].wait_sta() 354 355 dev[1].remove_group() 356 dev[0].wait_go_ending_session() 357 dev[0].dump_monitor() 358 359def test_p2p_auto_go_and_client_join_sae(dev, apdev): 360 """A new client joining a group using P2P Pairing/SAE""" 361 check_p2p2_capab(dev[0]) 362 check_p2p2_capab(dev[1]) 363 364 set_p2p2_configs(dev[0]) 365 set_p2p2_configs(dev[1]) 366 367 cmd = "NAN_SUBSCRIBE service_name=_test active=1 srv_proto_type=2 ssi=1122334455 ttl=10 p2p=1" 368 id0 = dev[0].global_request(cmd) 369 if "FAIL" in id0: 370 raise Exception("NAN_SUBSCRIBE for P2P failed") 371 372 cmd = "NAN_PUBLISH service_name=_test unsolicited=0 srv_proto_type=2 ssi=6677 ttl=10 p2p=1" 373 id1 = dev[1].global_request(cmd) 374 if "FAIL" in id1: 375 raise Exception("NAN_PUBLISH for P2P failed") 376 377 ev = dev[0].wait_global_event(["P2P-DEVICE-FOUND"], timeout=5) 378 if ev is None: 379 raise Exception("Peer not found") 380 ev = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=5) 381 if ev is None: 382 raise Exception("Peer not found") 383 384 ev = dev[0].wait_global_event(["NAN-DISCOVERY-RESULT"], timeout=5) 385 if ev is None: 386 raise Exception("DiscoveryResult event not seen") 387 if "srv_proto_type=2" not in ev.split(' '): 388 raise Exception("Unexpected srv_proto_type: " + ev) 389 if "ssi=6677" not in ev.split(' '): 390 raise Exception("Unexpected ssi: " + ev) 391 392 cmd = "NAN_CANCEL_SUBSCRIBE subscribe_id=" + id0 393 if "FAIL" in dev[0].global_request(cmd): 394 raise Exception("NAN_CANCEL_SUBSCRIBE for P2P failed") 395 cmd = "NAN_CANCEL_PUBLISH publish_id=" + id1 396 if "FAIL" in dev[1].global_request(cmd): 397 raise Exception("NAN_CANCEL_PUBLISH for P2P failed") 398 399 cmd = "P2P_GROUP_ADD p2p2" 400 res = dev[1].global_request(cmd) 401 if "FAIL" in res: 402 raise Exception("P2P_GROUP_ADD failed") 403 404 ev = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=10) 405 if ev is None: 406 raise Exception("Group formation timed out(2)") 407 408 cmd = "P2P_CONNECT " + dev[0].p2p_dev_addr() + " pair provdisc he go_intent=15 p2p2 bstrapmethod=2 join auth password=975310123" 409 id0 = dev[1].global_request(cmd) 410 if "FAIL" in id0: 411 raise Exception("P2P_CONNECT auth failed") 412 413 cmd = "P2P_CONNECT " + dev[1].p2p_dev_addr() + " pair provdisc p2p2 join bstrapmethod=32 password=975310123" 414 id0 = dev[0].global_request(cmd) 415 if "FAIL" in id0: 416 raise Exception("P2P_CONNECT failed") 417 418 ev = dev[0].wait_global_event(["P2P-GROUP-STARTED"], timeout=10) 419 if ev is None: 420 raise Exception("Group formation timed out") 421 #dev[0].group_form_result(ev) 422 dev[0].dump_monitor() 423 424 dev[1].wait_sta() 425 426 dev[1].remove_group() 427 dev[0].wait_go_ending_session() 428 dev[0].dump_monitor() 429 430def test_p2p_pairing_verification(dev, apdev): 431 """P2P Pairing with Verification""" 432 433 """wpa_supplicant config file for pairing verification""" 434 config = "/tmp/test_p2p.conf" 435 if os.path.exists(config): 436 os.remove(config) 437 438 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5') 439 440 with open(config, "w") as f: 441 f.write("update_config=1\n") 442 443 wpas.interface_add("wlan5", config=config) 444 445 check_p2p2_capab(wpas) 446 check_p2p2_capab(dev[1]) 447 448 set_p2p2_configs(wpas) 449 set_p2p2_configs(dev[1]) 450 451 wpas.global_request("SET update_config 1") 452 wpas.global_request("SAVE_CONFIG") 453 454 cmd = "NAN_SUBSCRIBE service_name=_test active=1 srv_proto_type=2 ssi=1122334455 ttl=10 p2p=1" 455 id0 = wpas.global_request(cmd) 456 if "FAIL" in id0: 457 raise Exception("NAN_SUBSCRIBE for P2P failed") 458 459 cmd = "NAN_PUBLISH service_name=_test unsolicited=0 srv_proto_type=2 ssi=6677 ttl=10 p2p=1" 460 id1 = dev[1].global_request(cmd) 461 if "FAIL" in id1: 462 raise Exception("NAN_PUBLISH for P2P failed") 463 464 ev = wpas.wait_global_event(["P2P-DEVICE-FOUND"], timeout=5) 465 if ev is None: 466 raise Exception("Peer not found") 467 ev = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=5) 468 if ev is None: 469 raise Exception("Peer not found") 470 471 ev = wpas.wait_global_event(["NAN-DISCOVERY-RESULT"], timeout=5) 472 if ev is None: 473 raise Exception("DiscoveryResult event not seen") 474 if "srv_proto_type=2" not in ev.split(' '): 475 raise Exception("Unexpected srv_proto_type: " + ev) 476 if "ssi=6677" not in ev.split(' '): 477 raise Exception("Unexpected ssi: " + ev) 478 479 cmd = "NAN_CANCEL_SUBSCRIBE subscribe_id=" + id0 480 if "FAIL" in wpas.global_request(cmd): 481 raise Exception("NAN_CANCEL_SUBSCRIBE for P2P failed") 482 cmd = "NAN_CANCEL_PUBLISH publish_id=" + id1 483 if "FAIL" in dev[1].global_request(cmd): 484 raise Exception("NAN_CANCEL_PUBLISH for P2P failed") 485 486 cmd = "P2P_CONNECT " + wpas.p2p_dev_addr() + " pair provdisc he go_intent=15 p2p2 bstrapmethod=2 auth password=975310123 freq=2437 persistent" 487 id0 = dev[1].global_request(cmd) 488 if "FAIL" in id0: 489 raise Exception("P2P_CONNECT auth Failed") 490 491 cmd = "P2P_CONNECT " + dev[1].p2p_dev_addr() + " pair provdisc he go_intent=5 p2p2 bstrapmethod=32 password=975310123 persistent" 492 id0 = wpas.global_request(cmd) 493 if "FAIL" in id0: 494 raise Exception("P2P_CONNECT Failed") 495 496 ev = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=30) 497 if ev is None: 498 raise Exception("Group formation timed out") 499 dev[1].group_form_result(ev) 500 501 ev = wpas.wait_global_event(["P2P-GROUP-STARTED", 502 "WPA: 4-Way Handshake failed"], timeout=30) 503 if ev is None: 504 raise Exception("Group formation timed out (2)") 505 wpas.dump_monitor() 506 507 dev[1].remove_group() 508 wpas.wait_go_ending_session() 509 wpas.dump_monitor() 510 511 wpas.interface_remove("wlan5") 512 wpas.interface_add("wlan5", config=config) 513 set_p2p2_configs(wpas) 514 515 cmd = "NAN_SUBSCRIBE service_name=_test active=1 srv_proto_type=2 ssi=1122334455 ttl=10 p2p=1" 516 id0 = wpas.global_request(cmd) 517 if "FAIL" in id0: 518 raise Exception("NAN_SUBSCRIBE for P2P failed (2)") 519 520 cmd = "NAN_PUBLISH service_name=_test unsolicited=0 srv_proto_type=2 ssi=6677 ttl=10 p2p=1" 521 id1 = dev[1].global_request(cmd) 522 if "FAIL" in id1: 523 raise Exception("NAN_PUBLISH for P2P failed (2)") 524 525 ev = wpas.wait_global_event(["P2P-DEVICE-FOUND"], timeout=5) 526 if ev is None: 527 raise Exception("Peer not found") 528 ev = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=5) 529 if ev is None: 530 raise Exception("Peer not found") 531 532 ev = wpas.wait_global_event(["NAN-DISCOVERY-RESULT"], timeout=5) 533 if ev is None: 534 raise Exception("DiscoveryResult event not seen") 535 if "srv_proto_type=2" not in ev.split(' '): 536 raise Exception("Unexpected srv_proto_type: " + ev) 537 if "ssi=6677" not in ev.split(' '): 538 raise Exception("Unexpected ssi: " + ev) 539 540 cmd = "NAN_CANCEL_SUBSCRIBE subscribe_id=" + id0 541 if "FAIL" in wpas.global_request(cmd): 542 raise Exception("NAN_CANCEL_SUBSCRIBE for P2P failed (2)") 543 cmd = "NAN_CANCEL_PUBLISH publish_id=" + id1 544 if "FAIL" in dev[1].global_request(cmd): 545 raise Exception("NAN_CANCEL_PUBLISH for P2P failed (2)") 546 547 wpas.global_request("SET persistent_reconnect 1") 548 dev[1].global_request("SET persistent_reconnect 1") 549 peer = wpas.get_peer(dev[1].p2p_dev_addr()) 550 if 'persistent' not in peer: 551 raise Exception("Missing information on persistent group for the peer") 552 cmd = "P2P_INVITE persistent peer=" + dev[1].p2p_dev_addr() + " p2p2" 553 id0 = wpas.global_request(cmd) 554 if "FAIL" in id0: 555 raise Exception("P2P_INVITE Failed") 556 557 ev = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=30) 558 if ev is None: 559 raise Exception("Group re-invoke failed") 560 dev[1].group_form_result(ev) 561 562 ev = wpas.wait_global_event(["P2P-GROUP-STARTED", 563 "WPA: 4-Way Handshake failed"], timeout=30) 564 if ev is None: 565 raise Exception("Group re-invoke failed (2)") 566 if "P2P-GROUP-STARTED" not in ev: 567 raise Exception("Failed to complete group start on reinvocation") 568 wpas.dump_monitor() 569 570 res = dev[1].group_request("P2P_GET_DIRA") 571 addr, nonce, tag = res.split() 572 573 cmd = "P2P_VALIDATE_DIRA " + addr + " nonce=" + nonce + " tag=" + tag 574 res = wpas.group_request(cmd) 575 if "FAIL" in res: 576 raise Exception("DIRA validation failed") 577 578 dev[1].remove_group() 579 wpas.wait_go_ending_session() 580 wpas.dump_monitor() 581 582def test_p2p_auto_go_pcc_with_two_cli(dev, apdev): 583 """P2P autonomous GO in PCC mode with PSK and SAE clients""" 584 check_p2p2_capab(dev[0]) 585 set_p2p2_configs(dev[0]) 586 587 cmd = "P2P_GROUP_ADD p2p2 p2pmode=2 freq=2462" 588 res = dev[0].global_request(cmd) 589 if "FAIL" in res: 590 raise Exception("P2P_GROUP_ADD failed") 591 ev = dev[0].wait_global_event(["P2P-GROUP-STARTED"], timeout=10) 592 if ev is None: 593 raise Exception("Group formation timed out") 594 595 res = dev[0].group_form_result(ev) 596 if dev[0].get_group_status_field("passphrase", extra="WPS") != res['passphrase']: 597 raise Exception("passphrase mismatch") 598 if dev[0].group_request("P2P_GET_PASSPHRASE") != res['passphrase']: 599 raise Exception("passphrase mismatch(2)") 600 601 logger.info("Connect legacy non-WPS P2P client") 602 dev[1].global_request("P2P_SET disabled 1") 603 dev[0].dump_monitor() 604 dev[1].connect(ssid=res['ssid'], psk=res['passphrase'], proto='RSN', 605 key_mgmt='WPA-PSK', pairwise='CCMP', 606 group='CCMP', scan_freq=res['freq']) 607 dev[0].wait_sta(addr=dev[1].own_addr(), wait_4way_hs=True) 608 609 try: 610 logger.info("Connect P2P2 client") 611 dev[2].global_request("P2P_SET disabled 1") 612 dev[0].dump_monitor() 613 dev[2].set("rsn_overriding", "1") 614 dev[2].set("sae_pwe", "2") 615 dev[2].set("sae_groups", "") 616 dev[2].connect(ssid=res['ssid'], sae_password=res['passphrase'], 617 proto='WPA2', key_mgmt='SAE', ieee80211w='2', 618 pairwise='GCMP-256 CCMP', group='GCMP-256 CCMP', 619 scan_freq=res['freq']) 620 dev[0].wait_sta(addr=dev[2].own_addr(), wait_4way_hs=True) 621 622 hwsim_utils.test_connectivity_p2p_sta(dev[1], dev[2]) 623 624 dev[2].request("DISCONNECT") 625 dev[2].wait_disconnected() 626 dev[0].wait_sta_disconnect(addr=dev[2].own_addr()) 627 finally: 628 dev[2].set("sae_pwe", "0") 629 dev[2].set("rsn_overriding", "0") 630 631 dev[1].request("DISCONNECT") 632 dev[1].wait_disconnected() 633 dev[0].wait_sta_disconnect(addr=dev[1].own_addr()) 634 635 dev[0].remove_group() 636 637def test_p2p_auto_go_pcc_with_p2p2_cli(dev, apdev): 638 """P2P autonomous GO in PCC mode with P2P2 clients""" 639 check_p2p2_capab(dev[0]) 640 check_p2p2_capab(dev[1]) 641 set_p2p2_configs(dev[0]) 642 643 cmd = "P2P_GROUP_ADD p2p2 p2pmode=2 freq=2462" 644 res = dev[0].global_request(cmd) 645 if "FAIL" in res: 646 raise Exception("P2P_GROUP_ADD failed") 647 ev = dev[0].wait_global_event(["P2P-GROUP-STARTED"], timeout=10) 648 if ev is None: 649 raise Exception("Group formation timed out") 650 651 res = dev[0].group_form_result(ev) 652 if dev[0].get_group_status_field("passphrase", extra="WPS") != res['passphrase']: 653 raise Exception("passphrase mismatch") 654 if dev[0].group_request("P2P_GET_PASSPHRASE") != res['passphrase']: 655 raise Exception("passphrase mismatch(2)") 656 657 ssidhex = binascii.hexlify(res['ssid'].encode()).decode() 658 cmd = "P2P_CONNECT " + dev[0].p2p_dev_addr() + " pair p2p2 skip_prov join password=" + res['passphrase'] + " ssid=" + ssidhex 659 id0 = dev[1].global_request(cmd) 660 if "FAIL" in id0: 661 raise Exception("P2P_CONNECT failed") 662 663 ev = dev[1].wait_global_event(["CTRL-EVENT-CONNECTED"], timeout=10) 664 if ev is None: 665 raise Exception("Group formation timed out") 666 dev[1].dump_monitor() 667 668 dev[0].wait_sta() 669 670 dev[0].remove_group() 671 dev[1].dump_monitor() 672 673def test_p2p_bootstrapping_comeback_pairing(dev, apdev): 674 """P2P bootstrapping with comeback and pairing""" 675 check_p2p2_capab(dev[0]) 676 check_p2p2_capab(dev[1]) 677 678 set_p2p2_configs(dev[0]) 679 set_p2p2_configs(dev[1]) 680 681 cmd = "NAN_SUBSCRIBE service_name=_test active=1 srv_proto_type=2 ssi=1122334455 ttl=10 p2p=1" 682 sub_id = dev[0].global_request(cmd) 683 if "FAIL" in sub_id: 684 raise Exception("NAN_SUBSCRIBE for P2P failed") 685 686 cmd = "NAN_PUBLISH service_name=_test unsolicited=0 srv_proto_type=2 ssi=6677 ttl=10 p2p=1" 687 pub_id = dev[1].global_request(cmd) 688 if "FAIL" in pub_id: 689 raise Exception("NAN_PUBLISH for P2P failed") 690 691 ev = dev[0].wait_global_event(["P2P-DEVICE-FOUND"], timeout=5) 692 if ev is None: 693 raise Exception("Peer not found") 694 ev = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=5) 695 if ev is None: 696 raise Exception("Peer not found") 697 698 ev = dev[0].wait_global_event(["NAN-DISCOVERY-RESULT"], timeout=5) 699 if ev is None: 700 raise Exception("DiscoveryResult event not seen") 701 if "srv_proto_type=2" not in ev.split(' '): 702 raise Exception("Unexpected srv_proto_type: " + ev) 703 if "ssi=6677" not in ev.split(' '): 704 raise Exception("Unexpected ssi: " + ev) 705 706 cmd = "P2P_PROV_DISC " + dev[1].p2p_dev_addr() + " bstrapmethod=1" 707 id0 = dev[0].global_request(cmd) 708 if "FAIL" in id0: 709 raise Exception("Bootstrapping failed") 710 711 ev = dev[1].wait_global_event(["P2P-BOOTSTRAP-REQUEST"], timeout=10) 712 if ev is None: 713 raise Exception("Bootstrap request event not received") 714 715 cmd = "P2P_CONNECT " + dev[0].p2p_dev_addr() + " pair he go_intent=15 p2p2 bstrapmethod=1 auth freq=2437" 716 id0 = dev[1].global_request(cmd) 717 if "FAIL" in id0: 718 raise Exception("P2P_CONNECT auth failed") 719 720 ev = dev[0].wait_global_event(["P2P-BOOTSTRAP-SUCCESS"], timeout=10) 721 if ev is None: 722 raise Exception("Bootstrap success not received") 723 724 cmd = "NAN_CANCEL_SUBSCRIBE subscribe_id=" + sub_id 725 if "FAIL" in dev[0].global_request(cmd): 726 raise Exception("NAN_CANCEL_SUBSCRIBE for P2P failed") 727 cmd = "NAN_CANCEL_PUBLISH publish_id=" + pub_id 728 if "FAIL" in dev[1].global_request(cmd): 729 raise Exception("NAN_CANCEL_PUBLISH for P2P failed") 730 731 cmd = "P2P_CONNECT " + dev[1].p2p_dev_addr() + " pair he go_intent=5 p2p2 bstrapmethod=1" 732 id0 = dev[0].global_request(cmd) 733 if "FAIL" in id0: 734 raise Exception("P2P_CONNECT failed") 735 736 ev = dev[0].wait_global_event(["P2P-GROUP-STARTED"], timeout=10) 737 if ev is None: 738 raise Exception("Group formation timed out") 739 #dev[0].group_form_result(ev) 740 dev[0].dump_monitor() 741 742 ev = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=10) 743 if ev is None: 744 raise Exception("Group formation timed out(2)") 745 dev[1].group_form_result(ev) 746 dev[1].wait_sta() 747 748 dev[1].remove_group() 749 dev[0].wait_go_ending_session() 750 dev[0].dump_monitor() 751