test_wpas_ap.py 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719
  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. if dev[0].get_mcc() > 1:
  288. raise HwsimSkip("DFS is not supported with multi channel contexts")
  289. try:
  290. _test_wpas_ap_dfs(dev)
  291. finally:
  292. set_country("00")
  293. dev[0].request("SET country 00")
  294. dev[1].flush_scan_cache()
  295. def _test_wpas_ap_dfs(dev):
  296. set_country("US")
  297. dev[0].request("SET country US")
  298. id = dev[0].add_network()
  299. dev[0].set_network(id, "mode", "2")
  300. dev[0].set_network_quoted(id, "ssid", "wpas-ap-dfs")
  301. dev[0].set_network(id, "key_mgmt", "NONE")
  302. dev[0].set_network(id, "frequency", "5260")
  303. dev[0].set_network(id, "scan_freq", "5260")
  304. dev[0].select_network(id)
  305. ev = dev[0].wait_event(["DFS-CAC-START"])
  306. if ev is None:
  307. # For now, assume DFS is not supported by all kernel builds.
  308. raise HwsimSkip("CAC did not start - assume not supported")
  309. ev = dev[0].wait_event(["DFS-CAC-COMPLETED"], timeout=70)
  310. if ev is None:
  311. raise Exception("CAC did not complete")
  312. if "success=1" not in ev:
  313. raise Exception("CAC failed")
  314. if "freq=5260" not in ev:
  315. raise Exception("Unexpected DFS freq result")
  316. ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"])
  317. if ev is None:
  318. raise Exception("AP failed to start")
  319. dev[1].connect("wpas-ap-dfs", key_mgmt="NONE")
  320. dev[1].request("DISCONNECT")
  321. dev[1].wait_disconnected()
  322. @remote_compatible
  323. def test_wpas_ap_disable(dev):
  324. """wpa_supplicant AP mode - DISABLE_NETWORK"""
  325. id = dev[0].add_network()
  326. dev[0].set_network(id, "mode", "2")
  327. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  328. dev[0].set_network(id, "key_mgmt", "NONE")
  329. dev[0].set_network(id, "scan_freq", "2412")
  330. dev[0].select_network(id)
  331. ev = dev[0].wait_event(["AP-ENABLED"])
  332. if ev is None:
  333. raise Exception("AP-ENABLED event not seen")
  334. wait_ap_ready(dev[0])
  335. dev[0].request("DISABLE_NETWORK %d" % id)
  336. ev = dev[0].wait_event(["AP-DISABLED"])
  337. if ev is None:
  338. raise Exception("AP-DISABLED event not seen")
  339. dev[0].wait_disconnected()
  340. def test_wpas_ap_acs(dev):
  341. """wpa_supplicant AP mode - ACS"""
  342. res = dev[0].get_capability("acs")
  343. if res is None or "ACS" not in res:
  344. raise HwsimSkip("ACS not supported")
  345. # For now, make sure the last operating channel was on 2.4 GHz band to get
  346. # sufficient survey data from mac80211_hwsim.
  347. id = dev[0].add_network()
  348. dev[0].set_network(id, "mode", "2")
  349. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  350. dev[0].set_network(id, "key_mgmt", "NONE")
  351. dev[0].set_network(id, "frequency", "2412")
  352. dev[0].set_network(id, "scan_freq", "2412")
  353. dev[0].select_network(id)
  354. wait_ap_ready(dev[0])
  355. dev[0].request("REMOVE_NETWORK all")
  356. dev[0].wait_disconnected()
  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", "2417")
  362. dev[0].set_network(id, "scan_freq", "2417")
  363. dev[0].set_network(id, "acs", "1")
  364. dev[0].select_network(id)
  365. wait_ap_ready(dev[0])
  366. # ACS prefers channels 1, 6, 11
  367. freq = dev[0].get_status_field('freq')
  368. if freq == "2417":
  369. raise Exception("Unexpected operating channel selected")
  370. dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq=freq)
  371. @remote_compatible
  372. def test_wpas_ap_and_assoc_req_p2p_ie(dev):
  373. """wpa_supplicant AP mode - unexpected P2P IE in Association Request"""
  374. try:
  375. _test_wpas_ap_and_assoc_req_p2p_ie(dev)
  376. finally:
  377. dev[1].request("VENDOR_ELEM_REMOVE 13 *")
  378. dev[0].request("P2P_SET disabled 0")
  379. def _test_wpas_ap_and_assoc_req_p2p_ie(dev):
  380. dev[0].request("P2P_SET disabled 1")
  381. id = dev[0].add_network()
  382. dev[0].set_network(id, "mode", "2")
  383. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  384. dev[0].set_network(id, "key_mgmt", "NONE")
  385. dev[0].set_network(id, "frequency", "2412")
  386. dev[0].set_network(id, "scan_freq", "2412")
  387. dev[0].select_network(id)
  388. wait_ap_ready(dev[0])
  389. dev[1].request("VENDOR_ELEM_ADD 13 dd04506f9a09")
  390. dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
  391. dev[1].request("DISCONNECT")
  392. dev[1].wait_disconnected()
  393. dev[0].request("DISCONNECT")
  394. dev[0].wait_disconnected()
  395. @remote_compatible
  396. def test_wpas_ap_open_ht_disabled(dev):
  397. """wpa_supplicant AP mode - open network and HT disabled"""
  398. id = dev[0].add_network()
  399. dev[0].set_network(id, "mode", "2")
  400. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  401. dev[0].set_network(id, "key_mgmt", "NONE")
  402. dev[0].set_network(id, "frequency", "2412")
  403. dev[0].set_network(id, "scan_freq", "2412")
  404. dev[0].set_network(id, "disable_ht", "1")
  405. dev[0].select_network(id)
  406. wait_ap_ready(dev[0])
  407. dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
  408. hwsim_utils.test_connectivity(dev[0], dev[1])
  409. def test_wpas_ap_failures(dev):
  410. """wpa_supplicant AP mode - failures"""
  411. # No SSID configured for AP mode
  412. id = dev[0].add_network()
  413. dev[0].set_network(id, "mode", "2")
  414. dev[0].set_network(id, "key_mgmt", "NONE")
  415. dev[0].set_network(id, "frequency", "2412")
  416. dev[0].set_network(id, "scan_freq", "2412")
  417. dev[0].select_network(id)
  418. ev = dev[0].wait_event([ "CTRL-EVENT-CONNECTED" ], timeout=0.1)
  419. if ev is not None:
  420. raise Exception("Unexpected connection event")
  421. dev[0].request("REMOVE_NETWORK all")
  422. # Invalid pbss value(2) for AP mode
  423. dev[0].dump_monitor()
  424. id = dev[0].add_network()
  425. dev[0].set_network(id, "mode", "2")
  426. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  427. dev[0].set_network(id, "key_mgmt", "NONE")
  428. dev[0].set_network(id, "frequency", "2412")
  429. dev[0].set_network(id, "scan_freq", "2412")
  430. dev[0].set_network(id, "pbss", "2")
  431. dev[0].select_network(id)
  432. ev = dev[0].wait_event([ "CTRL-EVENT-CONNECTED",
  433. "CTRL-EVENT-DISCONNECTED" ], timeout=0.1)
  434. if ev is not None and "CTRL-EVENT-CONNECTED" in ev:
  435. raise Exception("Unexpected connection event(2)")
  436. dev[0].request("REMOVE_NETWORK all")
  437. def test_wpas_ap_oom(dev):
  438. """wpa_supplicant AP mode - OOM"""
  439. id = dev[0].add_network()
  440. dev[0].set_network(id, "mode", "2")
  441. dev[0].set_network_quoted(id, "ssid", "wpas-ap")
  442. dev[0].set_network_quoted(id, "psk", "1234567890")
  443. dev[0].set_network(id, "frequency", "2412")
  444. dev[0].set_network(id, "scan_freq", "2412")
  445. with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"):
  446. dev[0].select_network(id)
  447. dev[0].wait_disconnected()
  448. dev[0].request("REMOVE_NETWORK all")
  449. id = dev[0].add_network()
  450. dev[0].set_network(id, "mode", "2")
  451. dev[0].set_network_quoted(id, "ssid", "wpas-ap")
  452. dev[0].set_network(id, "psk", "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef")
  453. dev[0].set_network(id, "frequency", "2412")
  454. dev[0].set_network(id, "scan_freq", "2412")
  455. with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"):
  456. dev[0].select_network(id)
  457. dev[0].wait_disconnected()
  458. dev[0].request("REMOVE_NETWORK all")
  459. id = dev[0].add_network()
  460. dev[0].set_network(id, "mode", "2")
  461. dev[0].set_network_quoted(id, "ssid", "wpas-ap")
  462. dev[0].set_network(id, "key_mgmt", "NONE")
  463. dev[0].set_network_quoted(id, "wep_key0", "hello")
  464. dev[0].set_network(id, "frequency", "2412")
  465. dev[0].set_network(id, "scan_freq", "2412")
  466. with alloc_fail(dev[0], 1, "=wpa_supplicant_conf_ap"):
  467. dev[0].select_network(id)
  468. dev[0].wait_disconnected()
  469. dev[0].request("REMOVE_NETWORK all")
  470. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  471. wpas.interface_add("wlan5")
  472. wpas.request("SET manufacturer test")
  473. wpas.request("SET model_name test")
  474. wpas.request("SET model_number test")
  475. wpas.request("SET serial_number test")
  476. wpas.request("SET serial_number test")
  477. wpas.request("SET serial_number test")
  478. wpas.request("SET ap_vendor_elements dd0411223301")
  479. id = wpas.add_network()
  480. wpas.set_network(id, "mode", "2")
  481. wpas.set_network_quoted(id, "ssid", "wpas-ap")
  482. wpas.set_network(id, "key_mgmt", "NONE")
  483. wpas.set_network(id, "frequency", "2412")
  484. wpas.set_network(id, "scan_freq", "2412")
  485. for i in range(5):
  486. with alloc_fail(wpas, i, "=wpa_supplicant_conf_ap"):
  487. wpas.select_network(id)
  488. ev = dev[0].wait_event([ "CTRL-EVENT-CONNECTED",
  489. "CTRL-EVENT-DISCONNECTED" ], timeout=1)
  490. wpas.request("DISCONNECT")
  491. wpas.wait_disconnected()
  492. def test_wpas_ap_params(dev):
  493. """wpa_supplicant AP mode - parameters"""
  494. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  495. wpas.interface_add("wlan5")
  496. wpas.request("SET manufacturer test")
  497. wpas.request("SET model_name test")
  498. wpas.request("SET model_number test")
  499. wpas.request("SET serial_number test")
  500. wpas.request("SET serial_number test")
  501. wpas.request("SET serial_number test")
  502. wpas.request("SET ap_vendor_elements dd0411223301")
  503. id = wpas.add_network()
  504. wpas.set_network(id, "mode", "2")
  505. wpas.set_network_quoted(id, "ssid", "wpas-ap")
  506. wpas.set_network(id, "key_mgmt", "NONE")
  507. wpas.set_network(id, "frequency", "2412")
  508. wpas.set_network(id, "scan_freq", "2412")
  509. wpas.select_network(id)
  510. wpas.wait_connected()
  511. wpas.request("DISCONNECT")
  512. wpas.wait_disconnected()
  513. wpas.request("SET beacon_int 200 3")
  514. wpas.request("SET dtim_period 3")
  515. wpas.select_network(id)
  516. wpas.wait_connected()
  517. wpas.request("DISCONNECT")
  518. wpas.wait_disconnected()
  519. wpas.set_network(id, "beacon_int", "300")
  520. wpas.set_network(id, "dtim_period", "2")
  521. wpas.select_network(id)
  522. wpas.wait_connected()
  523. if "---- AP ----" not in wpas.request("PMKSA"):
  524. raise Exception("AP section missing from PMKSA output")
  525. if "OK" not in wpas.request("PMKSA_FLUSH"):
  526. raise Exception("PMKSA_FLUSH failed")
  527. wpas.request("DISCONNECT")
  528. wpas.wait_disconnected()
  529. def test_wpas_ap_global_sta(dev):
  530. """wpa_supplicant AP mode - STA commands on global control interface"""
  531. id = dev[0].add_network()
  532. dev[0].set_network(id, "mode", "2")
  533. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  534. dev[0].set_network(id, "key_mgmt", "NONE")
  535. dev[0].set_network(id, "frequency", "2412")
  536. dev[0].set_network(id, "scan_freq", "2412")
  537. dev[0].select_network(id)
  538. wait_ap_ready(dev[0])
  539. dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
  540. addr1 = dev[1].own_addr()
  541. res = dev[0].global_request("STA " + addr1)
  542. if "UNKNOWN COMMAND" in res:
  543. raise Exception("STA command not known on global control interface")
  544. res = dev[0].global_request("STA-FIRST")
  545. if "UNKNOWN COMMAND" in res:
  546. raise Exception("STA-FIRST command not known on global control interface")
  547. res = dev[0].global_request("STA-NEXT " + addr1)
  548. if "UNKNOWN COMMAND" in res:
  549. raise Exception("STA-NEXT command not known on global control interface")
  550. dev[1].request("DISCONNECT")
  551. dev[1].wait_disconnected()
  552. dev[0].request("DISCONNECT")
  553. dev[0].wait_disconnected()
  554. def test_wpas_ap_5ghz(dev):
  555. """wpa_supplicant AP mode - 5 GHz"""
  556. try:
  557. _test_wpas_ap_5ghz(dev)
  558. finally:
  559. set_country("00")
  560. dev[0].request("SET country 00")
  561. dev[1].flush_scan_cache()
  562. def _test_wpas_ap_5ghz(dev):
  563. set_country("US")
  564. dev[0].request("SET country US")
  565. id = dev[0].add_network()
  566. dev[0].set_network(id, "mode", "2")
  567. dev[0].set_network_quoted(id, "ssid", "wpas-ap-5ghz")
  568. dev[0].set_network(id, "key_mgmt", "NONE")
  569. dev[0].set_network(id, "frequency", "5180")
  570. dev[0].set_network(id, "scan_freq", "5180")
  571. dev[0].select_network(id)
  572. wait_ap_ready(dev[0])
  573. dev[1].connect("wpas-ap-5ghz", key_mgmt="NONE", scan_freq="5180")
  574. dev[1].request("DISCONNECT")
  575. dev[1].wait_disconnected()
  576. def test_wpas_ap_open_vht80(dev):
  577. """wpa_supplicant AP mode - VHT 80 MHz"""
  578. id = dev[0].add_network()
  579. dev[0].set("country", "FI")
  580. try:
  581. dev[0].set_network(id, "mode", "2")
  582. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  583. dev[0].set_network(id, "key_mgmt", "NONE")
  584. dev[0].set_network(id, "frequency", "5180")
  585. dev[0].set_network(id, "scan_freq", "5180")
  586. dev[0].set_network(id, "vht", "1")
  587. dev[0].set_network(id, "vht_center_freq1", "5210")
  588. dev[0].set_network(id, "max_oper_chwidth", "1")
  589. dev[0].set_network(id, "ht40", "1")
  590. dev[0].select_network(id)
  591. wait_ap_ready(dev[0])
  592. dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="5180")
  593. sig = dev[1].request("SIGNAL_POLL").splitlines()
  594. hwsim_utils.test_connectivity(dev[0], dev[1])
  595. dev[1].request("DISCONNECT")
  596. dev[1].wait_disconnected()
  597. if "FREQUENCY=5180" not in sig:
  598. raise Exception("Unexpected SIGNAL_POLL value(1): " + str(sig))
  599. if "WIDTH=80 MHz" not in sig:
  600. raise Exception("Unexpected SIGNAL_POLL value(2): " + str(sig))
  601. finally:
  602. set_country("00")
  603. dev[0].set("country", "00")
  604. dev[1].flush_scan_cache()
  605. def test_wpas_ap_no_ht(dev):
  606. """wpa_supplicant AP mode - HT disabled"""
  607. id = dev[0].add_network()
  608. dev[0].set_network(id, "mode", "2")
  609. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  610. dev[0].set_network(id, "key_mgmt", "NONE")
  611. dev[0].set_network(id, "frequency", "2412")
  612. dev[0].set_network(id, "scan_freq", "2412")
  613. dev[0].set_network(id, "ht", "0")
  614. dev[0].set_network(id, "wps_disabled", "1")
  615. dev[0].select_network(id)
  616. wait_ap_ready(dev[0])
  617. dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
  618. sig = dev[1].request("SIGNAL_POLL").splitlines()
  619. dev[1].request("DISCONNECT")
  620. dev[1].wait_disconnected()
  621. dev[0].request("REMOVE_NETWORK all")
  622. dev[0].wait_disconnected()
  623. id = dev[0].add_network()
  624. dev[0].set_network(id, "mode", "2")
  625. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  626. dev[0].set_network(id, "key_mgmt", "NONE")
  627. dev[0].set_network(id, "frequency", "2412")
  628. dev[0].set_network(id, "scan_freq", "2412")
  629. dev[0].set_network(id, "wps_disabled", "1")
  630. dev[0].select_network(id)
  631. wait_ap_ready(dev[0])
  632. dev[1].flush_scan_cache()
  633. dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
  634. sig2 = dev[1].request("SIGNAL_POLL").splitlines()
  635. dev[1].request("DISCONNECT")
  636. dev[1].wait_disconnected()
  637. dev[0].request("REMOVE_NETWORK all")
  638. dev[0].wait_disconnected()
  639. if "WIDTH=20 MHz (no HT)" not in sig:
  640. raise Exception("HT was not disabled: " + str(sig))
  641. if "WIDTH=20 MHz" not in sig2:
  642. raise Exception("HT was not enabled: " + str(sig2))