]> git.ipfire.org Git - thirdparty/hostap.git/blame - tests/hwsim/test_ap_pmf.py
tests: Pass AP devices to test cases
[thirdparty/hostap.git] / tests / hwsim / test_ap_pmf.py
CommitLineData
835a546b
JM
1#!/usr/bin/python
2#
3# Protected management frames tests
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
15import hostapd
16from wlantest import Wlantest
17
ae3ad328 18def test_ap_pmf_required(dev, apdev):
835a546b
JM
19 """WPA2-PSK AP with PMF required"""
20 ssid = "test-pmf-required"
21 wt = Wlantest()
22 wt.flush()
23 wt.add_passphrase("12345678")
24 params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
25 params["wpa_key_mgmt"] = "WPA-PSK-SHA256";
26 params["ieee80211w"] = "2";
ae3ad328
JM
27 hostapd.add_ap(apdev[0]['ifname'], params)
28 dev[0].connect(ssid, psk="12345678", ieee80211w="1",
29 key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
30 hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
31 dev[1].connect(ssid, psk="12345678", ieee80211w="2",
32 key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
33 hwsim_utils.test_connectivity(dev[1].ifname, apdev[0]['ifname'])
34 hapd = hostapd.Hostapd(apdev[0]['ifname'])
5b06bdf7
JM
35 hapd.request("SA_QUERY " + dev[0].p2p_interface_addr())
36 hapd.request("SA_QUERY " + dev[1].p2p_interface_addr())
ae3ad328
JM
37 wt.require_ap_pmf_mandatory(apdev[0]['bssid'])
38 wt.require_sta_pmf(apdev[0]['bssid'], dev[0].p2p_interface_addr())
39 wt.require_sta_pmf_mandatory(apdev[0]['bssid'], dev[1].p2p_interface_addr())
5b06bdf7 40 time.sleep(0.1)
ae3ad328 41 if wt.get_sta_counter("valid_saqueryresp_tx", apdev[0]['bssid'],
5b06bdf7
JM
42 dev[0].p2p_interface_addr()) < 1:
43 raise Exception("STA did not reply to SA Query")
ae3ad328 44 if wt.get_sta_counter("valid_saqueryresp_tx", apdev[0]['bssid'],
5b06bdf7
JM
45 dev[1].p2p_interface_addr()) < 1:
46 raise Exception("STA did not reply to SA Query")
835a546b 47
ae3ad328 48def test_ap_pmf_optional(dev, apdev):
835a546b
JM
49 """WPA2-PSK AP with PMF optional"""
50 ssid = "test-pmf-optional"
51 wt = Wlantest()
52 wt.flush()
53 wt.add_passphrase("12345678")
54 params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
55 params["wpa_key_mgmt"] = "WPA-PSK";
56 params["ieee80211w"] = "1";
ae3ad328
JM
57 hostapd.add_ap(apdev[0]['ifname'], params)
58 dev[0].connect(ssid, psk="12345678", ieee80211w="1",
59 key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
60 hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
61 dev[1].connect(ssid, psk="12345678", ieee80211w="2",
62 key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
63 hwsim_utils.test_connectivity(dev[1].ifname, apdev[0]['ifname'])
64 wt.require_ap_pmf_optional(apdev[0]['bssid'])
65 wt.require_sta_pmf(apdev[0]['bssid'], dev[0].p2p_interface_addr())
66 wt.require_sta_pmf_mandatory(apdev[0]['bssid'], dev[1].p2p_interface_addr())
835a546b 67
ae3ad328 68def test_ap_pmf_optional_2akm(dev, apdev):
835a546b
JM
69 """WPA2-PSK AP with PMF optional (2 AKMs)"""
70 ssid = "test-pmf-optional-2akm"
71 wt = Wlantest()
72 wt.flush()
73 wt.add_passphrase("12345678")
74 params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
75 params["wpa_key_mgmt"] = "WPA-PSK WPA-PSK-SHA256";
76 params["ieee80211w"] = "1";
ae3ad328
JM
77 hostapd.add_ap(apdev[0]['ifname'], params)
78 dev[0].connect(ssid, psk="12345678", ieee80211w="1",
79 key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
80 hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
81 dev[1].connect(ssid, psk="12345678", ieee80211w="2",
82 key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
83 hwsim_utils.test_connectivity(dev[1].ifname, apdev[0]['ifname'])
84 wt.require_ap_pmf_optional(apdev[0]['bssid'])
85 wt.require_sta_pmf(apdev[0]['bssid'], dev[0].p2p_interface_addr())
86 wt.require_sta_key_mgmt(apdev[0]['bssid'], dev[0].p2p_interface_addr(),
87 "PSK-SHA256")
88 wt.require_sta_pmf_mandatory(apdev[0]['bssid'], dev[1].p2p_interface_addr())
89 wt.require_sta_key_mgmt(apdev[0]['bssid'], dev[1].p2p_interface_addr(),
90 "PSK-SHA256")
835a546b 91
ae3ad328 92def test_ap_pmf_negative(dev, apdev):
835a546b
JM
93 """WPA2-PSK AP without PMF (negative test)"""
94 ssid = "test-pmf-negative"
95 wt = Wlantest()
96 wt.flush()
97 wt.add_passphrase("12345678")
98 params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678")
ae3ad328
JM
99 hostapd.add_ap(apdev[0]['ifname'], params)
100 dev[0].connect(ssid, psk="12345678", ieee80211w="1",
101 key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
102 hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
835a546b 103 try:
ae3ad328
JM
104 dev[1].connect(ssid, psk="12345678", ieee80211w="2",
105 key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2")
106 hwsim_utils.test_connectivity(dev[1].ifname, apdev[0]['ifname'])
835a546b
JM
107 raise Exception("PMF required STA connected to no PMF AP")
108 except Exception, e:
109 logger.debug("Ignore expected exception: " + str(e))
ae3ad328 110 wt.require_ap_no_pmf(apdev[0]['bssid'])