test_ap_wpa2.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #!/usr/bin/python
  2. #
  3. # Tests with a WPA2-PSK AP
  4. # Copyright (c) 2013, Jouni Malinen <j@w1.fi>
  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 subprocess
  10. import logging
  11. logger = logging.getLogger(__name__)
  12. import hwsim_utils
  13. def connect_sta(sta):
  14. logger.info("Connect STA " + sta.ifname + " to AP")
  15. id = sta.add_network()
  16. sta.set_network_quoted(id, "ssid", "test-wpa2-psk")
  17. sta.set_network_quoted(id, "psk", "12345678")
  18. sta.connect_network(id)
  19. def connect_2sta(dev):
  20. connect_sta(dev[0])
  21. connect_sta(dev[1])
  22. hwsim_utils.test_connectivity_sta(dev[0], dev[1])
  23. hwsim_utils.test_connectivity(dev[0].ifname, "wlan2")
  24. hwsim_utils.test_connectivity(dev[1].ifname, "wlan2")
  25. def test_ap_wpa2_psk_2sta(dev):
  26. """WPA2-PSK AP and two stations"""
  27. connect_2sta(dev)
  28. def wlantest_tdls(field, bssid, addr1, addr2):
  29. res = subprocess.check_output(["../../wlantest/wlantest_cli",
  30. "get_tdls_counter", field, bssid, addr1,
  31. addr2]);
  32. if "FAIL" in res:
  33. raise Exception("wlantest_cli command failed")
  34. return int(res)
  35. def wlantest_tdls_clear(bssid, addr1, addr2):
  36. subprocess.call(["../../wlantest/wlantest_cli",
  37. "clear_tdls_counters", bssid, addr1, addr2]);
  38. def wlantest_setup():
  39. subprocess.call(["../../wlantest/wlantest_cli", "flush"]);
  40. subprocess.call(["../../wlantest/wlantest_cli", "add_passphrase",
  41. "12345678"]);
  42. def setup_tdls(sta0, sta1, bssid, reverse=False):
  43. logger.info("Setup TDLS")
  44. addr0 = sta0.p2p_interface_addr()
  45. addr1 = sta1.p2p_interface_addr()
  46. sta0.tdls_setup(addr1)
  47. time.sleep(1)
  48. if reverse:
  49. addr1 = sta0.p2p_interface_addr()
  50. addr0 = sta1.p2p_interface_addr()
  51. hwsim_utils.test_connectivity_sta(sta0, sta1)
  52. conf = wlantest_tdls("setup_conf_ok", bssid, addr0, addr1);
  53. if conf == 0:
  54. raise Exception("No TDLS Setup Confirm (success) seen")
  55. dl = wlantest_tdls("valid_direct_link", bssid, addr0, addr1);
  56. if dl == 0:
  57. raise Exception("No valid frames through direct link")
  58. wlantest_tdls_clear(bssid, addr0, addr1);
  59. def teardown_tdls(sta0, sta1, bssid):
  60. logger.info("Teardown TDLS")
  61. addr0 = sta0.p2p_interface_addr()
  62. addr1 = sta1.p2p_interface_addr()
  63. sta0.tdls_teardown(addr1)
  64. time.sleep(1)
  65. teardown = wlantest_tdls("teardown", bssid, addr0, addr1);
  66. if teardown == 0:
  67. raise Exception("No TDLS Setup Teardown seen")
  68. wlantest_tdls_clear(bssid, addr0, addr1);
  69. hwsim_utils.test_connectivity_sta(sta0, sta1)
  70. ap_path = wlantest_tdls("valid_ap_path", bssid, addr0, addr1);
  71. if ap_path == 0:
  72. raise Exception("No valid frames via AP path")
  73. direct_link = wlantest_tdls("valid_direct_link", bssid, addr0, addr1);
  74. if direct_link > 0:
  75. raise Exception("Unexpected frames through direct link")
  76. idirect_link = wlantest_tdls("invalid_direct_link", bssid, addr0, addr1);
  77. if idirect_link > 0:
  78. raise Exception("Unexpected frames through direct link (invalid)")
  79. def test_ap_wpa2_tdls(dev):
  80. """WPA2-PSK AP and two stations using TDLS"""
  81. bssid = "02:00:00:00:02:00"
  82. wlantest_setup()
  83. connect_2sta(dev)
  84. setup_tdls(dev[0], dev[1], bssid)
  85. teardown_tdls(dev[0], dev[1], bssid)
  86. setup_tdls(dev[1], dev[0], bssid)
  87. #teardown_tdls(dev[0], dev[1], bssid)
  88. def test_ap_wpa2_tdls_concurrent_init(dev):
  89. """Concurrent TDLS setup initiation"""
  90. bssid = "02:00:00:00:02:00"
  91. wlantest_setup()
  92. connect_2sta(dev)
  93. dev[0].request("SET tdls_testing 0x80")
  94. setup_tdls(dev[1], dev[0], bssid, reverse=True)
  95. def test_ap_wpa2_tdls_concurrent_init2(dev):
  96. """Concurrent TDLS setup initiation (reverse)"""
  97. bssid = "02:00:00:00:02:00"
  98. wlantest_setup()
  99. connect_2sta(dev)
  100. dev[1].request("SET tdls_testing 0x80")
  101. setup_tdls(dev[0], dev[1], bssid)
  102. def add_tests(tests):
  103. tests.append(test_ap_wpa2_psk_2sta)
  104. tests.append(test_ap_wpa2_tdls)
  105. tests.append(test_ap_wpa2_tdls_concurrent_init)
  106. tests.append(test_ap_wpa2_tdls_concurrent_init2)