def setup_ap(self): bss_settings = [] self.access_point = self.access_points[0] network_type = self.user_params["network_type"] if (network_type == "2G"): self.channel = hostapd_constants.AP_DEFAULT_CHANNEL_2G else: self.channel = hostapd_constants.AP_DEFAULT_CHANNEL_5G self.ssid = self.user_params["ssid"] self.security = self.user_params["security"] if self.security == "none": self.config = hostapd_ap_preset.create_ap_preset( channel=self.channel, ssid=self.ssid, bss_settings=bss_settings, profile_name='whirlwind') else: self.passphrase = self.user_params["passphrase"] self.hostapd_security = hostapd_security.Security( security_mode=self.security, password=self.passphrase) self.config = hostapd_ap_preset.create_ap_preset( channel=self.channel, ssid=self.ssid, security=self.hostapd_security, bss_settings=bss_settings, profile_name='whirlwind') self.access_point.start_ap(self.config)
def setup_class(self): super().setup_class() if len(self.fuchsia_devices) < 1: raise signals.TestFailure("No fuchsia devices found.") for fd in self.fuchsia_devices: # Initialize the Policy client controller for each Fuchsia device fd.wlan_policy_lib.wlanCreateClientController() if len(self.access_points) < 1: raise signals.TestFailure("No access points found.") # Prepare the AP self.access_point = self.access_points[0] self.access_point.stop_all_aps() # Generate network params. bss_settings_2g = [] bss_settings_5g = [] open_network = self.get_open_network(False, []) self.open_network_2g = open_network["2g"] self.open_network_5g = open_network["5g"] wpa2_settings = self.get_psk_network(False, []) self.wpa2_network_2g = wpa2_settings["2g"] self.wpa2_network_5g = wpa2_settings["5g"] bss_settings_2g.append( hostapd_bss_settings.BssSettings( name=self.wpa2_network_2g["SSID"], ssid=self.wpa2_network_2g["SSID"], security=hostapd_security.Security( security_mode=self.wpa2_network_2g["security"], password=self.wpa2_network_2g["password"]))) bss_settings_5g.append( hostapd_bss_settings.BssSettings( name=self.wpa2_network_5g["SSID"], ssid=self.wpa2_network_5g["SSID"], security=hostapd_security.Security( security_mode=self.wpa2_network_5g["security"], password=self.wpa2_network_5g["password"]))) self.ap_2g = hostapd_ap_preset.create_ap_preset( iface_wlan_2g=self.access_points[0].wlan_2g, iface_wlan_5g=self.access_points[0].wlan_5g, channel=hostapd_constants.AP_DEFAULT_CHANNEL_2G, ssid=self.open_network_2g["SSID"], bss_settings=bss_settings_2g) self.ap_5g = hostapd_ap_preset.create_ap_preset( iface_wlan_2g=self.access_points[0].wlan_2g, iface_wlan_5g=self.access_points[0].wlan_5g, channel=hostapd_constants.AP_DEFAULT_CHANNEL_5G, ssid=self.open_network_5g["SSID"], bss_settings=bss_settings_5g) # Start the networks self.access_point.start_ap(hostapd_config=self.ap_2g) self.access_point.start_ap(hostapd_config=self.ap_5g) # Save the SSIDs self.all_ssids = [ self.open_network_2g["SSID"], self.wpa2_network_2g["SSID"], self.open_network_5g["SSID"], self.wpa2_network_5g["SSID"], ]
def _generate_legacy_ap_config(self, network_list): bss_settings = [] ap_settings = network_list.pop(0) # TODO:(bmahadev) This is a bug. We should not have to pop the first # network in the list and treat it as a separate case. Instead, # create_ap_preset() should be able to take NULL ssid and security and # build config based on the bss_Settings alone. hostapd_config_settings = network_list.pop(0) for network in network_list: if "password" in network and "hiddenSSID" in network: bss_settings.append( hostapd_bss_settings.BssSettings( name=network["SSID"], ssid=network["SSID"], hidden=True, security=hostapd_security.Security( security_mode=network["security"], password=network["password"]))) elif "password" in network and not "hiddenSSID" in network: bss_settings.append( hostapd_bss_settings.BssSettings( name=network["SSID"], ssid=network["SSID"], security=hostapd_security.Security( security_mode=network["security"], password=network["password"]))) elif not "password" in network and "hiddenSSID" in network: bss_settings.append( hostapd_bss_settings.BssSettings(name=network["SSID"], ssid=network["SSID"], hidden=True)) elif not "password" in network and not "hiddenSSID" in network: bss_settings.append( hostapd_bss_settings.BssSettings(name=network["SSID"], ssid=network["SSID"])) if "password" in hostapd_config_settings: config = hostapd_ap_preset.create_ap_preset( channel=ap_settings["channel"], ssid=hostapd_config_settings["SSID"], security=hostapd_security.Security( security_mode=hostapd_config_settings["security"], password=hostapd_config_settings["password"]), bss_settings=bss_settings, profile_name='whirlwind') else: config = hostapd_ap_preset.create_ap_preset( channel=ap_settings["channel"], ssid=hostapd_config_settings["SSID"], bss_settings=bss_settings, profile_name='whirlwind') return config
def setup_ap(access_point, profile_name, channel, ssid, mode=None, preamble=None, beacon_interval=None, dtim_period=None, frag_threshold=None, rts_threshold=None, force_wmm=None, hidden=False, security=None, additional_ap_parameters=None, password=None, check_connectivity=False, n_capabilities=None, ac_capabilities=None, vht_bandwidth=None, setup_bridge=False): """Sets up the AP. Args: access_point: An ACTS access_point controller profile_name: The profile name of one of the hostapd ap presets. channel: What channel to set the AP to. preamble: Whether to set short or long preamble (True or False) beacon_interval: The beacon interval (int) dtim_period: Length of dtim period (int) frag_threshold: Fragmentation threshold (int) rts_threshold: RTS threshold (int) force_wmm: Enable WMM or not (True or False) hidden: Advertise the SSID or not (True or False) security: What security to enable. additional_ap_parameters: Additional parameters to send the AP. password: Password to connect to WLAN if necessary. check_connectivity: Whether to check for internet connectivity. """ ap = hostapd_ap_preset.create_ap_preset(profile_name=profile_name, iface_wlan_2g=access_point.wlan_2g, iface_wlan_5g=access_point.wlan_5g, channel=channel, ssid=ssid, mode=mode, short_preamble=preamble, beacon_interval=beacon_interval, dtim_period=dtim_period, frag_threshold=frag_threshold, rts_threshold=rts_threshold, force_wmm=force_wmm, hidden=hidden, bss_settings=[], security=security, n_capabilities=n_capabilities, ac_capabilities=ac_capabilities, vht_bandwidth=vht_bandwidth) access_point.start_ap(hostapd_config=ap, setup_bridge=setup_bridge, additional_parameters=additional_ap_parameters)
def ap_setup(ap, network, bandwidth=80): """Set up the whirlwind AP with provided network info. Args: ap: access_point object of the AP network: dict with information of the network, including ssid, password bssid, channel etc. bandwidth: the operation bandwidth for the AP, default 80MHz Returns: brconfigs: the bridge interface configs """ log = logging.getLogger() bss_settings = [] ssid = network[wutils.WifiEnums.SSID_KEY] if "password" in network.keys(): password = network["password"] security = hostapd_security.Security(security_mode="wpa", password=password) else: security = hostapd_security.Security(security_mode=None, password=None) channel = network["channel"] config = hostapd_ap_preset.create_ap_preset(channel=channel, ssid=ssid, security=security, bss_settings=bss_settings, vht_bandwidth=bandwidth, profile_name='whirlwind', iface_wlan_2g=ap.wlan_2g, iface_wlan_5g=ap.wlan_5g) config_bridge = ap.generate_bridge_configs(channel) brconfigs = bi.BridgeInterfaceConfigs(config_bridge[0], config_bridge[1], config_bridge[2]) ap.bridge.startup(brconfigs) ap.start_ap(config) log.info("AP started on channel {} with SSID {}".format(channel, ssid)) return brconfigs
def _generate_legacy_ap_config(self, network_list): bss_settings = [] wlan_2g = self.access_points[AP_1].wlan_2g wlan_5g = self.access_points[AP_1].wlan_5g ap_settings = network_list.pop(0) # TODO:(bmahadev) This is a bug. We should not have to pop the first # network in the list and treat it as a separate case. Instead, # create_ap_preset() should be able to take NULL ssid and security and # build config based on the bss_Settings alone. hostapd_config_settings = network_list.pop(0) for network in network_list: if "password" in network: bss_settings.append( hostapd_bss_settings.BssSettings( name=network["SSID"], ssid=network["SSID"], hidden=network["hiddenSSID"], security=hostapd_security.Security( security_mode=network["security"], password=network["password"]))) elif "wepKeys" in network: bss_settings.append( hostapd_bss_settings.BssSettings( name=network["SSID"], ssid=network["SSID"], hidden=network["hiddenSSID"], 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( name=network["SSID"], ssid=network["SSID"], hidden=network["hiddenSSID"])) if "password" in hostapd_config_settings: config = hostapd_ap_preset.create_ap_preset( iface_wlan_2g=wlan_2g, iface_wlan_5g=wlan_5g, channel=ap_settings["channel"], ssid=hostapd_config_settings["SSID"], hidden=hostapd_config_settings["hiddenSSID"], security=hostapd_security.Security( security_mode=hostapd_config_settings["security"], password=hostapd_config_settings["password"]), bss_settings=bss_settings) elif "wepKeys" in hostapd_config_settings: config = hostapd_ap_preset.create_ap_preset( iface_wlan_2g=wlan_2g, iface_wlan_5g=wlan_5g, channel=ap_settings["channel"], ssid=hostapd_config_settings["SSID"], hidden=hostapd_config_settings["hiddenSSID"], security=hostapd_security.Security( security_mode=hostapd_config_settings["security"], password=hostapd_config_settings["wepKeys"][0]), bss_settings=bss_settings) else: config = hostapd_ap_preset.create_ap_preset( iface_wlan_2g=wlan_2g, iface_wlan_5g=wlan_5g, channel=ap_settings["channel"], ssid=hostapd_config_settings["SSID"], hidden=hostapd_config_settings["hiddenSSID"], bss_settings=bss_settings) return config
def setup_class(self): self.log.info('Setup {cls}'.format(cls=type(self))) if not self.fuchsia_devices: self.log.error( "NetstackFuchsiaTest Init: Not enough fuchsia devices.") self.log.info("Running testbed setup with one fuchsia devices") self.fuchsia_dev = self.fuchsia_devices[0] # We want to bring up several 2GHz and 5GHz BSSes. wifi_bands = ['2g', '5g'] # Currently AP_DEFAULT_CHANNEL_2G is 6 # and AP_DEFAULT_CHANNEL_5G is 36. wifi_channels = [ hostapd_constants.AP_DEFAULT_CHANNEL_2G, hostapd_constants.AP_DEFAULT_CHANNEL_5G ] # Each band will start up an Open BSS (security_mode=None) # and a WPA2 BSS (security_mode=hostapd_constants.WPA2_STRING) security_modes = [None, hostapd_constants.WPA2_STRING] # All secure BSSes will use the same password. wifi_password = rand_ascii_str(10) self.log.info('Wi-Fi password for this test: {wifi_password}'.format( wifi_password=wifi_password)) hostapd_configs = [] wifi_interfaces = {} bss_settings = {} # Build a configuration for each sub-BSSID for band_index, wifi_band in enumerate(wifi_bands): ssid_name = 'Ixia_{wifi_band}_#{bss_number}_{security_mode}' bss_settings[wifi_band] = [] # Prepare the extra SSIDs. for mode_index, security_mode in enumerate(security_modes): # Skip the first SSID because we configure that separately. # due to the way the APIs work. This loop is only concerned # with the sub-BSSIDs. if mode_index == 0: continue bss_name = ssid_name.format(wifi_band=wifi_band, security_mode=security_mode, bss_number=mode_index + 1) bss_setting = hostapd_bss_settings.BssSettings( name=bss_name, ssid=bss_name, security=hostapd_security.Security( security_mode=security_mode, password=wifi_password)) bss_settings[wifi_band].append(bss_setting) # This is the configuration for the first SSID. ssid_name = ssid_name.format(wifi_band=wifi_band, security_mode=security_modes[0], bss_number=1) hostapd_configs.append( hostapd_ap_preset.create_ap_preset( profile_name='whirlwind', iface_wlan_2g='wlan0', iface_wlan_5g='wlan1', ssid=ssid_name, channel=wifi_channels[band_index], security=hostapd_security.Security( security_mode=security_modes[0], password=wifi_password), bss_settings=bss_settings[wifi_band])) access_point = self.access_points[band_index] # Now bring up the AP and track the interfaces we're using for # each BSSID. All BSSIDs are now beaconing. wifi_interfaces[wifi_band] = access_point.start_ap( hostapd_configs[band_index]) # Disable DHCP on this Wi-Fi band. # Note: This also disables DHCP on each sub-BSSID due to how # the APIs are built. # # We need to do this in order to enable IxANVL testing across # Wi-Fi, which needs to configure the IP addresses per-interface # on the client device. access_point.stop_dhcp() # Disable NAT. # NAT config in access_point.py is global at the moment, but # calling it twice (once per band) won't hurt anything. This is # easier than trying to conditionalize per band. # # Note that we could make this per-band, but it would require # refactoring the access_point.py code that turns on NAT, however # if that ever does happen then this code will work as expected # without modification. # # This is also required for IxANVL testing. NAT would interfere # with IxANVL because IxANVL needs to see the raw frames # sourcing/sinking from/to the DUT for protocols such as ARP and # DHCP, but it also needs the MAC/IP of the source and destination # frames and packets to be from the DUT, so we want the AP to act # like a bridge for these tests. access_point.stop_nat() # eth1 is the LAN port, which will always be a part of the bridge. bridge_interfaces = ['eth1'] # This adds each bssid interface to the bridge. for wifi_band in wifi_bands: for wifi_interface in wifi_interfaces[wifi_band]: bridge_interfaces.append(wifi_interface) # Each interface can only be a member of 1 bridge, so we're going to use # the last access_point object to set the bridge up for all interfaces. access_point.create_bridge(bridge_name='ixia_bridge0', interfaces=bridge_interfaces)
def setup_class(self): super().setup_class() self.start_access_point = False if "AccessPoint" in self.user_params: # This section sets up the config that could be sent to the AP if # the AP is needed. The reasoning is since ACTS already connects # to the AP if it is in the config, generating the config in memory # has no over head is used if need by the test if one of the ssids # needed for the test is not included in the config. The logic # here creates 2 ssids on each radio, 5ghz and 2.4ghz, with an # open, no security network and one that is wpa2, for a total of 4 # networks. However, if all of the ssids are specified in the # the config will never be written to the AP and the AP will not be # brought up. For more information about how to configure the # hostapd config info, see the hostapd libraries, which have more # documentation. bss_settings_2g = [] bss_settings_5g = [] open_network = self.get_open_network(False, []) self.open_network_2g = open_network['2g'] self.open_network_5g = open_network['5g'] wpa2_settings = self.get_psk_network(False, []) self.wpa2_network_2g = wpa2_settings['2g'] self.wpa2_network_5g = wpa2_settings['5g'] bss_settings_2g.append( hostapd_bss_settings.BssSettings( name=self.wpa2_network_2g['SSID'], ssid=self.wpa2_network_2g['SSID'], security=hostapd_security.Security( security_mode=self.wpa2_network_2g["security"], password=self.wpa2_network_2g["password"]))) bss_settings_5g.append( hostapd_bss_settings.BssSettings( name=self.wpa2_network_5g['SSID'], ssid=self.wpa2_network_5g['SSID'], security=hostapd_security.Security( security_mode=self.wpa2_network_5g["security"], password=self.wpa2_network_5g["password"]))) self.ap_2g = hostapd_ap_preset.create_ap_preset( iface_wlan_2g=self.access_points[0].wlan_2g, iface_wlan_5g=self.access_points[0].wlan_5g, channel=hostapd_constants.AP_DEFAULT_CHANNEL_2G, ssid=self.open_network_2g['SSID'], bss_settings=bss_settings_2g) self.ap_5g = hostapd_ap_preset.create_ap_preset( iface_wlan_2g=self.access_points[0].wlan_2g, iface_wlan_5g=self.access_points[0].wlan_5g, channel=hostapd_constants.AP_DEFAULT_CHANNEL_5G, ssid=self.open_network_5g['SSID'], bss_settings=bss_settings_5g) if "wlan_open_network_2g" in self.user_params: self.open_network_2g = self.user_params.get("wlan_open_network_2g") elif "AccessPoint" in self.user_params: self.start_access_point_2g = True else: raise Exception('Missing parameter in config ' '(wlan_open_network_2g)') if "wlan_open_network_5g" in self.user_params: self.open_network_5g = self.user_params.get("wlan_open_network_5g") elif "AccessPoint" in self.user_params: self.start_access_point_5g = True else: raise Exception('Missing parameter in config ' '(wlan_open_network_5g)') if "wlan_wpa2_network_2g" in self.user_params: self.wpa2_network_2g = self.user_params.get("wlan_wpa2_network_2g") elif "AccessPoint" in self.user_params: self.start_access_point_2g = True else: raise Exception('Missing parameter in config ' '(wlan_wpa2_network_2g)') if "wlan_wpa2_network_5g" in self.user_params: self.wpa2_network_5g = self.user_params.get("wlan_wpa2_network_5g") elif "AccessPoint" in self.user_params: self.start_access_point_5g = True else: raise Exception('Missing parameter in config ' '(wlan_wpa2_network_5g)') # Only bring up the APs that are needed for the test. Each ssid is # randomly generated so there is no chance of re associating to a # previously saved ssid on the device. if self.start_access_point_2g: self.start_access_point = True self.access_points[0].start_ap(hostapd_config=self.ap_2g) if self.start_access_point_5g: self.start_access_point = True self.access_points[0].start_ap(hostapd_config=self.ap_5g)