]> git.ipfire.org Git - thirdparty/hostap.git/blob - tests/hwsim/test_p2ps.py
32838d81580a94612237311367c06038046c2d9f
[thirdparty/hostap.git] / tests / hwsim / test_p2ps.py
1 # P2P services
2 # Copyright (c) 2014-2015, Qualcomm Atheros, Inc.
3 #
4 # This software may be distributed under the terms of the BSD license.
5 # See README for more details.
6
7 import logging
8 logger = logging.getLogger()
9 import time
10 import random
11 import re
12
13 import hwsim_utils
14 from wpasupplicant import WpaSupplicant
15 from test_p2p_grpform import check_grpform_results
16 from test_p2p_grpform import remove_group
17 from test_p2p_persistent import go_neg_pin_authorized_persistent
18 from utils import HwsimSkip
19
20 # Dev[0] -> Advertiser
21 # Dev[1] -> Seeker
22 # ev0 -> Event generated at advertiser side
23 # ev1 -> Event generated at Seeker side
24
25 def p2ps_advertise(r_dev, r_role, svc_name, srv_info, rsp_info=None, cpt=None):
26 """P2PS Advertise function"""
27 adv_id = random.randrange(1, 0xFFFFFFFF)
28 advid = hex(adv_id)[2:]
29
30 cpt_param = (" cpt=" + cpt) if cpt is not None else ""
31
32 if rsp_info is not None and srv_info is not None:
33 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 + "'"):
34 raise Exception("P2P_SERVICE_ADD with response info and service info failed")
35
36 if rsp_info is None and srv_info is not None:
37 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 + "'"):
38 raise Exception("P2P_SERVICE_ADD with service info failed")
39
40 if rsp_info is None and srv_info is None:
41 if "OK" not in r_dev.global_request("P2P_SERVICE_ADD asp " + str(r_role) + " " + str(advid) + " 1 1108 " + svc_name + cpt_param):
42 raise Exception("P2P_SERVICE_ADD without service info and without response info failed")
43
44 if rsp_info is not None and srv_info is None:
45 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 + "'"):
46 raise Exception("P2P_SERVICE_ADD with response info failed")
47
48 r_dev.p2p_listen()
49 return advid
50
51 def p2ps_exact_seek(i_dev, r_dev, svc_name, srv_info=None,
52 single_peer_expected=True):
53 """P2PS exact service seek request"""
54 if srv_info is not None:
55 ev1 = i_dev.global_request("P2P_SERV_DISC_REQ 00:00:00:00:00:00 asp 1 " + svc_name + " '" + srv_info + "'")
56 if ev1 is None:
57 raise Exception("Failed to add Service Discovery request for exact seek request")
58
59 if "OK" not in i_dev.global_request("P2P_FIND 10 type=social seek=" + svc_name):
60 raise Exception("Failed to initiate seek operation")
61
62 timeout = time.time() + 10
63 ev1 = i_dev.wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
64 while ev1 is not None and not single_peer_expected:
65 if r_dev.p2p_dev_addr() in ev1 and "adv_id=" in ev1:
66 break
67 ev1 = i_dev.wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
68
69 if timeout < time.time():
70 raise Exception("Device not found")
71
72 if ev1 is None:
73 raise Exception("P2P-DEVICE-FOUND timeout on seeker side")
74 if r_dev.p2p_dev_addr() not in ev1:
75 raise Exception("Unexpected peer")
76
77 if srv_info is None:
78 adv_id = ev1.split("adv_id=")[1].split(" ")[0]
79 rcvd_svc_name = ev1.split("asp_svc=")[1].split(" ")[0]
80 if rcvd_svc_name != svc_name:
81 raise Exception("service name not matching")
82 else:
83 ev1 = i_dev.wait_global_event(["P2P-SERV-ASP-RESP"], timeout=10)
84 if ev1 is None:
85 raise Exception("Failed to receive Service Discovery Response")
86 if r_dev.p2p_dev_addr() not in ev1:
87 raise Exception("Service Discovery response from Unknown Peer")
88 if srv_info is not None and srv_info not in ev1:
89 raise Exception("service info not available in Service Discovery response")
90 adv_id = ev1.split(" ")[3]
91 rcvd_svc_name = ev1.split(" ")[6]
92 if rcvd_svc_name != svc_name:
93 raise Exception("service name not matching")
94
95 return [adv_id, rcvd_svc_name]
96
97 def p2ps_nonexact_seek(i_dev, r_dev, svc_name, srv_info=None, adv_num=None):
98 """P2PS nonexact service seek request"""
99 if adv_num is None:
100 adv_num = 1
101 if srv_info is not None:
102 ev1 = i_dev.global_request("P2P_SERV_DISC_REQ 00:00:00:00:00:00 asp 1 " + svc_name + " '" + srv_info + "'")
103 else:
104 ev1 = i_dev.global_request("P2P_SERV_DISC_REQ 00:00:00:00:00:00 asp 1 " + svc_name + " '")
105 if ev1 is None:
106 raise Exception("Failed to add Service Discovery request for nonexact seek request")
107 if "OK" not in i_dev.global_request("P2P_FIND 10 type=social seek="):
108 raise Exception("Failed to initiate seek")
109 ev1 = i_dev.wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
110 if ev1 is None:
111 raise Exception("P2P-DEVICE-FOUND timeout on seeker side")
112 if r_dev.p2p_dev_addr() not in ev1:
113 raise Exception("Unexpected peer")
114 ev_list = []
115 for i in range (0, adv_num):
116 ev1 = i_dev.wait_global_event(["P2P-SERV-ASP-RESP"], timeout=10)
117 if ev1 is None:
118 raise Exception("Failed to receive Service Discovery Response")
119 if r_dev.p2p_dev_addr() not in ev1:
120 raise Exception("Service Discovery response from Unknown Peer")
121 if srv_info is not None and srv_info not in ev1:
122 raise Exception("service info not available in Service Discovery response")
123 adv_id = ev1.split(" ")[3]
124 rcvd_svc_name = ev1.split(" ")[6]
125 ev_list.append(''.join([adv_id, ' ', rcvd_svc_name]))
126 return ev_list
127
128 def p2ps_parse_event(ev, *args):
129 ret = ()
130 for arg in args:
131 m = re.search("\s+" + arg + r"=(\S+)", ev)
132 ret += (m.group(1) if m is not None else None,)
133 return ret
134
135 def p2ps_provision(seeker, advertiser, adv_id, auto_accept=True, method="1000", adv_cpt=None, seeker_cpt=None):
136 addr0 = seeker.p2p_dev_addr()
137 addr1 = advertiser.p2p_dev_addr()
138
139 seeker.asp_provision(addr1, adv_id=str(adv_id), adv_mac=addr1, session_id=1,
140 session_mac=addr0, method=method, cpt=seeker_cpt)
141
142 if not auto_accept or method == "100":
143 pin = None
144 ev_pd_start = advertiser.wait_global_event(["P2PS-PROV-START"],
145 timeout=10)
146 if ev_pd_start is None:
147 raise Exception("P2PS-PROV-START timeout on Advertiser side")
148 peer = ev_pd_start.split()[1]
149 advert_id, advert_mac, session, session_mac =\
150 p2ps_parse_event(ev_pd_start, "adv_id", "adv_mac", "session", "mac")
151
152 ev = seeker.wait_global_event(["P2P-PROV-DISC-FAILURE"], timeout=10)
153 if ev is None:
154 raise Exception("P2P-PROV-DISC-FAILURE timeout on seeker side")
155
156 if method == "100":
157 ev = advertiser.wait_global_event(["P2P-PROV-DISC-ENTER-PIN"],
158 timeout=10)
159 if ev is None:
160 raise Exception("P2P-PROV-DISC-ENTER-PIN timeout on advertiser side")
161 if addr0 not in ev:
162 raise Exception("Unknown peer " + addr0)
163 ev = seeker.wait_global_event(["P2P-PROV-DISC-SHOW-PIN"],
164 timeout=10)
165 if ev is None:
166 raise Exception("P2P-PROV-DISC-SHOW-PIN timeout on seeker side")
167 if addr1 not in ev:
168 raise Exception("Unknown peer " + addr1)
169 pin = ev.split()[2]
170 elif method == "8":
171 ev = advertiser.wait_global_event(["P2P-PROV-DISC-SHOW-PIN"],
172 timeout=10)
173 if ev is None:
174 raise Exception("P2P-PROV-DISC-SHOW-PIN timeout on advertiser side")
175 if addr0 not in ev:
176 raise Exception("Unknown peer " + addr0)
177 pin = ev.split()[2]
178
179 advertiser.asp_provision(peer, adv_id=advert_id, adv_mac=advert_mac,
180 session_id=int(session, 0),
181 session_mac=session_mac, status=12,
182 cpt=adv_cpt)
183
184 ev1 = seeker.wait_global_event(["P2PS-PROV-DONE"], timeout=10)
185 if ev1 is None:
186 raise Exception("P2PS-PROV-DONE timeout on seeker side")
187
188 ev2 = advertiser.wait_global_event(["P2PS-PROV-DONE"], timeout=10)
189 if ev2 is None:
190 raise Exception("P2PS-PROV-DONE timeout on advertiser side")
191
192 if method == "8":
193 ev = seeker.wait_global_event(["P2P-PROV-DISC-ENTER-PIN"],
194 timeout=10)
195 if ev is None:
196 raise Exception("P2P-PROV-DISC-ENTER-PIN failed on seeker side")
197 if addr1 not in ev:
198 raise Exception("Unknown peer " + addr1)
199
200 if pin is not None:
201 return ev1, ev2, pin
202 return ev1, ev2
203
204 # Auto-accept is true and the method is either P2PS or advertiser is DISPLAY
205 ev1 = seeker.wait_global_event(["P2PS-PROV-DONE"], timeout=10)
206 if ev1 is None:
207 raise Exception("P2PS-PROV-DONE timeout on seeker side")
208
209 ev2 = advertiser.wait_global_event(["P2PS-PROV-DONE"], timeout=10)
210 if ev2 is None:
211 raise Exception("P2PS-PROV-DONE timeout on advertiser side")
212
213 if method == "8":
214 ev = seeker.wait_global_event(["P2P-PROV-DISC-ENTER-PIN"], timeout=10)
215 if ev is None:
216 raise Exception("P2P-PROV-DISC-ENTER-PIN timeout on seeker side")
217 if addr1 not in ev:
218 raise Exception("Unknown peer " + addr1)
219 ev = advertiser.wait_global_event(["P2P-PROV-DISC-SHOW-PIN"],
220 timeout=10)
221 if ev is None:
222 raise Exception("P2P-PROV-DISC-SHOW-PIN timeout on advertiser side")
223 if addr0 not in ev:
224 raise Exception("Unknown peer " + addr0)
225 pin = ev.split()[2]
226 return ev1, ev2, pin
227
228 return ev1, ev2
229
230 def p2p_connect_p2ps_method(i_dev, r_dev, autoaccept):
231 """P2PS connect function with p2ps method"""
232 if autoaccept == False:
233 if "OK" not in i_dev.global_request("P2P_CONNECT " + r_dev.p2p_dev_addr() + " 12345670 p2ps persistent auth"):
234 raise Exception("P2P_CONNECT fails on seeker side")
235 ev0 = r_dev.wait_global_event(["P2PS-PROV-DONE"], timeout=10)
236 if ev0 is None:
237 raise Exception("P2PS-PROV-DONE timeout on Advertiser side")
238
239 if "OK" not in r_dev.global_request("P2P_CONNECT " + i_dev.p2p_dev_addr() + " 12345670 p2ps persistent"):
240 raise Exception("P2P_CONNECT fails on Advertiser side")
241
242 else:
243 if "OK" not in r_dev.global_request("P2P_CONNECT " + i_dev.p2p_dev_addr() + " 12345670 p2ps persistent auth"):
244 raise Exception("P2P_CONNECT fails on Advertiser side")
245 ev1 = i_dev.wait_global_event(["P2PS-PROV-DONE"], timeout=5)
246 if ev1 is None:
247 raise Exception("Failed to receive deferred acceptance at seeker")
248
249 if "OK" not in i_dev.global_request("P2P_CONNECT " + r_dev.p2p_dev_addr() + " 12345670 p2ps persistent"):
250 raise Exception("P2P_CONNECT fails on seeker side")
251 ev0 = r_dev.wait_global_event(["P2P-GO-NEG-SUCCESS"], timeout=10)
252 if ev0 is None:
253 raise Exception("GO Neg did not succeed")
254 ev0 = r_dev.wait_global_event(["P2P-GROUP-STARTED"], timeout=15)
255 if ev0 is None:
256 raise Exception("P2P-GROUP-STARTED timeout on advertiser side")
257 r_dev.group_form_result(ev0)
258
259 ev1 = i_dev.wait_global_event(["P2P-GROUP-STARTED"], timeout=5)
260 if ev1 is None:
261 raise Exception("P2P-GROUP-STARTED timeout on seeker side")
262 i_dev.group_form_result(ev1)
263
264 def p2ps_provision_keypad_method(i_dev, r_dev, autoaccept,
265 initiator_or_responder):
266 """P2PS keypad method provisioning function"""
267 if autoaccept == False and initiator_or_responder == 'initiator':
268 ev = i_dev.wait_global_event(["P2P-PROV-DISC-FAILURE"], timeout=10)
269 if ev is None:
270 raise Exception("Provisioning deferred on seeker side")
271 ev1 = i_dev.wait_global_event(["P2P-PROV-DISC-ENTER-PIN"], timeout=10)
272 if ev1 is None:
273 raise Exception("P2P-PROV-DISC-ENTER-PIN timeout on seeker side")
274 if r_dev.p2p_dev_addr() not in ev1:
275 raise Exception("Unknown peer ")
276 ev = r_dev.wait_global_event(["P2PS-PROV-START"], timeout=10)
277 if ev is None:
278 raise Exception("P2PS-PROV-START timeout on Advertiser side")
279
280 if autoaccept == False and initiator_or_responder == 'responder':
281 ev0 = r_dev.wait_global_event(["P2PS-PROV-DONE"], timeout=10)
282 if ev0 is None:
283 raise Exception("P2PS-PROV-DONE timeout on seeker side")
284 ev0 = r_dev.wait_global_event(["P2P-PROV-DISC-ENTER-PIN"], timeout=5)
285 if ev0 is None:
286 raise Exception("P2P-PROV-DISC-ENTER-PIN timeout on advertiser side")
287
288 if autoaccept == True and initiator_or_responder == 'initiator':
289 ev1 = i_dev.wait_global_event(["P2PS-PROV-DONE"], timeout=10)
290 if ev1 is None:
291 raise Exception("P2PS-PROV-DONE timeout on seeker side")
292 ev2 = i_dev.wait_global_event(["P2P-PROV-DISC-ENTER-PIN"], timeout=10)
293 if ev2 is None:
294 raise Exception("P2P-PROV-DISC-ENTER-PIN failed on seeker side")
295 if r_dev.p2p_dev_addr() not in ev2:
296 raise Exception("Unknown peer ")
297 return ev1
298
299 def p2ps_provision_display_method(i_dev, r_dev, autoaccept,
300 initiator_or_responder):
301 """P2PS display method provisioning function"""
302 if initiator_or_responder == 'initiator':
303 ev0 = r_dev.wait_global_event(["P2PS-PROV-START"], timeout=10)
304 if ev0 is None:
305 raise Exception("P2PS-PROV-START timeout on Advertiser side")
306 if autoaccept == False:
307 ev = i_dev.wait_global_event(["P2P-PROV-DISC-FAILURE"], timeout=10)
308 if ev is None:
309 raise Exception("Provisioning deferred on seeker side")
310 ev1 = i_dev.wait_global_event(["P2P-PROV-DISC-SHOW-PIN"], timeout=10)
311 if ev1 is None:
312 raise Exception("P2P-PROV-DISC-SHOW-PIN timeout on Seeker side")
313 if r_dev.p2p_dev_addr() not in ev1:
314 raise Exception("Unknown peer ")
315 pin = ev1.split(" ")[2]
316 else:
317 ev0 = r_dev.wait_global_event(["P2PS-PROV-DONE"], timeout=10)
318 if ev0 is None:
319 raise Exception("P2PS-PROV-DONE timeout on advertiser")
320 ev0 = r_dev.wait_global_event(["P2P-PROV-DISC-SHOW-PIN"], timeout=5)
321 if ev0 is None:
322 raise Exception("PIN Display on advertiser side")
323 pin = ev0.split(" ")[2]
324 return pin
325
326 def p2ps_connect_pin(pin, i_dev, r_dev, initiator_method):
327 """P2PS function to perform connection using PIN method"""
328 if initiator_method=="display":
329 if "OK" not in i_dev.global_request("P2P_CONNECT " + r_dev.p2p_dev_addr() + " " + pin + " display persistent "):
330 raise Exception("P2P_CONNECT fails on seeker side")
331 ev0 = r_dev.wait_global_event(["P2P-GO-NEG-REQUEST"], timeout=10)
332 if ev0 is None:
333 raise Exception("Failed to receive P2P_GO-NEG-REQUEST on responder side")
334 if "OK" not in r_dev.global_request("P2P_CONNECT " + i_dev.p2p_dev_addr() + " " + pin + " keypad persistent "):
335 raise Exception("P2P_CONNECT fails on Advertiser side")
336 else:
337 if "OK" not in i_dev.global_request("P2P_CONNECT " + r_dev.p2p_dev_addr() + " " + pin + " keypad persistent "):
338 raise Exception("P2P_CONNECT fails on seeker side")
339 ev0 = r_dev.wait_global_event(["P2P-GO-NEG-REQUEST"], timeout=10)
340 if ev0 is None:
341 raise Exception("Failed to receive P2P_GO-NEG-REQUEST on responder side")
342 if "OK" not in r_dev.global_request("P2P_CONNECT " + i_dev.p2p_dev_addr() + " " + pin + " display persistent "):
343 raise Exception("P2P_CONNECT fails on Advertiser side")
344
345 ev0 = r_dev.wait_global_event(["P2P-GO-NEG-SUCCESS"], timeout=10)
346 if ev0 is None:
347 raise Exception("GO Neg did not succeed on advertiser side")
348 peer_mac = ev0.split("peer_dev=")[1].split(" ")[0]
349
350 ev1 = i_dev.wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
351 if ev1 is None:
352 raise Exception("P2P-GROUP-STARTED timeout on seeker side")
353 i_dev.group_form_result(ev1)
354
355 ev_grpfrm = r_dev.wait_global_event(["P2P-GROUP-FORMATION-SUCCESS"],
356 timeout=10)
357 if ev_grpfrm is None:
358 raise Exception("Group Formation failed on advertiser side")
359
360 ev = r_dev.wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
361 if ev is None:
362 raise Exception("P2P-GROUP-STARTED timeout on advertiser side")
363 res = r_dev.group_form_result(ev)
364
365 if res['role'] == "GO":
366 ev_grpfrm = r_dev.wait_global_event(["AP-STA-CONNECTED"], timeout=10)
367 if ev_grpfrm is None:
368 raise Exception("AP-STA-CONNECTED timeout on advertiser side")
369 if i_dev.p2p_dev_addr() not in ev_grpfrm:
370 raise Exception("Group formed with unknown Peer")
371 else:
372 ev1 = i_dev.wait_global_event(["AP-STA-CONNECTED"], timeout=5)
373 if ev1 is None:
374 raise Exception("AP-STA-CONNECTED timeout on Seeker side")
375 if r_dev.p2p_dev_addr() not in ev1:
376 raise Exception("Group formed with unknown Peer")
377
378 def p2ps_connect_pd(dev0, dev1, ev0, ev1, pin=None):
379 conf_methods_map = {"8": "p2ps", "1": "display", "5": "keypad"}
380 peer0 = ev0.split()[1]
381 peer1 = ev1.split()[1]
382 status0, conncap0, adv_id0, adv_mac0, mac0, session0, dev_passwd_id0, go0, join0, feature_cap0, persist0 =\
383 p2ps_parse_event(ev0, "status", "conncap", "adv_id", "adv_mac", "mac", "session", "dev_passwd_id", "go", "join", "feature_cap", "persist")
384 status1, conncap1, adv_id1, adv_mac1, mac1, session1, dev_passwd_id1, go1, join1, feature_cap1, persist1 =\
385 p2ps_parse_event(ev1, "status", "conncap", "adv_id", "adv_mac", "mac", "session", "dev_passwd_id", "go", "join", "feature_cap", "persist")
386
387 if status0 != "0" and status0 != "12":
388 raise Exception("PD failed on " + dev0.p2p_dev_addr())
389
390 if status1 != "0" and status1 != "12":
391 raise Exception("PD failed on " + dev1.p2p_dev_addr())
392
393 if status0 == "12" and status1 == "12":
394 raise Exception("Both sides have status 12 which doesn't make sense")
395
396 if adv_id0 != adv_id1 or adv_id0 is None:
397 raise Exception("Adv. IDs don't match")
398
399 if adv_mac0 != adv_mac1 or adv_mac0 is None:
400 raise Exception("Adv. MACs don't match")
401
402 if session0 != session1 or session0 is None:
403 raise Exception("Session IDs don't match")
404
405 if mac0 != mac1 or mac0 is None:
406 raise Exception("Session MACs don't match")
407
408 #TODO: Validate feature capability
409
410 if bool(persist0) != bool(persist1):
411 raise Exception("Only one peer has persistent group")
412
413 if persist0 is None and not all([conncap0, conncap1, dev_passwd_id0,
414 dev_passwd_id1]):
415 raise Exception("Persistent group not used but conncap/dev_passwd_id are missing")
416
417 if persist0 is not None and any([conncap0, conncap1, dev_passwd_id0,
418 dev_passwd_id1]):
419 raise Exception("Persistent group is used but conncap/dev_passwd_id are present")
420
421 # Persistent Connection (todo: handle frequency)
422 if persist0 is not None:
423 if "OK" not in dev0.global_request("P2P_GROUP_ADD persistent=" + persist0 + " freq=2412"):
424 raise Exception("Could not re-start persistent group")
425 ev0 = dev0.wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
426 if ev0 is None:
427 raise Exception("P2P-GROUP-STARTED timeout on " + dev0.p2p_dev_addr())
428 dev0.group_form_result(ev0)
429
430 if "OK" not in dev1.global_request("P2P_GROUP_ADD persistent=" + persist1 + " freq=2412"):
431 raise Exception("Could not re-start persistent group")
432 ev1 = dev1.wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
433 if ev1 is None:
434 raise Exception("P2P-GROUP-STARTED timeout on " + dev1.p2p_dev_addr())
435 dev1.group_form_result(ev1)
436 if "GO" in ev0:
437 ev = dev0.wait_global_event(["AP-STA-CONNECTED"], timeout=10)
438 if ev is None:
439 raise Exception("AP-STA-CONNECTED timeout on " + dev0.p2p_dev_addr())
440 else:
441 ev = dev1.wait_global_event(["AP-STA-CONNECTED"], timeout=10)
442 if ev is None:
443 raise Exception("AP-STA-CONNECTED timeout on " + dev1.p2p_dev_addr())
444 else:
445 try:
446 method0 = conf_methods_map[dev_passwd_id0]
447 method1 = conf_methods_map[dev_passwd_id1]
448 except KeyError:
449 raise Exception("Unsupported method")
450
451 if method0 == "p2ps":
452 pin = "12345670"
453 if pin is None:
454 raise Exception("Pin is not provided")
455
456 if conncap0 == "1" and conncap1 == "1": # NEW/NEW - GON
457 if any([join0, join1, go0, go1]):
458 raise Exception("Unexpected join/go PD attributes")
459 dev0.p2p_listen()
460 if "OK" not in dev0.global_request("P2P_CONNECT " + peer0 + " " + pin + " " + method0 + " persistent auth"):
461 raise Exception("P2P_CONNECT fails on " + dev0.p2p_dev_addr())
462 if "OK" not in dev1.global_request("P2P_CONNECT " + peer1 + " " + pin + " " + method1 + " persistent"):
463 raise Exception("P2P_CONNECT fails on " + dev1.p2p_dev_addr())
464 ev = dev0.wait_global_event(["P2P-GO-NEG-SUCCESS"], timeout=10)
465 if ev is None:
466 raise Exception("GO Neg did not succeed on " + dev0.p2p_dev_addr())
467 ev = dev1.wait_global_event(["P2P-GO-NEG-SUCCESS"], timeout=10)
468 if ev is None:
469 raise Exception("GO Neg did not succeed on " + dev1.p2p_dev_addr())
470 ev = dev0.wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
471 if ev is None:
472 raise Exception("P2P-GROUP-STARTED timeout on " + dev0.p2p_dev_addr())
473 dev0.group_form_result(ev)
474 ev = dev1.wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
475 if ev is None:
476 raise Exception("P2P-GROUP-STARTED timeout on " + dev1.p2p_dev_addr())
477 dev1.group_form_result(ev)
478 else:
479 if conncap0 == "2" and conncap1 == "4": # dev0 CLI, dev1 GO
480 dev_cli, dev_go, go_if, join_address, go_method, cli_method = dev0, dev1, go1, join0, method1, method0
481 elif conncap0 == "4" and conncap1 == "2": # dev0 GO, dev1 CLI
482 dev_cli, dev_go, go_if, join_address, go_method, cli_method = dev1, dev0, go0, join1, method0, method1
483 else:
484 raise Exception("Bad connection capabilities")
485
486 if go_if is None:
487 raise Exception("Device " + dev_go.p2p_dev_addr() + " failed to become GO")
488 if join_address is None:
489 raise Exception("Device " + dev_cli.p2p_dev_addr() + " failed to become CLI")
490 ev = dev_go.wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
491 if ev is None:
492 raise Exception("P2P-GROUP-STARTED timeout on " + dev_go.p2p_dev_addr())
493 dev_go.group_form_result(ev)
494 if go_method != "p2ps":
495 ev = dev_go.group_request("WPS_PIN any " + pin)
496 if ev is None:
497 raise Exception("Failed to initiate pin authorization on registrar side")
498 if "OK" not in dev_cli.global_request("P2P_CONNECT " + join_address + " " + pin + " " + cli_method + " persistent join"):
499 raise Exception("P2P_CONNECT failed on " + dev_cli.p2p_dev_addr())
500 ev = dev_cli.wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
501 if ev is None:
502 raise Exception("P2P-GROUP-STARTED timeout on " + dev_cli.p2p_dev_addr())
503 dev_cli.group_form_result(ev)
504 ev = dev_go.wait_global_event(["AP-STA-CONNECTED"], timeout=10)
505 if ev is None:
506 raise Exception("AP-STA-CONNECTED timeout on " + dev_go.p2p_dev_addr())
507
508 hwsim_utils.test_connectivity_p2p(dev0, dev1)
509
510 def set_no_group_iface(dev, enable):
511 if enable:
512 res = dev.get_driver_status()
513 if (int(res['capa.flags'], 0) & 0x20000000):
514 raise HwsimSkip("P2P Device used. Cannot set enable no_group_iface")
515 dev.global_request("SET p2p_no_group_iface 1")
516 else:
517 dev.global_request("SET p2p_no_group_iface 0")
518
519 def test_p2ps_exact_search(dev):
520 """P2PS exact service request"""
521 p2ps_advertise(r_dev=dev[0], r_role='1', svc_name='org.wi-fi.wfds.send.rx',
522 srv_info='I can receive files upto size 2 GB')
523 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
524 svc_name='org.wi-fi.wfds.send.rx')
525
526 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
527 if ev0 is None:
528 raise Exception("Unable to remove the advertisement instance")
529
530 def test_p2ps_exact_search_srvinfo(dev):
531 """P2PS exact service request with service info"""
532 p2ps_advertise(r_dev=dev[0], r_role='0', svc_name='org.wi-fi.wfds.send.rx',
533 srv_info='I can receive files upto size 2 GB')
534 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
535 svc_name='org.wi-fi.wfds.send.rx',
536 srv_info='2 GB')
537
538 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
539 if ev0 is None:
540 raise Exception("Unable to remove the advertisement instance")
541
542 def test_p2ps_nonexact_search(dev):
543 """P2PS nonexact seek request"""
544 p2ps_advertise(r_dev=dev[0], r_role='0', svc_name='org.wi-fi.wfds.play.rx',
545 srv_info='I support Miracast Mode ')
546 ev_list = p2ps_nonexact_seek(i_dev=dev[1], r_dev=dev[0],
547 svc_name='org.wi-fi.wfds.play*')
548 adv_id = ev_list[0].split()[0]
549
550 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
551 if ev0 is None:
552 raise Exception("Unable to remove the advertisement instance")
553
554 def test_p2ps_nonexact_search_srvinfo(dev):
555 """P2PS nonexact seek request with service info"""
556 p2ps_advertise(r_dev=dev[0], r_role='0', svc_name='org.wi-fi.wfds.send.rx',
557 srv_info='I can receive files upto size 2 GB')
558 ev_list = p2ps_nonexact_seek(i_dev=dev[1], r_dev=dev[0],
559 svc_name='org.wi-fi.wfds.send*',
560 srv_info='2 GB')
561 adv_id = ev_list[0].split()[0]
562 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
563 if ev0 is None:
564 raise Exception("Unable to remove the advertisement instance")
565
566 def test_p2ps_connect_p2ps_method_nonautoaccept(dev):
567 """P2PS connect for non-auto-accept and P2PS config method"""
568 addr0 = dev[0].p2p_dev_addr()
569 addr1 = dev[1].p2p_dev_addr()
570 p2ps_advertise(r_dev=dev[0], r_role='0', svc_name='org.wi-fi.wfds.send.rx',
571 srv_info='I can receive files upto size 2 GB')
572 ev_list = p2ps_nonexact_seek(i_dev=dev[1], r_dev=dev[0],
573 svc_name='org.wi-fi.wfds.send*',
574 srv_info='2 GB')
575 adv_id = ev_list[0].split(" ")[0]
576 if "OK" not in dev[1].global_request("P2P_ASP_PROVISION " + addr0 + " adv_id=" + str(adv_id) + " adv_mac=" + addr0 + " session=1 session_mac=" + addr1 + " info='' method=1000"):
577 raise Exception("Failed to request provisioning on seeker")
578 ev0 = dev[0].wait_global_event(["P2PS-PROV-START"], timeout=10)
579 if ev0 is None:
580 raise Exception("P2PS-PROV-START timeout on advertiser side")
581 ev1 = dev[1].wait_global_event(["P2P-PROV-DISC-FAILURE"], timeout=15)
582 if ev1 is None:
583 raise Exception("Provisioning deferred timeout on seeker side")
584 dev[1].p2p_listen()
585 if "OK" not in dev[0].global_request("P2P_ASP_PROVISION_RESP " + addr1 + " adv_id=" + str(adv_id) + " adv_mac=" + addr0 + " session=1 session_mac=" + addr1 + " status=12"):
586 raise Exception("Failed to send deferred acceptance from advertizer")
587 ev1 = dev[1].wait_global_event(["P2PS-PROV-DONE"], timeout=15)
588 if ev1 is None:
589 raise Exception("Failed to receive deferred acceptance at seeker")
590
591 p2p_connect_p2ps_method(i_dev=dev[1], r_dev=dev[0], autoaccept=False)
592 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
593 if ev0 is None:
594 raise Exception("Unable to remove the advertisement instance")
595 remove_group(dev[0], dev[1])
596
597 def test_p2ps_connect_p2ps_method_autoaccept(dev):
598 """P2PS connection with P2PS default config method and auto-accept"""
599 addr0 = dev[0].p2p_dev_addr()
600 addr1 = dev[1].p2p_dev_addr()
601 p2ps_advertise(r_dev=dev[0], r_role='1', svc_name='org.wi-fi.wfds.send.rx',
602 srv_info='I can receive files upto size 2 GB')
603 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
604 svc_name='org.wi-fi.wfds.send.rx',
605 srv_info='2 GB')
606 if "OK" not in dev[1].global_request("P2P_ASP_PROVISION " + addr0 + " adv_id=" + str(adv_id) + " adv_mac=" + addr0 + " session=1 session_mac=" + addr1 + " info='' method=1000"):
607 raise Exception("P2P_ASP_PROVISION failed on seeker side")
608
609 ev0 = dev[0].wait_global_event(["P2PS-PROV-DONE"], timeout=10)
610 if ev0 is None:
611 raise Exception("P2PS-PROV-DONE timeout on advertiser side")
612
613 p2p_connect_p2ps_method(i_dev=dev[1], r_dev=dev[0], autoaccept=True)
614
615 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
616 if ev0 is None:
617 raise Exception("Unable to remove the advertisement instance")
618 remove_group(dev[0], dev[1])
619
620 def test_p2ps_connect_keypad_method_nonautoaccept(dev):
621 """P2PS Connection with non-auto-accept and seeker having keypad method"""
622 addr0 = dev[0].p2p_dev_addr()
623 addr1 = dev[1].p2p_dev_addr()
624 p2ps_advertise(r_dev=dev[0], r_role='0', svc_name='org.wi-fi.wfds.send.rx',
625 srv_info='I can receive files upto size 2 GB')
626 ev_list = p2ps_nonexact_seek(i_dev=dev[1], r_dev=dev[0],
627 svc_name='org.wi-fi.wfds.send*',
628 srv_info='2 GB')
629 adv_id = ev_list[0].split(" ")[0]
630 if "OK" not in dev[1].global_request("P2P_ASP_PROVISION " + addr0 + " adv_id=" + str(adv_id) + " adv_mac=" + addr0 + " session=1 session_mac=" + addr1 + " info='' method=8"): # keypad method on seeker side
631 raise Exception("Failed to request provisioning on seeker")
632 p2ps_provision_keypad_method(i_dev=dev[1], r_dev=dev[0], autoaccept=False,
633 initiator_or_responder='initiator')
634 dev[1].p2p_listen()
635
636 if "OK" not in dev[0].global_request("P2P_ASP_PROVISION_RESP " + addr1 + " adv_id=" + str(adv_id) + " adv_mac=" + addr0 + " session=1 session_mac=" + addr1 + " status=12"):
637 raise Exception("Failed to send deferred acceptance from advertizer")
638
639 pin = p2ps_provision_display_method(i_dev=dev[1], r_dev=dev[0],
640 autoaccept=False,
641 initiator_or_responder='responder')
642 p2ps_connect_pin(pin, i_dev=dev[0], r_dev=dev[1],
643 initiator_method="display")
644 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
645 if ev0 is None:
646 raise Exception("Unable to remove the advertisement instance")
647 remove_group(dev[0], dev[1])
648
649 def test_p2ps_connect_display_method_nonautoaccept(dev):
650 """P2PS connection with non-auto-accept and seeker having display method"""
651 addr0 = dev[0].p2p_dev_addr()
652 addr1 = dev[1].p2p_dev_addr()
653 p2ps_advertise(r_dev=dev[0], r_role='0', svc_name='org.wi-fi.wfds.send.rx',
654 srv_info='I can receive files upto size 2 GB')
655 ev_list = p2ps_nonexact_seek(i_dev=dev[1], r_dev=dev[0],
656 svc_name='org.wi-fi.wfds*', srv_info='2 GB')
657 adv_id = ev_list[0].split(" ")[0]
658 if "OK" not in dev[1].global_request("P2P_ASP_PROVISION " + addr0 + " adv_id=" + str(adv_id) + " adv_mac=" + addr0 + " session=1 session_mac=" + addr1 + " info='' method=100"): # keypad method on seeker side
659 raise Exception("Failed to request provisioning on seeker")
660 pin = p2ps_provision_display_method(i_dev=dev[1], r_dev=dev[0],
661 autoaccept=False,
662 initiator_or_responder='initiator')
663 dev[1].p2p_listen()
664
665 if "OK" not in dev[0].global_request("P2P_ASP_PROVISION_RESP " + addr1 + " adv_id=" + str(adv_id) + " adv_mac=" + addr0 + " session=1 session_mac=" + addr1 + " status=12"):
666 raise Exception("Failed to send deferred acceptance from advertiser")
667 p2ps_provision_keypad_method(i_dev=dev[1], r_dev=dev[0], autoaccept=False,
668 initiator_or_responder='responder')
669 p2ps_connect_pin(pin, i_dev=dev[0], r_dev=dev[1], initiator_method="keypad")
670
671 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
672 if ev0 is None:
673 raise Exception("Unable to remove the advertisement instance")
674 remove_group(dev[0], dev[1])
675
676 def test_p2ps_connect_keypad_method_autoaccept(dev):
677 """P2PS connection with auto-accept and keypad method on seeker side"""
678 addr0 = dev[0].p2p_dev_addr()
679 addr1 = dev[1].p2p_dev_addr()
680 p2ps_advertise(r_dev=dev[0], r_role='1', svc_name='org.wi-fi.wfds.send.rx',
681 srv_info='I can receive files upto size 2 GB')
682 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
683 svc_name='org.wi-fi.wfds.send.rx',
684 srv_info='2 GB')
685 if "OK" not in dev[1].global_request("P2P_ASP_PROVISION " + addr0 + " adv_id=" + str(adv_id) + " adv_mac=" + addr0 + " session=1 session_mac=" + addr1 + " info='' method=8"): # keypad method on seeker side
686 raise Exception("Failed to request provisioning on seeker")
687
688 p2ps_provision_keypad_method(i_dev=dev[1], r_dev=dev[0], autoaccept=True,
689 initiator_or_responder='initiator')
690 pin = p2ps_provision_display_method(i_dev=dev[1], r_dev=dev[0],
691 autoaccept=True,
692 initiator_or_responder='responder')
693 p2ps_connect_pin(pin, i_dev=dev[1], r_dev=dev[0], initiator_method="Keypad")
694 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
695 if ev0 is None:
696 raise Exception("Unable to remove the advertisement instance")
697 remove_group(dev[0], dev[1])
698
699 def test_p2ps_connect_display_method_autoaccept(dev):
700 """P2PS connection with auto-accept and display method on seeker side"""
701 addr0 = dev[0].p2p_dev_addr()
702 addr1 = dev[1].p2p_dev_addr()
703 p2ps_advertise(r_dev=dev[0], r_role='1', svc_name='org.wi-fi.wfds.send.rx',
704 srv_info='I can receive files upto size 2 GB')
705 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
706 svc_name='org.wi-fi.wfds.send.rx',
707 srv_info='2 GB')
708 if "OK" not in dev[1].global_request("P2P_ASP_PROVISION " + addr0 + " adv_id=" + str(adv_id) + " adv_mac=" + addr0 + " session=1 session_mac=" + addr1 + " info='' method=100"): # display method on seeker side
709 raise Exception("Failed to request provisioning on seeker")
710
711 pin = p2ps_provision_display_method(i_dev=dev[1], r_dev=dev[0],
712 autoaccept=True,
713 initiator_or_responder='initiator')
714 dev[1].p2p_listen()
715
716 p2ps_connect_pin(pin, i_dev=dev[1], r_dev=dev[0], initiator_method="display")
717 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
718 if ev0 is None:
719 raise Exception("Unable to remove the advertisement instance")
720 remove_group(dev[0], dev[1])
721
722 def test_p2ps_connect_adv_go_p2ps_method(dev):
723 """P2PS auto-accept connection with advertisement as GO and P2PS method"""
724 addr0 = dev[0].p2p_dev_addr()
725 addr1 = dev[1].p2p_dev_addr()
726 p2ps_advertise(r_dev=dev[0], r_role='4', svc_name='org.wi-fi.wfds.send.rx',
727 srv_info='I can receive files upto size 2 GB')
728 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
729 svc_name='org.wi-fi.wfds.send.rx',
730 srv_info='2 GB')
731 if "OK" not in dev[1].global_request("P2P_ASP_PROVISION " + addr0 + " adv_id=" + str(adv_id) + " adv_mac=" + addr0 + " session=1 session_mac=" + addr1 + " info='' method=1000"):
732 raise Exception("Failed to request provisioning on seeker")
733
734 ev0 = dev[0].wait_global_event(["P2PS-PROV-DONE"], timeout=10)
735 if ev0 is None:
736 raise Exception("Timed out while waiting for prov done on advertizer")
737 if "go=" not in ev0:
738 raise Exception("Advertiser failed to become GO")
739
740 adv_conncap = ev0.split("conncap=")[1].split(" ")[0]
741 if adv_conncap == "4":
742 logger.info("Advertiser is GO")
743 ev0 = dev[0].wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
744 if ev0 is None:
745 raise Exception("P2P-GROUP-STARTED timeout on advertiser side")
746 dev[0].group_form_result(ev0)
747
748 ev1 = dev[1].wait_global_event(["P2PS-PROV-DONE"], timeout=10)
749 if ev1 is None:
750 raise Exception("P2PS-PROV-DONE timeout on seeker side")
751
752 seeker_conncap = ev1.split("conncap=")[1].split(" ")[0]
753
754 if "join=" in ev1:
755 if "OK" not in dev[1].global_request("P2P_CONNECT " + addr0 + " 12345670 p2ps persistent join"):
756 raise Exception("P2P_CONNECT failed on seeker side")
757 ev1 = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=15)
758 if ev1 is None:
759 raise Exception("P2P-GROUP-STARTED timeout on seeker side")
760 dev[1].group_form_result(ev1)
761
762 ev0 = dev[0].wait_global_event(["AP-STA-CONNECTED"], timeout=5)
763 if ev0 is None:
764 raise Exception("AP-STA-CONNECTED timeout on advertiser side")
765 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
766 if ev0 is None:
767 raise Exception("Unable to remove the advertisement instance")
768 remove_group(dev[0], dev[1])
769
770 def test_p2ps_connect_adv_client_p2ps_method(dev):
771 """P2PS auto-accept connection with advertisement as Client and P2PS method"""
772 addr0 = dev[0].p2p_dev_addr()
773 addr1 = dev[1].p2p_dev_addr()
774 p2ps_advertise(r_dev=dev[0], r_role='2', svc_name='org.wi-fi.wfds.send.rx',
775 srv_info='I can receive files upto size 2 GB')
776 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
777 svc_name='org.wi-fi.wfds.send.rx',
778 srv_info='2 GB')
779 if "OK" not in dev[1].global_request("P2P_ASP_PROVISION " + addr0 + " adv_id=" + str(adv_id) + " adv_mac=" + addr0 + " session=1 session_mac=" + addr1 + " info='' method=1000"):
780 raise Exception("Failed to request provisioning on seeker")
781
782 ev0 = dev[0].wait_global_event(["P2PS-PROV-DONE"], timeout=10)
783 if ev0 is None:
784 raise Exception("P2PS-PROV-DONE timeout on advertiser side")
785 if "join=" not in ev0:
786 raise Exception("Advertiser failed to become Client")
787
788 adv_conncap = ev0.split("conncap=")[1].split(" ")[0]
789 if adv_conncap == "2":
790 logger.info("Advertiser is Client")
791
792 ev1 = dev[1].wait_global_event(["P2PS-PROV-DONE"], timeout=5)
793 if ev1 is None:
794 raise Exception("Provisioning failed on seeker side")
795
796 seeker_conncap = ev1.split("conncap=")[1].split(" ")[0]
797 ev1 = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
798 if ev1 is None:
799 raise Exception("P2P-GROUP-STARTED timeout on seeker side")
800 dev[1].group_form_result(ev1)
801
802 if "join=" in ev0:
803 if "OK" not in dev[0].global_request("P2P_CONNECT " + addr1 + " 12345670 p2ps persistent join"):
804 raise Exception("P2P_CONNECT failed on seeker side")
805
806 ev0 = dev[0].wait_global_event(["P2P-GROUP-FORMATION-SUCCESS"], timeout=15)
807 if ev0 is None:
808 raise Exception("P2P Group Formation failed on advertiser side")
809
810 ev0 = dev[0].wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
811 if ev0 is None:
812 raise Exception("P2P-GROUP-STARTED timeout on advertiser side")
813 dev[0].group_form_result(ev0)
814
815 ev1 = dev[1].wait_global_event(["AP-STA-CONNECTED"], timeout=5)
816 if ev1 is None:
817 raise Exception("Group formation failed")
818 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
819 if ev0 is None:
820 raise Exception("Unable to remove the advertisement instance")
821 remove_group(dev[0], dev[1])
822
823 def p2ps_connect_adv_go_pin_method(dev, keep_group=False):
824 addr0 = dev[0].p2p_dev_addr()
825 addr1 = dev[1].p2p_dev_addr()
826 p2ps_advertise(r_dev=dev[0], r_role='4', svc_name='org.wi-fi.wfds.send.rx',
827 srv_info='I can receive files upto size 2 GB')
828 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
829 svc_name='org.wi-fi.wfds.send.rx',
830 srv_info='2 GB')
831 if "OK" not in dev[1].global_request("P2P_ASP_PROVISION " + addr0 + " adv_id=" + str(adv_id) + " adv_mac=" + addr0 + " session=1 session_mac=" + addr1 + " info='' method=8"): # keypad method on seeker side
832 raise Exception("Failed to request provisioning on seeker")
833
834 seek_prov_ev = p2ps_provision_keypad_method(i_dev=dev[1], r_dev=dev[0],
835 autoaccept=True,
836 initiator_or_responder='initiator')
837
838 ev0 = dev[0].wait_global_event(["P2PS-PROV-DONE"], timeout=10)
839 if ev0 is None:
840 raise Exception("P2PS-PROV-DONE timeout on advertier side")
841 adv_conncap = ev0.split("conncap=")[1].split(" ")[0]
842 if adv_conncap == "4":
843 logger.info("Advertiser is GO")
844 ev0 = dev[0].wait_global_event(["P2P-PROV-DISC-SHOW-PIN"], timeout=5)
845 if ev0 is None:
846 raise Exception("PIN Display on advertiser side")
847 pin = ev0.split(" ")[2]
848
849 ev0 = dev[0].wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
850 if ev0 is None:
851 raise Exception("P2P-GROUP-STARTED timeout on advertiser side")
852 dev[0].group_form_result(ev0)
853
854 ev0 = dev[0].group_request("WPS_PIN any " + pin)
855 if ev0 is None:
856 raise Exception("Failed to initiate Pin authorization on registrar side")
857 if "join=" in seek_prov_ev:
858 if "OK" not in dev[1].global_request("P2P_CONNECT " + addr0 + " " + pin + " keypad persistent join"):
859 raise Exception("P2P_CONNECT failed on seeker side")
860 ev1 = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
861 if ev1 is None:
862 raise Exception("P2P-GROUP-STARTED timeout on seeker side")
863 dev[1].group_form_result(ev1)
864
865 ev0 = dev[0].wait_global_event(["AP-STA-CONNECTED"], timeout=10)
866 if ev0 is None:
867 raise Exception("AP-STA-CONNECTED timeout on advertiser side")
868
869 if not keep_group:
870 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
871 if ev0 is None:
872 raise Exception("Unable to remove the advertisement instance")
873 remove_group(dev[0], dev[1])
874
875 def test_p2ps_connect_adv_go_pin_method(dev):
876 """P2PS advertiser as GO with keypad config method on seeker side and auto-accept"""
877 p2ps_connect_adv_go_pin_method(dev)
878
879 def test_p2ps_connect_adv_client_pin_method(dev):
880 """P2PS advertiser as client with keypad config method on seeker side and auto-accept"""
881 addr0 = dev[0].p2p_dev_addr()
882 addr1 = dev[1].p2p_dev_addr()
883 dev[0].flush_scan_cache()
884 p2ps_advertise(r_dev=dev[0], r_role='2', svc_name='org.wi-fi.wfds.send.rx',
885 srv_info='I can receive files upto size 2 GB')
886 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
887 svc_name='org.wi-fi.wfds.send.rx',
888 srv_info='2 GB')
889 if "OK" not in dev[1].global_request("P2P_ASP_PROVISION " + addr0 + " adv_id=" + str(adv_id) + " adv_mac=" + addr0 + " session=1 session_mac=" + addr1 + " info='' method=8"): # keypad method on seeker side
890 raise Exception("Failed to request provisioning on seeker")
891
892 seek_prov_ev = p2ps_provision_keypad_method(i_dev=dev[1], r_dev=dev[0],
893 autoaccept=True,
894 initiator_or_responder='initiator')
895
896 adv_prov = dev[0].wait_global_event(["P2PS-PROV-DONE"], timeout=10)
897 if adv_prov is None:
898 raise Exception("Prov failed on advertiser")
899 adv_conncap = adv_prov.split("conncap=")[1].split(" ")[0]
900 if adv_conncap == "2":
901 logger.info("Advertiser is Client")
902 adv_pin_show_event = dev[0].wait_global_event(["P2P-PROV-DISC-SHOW-PIN"],
903 timeout=5)
904 if adv_pin_show_event is None:
905 raise Exception("PIN Display on advertiser side")
906 pin = adv_pin_show_event.split(" ")[2]
907
908 ev1 = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
909 if ev1 is None:
910 raise Exception("P2P-GROUP-STARTED timeout on seeker side")
911 dev[1].group_form_result(ev1)
912
913 ev1 = dev[1].group_request("WPS_PIN any " + pin)
914 if ev1 is None:
915 raise Exception("Failed to initiate Pin authorization on registrar side")
916
917 if "join=" in adv_prov:
918 if "OK" not in dev[0].global_request("P2P_CONNECT " + addr1 + " " + pin + " display persistent join"):
919 raise Exception("P2P_CONNECT failed on advertiser side")
920 ev0 = dev[0].wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
921 if ev0 is None:
922 raise Exception("Group formation failed to start on seeker side")
923 dev[0].group_form_result(ev0)
924
925 ev1 = dev[1].wait_global_event(["AP-STA-CONNECTED"], timeout=10)
926 if ev1 is None:
927 raise Exception("AP-STA-CONNECTED timeout on advertiser side")
928 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
929 if ev0 is None:
930 raise Exception("Unable to remove the advertisement instance")
931 remove_group(dev[0], dev[1])
932
933 def test_p2ps_service_discovery_multiple_queries(dev):
934 """P2P service discovery with multiple queries"""
935 addr0 = dev[0].p2p_dev_addr()
936 addr1 = dev[1].p2p_dev_addr()
937 adv_id1 = p2ps_advertise(r_dev=dev[0], r_role='0',
938 svc_name='org.wi-fi.wfds.send.tx',
939 srv_info='I can transfer files upto size of 2 GB')
940 adv_id2 = p2ps_advertise(r_dev=dev[0], r_role='0',
941 svc_name='org.wi-fi.wfds.send.rx',
942 srv_info='I can receive files upto size of 2 GB')
943 adv_id3 = p2ps_advertise(r_dev=dev[0], r_role='1',
944 svc_name='org.wi-fi.wfds.display.tx',
945 srv_info='Miracast Mode')
946 adv_id4 = p2ps_advertise(r_dev=dev[0], r_role='1',
947 svc_name='org.wi-fi.wfds.display.rx',
948 srv_info='Miracast Mode')
949
950 dev[1].global_request("P2P_SERV_DISC_REQ " + addr0 + " asp 1 org.wi-fi.wfds.display.tx 'Miracast Mode'")
951 dev[1].global_request("P2P_FIND 10 type=social seek=org.wi-fi.wfds.display.tx")
952 dev[1].global_request("P2P_SERV_DISC_REQ " + addr0 + " asp 2 org.wi-fi.wfds.send* 'size of 2 GB'")
953 dev[1].p2p_stop_find()
954 dev[1].global_request("P2P_FIND 10 type=social seek=")
955 ev = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
956 if ev is None:
957 raise Exception("P2P Device Found timed out")
958 if addr0 not in ev:
959 raise Exception("Unexpected service discovery request source")
960 ev_list = []
961 for i in range(0, 3):
962 ev = dev[1].wait_global_event(["P2P-SERV-ASP-RESP"], timeout=10)
963 if ev is None:
964 raise Exception("P2P Service discovery timed out")
965 if addr0 in ev:
966 ev_list.append(ev)
967 if len(ev_list) == 3:
968 break
969 dev[1].p2p_stop_find()
970
971 for test in [ ("seek=org.wi-fi.wfds.display.TX",
972 "asp_svc=org.wi-fi.wfds.display.tx"),
973 ("seek=foo seek=org.wi-fi.wfds.display.tx seek=bar",
974 "asp_svc=org.wi-fi.wfds.display.tx"),
975 ("seek=1 seek=2 seek=3 seek=org.wi-fi.wfds.display.tx seek=4 seek=5 seek=6",
976 "asp_svc=org.wi-fi.wfds.display.tx"),
977 ("seek=not-found", None),
978 ("seek=org.wi-fi.wfds", "asp_svc=org.wi-fi.wfds")]:
979 dev[2].global_request("P2P_FIND 10 type=social " + test[0])
980 if test[1] is None:
981 ev = dev[2].wait_global_event(["P2P-DEVICE-FOUND"], timeout=1)
982 if ev is not None:
983 raise Exception("Unexpected device found: " + ev)
984 continue
985 ev = dev[2].wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
986 if ev is None:
987 raise Exception("P2P device discovery timed out (dev2)")
988 if test[1] not in ev:
989 raise Exception("Expected asp_svc not reported: " + ev)
990 dev[2].p2p_stop_find()
991 dev[2].request("P2P_FLUSH")
992
993 dev[0].p2p_stop_find()
994
995 ev1 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id1))
996 if ev1 is None:
997 raise Exception("Unable to remove the advertisement instance")
998 ev2 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id2))
999 if ev2 is None:
1000 raise Exception("Unable to remove the advertisement instance")
1001 ev3 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id3))
1002 if ev3 is None:
1003 raise Exception("Unable to remove the advertisement instance")
1004 ev4 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id4))
1005 if ev4 is None:
1006 raise Exception("Unable to remove the advertisement instance")
1007
1008 if "OK" not in dev[0].global_request("P2P_SERVICE_ADD asp 1 12345678 1 1108 org.wi-fi.wfds.foobar svc_info='Test'"):
1009 raise Exception("P2P_SERVICE_ADD failed")
1010 if "OK" not in dev[0].global_request("P2P_SERVICE_DEL asp all"):
1011 raise Exception("P2P_SERVICE_DEL asp all failed")
1012 if "OK" not in dev[0].global_request("P2P_SERVICE_ADD asp 1 12345678 1 1108 org.wi-fi.wfds.foobar svc_info='Test'"):
1013 raise Exception("P2P_SERVICE_ADD failed")
1014 if "OK" not in dev[0].global_request("P2P_SERVICE_REP asp 1 12345678 1 1108 org.wi-fi.wfds.foobar svc_info='Test'"):
1015 raise Exception("P2P_SERVICE_REP failed")
1016 if "FAIL" not in dev[0].global_request("P2P_SERVICE_REP asp 1 12345678 1 1108 org.wi-fi.wfds.Foo svc_info='Test'"):
1017 raise Exception("Invalid P2P_SERVICE_REP accepted")
1018 if "OK" not in dev[0].global_request("P2P_SERVICE_ADD asp 1 a2345678 1 1108 org.wi-fi.wfds.something svc_info='Test'"):
1019 raise Exception("P2P_SERVICE_ADD failed")
1020 if "OK" not in dev[0].global_request("P2P_SERVICE_ADD asp 1 a2345679 1 1108 org.wi-fi.wfds.Foo svc_info='Test'"):
1021 raise Exception("P2P_SERVICE_ADD failed")
1022
1023 def get_ifnames():
1024 with open('/proc/net/dev', 'r') as f:
1025 data = f.read()
1026 ifnames = []
1027 for line in data.splitlines():
1028 ifname = line.strip().split(' ')[0]
1029 if ':' not in ifname:
1030 continue
1031 ifname = ifname.split(':')[0]
1032 ifnames.append(ifname)
1033 return ifnames
1034
1035 def p2ps_connect_p2ps_method(dev, keep_group=False):
1036 addr0 = dev[0].p2p_dev_addr()
1037 addr1 = dev[1].p2p_dev_addr()
1038 dev[0].flush_scan_cache()
1039 dev[1].flush_scan_cache()
1040 p2ps_advertise(r_dev=dev[0], r_role='2', svc_name='org.wi-fi.wfds.send.rx',
1041 srv_info='I can receive files upto size 2 GB')
1042 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
1043 svc_name='org.wi-fi.wfds.send.rx',
1044 srv_info='2 GB')
1045 if "OK" not in dev[1].global_request("P2P_ASP_PROVISION " + addr0 + " adv_id=" + str(adv_id) + " adv_mac=" + addr0 + " session=1 session_mac=" + addr1 + " info='test-session-info-data' method=1000"):
1046 raise Exception("Failed to request provisioning on seeker")
1047
1048 ev0 = dev[0].wait_global_event(["P2PS-PROV-DONE"], timeout=10)
1049 if ev0 is None:
1050 raise Exception("P2PS-PROV-DONE timeout on advertiser side")
1051 if "join=" not in ev0:
1052 raise Exception("join parameter missing from P2PS-PROV-DONE")
1053
1054 ev1 = dev[1].wait_global_event(["P2PS-PROV-DONE"], timeout=5)
1055 if ev1 is None:
1056 raise Exception("Provisioning failed on seeker side")
1057
1058 ev1 = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=15)
1059 if ev1 is None:
1060 raise Exception("P2P-GROUP-STARTED timeout on seeker side")
1061 res1 = dev[1].group_form_result(ev1)
1062 ifnames = get_ifnames()
1063
1064 if "OK" not in dev[0].global_request("P2P_CONNECT " + addr1 + " 12345670 p2ps persistent join"):
1065 raise Exception("P2P_CONNECT failed on seeker side")
1066
1067 ev0 = dev[0].wait_global_event(["P2P-GROUP-STARTED"], timeout=15)
1068 if ev0 is None:
1069 raise Exception("P2P-GROUP-STARTED timeout on advertiser side")
1070 res0 = dev[0].group_form_result(ev0)
1071
1072 ev1 = dev[1].wait_global_event(["AP-STA-CONNECTED"], timeout=5)
1073 if ev1 is None:
1074 raise Exception("Group formation failed")
1075
1076 if not keep_group:
1077 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
1078 if ev0 is None:
1079 raise Exception("Unable to remove the advertisement instance")
1080 ifnames = ifnames + get_ifnames()
1081 remove_group(dev[0], dev[1])
1082 ifnames = ifnames + get_ifnames()
1083
1084 return (res0, res1, ifnames)
1085
1086 def has_string_prefix(vals, prefix):
1087 for val in vals:
1088 if val.startswith(prefix):
1089 return True
1090 return False
1091
1092 def test_p2ps_connect_p2ps_method_1(dev):
1093 """P2PS connection with P2PS method - no group interface"""
1094 set_no_group_iface(dev[0], 1)
1095 set_no_group_iface(dev[1], 1)
1096
1097 (res0, res1, ifnames) = p2ps_connect_p2ps_method(dev)
1098 if res0['ifname'] != dev[0].ifname:
1099 raise Exception("unexpected dev0 group ifname: " + res0['ifname'])
1100 if res1['ifname'] != dev[1].ifname:
1101 raise Exception("unexpected dev1 group ifname: " + res1['ifname'])
1102 if has_string_prefix(ifnames, 'p2p-' + res0['ifname']):
1103 raise Exception("dev0 group interface unexpectedly present")
1104 if has_string_prefix(ifnames, 'p2p-' + res1['ifname']):
1105 raise Exception("dev1 group interface unexpectedly present")
1106
1107 def test_p2ps_connect_p2ps_method_2(dev):
1108 """P2PS connection with P2PS method - group interface on dev0"""
1109 set_no_group_iface(dev[0], 0)
1110 set_no_group_iface(dev[1], 1)
1111
1112 (res0, res1, ifnames) = p2ps_connect_p2ps_method(dev)
1113 if not res0['ifname'].startswith('p2p-' + dev[0].ifname + '-'):
1114 raise Exception("unexpected dev0 group ifname: " + res0['ifname'])
1115 if res1['ifname'] != dev[1].ifname:
1116 raise Exception("unexpected dev1 group ifname: " + res1['ifname'])
1117 if has_string_prefix(ifnames, 'p2p-' + res0['ifname']):
1118 raise Exception("dev0 group interface unexpectedly present")
1119
1120 def test_p2ps_connect_p2ps_method_3(dev):
1121 """P2PS connection with P2PS method - group interface on dev1"""
1122 set_no_group_iface(dev[0], 1)
1123 set_no_group_iface(dev[1], 0)
1124
1125 (res0, res1, ifnames) = p2ps_connect_p2ps_method(dev)
1126 if res0['ifname'] != dev[0].ifname:
1127 raise Exception("unexpected dev0 group ifname: " + res0['ifname'])
1128 if not res1['ifname'].startswith('p2p-' + dev[1].ifname + '-'):
1129 raise Exception("unexpected dev1 group ifname: " + res1['ifname'])
1130 if has_string_prefix(ifnames, 'p2p-' + res0['ifname']):
1131 raise Exception("dev0 group interface unexpectedly present")
1132
1133 def test_p2ps_connect_p2ps_method_4(dev):
1134 """P2PS connection with P2PS method - group interface on both"""
1135 set_no_group_iface(dev[0], 0)
1136 set_no_group_iface(dev[1], 0)
1137
1138 (res0, res1, ifnames) = p2ps_connect_p2ps_method(dev)
1139 if not res0['ifname'].startswith('p2p-' + dev[0].ifname + '-'):
1140 raise Exception("unexpected dev0 group ifname: " + res0['ifname'])
1141 if not res1['ifname'].startswith('p2p-' + dev[1].ifname + '-'):
1142 raise Exception("unexpected dev1 group ifname: " + res1['ifname'])
1143
1144 def test_p2ps_connect_adv_go_persistent(dev):
1145 """P2PS auto-accept connection with advertisement as GO and having persistent group"""
1146 addr0 = dev[0].p2p_dev_addr()
1147 addr1 = dev[1].p2p_dev_addr()
1148
1149 go_neg_pin_authorized_persistent(i_dev=dev[0], i_intent=15,
1150 r_dev=dev[1], r_intent=0)
1151 dev[0].remove_group()
1152 dev[1].wait_go_ending_session()
1153
1154 p2ps_advertise(r_dev=dev[0], r_role='4', svc_name='org.wi-fi.wfds.send.rx',
1155 srv_info='I can receive files upto size 2 GB')
1156 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[1], r_dev=dev[0],
1157 svc_name='org.wi-fi.wfds.send.rx',
1158 srv_info='2 GB')
1159 if "OK" not in dev[1].global_request("P2P_ASP_PROVISION " + addr0 + " adv_id=" + str(adv_id) + " adv_mac=" + addr0 + " session=1 session_mac=" + addr1 + " info='' method=1000"):
1160 raise Exception("Failed to request provisioning on seeker")
1161
1162 ev0 = dev[0].wait_global_event(["P2PS-PROV-DONE"], timeout=10)
1163 if ev0 is None:
1164 raise Exception("Timed out while waiting for prov done on advertizer")
1165 if "persist=" not in ev0:
1166 raise Exception("Advertiser did not indicate persistent group")
1167 id0 = ev0.split("persist=")[1].split(" ")[0]
1168 if "OK" not in dev[0].global_request("P2P_GROUP_ADD persistent=" + id0 + " freq=2412"):
1169 raise Exception("Could not re-start persistent group")
1170
1171 ev0 = dev[0].wait_global_event(["P2P-GROUP-STARTED"], timeout=10)
1172 if ev0 is None:
1173 raise Exception("P2P-GROUP-STARTED timeout on advertiser side")
1174 dev[0].group_form_result(ev0)
1175
1176 ev1 = dev[1].wait_global_event(["P2PS-PROV-DONE"], timeout=10)
1177 if ev1 is None:
1178 raise Exception("P2PS-PROV-DONE timeout on seeker side")
1179
1180 if "persist=" not in ev1:
1181 raise Exception("Seeker did not indicate persistent group")
1182 id1 = ev1.split("persist=")[1].split(" ")[0]
1183 if "OK" not in dev[1].global_request("P2P_GROUP_ADD persistent=" + id1 + " freq=2412"):
1184 raise Exception("Could not re-start persistent group")
1185
1186 ev1 = dev[1].wait_global_event(["P2P-GROUP-STARTED"], timeout=15)
1187 if ev1 is None:
1188 raise Exception("P2P-GROUP-STARTED timeout on seeker side")
1189 dev[1].group_form_result(ev1)
1190
1191 ev0 = dev[0].wait_global_event(["AP-STA-CONNECTED"], timeout=15)
1192 if ev0 is None:
1193 raise Exception("AP-STA-CONNECTED timeout on advertiser side")
1194 ev0 = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
1195 if ev0 is None:
1196 raise Exception("Unable to remove the advertisement instance")
1197 remove_group(dev[0], dev[1])
1198
1199 def test_p2ps_client_probe(dev):
1200 """P2PS CLI discoverability on operating channel"""
1201 cli_probe = dev[0].global_request("SET p2p_cli_probe 1")
1202 p2ps_connect_p2ps_method(dev, keep_group=True)
1203 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[2], r_dev=dev[0],
1204 svc_name='org.wi-fi.wfds.send.rx',
1205 single_peer_expected=False)
1206 dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
1207 remove_group(dev[0], dev[1])
1208
1209 def test_p2ps_go_probe(dev):
1210 """P2PS GO discoverability on operating channel"""
1211 p2ps_connect_adv_go_pin_method(dev, keep_group=True)
1212 [adv_id, rcvd_svc_name] = p2ps_exact_seek(i_dev=dev[2], r_dev=dev[0],
1213 svc_name='org.wi-fi.wfds.send.rx',
1214 single_peer_expected=False)
1215 dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
1216 remove_group(dev[0], dev[1])
1217
1218 def test_p2ps_wildcard_p2ps(dev):
1219 """P2PS wildcard SD Probe Request/Response"""
1220 p2ps_wildcard = "org.wi-fi.wfds"
1221
1222 adv_id = p2ps_advertise(r_dev=dev[0], r_role='1',
1223 svc_name='org.foo.service',
1224 srv_info='I can do stuff')
1225 adv_id2 = p2ps_advertise(r_dev=dev[0], r_role='1',
1226 svc_name='org.wi-fi.wfds.send.rx',
1227 srv_info='I can receive files upto size 2 GB')
1228
1229 if "OK" not in dev[1].global_request("P2P_FIND 10 type=social seek=org.foo.service seek=" + p2ps_wildcard):
1230 raise Exception("Failed on P2P_FIND command")
1231
1232 ev1 = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
1233 if ev1 is None:
1234 raise Exception("P2P-DEVICE-FOUND timeout on seeker side")
1235 if dev[0].p2p_dev_addr() not in ev1:
1236 raise Exception("Unexpected peer")
1237
1238 ev2 = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
1239 if ev2 is None:
1240 raise Exception("P2P-DEVICE-FOUND timeout on seeker side (2)")
1241 if dev[0].p2p_dev_addr() not in ev2:
1242 raise Exception("Unexpected peer (2)")
1243
1244 if p2ps_wildcard not in ev1 + ev2:
1245 raise Exception("P2PS Wildcard name not found in P2P-DEVICE-FOUND event")
1246 if "org.foo.service" not in ev1 + ev2:
1247 raise Exception("Vendor specific service name not found in P2P-DEVICE-FOUND event")
1248
1249 if "OK" not in dev[1].global_request("P2P_STOP_FIND"):
1250 raise Exception("P2P_STOP_FIND failed")
1251 dev[1].dump_monitor()
1252
1253 res = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id))
1254 if res is None:
1255 raise Exception("Unable to remove the advertisement instance")
1256
1257 if "OK" not in dev[1].global_request("P2P_FIND 10 type=social seek=" + p2ps_wildcard):
1258 raise Exception("Failed on P2P_FIND command")
1259
1260 ev1 = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
1261 if ev1 is None:
1262 raise Exception("P2P-DEVICE-FOUND timeout on seeker side")
1263 if dev[0].p2p_dev_addr() not in ev1:
1264 raise Exception("Unexpected peer")
1265 if p2ps_wildcard not in ev1:
1266 raise Exception("P2PS Wildcard name not found in P2P-DEVICE-FOUND event (2)")
1267 dev[1].dump_monitor()
1268
1269 res = dev[0].global_request("P2P_SERVICE_DEL asp " + str(adv_id2))
1270 if res is None:
1271 raise Exception("Unable to remove the advertisement instance 2")
1272
1273 if "OK" not in dev[1].global_request("P2P_FIND 10 type=social seek=" + p2ps_wildcard):
1274 raise Exception("Failed on P2P_FIND command")
1275
1276 ev1 = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=2)
1277 if ev1 is not None:
1278 raise Exception("Unexpected P2P-DEVICE-FOUND event on seeker side")
1279 dev[1].p2p_stop_find()
1280 dev[1].dump_monitor()
1281
1282 def test_p2ps_many_services_in_probe(dev):
1283 """P2PS with large number of services in Probe Request/Response"""
1284 long1 = 'org.example.0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.a'
1285 long2 = 'org.example.0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.b'
1286 long3 = 'org.example.0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.c'
1287 long4 = 'org.example.0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.d'
1288 long5 = 'org.example.0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.e'
1289 for name in [ long1, long2, long3, long4, long5 ]:
1290 p2ps_advertise(r_dev=dev[0], r_role='1',
1291 svc_name=name,
1292 srv_info='I can do stuff')
1293
1294 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)):
1295 raise Exception("Failed on P2P_FIND command")
1296
1297 events = ""
1298 # Note: Require only four events since all the services do not fit within
1299 # the length limit.
1300 for i in range(4):
1301 ev = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
1302 if ev is None:
1303 raise Exception("Missing P2P-DEVICE-FOUND")
1304 events = events + ev
1305 dev[1].p2p_stop_find()
1306 dev[1].dump_monitor()
1307 for name in [ long2, long3, long4, long5 ]:
1308 if name not in events:
1309 raise Exception("Service missing from peer events")