diff --git a/autotests/testMFP-Options/IWD-MFP0/iwd.conf b/autotests/testMFP-Options/IWD-MFP0/iwd.conf new file mode 100644 index 00000000..f0a25a6c --- /dev/null +++ b/autotests/testMFP-Options/IWD-MFP0/iwd.conf @@ -0,0 +1,2 @@ +[General] +ManagementFrameProtection=0 diff --git a/autotests/testMFP-Options/IWD-MFP1/iwd.conf b/autotests/testMFP-Options/IWD-MFP1/iwd.conf new file mode 100644 index 00000000..c26f23cb --- /dev/null +++ b/autotests/testMFP-Options/IWD-MFP1/iwd.conf @@ -0,0 +1,2 @@ +[General] +ManagementFrameProtection=1 diff --git a/autotests/testMFP-Options/IWD-MFP2/iwd.conf b/autotests/testMFP-Options/IWD-MFP2/iwd.conf new file mode 100644 index 00000000..754f5d85 --- /dev/null +++ b/autotests/testMFP-Options/IWD-MFP2/iwd.conf @@ -0,0 +1,2 @@ +[General] +ManagementFrameProtection=2 diff --git a/autotests/testMFP-Options/connection_test.py b/autotests/testMFP-Options/connection_test.py new file mode 100644 index 00000000..1f80cb87 --- /dev/null +++ b/autotests/testMFP-Options/connection_test.py @@ -0,0 +1,109 @@ +#!/usr/bin/python3 + +import unittest +import sys + +sys.path.append('../util') +import iwd +from iwd import IWD +from iwd import PSKAgent +from iwd import NetworkType + +class TestMFP(unittest.TestCase): + ''' + The bellow test cases excesise the following MFP option setting scenarios: + + IWD_MFP: AP_MFP: Result: + 0 0 No MFP, connection succeeds + 0 1 No MFP, connection succeeds + 0 2 Not capable error + 1 0 No MFP, connection succeeds + 1 1 MFP enabled, connection succeeds + 1 2 MFP enabled, connection succeeds + 2 0 Not capable error + 2 1 MFP enabled, connection succeeds + 2 2 MFP enabled, connection succeeds + + where: + 0 - MFP is disabled + 1 - MFP is optional + 2 - MFP is required + ''' + + def check_mfp_connection(self, wd, device, ssid, throws_exception): + ordered_networks = device.get_ordered_networks() + ordered_network = None + + for o_n in ordered_networks: + if o_n.name == ssid: + ordered_network = o_n + break + + self.assertEqual(ordered_network.name, ssid) + + condition = 'not obj.connected' + wd.wait_for_object_condition(ordered_network.network_object, condition) + + if throws_exception: + with self.assertRaises(iwd.NotSupportedEx): + ordered_network.network_object.connect() + return + else: + ordered_network.network_object.connect() + + condition = 'obj.connected' + wd.wait_for_object_condition(ordered_network.network_object, condition) + + device.disconnect() + + condition = 'not obj.connected' + wd.wait_for_object_condition(ordered_network.network_object, condition) + + def stage_iwd(self, config_dir): + + wd = IWD(True, config_dir) + + psk_agent = PSKAgent("secret123") + wd.register_psk_agent(psk_agent) + + devices = wd.list_devices(); + self.assertIsNotNone(devices) + device = devices[0] + + condition = 'not obj.scanning' + wd.wait_for_object_condition(device, condition) + + device.scan() + + condition = 'not obj.scanning' + wd.wait_for_object_condition(device, condition) + + if config_dir == '/tmp/IWD-MFP2': + self.check_mfp_connection(wd, device, 'ssidMFP0', True) + else: + self.check_mfp_connection(wd, device, 'ssidMFP0', False) + + self.check_mfp_connection(wd, device, 'ssidMFP1', False) + + if config_dir == '/tmp/IWD-MFP0': + self.check_mfp_connection(wd, device, 'ssidMFP2', True) + else: + self.check_mfp_connection(wd, device, 'ssidMFP2', False) + + wd.unregister_psk_agent(psk_agent) + + del wd + + IWD.clear_storage() + + def test_iwd_mfp0(self): + self.stage_iwd('/tmp/IWD-MFP0') + + def test_iwd_mfp1(self): + self.stage_iwd('/tmp/IWD-MFP1') + + def test_iwd_mfp2(self): + self.stage_iwd('/tmp/IWD-MFP2') + +if __name__ == '__main__': + unittest.main(exit=True) diff --git a/autotests/testMFP-Options/hw.conf b/autotests/testMFP-Options/hw.conf new file mode 100644 index 00000000..cdeb0dfa --- /dev/null +++ b/autotests/testMFP-Options/hw.conf @@ -0,0 +1,10 @@ +[SETUP] +num_radios=4 +start_iwd=0 +max_test_exec_interval_sec=50 +tmpfs_extra_stuff=IWD-MFP0:IWD-MFP1:IWD-MFP2 + +[HOSTAPD] +rad0=ssidMFP0.conf +rad1=ssidMFP1.conf +rad2=ssidMFP2.conf diff --git a/autotests/testMFP-Options/ssidMFP0.conf b/autotests/testMFP-Options/ssidMFP0.conf new file mode 100644 index 00000000..b05e6cda --- /dev/null +++ b/autotests/testMFP-Options/ssidMFP0.conf @@ -0,0 +1,10 @@ +hw_mode=g +channel=1 +ssid=ssidMFP0 + +wpa=2 +wpa_pairwise=CCMP +wpa_passphrase=secret123 + +ieee80211w=0 +wpa_key_mgmt=WPA-PSK-SHA256 diff --git a/autotests/testMFP-Options/ssidMFP1.conf b/autotests/testMFP-Options/ssidMFP1.conf new file mode 100644 index 00000000..3def19d1 --- /dev/null +++ b/autotests/testMFP-Options/ssidMFP1.conf @@ -0,0 +1,10 @@ +hw_mode=g +channel=1 +ssid=ssidMFP1 + +wpa=2 +wpa_pairwise=CCMP +wpa_passphrase=secret123 + +ieee80211w=1 +wpa_key_mgmt=WPA-PSK-SHA256 diff --git a/autotests/testMFP-Options/ssidMFP2.conf b/autotests/testMFP-Options/ssidMFP2.conf new file mode 100644 index 00000000..aa276cd2 --- /dev/null +++ b/autotests/testMFP-Options/ssidMFP2.conf @@ -0,0 +1,10 @@ +hw_mode=g +channel=1 +ssid=ssidMFP2 + +wpa=2 +wpa_pairwise=CCMP +wpa_passphrase=secret123 + +ieee80211w=2 +wpa_key_mgmt=WPA-PSK-SHA256