static void hostapd_reload_bss(struct hostapd_data *hapd) { #ifndef CONFIG_NO_RADIUS radius_client_reconfig(hapd->radius, hapd->conf->radius); #endif /* CONFIG_NO_RADIUS */ if (hostapd_setup_wpa_psk(hapd->conf)) { wpa_printf(MSG_ERROR, "Failed to re-configure WPA PSK " "after reloading configuration"); } if (hapd->conf->ieee802_1x || hapd->conf->wpa) hostapd_set_drv_ieee8021x(hapd, hapd->conf->iface, 1); else hostapd_set_drv_ieee8021x(hapd, hapd->conf->iface, 0); if (hapd->conf->wpa && hapd->wpa_auth == NULL) { hostapd_setup_wpa(hapd); if (hapd->wpa_auth) wpa_init_keys(hapd->wpa_auth); } else if (hapd->conf->wpa) { const u8 *wpa_ie; size_t wpa_ie_len; hostapd_reconfig_wpa(hapd); wpa_ie = wpa_auth_get_wpa_ie(hapd->wpa_auth, &wpa_ie_len); if (hostapd_set_generic_elem(hapd, wpa_ie, wpa_ie_len)) wpa_printf(MSG_ERROR, "Failed to configure WPA IE for " "the kernel driver."); } else if (hapd->wpa_auth) { wpa_deinit(hapd->wpa_auth); hapd->wpa_auth = NULL; hostapd_set_privacy(hapd, 0); hostapd_setup_encryption(hapd->conf->iface, hapd); hostapd_set_generic_elem(hapd, (u8 *) "", 0); } ieee802_11_set_beacon(hapd); hostapd_update_wps(hapd); if (hapd->conf->ssid.ssid_set && hostapd_set_ssid(hapd, (u8 *) hapd->conf->ssid.ssid, hapd->conf->ssid.ssid_len)) { wpa_printf(MSG_ERROR, "Could not set SSID for kernel driver"); /* try to continue */ } wpa_printf(MSG_DEBUG, "Reconfigured interface %s", hapd->conf->iface); }
static void hostapd_reconfig_bss(struct hostapd_data *hapd, struct hostapd_bss_config *newbss, struct hostapd_bss_config *oldbss, struct hostapd_config *oldconf, int beacon_changed) { struct hostapd_config_change change; int encr_changed = 0; struct radius_client_data *old_radius; radius_client_flush(hapd->radius, 0); if (hostapd_set_dtim_period(hapd, newbss->dtim_period)) printf("Could not set DTIM period for kernel driver\n"); if (newbss->ssid.ssid_len != oldbss->ssid.ssid_len || memcmp(newbss->ssid.ssid, oldbss->ssid.ssid, newbss->ssid.ssid_len) != 0) { if (hostapd_set_ssid(hapd, (u8 *) newbss->ssid.ssid, newbss->ssid.ssid_len)) printf("Could not set SSID for kernel driver\n"); beacon_changed++; } if (newbss->ignore_broadcast_ssid != oldbss->ignore_broadcast_ssid) beacon_changed++; if (hostapd_wep_key_cmp(&newbss->ssid.wep, &oldbss->ssid.wep)) { encr_changed++; beacon_changed++; } vlan_reconfig(hapd, oldconf, oldbss); if (beacon_changed) { HOSTAPD_DEBUG(HOSTAPD_DEBUG_MINIMAL, "Updating beacon frame " "information\n"); ieee802_11_set_beacon(hapd); } change.hapd = hapd; change.oldconf = oldconf; change.newconf = hapd->iconf; change.oldbss = oldbss; change.newbss = newbss; change.mac_acl_changed = hostapd_acl_diff(newbss, oldbss); if (newbss->max_num_sta != oldbss->max_num_sta && newbss->max_num_sta < hapd->num_sta) { change.num_sta_remove = hapd->num_sta - newbss->max_num_sta; } else change.num_sta_remove = 0; ap_for_each_sta(hapd, hostapd_config_reload_sta, &change); old_radius = hapd->radius; hapd->radius = radius_client_reconfig(hapd->radius, hapd, oldbss->radius, newbss->radius); hapd->radius_client_reconfigured = old_radius != hapd->radius || hostapd_ip_diff(&newbss->own_ip_addr, &oldbss->own_ip_addr); ieee802_1x_reconfig(hapd, oldconf, oldbss); iapp_reconfig(hapd, oldconf, oldbss); hostapd_acl_reconfig(hapd, oldconf); accounting_reconfig(hapd, oldconf); }
static void asd_reconfig_bss(struct asd_data *wasd, struct asd_bss_config *newbss, struct asd_bss_config *oldbss, struct asd_config *oldconf, int beacon_changed) { struct asd_config_change change; int encr_changed = 0; struct radius_client_data *old_radius; //radius_client_flush(wasd->radius, 0); if (asd_set_dtim_period(wasd, newbss->dtim_period)) asd_printf(ASD_DEFAULT,MSG_DEBUG,"Could not set DTIM period for kernel driver\n"); if (newbss->ssid.ssid_len != oldbss->ssid.ssid_len || os_memcmp(newbss->ssid.ssid, oldbss->ssid.ssid, newbss->ssid.ssid_len) != 0) { if (asd_set_ssid(wasd, (u8 *) newbss->ssid.ssid, newbss->ssid.ssid_len)) asd_printf(ASD_DEFAULT,MSG_DEBUG,"Could not set SSID for kernel driver\n"); beacon_changed++; } if (newbss->ignore_broadcast_ssid != oldbss->ignore_broadcast_ssid) beacon_changed++; if (asd_wep_key_cmp(&newbss->ssid.wep, &oldbss->ssid.wep)) { encr_changed++; beacon_changed++; } vlan_reconfig(wasd, oldconf, oldbss); if (beacon_changed) { asd_printf(ASD_DEFAULT,MSG_DEBUG, "Updating beacon frame information"); ieee802_11_set_beacon(wasd); } change.wasd = wasd; change.oldconf = oldconf; change.newconf = wasd->iconf; change.oldbss = oldbss; change.newbss = newbss; change.mac_acl_changed = asd_acl_diff(newbss, oldbss); if (newbss->max_num_sta != oldbss->max_num_sta && newbss->max_num_sta < wasd->num_sta) { change.num_sta_remove = wasd->num_sta - newbss->max_num_sta; } else change.num_sta_remove = 0; ap_for_each_sta(wasd, asd_config_reload_sta, &change); old_radius = wasd->radius; wasd->radius = radius_client_reconfig(wasd->radius, wasd, oldbss->radius, newbss->radius); wasd->radius_client_reconfigured = old_radius != wasd->radius || asd_ip_diff(&newbss->own_ip_addr, &oldbss->own_ip_addr); ieee802_1x_reconfig(wasd, oldconf, oldbss); iapp_reconfig(wasd, oldconf, oldbss); asd_acl_reconfig(wasd, oldconf); accounting_reconfig(wasd, oldconf); }