test_connect_cmd.py 6.0 KB

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