test_wpas_ap.py 21 KB

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