Split hostapd_eid_rnr_iface() into two functions
Make this a bit more readable by moving the per-BSS processing into a helper function. Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
d004700560
commit
4a973718d4
1 changed files with 84 additions and 69 deletions
|
@ -7503,17 +7503,96 @@ static u8 * hostapd_eid_nr_db(struct hostapd_data *hapd, u8 *eid,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool hostapd_eid_rnr_bss(struct hostapd_data *hapd,
|
||||||
|
struct hostapd_data *reporting_hapd,
|
||||||
|
struct mbssid_ie_profiles *skip_profiles,
|
||||||
|
size_t i, u8 *tbtt_count, size_t *len,
|
||||||
|
u8 **pos)
|
||||||
|
{
|
||||||
|
struct hostapd_iface *iface = hapd->iface;
|
||||||
|
struct hostapd_data *bss = iface->bss[i];
|
||||||
|
u8 bss_param = 0;
|
||||||
|
bool ap_mld = false;
|
||||||
|
u8 *eid = *pos;
|
||||||
|
|
||||||
|
#ifdef CONFIG_IEEE80211BE
|
||||||
|
ap_mld = !!hapd->conf->mld_ap;
|
||||||
|
#endif /* CONFIG_IEEE80211BE */
|
||||||
|
|
||||||
|
if (!bss || !bss->conf || !bss->started ||
|
||||||
|
bss == reporting_hapd || bss->conf->ignore_broadcast_ssid)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (skip_profiles
|
||||||
|
&& i >= skip_profiles->start && i < skip_profiles->end)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (*len + RNR_TBTT_INFO_LEN > 255 ||
|
||||||
|
*tbtt_count >= RNR_TBTT_INFO_COUNT_MAX)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
*eid++ = RNR_NEIGHBOR_AP_OFFSET_UNKNOWN;
|
||||||
|
os_memcpy(eid, bss->own_addr, ETH_ALEN);
|
||||||
|
eid += ETH_ALEN;
|
||||||
|
os_memcpy(eid, &bss->conf->ssid.short_ssid, 4);
|
||||||
|
eid += 4;
|
||||||
|
if (bss->conf->ssid.short_ssid == reporting_hapd->conf->ssid.short_ssid)
|
||||||
|
bss_param |= RNR_BSS_PARAM_SAME_SSID;
|
||||||
|
|
||||||
|
if (iface->conf->mbssid != MBSSID_DISABLED && iface->num_bss > 1) {
|
||||||
|
bss_param |= RNR_BSS_PARAM_MULTIPLE_BSSID;
|
||||||
|
if (bss == hostapd_mbssid_get_tx_bss(hapd))
|
||||||
|
bss_param |= RNR_BSS_PARAM_TRANSMITTED_BSSID;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_6ghz_op_class(hapd->iconf->op_class) &&
|
||||||
|
bss->conf->unsol_bcast_probe_resp_interval)
|
||||||
|
bss_param |= RNR_BSS_PARAM_UNSOLIC_PROBE_RESP_ACTIVE;
|
||||||
|
|
||||||
|
bss_param |= RNR_BSS_PARAM_CO_LOCATED;
|
||||||
|
|
||||||
|
*eid++ = bss_param;
|
||||||
|
*eid++ = RNR_20_MHZ_PSD_MAX_TXPOWER - 1;
|
||||||
|
|
||||||
|
if (!ap_mld) {
|
||||||
|
*len += RNR_TBTT_INFO_LEN;
|
||||||
|
} else {
|
||||||
|
#ifdef CONFIG_IEEE80211BE
|
||||||
|
if (reporting_hapd->conf->mld_ap &&
|
||||||
|
bss->conf->mld_id == reporting_hapd->conf->mld_id)
|
||||||
|
*eid++ = 0;
|
||||||
|
else
|
||||||
|
*eid++ = hapd->conf->mld_id;
|
||||||
|
|
||||||
|
*eid++ = hapd->mld_link_id | (1 << 4);
|
||||||
|
*eid = 0;
|
||||||
|
#ifdef CONFIG_TESTING_OPTIONS
|
||||||
|
if (hapd->conf->mld_indicate_disabled)
|
||||||
|
*eid |= RNR_TBTT_INFO_MLD_PARAM2_LINK_DISABLED;
|
||||||
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
eid++;
|
||||||
|
|
||||||
|
*len += RNR_TBTT_INFO_MLD_LEN;
|
||||||
|
#endif /* CONFIG_IEEE80211BE */
|
||||||
|
}
|
||||||
|
|
||||||
|
(*tbtt_count)++;
|
||||||
|
*pos = eid;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static u8 * hostapd_eid_rnr_iface(struct hostapd_data *hapd,
|
static u8 * hostapd_eid_rnr_iface(struct hostapd_data *hapd,
|
||||||
struct hostapd_data *reporting_hapd,
|
struct hostapd_data *reporting_hapd,
|
||||||
u8 *eid, size_t *current_len,
|
u8 *eid, size_t *current_len,
|
||||||
struct mbssid_ie_profiles *skip_profiles)
|
struct mbssid_ie_profiles *skip_profiles)
|
||||||
{
|
{
|
||||||
struct hostapd_data *bss;
|
|
||||||
struct hostapd_iface *iface = hapd->iface;
|
struct hostapd_iface *iface = hapd->iface;
|
||||||
size_t i, start = 0;
|
size_t i, start = 0;
|
||||||
size_t len = *current_len;
|
size_t len = *current_len;
|
||||||
u8 *tbtt_count_pos, *eid_start = eid, *size_offset = (eid - len) + 1;
|
u8 *tbtt_count_pos, *eid_start = eid, *size_offset = (eid - len) + 1;
|
||||||
u8 tbtt_count = 0, op_class, channel, bss_param;
|
u8 tbtt_count = 0, op_class, channel;
|
||||||
bool ap_mld = false;
|
bool ap_mld = false;
|
||||||
|
|
||||||
#ifdef CONFIG_IEEE80211BE
|
#ifdef CONFIG_IEEE80211BE
|
||||||
|
@ -7548,74 +7627,10 @@ static u8 * hostapd_eid_rnr_iface(struct hostapd_data *hapd,
|
||||||
len += RNR_TBTT_HEADER_LEN;
|
len += RNR_TBTT_HEADER_LEN;
|
||||||
|
|
||||||
for (i = start; i < iface->num_bss; i++) {
|
for (i = start; i < iface->num_bss; i++) {
|
||||||
bss_param = 0;
|
if (hostapd_eid_rnr_bss(hapd, reporting_hapd,
|
||||||
bss = iface->bss[i];
|
skip_profiles, i,
|
||||||
if (!bss || !bss->conf || !bss->started)
|
&tbtt_count, &len, &eid))
|
||||||
continue;
|
|
||||||
|
|
||||||
if (bss == reporting_hapd ||
|
|
||||||
bss->conf->ignore_broadcast_ssid)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (skip_profiles &&
|
|
||||||
i >= skip_profiles->start && i < skip_profiles->end)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (len + RNR_TBTT_INFO_LEN > 255 ||
|
|
||||||
tbtt_count >= RNR_TBTT_INFO_COUNT_MAX)
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
*eid++ = RNR_NEIGHBOR_AP_OFFSET_UNKNOWN;
|
|
||||||
os_memcpy(eid, bss->own_addr, ETH_ALEN);
|
|
||||||
eid += ETH_ALEN;
|
|
||||||
os_memcpy(eid, &bss->conf->ssid.short_ssid, 4);
|
|
||||||
eid += 4;
|
|
||||||
if (bss->conf->ssid.short_ssid ==
|
|
||||||
reporting_hapd->conf->ssid.short_ssid)
|
|
||||||
bss_param |= RNR_BSS_PARAM_SAME_SSID;
|
|
||||||
|
|
||||||
if (iface->conf->mbssid != MBSSID_DISABLED &&
|
|
||||||
iface->num_bss > 1) {
|
|
||||||
bss_param |= RNR_BSS_PARAM_MULTIPLE_BSSID;
|
|
||||||
if (bss == hostapd_mbssid_get_tx_bss(hapd))
|
|
||||||
bss_param |=
|
|
||||||
RNR_BSS_PARAM_TRANSMITTED_BSSID;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_6ghz_op_class(hapd->iconf->op_class) &&
|
|
||||||
bss->conf->unsol_bcast_probe_resp_interval)
|
|
||||||
bss_param |=
|
|
||||||
RNR_BSS_PARAM_UNSOLIC_PROBE_RESP_ACTIVE;
|
|
||||||
|
|
||||||
bss_param |= RNR_BSS_PARAM_CO_LOCATED;
|
|
||||||
|
|
||||||
*eid++ = bss_param;
|
|
||||||
*eid++ = RNR_20_MHZ_PSD_MAX_TXPOWER - 1;
|
|
||||||
|
|
||||||
if (!ap_mld) {
|
|
||||||
len += RNR_TBTT_INFO_LEN;
|
|
||||||
} else {
|
|
||||||
#ifdef CONFIG_IEEE80211BE
|
|
||||||
if (reporting_hapd->conf->mld_ap &&
|
|
||||||
bss->conf->mld_id ==
|
|
||||||
reporting_hapd->conf->mld_id)
|
|
||||||
*eid++ = 0;
|
|
||||||
else
|
|
||||||
*eid++ = hapd->conf->mld_id;
|
|
||||||
|
|
||||||
*eid++ = hapd->mld_link_id | (1 << 4);
|
|
||||||
*eid = 0;
|
|
||||||
#ifdef CONFIG_TESTING_OPTIONS
|
|
||||||
if (hapd->conf->mld_indicate_disabled)
|
|
||||||
*eid |= RNR_TBTT_INFO_MLD_PARAM2_LINK_DISABLED;
|
|
||||||
#endif /* CONFIG_TESTING_OPTIONS */
|
|
||||||
eid++;
|
|
||||||
|
|
||||||
len += RNR_TBTT_INFO_MLD_LEN;
|
|
||||||
#endif /* CONFIG_IEEE80211BE */
|
|
||||||
}
|
|
||||||
|
|
||||||
tbtt_count += 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start = i;
|
start = i;
|
||||||
|
|
Loading…
Reference in a new issue