2 # Copyright (c) 2014-2015, Qualcomm Atheros, Inc.
4 # This software may be distributed under the terms of the BSD license.
5 # See README for more details.
7 from remotehost import remote_compatible
9 logger = logging.getLogger()
15 from wpasupplicant import WpaSupplicant
17 from p2p_utils import *
18 from utils import HwsimSkip
19 from hwsim import HWSimRadio
21 # Dev[0] -> Advertiser
23 # ev0 -> Event generated at advertiser side
24 # ev1 -> Event generated at Seeker side
26 def p2ps_advertise(r_dev, r_role, svc_name, srv_info, rsp_info=None, cpt=None):
27 """P2PS Advertise function"""
28 adv_id = random.randrange(1, 0xFFFFFFFF)
29 advid = hex(adv_id)[2:]
31 cpt_param = (" cpt=" + cpt) if cpt is not None else ""
33 if rsp_info is not None and srv_info is not None:
34 if "OK" not in r_dev.global_request("P2P_SERVICE_ADD asp " + str(r_role) + " " + str(advid) + " 1 1108 " + svc_name + cpt_param + " svc_info='" + srv_info + "'" + " rsp_info=" + rsp_info + "'"):
35 raise Exception("P2P_SERVICE_ADD with response info and service info failed")
37 if rsp_info is None and srv_info is not None:
38 if "OK" not in r_dev.global_request("P2P_SERVICE_ADD asp " + str(r_role) + " " + str(advid) + " 1 1108 " + svc_name + cpt_param + " svc_info='" + srv_info + "'"):
39 raise Exception("P2P_SERVICE_ADD with service info failed")
41 if rsp_info is None and srv_info is None:
42 if "OK" not in r_dev.global_request("P2P_SERVICE_ADD asp " + str(r_role) + " " + str(advid) + " 1 1108 " + svc_name + cpt_param):
43 raise Exception("P2P_SERVICE_ADD without service info and without response info failed")
45 if rsp_info is not None and srv_info is None:
46 if "OK" not in r_dev.global_request("P2P_SERVICE_ADD asp " + str(r_role) + " " + str(adv_id) + " 1 1108 " + svc_name + cpt_param + " svc_info='" + " rsp_info=" + rsp_info + "'"):
47 raise Exception("P2P_SERVICE_ADD with response info failed")
52 def p2ps_exact_seek(i_dev, r_dev, svc_name, srv_info=None,
53 single_peer_expected=True):
54 """P2PS exact service seek request"""
55 if srv_info is not None:
56 ev1 = i_dev.global_request("P2P_SERV_DISC_REQ 00:00:00:00:00:00 asp 1 " + svc_name + " '" + srv_info + "'")
58 raise Exception("Failed to add Service Discovery request for exact seek request")
60 if "OK" not in i_dev.global_request("P2P_FIND 10 type=social seek=" + svc_name):
61 raise Exception("Failed to initiate seek operation")
63 timeout = time.time() + 10
64 ev1 = i_dev.wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
65 while ev1 is not None and not single_peer_expected:
66 if r_dev.p2p_dev_addr() in ev1 and "adv_id=" in ev1:
68 ev1 = i_dev.wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
70 if timeout < time.time():
71 raise Exception("Device not found")
74 raise Exception("P2P-DEVICE-FOUND timeout on seeker side")
75 if r_dev.p2p_dev_addr() not in ev1:
76 raise Exception("Unexpected peer")
79 adv_id = ev1.split("adv_id=")[1].split(" ")[0]
80 rcvd_svc_name = ev1.split("asp_svc=")[1].split(" ")[0]
81 if rcvd_svc_name != svc_name:
82 raise Exception("service name not matching")
84 ev1 = i_dev.wait_global_event(["P2P-SERV-ASP-RESP"], timeout=10)
86 raise Exception("Failed to receive Service Discovery Response")
87 if r_dev.p2p_dev_addr() not in ev1:
88 raise Exception("Service Discovery response from Unknown Peer")
89 if srv_info is not None and srv_info not in ev1:
90 raise Exception("service info not available in Service Discovery response")
91 adv_id = ev1.split(" ")[3]
92 rcvd_svc_name = ev1.split(" ")[6]
93 if rcvd_svc_name != svc_name:
94 raise Exception("service name not matching")
97 return [adv_id, rcvd_svc_name]
99 def p2ps_nonexact_seek(i_dev, r_dev, svc_name, srv_info=None, adv_num=None):
100 """P2PS nonexact service seek request"""
103 if srv_info is not None:
104 ev1 = i_dev.global_request("P2P_SERV_DISC_REQ 00:00:00:00:00:00 asp 1 " + svc_name + " '" + srv_info + "'")
106 ev1 = i_dev.global_request("P2P_SERV_DISC_REQ 00:00:00:00:00:00 asp 1 " + svc_name + " '")
108 raise Exception("Failed to add Service Discovery request for nonexact seek request")
109 if "OK" not in i_dev.global_request("P2P_FIND 10 type=social seek="):
110 raise Exception("Failed to initiate seek")
111 ev1 = i_dev.wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
113 raise Exception("P2P-DEVICE-FOUND timeout on seeker side")
114 if r_dev.p2p_dev_addr() not in ev1:
115 raise Exception("Unexpected peer")
117 for i in range (0, adv_num):
118 ev1 = i_dev.wait_global_event(["P2P-SERV-ASP-RESP"], timeout=10)
120 raise Exception("Failed to receive Service Discovery Response")
121 if r_dev.p2p_dev_addr() not in ev1:
122 raise Exception("Service Discovery response from Unknown Peer")
123 if srv_info is not None and srv_info not in ev1:
124 raise Exception("service info not available in Service Discovery response")
125 adv_id = ev1.split(" ")[3]
126 rcvd_svc_name = ev1.split(" ")[6]
127 ev_list.append(''.join([adv_id, ' ', rcvd_svc_name]))
129 i_dev.p2p_stop_find()
132 def p2ps_parse_event(ev, *args):
135 m = re.search("\s+" + arg + r"=(\S+)", ev)
136 ret += (m.group(1) if m is not None else None,)
139 def p2ps_provision(seeker, advertiser, adv_id, auto_accept=True, method="1000",
140 adv_cpt=None, seeker_cpt=None, handler=None, adv_role=None,
142 addr0 = seeker.p2p_dev_addr()
143 addr1 = advertiser.p2p_dev_addr()
145 seeker.asp_provision(addr1, adv_id=str(adv_id), adv_mac=addr1, session_id=1,
146 session_mac=addr0, method=method, cpt=seeker_cpt,
149 if not auto_accept or method == "100":
151 ev_pd_start = advertiser.wait_global_event(["P2PS-PROV-START"],
153 if ev_pd_start is None:
154 raise Exception("P2PS-PROV-START timeout on Advertiser side")
155 peer = ev_pd_start.split()[1]
156 advert_id, advert_mac, session, session_mac =\
157 p2ps_parse_event(ev_pd_start, "adv_id", "adv_mac", "session", "mac")
159 ev = seeker.wait_global_event(["P2P-PROV-DISC-FAILURE"], timeout=10)
161 raise Exception("P2P-PROV-DISC-FAILURE timeout on seeker side")
164 handler(seeker, advertiser)
166 # Put seeker into a listen state, since we expect the deferred flow to
168 seeker.p2p_ext_listen(500, 500)
171 ev = advertiser.wait_global_event(["P2P-PROV-DISC-ENTER-PIN"],
174 raise Exception("P2P-PROV-DISC-ENTER-PIN timeout on advertiser side")
176 raise Exception("Unknown peer " + addr0)
177 ev = seeker.wait_global_event(["P2P-PROV-DISC-SHOW-PIN"],
180 raise Exception("P2P-PROV-DISC-SHOW-PIN timeout on seeker side")
182 raise Exception("Unknown peer " + addr1)
185 ev = advertiser.wait_global_event(["P2P-PROV-DISC-SHOW-PIN"],
188 raise Exception("P2P-PROV-DISC-SHOW-PIN timeout on advertiser side")
190 raise Exception("Unknown peer " + addr0)
193 # Stop P2P_LISTEN before issuing P2P_ASP_PROVISION_RESP to avoid
194 # excessive delay and test case timeouts if it takes large number of
195 # retries to find the peer awake on its Listen channel.
196 advertiser.p2p_stop_find()
198 advertiser.asp_provision(peer, adv_id=advert_id, adv_mac=advert_mac,
199 session_id=int(session, 0),
200 session_mac=session_mac, status=12,
201 cpt=adv_cpt, role=adv_role)
203 ev1 = seeker.wait_global_event(["P2PS-PROV-DONE"], timeout=10)
205 raise Exception("P2PS-PROV-DONE timeout on seeker side")
207 ev2 = advertiser.wait_global_event(["P2PS-PROV-DONE"], timeout=10)
209 raise Exception("P2PS-PROV-DONE timeout on advertiser side")
212 ev = seeker.wait_global_event(["P2P-PROV-DISC-ENTER-PIN"],
215 raise Exception("P2P-PROV-DISC-ENTER-PIN failed on seeker side")
217 raise Exception("Unknown peer " + addr1)
219 seeker.p2p_cancel_ext_listen()
224 # Auto-accept is true and the method is either P2PS or advertiser is DISPLAY
225 ev1 = seeker.wait_global_event(["P2PS-PROV-DONE"], timeout=10)
227 raise Exception("P2PS-PROV-DONE timeout on seeker side")
229 ev2 = advertiser.wait_global_event(["P2PS-PROV-DONE"], timeout=10)
231 raise Exception("P2PS-PROV-DONE timeout on advertiser side")
234 ev = seeker.wait_global_event(["P2P-PROV-DISC-ENTER-PIN"], timeout=10)
236 raise Exception("P2P-PROV-DISC-ENTER-PIN timeout on seeker side")
238 raise Exception("Unknown peer " + addr1)
239 ev = advertiser.wait_global_event(["P2P-PROV-DISC-SHOW-PIN"],
242 raise Exception("P2P-PROV-DISC-SHOW-PIN timeout on advertiser side")
244 raise Exception("Unknown peer " + addr0)
250 def p2ps_connect_pd(dev0, dev1, ev0, ev1, pin=None, join_extra="", go_ev=None):
251 conf_methods_map = {"8": "p2ps", "1": "display", "5": "keypad"}
252 peer0 = ev0.split()[1]
253 peer1 = ev1.split()[1]
254 status0, conncap0, adv_id0, adv_mac0, mac0, session0, dev_passwd_id0, go0, join0, feature_cap0, persist0, group_ssid0 =\
255 p2ps_parse_event(ev0, "status", "conncap", "adv_id", "adv_mac", "mac", "session", "dev_passwd_id", "go", "join", "feature_cap", "persist", "group_ssid")
256 status1, conncap1, adv_id1, adv_mac1, mac1, session1, dev_passwd_id1, go1, join1, feature_cap1, persist1, group_ssid1 =\
257 p2ps_parse_event(ev1, "status", "conncap", "adv_id", "adv_mac", "mac", "session", "dev_passwd_id", "go", "join", "feature_cap", "persist", "group_ssid")
259 if status0 != "0" and status0 != "12":
260 raise Exception("PD failed on " + dev0.p2p_dev_addr())
262 if status1 != "0" and status1 != "12":
263 raise Exception("PD failed on " + dev1.p2p_dev_addr())
265 if status0 == "12" and status1 == "12":
266 raise Exception("Both sides have status 12 which doesn't make sense")
268 if adv_id0 != adv_id1 or adv_id0 is None:
269 raise Exception("Adv. IDs don't match")
271 if adv_mac0 != adv_mac1 or adv_mac0 is None:
272 raise Exception("Adv. MACs don't match")
274 if session0 != session1 or session0 is None:
275 raise Exception("Session IDs don't match")
277 if mac0 != mac1 or mac0 is None:
278 raise Exception("Session MACs don't match")
280 #TODO: Validate feature capability
282 if bool(persist0) != bool(persist1):
283 raise Exception("Only one peer has persistent group")
285 if persist0 is None and not all([conncap0, conncap1, dev_passwd_id0,
287 raise Exception("Persistent group not used but conncap/dev_passwd_id are missing")
289 if persist0 is not None and any([conncap0, conncap1, dev_passwd_id0,
291 raise Exception("Persistent group is used but conncap/dev_passwd_id are present")
293 # Persistent Connection (todo: handle frequency)
294 if persist0 is not None:
296 if "OK" not in dev0.global_request("P2P_GROUP_ADD persistent=" + persist0 + " freq=2412"):
297 raise Exception("Could not re-start persistent group")
298 ev0 = dev0.wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
300 raise Exception("P2P-GROUP-STARTED timeout on " + dev0.p2p_dev_addr())
301 dev0.group_form_result(ev0)
303 if "OK" not in dev1.global_request("P2P_GROUP_ADD persistent=" + persist1 + " freq=2412"):
304 raise Exception("Could not re-start persistent group")
305 ev1 = dev1.wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
307 raise Exception("P2P-GROUP-STARTED timeout on " + dev1.p2p_dev_addr())
308 dev1.group_form_result(ev1)
310 ev = dev0.wait_global_event(["AP-STA-CONNECTED"], timeout=10)
312 raise Exception("AP-STA-CONNECTED timeout on " + dev0.p2p_dev_addr())
314 ev = dev1.wait_global_event(["AP-STA-CONNECTED"], timeout=10)
316 raise Exception("AP-STA-CONNECTED timeout on " + dev1.p2p_dev_addr())
319 method0 = conf_methods_map[dev_passwd_id0]
320 method1 = conf_methods_map[dev_passwd_id1]
322 raise Exception("Unsupported method")
324 if method0 == "p2ps":
327 raise Exception("Pin is not provided")
329 if conncap0 == "1" and conncap1 == "1": # NEW/NEW - GON
330 if any([join0, join1, go0, go1]):
331 raise Exception("Unexpected join/go PD attributes")
333 if "OK" not in dev0.global_request("P2P_CONNECT " + peer0 + " " + pin + " " + method0 + " persistent auth"):
334 raise Exception("P2P_CONNECT fails on " + dev0.p2p_dev_addr())
335 if "OK" not in dev1.global_request("P2P_CONNECT " + peer1 + " " + pin + " " + method1 + " persistent"):
336 raise Exception("P2P_CONNECT fails on " + dev1.p2p_dev_addr())
337 ev = dev0.wait_global_event(["P2P-GO-NEG-SUCCESS"], timeout=10)
339 raise Exception("GO Neg did not succeed on " + dev0.p2p_dev_addr())
340 ev = dev1.wait_global_event(["P2P-GO-NEG-SUCCESS"], timeout=10)
342 raise Exception("GO Neg did not succeed on " + dev1.p2p_dev_addr())
343 ev = dev0.wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
345 raise Exception("P2P-GROUP-STARTED timeout on " + dev0.p2p_dev_addr())
346 dev0.group_form_result(ev)
347 ev = dev1.wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
349 raise Exception("P2P-GROUP-STARTED timeout on " + dev1.p2p_dev_addr())
350 dev1.group_form_result(ev)
352 if conncap0 == "2" and conncap1 == "4": # dev0 CLI, dev1 GO
353 dev_cli, dev_go, go_if, join_address, go_method, cli_method, join_ssid = dev0, dev1, go1, join0, method1, method0, group_ssid0
354 elif conncap0 == "4" and conncap1 == "2": # dev0 GO, dev1 CLI
355 dev_cli, dev_go, go_if, join_address, go_method, cli_method, join_ssid = dev1, dev0, go0, join1, method0, method1, group_ssid1
357 raise Exception("Bad connection capabilities")
360 raise Exception("Device " + dev_go.p2p_dev_addr() + " failed to become GO")
361 if join_address is None:
362 raise Exception("Device " + dev_cli.p2p_dev_addr() + " failed to become CLI")
364 if not dev_go.get_group_ifname().startswith('p2p-'):
368 ev = dev_go.wait_global_event(["P2P-GROUP-STARTED"],
371 raise Exception("P2P-GROUP-STARTED timeout on " + dev_go.p2p_dev_addr())
372 dev_go.group_form_result(ev)
374 if go_method != "p2ps":
375 ev = dev_go.group_request("WPS_PIN any " + pin)
377 raise Exception("Failed to initiate pin authorization on registrar side")
379 group_ssid_txt = " ssid=" + join_ssid
382 if "OK" not in dev_cli.global_request("P2P_CONNECT " + join_address + " " + pin + " " + cli_method + join_extra + " persistent join" + group_ssid_txt):
383 raise Exception("P2P_CONNECT failed on " + dev_cli.p2p_dev_addr())
384 ev = dev_cli.wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
386 raise Exception("P2P-GROUP-STARTED timeout on " + dev_cli.p2p_dev_addr())
387 dev_cli.group_form_result(ev)
388 ev = dev_go.wait_global_event(["AP-STA-CONNECTED"], timeout=10)
390 raise Exception("AP-STA-CONNECTED timeout on " + dev_go.p2p_dev_addr())
392 hwsim_utils.test_connectivity_p2p(dev0, dev1)
394 def set_no_group_iface(dev, enable):
396 res = dev.get_driver_status()
397 if (int(res['capa.flags'], 0) & 0x20000000):
398 raise HwsimSkip("P2P Device used. Cannot set enable no_group_iface")
399 dev.global_request("SET p2p_no_group_iface 1")
401 dev.global_request("SET p2p_no_group_iface 0")
404 def test_p2ps_exact_search(dev):
405 """P2PS exact service request"""
406 p2ps_advertise(r_dev=dev[0], r_role='1', svc_name='org.wi-fi.wfds.send.rx',
407 srv_info='I can receive files upto size 2 GB')
408 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
409 svc_name='org.wi-fi.wfds.send.rx')
411 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
413 raise Exception("Unable to remove the advertisement instance")
416 def test_p2ps_exact_search_srvinfo(dev):
417 """P2PS exact service request with service info"""
418 p2ps_advertise(r_dev=dev[0], r_role='0', svc_name='org.wi-fi.wfds.send.rx',
419 srv_info='I can receive files upto size 2 GB')
420 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
421 svc_name='org.wi-fi.wfds.send.rx',
424 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
426 raise Exception("Unable to remove the advertisement instance")
429 def test_p2ps_nonexact_search(dev):
430 """P2PS nonexact seek request"""
431 p2ps_advertise(r_dev=dev[0], r_role='0', svc_name='org.wi-fi.wfds.play.rx',
432 srv_info='I support Miracast Mode ')
433 ev_list = p2ps_nonexact_seek(i_dev=dev[1], r_dev=dev[0],
434 svc_name='org.wi-fi.wfds.play*')
435 adv_id = ev_list[0].split()[0]
437 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
439 raise Exception("Unable to remove the advertisement instance")
442 def test_p2ps_nonexact_search_srvinfo(dev):
443 """P2PS nonexact seek request with service info"""
444 p2ps_advertise(r_dev=dev[0], r_role='0', svc_name='org.wi-fi.wfds.send.rx',
445 srv_info='I can receive files upto size 2 GB')
446 ev_list = p2ps_nonexact_seek(i_dev=dev[1], r_dev=dev[0],
447 svc_name='org.wi-fi.wfds.send*',
449 adv_id = ev_list[0].split()[0]
450 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
452 raise Exception("Unable to remove the advertisement instance")
455 def test_p2ps_connect_p2ps_method_nonautoaccept(dev):
456 """P2PS connect for non-auto-accept and P2PS config method"""
457 p2ps_advertise(r_dev=dev[0], r_role='0', svc_name='org.wi-fi.wfds.send.rx',
458 srv_info='I can receive files upto size 2 GB')
459 ev_list = p2ps_nonexact_seek(i_dev=dev[1], r_dev=dev[0],
460 svc_name='org.wi-fi.wfds.send*',
462 adv_id = ev_list[0].split()[0]
463 ev1, ev0 = p2ps_provision(dev[1], dev[0], adv_id, auto_accept=False)
464 p2ps_connect_pd(dev[0], dev[1], ev0, ev1)
466 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
468 raise Exception("Unable to remove the advertisement instance")
469 remove_group(dev[0], dev[1])
472 def test_p2ps_connect_p2ps_method_autoaccept(dev):
473 """P2PS connection with P2PS default config method and auto-accept"""
474 p2ps_advertise(r_dev=dev[0], r_role='1', svc_name='org.wi-fi.wfds.send.rx',
475 srv_info='I can receive files upto size 2 GB')
476 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
477 svc_name='org.wi-fi.wfds.send.rx',
480 ev1, ev0 = p2ps_provision(dev[1], dev[0], adv_id)
481 p2ps_connect_pd(dev[0], dev[1], ev0, ev1)
483 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
485 raise Exception("Unable to remove the advertisement instance")
486 remove_group(dev[0], dev[1])
489 def test_p2ps_connect_keypad_method_nonautoaccept(dev):
490 """P2PS Connection with non-auto-accept and seeker having keypad method"""
491 p2ps_advertise(r_dev=dev[0], r_role='0', svc_name='org.wi-fi.wfds.send.rx',
492 srv_info='I can receive files upto size 2 GB')
493 ev_list = p2ps_nonexact_seek(i_dev=dev[1], r_dev=dev[0],
494 svc_name='org.wi-fi.wfds.send*',
496 adv_id = ev_list[0].split()[0]
498 ev1, ev0, pin = p2ps_provision(dev[1], dev[0], adv_id, auto_accept=False, method="8")
499 p2ps_connect_pd(dev[0], dev[1], ev0, ev1, pin)
501 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
503 raise Exception("Unable to remove the advertisement instance")
504 remove_group(dev[0], dev[1])
507 def test_p2ps_connect_display_method_nonautoaccept(dev):
508 """P2PS connection with non-auto-accept and seeker having display method"""
509 p2ps_advertise(r_dev=dev[0], r_role='0', svc_name='org.wi-fi.wfds.send.rx',
510 srv_info='I can receive files upto size 2 GB')
511 ev_list = p2ps_nonexact_seek(i_dev=dev[1], r_dev=dev[0],
512 svc_name='org.wi-fi.wfds*', srv_info='2 GB')
513 adv_id = ev_list[0].split()[0]
515 ev1, ev0, pin = p2ps_provision(dev[1], dev[0], adv_id, auto_accept=False, method="100")
516 p2ps_connect_pd(dev[0], dev[1], ev0, ev1, pin)
518 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
520 raise Exception("Unable to remove the advertisement instance")
521 remove_group(dev[0], dev[1])
524 def test_p2ps_connect_keypad_method_autoaccept(dev):
525 """P2PS connection with auto-accept and keypad method on seeker side"""
526 p2ps_advertise(r_dev=dev[0], r_role='1', svc_name='org.wi-fi.wfds.send.rx',
527 srv_info='I can receive files upto size 2 GB')
528 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
529 svc_name='org.wi-fi.wfds.send.rx',
532 ev1, ev0, pin = p2ps_provision(dev[1], dev[0], adv_id, method="8")
533 p2ps_connect_pd(dev[0], dev[1], ev0, ev1, pin)
535 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
537 raise Exception("Unable to remove the advertisement instance")
538 remove_group(dev[0], dev[1])
541 def test_p2ps_connect_display_method_autoaccept(dev):
542 """P2PS connection with auto-accept and display method on seeker side"""
543 p2ps_advertise(r_dev=dev[0], r_role='1', svc_name='org.wi-fi.wfds.send.rx',
544 srv_info='I can receive files upto size 2 GB')
545 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
546 svc_name='org.wi-fi.wfds.send.rx',
549 ev1, ev0, pin = p2ps_provision(dev[1], dev[0], adv_id, method="100")
550 p2ps_connect_pd(dev[0], dev[1], ev0, ev1, pin)
552 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
554 raise Exception("Unable to remove the advertisement instance")
555 remove_group(dev[0], dev[1])
558 def test_p2ps_connect_adv_go_p2ps_method(dev):
559 """P2PS auto-accept connection with advertisement as GO and P2PS method"""
560 p2ps_advertise(r_dev=dev[0], r_role='4', svc_name='org.wi-fi.wfds.send.rx',
561 srv_info='I can receive files upto size 2 GB')
562 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
563 svc_name='org.wi-fi.wfds.send.rx',
566 ev1, ev0 = p2ps_provision(dev[1], dev[0], adv_id)
567 p2ps_connect_pd(dev[0], dev[1], ev0, ev1)
569 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
571 raise Exception("Unable to remove the advertisement instance")
572 remove_group(dev[0], dev[1])
575 def test_p2ps_connect_adv_go_p2ps_method_group_iface(dev):
576 """P2PS auto-accept connection with advertisement as GO and P2PS method using separate group interface"""
577 set_no_group_iface(dev[0], 0)
578 set_no_group_iface(dev[1], 0)
579 p2ps_advertise(r_dev=dev[0], r_role='4', svc_name='org.wi-fi.wfds.send.rx',
580 srv_info='I can receive files upto size 2 GB')
581 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
582 svc_name='org.wi-fi.wfds.send.rx',
585 ev1, ev0 = p2ps_provision(dev[1], dev[0], adv_id)
586 p2ps_connect_pd(dev[0], dev[1], ev0, ev1)
588 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
590 raise Exception("Unable to remove the advertisement instance")
591 remove_group(dev[0], dev[1])
594 def test_p2ps_connect_adv_client_p2ps_method(dev):
595 """P2PS auto-accept connection with advertisement as Client and P2PS method"""
596 p2ps_advertise(r_dev=dev[0], r_role='2', svc_name='org.wi-fi.wfds.send.rx',
597 srv_info='I can receive files upto size 2 GB')
598 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
599 svc_name='org.wi-fi.wfds.send.rx',
602 ev1, ev0 = p2ps_provision(dev[1], dev[0], adv_id)
603 p2ps_connect_pd(dev[0], dev[1], ev0, ev1)
605 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
607 raise Exception("Unable to remove the advertisement instance")
608 remove_group(dev[0], dev[1])
610 def p2ps_connect_adv_go_pin_method(dev, keep_group=False):
611 p2ps_advertise(r_dev=dev[0], r_role='4', svc_name='org.wi-fi.wfds.send.rx',
612 srv_info='I can receive files upto size 2 GB')
613 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
614 svc_name='org.wi-fi.wfds.send.rx',
616 ev1, ev0, pin = p2ps_provision(dev[1], dev[0], adv_id, method="8")
617 p2ps_connect_pd(dev[0], dev[1], ev0, ev1, pin)
620 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
622 raise Exception("Unable to remove the advertisement instance")
623 remove_group(dev[0], dev[1])
626 def test_p2ps_connect_adv_go_pin_method(dev):
627 """P2PS advertiser as GO with keypad config method on seeker side and auto-accept"""
628 p2ps_connect_adv_go_pin_method(dev)
631 def test_p2ps_connect_adv_client_pin_method(dev):
632 """P2PS advertiser as client with keypad config method on seeker side and auto-accept"""
633 dev[0].flush_scan_cache()
634 p2ps_advertise(r_dev=dev[0], r_role='2', svc_name='org.wi-fi.wfds.send.rx',
635 srv_info='I can receive files upto size 2 GB')
636 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
637 svc_name='org.wi-fi.wfds.send.rx',
640 ev1, ev0, pin = p2ps_provision(dev[1], dev[0], adv_id, method="8")
641 p2ps_connect_pd(dev[0], dev[1], ev0, ev1, pin)
643 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
645 raise Exception("Unable to remove the advertisement instance")
646 remove_group(dev[0], dev[1])
648 def test_p2ps_service_discovery_multiple_queries(dev):
649 """P2P service discovery with multiple queries"""
650 addr0 = dev[0].p2p_dev_addr()
651 addr1 = dev[1].p2p_dev_addr()
652 adv_id1 = p2ps_advertise(r_dev=dev[0], r_role='0',
653 svc_name='org.wi-fi.wfds.send.tx',
654 srv_info='I can transfer files upto size of 2 GB')
655 adv_id2 = p2ps_advertise(r_dev=dev[0], r_role='0',
656 svc_name='org.wi-fi.wfds.send.rx',
657 srv_info='I can receive files upto size of 2 GB')
658 adv_id3 = p2ps_advertise(r_dev=dev[0], r_role='1',
659 svc_name='org.wi-fi.wfds.display.tx',
660 srv_info='Miracast Mode')
661 adv_id4 = p2ps_advertise(r_dev=dev[0], r_role='1',
662 svc_name='org.wi-fi.wfds.display.rx',
663 srv_info='Miracast Mode')
665 dev[1].global_request("P2P_SERV_DISC_REQ " + addr0 + " asp 1 org.wi-fi.wfds.display.tx 'Miracast Mode'")
666 dev[1].global_request("P2P_FIND 10 type=social seek=org.wi-fi.wfds.display.tx")
667 dev[1].global_request("P2P_SERV_DISC_REQ " + addr0 + " asp 2 org.wi-fi.wfds.send* 'size of 2 GB'")
668 dev[1].p2p_stop_find()
669 dev[1].global_request("P2P_FIND 10 type=social seek=")
670 ev = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
672 raise Exception("P2P Device Found timed out")
674 raise Exception("Unexpected service discovery request source")
676 for i in range(0, 3):
677 ev = dev[1].wait_global_event(["P2P-SERV-ASP-RESP"], timeout=10)
679 raise Exception("P2P Service discovery timed out")
682 if len(ev_list) == 3:
684 dev[1].p2p_stop_find()
686 for test in [ ("seek=org.wi-fi.wfds.display.TX",
687 "asp_svc=org.wi-fi.wfds.display.tx"),
688 ("seek=foo seek=org.wi-fi.wfds.display.tx seek=bar",
689 "asp_svc=org.wi-fi.wfds.display.tx"),
690 ("seek=1 seek=2 seek=3 seek=org.wi-fi.wfds.display.tx seek=4 seek=5 seek=6",
691 "asp_svc=org.wi-fi.wfds.display.tx"),
692 ("seek=not-found", None),
693 ("seek=org.wi-fi.wfds", "asp_svc=org.wi-fi.wfds")]:
694 dev[2].global_request("P2P_FIND 10 type=social " + test[0])
696 ev = dev[2].wait_global_event(["P2P-DEVICE-FOUND"], timeout=1)
698 raise Exception("Unexpected device found: " + ev)
700 ev = dev[2].wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
702 raise Exception("P2P device discovery timed out (dev2)")
703 if test[1] not in ev:
704 raise Exception("Expected asp_svc not reported: " + ev)
705 dev[2].p2p_stop_find()
706 dev[2].request("P2P_FLUSH")
708 dev[0].p2p_stop_find()
710 ev1 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id1))
712 raise Exception("Unable to remove the advertisement instance")
713 ev2 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id2))
715 raise Exception("Unable to remove the advertisement instance")
716 ev3 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id3))
718 raise Exception("Unable to remove the advertisement instance")
719 ev4 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id4))
721 raise Exception("Unable to remove the advertisement instance")
723 if "OK" not in dev[0].global_request("P2P_SERVICE_ADD asp 1 12345678 1 1108 org.wi-fi.wfds.foobar svc_info='Test'"):
724 raise Exception("P2P_SERVICE_ADD failed")
725 if "OK" not in dev[0].global_request("P2P_SERVICE_DEL asp all"):
726 raise Exception("P2P_SERVICE_DEL asp all failed")
727 if "OK" not in dev[0].global_request("P2P_SERVICE_ADD asp 1 12345678 1 1108 org.wi-fi.wfds.foobar svc_info='Test'"):
728 raise Exception("P2P_SERVICE_ADD failed")
729 if "OK" not in dev[0].global_request("P2P_SERVICE_REP asp 1 12345678 1 1108 org.wi-fi.wfds.foobar svc_info='Test'"):
730 raise Exception("P2P_SERVICE_REP failed")
731 if "FAIL" not in dev[0].global_request("P2P_SERVICE_REP asp 1 12345678 1 1108 org.wi-fi.wfds.Foo svc_info='Test'"):
732 raise Exception("Invalid P2P_SERVICE_REP accepted")
733 if "OK" not in dev[0].global_request("P2P_SERVICE_ADD asp 1 a2345678 1 1108 org.wi-fi.wfds.something svc_info='Test'"):
734 raise Exception("P2P_SERVICE_ADD failed")
735 if "OK" not in dev[0].global_request("P2P_SERVICE_ADD asp 1 a2345679 1 1108 org.wi-fi.wfds.Foo svc_info='Test'"):
736 raise Exception("P2P_SERVICE_ADD failed")
739 with open('/proc/net/dev', 'r') as f:
742 for line in data.splitlines():
743 ifname = line.strip().split(' ')[0]
744 if ':' not in ifname:
746 ifname = ifname.split(':')[0]
747 ifnames.append(ifname)
750 def p2ps_connect_p2ps_method(dev, keep_group=False, join_extra="", flush=True):
752 dev[0].flush_scan_cache()
753 dev[1].flush_scan_cache()
754 p2ps_advertise(r_dev=dev[0], r_role='2', svc_name='org.wi-fi.wfds.send.rx',
755 srv_info='I can receive files upto size 2 GB')
756 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
757 svc_name='org.wi-fi.wfds.send.rx',
759 ev1, ev0 = p2ps_provision(dev[1], dev[0], adv_id)
761 if "join=" in ev0 and "go=" in ev1:
762 # dev[1] started GO and dev[0] is about to join it.
763 # Parse P2P-GROUP-STARTED from the GO to learn the operating frequency.
764 go_ev = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
766 raise Exception("P2P-GROUP-STARTED timeout on dev1")
767 res = dev[1].group_form_result(go_ev)
769 join_extra = " freq=" + res['freq']
771 ifnames = get_ifnames()
772 p2ps_connect_pd(dev[0], dev[1], ev0, ev1, join_extra=join_extra,
775 grp_ifname0 = dev[0].get_group_ifname()
776 grp_ifname1 = dev[1].get_group_ifname()
778 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
780 raise Exception("Unable to remove the advertisement instance")
781 ifnames = ifnames + get_ifnames()
782 remove_group(dev[0], dev[1])
783 ifnames = ifnames + get_ifnames()
785 return grp_ifname0, grp_ifname1, ifnames
787 def has_string_prefix(vals, prefix):
789 if val.startswith(prefix):
793 def test_p2ps_connect_p2ps_method_1(dev):
794 """P2PS connection with P2PS method - no group interface"""
795 set_no_group_iface(dev[0], 1)
796 set_no_group_iface(dev[1], 1)
798 (grp_ifname0, grp_ifname1, ifnames) = p2ps_connect_p2ps_method(dev)
799 if grp_ifname0 != dev[0].ifname:
800 raise Exception("unexpected dev0 group ifname: " + grp_ifname0)
801 if grp_ifname1 != dev[1].ifname:
802 raise Exception("unexpected dev1 group ifname: " + grp_ifname1)
803 if has_string_prefix(ifnames, 'p2p-' + grp_ifname0):
804 raise Exception("dev0 group interface unexpectedly present")
805 if has_string_prefix(ifnames, 'p2p-' + grp_ifname1):
806 raise Exception("dev1 group interface unexpectedly present")
808 def test_p2ps_connect_p2ps_method_2(dev):
809 """P2PS connection with P2PS method - group interface on dev0"""
810 set_no_group_iface(dev[0], 0)
811 set_no_group_iface(dev[1], 1)
813 (grp_ifname0, grp_ifname1, ifnames) = p2ps_connect_p2ps_method(dev)
814 if not grp_ifname0.startswith('p2p-' + dev[0].ifname + '-'):
815 raise Exception("unexpected dev0 group ifname: " + grp_ifname0)
816 if grp_ifname1 != dev[1].ifname:
817 raise Exception("unexpected dev1 group ifname: " + grp_ifname1)
818 if has_string_prefix(ifnames, 'p2p-' + grp_ifname0):
819 raise Exception("dev0 group interface unexpectedly present")
821 def test_p2ps_connect_p2ps_method_3(dev):
822 """P2PS connection with P2PS method - group interface on dev1"""
823 set_no_group_iface(dev[0], 1)
824 set_no_group_iface(dev[1], 0)
826 (grp_ifname0, grp_ifname1, ifnames) = p2ps_connect_p2ps_method(dev)
827 if grp_ifname0 != dev[0].ifname:
828 raise Exception("unexpected dev0 group ifname: " + grp_ifname0)
829 if not grp_ifname1.startswith('p2p-' + dev[1].ifname + '-'):
830 raise Exception("unexpected dev1 group ifname: " + grp_ifname1)
831 if has_string_prefix(ifnames, 'p2p-' + grp_ifname0):
832 raise Exception("dev0 group interface unexpectedly present")
834 def test_p2ps_connect_p2ps_method_4(dev):
835 """P2PS connection with P2PS method - group interface on both"""
836 set_no_group_iface(dev[0], 0)
837 set_no_group_iface(dev[1], 0)
839 (grp_ifname0, grp_ifname1, ifnames) = p2ps_connect_p2ps_method(dev)
840 if not grp_ifname0.startswith('p2p-' + dev[0].ifname + '-'):
841 raise Exception("unexpected dev0 group ifname: " + grp_ifname0)
842 if not grp_ifname1.startswith('p2p-' + dev[1].ifname + '-'):
843 raise Exception("unexpected dev1 group ifname: " + grp_ifname1)
845 def test_p2ps_connect_adv_go_persistent(dev):
846 """P2PS auto-accept connection with advertisement as GO and having persistent group"""
847 go_neg_pin_authorized_persistent(i_dev=dev[0], i_intent=15,
848 r_dev=dev[1], r_intent=0)
849 dev[0].remove_group()
850 dev[1].wait_go_ending_session()
852 p2ps_advertise(r_dev=dev[0], r_role='4', svc_name='org.wi-fi.wfds.send.rx',
853 srv_info='I can receive files upto size 2 GB')
854 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
855 svc_name='org.wi-fi.wfds.send.rx',
857 ev1, ev0 = p2ps_provision(dev[1], dev[0], adv_id)
858 if "persist=" not in ev0 or "persist=" not in ev1:
859 raise Exception("Persistent group isn't used by peers")
861 p2ps_connect_pd(dev[0], dev[1], ev0, ev1)
862 remove_group(dev[0], dev[1])
865 def test_p2ps_adv_go_persistent_no_peer_entry(dev):
866 """P2PS advertisement as GO having persistent group (no peer entry)"""
867 go_neg_pin_authorized_persistent(i_dev=dev[0], i_intent=15,
868 r_dev=dev[1], r_intent=0)
869 dev[0].remove_group()
870 dev[1].wait_go_ending_session()
872 p2ps_advertise(r_dev=dev[0], r_role='4', svc_name='org.wi-fi.wfds.send.rx',
873 srv_info='I can receive files upto size 2 GB')
874 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
875 svc_name='org.wi-fi.wfds.send.rx',
877 dev[0].global_request("P2P_FLUSH")
879 ev1, ev0 = p2ps_provision(dev[1], dev[0], adv_id)
880 if "persist=" not in ev0 or "persist=" not in ev1:
881 raise Exception("Persistent group isn't used by peers")
884 def test_p2ps_pd_follow_on_status_failure(dev):
885 """P2PS PD follow on request with status 11"""
886 addr0 = dev[0].p2p_dev_addr()
887 addr1 = dev[1].p2p_dev_addr()
889 p2ps_advertise(r_dev=dev[0], r_role='0', svc_name='org.wi-fi.wfds.send.rx',
890 srv_info='I can receive files upto size 2 GB')
891 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
892 svc_name='org.wi-fi.wfds.send.rx',
894 dev[1].asp_provision(addr0, adv_id=str(adv_id), adv_mac=addr0,
895 session_id=1, session_mac=addr1)
896 ev_pd_start = dev[0].wait_global_event(["P2PS-PROV-START"], timeout=10)
897 if ev_pd_start is None:
898 raise Exception("P2PS-PROV-START timeout on Advertiser side")
899 ev = dev[1].wait_global_event(["P2P-PROV-DISC-FAILURE"], timeout=10)
901 raise Exception("P2P-PROV-DISC-FAILURE timeout on seeker side")
902 dev[1].p2p_ext_listen(500, 500)
903 dev[0].p2p_stop_find()
904 dev[0].asp_provision(addr1, adv_id=str(adv_id), adv_mac=addr0, session_id=1,
905 session_mac=addr1, status=11, method=0)
907 ev = dev[1].wait_global_event(["P2PS-PROV-DONE"], timeout=10)
909 raise Exception("P2P-PROV-DONE timeout on seeker side")
911 raise Exception("P2P-PROV-DONE without adv_id on seeker side")
912 if "status=11" not in ev:
913 raise Exception("P2P-PROV-DONE without status on seeker side")
915 ev = dev[0].wait_global_event(["P2PS-PROV-DONE"], timeout=10)
917 raise Exception("P2P-PROV-DONE timeout on advertiser side")
919 raise Exception("P2P-PROV-DONE without adv_id on advertiser side")
920 if "status=11" not in ev:
921 raise Exception("P2P-PROV-DONE without status on advertiser side")
923 def test_p2ps_client_probe(dev):
924 """P2PS CLI discoverability on operating channel"""
925 cli_probe = dev[0].global_request("SET p2p_cli_probe 1")
926 p2ps_connect_p2ps_method(dev, keep_group=True)
927 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[2], r_dev=dev[0],
928 svc_name='org.wi-fi.wfds.send.rx',
929 single_peer_expected=False)
930 dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
931 remove_group(dev[0], dev[1])
933 def test_p2ps_go_probe(dev):
934 """P2PS GO discoverability on operating channel"""
935 p2ps_connect_adv_go_pin_method(dev, keep_group=True)
936 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[2], r_dev=dev[0],
937 svc_name='org.wi-fi.wfds.send.rx',
938 single_peer_expected=False)
939 dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
940 remove_group(dev[0], dev[1])
943 def test_p2ps_wildcard_p2ps(dev):
944 """P2PS wildcard SD Probe Request/Response"""
945 p2ps_wildcard = "org.wi-fi.wfds"
947 adv_id = p2ps_advertise(r_dev=dev[0], r_role='1',
948 svc_name='org.foo.service',
949 srv_info='I can do stuff')
950 adv_id2 = p2ps_advertise(r_dev=dev[0], r_role='1',
951 svc_name='org.wi-fi.wfds.send.rx',
952 srv_info='I can receive files upto size 2 GB')
954 if "OK" not in dev[1].global_request("P2P_FIND 10 type=social seek=org.foo.service seek=" + p2ps_wildcard):
955 raise Exception("Failed on P2P_FIND command")
957 ev1 = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
959 raise Exception("P2P-DEVICE-FOUND timeout on seeker side")
960 if dev[0].p2p_dev_addr() not in ev1:
961 raise Exception("Unexpected peer")
963 ev2 = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
965 raise Exception("P2P-DEVICE-FOUND timeout on seeker side (2)")
966 if dev[0].p2p_dev_addr() not in ev2:
967 raise Exception("Unexpected peer (2)")
969 if p2ps_wildcard not in ev1 + ev2:
970 raise Exception("P2PS Wildcard name not found in P2P-DEVICE-FOUND event")
971 if "org.foo.service" not in ev1 + ev2:
972 raise Exception("Vendor specific service name not found in P2P-DEVICE-FOUND event")
974 if "OK" not in dev[1].global_request("P2P_STOP_FIND"):
975 raise Exception("P2P_STOP_FIND failed")
976 dev[1].dump_monitor()
978 res = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
980 raise Exception("Unable to remove the advertisement instance")
982 if "OK" not in dev[1].global_request("P2P_FIND 10 type=social seek=" + p2ps_wildcard):
983 raise Exception("Failed on P2P_FIND command")
985 ev1 = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
987 raise Exception("P2P-DEVICE-FOUND timeout on seeker side")
988 if dev[0].p2p_dev_addr() not in ev1:
989 raise Exception("Unexpected peer")
990 if p2ps_wildcard not in ev1:
991 raise Exception("P2PS Wildcard name not found in P2P-DEVICE-FOUND event (2)")
992 dev[1].dump_monitor()
994 res = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id2))
996 raise Exception("Unable to remove the advertisement instance 2")
998 if "OK" not in dev[1].global_request("P2P_FIND 10 type=social seek=" + p2ps_wildcard):
999 raise Exception("Failed on P2P_FIND command")
1001 ev1 = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=2)
1003 raise Exception("Unexpected P2P-DEVICE-FOUND event on seeker side")
1004 dev[1].p2p_stop_find()
1005 dev[1].dump_monitor()
1007 def test_p2ps_many_services_in_probe(dev):
1008 """P2PS with large number of services in Probe Request/Response"""
1009 long1 = 'org.example.0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.a'
1010 long2 = 'org.example.0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.b'
1011 long3 = 'org.example.0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.c'
1012 long4 = 'org.example.0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.d'
1013 long5 = 'org.example.0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.e'
1014 for name in [ long1, long2, long3, long4, long5 ]:
1015 p2ps_advertise(r_dev=dev[0], r_role='1',
1017 srv_info='I can do stuff')
1019 if "OK" not in dev[1].global_request("P2P_FIND 10 type=social seek=%s seek=%s seek=%s seek=%s seek=%s" % (long1, long2, long3, long4, long5)):
1020 raise Exception("Failed on P2P_FIND command")
1023 # Note: Require only four events since all the services do not fit within
1026 ev = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
1028 raise Exception("Missing P2P-DEVICE-FOUND")
1029 events = events + ev
1030 dev[1].p2p_stop_find()
1031 dev[1].dump_monitor()
1032 for name in [ long2, long3, long4, long5 ]:
1033 if name not in events:
1034 raise Exception("Service missing from peer events")
1036 def p2ps_test_feature_capability_cpt(dev, adv_cpt, seeker_cpt, adv_role,
1038 p2ps_advertise(r_dev=dev[0], r_role=adv_role,
1039 svc_name='org.wi-fi.wfds.send.rx',
1040 srv_info='I can receive files upto size 2 GB', cpt=adv_cpt)
1041 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
1042 svc_name='org.wi-fi.wfds.send.rx',
1044 auto_accept = adv_role != "0"
1045 ev1, ev0, pin = p2ps_provision(dev[1], dev[0], adv_id,
1046 auto_accept=auto_accept, adv_cpt=adv_cpt,
1047 seeker_cpt=seeker_cpt, method="8")
1049 status0, fcap0 = p2ps_parse_event(ev0, "status", "feature_cap")
1050 status1, fcap1 = p2ps_parse_event(ev0, "status", "feature_cap")
1053 raise Exception("Bad feature capability on Seeker side")
1055 raise Exception("Bad feature capability on Advertiser side")
1057 raise Exception("Incompatible feature capability values")
1059 if status0 not in ("0", "12") or status1 not in ("0", "12"):
1060 raise Exception("Unexpected PD result status")
1062 if result == "UDP" and fcap0[1] != "1":
1063 raise Exception("Unexpected CPT feature capability value (expected: UDP)")
1064 elif result == "MAC" and fcap0[1] != "2":
1065 raise Exception("Unexpected CPT feature capability value (expected: MAC)")
1067 ev = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
1069 raise Exception("Unable to remove the advertisement instance")
1072 def test_p2ps_feature_capability_mac_autoaccept(dev):
1073 """P2PS PD Feature Capability CPT: advertiser MAC, seeker UDP:MAC, autoaccept"""
1074 p2ps_test_feature_capability_cpt(dev, adv_cpt="MAC", seeker_cpt="UDP:MAC",
1075 adv_role="4", result="MAC")
1078 def test_p2ps_feature_capability_mac_nonautoaccept(dev):
1079 """P2PS PD Feature Capability CPT: advertiser:MAC, seeker UDP:MAC, nonautoaccept"""
1080 p2ps_test_feature_capability_cpt(dev, adv_cpt="MAC", seeker_cpt="UDP:MAC",
1081 adv_role="0", result="MAC")
1084 def test_p2ps_feature_capability_mac_udp_autoaccept(dev):
1085 """P2PS PD Feature Capability CPT: advertiser MAC:UDP, seeker UDP:MAC, autoaccept"""
1086 p2ps_test_feature_capability_cpt(dev, adv_cpt="MAC:UDP",
1087 seeker_cpt="UDP:MAC", adv_role="2",
1091 def test_p2ps_feature_capability_mac_udp_nonautoaccept(dev):
1092 """P2PS PD Feature Capability CPT: advertiser MAC:UDP, seeker UDP:MAC, nonautoaccept"""
1093 p2ps_test_feature_capability_cpt(dev, adv_cpt="MAC:UDP",
1094 seeker_cpt="UDP:MAC", adv_role="0",
1098 def test_p2ps_feature_capability_udp_mac_autoaccept(dev):
1099 """P2PS PD Feature Capability CPT: advertiser UDP:MAC, seeker MAC:UDP, autoaccept"""
1100 p2ps_test_feature_capability_cpt(dev, adv_cpt="UDP:MAC",
1101 seeker_cpt="MAC:UDP", adv_role="2",
1105 def test_p2ps_feature_capability_udp_mac_nonautoaccept(dev):
1106 """P2PS PD Feature Capability CPT: advertiser UDP:MAC, seeker MAC:UDP, nonautoaccept"""
1107 p2ps_test_feature_capability_cpt(dev, adv_cpt="UDP:MAC",
1108 seeker_cpt="MAC:UDP", adv_role="0",
1111 def test_p2ps_channel_one_connected(dev, apdev):
1112 """P2PS connection with P2PS method - one of the stations connected"""
1113 set_no_group_iface(dev[0], 0)
1114 set_no_group_iface(dev[1], 0)
1117 hapd = hostapd.add_ap(apdev[0],
1118 { "ssid": 'bss-2.4ghz', "channel": '7' })
1119 dev[1].connect("bss-2.4ghz", key_mgmt="NONE", scan_freq="2442")
1121 (grp_ifname0, grp_ifname1, ifnames) = p2ps_connect_p2ps_method(dev, keep_group=True, join_extra=" freq=2442")
1122 freq = dev[0].get_group_status_field('freq')
1125 raise Exception('Unexpected frequency for group 2442 != ' + freq)
1127 remove_group(dev[0], dev[1])
1128 dev[0].global_request("P2P_SERVICE_DEL asp all")
1130 def set_random_listen_chan(dev):
1131 chan = random.randrange(0, 3) * 5 + 1
1132 dev.global_request("P2P_SET listen_channel %d" % chan)
1134 def test_p2ps_channel_both_connected_same(dev, apdev):
1135 """P2PS connection with P2PS method - stations connected on same channel"""
1136 set_no_group_iface(dev[2], 0)
1137 set_no_group_iface(dev[1], 0)
1139 dev[2].global_request("P2P_SET listen_channel 6")
1140 dev[1].global_request("P2P_SET listen_channel 6")
1142 dev[1].flush_scan_cache()
1143 dev[2].flush_scan_cache()
1146 hapd = hostapd.add_ap(apdev[0],
1147 { "ssid": 'bss-2.4ghz', "channel": '6' })
1149 dev[2].connect("bss-2.4ghz", key_mgmt="NONE", scan_freq="2437")
1150 dev[1].connect("bss-2.4ghz", key_mgmt="NONE", scan_freq="2437")
1152 tmpdev = [ dev[2], dev[1] ]
1153 (grp_ifname0, grp_ifname1, ifnames) = p2ps_connect_p2ps_method(tmpdev, keep_group=True, join_extra=" freq=2437", flush=False)
1154 freq = dev[2].get_group_status_field('freq')
1157 raise Exception('Unexpected frequency for group 2437 != ' + freq)
1159 remove_group(dev[2], dev[1])
1160 dev[2].global_request("P2P_SERVICE_DEL asp all")
1161 for i in range(1, 3):
1162 set_random_listen_chan(dev[i])
1164 def disconnect_handler(seeker, advertiser):
1165 advertiser.request("DISCONNECT")
1166 advertiser.wait_disconnected(timeout=1)
1168 def test_p2ps_channel_both_connected_different(dev, apdev):
1169 """P2PS connection with P2PS method - stations connected on different channel"""
1170 if dev[0].get_mcc() > 1:
1171 raise HwsimSkip('Skip due to MCC being enabled')
1173 set_no_group_iface(dev[0], 0)
1174 set_no_group_iface(dev[1], 0)
1177 hapd1 = hostapd.add_ap(apdev[0],
1178 { "ssid": 'bss-channel-3', "channel": '3' })
1180 hapd2 = hostapd.add_ap(apdev[1],
1181 { "ssid": 'bss-channel-10', "channel": '10' })
1183 dev[0].connect("bss-channel-3", key_mgmt="NONE", scan_freq="2422")
1184 dev[1].connect("bss-channel-10", key_mgmt="NONE", scan_freq="2457")
1186 p2ps_advertise(r_dev=dev[0], r_role='2',
1187 svc_name='org.wi-fi.wfds.send.rx',
1188 srv_info='I can receive files upto size 2 GB')
1189 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
1190 svc_name='org.wi-fi.wfds.send.rx',
1193 ev1, ev0 = p2ps_provision(dev[1], dev[0], adv_id, auto_accept=False,
1194 handler=disconnect_handler)
1195 p2ps_connect_pd(dev[0], dev[1], ev0, ev1)
1196 freq = dev[0].get_group_status_field('freq')
1198 raise Exception('Unexpected frequency for group 2457 != ' + freq)
1200 remove_group(dev[0], dev[1])
1201 dev[0].global_request("P2P_SERVICE_DEL asp all")
1203 def test_p2ps_channel_both_connected_different_mcc(dev, apdev):
1204 """P2PS connection with P2PS method - stations connected on different channels with mcc"""
1205 if dev[0].get_mcc() == 1:
1206 raise HwsimSkip('Skip case due to MCC not enabled')
1208 set_no_group_iface(dev[0], 0)
1209 set_no_group_iface(dev[1], 0)
1212 hapd1 = hostapd.add_ap(apdev[0],
1213 { "ssid": 'bss-channel-3', "channel": '3' })
1215 hapd2 = hostapd.add_ap(apdev[1],
1216 { "ssid": 'bss-channel-10', "channel": '10' })
1218 dev[0].connect("bss-channel-3", key_mgmt="NONE", scan_freq="2422")
1219 dev[1].connect("bss-channel-10", key_mgmt="NONE", scan_freq="2457")
1221 (grp_ifname0, grp_ifname1, ifnames) = p2ps_connect_p2ps_method(dev, keep_group=True)
1222 freq = dev[0].get_group_status_field('freq')
1224 if freq != '2422' and freq != '2457':
1225 raise Exception('Unexpected frequency for group =' + freq)
1227 remove_group(dev[0], dev[1])
1228 dev[0].global_request("P2P_SERVICE_DEL asp all")
1230 def clear_disallow_handler(seeker, advertiser):
1231 advertiser.global_request("P2P_SET disallow_freq ")
1234 def test_p2ps_channel_disallow_freq(dev, apdev):
1235 """P2PS connection with P2PS method - disallow freqs"""
1236 set_no_group_iface(dev[0], 0)
1237 set_no_group_iface(dev[1], 0)
1240 dev[0].global_request("P2P_SET disallow_freq 2412-2457")
1241 dev[1].global_request("P2P_SET disallow_freq 2417-2462")
1243 p2ps_advertise(r_dev=dev[0], r_role='2',
1244 svc_name='org.wi-fi.wfds.send.rx',
1245 srv_info='I can receive files upto size 2 GB')
1247 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
1248 svc_name='org.wi-fi.wfds.send.rx',
1251 ev1, ev0 = p2ps_provision(dev[1], dev[0], adv_id, auto_accept=False,
1252 handler=clear_disallow_handler)
1253 p2ps_connect_pd(dev[0], dev[1], ev0, ev1)
1255 freq = dev[0].get_group_status_field('freq')
1257 raise Exception('Unexpected frequency for group 2412 != ' + freq)
1259 remove_group(dev[0], dev[1])
1260 dev[0].global_request("P2P_SERVICE_DEL asp all")
1261 dev[0].global_request("P2P_SET disallow_freq ")
1262 dev[1].global_request("P2P_SET disallow_freq ")
1264 def test_p2ps_channel_sta_connected_disallow_freq(dev, apdev):
1265 """P2PS connection with P2PS method - one station and disallow freqs"""
1266 if dev[0].get_mcc() > 1:
1267 raise HwsimSkip('Skip due to MCC being enabled')
1269 set_no_group_iface(dev[0], 0)
1270 set_no_group_iface(dev[1], 0)
1273 dev[0].global_request("P2P_SET disallow_freq 2437")
1274 hapd = hostapd.add_ap(apdev[0],
1275 { "ssid": 'bss-channel-6', "channel": '6' })
1277 dev[1].connect("bss-channel-6", key_mgmt="NONE", scan_freq="2437")
1279 p2ps_advertise(r_dev=dev[0], r_role='2',
1280 svc_name='org.wi-fi.wfds.send.rx',
1281 srv_info='I can receive files upto size 2 GB')
1282 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
1283 svc_name='org.wi-fi.wfds.send.rx',
1286 ev1, ev0 = p2ps_provision(dev[1], dev[0], adv_id, auto_accept=False,
1287 handler=clear_disallow_handler)
1288 p2ps_connect_pd(dev[0], dev[1], ev0, ev1)
1290 freq = dev[0].get_group_status_field('freq')
1292 raise Exception('Unexpected frequency for group 2437 != ' + freq)
1294 remove_group(dev[0], dev[1])
1295 dev[0].global_request("P2P_SET disallow_freq ")
1296 dev[0].global_request("P2P_SERVICE_DEL asp all")
1298 def test_p2ps_channel_sta_connected_disallow_freq_mcc(dev, apdev):
1299 """P2PS connection with P2PS method - one station and disallow freqs with mcc"""
1300 with HWSimRadio(n_channels=2) as (radio, iface):
1301 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
1302 wpas.interface_add(iface)
1304 if wpas.get_mcc() < 2:
1305 raise Exception("New radio does not support MCC")
1307 set_no_group_iface(dev[0], 0)
1308 set_no_group_iface(wpas, 0)
1311 dev[0].global_request("P2P_SET disallow_freq 2437")
1312 hapd1 = hostapd.add_ap(apdev[0],
1313 { "ssid": 'bss-channel-6', "channel": '6' })
1315 wpas.connect("bss-channel-6", key_mgmt="NONE", scan_freq="2437")
1317 tmpdev = [ dev[0], wpas ]
1318 (grp_ifname0, grp_ifname1, ifnames) = p2ps_connect_p2ps_method(tmpdev, keep_group=True)
1320 freq = dev[0].get_group_status_field('freq')
1322 raise Exception('Unexpected frequency=2437')
1324 remove_group(dev[0], wpas)
1325 dev[0].global_request("P2P_SET disallow_freq ")
1326 dev[0].global_request("P2P_SERVICE_DEL asp all")
1329 def test_p2ps_active_go_adv(dev, apdev):
1330 """P2PS connection with P2PS method - active GO on advertiser"""
1331 set_no_group_iface(dev[0], 0)
1332 set_no_group_iface(dev[1], 0)
1336 dev[0].global_request("P2P_GROUP_ADD persistent")
1337 ev = dev[0].wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
1339 raise Exception("P2P-GROUP-STARTED timeout on " + dev[0].p2p_dev_addr())
1341 dev[0].group_form_result(ev)
1343 p2ps_advertise(r_dev=dev[0], r_role='4',
1344 svc_name='org.wi-fi.wfds.send.rx',
1345 srv_info='I can receive files upto size 2 GB')
1346 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
1347 svc_name='org.wi-fi.wfds.send.rx',
1348 single_peer_expected=False)
1350 ev1, ev0 = p2ps_provision(dev[1], dev[0], adv_id)
1352 # explicitly stop find/listen as otherwise the long listen started by
1353 # the advertiser would prevent the seeker to connect with the P2P GO
1354 dev[0].p2p_stop_find()
1355 p2ps_connect_pd(dev[0], dev[1], ev0, ev1)
1357 remove_group(dev[0], dev[1])
1358 dev[0].global_request("P2P_SERVICE_DEL asp all")
1361 def test_p2ps_active_go_seeker(dev, apdev):
1362 """P2PS connection with P2PS method - active GO on seeker"""
1363 set_no_group_iface(dev[0], 0)
1364 set_no_group_iface(dev[1], 0)
1367 # Add a P2P GO on the seeker
1368 dev[1].global_request("P2P_GROUP_ADD persistent")
1369 ev = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
1371 raise Exception("P2P-GROUP-STARTED timeout on " + dev[1].p2p_dev_addr())
1373 res = dev[1].group_form_result(ev)
1375 p2ps_advertise(r_dev=dev[0], r_role='2',
1376 svc_name='org.wi-fi.wfds.send.rx',
1377 srv_info='I can receive files upto size 2 GB')
1378 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
1379 svc_name='org.wi-fi.wfds.send.rx',
1382 ev1, ev0 = p2ps_provision(dev[1], dev[0], adv_id)
1383 p2ps_connect_pd(dev[0], dev[1], ev0, ev1,
1384 join_extra=" freq=" + res['freq'])
1386 remove_group(dev[0], dev[1])
1387 dev[0].global_request("P2P_SERVICE_DEL asp all")
1389 def test_p2ps_channel_active_go_and_station_same(dev, apdev):
1390 """P2PS connection, active P2P GO and station on channel"""
1391 set_no_group_iface(dev[2], 0)
1392 set_no_group_iface(dev[1], 0)
1394 dev[2].global_request("P2P_SET listen_channel 11")
1395 dev[1].global_request("P2P_SET listen_channel 11")
1397 hapd = hostapd.add_ap(apdev[0],
1398 { "ssid": 'bss-channel-11', "channel": '11' })
1400 dev[2].connect("bss-channel-11", key_mgmt="NONE", scan_freq="2462")
1402 # Add a P2P GO on the seeker
1403 dev[1].global_request("P2P_GROUP_ADD freq=2462 persistent")
1404 ev = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
1406 raise Exception("P2P-GROUP-STARTED timeout on " + dev[1].p2p_dev_addr())
1408 dev[1].group_form_result(ev)
1410 p2ps_advertise(r_dev=dev[2], r_role='2',
1411 svc_name='org.wi-fi.wfds.send.rx',
1412 srv_info='I can receive files upto size 2 GB')
1413 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[2],
1414 svc_name='org.wi-fi.wfds.send.rx',
1417 ev1, ev0 = p2ps_provision(dev[1], dev[2], adv_id)
1418 p2ps_connect_pd(dev[2], dev[1], ev0, ev1, join_extra=" freq=2462")
1420 remove_group(dev[2], dev[1])
1421 dev[2].global_request("P2P_SERVICE_DEL asp all")
1422 for i in range(1, 3):
1423 set_random_listen_chan(dev[i])
1425 def test_p2ps_channel_active_go_and_station_different(dev, apdev):
1426 """P2PS connection, active P2P GO and station on channel"""
1427 if dev[0].get_mcc() > 1:
1428 raise HwsimSkip('Skip due to MCC being enabled')
1430 set_no_group_iface(dev[0], 0)
1431 set_no_group_iface(dev[1], 0)
1434 hapd = hostapd.add_ap(apdev[0],
1435 { "ssid": 'bss-channel-2', "channel": '2' })
1437 dev[0].connect("bss-channel-2", key_mgmt="NONE", scan_freq="2417")
1439 # Add a P2P GO on the seeker. Force the listen channel to be the same,
1440 # as extended listen will not kick as long as P2P GO is waiting for
1441 # initial connection.
1442 dev[1].global_request("P2P_SET listen_channel 11")
1443 dev[1].global_request("P2P_GROUP_ADD freq=2462 persistent")
1444 ev = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
1446 raise Exception("P2P-GROUP-STARTED timeout on " + dev[1].p2p_dev_addr())
1448 dev[1].group_form_result(ev)
1450 p2ps_advertise(r_dev=dev[0], r_role='2',
1451 svc_name='org.wi-fi.wfds.send.rx',
1452 srv_info='I can receive files upto size 2 GB')
1453 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
1454 svc_name='org.wi-fi.wfds.send.rx',
1457 ev1, ev0 = p2ps_provision(dev[1], dev[0], adv_id, auto_accept=False,
1458 handler=disconnect_handler, adv_role='2',
1460 p2ps_connect_pd(dev[0], dev[1], ev0, ev1)
1461 freq = dev[0].get_group_status_field('freq')
1463 raise Exception('Unexpected frequency for group 2462!=' + freq)
1465 dev[0].global_request("P2P_SERVICE_DEL asp all")
1466 set_random_listen_chan(dev[1])
1469 def test_p2ps_channel_active_go_and_station_different_mcc(dev, apdev):
1470 """P2PS connection, active P2P GO and station on channel"""
1471 if dev[0].get_mcc() == 1:
1472 raise HwsimSkip('Skip due to MCC not being enabled')
1474 set_no_group_iface(dev[0], 0)
1475 set_no_group_iface(dev[1], 0)
1478 hapd = hostapd.add_ap(apdev[0],
1479 { "ssid": 'bss-channel-6', "channel": '6' })
1481 dev[0].connect("bss-channel-6", key_mgmt="NONE", scan_freq="2437")
1483 # Add a P2P GO on the seeker
1484 dev[1].global_request("P2P_GROUP_ADD freq=2462 persistent")
1485 ev = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
1487 raise Exception("P2P-GROUP-STARTED timeout on " + dev[1].p2p_dev_addr())
1489 dev[1].group_form_result(ev)
1491 p2ps_advertise(r_dev=dev[0], r_role='2',
1492 svc_name='org.wi-fi.wfds.send.rx',
1493 srv_info='I can receive files upto size 2 GB')
1494 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
1495 svc_name='org.wi-fi.wfds.send.rx',
1498 ev1, ev0 = p2ps_provision(dev[1], dev[0], adv_id)
1499 p2ps_connect_pd(dev[0], dev[1], ev0, ev1)
1501 remove_group(dev[0], dev[1])
1502 dev[0].request("DISCONNECT")
1504 dev[0].global_request("P2P_SERVICE_DEL asp all")
1506 def test_p2ps_connect_p2p_device(dev):
1507 """P2PS connection using cfg80211 P2P Device"""
1508 run_p2ps_connect_p2p_device(dev, 0)
1510 def test_p2ps_connect_p2p_device_no_group_iface(dev):
1511 """P2PS connection using cfg80211 P2P Device (no separate group interface)"""
1512 run_p2ps_connect_p2p_device(dev, 1)
1514 def run_p2ps_connect_p2p_device(dev, no_group_iface):
1515 with HWSimRadio(use_p2p_device=True) as (radio, iface):
1516 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
1517 wpas.interface_add(iface)
1518 wpas.global_request("SET p2p_no_group_iface %d" % no_group_iface)
1520 p2ps_advertise(r_dev=dev[0], r_role='1',
1521 svc_name='org.wi-fi.wfds.send.rx',
1522 srv_info='I can receive files upto size 2 GB')
1523 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=wpas, r_dev=dev[0],
1524 svc_name='org.wi-fi.wfds.send.rx',
1527 ev1, ev0 = p2ps_provision(wpas, dev[0], adv_id)
1528 p2ps_connect_pd(dev[0], wpas, ev0, ev1)
1530 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
1532 raise Exception("Unable to remove the advertisement instance")
1533 remove_group(dev[0], wpas)
1535 def test_p2ps_connect_p2p_device2(dev):
1536 """P2PS connection using cfg80211 P2P Device (reverse)"""
1537 run_p2ps_connect_p2p_device2(dev, 0)
1539 def test_p2ps_connect_p2p_device2_no_group_iface(dev):
1540 """P2PS connection using cfg80211 P2P Device (reverse) (no separate group interface)"""
1541 run_p2ps_connect_p2p_device2(dev, 1)
1543 def run_p2ps_connect_p2p_device2(dev, no_group_iface):
1544 with HWSimRadio(use_p2p_device=True) as (radio, iface):
1545 wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
1546 wpas.interface_add(iface)
1547 wpas.global_request("SET p2p_no_group_iface %d" % no_group_iface)
1549 p2ps_advertise(r_dev=wpas, r_role='1',
1550 svc_name='org.wi-fi.wfds.send.rx',
1551 srv_info='I can receive files upto size 2 GB')
1552 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[0], r_dev=wpas,
1553 svc_name='org.wi-fi.wfds.send.rx',
1556 ev1, ev0 = p2ps_provision(dev[0], wpas, adv_id)
1557 p2ps_connect_pd(wpas, dev[0], ev0, ev1)
1559 ev0 = wpas.global_request("P2P_SERVICE_DEL asp " + str(adv_id))
1561 raise Exception("Unable to remove the advertisement instance")
1562 remove_group(wpas, dev[0])
1565 def test_p2ps_connect_p2ps_method_no_pin(dev):
1566 """P2P group formation using P2PS method without specifying PIN"""
1568 dev[1].p2p_go_neg_auth(dev[0].p2p_dev_addr(), None, "p2ps", go_intent=15)
1570 i_res = dev[0].p2p_go_neg_init(dev[1].p2p_dev_addr(), None, "p2ps",
1571 timeout=20, go_intent=0)
1572 r_res = dev[1].p2p_go_neg_auth_result()
1573 logger.debug("i_res: " + str(i_res))
1574 logger.debug("r_res: " + str(r_res))
1575 check_grpform_results(i_res, r_res)
1576 remove_group(dev[0], dev[1])