test_wpas_ap.py 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567
  1. # wpa_supplicant AP mode tests
  2. # Copyright (c) 2014, Qualcomm Atheros, Inc.
  3. #
  4. # This software may be distributed under the terms of the BSD license.
  5. # See README for more details.
  6. import time
  7. import logging
  8. logger = logging.getLogger()
  9. import hwsim_utils
  10. from utils import HwsimSkip, alloc_fail
  11. from wpasupplicant import WpaSupplicant
  12. from test_p2p_channel import set_country
  13. def wait_ap_ready(dev):
  14. ev = dev.wait_event(["CTRL-EVENT-CONNECTED"])
  15. if ev is None:
  16. raise Exception("AP failed to start")
  17. def test_wpas_ap_open(dev):
  18. """wpa_supplicant AP mode - open network"""
  19. if "FAIL" not in dev[0].request("DEAUTHENTICATE 00:11:22:33:44:55"):
  20. raise Exception("Unexpected DEAUTHENTICATE accepted")
  21. if "FAIL" not in dev[0].request("DISASSOCIATE 00:11:22:33:44:55"):
  22. raise Exception("Unexpected DISASSOCIATE accepted")
  23. if "FAIL" not in dev[0].request("CHAN_SWITCH 0 2432"):
  24. raise Exception("Unexpected CHAN_SWITCH accepted")
  25. id = dev[0].add_network()
  26. dev[0].set_network(id, "mode", "2")
  27. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  28. dev[0].set_network(id, "key_mgmt", "NONE")
  29. dev[0].set_network(id, "frequency", "2412")
  30. dev[0].set_network(id, "scan_freq", "2412")
  31. dev[0].select_network(id)
  32. wait_ap_ready(dev[0])
  33. if "FAIL" not in dev[0].request("DEAUTHENTICATE foo"):
  34. raise Exception("Invalid DEAUTHENTICATE accepted")
  35. if "FAIL" not in dev[0].request("DISASSOCIATE foo"):
  36. raise Exception("Invalid DISASSOCIATE accepted")
  37. dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
  38. dev[2].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
  39. hwsim_utils.test_connectivity(dev[0], dev[1])
  40. hwsim_utils.test_connectivity(dev[1], dev[2])
  41. addr1 = dev[1].p2p_interface_addr()
  42. addr2 = dev[2].p2p_interface_addr()
  43. addrs = [ addr1, addr2 ]
  44. sta = dev[0].get_sta(None)
  45. if sta['addr'] not in addrs:
  46. raise Exception("Unexpected STA address")
  47. sta1 = dev[0].get_sta(sta['addr'])
  48. if sta1['addr'] not in addrs:
  49. raise Exception("Unexpected STA address")
  50. sta2 = dev[0].get_sta(sta['addr'], next=True)
  51. if sta2['addr'] not in addrs:
  52. raise Exception("Unexpected STA2 address")
  53. sta3 = dev[0].get_sta(sta2['addr'], next=True)
  54. if len(sta3) != 0:
  55. raise Exception("Unexpected STA iteration result (did not stop)")
  56. status = dev[0].get_status()
  57. if status['mode'] != "AP":
  58. raise Exception("Unexpected status mode")
  59. dev[1].dump_monitor()
  60. dev[2].dump_monitor()
  61. dev[0].request("DEAUTHENTICATE " + addr1)
  62. dev[0].request("DISASSOCIATE " + addr2)
  63. dev[1].wait_disconnected(timeout=10)
  64. dev[2].wait_disconnected(timeout=10)
  65. dev[1].wait_connected(timeout=10, error="Reconnection timed out")
  66. dev[2].wait_connected(timeout=10, error="Reconnection timed out")
  67. dev[1].request("DISCONNECT")
  68. dev[2].request("DISCONNECT")
  69. def test_wpas_ap_wep(dev):
  70. """wpa_supplicant AP mode - WEP"""
  71. id = dev[0].add_network()
  72. dev[0].set_network(id, "mode", "2")
  73. dev[0].set_network_quoted(id, "ssid", "wpas-ap-wep")
  74. dev[0].set_network(id, "key_mgmt", "NONE")
  75. dev[0].set_network(id, "frequency", "2412")
  76. dev[0].set_network(id, "scan_freq", "2412")
  77. dev[0].set_network_quoted(id, "wep_key0", "hello")
  78. dev[0].select_network(id)
  79. wait_ap_ready(dev[0])
  80. dev[1].connect("wpas-ap-wep", key_mgmt="NONE", wep_key0='"hello"',
  81. scan_freq="2412")
  82. hwsim_utils.test_connectivity(dev[0], dev[1])
  83. dev[1].request("DISCONNECT")
  84. def test_wpas_ap_no_ssid(dev):
  85. """wpa_supplicant AP mode - invalid network configuration"""
  86. id = dev[0].add_network()
  87. dev[0].set_network(id, "mode", "2")
  88. dev[0].set_network(id, "key_mgmt", "NONE")
  89. dev[0].set_network(id, "frequency", "2412")
  90. dev[0].set_network(id, "scan_freq", "2412")
  91. dev[0].select_network(id)
  92. ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1)
  93. if ev is not None:
  94. raise Exception("Unexpected AP start")
  95. def test_wpas_ap_default_frequency(dev):
  96. """wpa_supplicant AP mode - default frequency"""
  97. id = dev[0].add_network()
  98. dev[0].set_network(id, "mode", "2")
  99. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  100. dev[0].set_network(id, "key_mgmt", "NONE")
  101. dev[0].set_network(id, "scan_freq", "2412")
  102. dev[0].select_network(id)
  103. wait_ap_ready(dev[0])
  104. dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2462")
  105. dev[1].request("DISCONNECT")
  106. def test_wpas_ap_invalid_frequency(dev):
  107. """wpa_supplicant AP mode - invalid frequency configuration"""
  108. id = dev[0].add_network()
  109. dev[0].set_network(id, "mode", "2")
  110. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  111. dev[0].set_network(id, "key_mgmt", "NONE")
  112. dev[0].set_network(id, "frequency", "2413")
  113. dev[0].set_network(id, "scan_freq", "2412")
  114. dev[0].select_network(id)
  115. ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1)
  116. if ev is not None:
  117. raise Exception("Unexpected AP start")
  118. def test_wpas_ap_wps(dev):
  119. """wpa_supplicant AP mode - WPS operations"""
  120. id = dev[0].add_network()
  121. dev[0].set_network(id, "mode", "2")
  122. dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
  123. dev[0].set_network_quoted(id, "psk", "1234567890")
  124. dev[0].set_network(id, "frequency", "2412")
  125. dev[0].set_network(id, "scan_freq", "2412")
  126. dev[0].select_network(id)
  127. wait_ap_ready(dev[0])
  128. bssid = dev[0].p2p_interface_addr()
  129. logger.info("Test PBC mode start/stop")
  130. if "FAIL" not in dev[0].request("WPS_CANCEL"):
  131. raise Exception("Unexpected WPS_CANCEL success")
  132. dev[0].request("WPS_PBC")
  133. ev = dev[0].wait_event(["WPS-PBC-ACTIVE"])
  134. if ev is None:
  135. raise Exception("PBC mode start timeout")
  136. if "OK" not in dev[0].request("WPS_CANCEL"):
  137. raise Exception("Unexpected WPS_CANCEL failure")
  138. ev = dev[0].wait_event(["WPS-TIMEOUT"])
  139. if ev is None:
  140. raise Exception("PBC mode disabling timeout")
  141. logger.info("Test PBC protocol run")
  142. dev[0].request("WPS_PBC")
  143. ev = dev[0].wait_event(["WPS-PBC-ACTIVE"])
  144. if ev is None:
  145. raise Exception("PBC mode start timeout")
  146. dev[1].request("WPS_PBC")
  147. dev[1].wait_connected(timeout=30, error="WPS PBC operation timed out")
  148. hwsim_utils.test_connectivity(dev[0], dev[1])
  149. logger.info("Test AP PIN to learn configuration")
  150. pin = dev[0].request("WPS_AP_PIN random")
  151. if "FAIL" in pin:
  152. raise Exception("Could not generate random AP PIN")
  153. if pin not in dev[0].request("WPS_AP_PIN get"):
  154. raise Exception("Could not fetch current AP PIN")
  155. dev[2].wps_reg(bssid, pin)
  156. hwsim_utils.test_connectivity(dev[1], dev[2])
  157. dev[1].request("REMOVE_NETWORK all")
  158. dev[2].request("REMOVE_NETWORK all")
  159. logger.info("Test AP PIN operations")
  160. dev[0].request("WPS_AP_PIN disable")
  161. dev[0].request("WPS_AP_PIN set " + pin + " 1")
  162. time.sleep(1.1)
  163. if "FAIL" not in dev[0].request("WPS_AP_PIN get"):
  164. raise Exception("AP PIN unexpectedly still enabled")
  165. pin = dev[1].wps_read_pin()
  166. dev[0].request("WPS_PIN any " + pin)
  167. dev[1].request("WPS_PIN any " + pin)
  168. dev[1].wait_connected(timeout=30)
  169. dev[1].request("REMOVE_NETWORK all")
  170. dev[1].dump_monitor()
  171. dev[0].request("WPS_PIN any " + pin + " 100")
  172. dev[1].request("WPS_PIN any " + pin)
  173. dev[1].wait_connected(timeout=30)
  174. dev[1].request("REMOVE_NETWORK all")
  175. dev[1].dump_monitor()
  176. dev[0].request("WPS_AP_PIN set 12345670")
  177. dev[0].dump_monitor()
  178. runs = ("88887777", "12340000", "00000000", "12345670")
  179. for pin in runs:
  180. logger.info("Try AP PIN " + pin)
  181. dev[2].dump_monitor()
  182. dev[2].request("WPS_REG " + bssid + " " + pin)
  183. ev = dev[2].wait_event(["WPS-SUCCESS", "WPS-FAIL msg"], timeout=15)
  184. if ev is None:
  185. raise Exception("WPS operation timed out")
  186. if "WPS-SUCCESS" in ev:
  187. raise Exception("WPS operation succeeded unexpectedly")
  188. dev[2].wait_disconnected(timeout=10)
  189. dev[2].request("WPS_CANCEL")
  190. dev[2].request("REMOVE_NETWORK all")
  191. ev = dev[0].wait_event(["WPS-AP-SETUP-LOCKED"])
  192. if ev is None:
  193. raise Exception("WPS AP PIN not locked")
  194. dev[0].dump_monitor()
  195. logger.info("Test random AP PIN timeout")
  196. pin = dev[0].request("WPS_AP_PIN random 1")
  197. if "FAIL" in pin:
  198. raise Exception("Could not generate random AP PIN")
  199. res = dev[0].request("WPS_AP_PIN get")
  200. if pin not in res:
  201. raise Exception("Could not fetch current AP PIN")
  202. for i in range(10):
  203. time.sleep(0.2)
  204. res = dev[0].request("WPS_AP_PIN get")
  205. if "FAIL" in res:
  206. break
  207. if "FAIL" not in res:
  208. raise Exception("WPS_AP_PIN random timeout did not work")
  209. if "FAIL" not in dev[0].request("WPS_AP_PIN foo"):
  210. raise Exception("Invalid WPS_AP_PIN command not rejected")
  211. if "FAIL" not in dev[0].request("WPS_AP_PIN set"):
  212. raise Exception("Invalid WPS_AP_PIN command not rejected")
  213. def test_wpas_ap_wps_frag(dev):
  214. """wpa_supplicant AP mode - WPS operations with fragmentation"""
  215. id = dev[0].add_network()
  216. dev[0].set_network(id, "mode", "2")
  217. dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
  218. dev[0].set_network_quoted(id, "psk", "1234567890")
  219. dev[0].set_network(id, "frequency", "2412")
  220. dev[0].set_network(id, "scan_freq", "2412")
  221. dev[0].set_network(id, "fragment_size", "300")
  222. dev[0].select_network(id)
  223. wait_ap_ready(dev[0])
  224. bssid = dev[0].own_addr()
  225. pin = dev[1].wps_read_pin()
  226. dev[0].request("WPS_PIN any " + pin)
  227. dev[1].scan_for_bss(bssid, freq="2412")
  228. dev[1].request("WPS_PIN " + bssid + " " + pin)
  229. dev[1].wait_connected(timeout=30)
  230. def test_wpas_ap_wps_pbc_overlap(dev):
  231. """wpa_supplicant AP mode - WPS operations with PBC overlap"""
  232. id = dev[0].add_network()
  233. dev[0].set_network(id, "mode", "2")
  234. dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
  235. dev[0].set_network_quoted(id, "psk", "1234567890")
  236. dev[0].set_network(id, "frequency", "2412")
  237. dev[0].set_network(id, "scan_freq", "2412")
  238. dev[0].select_network(id)
  239. wait_ap_ready(dev[0])
  240. bssid = dev[0].p2p_interface_addr()
  241. dev[1].scan_for_bss(bssid, freq="2412")
  242. dev[1].dump_monitor()
  243. dev[2].scan_for_bss(bssid, freq="2412")
  244. dev[2].dump_monitor()
  245. dev[0].request("WPS_PBC")
  246. dev[1].request("WPS_PBC " + bssid)
  247. dev[2].request("WPS_PBC " + bssid)
  248. ev = dev[1].wait_event(["WPS-M2D"], timeout=15)
  249. if ev is None:
  250. raise Exception("PBC session overlap not detected (dev1)")
  251. if "config_error=12" not in ev:
  252. raise Exception("PBC session overlap not correctly reported (dev1)")
  253. ev = dev[2].wait_event(["WPS-M2D"], timeout=15)
  254. if ev is None:
  255. raise Exception("PBC session overlap not detected (dev2)")
  256. if "config_error=12" not in ev:
  257. raise Exception("PBC session overlap not correctly reported (dev2)")
  258. if "FAIL-PBC-OVERLAP" not in dev[0].request("WPS_PBC"):
  259. raise Exception("WPS_PBC(AP) accepted during overlap")
  260. if "FAIL-PBC-OVERLAP" not in dev[0].request("WPS_PBC any"):
  261. raise Exception("WPS_PBC(AP) accepted during overlap")
  262. dev[0].request("WPS_CANCEL")
  263. dev[1].request("WPS_CANCEL")
  264. dev[2].request("WPS_CANCEL")
  265. def test_wpas_ap_wps_disabled(dev):
  266. """wpa_supplicant AP mode - WPS disabled"""
  267. id = dev[0].add_network()
  268. dev[0].set_network(id, "mode", "2")
  269. dev[0].set_network_quoted(id, "ssid", "wpas-ap-no-wps")
  270. dev[0].set_network_quoted(id, "psk", "12345678")
  271. dev[0].set_network(id, "frequency", "2412")
  272. dev[0].set_network(id, "scan_freq", "2412")
  273. dev[0].set_network(id, "wps_disabled", "1")
  274. dev[0].select_network(id)
  275. wait_ap_ready(dev[0])
  276. dev[1].connect("wpas-ap-no-wps", psk="12345678", scan_freq="2412")
  277. dev[1].request("DISCONNECT")
  278. dev[1].wait_disconnected()
  279. def test_wpas_ap_dfs(dev):
  280. """wpa_supplicant AP mode - DFS"""
  281. try:
  282. _test_wpas_ap_dfs(dev)
  283. finally:
  284. set_country("00")
  285. dev[0].request("SET country 00")
  286. dev[1].flush_scan_cache()
  287. def _test_wpas_ap_dfs(dev):
  288. set_country("US")
  289. dev[0].request("SET country US")
  290. id = dev[0].add_network()
  291. dev[0].set_network(id, "mode", "2")
  292. dev[0].set_network_quoted(id, "ssid", "wpas-ap-dfs")
  293. dev[0].set_network(id, "key_mgmt", "NONE")
  294. dev[0].set_network(id, "frequency", "5260")
  295. dev[0].set_network(id, "scan_freq", "5260")
  296. dev[0].select_network(id)
  297. ev = dev[0].wait_event(["DFS-CAC-START"])
  298. if ev is None:
  299. # For now, assume DFS is not supported by all kernel builds.
  300. raise HwsimSkip("CAC did not start - assume not supported")
  301. ev = dev[0].wait_event(["DFS-CAC-COMPLETED"], timeout=70)
  302. if ev is None:
  303. raise Exception("CAC did not complete")
  304. if "success=1" not in ev:
  305. raise Exception("CAC failed")
  306. if "freq=5260" not in ev:
  307. raise Exception("Unexpected DFS freq result")
  308. ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"])
  309. if ev is None:
  310. raise Exception("AP failed to start")
  311. dev[1].connect("wpas-ap-dfs", key_mgmt="NONE")
  312. def test_wpas_ap_disable(dev):
  313. """wpa_supplicant AP mode - DISABLE_NETWORK"""
  314. id = dev[0].add_network()
  315. dev[0].set_network(id, "mode", "2")
  316. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  317. dev[0].set_network(id, "key_mgmt", "NONE")
  318. dev[0].set_network(id, "scan_freq", "2412")
  319. dev[0].select_network(id)
  320. ev = dev[0].wait_event(["AP-ENABLED"])
  321. if ev is None:
  322. raise Exception("AP-ENABLED event not seen")
  323. wait_ap_ready(dev[0])
  324. dev[0].request("DISABLE_NETWORK %d" % id)
  325. ev = dev[0].wait_event(["AP-DISABLED"])
  326. if ev is None:
  327. raise Exception("AP-DISABLED event not seen")
  328. dev[0].wait_disconnected()
  329. def test_wpas_ap_acs(dev):
  330. """wpa_supplicant AP mode - ACS"""
  331. res = dev[0].get_capability("acs")
  332. if res is None or "ACS" not in res:
  333. raise HwsimSkip("ACS not supported")
  334. id = dev[0].add_network()
  335. dev[0].set_network(id, "mode", "2")
  336. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  337. dev[0].set_network(id, "key_mgmt", "NONE")
  338. dev[0].set_network(id, "frequency", "2417")
  339. dev[0].set_network(id, "scan_freq", "2417")
  340. dev[0].set_network(id, "acs", "1")
  341. dev[0].select_network(id)
  342. wait_ap_ready(dev[0])
  343. # ACS prefers channels 1, 6, 11
  344. freq = dev[0].get_status_field('freq')
  345. if freq == "2417":
  346. raise Exception("Unexpected operating channel selected")
  347. dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq=freq)
  348. def test_wpas_ap_and_assoc_req_p2p_ie(dev):
  349. """wpa_supplicant AP mode - unexpected P2P IE in Association Request"""
  350. try:
  351. _test_wpas_ap_and_assoc_req_p2p_ie(dev)
  352. finally:
  353. dev[1].request("VENDOR_ELEM_REMOVE 13 *")
  354. dev[0].request("P2P_SET disabled 0")
  355. def _test_wpas_ap_and_assoc_req_p2p_ie(dev):
  356. dev[0].request("P2P_SET disabled 1")
  357. id = dev[0].add_network()
  358. dev[0].set_network(id, "mode", "2")
  359. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  360. dev[0].set_network(id, "key_mgmt", "NONE")
  361. dev[0].set_network(id, "frequency", "2412")
  362. dev[0].set_network(id, "scan_freq", "2412")
  363. dev[0].select_network(id)
  364. wait_ap_ready(dev[0])
  365. dev[1].request("VENDOR_ELEM_ADD 13 dd04506f9a09")
  366. dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
  367. dev[1].request("DISCONNECT")
  368. dev[1].wait_disconnected()
  369. dev[0].request("DISCONNECT")
  370. dev[0].wait_disconnected()
  371. def test_wpas_ap_open_ht_disabled(dev):
  372. """wpa_supplicant AP mode - open network and HT disabled"""
  373. id = dev[0].add_network()
  374. dev[0].set_network(id, "mode", "2")
  375. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  376. dev[0].set_network(id, "key_mgmt", "NONE")
  377. dev[0].set_network(id, "frequency", "2412")
  378. dev[0].set_network(id, "scan_freq", "2412")
  379. dev[0].set_network(id, "disable_ht", "1")
  380. dev[0].select_network(id)
  381. wait_ap_ready(dev[0])
  382. dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
  383. hwsim_utils.test_connectivity(dev[0], dev[1])
  384. def test_wpas_ap_failures(dev):
  385. """wpa_supplicant AP mode - failures"""
  386. # No SSID configured for AP mode
  387. id = dev[0].add_network()
  388. dev[0].set_network(id, "mode", "2")
  389. dev[0].set_network(id, "key_mgmt", "NONE")
  390. dev[0].set_network(id, "frequency", "2412")
  391. dev[0].set_network(id, "scan_freq", "2412")
  392. dev[0].select_network(id)
  393. ev = dev[0].wait_event([ "CTRL-EVENT-CONNECTED" ], timeout=0.1)
  394. if ev is not None:
  395. raise Exception("Unexpected connection event")
  396. dev[0].request("REMOVE_NETWORK all")
  397. # Invalid pbss value(2) for AP mode
  398. dev[0].dump_monitor()
  399. id = dev[0].add_network()
  400. dev[0].set_network(id, "mode", "2")
  401. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  402. dev[0].set_network(id, "key_mgmt", "NONE")
  403. dev[0].set_network(id, "frequency", "2412")
  404. dev[0].set_network(id, "scan_freq", "2412")
  405. dev[0].set_network(id, "pbss", "2")
  406. dev[0].select_network(id)
  407. ev = dev[0].wait_event([ "CTRL-EVENT-CONNECTED",
  408. "CTRL-EVENT-DISCONNECTED" ], timeout=0.1)
  409. if ev is not None and "CTRL-EVENT-CONNECTED" in ev:
  410. raise Exception("Unexpected connection event(2)")
  411. dev[0].request("REMOVE_NETWORK all")
  412. def test_wpas_ap_oom(dev):
  413. """wpa_supplicant AP mode - OOM"""
  414. id = dev[0].add_network()
  415. dev[0].set_network(id, "mode", "2")
  416. dev[0].set_network_quoted(id, "ssid", "wpas-ap")
  417. dev[0].set_network_quoted(id, "psk", "1234567890")
  418. dev[0].set_network(id, "frequency", "2412")
  419. dev[0].set_network(id, "scan_freq", "2412")
  420. with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"):
  421. dev[0].select_network(id)
  422. dev[0].wait_disconnected()
  423. dev[0].request("REMOVE_NETWORK all")
  424. id = dev[0].add_network()
  425. dev[0].set_network(id, "mode", "2")
  426. dev[0].set_network_quoted(id, "ssid", "wpas-ap")
  427. dev[0].set_network(id, "psk", "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef")
  428. dev[0].set_network(id, "frequency", "2412")
  429. dev[0].set_network(id, "scan_freq", "2412")
  430. with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"):
  431. dev[0].select_network(id)
  432. dev[0].wait_disconnected()
  433. dev[0].request("REMOVE_NETWORK all")
  434. id = dev[0].add_network()
  435. dev[0].set_network(id, "mode", "2")
  436. dev[0].set_network_quoted(id, "ssid", "wpas-ap")
  437. dev[0].set_network(id, "key_mgmt", "NONE")
  438. dev[0].set_network_quoted(id, "wep_key0", "hello")
  439. dev[0].set_network(id, "frequency", "2412")
  440. dev[0].set_network(id, "scan_freq", "2412")
  441. with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"):
  442. dev[0].select_network(id)
  443. dev[0].wait_disconnected()
  444. dev[0].request("REMOVE_NETWORK all")
  445. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  446. wpas.interface_add("wlan5")
  447. wpas.request("SET manufacturer test")
  448. wpas.request("SET model_name test")
  449. wpas.request("SET model_number test")
  450. wpas.request("SET serial_number test")
  451. wpas.request("SET serial_number test")
  452. wpas.request("SET serial_number test")
  453. wpas.request("SET ap_vendor_elements dd0411223301")
  454. id = wpas.add_network()
  455. wpas.set_network(id, "mode", "2")
  456. wpas.set_network_quoted(id, "ssid", "wpas-ap")
  457. wpas.set_network(id, "key_mgmt", "NONE")
  458. wpas.set_network(id, "frequency", "2412")
  459. wpas.set_network(id, "scan_freq", "2412")
  460. for i in range(5):
  461. with alloc_fail(wpas, i, "=wpa_supplicant_conf_ap"):
  462. wpas.select_network(id)
  463. ev = dev[0].wait_event([ "CTRL-EVENT-CONNECTED",
  464. "CTRL-EVENT-DISCONNECTED" ], timeout=1)
  465. wpas.request("DISCONNECT")
  466. wpas.wait_disconnected()
  467. def test_wpas_ap_params(dev):
  468. """wpa_supplicant AP mode - parameters"""
  469. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  470. wpas.interface_add("wlan5")
  471. wpas.request("SET manufacturer test")
  472. wpas.request("SET model_name test")
  473. wpas.request("SET model_number test")
  474. wpas.request("SET serial_number test")
  475. wpas.request("SET serial_number test")
  476. wpas.request("SET serial_number test")
  477. wpas.request("SET ap_vendor_elements dd0411223301")
  478. id = wpas.add_network()
  479. wpas.set_network(id, "mode", "2")
  480. wpas.set_network_quoted(id, "ssid", "wpas-ap")
  481. wpas.set_network(id, "key_mgmt", "NONE")
  482. wpas.set_network(id, "frequency", "2412")
  483. wpas.set_network(id, "scan_freq", "2412")
  484. wpas.select_network(id)
  485. wpas.wait_connected()
  486. wpas.request("DISCONNECT")
  487. wpas.wait_disconnected()
  488. wpas.request("SET beacon_int 200 3")
  489. wpas.request("SET dtim_period 3")
  490. wpas.select_network(id)
  491. wpas.wait_connected()
  492. wpas.request("DISCONNECT")
  493. wpas.wait_disconnected()
  494. wpas.set_network(id, "beacon_int", "300")
  495. wpas.set_network(id, "dtim_period", "2")
  496. wpas.select_network(id)
  497. wpas.wait_connected()
  498. if "---- AP ----" not in wpas.request("PMKSA"):
  499. raise Exception("AP section missing from PMKSA output")
  500. if "OK" not in wpas.request("PMKSA_FLUSH"):
  501. raise Exception("PMKSA_FLUSH failed")
  502. wpas.request("DISCONNECT")
  503. wpas.wait_disconnected()