hostapd: Check EDMG configuration against capability

Signed-off-by: Alexei Avshalom Lazar <ailizaro@codeaurora.org>
This commit is contained in:
Alexei Avshalom Lazar 2019-09-11 12:03:07 +03:00 committed by Jouni Malinen
parent dc3457cc4a
commit 241dd76cfd
3 changed files with 35 additions and 0 deletions

View file

@ -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;

View file

@ -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)
{ {

View file

@ -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)
{ {