hostapd: Check EDMG configuration against capability
Signed-off-by: Alexei Avshalom Lazar <ailizaro@codeaurora.org>
This commit is contained in:
parent
dc3457cc4a
commit
241dd76cfd
3 changed files with 35 additions and 0 deletions
|
@ -1590,6 +1590,9 @@ static int setup_interface2(struct hostapd_iface *iface)
|
||||||
wpa_printf(MSG_DEBUG, "Interface initialization will be completed in a callback (ACS)");
|
wpa_printf(MSG_DEBUG, "Interface initialization will be completed in a callback (ACS)");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
ret = hostapd_check_edmg_capab(iface);
|
||||||
|
if (ret < 0)
|
||||||
|
goto fail;
|
||||||
ret = hostapd_check_ht_capab(iface);
|
ret = hostapd_check_ht_capab(iface);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
|
@ -704,6 +704,32 @@ int hostapd_check_ht_capab(struct hostapd_iface *iface)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int hostapd_check_edmg_capab(struct hostapd_iface *iface)
|
||||||
|
{
|
||||||
|
struct hostapd_hw_modes *mode = iface->hw_features;
|
||||||
|
struct ieee80211_edmg_config edmg;
|
||||||
|
|
||||||
|
if (!iface->conf->enable_edmg)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
hostapd_encode_edmg_chan(iface->conf->enable_edmg,
|
||||||
|
iface->conf->edmg_channel,
|
||||||
|
iface->conf->channel,
|
||||||
|
&edmg);
|
||||||
|
|
||||||
|
if (mode->edmg.channels && ieee802_edmg_is_allowed(mode->edmg, edmg))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
wpa_printf(MSG_WARNING, "Requested EDMG configuration is not valid");
|
||||||
|
wpa_printf(MSG_INFO, "EDMG capab: channels 0x%x, bw_config %d",
|
||||||
|
mode->edmg.channels, mode->edmg.bw_config);
|
||||||
|
wpa_printf(MSG_INFO,
|
||||||
|
"Requested EDMG configuration: channels 0x%x, bw_config %d",
|
||||||
|
edmg.channels, edmg.bw_config);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int hostapd_is_usable_chan(struct hostapd_iface *iface,
|
static int hostapd_is_usable_chan(struct hostapd_iface *iface,
|
||||||
int channel, int primary)
|
int channel, int primary)
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,6 +21,7 @@ const char * hostapd_hw_mode_txt(int mode);
|
||||||
int hostapd_hw_get_freq(struct hostapd_data *hapd, int chan);
|
int hostapd_hw_get_freq(struct hostapd_data *hapd, int chan);
|
||||||
int hostapd_hw_get_channel(struct hostapd_data *hapd, int freq);
|
int hostapd_hw_get_channel(struct hostapd_data *hapd, int freq);
|
||||||
int hostapd_check_ht_capab(struct hostapd_iface *iface);
|
int hostapd_check_ht_capab(struct hostapd_iface *iface);
|
||||||
|
int hostapd_check_edmg_capab(struct hostapd_iface *iface);
|
||||||
int hostapd_prepare_rates(struct hostapd_iface *iface,
|
int hostapd_prepare_rates(struct hostapd_iface *iface,
|
||||||
struct hostapd_hw_modes *mode);
|
struct hostapd_hw_modes *mode);
|
||||||
void hostapd_stop_setup_timers(struct hostapd_iface *iface);
|
void hostapd_stop_setup_timers(struct hostapd_iface *iface);
|
||||||
|
@ -61,6 +62,11 @@ static inline int hostapd_check_ht_capab(struct hostapd_iface *iface)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int hostapd_check_edmg_capab(struct hostapd_iface *iface)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static inline int hostapd_prepare_rates(struct hostapd_iface *iface,
|
static inline int hostapd_prepare_rates(struct hostapd_iface *iface,
|
||||||
struct hostapd_hw_modes *mode)
|
struct hostapd_hw_modes *mode)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue