test_connect_cmd.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. # cfg80211 connect command (SME in the driver/firmware)
  2. # Copyright (c) 2013, 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 time
  9. import hwsim_utils
  10. import hostapd
  11. from wpasupplicant import WpaSupplicant
  12. from test_p2p_grpform import go_neg_pin_authorized
  13. from test_p2p_grpform import check_grpform_results
  14. from test_p2p_grpform import remove_group
  15. def test_connect_cmd_open(dev, apdev):
  16. """Open connection using cfg80211 connect command"""
  17. params = { "ssid": "sta-connect",
  18. "manage_p2p": "1",
  19. "allow_cross_connection": "1" }
  20. hostapd.add_ap(apdev[0]['ifname'], params)
  21. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  22. wpas.interface_add("wlan5", drv_params="force_connect_cmd=1")
  23. wpas.connect("sta-connect", key_mgmt="NONE", scan_freq="2412",
  24. bg_scan_period="1")
  25. wpas.dump_monitor()
  26. wpas.request("DISCONNECT")
  27. wpas.wait_disconnected()
  28. wpas.dump_monitor()
  29. def test_connect_cmd_wep(dev, apdev):
  30. """WEP Open System using cfg80211 connect command"""
  31. params = { "ssid": "sta-connect-wep", "wep_key0": '"hello"' }
  32. hapd = hostapd.add_ap(apdev[0]['ifname'], params)
  33. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  34. wpas.interface_add("wlan5", drv_params="force_connect_cmd=1")
  35. wpas.connect("sta-connect-wep", key_mgmt="NONE", scan_freq="2412",
  36. wep_key0='"hello"')
  37. wpas.dump_monitor()
  38. hwsim_utils.test_connectivity(wpas, hapd)
  39. wpas.request("DISCONNECT")
  40. wpas.wait_disconnected()
  41. wpas.dump_monitor()
  42. def test_connect_cmd_wep_shared(dev, apdev):
  43. """WEP Shared key using cfg80211 connect command"""
  44. params = { "ssid": "sta-connect-wep", "wep_key0": '"hello"',
  45. "auth_algs": "2" }
  46. hapd = hostapd.add_ap(apdev[0]['ifname'], params)
  47. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  48. wpas.interface_add("wlan5", drv_params="force_connect_cmd=1")
  49. id = wpas.connect("sta-connect-wep", key_mgmt="NONE", scan_freq="2412",
  50. auth_alg="SHARED", wep_key0='"hello"')
  51. wpas.dump_monitor()
  52. hwsim_utils.test_connectivity(wpas, hapd)
  53. wpas.request("DISCONNECT")
  54. wpas.remove_network(id)
  55. wpas.connect("sta-connect-wep", key_mgmt="NONE", scan_freq="2412",
  56. auth_alg="OPEN SHARED", wep_key0='"hello"')
  57. wpas.dump_monitor()
  58. hwsim_utils.test_connectivity(wpas, hapd)
  59. wpas.request("DISCONNECT")
  60. wpas.wait_disconnected()
  61. wpas.dump_monitor()
  62. def test_connect_cmd_p2p_management(dev, apdev):
  63. """Open connection using cfg80211 connect command and AP using P2P management"""
  64. params = { "ssid": "sta-connect",
  65. "manage_p2p": "1",
  66. "allow_cross_connection": "0" }
  67. hostapd.add_ap(apdev[0]['ifname'], params)
  68. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  69. wpas.interface_add("wlan5", drv_params="force_connect_cmd=1")
  70. wpas.connect("sta-connect", key_mgmt="NONE", scan_freq="2412")
  71. wpas.dump_monitor()
  72. wpas.request("DISCONNECT")
  73. wpas.wait_disconnected()
  74. wpas.dump_monitor()
  75. def test_connect_cmd_wpa2_psk(dev, apdev):
  76. """WPA2-PSK connection using cfg80211 connect command"""
  77. params = hostapd.wpa2_params(ssid="sta-connect", passphrase="12345678")
  78. hostapd.add_ap(apdev[0]['ifname'], params)
  79. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  80. wpas.interface_add("wlan5", drv_params="force_connect_cmd=1")
  81. wpas.connect("sta-connect", psk="12345678", scan_freq="2412")
  82. wpas.dump_monitor()
  83. wpas.request("DISCONNECT")
  84. wpas.wait_disconnected()
  85. wpas.dump_monitor()
  86. def test_connect_cmd_concurrent_grpform_while_connecting(dev, apdev):
  87. """Concurrent P2P group formation while connecting to an AP using cfg80211 connect command"""
  88. logger.info("Start connection to an infrastructure AP")
  89. hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
  90. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  91. wpas.interface_add("wlan5", drv_params="force_connect_cmd=1")
  92. wpas.connect("test-open", key_mgmt="NONE", wait_connect=False)
  93. wpas.dump_monitor()
  94. logger.info("Form a P2P group while connecting to an AP")
  95. wpas.request("SET p2p_no_group_iface 0")
  96. [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_freq=2412,
  97. r_dev=wpas, r_freq=2412)
  98. check_grpform_results(i_res, r_res)
  99. remove_group(dev[0], wpas)
  100. wpas.dump_monitor()
  101. logger.info("Confirm AP connection after P2P group removal")
  102. hwsim_utils.test_connectivity(wpas, hapd)
  103. wpas.request("DISCONNECT")
  104. wpas.wait_disconnected()
  105. wpas.dump_monitor()
  106. def test_connect_cmd_reject_assoc(dev, apdev):
  107. """Connection using cfg80211 connect command getting rejected"""
  108. params = { "ssid": "sta-connect",
  109. "require_ht": "1" }
  110. hostapd.add_ap(apdev[0]['ifname'], params)
  111. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  112. wpas.interface_add("wlan5", drv_params="force_connect_cmd=1")
  113. wpas.connect("sta-connect", key_mgmt="NONE", scan_freq="2412",
  114. disable_ht="1", wait_connect=False)
  115. # Reject event gets reported twice since we force connect command to be used
  116. # with a driver that supports auth+assoc for testing purposes.
  117. for i in range(0, 2):
  118. ev = wpas.wait_event(["CTRL-EVENT-ASSOC-REJECT"], timeout=15)
  119. if ev is None:
  120. raise Exception("Association rejection timed out")
  121. if "status_code=27" not in ev:
  122. raise Exception("Unexpected rejection status code")
  123. wpas.request("DISCONNECT")
  124. wpas.dump_monitor()
  125. def test_connect_cmd_disconnect_event(dev, apdev):
  126. """Connection using cfg80211 connect command getting disconnected by the AP"""
  127. params = { "ssid": "sta-connect" }
  128. hapd = hostapd.add_ap(apdev[0]['ifname'], params)
  129. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  130. wpas.interface_add("wlan5", drv_params="force_connect_cmd=1")
  131. wpas.connect("sta-connect", key_mgmt="NONE", scan_freq="2412")
  132. if "OK" not in hapd.request("DEAUTHENTICATE " + wpas.p2p_interface_addr()):
  133. raise Exception("DEAUTHENTICATE command failed")
  134. ev = wpas.wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=5)
  135. if ev is None:
  136. raise Exception("Disconnection event timed out")
  137. # This event was actually based on deauthenticate event since we force
  138. # connect command to be used with a driver that supports auth+assoc for
  139. # testing purposes. Anyway, wait some time to allow the debug log to capture
  140. # the following NL80211_CMD_DISCONNECT event.
  141. time.sleep(0.1)
  142. wpas.dump_monitor()
  143. def test_connect_cmd_roam(dev, apdev):
  144. """cfg80211 connect command to trigger roam"""
  145. params = { "ssid": "sta-connect" }
  146. hostapd.add_ap(apdev[0]['ifname'], params)
  147. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  148. wpas.interface_add("wlan5", drv_params="force_connect_cmd=1")
  149. wpas.connect("sta-connect", key_mgmt="NONE", scan_freq="2412")
  150. wpas.dump_monitor()
  151. hostapd.add_ap(apdev[1]['ifname'], params)
  152. wpas.scan_for_bss(apdev[1]['bssid'], freq=2412, force_scan=True)
  153. wpas.roam(apdev[1]['bssid'])
  154. time.sleep(0.1)
  155. wpas.request("DISCONNECT")
  156. wpas.wait_disconnected()
  157. wpas.dump_monitor()