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); }