diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c index 128fa9538..e084b2a1f 100644 --- a/hostapd/ctrl_iface.c +++ b/hostapd/ctrl_iface.c @@ -3191,6 +3191,7 @@ static int hostapd_ctrl_iface_set_neighbor(struct hostapd_data *hapd, char *buf) u8 bssid[ETH_ALEN]; struct wpabuf *nr, *lci = NULL, *civic = NULL; int stationary = 0; + int bss_parameters = 0; char *tmp; int ret; @@ -3275,9 +3276,22 @@ static int hostapd_ctrl_iface_set_neighbor(struct hostapd_data *hapd, char *buf) if (os_strstr(buf, "stat")) stationary = 1; + tmp = os_strstr(buf, "bss_parameter="); + if (tmp) { + bss_parameters = atoi(tmp + 14); + if (bss_parameters < 0 || bss_parameters > 0xff) { + wpa_printf(MSG_ERROR, + "CTRL: SET_NEIGHBOR: Bad bss_parameters subelement"); + wpabuf_free(nr); + wpabuf_free(lci); + wpabuf_free(civic); + return -1; + } + } + set: ret = hostapd_neighbor_set(hapd, bssid, &ssid, nr, lci, civic, - stationary); + stationary, bss_parameters); wpabuf_free(nr); wpabuf_free(lci); diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h index bb9a35eb1..f3ca7529a 100644 --- a/src/ap/hostapd.h +++ b/src/ap/hostapd.h @@ -139,6 +139,7 @@ struct hostapd_neighbor_entry { struct os_time lci_date; int stationary; u32 short_ssid; + u8 bss_parameters; }; struct hostapd_sae_commit_queue { diff --git a/src/ap/neighbor_db.c b/src/ap/neighbor_db.c index e9bdf0033..229edd2a9 100644 --- a/src/ap/neighbor_db.c +++ b/src/ap/neighbor_db.c @@ -121,7 +121,8 @@ hostapd_neighbor_add(struct hostapd_data *hapd) int hostapd_neighbor_set(struct hostapd_data *hapd, const u8 *bssid, const struct wpa_ssid_value *ssid, const struct wpabuf *nr, const struct wpabuf *lci, - const struct wpabuf *civic, int stationary) + const struct wpabuf *civic, int stationary, + u8 bss_parameters) { struct hostapd_neighbor_entry *entry; @@ -154,6 +155,7 @@ int hostapd_neighbor_set(struct hostapd_data *hapd, const u8 *bssid, } entry->stationary = stationary; + entry->bss_parameters = bss_parameters; return 0; @@ -313,7 +315,7 @@ void hostapd_neighbor_set_own_report(struct hostapd_data *hapd) wpabuf_put_u8(nr, center_freq2_idx); hostapd_neighbor_set(hapd, hapd->own_addr, &ssid, nr, hapd->iconf->lci, - hapd->iconf->civic, hapd->iconf->stationary_ap); + hapd->iconf->civic, hapd->iconf->stationary_ap, 0); wpabuf_free(nr); #endif /* NEED_AP_MLME */ diff --git a/src/ap/neighbor_db.h b/src/ap/neighbor_db.h index bed0a2f5f..992671b62 100644 --- a/src/ap/neighbor_db.h +++ b/src/ap/neighbor_db.h @@ -17,7 +17,8 @@ int hostapd_neighbor_show(struct hostapd_data *hapd, char *buf, size_t buflen); int hostapd_neighbor_set(struct hostapd_data *hapd, const u8 *bssid, const struct wpa_ssid_value *ssid, const struct wpabuf *nr, const struct wpabuf *lci, - const struct wpabuf *civic, int stationary); + const struct wpabuf *civic, int stationary, + u8 bss_parameters); void hostapd_neighbor_set_own_report(struct hostapd_data *hapd); int hostapd_neighbor_remove(struct hostapd_data *hapd, const u8 *bssid, const struct wpa_ssid_value *ssid);