RNR: Add bss_parameters to the neighbor_db

Add a new field to include BSS Parameter subfield in the neighbor
database as described in IEEE Std 802.11ax-2021, Figure 9-632a (BSS
Parameters subfield format). This field holds information related to
multiple BSSID, access point co-location, and 20 TU probe response
active/inactive state.

Signed-off-by: John Crispin <john@phrozen.org>
Signed-off-by: Aloka Dixit <alokad@codeaurora.org>
This commit is contained in:
John Crispin 2021-07-27 16:42:17 -07:00 committed by Jouni Malinen
parent 9d0948ecc9
commit 1b8eb39757
4 changed files with 22 additions and 4 deletions

View file

@ -3191,6 +3191,7 @@ static int hostapd_ctrl_iface_set_neighbor(struct hostapd_data *hapd, char *buf)
u8 bssid[ETH_ALEN]; u8 bssid[ETH_ALEN];
struct wpabuf *nr, *lci = NULL, *civic = NULL; struct wpabuf *nr, *lci = NULL, *civic = NULL;
int stationary = 0; int stationary = 0;
int bss_parameters = 0;
char *tmp; char *tmp;
int ret; int ret;
@ -3275,9 +3276,22 @@ static int hostapd_ctrl_iface_set_neighbor(struct hostapd_data *hapd, char *buf)
if (os_strstr(buf, "stat")) if (os_strstr(buf, "stat"))
stationary = 1; 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: set:
ret = hostapd_neighbor_set(hapd, bssid, &ssid, nr, lci, civic, ret = hostapd_neighbor_set(hapd, bssid, &ssid, nr, lci, civic,
stationary); stationary, bss_parameters);
wpabuf_free(nr); wpabuf_free(nr);
wpabuf_free(lci); wpabuf_free(lci);

View file

@ -139,6 +139,7 @@ struct hostapd_neighbor_entry {
struct os_time lci_date; struct os_time lci_date;
int stationary; int stationary;
u32 short_ssid; u32 short_ssid;
u8 bss_parameters;
}; };
struct hostapd_sae_commit_queue { struct hostapd_sae_commit_queue {

View file

@ -121,7 +121,8 @@ hostapd_neighbor_add(struct hostapd_data *hapd)
int hostapd_neighbor_set(struct hostapd_data *hapd, const u8 *bssid, int hostapd_neighbor_set(struct hostapd_data *hapd, const u8 *bssid,
const struct wpa_ssid_value *ssid, const struct wpa_ssid_value *ssid,
const struct wpabuf *nr, const struct wpabuf *lci, 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; struct hostapd_neighbor_entry *entry;
@ -154,6 +155,7 @@ int hostapd_neighbor_set(struct hostapd_data *hapd, const u8 *bssid,
} }
entry->stationary = stationary; entry->stationary = stationary;
entry->bss_parameters = bss_parameters;
return 0; return 0;
@ -313,7 +315,7 @@ void hostapd_neighbor_set_own_report(struct hostapd_data *hapd)
wpabuf_put_u8(nr, center_freq2_idx); wpabuf_put_u8(nr, center_freq2_idx);
hostapd_neighbor_set(hapd, hapd->own_addr, &ssid, nr, hapd->iconf->lci, 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); wpabuf_free(nr);
#endif /* NEED_AP_MLME */ #endif /* NEED_AP_MLME */

View file

@ -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, int hostapd_neighbor_set(struct hostapd_data *hapd, const u8 *bssid,
const struct wpa_ssid_value *ssid, const struct wpa_ssid_value *ssid,
const struct wpabuf *nr, const struct wpabuf *lci, 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); void hostapd_neighbor_set_own_report(struct hostapd_data *hapd);
int hostapd_neighbor_remove(struct hostapd_data *hapd, const u8 *bssid, int hostapd_neighbor_remove(struct hostapd_data *hapd, const u8 *bssid,
const struct wpa_ssid_value *ssid); const struct wpa_ssid_value *ssid);