P802.11ax/D4.0 9.4.2.170 (Reduced Neighbor Report element) described this field used inside reduced neighbor reports. It holds info about multiple bssid and 6G co-location which was not present in the existing neighbor reports. Signed-off-by: John Crispin <john@xxxxxxxxxxx> --- hostapd/ctrl_iface.c | 16 +++++++++++++++- src/ap/hostapd.h | 1 + src/ap/neighbor_db.c | 6 ++++-- src/ap/neighbor_db.h | 3 ++- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c index b470c5643..9ef394273 100644 --- a/hostapd/ctrl_iface.c +++ b/hostapd/ctrl_iface.c @@ -3003,6 +3003,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; @@ -3087,9 +3088,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 > 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 ae16a30bf..b84627bf5 100644 --- a/src/ap/hostapd.h +++ b/src/ap/hostapd.h @@ -138,6 +138,7 @@ struct hostapd_neighbor_entry { /* LCI update time */ struct os_time lci_date; int stationary; + u8 bss_parameters; }; struct hostapd_sae_commit_queue { diff --git a/src/ap/neighbor_db.c b/src/ap/neighbor_db.c index 01bf88623..41d0d1d15 100644 --- a/src/ap/neighbor_db.c +++ b/src/ap/neighbor_db.c @@ -120,7 +120,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; @@ -152,6 +153,7 @@ int hostapd_neighbor_set(struct hostapd_data *hapd, const u8 *bssid, } entry->stationary = stationary; + entry->bss_parameters = bss_parameters; return 0; @@ -311,7 +313,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); -- 2.25.1 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap