Merge "[WifiBaseTest] Add support for Wifi Enterprise in hostapd"
diff --git a/acts/framework/acts/controllers/ap_lib/hostapd_ap_preset.py b/acts/framework/acts/controllers/ap_lib/hostapd_ap_preset.py
index 6088903..9120725 100644
--- a/acts/framework/acts/controllers/ap_lib/hostapd_ap_preset.py
+++ b/acts/framework/acts/controllers/ap_lib/hostapd_ap_preset.py
@@ -54,8 +54,8 @@
# The Onhub uses wlan0, wlan1 as the WAN interfaces, while the Gale uses
# wlan-2400mhz, wlan-5000mhz.
- if iface_wlan_2g not in hotapd_constants.INTERFACE_2G_LIST or \
- iface_wlan_5g not in hotapd_constants.INTERFACE_5G_LIST:
+ if iface_wlan_2g not in hostapd_constants.INTERFACE_2G_LIST or \
+ iface_wlan_5g not in hostapd_constants.INTERFACE_5G_LIST:
raise ValueError('Incorrect interface name was passed.')
force_wmm = None
diff --git a/acts/framework/acts/controllers/ap_lib/hostapd_config.py b/acts/framework/acts/controllers/ap_lib/hostapd_config.py
index bfc0ca3..2d39875 100644
--- a/acts/framework/acts/controllers/ap_lib/hostapd_config.py
+++ b/acts/framework/acts/controllers/ap_lib/hostapd_config.py
@@ -455,7 +455,7 @@
self._scenario_name = scenario_name
self._min_streams = min_streams
- self._bss_lookup = {}
+ self._bss_lookup = collections.OrderedDict()
for bss in bss_settings:
if bss.name in self._bss_lookup:
raise ValueError('Cannot have multiple bss settings with the'
diff --git a/acts/framework/acts/controllers/ap_lib/hostapd_constants.py b/acts/framework/acts/controllers/ap_lib/hostapd_constants.py
index 3d3f233..a5e3b2d 100755
--- a/acts/framework/acts/controllers/ap_lib/hostapd_constants.py
+++ b/acts/framework/acts/controllers/ap_lib/hostapd_constants.py
@@ -22,6 +22,7 @@
WPA1 = 1
WPA2 = 2
MIXED = 3
+ENT = 4 # get the correct constant
MAX_WPA_PSK_LENGTH = 64
MIN_WPA_PSK_LENGTH = 8
WPA_STRICT_REKEY = 1
@@ -32,6 +33,9 @@
WPA_STRING = 'wpa'
WPA2_STRING = 'wpa2'
WPA_MIXED_STRING = 'wpa/wpa2'
+ENT_STRING = 'ent'
+ENT_KEY_MGMT = 'WPA-EAP'
+IEEE8021X = 1
WLAN0_STRING = 'wlan0'
WLAN1_STRING = 'wlan1'
WLAN2_STRING = 'wlan2'
diff --git a/acts/framework/acts/controllers/ap_lib/hostapd_security.py b/acts/framework/acts/controllers/ap_lib/hostapd_security.py
index 6e0ecce..47d41fe 100644
--- a/acts/framework/acts/controllers/ap_lib/hostapd_security.py
+++ b/acts/framework/acts/controllers/ap_lib/hostapd_security.py
@@ -30,7 +30,10 @@
wpa2_cipher=hostapd_constants.WPA2_DEFAULT_CIPER,
wpa_group_rekey=hostapd_constants.WPA_GROUP_KEY_ROTATION_TIME,
wpa_strict_rekey=hostapd_constants.WPA_STRICT_REKEY_DEFAULT,
- wep_default_key=hostapd_constants.WEP_DEFAULT_KEY):
+ wep_default_key=hostapd_constants.WEP_DEFAULT_KEY,
+ radius_server_ip=None,
+ radius_server_port=None,
+ radius_server_secret=None):
"""Gather all of the security settings for WPA-PSK. This could be
expanded later.
@@ -53,12 +56,18 @@
Options: True, False
Default: True
wep_default_key: The wep key number to use when transmitting.
+ radius_server_ip: Radius server IP for Enterprise auth.
+ radius_server_port: Radius server port for Enterprise auth.
+ radius_server_secret: Radius server secret for Enterprise auth.
"""
self.wpa_cipher = wpa_cipher
self.wpa2_cipher = wpa2_cipher
self.wpa_group_rekey = wpa_group_rekey
self.wpa_strict_rekey = wpa_strict_rekey
self.wep_default_key = wep_default_key
+ self.radius_server_ip = radius_server_ip
+ self.radius_server_port = radius_server_port
+ self.radius_server_secret = radius_server_secret
if security_mode == hostapd_constants.WPA_STRING:
security_mode = hostapd_constants.WPA1
elif security_mode == hostapd_constants.WPA2_STRING:
@@ -67,6 +76,8 @@
security_mode = hostapd_constants.MIXED
elif security_mode == hostapd_constants.WEP_STRING:
security_mode = hostapd_constants.WEP
+ elif security_mode == hostapd_constants.ENT_STRING:
+ security_mode = hostapd_constants.ENT
else:
security_mode = None
self.security_mode = security_mode
@@ -96,6 +107,13 @@
if self.security_mode == hostapd_constants.WEP:
settings['wep_default_key'] = self.wep_default_key
settings['wep_key' + str(self.wep_default_key)] = self.password
+ elif self.security_mode == hostapd_constants.ENT:
+ settings['auth_server_addr'] = self.radius_server_ip
+ settings['auth_server_port'] = self.radius_server_port
+ settings['auth_server_shared_secret'] = self.radius_server_secret
+ settings['wpa_key_mgmt'] = hostapd_constants.ENT_KEY_MGMT
+ settings['ieee8021x'] = hostapd_constants.IEEE8021X
+ settings['wpa'] = hostapd_constants.WPA2
else:
settings['wpa'] = self.security_mode
if len(self.password) == hostapd_constants.MAX_WPA_PSK_LENGTH:
diff --git a/acts/framework/acts/test_utils/wifi/WifiBaseTest.py b/acts/framework/acts/test_utils/wifi/WifiBaseTest.py
index 526673e..4101571e 100755
--- a/acts/framework/acts/test_utils/wifi/WifiBaseTest.py
+++ b/acts/framework/acts/test_utils/wifi/WifiBaseTest.py
@@ -259,6 +259,8 @@
self.wpa_networks[ap_instance][band]["bssid"] = bssid
if network["security"] == hostapd_constants.WEP_STRING:
self.wep_networks[ap_instance][band]["bssid"] = bssid
+ if network["security"] == hostapd_constants.ENT_STRING:
+ self.ent_networks[ap_instance][band]["bssid"] = bssid
if network["security"] == 'none':
self.open_network[ap_instance][band]["bssid"] = bssid
@@ -303,6 +305,9 @@
mirror_ap=True,
wpa_network=False,
wep_network=False,
+ ent_network=False,
+ radius_conf_2g=None,
+ radius_conf_5g=None,
ap_count=1):
asserts.assert_true(
len(self.user_params["AccessPoint"]) == 2,
@@ -327,6 +332,8 @@
self.user_params["wpa_networks"] = []
if wep_network:
self.user_params["wep_networks"] = []
+ if ent_network:
+ self.user_params["ent_networks"] = []
for count in range(config_count):
@@ -388,6 +395,21 @@
network_list_2g.append(networks_dict["2g"])
network_list_5g.append(networks_dict["5g"])
+ if ent_network:
+ networks_dict = self.get_open_network(
+ mirror_ap,
+ self.user_params["ent_networks"],
+ hidden=hidden,
+ same_ssid=same_ssid)
+ networks_dict["2g"]["security"] = hostapd_constants.ENT_STRING
+ networks_dict["2g"].update(radius_conf_2g)
+ networks_dict["5g"]["security"] = hostapd_constants.ENT_STRING
+ networks_dict["5g"].update(radius_conf_5g)
+ self.ent_networks = self.user_params["ent_networks"]
+
+ network_list_2g.append(networks_dict["2g"])
+ network_list_5g.append(networks_dict["5g"])
+
orig_network_list_5g = copy.copy(network_list_5g)
orig_network_list_2g = copy.copy(network_list_2g)
@@ -437,6 +459,17 @@
security=hostapd_security.Security(
security_mode=network["security"],
password=network["wepKeys"][0])))
+ elif network["security"] == hostapd_constants.ENT_STRING:
+ bss_settings.append(
+ hostapd_bss_settings.BssSettings(
+ name=network["SSID"],
+ ssid=network["SSID"],
+ hidden=network["hiddenSSID"],
+ security=hostapd_security.Security(
+ security_mode=network["security"],
+ radius_server_ip=network["radius_server_ip"],
+ radius_server_port=network["radius_server_port"],
+ radius_server_secret=network["radius_server_secret"])))
else:
bss_settings.append(
hostapd_bss_settings.BssSettings(