@@ -1307,6 +1307,8 @@ static int hostapd_ctrl_iface_set(struct hostapd_data *hapd, char *cmd)
hostapd_disassoc_deny_mac(hapd);
} else if (os_strcasecmp(cmd, "accept_mac_file") == 0) {
hostapd_disassoc_accept_mac(hapd);
+ } else if (os_strcasecmp(cmd, "ssid") == 0) {
+ hostapd_neighbor_sync_own_report(hapd);
} else if (os_strncmp(cmd, "wme_ac_", 7) == 0 ||
os_strncmp(cmd, "wmm_ac_", 7) == 0) {
hapd->parameter_set_count++;
@@ -183,6 +183,9 @@ static void hostapd_reload_bss(struct hostapd_data *hapd)
hostapd_set_generic_elem(hapd, (u8 *) "", 0);
}
+ if(hostapd_neighbor_sync_own_report(hapd))
+ wpa_printf(MSG_DEBUG, "%s: Own neighbor report already in sync", hapd->conf->iface);
+
ieee802_11_set_beacon(hapd);
hostapd_update_wps(hapd);
@@ -325,3 +325,35 @@ void hostapd_neighbor_set_own_report(struct hostapd_data *hapd)
wpabuf_free(nr);
#endif /* NEED_AP_MLME */
}
+
+static struct hostapd_neighbor_entry *
+hostapd_neighbor_get_by_short_ssid(struct hostapd_data *hapd, const u8 *bssid)
+{
+ struct hostapd_neighbor_entry *nr;
+
+ dl_list_for_each(nr, &hapd->nr_db, struct hostapd_neighbor_entry,
+ list) {
+ if ((os_memcmp(bssid, nr->bssid, ETH_ALEN) == 0) &&
+ (nr->short_ssid != hapd->conf->ssid.short_ssid))
+ return nr;
+ }
+ return NULL;
+}
+
+int hostapd_neighbor_sync_own_report(struct hostapd_data *hapd)
+{
+ struct hostapd_neighbor_entry *nr;
+
+ nr = hostapd_neighbor_get_by_short_ssid(hapd, hapd->own_addr);
+ if (!nr)
+ return -1;
+
+ /* Clear old entry due to ssid change */
+ hostapd_neighbor_clear_entry(nr);
+ dl_list_del(&nr->list);
+ os_free(nr);
+
+ hostapd_neighbor_set_own_report(hapd);
+
+ return 0;
+}
@@ -20,6 +20,7 @@ int hostapd_neighbor_set(struct hostapd_data *hapd, const u8 *bssid,
const struct wpabuf *civic, int stationary,
u8 bss_parameters);
void hostapd_neighbor_set_own_report(struct hostapd_data *hapd);
+int hostapd_neighbor_sync_own_report(struct hostapd_data *hapd);
int hostapd_neighbor_remove(struct hostapd_data *hapd, const u8 *bssid,
const struct wpa_ssid_value *ssid);
void hostapd_free_neighbor_db(struct hostapd_data *hapd);