test_p2p_concurrency.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. # P2P concurrency test cases
  2. # Copyright (c) 2013-2015, Jouni Malinen <j@w1.fi>
  3. #
  4. # This software may be distributed under the terms of the BSD license.
  5. # See README for more details.
  6. import logging
  7. logger = logging.getLogger()
  8. import subprocess
  9. import time
  10. import hwsim_utils
  11. import hostapd
  12. from p2p_utils import *
  13. from test_ap_ht import clear_scan_cache
  14. from utils import HwsimSkip
  15. def test_concurrent_autogo(dev, apdev):
  16. """Concurrent P2P autonomous GO"""
  17. logger.info("Connect to an infrastructure AP")
  18. dev[0].request("P2P_SET cross_connect 0")
  19. hapd = hostapd.add_ap(apdev[0], { "ssid": "test-open" })
  20. dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2412")
  21. hwsim_utils.test_connectivity(dev[0], hapd)
  22. logger.info("Start a P2P group while associated to an AP")
  23. dev[0].global_request("SET p2p_no_group_iface 0")
  24. dev[0].p2p_start_go()
  25. pin = dev[1].wps_read_pin()
  26. dev[0].p2p_go_authorize_client(pin)
  27. dev[1].p2p_connect_group(dev[0].p2p_dev_addr(), pin, timeout=60,
  28. social=True)
  29. hwsim_utils.test_connectivity_p2p(dev[0], dev[1])
  30. dev[0].remove_group()
  31. dev[1].wait_go_ending_session()
  32. logger.info("Confirm AP connection after P2P group removal")
  33. hwsim_utils.test_connectivity(dev[0], hapd)
  34. def test_concurrent_autogo_5ghz_ht40(dev, apdev):
  35. """Concurrent P2P autonomous GO on 5 GHz and HT40 co-ex"""
  36. clear_scan_cache(apdev[1])
  37. try:
  38. hapd = None
  39. hapd2 = None
  40. params = { "ssid": "ht40",
  41. "hw_mode": "a",
  42. "channel": "153",
  43. "country_code": "US",
  44. "ht_capab": "[HT40-]" }
  45. hapd2 = hostapd.add_ap(apdev[1], params)
  46. params = { "ssid": "test-open-5",
  47. "hw_mode": "a",
  48. "channel": "149",
  49. "country_code": "US" }
  50. hapd = hostapd.add_ap(apdev[0], params)
  51. dev[0].request("P2P_SET cross_connect 0")
  52. dev[0].scan_for_bss(apdev[0]['bssid'], freq=5745)
  53. dev[0].scan_for_bss(apdev[1]['bssid'], freq=5765)
  54. dev[0].connect("test-open-5", key_mgmt="NONE", scan_freq="5745")
  55. dev[0].global_request("SET p2p_no_group_iface 0")
  56. if "OK" not in dev[0].global_request("P2P_GROUP_ADD ht40"):
  57. raise Exception("P2P_GROUP_ADD failed")
  58. ev = dev[0].wait_global_event(["P2P-GROUP-STARTED"], timeout=5)
  59. if ev is None:
  60. raise Exception("GO start up timed out")
  61. dev[0].group_form_result(ev)
  62. pin = dev[1].wps_read_pin()
  63. dev[0].p2p_go_authorize_client(pin)
  64. dev[1].p2p_find(freq=5745)
  65. addr0 = dev[0].p2p_dev_addr()
  66. count = 0
  67. while count < 10:
  68. time.sleep(0.25)
  69. count += 1
  70. if dev[1].peer_known(addr0):
  71. break
  72. dev[1].p2p_connect_group(addr0, pin, timeout=60)
  73. dev[0].remove_group()
  74. dev[1].wait_go_ending_session()
  75. finally:
  76. dev[0].request("REMOVE_NETWORK all")
  77. if hapd:
  78. hapd.request("DISABLE")
  79. if hapd2:
  80. hapd2.request("DISABLE")
  81. subprocess.call(['iw', 'reg', 'set', '00'])
  82. dev[0].flush_scan_cache()
  83. dev[1].flush_scan_cache()
  84. def test_concurrent_autogo_crossconnect(dev, apdev):
  85. """Concurrent P2P autonomous GO"""
  86. dev[0].global_request("P2P_SET cross_connect 1")
  87. hapd = hostapd.add_ap(apdev[0], { "ssid": "test-open" })
  88. dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2412")
  89. dev[0].global_request("SET p2p_no_group_iface 0")
  90. dev[0].p2p_start_go(no_event_clear=True)
  91. ev = dev[0].wait_global_event("P2P-CROSS-CONNECT-ENABLE", timeout=10)
  92. if ev is None:
  93. raise Exception("Timeout on cross connection enabled event")
  94. if dev[0].group_ifname + " " + dev[0].ifname not in ev:
  95. raise Exception("Unexpected interfaces: " + ev)
  96. dev[0].dump_monitor()
  97. dev[0].global_request("P2P_SET cross_connect 0")
  98. ev = dev[0].wait_global_event("P2P-CROSS-CONNECT-DISABLE", timeout=10)
  99. if ev is None:
  100. raise Exception("Timeout on cross connection disabled event")
  101. if dev[0].group_ifname + " " + dev[0].ifname not in ev:
  102. raise Exception("Unexpected interfaces: " + ev)
  103. dev[0].remove_group()
  104. dev[0].global_request("P2P_SET cross_connect 1")
  105. dev[0].p2p_start_go(no_event_clear=True)
  106. ev = dev[0].wait_global_event("P2P-CROSS-CONNECT-ENABLE", timeout=10)
  107. if ev is None:
  108. raise Exception("Timeout on cross connection enabled event")
  109. if dev[0].group_ifname + " " + dev[0].ifname not in ev:
  110. raise Exception("Unexpected interfaces: " + ev)
  111. dev[0].dump_monitor()
  112. dev[0].remove_group()
  113. ev = dev[0].wait_global_event("P2P-CROSS-CONNECT-DISABLE", timeout=10)
  114. if ev is None:
  115. raise Exception("Timeout on cross connection disabled event")
  116. dev[0].global_request("P2P_SET cross_connect 0")
  117. def test_concurrent_p2pcli(dev, apdev):
  118. """Concurrent P2P client join"""
  119. logger.info("Connect to an infrastructure AP")
  120. hapd = hostapd.add_ap(apdev[0], { "ssid": "test-open" })
  121. dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2412")
  122. hwsim_utils.test_connectivity(dev[0], hapd)
  123. logger.info("Join a P2P group while associated to an AP")
  124. dev[0].global_request("SET p2p_no_group_iface 0")
  125. dev[1].p2p_start_go(freq=2412)
  126. pin = dev[0].wps_read_pin()
  127. dev[1].p2p_go_authorize_client(pin)
  128. dev[0].p2p_connect_group(dev[1].p2p_dev_addr(), pin, timeout=60,
  129. social=True)
  130. hwsim_utils.test_connectivity_p2p(dev[0], dev[1])
  131. dev[1].remove_group()
  132. dev[0].wait_go_ending_session()
  133. logger.info("Confirm AP connection after P2P group removal")
  134. hwsim_utils.test_connectivity(dev[0], hapd)
  135. def test_concurrent_grpform_go(dev, apdev):
  136. """Concurrent P2P group formation to become GO"""
  137. logger.info("Connect to an infrastructure AP")
  138. hapd = hostapd.add_ap(apdev[0], { "ssid": "test-open" })
  139. dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2412")
  140. hwsim_utils.test_connectivity(dev[0], hapd)
  141. logger.info("Form a P2P group while associated to an AP")
  142. dev[0].global_request("SET p2p_no_group_iface 0")
  143. [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_intent=15,
  144. r_dev=dev[1], r_intent=0)
  145. check_grpform_results(i_res, r_res)
  146. remove_group(dev[0], dev[1])
  147. logger.info("Confirm AP connection after P2P group removal")
  148. hwsim_utils.test_connectivity(dev[0], hapd)
  149. def test_concurrent_grpform_cli(dev, apdev):
  150. """Concurrent P2P group formation to become P2P Client"""
  151. logger.info("Connect to an infrastructure AP")
  152. hapd = hostapd.add_ap(apdev[0], { "ssid": "test-open" })
  153. dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2412")
  154. hwsim_utils.test_connectivity(dev[0], hapd)
  155. logger.info("Form a P2P group while associated to an AP")
  156. dev[0].global_request("SET p2p_no_group_iface 0")
  157. [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_intent=0,
  158. r_dev=dev[1], r_intent=15)
  159. check_grpform_results(i_res, r_res)
  160. remove_group(dev[0], dev[1])
  161. logger.info("Confirm AP connection after P2P group removal")
  162. hwsim_utils.test_connectivity(dev[0], hapd)
  163. def test_concurrent_grpform_while_connecting(dev, apdev):
  164. """Concurrent P2P group formation while connecting to an AP"""
  165. logger.info("Start connection to an infrastructure AP")
  166. hapd = hostapd.add_ap(apdev[0], { "ssid": "test-open" })
  167. dev[0].connect("test-open", key_mgmt="NONE", wait_connect=False)
  168. logger.info("Form a P2P group while connecting to an AP")
  169. dev[0].global_request("SET p2p_no_group_iface 0")
  170. [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_freq=2412,
  171. r_dev=dev[1], r_freq=2412)
  172. check_grpform_results(i_res, r_res)
  173. remove_group(dev[0], dev[1])
  174. logger.info("Confirm AP connection after P2P group removal")
  175. hwsim_utils.test_connectivity(dev[0], hapd)
  176. def test_concurrent_grpform_while_connecting2(dev, apdev):
  177. """Concurrent P2P group formation while connecting to an AP (2)"""
  178. logger.info("Start connection to an infrastructure AP")
  179. hapd = hostapd.add_ap(apdev[0], { "ssid": "test-open" })
  180. dev[0].connect("test-open", key_mgmt="NONE", wait_connect=False)
  181. dev[1].flush_scan_cache()
  182. logger.info("Form a P2P group while connecting to an AP")
  183. dev[0].global_request("SET p2p_no_group_iface 0")
  184. [i_res, r_res] = go_neg_pbc(i_dev=dev[0], i_intent=15, i_freq=2412,
  185. r_dev=dev[1], r_intent=0, r_freq=2412)
  186. check_grpform_results(i_res, r_res)
  187. remove_group(dev[0], dev[1])
  188. logger.info("Confirm AP connection after P2P group removal")
  189. dev[0].wait_completed()
  190. hwsim_utils.test_connectivity(dev[0], hapd)
  191. def test_concurrent_grpform_while_connecting3(dev, apdev):
  192. """Concurrent P2P group formation while connecting to an AP (3)"""
  193. logger.info("Start connection to an infrastructure AP")
  194. hapd = hostapd.add_ap(apdev[0], { "ssid": "test-open" })
  195. dev[0].connect("test-open", key_mgmt="NONE", wait_connect=False)
  196. logger.info("Form a P2P group while connecting to an AP")
  197. dev[0].global_request("SET p2p_no_group_iface 0")
  198. [i_res, r_res] = go_neg_pbc(i_dev=dev[1], i_intent=15, i_freq=2412,
  199. r_dev=dev[0], r_intent=0, r_freq=2412)
  200. check_grpform_results(i_res, r_res)
  201. remove_group(dev[0], dev[1])
  202. logger.info("Confirm AP connection after P2P group removal")
  203. dev[0].wait_completed()
  204. hwsim_utils.test_connectivity(dev[0], hapd)
  205. def test_concurrent_persistent_group(dev, apdev):
  206. """Concurrent P2P persistent group"""
  207. logger.info("Connect to an infrastructure AP")
  208. hostapd.add_ap(apdev[0], { "ssid": "test-open", "channel": "2" })
  209. dev[0].global_request("SET p2p_no_group_iface 0")
  210. dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2417")
  211. logger.info("Run persistent group test while associated to an AP")
  212. form(dev[0], dev[1])
  213. [go_res, cli_res] = invite_from_cli(dev[0], dev[1])
  214. if go_res['freq'] != '2417':
  215. raise Exception("Unexpected channel selected: " + go_res['freq'])
  216. [go_res, cli_res] = invite_from_go(dev[0], dev[1])
  217. if go_res['freq'] != '2417':
  218. raise Exception("Unexpected channel selected: " + go_res['freq'])
  219. def test_concurrent_invitation_channel_mismatch(dev, apdev):
  220. """P2P persistent group invitation and channel mismatch"""
  221. if dev[0].get_mcc() > 1:
  222. raise HwsimSkip("Skip due to MCC being enabled")
  223. form(dev[0], dev[1])
  224. dev[0].dump_monitor()
  225. dev[1].dump_monitor()
  226. logger.info("Connect to an infrastructure AP")
  227. hostapd.add_ap(apdev[0], { "ssid": "test-open", "channel": "2" })
  228. dev[0].global_request("SET p2p_no_group_iface 0")
  229. dev[0].connect("test-open", key_mgmt="NONE", scan_freq="2417")
  230. invite(dev[1], dev[0], extra="freq=2412")
  231. ev = dev[1].wait_global_event(["P2P-INVITATION-RESULT"], timeout=15)
  232. if ev is None:
  233. raise Exception("P2P invitation result not received")
  234. if "status=7" not in ev:
  235. raise Exception("Unexpected P2P invitation result: " + ev)