static int radius_servers_diff(struct hostapd_radius_server *nserv, struct hostapd_radius_server *oserv, int num) { int i; for (i = 0; i < num; i++) { if (hostapd_ip_diff(&nserv[i].addr, &oserv[i].addr) || nserv[i].port != oserv[i].port || nserv[i].shared_secret_len != oserv[i].shared_secret_len || os_memcmp(nserv[i].shared_secret, oserv[i].shared_secret, nserv[i].shared_secret_len) != 0) return 1; } return 0; }
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); }