]> git.ipfire.org Git - thirdparty/hostap.git/blame - tests/hwsim/test_ap_wpa2.py
tests: Use more thorough validation of TDLS frame paths
[thirdparty/hostap.git] / tests / hwsim / test_ap_wpa2.py
CommitLineData
81266da7
JM
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
9import time
10import subprocess
11import logging
12logger = logging.getLogger(__name__)
13
14import hwsim_utils
15
16def connect_sta(sta):
17 logger.info("Connect STA " + sta.ifname + " to AP")
18 id = sta.add_network()
19 sta.set_network_quoted(id, "ssid", "test-wpa2-psk")
20 sta.set_network_quoted(id, "psk", "12345678")
21 sta.connect_network(id)
22
23def connect_2sta(dev):
24 connect_sta(dev[0])
25 connect_sta(dev[1])
26 hwsim_utils.test_connectivity_sta(dev[0], dev[1])
27 hwsim_utils.test_connectivity(dev[0].ifname, "wlan2")
28 hwsim_utils.test_connectivity(dev[1].ifname, "wlan2")
29
30def test_ap_wpa2_psk_2sta(dev):
31 """WPA2-PSK AP and two stations"""
32 connect_2sta(dev)
33
34def wlantest_tdls(field, bssid, addr1, addr2):
35 res = subprocess.check_output(["../../wlantest/wlantest_cli",
36 "get_tdls_counter", field, bssid, addr1,
37 addr2]);
38 if "FAIL" in res:
39 raise Exception("wlantest_cli command failed")
40 return int(res)
41
42def wlantest_tdls_clear(bssid, addr1, addr2):
43 subprocess.call(["../../wlantest/wlantest_cli",
44 "clear_tdls_counters", bssid, addr1, addr2]);
45
46def wlantest_setup():
47 subprocess.call(["../../wlantest/wlantest_cli", "flush"]);
48 subprocess.call(["../../wlantest/wlantest_cli", "add_passphrase",
49 "12345678"]);
50
dc4e222c
JM
51def wlantest_tdls_packet_counters(bssid, addr0, addr1):
52 dl = wlantest_tdls("valid_direct_link", bssid, addr0, addr1);
53 inv_dl = wlantest_tdls("invalid_direct_link", bssid, addr0, addr1);
54 ap = wlantest_tdls("valid_ap_path", bssid, addr0, addr1);
55 inv_ap = wlantest_tdls("invalid_ap_path", bssid, addr0, addr1);
56 return [dl,inv_dl,ap,inv_ap]
57
58def tdls_check_dl(sta0, sta1, bssid, addr0, addr1):
59 wlantest_tdls_clear(bssid, addr0, addr1);
60 hwsim_utils.test_connectivity_sta(sta0, sta1)
61 [dl,inv_dl,ap,inv_ap] = wlantest_tdls_packet_counters(bssid, addr0, addr1)
62 if dl == 0:
63 raise Exception("No valid frames through direct link")
64 if inv_dl > 0:
65 raise Exception("Invalid frames through direct link")
66 if ap > 0:
67 raise Exception("Unexpected frames through AP path")
68 if inv_ap > 0:
69 raise Exception("Invalid frames through AP path")
70
71def tdls_check_ap(sta0, sta1, bssid, addr0, addr1):
72 wlantest_tdls_clear(bssid, addr0, addr1);
73 hwsim_utils.test_connectivity_sta(sta0, sta1)
74 [dl,inv_dl,ap,inv_ap] = wlantest_tdls_packet_counters(bssid, addr0, addr1)
75 if dl > 0:
76 raise Exception("Unexpected frames through direct link")
77 if inv_dl > 0:
78 raise Exception("Invalid frames through direct link")
79 if ap == 0:
80 raise Exception("No valid frames through AP path")
81 if inv_ap > 0:
82 raise Exception("Invalid frames through AP path")
83
81266da7
JM
84def setup_tdls(sta0, sta1, bssid, reverse=False):
85 logger.info("Setup TDLS")
86 addr0 = sta0.p2p_interface_addr()
87 addr1 = sta1.p2p_interface_addr()
dc4e222c
JM
88 wlantest_tdls_clear(bssid, addr0, addr1);
89 wlantest_tdls_clear(bssid, addr1, addr0);
81266da7
JM
90 sta0.tdls_setup(addr1)
91 time.sleep(1)
92 if reverse:
93 addr1 = sta0.p2p_interface_addr()
94 addr0 = sta1.p2p_interface_addr()
81266da7
JM
95 conf = wlantest_tdls("setup_conf_ok", bssid, addr0, addr1);
96 if conf == 0:
97 raise Exception("No TDLS Setup Confirm (success) seen")
dc4e222c 98 tdls_check_dl(sta0, sta1, bssid, addr0, addr1)
81266da7
JM
99
100def teardown_tdls(sta0, sta1, bssid):
101 logger.info("Teardown TDLS")
102 addr0 = sta0.p2p_interface_addr()
103 addr1 = sta1.p2p_interface_addr()
104 sta0.tdls_teardown(addr1)
105 time.sleep(1)
106 teardown = wlantest_tdls("teardown", bssid, addr0, addr1);
107 if teardown == 0:
108 raise Exception("No TDLS Setup Teardown seen")
dc4e222c 109 tdls_check_ap(sta0, sta1, bssid, addr0, addr1)
81266da7
JM
110
111def test_ap_wpa2_tdls(dev):
112 """WPA2-PSK AP and two stations using TDLS"""
113 bssid = "02:00:00:00:02:00"
114 wlantest_setup()
115 connect_2sta(dev)
116 setup_tdls(dev[0], dev[1], bssid)
117 teardown_tdls(dev[0], dev[1], bssid)
118 setup_tdls(dev[1], dev[0], bssid)
119 #teardown_tdls(dev[0], dev[1], bssid)
120
121def test_ap_wpa2_tdls_concurrent_init(dev):
122 """Concurrent TDLS setup initiation"""
123 bssid = "02:00:00:00:02:00"
124 wlantest_setup()
125 connect_2sta(dev)
126 dev[0].request("SET tdls_testing 0x80")
127 setup_tdls(dev[1], dev[0], bssid, reverse=True)
128
129def test_ap_wpa2_tdls_concurrent_init2(dev):
130 """Concurrent TDLS setup initiation (reverse)"""
131 bssid = "02:00:00:00:02:00"
132 wlantest_setup()
133 connect_2sta(dev)
134 dev[1].request("SET tdls_testing 0x80")
135 setup_tdls(dev[0], dev[1], bssid)
136
137def add_tests(tests):
138 tests.append(test_ap_wpa2_psk_2sta)
139 tests.append(test_ap_wpa2_tdls)
140 tests.append(test_ap_wpa2_tdls_concurrent_init)
141 tests.append(test_ap_wpa2_tdls_concurrent_init2)