Lines Matching refs:iface

67 static int hostapd_setup_encryption(char *iface, struct hostapd_data *hapd);
70 static int setup_interface2(struct hostapd_iface *iface);
81 int (*cb)(struct hostapd_iface *iface, in hostapd_for_each_interface() argument
88 if (!interfaces->iface[i]) in hostapd_for_each_interface()
90 ret = cb(interfaces->iface[i], ctx); in hostapd_for_each_interface()
102 return hapd->iface->bss[0]; in hostapd_mbssid_get_tx_bss()
113 for (i = 1; i < hapd->iface->num_bss; i++) in hostapd_mbssid_get_bss_index()
114 if (hapd->iface->bss[i] == hapd) in hostapd_mbssid_get_bss_index()
129 hostapd_setup_encryption(hapd->conf->iface, hapd); in hostapd_reconfig_encryption()
164 hostapd_set_drv_ieee8021x(hapd, hapd->conf->iface, 1); in hostapd_reload_bss()
166 hostapd_set_drv_ieee8021x(hapd, hapd->conf->iface, 0); in hostapd_reload_bss()
185 hostapd_setup_encryption(hapd->conf->iface, hapd); in hostapd_reload_bss()
201 wpa_printf(MSG_DEBUG, "Reconfigured interface %s", hapd->conf->iface); in hostapd_reload_bss()
208 bss->conf->iface); in hostapd_clear_old_bss()
227 static void hostapd_clear_old(struct hostapd_iface *iface) in hostapd_clear_old() argument
231 for (j = 0; j < iface->num_bss; j++) in hostapd_clear_old()
232 hostapd_clear_old_bss(iface->bss[j]); in hostapd_clear_old()
245 if (os_strcmp(newconf->bss[i]->iface, in hostapd_iface_conf_changed()
246 oldconf->bss[i]->iface) != 0) in hostapd_iface_conf_changed()
254 int hostapd_reload_config(struct hostapd_iface *iface) in hostapd_reload_config() argument
256 struct hapd_interfaces *interfaces = iface->interfaces; in hostapd_reload_config()
257 struct hostapd_data *hapd = iface->bss[0]; in hostapd_reload_config()
261 if (iface->config_fname == NULL) { in hostapd_reload_config()
263 hostapd_clear_old(iface); in hostapd_reload_config()
264 for (j = 0; j < iface->num_bss; j++) in hostapd_reload_config()
265 hostapd_reload_bss(iface->bss[j]); in hostapd_reload_config()
269 if (iface->interfaces == NULL || in hostapd_reload_config()
270 iface->interfaces->config_read_cb == NULL) in hostapd_reload_config()
272 newconf = iface->interfaces->config_read_cb(iface->config_fname); in hostapd_reload_config()
281 hostapd_clear_old(iface); in hostapd_reload_config()
285 fname = os_strdup(iface->config_fname); in hostapd_reload_config()
290 hostapd_remove_iface(interfaces, hapd->conf->iface); in hostapd_reload_config()
291 iface = hostapd_init(interfaces, fname); in hostapd_reload_config()
294 if (!iface) { in hostapd_reload_config()
299 iface->interfaces = interfaces; in hostapd_reload_config()
300 interfaces->iface[interfaces->count] = iface; in hostapd_reload_config()
302 res = hostapd_enable_iface(iface); in hostapd_reload_config()
308 iface->conf = newconf; in hostapd_reload_config()
310 for (j = 0; j < iface->num_bss; j++) { in hostapd_reload_config()
311 hapd = iface->bss[j]; in hostapd_reload_config()
376 hostapd_broadcast_key_clear_iface(hapd, hapd->conf->iface); in hostapd_broadcast_wep_clear()
388 hostapd_drv_set_key(hapd->conf->iface, in hostapd_broadcast_wep_set()
425 hostapd_disable_iface(hapd->iface); in hostapd_link_remove_timeout_handler()
474 __func__, hapd->conf ? hapd->conf->iface : "N/A"); in hostapd_free_hapd_data()
480 wpa_printf(MSG_DEBUG, "%s(%s)", __func__, hapd->conf->iface); in hostapd_free_hapd_data()
488 struct hapd_interfaces *ifaces = hapd->iface->interfaces; in hostapd_free_hapd_data()
492 struct hostapd_iface *iface = ifaces->iface[i]; in hostapd_free_hapd_data() local
495 for (j = 0; iface && j < iface->num_bss; j++) { in hostapd_free_hapd_data()
496 struct hostapd_data *h = iface->bss[j]; in hostapd_free_hapd_data()
529 if (hostapd_if_remove(hapd, WPA_IF_AP_BSS, hapd->conf->iface)) { in hostapd_free_hapd_data()
532 hapd->conf->iface); in hostapd_free_hapd_data()
549 hapd->iface->bss[0] != hapd) in hostapd_free_hapd_data()
550 hostapd_if_link_remove(hapd, WPA_IF_AP_BSS, hapd->conf->iface, in hostapd_free_hapd_data()
636 if (!hapd->started && hapd->iface->bss[0] != hapd) in hostapd_bss_link_deinit()
643 if (hapd->iface->bss[0] == hapd && !hapd->drv_priv) in hostapd_bss_link_deinit()
662 hapd->conf ? hapd->conf->iface : "N/A"); in hostapd_cleanup()
663 if (hapd->iface->interfaces && in hostapd_cleanup()
664 hapd->iface->interfaces->ctrl_iface_deinit) { in hostapd_cleanup()
666 hapd->iface->interfaces->ctrl_iface_deinit(hapd); in hostapd_cleanup()
672 static void sta_track_deinit(struct hostapd_iface *iface) in sta_track_deinit() argument
676 if (!iface->num_sta_seen) in sta_track_deinit()
679 while ((info = dl_list_first(&iface->sta_seen, struct hostapd_sta_info, in sta_track_deinit()
682 iface->num_sta_seen--; in sta_track_deinit()
688 void hostapd_cleanup_iface_partial(struct hostapd_iface *iface) in hostapd_cleanup_iface_partial() argument
690 wpa_printf(MSG_DEBUG, "%s(%p)", __func__, iface); in hostapd_cleanup_iface_partial()
691 eloop_cancel_timeout(channel_list_update_timeout, iface, NULL); in hostapd_cleanup_iface_partial()
693 hostapd_stop_setup_timers(iface); in hostapd_cleanup_iface_partial()
695 if (iface->current_mode) in hostapd_cleanup_iface_partial()
696 acs_cleanup(iface); in hostapd_cleanup_iface_partial()
697 hostapd_free_hw_features(iface->hw_features, iface->num_hw_features); in hostapd_cleanup_iface_partial()
698 iface->hw_features = NULL; in hostapd_cleanup_iface_partial()
699 iface->current_mode = NULL; in hostapd_cleanup_iface_partial()
700 os_free(iface->current_rates); in hostapd_cleanup_iface_partial()
701 iface->current_rates = NULL; in hostapd_cleanup_iface_partial()
702 os_free(iface->basic_rates); in hostapd_cleanup_iface_partial()
703 iface->basic_rates = NULL; in hostapd_cleanup_iface_partial()
704 iface->cac_started = 0; in hostapd_cleanup_iface_partial()
705 ap_list_deinit(iface); in hostapd_cleanup_iface_partial()
706 sta_track_deinit(iface); in hostapd_cleanup_iface_partial()
707 airtime_policy_update_deinit(iface); in hostapd_cleanup_iface_partial()
718 static void hostapd_cleanup_iface(struct hostapd_iface *iface) in hostapd_cleanup_iface() argument
720 wpa_printf(MSG_DEBUG, "%s(%p)", __func__, iface); in hostapd_cleanup_iface()
721 eloop_cancel_timeout(hostapd_interface_setup_failure_handler, iface, in hostapd_cleanup_iface()
724 hostapd_cleanup_iface_partial(iface); in hostapd_cleanup_iface()
725 hostapd_config_free(iface->conf); in hostapd_cleanup_iface()
726 iface->conf = NULL; in hostapd_cleanup_iface()
728 os_free(iface->config_fname); in hostapd_cleanup_iface()
729 os_free(iface->bss); in hostapd_cleanup_iface()
730 wpa_printf(MSG_DEBUG, "%s: free iface=%p", __func__, iface); in hostapd_cleanup_iface()
731 os_free(iface); in hostapd_cleanup_iface()
739 if (hapd->drv_priv && !hapd->iface->driver_ap_teardown && hapd->conf) { in hostapd_clear_wep()
746 static int hostapd_setup_encryption(char *iface, struct hostapd_data *hapd) in hostapd_setup_encryption() argument
765 hostapd_drv_set_key(iface, hapd, WPA_ALG_WEP, NULL, i, 0, in hostapd_setup_encryption()
795 if (!hapd->iface->driver_ap_teardown) { in hostapd_flush_old_stations()
834 static int hostapd_validate_bssid_configuration(struct hostapd_iface *iface) in hostapd_validate_bssid_configuration() argument
837 struct hostapd_data *hapd = iface->bss[0]; in hostapd_validate_bssid_configuration()
838 unsigned int i = iface->conf->num_bss, bits = 0, j; in hostapd_validate_bssid_configuration()
844 if (iface->conf->use_driver_iface_addr) in hostapd_validate_bssid_configuration()
855 for (j = 0; j < iface->conf->num_bss; j++) { in hostapd_validate_bssid_configuration()
856 if (is_zero_ether_addr(iface->conf->bss[j]->bssid)) { in hostapd_validate_bssid_configuration()
864 iface->conf->bss[j]->bssid[i] ^ in hostapd_validate_bssid_configuration()
905 (unsigned long) iface->conf->num_bss, MAC2STR(mask), bits); in hostapd_validate_bssid_configuration()
1398 __func__, hapd, conf->iface, first); in hostapd_setup_bss()
1409 __func__, conf->iface); in hostapd_setup_bss()
1422 hapd->iface->bss[0]->own_addr) == in hostapd_setup_bss()
1426 "the radio", conf->iface); in hostapd_setup_bss()
1449 hapd->mld_link_id, hapd->conf->iface); in hostapd_setup_bss()
1456 if (hostapd_if_add(hapd->iface->bss[0], WPA_IF_AP_BSS, in hostapd_setup_bss()
1457 conf->iface, addr, hapd, in hostapd_setup_bss()
1474 hapd->mld_link_id, hapd->conf->iface); in hostapd_setup_bss()
1507 if ((hapd->conf->mesh & MESH_ENABLED) && hapd->iface->mconf == NULL) in hostapd_setup_bss()
1518 if (hostapd_setup_encryption(conf->iface, hapd)) in hostapd_setup_bss()
1560 conf->iface, MAC2STR(hapd->own_addr), in hostapd_setup_bss()
1731 static void hostapd_tx_queue_params(struct hostapd_iface *iface) in hostapd_tx_queue_params() argument
1733 struct hostapd_data *hapd = iface->bss[0]; in hostapd_tx_queue_params()
1738 if ((hapd->conf->mesh & MESH_ENABLED) && iface->mconf == NULL) in hostapd_tx_queue_params()
1743 p = &iface->conf->tx_queue[i]; in hostapd_tx_queue_params()
1788 if (hapd->iface->drv_max_acl_mac_addrs == 0) in hostapd_set_acl()
1816 if (!hapd->iface->interfaces || in start_ctrl_iface_bss()
1817 !hapd->iface->interfaces->ctrl_iface_init) in start_ctrl_iface_bss()
1820 if (hapd->iface->interfaces->ctrl_iface_init(hapd)) { in start_ctrl_iface_bss()
1823 hapd->conf->iface); in start_ctrl_iface_bss()
1831 static int start_ctrl_iface(struct hostapd_iface *iface) in start_ctrl_iface() argument
1835 if (!iface->interfaces || !iface->interfaces->ctrl_iface_init) in start_ctrl_iface()
1838 for (i = 0; i < iface->num_bss; i++) { in start_ctrl_iface()
1839 struct hostapd_data *hapd = iface->bss[i]; in start_ctrl_iface()
1840 if (iface->interfaces->ctrl_iface_init(hapd)) { in start_ctrl_iface()
1843 hapd->conf->iface); in start_ctrl_iface()
1861 hostapd_cleanup_iface_partial(bss->iface); in hostapd_no_ir_cleanup()
1865 static int hostapd_no_ir_channel_list_updated(struct hostapd_iface *iface, in hostapd_no_ir_channel_list_updated() argument
1872 if (hostapd_get_hw_features(iface)) in hostapd_no_ir_channel_list_updated()
1878 for (i = 0; i < iface->num_hw_features; i++) { in hostapd_no_ir_channel_list_updated()
1879 mode = &iface->hw_features[i]; in hostapd_no_ir_channel_list_updated()
1881 if (mode->mode == iface->conf->hw_mode) { in hostapd_no_ir_channel_list_updated()
1882 if (iface->freq > 0 && in hostapd_no_ir_channel_list_updated()
1883 !hw_mode_get_channel(mode, iface->freq, NULL)) { in hostapd_no_ir_channel_list_updated()
1902 iface->current_mode = mode; in hostapd_no_ir_channel_list_updated()
1904 if (iface->state == HAPD_IFACE_ENABLED) { in hostapd_no_ir_channel_list_updated()
1908 chan = hw_get_channel_freq(iface->current_mode->mode, in hostapd_no_ir_channel_list_updated()
1909 iface->freq, NULL, in hostapd_no_ir_channel_list_updated()
1910 iface->hw_features, in hostapd_no_ir_channel_list_updated()
1911 iface->num_hw_features); in hostapd_no_ir_channel_list_updated()
1928 hostapd_set_state(iface, HAPD_IFACE_NO_IR); in hostapd_no_ir_channel_list_updated()
1929 iface->is_no_ir = true; in hostapd_no_ir_channel_list_updated()
1930 hostapd_drv_stop_ap(iface->bss[0]); in hostapd_no_ir_channel_list_updated()
1931 hostapd_no_ir_cleanup(iface->bss[0]); in hostapd_no_ir_channel_list_updated()
1932 wpa_msg(iface->bss[0]->msg_ctx, MSG_INFO, AP_EVENT_NO_IR); in hostapd_no_ir_channel_list_updated()
1933 } else if (iface->state == HAPD_IFACE_NO_IR) { in hostapd_no_ir_channel_list_updated()
1940 if (!iface->conf->acs) { in hostapd_no_ir_channel_list_updated()
1943 chan = hw_get_channel_freq(iface->current_mode->mode, in hostapd_no_ir_channel_list_updated()
1944 iface->freq, NULL, in hostapd_no_ir_channel_list_updated()
1945 iface->hw_features, in hostapd_no_ir_channel_list_updated()
1946 iface->num_hw_features); in hostapd_no_ir_channel_list_updated()
1956 iface->freq = 0; in hostapd_no_ir_channel_list_updated()
1957 iface->conf->channel = 0; in hostapd_no_ir_channel_list_updated()
1958 if (acs_init(iface) != HOSTAPD_CHAN_ACS) in hostapd_no_ir_channel_list_updated()
1965 setup_interface2(iface); in hostapd_no_ir_channel_list_updated()
1974 struct hostapd_iface *iface = eloop_ctx; in channel_list_update_timeout() local
1976 if (!iface->wait_channel_update) { in channel_list_update_timeout()
1986 setup_interface2(iface); in channel_list_update_timeout()
1990 void hostapd_channel_list_updated(struct hostapd_iface *iface, int initiator) in hostapd_channel_list_updated() argument
1993 hostapd_for_each_interface(iface->interfaces, in hostapd_channel_list_updated()
1999 if (!iface->wait_channel_update || initiator != REGDOM_SET_BY_USER) in hostapd_channel_list_updated()
2003 eloop_cancel_timeout(channel_list_update_timeout, iface, NULL); in hostapd_channel_list_updated()
2004 setup_interface2(iface); in hostapd_channel_list_updated()
2008 static int setup_interface(struct hostapd_iface *iface) in setup_interface() argument
2010 struct hostapd_data *hapd = iface->bss[0]; in setup_interface()
2020 iface->driver_ap_teardown = 0; in setup_interface()
2022 if (!iface->phy[0]) { in setup_interface()
2026 os_strlcpy(iface->phy, phy, sizeof(iface->phy)); in setup_interface()
2034 for (i = 1; i < iface->num_bss; i++) { in setup_interface()
2035 iface->bss[i]->driver = hapd->driver; in setup_interface()
2036 iface->bss[i]->drv_priv = hapd->drv_priv; in setup_interface()
2039 if (hostapd_validate_bssid_configuration(iface)) in setup_interface()
2047 if (start_ctrl_iface(iface)) in setup_interface()
2053 hostapd_set_state(iface, HAPD_IFACE_COUNTRY_UPDATE); in setup_interface()
2069 iface->wait_channel_update = 1; in setup_interface()
2072 iface, NULL); in setup_interface()
2077 return setup_interface2(iface); in setup_interface()
2081 static int configured_fixed_chan_to_freq(struct hostapd_iface *iface) in configured_fixed_chan_to_freq() argument
2085 if (!iface->conf->channel) in configured_fixed_chan_to_freq()
2087 if (iface->conf->op_class) { in configured_fixed_chan_to_freq()
2088 freq = ieee80211_chan_to_freq(NULL, iface->conf->op_class, in configured_fixed_chan_to_freq()
2089 iface->conf->channel); in configured_fixed_chan_to_freq()
2093 iface->conf->op_class, iface->conf->channel); in configured_fixed_chan_to_freq()
2096 iface->freq = freq; in configured_fixed_chan_to_freq()
2104 for (j = 0; j < iface->num_hw_features; j++) { in configured_fixed_chan_to_freq()
2105 struct hostapd_hw_modes *mode = &iface->hw_features[j]; in configured_fixed_chan_to_freq()
2107 if (iface->conf->hw_mode != HOSTAPD_MODE_IEEE80211ANY && in configured_fixed_chan_to_freq()
2108 iface->conf->hw_mode != mode->mode) in configured_fixed_chan_to_freq()
2113 if (chan->chan == iface->conf->channel && in configured_fixed_chan_to_freq()
2115 iface->freq = chan->freq; in configured_fixed_chan_to_freq()
2126 static void hostapd_set_6ghz_sec_chan(struct hostapd_iface *iface) in hostapd_set_6ghz_sec_chan() argument
2130 if (!is_6ghz_op_class(iface->conf->op_class)) in hostapd_set_6ghz_sec_chan()
2133 bw = op_class_to_bandwidth(iface->conf->op_class); in hostapd_set_6ghz_sec_chan()
2136 if (bw >= 40 && !iface->conf->secondary_channel) { in hostapd_set_6ghz_sec_chan()
2137 if (((iface->conf->channel - 1) / 4) % 2) in hostapd_set_6ghz_sec_chan()
2138 iface->conf->secondary_channel = -1; in hostapd_set_6ghz_sec_chan()
2140 iface->conf->secondary_channel = 1; in hostapd_set_6ghz_sec_chan()
2145 static int setup_interface2(struct hostapd_iface *iface) in setup_interface2() argument
2147 iface->wait_channel_update = 0; in setup_interface2()
2148 iface->is_no_ir = false; in setup_interface2()
2150 if (hostapd_get_hw_features(iface)) { in setup_interface2()
2156 if (iface->conf->acs && !iface->is_ch_switch_dfs) { in setup_interface2()
2157 iface->freq = 0; in setup_interface2()
2158 iface->conf->channel = 0; in setup_interface2()
2160 iface->is_ch_switch_dfs = false; in setup_interface2()
2162 ret = configured_fixed_chan_to_freq(iface); in setup_interface2()
2166 if (iface->conf->op_class) { in setup_interface2()
2169 ch_width = op_class_to_ch_width(iface->conf->op_class); in setup_interface2()
2170 hostapd_set_oper_chwidth(iface->conf, ch_width); in setup_interface2()
2171 hostapd_set_6ghz_sec_chan(iface); in setup_interface2()
2174 ret = hostapd_select_hw_mode(iface); in setup_interface2()
2184 ret = hostapd_check_edmg_capab(iface); in setup_interface2()
2187 ret = hostapd_check_he_6ghz_capab(iface); in setup_interface2()
2190 ret = hostapd_check_ht_capab(iface); in setup_interface2()
2199 if (iface->conf->ieee80211h) in setup_interface2()
2202 return hostapd_setup_interface_complete(iface, 0); in setup_interface2()
2205 if (iface->is_no_ir) { in setup_interface2()
2208 hostapd_set_state(iface, HAPD_IFACE_NO_IR); in setup_interface2()
2209 wpa_msg(iface->bss[0]->msg_ctx, MSG_INFO, AP_EVENT_NO_IR); in setup_interface2()
2213 hostapd_set_state(iface, HAPD_IFACE_DISABLED); in setup_interface2()
2214 wpa_msg(iface->bss[0]->msg_ctx, MSG_INFO, AP_EVENT_DISABLED); in setup_interface2()
2215 if (iface->interfaces && iface->interfaces->terminate_on_error) in setup_interface2()
2237 *hw_mode = ieee80211_freq_to_chan(hapd->iface->freq, channel); in fst_hostapd_get_channel_info_cb()
2246 *modes = hapd->iface->hw_features; in fst_hostapd_get_hw_modes_cb()
2247 return hapd->iface->num_hw_features; in fst_hostapd_get_hw_modes_cb()
2255 if (hapd->iface->fst_ies != fst_ies) { in fst_hostapd_set_ies_cb()
2256 hapd->iface->fst_ies = fst_ies; in fst_hostapd_set_ies_cb()
2268 return hostapd_drv_send_action(hapd, hapd->iface->freq, 0, da, in fst_hostapd_send_action_cb()
2360 static int hostapd_owe_iface_iter(struct hostapd_iface *iface, void *ctx) in hostapd_owe_iface_iter() argument
2365 for (i = 0; i < iface->num_bss; i++) { in hostapd_owe_iface_iter()
2366 struct hostapd_data *bss = iface->bss[i]; in hostapd_owe_iface_iter()
2369 bss->conf->iface) != 0) in hostapd_owe_iface_iter()
2375 hapd->conf->iface, bss->conf->iface, in hostapd_owe_iface_iter()
2405 if (!hapd->iface->interfaces || in hostapd_owe_trans_get_info()
2406 !hapd->iface->interfaces->for_each_interface) in hostapd_owe_trans_get_info()
2407 return hostapd_owe_iface_iter(hapd->iface, hapd); in hostapd_owe_trans_get_info()
2409 return hapd->iface->interfaces->for_each_interface( in hostapd_owe_trans_get_info()
2410 hapd->iface->interfaces, hostapd_owe_iface_iter, hapd); in hostapd_owe_trans_get_info()
2414 static int hostapd_owe_iface_iter2(struct hostapd_iface *iface, void *ctx) in hostapd_owe_iface_iter2() argument
2418 for (i = 0; i < iface->num_bss; i++) { in hostapd_owe_iface_iter2()
2419 struct hostapd_data *bss = iface->bss[i]; in hostapd_owe_iface_iter2()
2424 if (bss->iface->state != HAPD_IFACE_ENABLED) { in hostapd_owe_iface_iter2()
2427 bss->conf->iface, in hostapd_owe_iface_iter2()
2428 hostapd_state_text(bss->iface->state)); in hostapd_owe_iface_iter2()
2436 bss->conf->iface); in hostapd_owe_iface_iter2()
2446 static void hostapd_owe_update_trans(struct hostapd_iface *iface) in hostapd_owe_update_trans() argument
2451 if (!iface->interfaces || in hostapd_owe_update_trans()
2452 !iface->interfaces->for_each_interface) in hostapd_owe_update_trans()
2453 hostapd_owe_iface_iter2(iface, NULL); in hostapd_owe_update_trans()
2455 iface->interfaces->for_each_interface( in hostapd_owe_update_trans()
2456 iface->interfaces, hostapd_owe_iface_iter2, NULL); in hostapd_owe_update_trans()
2464 struct hostapd_iface *iface = eloop_ctx; in hostapd_interface_setup_failure_handler() local
2467 if (iface->num_bss < 1 || !iface->bss || !iface->bss[0]) in hostapd_interface_setup_failure_handler()
2469 hapd = iface->bss[0]; in hostapd_interface_setup_failure_handler()
2475 static int hostapd_setup_interface_complete_sync(struct hostapd_iface *iface, in hostapd_setup_interface_complete_sync() argument
2478 struct hostapd_data *hapd = iface->bss[0]; in hostapd_setup_interface_complete_sync()
2488 if (iface->freq) { in hostapd_setup_interface_complete_sync()
2495 hostapd_hw_mode_txt(iface->conf->hw_mode), in hostapd_setup_interface_complete_sync()
2496 iface->conf->channel, iface->freq); in hostapd_setup_interface_complete_sync()
2500 if (!(iface->drv_flags & WPA_DRIVER_FLAGS_DFS_OFFLOAD)) { in hostapd_setup_interface_complete_sync()
2502 res = hostapd_handle_dfs(iface); in hostapd_setup_interface_complete_sync()
2510 res_dfs_offload = hostapd_handle_dfs_offload(iface); in hostapd_setup_interface_complete_sync()
2529 if (iface->mconf != NULL) { in hostapd_setup_interface_complete_sync()
2532 iface->bss[0]->conf->iface); in hostapd_setup_interface_complete_sync()
2538 hostapd_set_freq(hapd, hapd->iconf->hw_mode, iface->freq, in hostapd_setup_interface_complete_sync()
2558 if (iface->current_mode) { in hostapd_setup_interface_complete_sync()
2559 if (hostapd_prepare_rates(iface, iface->current_mode)) { in hostapd_setup_interface_complete_sync()
2587 for (j = 0; j < iface->num_bss; j++) { in hostapd_setup_interface_complete_sync()
2588 hapd = iface->bss[j]; in hostapd_setup_interface_complete_sync()
2591 if (hostapd_setup_bss(hapd, j == 0, !iface->conf->mbssid)) { in hostapd_setup_interface_complete_sync()
2593 hapd = iface->bss[j]; in hostapd_setup_interface_complete_sync()
2607 for (j = 0; hapd->iconf->mbssid && j < iface->num_bss; j++) { in hostapd_setup_interface_complete_sync()
2608 hapd = iface->bss[j]; in hostapd_setup_interface_complete_sync()
2611 hapd = iface->bss[j]; in hostapd_setup_interface_complete_sync()
2623 hapd = iface->bss[0]; in hostapd_setup_interface_complete_sync()
2625 hostapd_tx_queue_params(iface); in hostapd_setup_interface_complete_sync()
2627 ap_list_init(iface); in hostapd_setup_interface_complete_sync()
2643 for (j = 0; j < iface->num_bss; j++) { in hostapd_setup_interface_complete_sync()
2644 if (hostapd_init_wps_complete(iface->bss[j])) in hostapd_setup_interface_complete_sync()
2648 if ((iface->drv_flags & WPA_DRIVER_FLAGS_DFS_OFFLOAD) && in hostapd_setup_interface_complete_sync()
2667 iface->fst = fst_attach(hapd->conf->iface, hapd->own_addr, in hostapd_setup_interface_complete_sync()
2669 if (!iface->fst) { in hostapd_setup_interface_complete_sync()
2677 hostapd_set_state(iface, HAPD_IFACE_ENABLED); in hostapd_setup_interface_complete_sync()
2678 hostapd_owe_update_trans(iface); in hostapd_setup_interface_complete_sync()
2679 airtime_policy_update_init(iface); in hostapd_setup_interface_complete_sync()
2680 wpa_msg(iface->bss[0]->msg_ctx, MSG_INFO, AP_EVENT_ENABLED); in hostapd_setup_interface_complete_sync()
2685 if (delay_apply_cfg && !iface->mconf) { in hostapd_setup_interface_complete_sync()
2692 iface->bss[0]->conf->iface); in hostapd_setup_interface_complete_sync()
2693 if (iface->interfaces && iface->interfaces->terminate_on_error > 0) in hostapd_setup_interface_complete_sync()
2694 iface->interfaces->terminate_on_error--; in hostapd_setup_interface_complete_sync()
2696 for (j = 0; j < iface->num_bss; j++) in hostapd_setup_interface_complete_sync()
2697 hostapd_neighbor_set_own_report(iface->bss[j]); in hostapd_setup_interface_complete_sync()
2700 supplicant_send_wifi_mgmt_ap_status(iface, in hostapd_setup_interface_complete_sync()
2704 if (iface->interfaces && iface->interfaces->count > 1) in hostapd_setup_interface_complete_sync()
2705 ieee802_11_set_beacons(iface); in hostapd_setup_interface_complete_sync()
2712 if (iface->is_no_ir) { in hostapd_setup_interface_complete_sync()
2713 hostapd_set_state(iface, HAPD_IFACE_NO_IR); in hostapd_setup_interface_complete_sync()
2718 hostapd_set_state(iface, HAPD_IFACE_DISABLED); in hostapd_setup_interface_complete_sync()
2721 if (iface->fst) { in hostapd_setup_interface_complete_sync()
2722 fst_detach(iface->fst); in hostapd_setup_interface_complete_sync()
2723 iface->fst = NULL; in hostapd_setup_interface_complete_sync()
2727 if (iface->interfaces && iface->interfaces->terminate_on_error) { in hostapd_setup_interface_complete_sync()
2736 iface, NULL); in hostapd_setup_interface_complete_sync()
2751 int hostapd_setup_interface_complete(struct hostapd_iface *iface, int err) in hostapd_setup_interface_complete() argument
2753 struct hapd_interfaces *interfaces = iface->interfaces; in hostapd_setup_interface_complete()
2754 struct hostapd_data *hapd = iface->bss[0]; in hostapd_setup_interface_complete()
2758 if (!iface->need_to_start_in_sync) in hostapd_setup_interface_complete()
2759 return hostapd_setup_interface_complete_sync(iface, err); in hostapd_setup_interface_complete()
2763 iface->need_to_start_in_sync = 0; in hostapd_setup_interface_complete()
2765 if (iface->is_no_ir) { in hostapd_setup_interface_complete()
2766 hostapd_set_state(iface, HAPD_IFACE_NO_IR); in hostapd_setup_interface_complete()
2771 hostapd_set_state(iface, HAPD_IFACE_DISABLED); in hostapd_setup_interface_complete()
2778 if (iface->ready_to_start_in_sync) { in hostapd_setup_interface_complete()
2784 if (interfaces->iface[i]->need_to_start_in_sync && in hostapd_setup_interface_complete()
2785 !interfaces->iface[i]->ready_to_start_in_sync) in hostapd_setup_interface_complete()
2793 if (not_ready_in_sync_ifaces > 1 && iface->state == HAPD_IFACE_DFS) { in hostapd_setup_interface_complete()
2798 iface->need_to_start_in_sync = 0; in hostapd_setup_interface_complete()
2801 iface->bss[0]->conf->iface); in hostapd_setup_interface_complete()
2802 return hostapd_setup_interface_complete_sync(iface, err); in hostapd_setup_interface_complete()
2807 iface->ready_to_start_in_sync = 1; in hostapd_setup_interface_complete()
2810 iface->bss[0]->conf->iface); in hostapd_setup_interface_complete()
2816 iface->bss[0]->conf->iface); in hostapd_setup_interface_complete()
2817 iface->need_to_start_in_sync = 0; in hostapd_setup_interface_complete()
2818 hostapd_setup_interface_complete_sync(iface, err); in hostapd_setup_interface_complete()
2820 if (interfaces->iface[i]->need_to_start_in_sync && in hostapd_setup_interface_complete()
2821 interfaces->iface[i]->ready_to_start_in_sync) { in hostapd_setup_interface_complete()
2823 interfaces->iface[i], 0); in hostapd_setup_interface_complete()
2825 interfaces->iface[i]->need_to_start_in_sync = 0; in hostapd_setup_interface_complete()
2849 int hostapd_setup_interface(struct hostapd_iface *iface) in hostapd_setup_interface() argument
2853 if (!iface->conf) in hostapd_setup_interface()
2855 ret = setup_interface(iface); in hostapd_setup_interface()
2858 iface->conf->bss[0]->iface); in hostapd_setup_interface()
2891 hapd->iface = hapd_iface; in hostapd_alloc_bss_data()
2915 hapd->conf ? hapd->conf->iface : "N/A"); in hostapd_bss_deinit()
2930 void hostapd_interface_deinit(struct hostapd_iface *iface) in hostapd_interface_deinit() argument
2934 wpa_printf(MSG_DEBUG, "%s(%p)", __func__, iface); in hostapd_interface_deinit()
2935 if (iface == NULL) in hostapd_interface_deinit()
2938 hostapd_set_state(iface, HAPD_IFACE_DISABLED); in hostapd_interface_deinit()
2940 eloop_cancel_timeout(channel_list_update_timeout, iface, NULL); in hostapd_interface_deinit()
2941 iface->wait_channel_update = 0; in hostapd_interface_deinit()
2942 iface->is_no_ir = false; in hostapd_interface_deinit()
2945 if (iface->fst) { in hostapd_interface_deinit()
2946 fst_detach(iface->fst); in hostapd_interface_deinit()
2947 iface->fst = NULL; in hostapd_interface_deinit()
2951 for (j = (int) iface->num_bss - 1; j >= 0; j--) { in hostapd_interface_deinit()
2952 if (!iface->bss) in hostapd_interface_deinit()
2954 hostapd_bss_deinit(iface->bss[j]); in hostapd_interface_deinit()
2958 hostapd_stop_setup_timers(iface); in hostapd_interface_deinit()
2959 eloop_cancel_timeout(ap_ht2040_timeout, iface, NULL); in hostapd_interface_deinit()
2998 void hostapd_interface_free(struct hostapd_iface *iface) in hostapd_interface_free() argument
3001 wpa_printf(MSG_DEBUG, "%s(%p)", __func__, iface); in hostapd_interface_free()
3002 for (j = 0; j < iface->num_bss; j++) { in hostapd_interface_free()
3003 if (!iface->bss) in hostapd_interface_free()
3006 if (iface->bss[j]) in hostapd_interface_free()
3007 hostapd_mld_ref_dec(iface->bss[j]->mld); in hostapd_interface_free()
3010 __func__, iface->bss[j]); in hostapd_interface_free()
3011 os_free(iface->bss[j]); in hostapd_interface_free()
3013 hostapd_cleanup_iface(iface); in hostapd_interface_free()
3058 if (!mld || os_strcmp(conf->iface, mld->name) != 0) in hostapd_bss_setup_multi_link()
3074 os_strlcpy(mld->name, conf->iface, sizeof(conf->iface)); in hostapd_bss_setup_multi_link()
3252 struct hostapd_iface *iface = interfaces->iface[i]; in ifname_in_use() local
3253 for (j = 0; j < iface->num_bss; j++) { in ifname_in_use()
3254 struct hostapd_data *hapd = iface->bss[j]; in ifname_in_use()
3255 if (os_strcmp(ifname, hapd->conf->iface) == 0) in ifname_in_use()
3279 struct hostapd_iface *new_iface = NULL, *iface = NULL; in hostapd_interface_init_bss() local
3288 if (os_strcmp(interfaces->iface[i]->phy, phy) == 0) { in hostapd_interface_init_bss()
3289 iface = interfaces->iface[i]; in hostapd_interface_init_bss()
3295 config_fname, phy, iface ? "" : " --> new PHY"); in hostapd_interface_init_bss()
3296 if (iface) { in hostapd_interface_init_bss()
3313 ifname = conf->bss[0]->iface; in hostapd_interface_init_bss()
3322 iface->conf->bss, iface->conf->num_bss + 1, in hostapd_interface_init_bss()
3324 tmp_bss = os_realloc_array(iface->bss, iface->num_bss + 1, in hostapd_interface_init_bss()
3327 iface->bss = tmp_bss; in hostapd_interface_init_bss()
3329 iface->conf->bss = tmp_conf; in hostapd_interface_init_bss()
3330 iface->conf->last_bss = tmp_conf[0]; in hostapd_interface_init_bss()
3336 bss = iface->conf->bss[iface->conf->num_bss] = conf->bss[0]; in hostapd_interface_init_bss()
3337 iface->conf->num_bss++; in hostapd_interface_init_bss()
3339 hapd = hostapd_alloc_bss_data(iface, iface->conf, bss); in hostapd_interface_init_bss()
3341 iface->conf->num_bss--; in hostapd_interface_init_bss()
3345 iface->conf->last_bss = bss; in hostapd_interface_init_bss()
3346 iface->bss[iface->num_bss] = hapd; in hostapd_interface_init_bss()
3351 bss_idx = iface->num_bss++; in hostapd_interface_init_bss()
3357 new_iface = iface = hostapd_init(interfaces, config_fname); in hostapd_interface_init_bss()
3358 if (!iface) in hostapd_interface_init_bss()
3360 os_strlcpy(iface->phy, phy, sizeof(iface->phy)); in hostapd_interface_init_bss()
3361 iface->interfaces = interfaces; in hostapd_interface_init_bss()
3366 if (iface->bss[bss_idx]->conf->logger_stdout_level > 0) in hostapd_interface_init_bss()
3367 iface->bss[bss_idx]->conf->logger_stdout_level--; in hostapd_interface_init_bss()
3370 if (iface->conf->bss[bss_idx]->iface[0] == '\0' && in hostapd_interface_init_bss()
3371 !hostapd_drv_none(iface->bss[bss_idx])) { in hostapd_interface_init_bss()
3379 return iface; in hostapd_interface_init_bss()
3384 void *drv_priv, struct hostapd_iface *iface) in hostapd_cleanup_driver() argument
3394 if (!iface->bss[0]->conf->mld_ap) { in hostapd_cleanup_driver()
3396 } else if (hostapd_mld_is_first_bss(iface->bss[0]) && in hostapd_cleanup_driver()
3398 !driver->is_drv_shared(drv_priv, iface->bss[0])) { in hostapd_cleanup_driver()
3400 } else if (hostapd_if_link_remove(iface->bss[0], in hostapd_cleanup_driver()
3402 iface->bss[0]->conf->iface, in hostapd_cleanup_driver()
3403 iface->bss[0]->mld_link_id)) { in hostapd_cleanup_driver()
3405 iface->bss[0]->conf->iface); in hostapd_cleanup_driver()
3410 iface->bss[0]->drv_priv = NULL; in hostapd_cleanup_driver()
3414 void hostapd_interface_deinit_free(struct hostapd_iface *iface) in hostapd_interface_deinit_free() argument
3419 wpa_printf(MSG_DEBUG, "%s(%p)", __func__, iface); in hostapd_interface_deinit_free()
3420 if (iface == NULL) in hostapd_interface_deinit_free()
3423 __func__, (unsigned int) iface->num_bss, in hostapd_interface_deinit_free()
3424 (unsigned int) iface->conf->num_bss); in hostapd_interface_deinit_free()
3425 driver = iface->bss[0]->driver; in hostapd_interface_deinit_free()
3426 drv_priv = iface->bss[0]->drv_priv; in hostapd_interface_deinit_free()
3427 hostapd_interface_deinit(iface); in hostapd_interface_deinit_free()
3430 hostapd_cleanup_driver(driver, drv_priv, iface); in hostapd_interface_deinit_free()
3431 hostapd_interface_free(iface); in hostapd_interface_deinit_free()
3470 if (hapd_iface->interfaces->iface[j] == hapd_iface) in hostapd_refresh_all_iface_beacons()
3473 ieee802_11_update_beacons(hapd_iface->interfaces->iface[j]); in hostapd_refresh_all_iface_beacons()
3490 hapd_iface->conf->bss[0]->iface); in hostapd_enable_iface()
3495 hapd_iface->conf->bss[0]->iface); in hostapd_enable_iface()
3527 hapd_iface->conf->bss[0]->iface); in hostapd_reload_iface()
3545 wpa_printf(MSG_DEBUG, "Reload BSS %s", bss->conf->iface); in hostapd_reload_bss_only()
3571 hapd_iface->conf->bss[0]->iface); in hostapd_disable_iface()
3604 hapd_iface->bss[0]->conf->iface); in hostapd_disable_iface()
3614 struct hostapd_iface **iface, *hapd_iface; in hostapd_iface_alloc() local
3616 iface = os_realloc_array(interfaces->iface, interfaces->count + 1, in hostapd_iface_alloc()
3618 if (iface == NULL) in hostapd_iface_alloc()
3620 interfaces->iface = iface; in hostapd_iface_alloc()
3621 hapd_iface = interfaces->iface[interfaces->count] = in hostapd_iface_alloc()
3675 os_strlcpy(bss->iface, ifname, sizeof(bss->iface)); in hostapd_config_alloc()
3750 if (interfaces->iface[j] == hapd_iface) in hostapd_add_iface()
3755 tmp = os_realloc_array(interfaces->iface, in hostapd_add_iface()
3762 interfaces->iface = tmp; in hostapd_add_iface()
3763 interfaces->iface[interfaces->count++] = hapd_iface; in hostapd_add_iface()
3795 __func__, hapd, hapd->conf->iface); in hostapd_add_iface()
3821 mld_ap = interfaces->iface[i]->conf->bss[0]->mld_ap; in hostapd_add_iface()
3824 if (!os_strcmp(interfaces->iface[i]->conf->bss[0]->iface, in hostapd_add_iface()
3843 os_strlcpy(conf->bss[0]->iface, buf, in hostapd_add_iface()
3844 sizeof(conf->bss[0]->iface)); in hostapd_add_iface()
3870 hapd_iface->conf->bss[0]->iface); in hostapd_add_iface()
3889 hapd->conf->iface); in hostapd_add_iface()
3903 interfaces->iface[interfaces->count] = NULL; in hostapd_add_iface()
3912 static int hostapd_remove_bss(struct hostapd_iface *iface, unsigned int idx) in hostapd_remove_bss() argument
3916 wpa_printf(MSG_INFO, "Remove BSS '%s'", iface->conf->bss[idx]->iface); in hostapd_remove_bss()
3919 if (idx < iface->num_bss) { in hostapd_remove_bss()
3920 struct hostapd_data *hapd = iface->bss[idx]; in hostapd_remove_bss()
3924 __func__, hapd, hapd->conf->iface); in hostapd_remove_bss()
3932 iface->num_bss--; in hostapd_remove_bss()
3934 for (i = idx; i < iface->num_bss; i++) in hostapd_remove_bss()
3935 iface->bss[i] = iface->bss[i + 1]; in hostapd_remove_bss()
3937 hostapd_config_free_bss(iface->conf->bss[idx]); in hostapd_remove_bss()
3938 iface->conf->bss[idx] = NULL; in hostapd_remove_bss()
3941 iface->conf->num_bss--; in hostapd_remove_bss()
3942 for (i = idx; i < iface->conf->num_bss; i++) in hostapd_remove_bss()
3943 iface->conf->bss[i] = iface->conf->bss[i + 1]; in hostapd_remove_bss()
3955 hapd_iface = interfaces->iface[i]; in hostapd_remove_iface()
3958 if (!os_strcmp(hapd_iface->conf->bss[0]->iface, buf)) { in hostapd_remove_iface()
3967 interfaces->iface[k] = in hostapd_remove_iface()
3968 interfaces->iface[k + 1]; in hostapd_remove_iface()
3978 if (!os_strcmp(hapd_iface->conf->bss[j]->iface, buf)) { in hostapd_remove_iface()
4048 } else if (!(hapd->iface->drv_flags2 & in hostapd_new_assoc_sta()
4055 if (hapd->iface->drv_flags & WPA_DRIVER_FLAGS_WIRED) { in hostapd_new_assoc_sta()
4060 hapd->conf->iface, __func__, in hostapd_new_assoc_sta()
4063 } else if (!(hapd->iface->drv_flags & in hostapd_new_assoc_sta()
4068 hapd->conf->iface, __func__, MAC2STR(sta->addr), in hostapd_new_assoc_sta()
4110 void hostapd_set_state(struct hostapd_iface *iface, enum hostapd_iface_state s) in hostapd_set_state() argument
4113 iface->conf ? iface->conf->bss[0]->iface : "N/A", in hostapd_set_state()
4114 hostapd_state_text(iface->state), hostapd_state_text(s)); in hostapd_set_state()
4115 iface->state = s; in hostapd_set_state()
4119 int hostapd_csa_in_progress(struct hostapd_iface *iface) in hostapd_csa_in_progress() argument
4123 for (i = 0; i < iface->num_bss; i++) in hostapd_csa_in_progress()
4124 if (iface->bss[i]->csa_in_progress) in hostapd_csa_in_progress()
4255 hostapd_determine_mode(hapd->iface); in hostapd_change_config_freq()
4256 mode = hapd->iface->current_mode; in hostapd_change_config_freq()
4340 struct hostapd_iface *iface = hapd->iface; in hostapd_fill_csa_settings() local
4349 if (!iface || !iface->freq || hapd->csa_in_progress) in hostapd_fill_csa_settings()
4374 &hapd->iface->cs_oper_class, in hostapd_fill_csa_settings()
4388 ret = hostapd_change_config_freq(iface->bss[0], iface->conf, in hostapd_fill_csa_settings()
4395 old_punct_bitmap = iface->conf->punct_bitmap; in hostapd_fill_csa_settings()
4396 iface->conf->punct_bitmap = settings->punct_bitmap; in hostapd_fill_csa_settings()
4402 iface->conf->punct_bitmap = old_punct_bitmap; in hostapd_fill_csa_settings()
4404 hostapd_change_config_freq(iface->bss[0], iface->conf, in hostapd_fill_csa_settings()
4485 if (!(hapd->iface->drv_flags & WPA_DRIVER_FLAGS_AP_CSA)) { in hostapd_switch_channel()
4513 hostapd_switch_channel_fallback(struct hostapd_iface *iface, in hostapd_switch_channel_fallback() argument
4536 iface->conf->vht_capab |= in hostapd_switch_channel_fallback()
4544 iface->conf->vht_capab |= VHT_CAP_SUPP_CHAN_WIDTH_160MHZ; in hostapd_switch_channel_fallback()
4555 iface->freq = freq_params->freq; in hostapd_switch_channel_fallback()
4556 iface->conf->channel = freq_params->channel; in hostapd_switch_channel_fallback()
4557 iface->conf->secondary_channel = freq_params->sec_channel_offset; in hostapd_switch_channel_fallback()
4566 iface->conf->op_class = op_class; in hostapd_switch_channel_fallback()
4567 hostapd_set_oper_centr_freq_seg0_idx(iface->conf, seg0_idx); in hostapd_switch_channel_fallback()
4568 hostapd_set_oper_centr_freq_seg1_idx(iface->conf, seg1_idx); in hostapd_switch_channel_fallback()
4569 hostapd_set_oper_chwidth(iface->conf, bw); in hostapd_switch_channel_fallback()
4570 iface->conf->ieee80211n = freq_params->ht_enabled; in hostapd_switch_channel_fallback()
4571 iface->conf->ieee80211ac = freq_params->vht_enabled; in hostapd_switch_channel_fallback()
4572 iface->conf->ieee80211ax = freq_params->he_enabled; in hostapd_switch_channel_fallback()
4573 iface->conf->ieee80211be = freq_params->eht_enabled; in hostapd_switch_channel_fallback()
4580 hostapd_disable_iface(iface); in hostapd_switch_channel_fallback()
4581 hostapd_enable_iface(iface); in hostapd_switch_channel_fallback()
4600 struct hostapd_iface *iface = hapd->iface; in hostapd_fill_cca_settings() local
4604 if (!iface || iface->conf->he_op.he_bss_color_disabled) in hostapd_fill_cca_settings()
4613 old_color = iface->conf->he_op.he_bss_color; in hostapd_fill_cca_settings()
4614 iface->conf->he_op.he_bss_color = hapd->cca_color; in hostapd_fill_cca_settings()
4619 iface->conf->he_op.he_bss_color = old_color; in hostapd_fill_cca_settings()
4669 hapd->iface->conf->he_op.he_bss_color_disabled = 1; in hostapd_switch_color_timeout_handler()
4670 hapd->iface->conf->he_op.he_bss_color = os_random() % 63 + 1; in hostapd_switch_color_timeout_handler()
4671 for (b = 0; b < hapd->iface->num_bss; b++) in hostapd_switch_color_timeout_handler()
4672 ieee802_11_set_beacon(hapd->iface->bss[b]); in hostapd_switch_color_timeout_handler()
4676 for (b = 0; b < hapd->iface->num_bss; b++) { in hostapd_switch_color_timeout_handler()
4677 struct hostapd_data *bss = hapd->iface->bss[b]; in hostapd_switch_color_timeout_handler()
4736 struct hostapd_iface *iface = interfaces->iface[i]; in hostapd_get_iface() local
4738 for (j = 0; j < iface->num_bss; j++) { in hostapd_get_iface()
4739 struct hostapd_data *hapd = iface->bss[j]; in hostapd_get_iface()
4741 if (os_strcmp(ifname, hapd->conf->iface) == 0) in hostapd_get_iface()
4750 void hostapd_periodic_iface(struct hostapd_iface *iface) in hostapd_periodic_iface() argument
4754 ap_list_timer(iface); in hostapd_periodic_iface()
4756 for (i = 0; i < iface->num_bss; i++) { in hostapd_periodic_iface()
4757 struct hostapd_data *hapd = iface->bss[i]; in hostapd_periodic_iface()
4796 struct hostapd_iface *iface; in hostapd_mld_get_link_bss() local
4800 for (i = 0; i < hapd->iface->interfaces->count; i++) { in hostapd_mld_get_link_bss()
4801 iface = hapd->iface->interfaces->iface[i]; in hostapd_mld_get_link_bss()
4802 if (!iface) in hostapd_mld_get_link_bss()
4805 for (j = 0; j < iface->num_bss; j++) { in hostapd_mld_get_link_bss()
4806 bss = iface->bss[j]; in hostapd_mld_get_link_bss()
4830 return !os_strcmp(hapd1->conf->iface, hapd2->conf->iface); in hostapd_is_ml_partner()