test_wpas_ap.py 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. #!/usr/bin/python
  2. #
  3. # wpa_supplicant AP mode tests
  4. # Copyright (c) 2014, Qualcomm Atheros, Inc.
  5. #
  6. # This software may be distributed under the terms of the BSD license.
  7. # See README for more details.
  8. import time
  9. import logging
  10. logger = logging.getLogger()
  11. import hwsim_utils
  12. def test_wpas_ap_open(dev):
  13. """wpa_supplicant AP mode - open network"""
  14. id = dev[0].add_network()
  15. dev[0].set_network(id, "mode", "2")
  16. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  17. dev[0].set_network(id, "key_mgmt", "NONE")
  18. dev[0].set_network(id, "frequency", "2412")
  19. dev[0].set_network(id, "scan_freq", "2412")
  20. dev[0].select_network(id)
  21. dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
  22. dev[2].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2412")
  23. hwsim_utils.test_connectivity(dev[0].ifname, dev[1].ifname)
  24. hwsim_utils.test_connectivity(dev[1].ifname, dev[2].ifname)
  25. addr1 = dev[1].p2p_interface_addr()
  26. addr2 = dev[2].p2p_interface_addr()
  27. addrs = [ addr1, addr2 ]
  28. sta = dev[0].get_sta(None)
  29. if sta['addr'] not in addrs:
  30. raise Exception("Unexpected STA address")
  31. sta1 = dev[0].get_sta(sta['addr'])
  32. if sta1['addr'] not in addrs:
  33. raise Exception("Unexpected STA address")
  34. sta2 = dev[0].get_sta(sta['addr'], next=True)
  35. if sta2['addr'] not in addrs:
  36. raise Exception("Unexpected STA2 address")
  37. sta3 = dev[0].get_sta(sta2['addr'], next=True)
  38. if len(sta3) != 0:
  39. raise Exception("Unexpected STA iteration result (did not stop)")
  40. status = dev[0].get_status()
  41. if status['mode'] != "AP":
  42. raise Exception("Unexpected status mode")
  43. dev[1].dump_monitor()
  44. dev[2].dump_monitor()
  45. dev[0].request("DEAUTHENTICATE " + addr1)
  46. dev[0].request("DISASSOCIATE " + addr2)
  47. ev = dev[1].wait_event(["CTRL-EVENT-DISCONNECTED"])
  48. if ev is None:
  49. raise Exception("Disconnection timed out")
  50. ev = dev[2].wait_event(["CTRL-EVENT-DISCONNECTED"])
  51. if ev is None:
  52. raise Exception("Disconnection timed out")
  53. ev = dev[1].wait_event(["CTRL-EVENT-CONNECTED"])
  54. if ev is None:
  55. raise Exception("Reconnection timed out")
  56. ev = dev[2].wait_event(["CTRL-EVENT-CONNECTED"])
  57. if ev is None:
  58. raise Exception("Reconnection timed out")
  59. def test_wpas_ap_wep(dev):
  60. """wpa_supplicant AP mode - WEP"""
  61. id = dev[0].add_network()
  62. dev[0].set_network(id, "mode", "2")
  63. dev[0].set_network_quoted(id, "ssid", "wpas-ap-wep")
  64. dev[0].set_network(id, "key_mgmt", "NONE")
  65. dev[0].set_network(id, "frequency", "2412")
  66. dev[0].set_network(id, "scan_freq", "2412")
  67. dev[0].set_network_quoted(id, "wep_key0", "hello")
  68. dev[0].select_network(id)
  69. dev[1].connect("wpas-ap-wep", key_mgmt="NONE", wep_key0='"hello"',
  70. scan_freq="2412")
  71. hwsim_utils.test_connectivity(dev[0].ifname, dev[1].ifname)
  72. def test_wpas_ap_no_ssid(dev):
  73. """wpa_supplicant AP mode - invalid network configuration"""
  74. id = dev[0].add_network()
  75. dev[0].set_network(id, "mode", "2")
  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].select_network(id)
  80. ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1)
  81. if ev is not None:
  82. raise Exception("Unexpected AP start")
  83. def test_wpas_ap_default_frequency(dev):
  84. """wpa_supplicant AP mode - default frequency"""
  85. id = dev[0].add_network()
  86. dev[0].set_network(id, "mode", "2")
  87. dev[0].set_network_quoted(id, "ssid", "wpas-ap-open")
  88. dev[0].set_network(id, "key_mgmt", "NONE")
  89. dev[0].set_network(id, "scan_freq", "2412")
  90. dev[0].select_network(id)
  91. ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"])
  92. if ev is None:
  93. raise Exception("AP failed to start")
  94. dev[1].connect("wpas-ap-open", key_mgmt="NONE", scan_freq="2462")
  95. def test_wpas_ap_invalid_frequency(dev):
  96. """wpa_supplicant AP mode - invalid frequency configuration"""
  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, "frequency", "2413")
  102. dev[0].set_network(id, "scan_freq", "2412")
  103. dev[0].select_network(id)
  104. ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=1)
  105. if ev is not None:
  106. raise Exception("Unexpected AP start")
  107. def test_wpas_ap_wps(dev):
  108. """wpa_supplicant AP mode - WPS operations"""
  109. id = dev[0].add_network()
  110. dev[0].set_network(id, "mode", "2")
  111. dev[0].set_network_quoted(id, "ssid", "wpas-ap-wps")
  112. dev[0].set_network_quoted(id, "psk", "1234567890")
  113. dev[0].set_network(id, "frequency", "2412")
  114. dev[0].set_network(id, "scan_freq", "2412")
  115. dev[0].select_network(id)
  116. ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"])
  117. if ev is None:
  118. raise Exception("AP start timeout")
  119. bssid = dev[0].p2p_interface_addr()
  120. logger.info("Test PBC mode start/stop")
  121. if "FAIL" not in dev[0].request("WPS_CANCEL"):
  122. raise Exception("Unexpected WPS_CANCEL success")
  123. dev[0].request("WPS_PBC")
  124. ev = dev[0].wait_event(["WPS-PBC-ACTIVE"])
  125. if ev is None:
  126. raise Exception("PBC mode start timeout")
  127. if "OK" not in dev[0].request("WPS_CANCEL"):
  128. raise Exception("Unexpected WPS_CANCEL failure")
  129. ev = dev[0].wait_event(["WPS-TIMEOUT"])
  130. if ev is None:
  131. raise Exception("PBC mode disabling timeout")
  132. logger.info("Test PBC protocol run")
  133. dev[0].request("WPS_PBC")
  134. ev = dev[0].wait_event(["WPS-PBC-ACTIVE"])
  135. if ev is None:
  136. raise Exception("PBC mode start timeout")
  137. dev[1].request("WPS_PBC")
  138. ev = dev[1].wait_event(["CTRL-EVENT-CONNECTED"], timeout=30)
  139. if ev is None:
  140. raise Exception("WPS PBC operation timed out")
  141. hwsim_utils.test_connectivity(dev[0].ifname, dev[1].ifname)
  142. logger.info("Test AP PIN to learn configuration")
  143. pin = dev[0].request("WPS_AP_PIN random")
  144. if "FAIL" in pin:
  145. raise Exception("Could not generate random AP PIN")
  146. if pin not in dev[0].request("WPS_AP_PIN get"):
  147. raise Exception("Could not fetch current AP PIN")
  148. dev[2].wps_reg(bssid, pin)
  149. hwsim_utils.test_connectivity(dev[1].ifname, dev[2].ifname)
  150. dev[1].request("REMOVE_NETWORK all")
  151. dev[2].request("REMOVE_NETWORK all")
  152. logger.info("Test AP PIN operations")
  153. dev[0].request("WPS_AP_PIN disable")
  154. dev[0].request("WPS_AP_PIN set " + pin + " 1")
  155. time.sleep(1.1)
  156. if "FAIL" not in dev[0].request("WPS_AP_PIN get"):
  157. raise Exception("AP PIN unexpectedly still enabled")
  158. pin = dev[1].wps_read_pin()
  159. dev[0].request("WPS_PIN any " + pin)
  160. dev[1].request("WPS_PIN any " + pin)
  161. ev = dev[1].wait_event(["CTRL-EVENT-CONNECTED"], timeout=30)
  162. if ev is None:
  163. raise Exception("Association with the AP timed out")
  164. dev[1].request("REMOVE_NETWORK all")
  165. dev[1].dump_monitor()
  166. dev[0].request("WPS_AP_PIN set 12345670")
  167. dev[0].dump_monitor()
  168. runs = ("88887777", "12340000", "00000000", "12345670")
  169. for pin in runs:
  170. logger.info("Try AP PIN " + pin)
  171. dev[2].dump_monitor()
  172. dev[2].request("WPS_REG " + bssid + " " + pin)
  173. ev = dev[2].wait_event(["WPS-SUCCESS", "WPS-FAIL msg"], timeout=15)
  174. if ev is None:
  175. raise Exception("WPS operation timed out")
  176. if "WPS-SUCCESS" in ev:
  177. raise Exception("WPS operation succeeded unexpectedly")
  178. ev = dev[2].wait_event(["CTRL-EVENT-DISCONNECTED"])
  179. if ev is None:
  180. raise Exception("Timeout while waiting for disconnection")
  181. dev[2].request("WPS_CANCEL")
  182. dev[2].request("REMOVE_NETWORK all")
  183. ev = dev[0].wait_event(["WPS-AP-SETUP-LOCKED"])
  184. if ev is None:
  185. raise Exception("WPS AP PIN not locked")