test_connect_cmd.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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. wpas.request("DISCONNECT")
  25. def test_connect_cmd_wep(dev, apdev):
  26. """WEP Open System using cfg80211 connect command"""
  27. params = { "ssid": "sta-connect-wep", "wep_key0": '"hello"' }
  28. hapd = hostapd.add_ap(apdev[0]['ifname'], params)
  29. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  30. wpas.interface_add("wlan5", drv_params="force_connect_cmd=1")
  31. wpas.connect("sta-connect-wep", key_mgmt="NONE", scan_freq="2412",
  32. wep_key0='"hello"')
  33. hwsim_utils.test_connectivity(wpas, hapd)
  34. wpas.request("DISCONNECT")
  35. def test_connect_cmd_wep_shared(dev, apdev):
  36. """WEP Shared key using cfg80211 connect command"""
  37. params = { "ssid": "sta-connect-wep", "wep_key0": '"hello"',
  38. "auth_algs": "2" }
  39. hapd = hostapd.add_ap(apdev[0]['ifname'], params)
  40. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  41. wpas.interface_add("wlan5", drv_params="force_connect_cmd=1")
  42. id = wpas.connect("sta-connect-wep", key_mgmt="NONE", scan_freq="2412",
  43. auth_alg="SHARED", wep_key0='"hello"')
  44. hwsim_utils.test_connectivity(wpas, hapd)
  45. wpas.request("DISCONNECT")
  46. wpas.remove_network(id)
  47. wpas.connect("sta-connect-wep", key_mgmt="NONE", scan_freq="2412",
  48. auth_alg="OPEN SHARED", wep_key0='"hello"')
  49. hwsim_utils.test_connectivity(wpas, hapd)
  50. wpas.request("DISCONNECT")
  51. def test_connect_cmd_p2p_management(dev, apdev):
  52. """Open connection using cfg80211 connect command and AP using P2P management"""
  53. params = { "ssid": "sta-connect",
  54. "manage_p2p": "1",
  55. "allow_cross_connection": "0" }
  56. hostapd.add_ap(apdev[0]['ifname'], params)
  57. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  58. wpas.interface_add("wlan5", drv_params="force_connect_cmd=1")
  59. wpas.connect("sta-connect", key_mgmt="NONE", scan_freq="2412")
  60. wpas.request("DISCONNECT")
  61. def test_connect_cmd_wpa2_psk(dev, apdev):
  62. """WPA2-PSK connection using cfg80211 connect command"""
  63. params = hostapd.wpa2_params(ssid="sta-connect", passphrase="12345678")
  64. hostapd.add_ap(apdev[0]['ifname'], params)
  65. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  66. wpas.interface_add("wlan5", drv_params="force_connect_cmd=1")
  67. wpas.connect("sta-connect", psk="12345678", scan_freq="2412")
  68. wpas.request("DISCONNECT")
  69. def test_connect_cmd_concurrent_grpform_while_connecting(dev, apdev):
  70. """Concurrent P2P group formation while connecting to an AP using cfg80211 connect command"""
  71. logger.info("Start connection to an infrastructure AP")
  72. hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "test-open" })
  73. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  74. wpas.interface_add("wlan5", drv_params="force_connect_cmd=1")
  75. wpas.connect("test-open", key_mgmt="NONE", wait_connect=False)
  76. logger.info("Form a P2P group while connecting to an AP")
  77. wpas.request("SET p2p_no_group_iface 0")
  78. [i_res, r_res] = go_neg_pin_authorized(i_dev=dev[0], i_freq=2412,
  79. r_dev=wpas, r_freq=2412)
  80. check_grpform_results(i_res, r_res)
  81. remove_group(dev[0], wpas)
  82. logger.info("Confirm AP connection after P2P group removal")
  83. hwsim_utils.test_connectivity(wpas, hapd)
  84. def test_connect_cmd_reject_assoc(dev, apdev):
  85. """Connection using cfg80211 connect command getting rejected"""
  86. params = { "ssid": "sta-connect",
  87. "require_ht": "1" }
  88. hostapd.add_ap(apdev[0]['ifname'], params)
  89. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  90. wpas.interface_add("wlan5", drv_params="force_connect_cmd=1")
  91. wpas.connect("sta-connect", key_mgmt="NONE", scan_freq="2412",
  92. disable_ht="1", wait_connect=False)
  93. # Reject event gets reported twice since we force connect command to be used
  94. # with a driver that supports auth+assoc for testing purposes.
  95. for i in range(0, 2):
  96. ev = wpas.wait_event(["CTRL-EVENT-ASSOC-REJECT"], timeout=15)
  97. if ev is None:
  98. raise Exception("Association rejection timed out")
  99. if "status_code=27" not in ev:
  100. raise Exception("Unexpected rejection status code")
  101. def test_connect_cmd_disconnect_event(dev, apdev):
  102. """Connection using cfg80211 connect command getting disconnected by the AP"""
  103. params = { "ssid": "sta-connect" }
  104. hapd = hostapd.add_ap(apdev[0]['ifname'], params)
  105. wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5')
  106. wpas.interface_add("wlan5", drv_params="force_connect_cmd=1")
  107. wpas.connect("sta-connect", key_mgmt="NONE", scan_freq="2412")
  108. if "OK" not in hapd.request("DEAUTHENTICATE " + wpas.p2p_interface_addr()):
  109. raise Exception("DEAUTHENTICATE command failed")
  110. ev = wpas.wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=5)
  111. if ev is None:
  112. raise Exception("Disconnection event timed out")
  113. # This event was actually based on deauthenticate event since we force
  114. # connect command to be used with a driver that supports auth+assoc for
  115. # testing purposes. Anyway, wait some time to allow the debug log to capture
  116. # the following NL80211_CMD_DISCONNECT event.
  117. time.sleep(0.1)