wpa_supplicant: Use hostapd_freq_params in assoc_params

Use hostapd_freq_params instead of simple frequency parameter for driver
commands. This is preparation for IBSS configuration to allow use of
HT/VHT in IBSS.

Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
This commit is contained in:
Janusz Dziedzic 2014-10-01 09:52:53 +02:00 committed by Jouni Malinen
parent 43f02e6ad7
commit 4ec68377ef
7 changed files with 55 additions and 53 deletions

View file

@ -411,6 +411,25 @@ enum wps_mode {
*/
};
struct hostapd_freq_params {
int mode;
int freq;
int channel;
/* for HT */
int ht_enabled;
int sec_channel_offset; /* 0 = HT40 disabled, -1 = HT40 enabled,
* secondary channel below primary, 1 = HT40
* enabled, secondary channel above primary */
/* for VHT */
int vht_enabled;
/* valid for both HT and VHT, center_freq2 is non-zero
* only for bandwidth 80 and an 80+80 channel */
int center_freq1, center_freq2;
int bandwidth;
};
/**
* struct wpa_driver_associate_params - Association parameters
* Data for struct wpa_driver_ops::associate().
@ -443,11 +462,9 @@ struct wpa_driver_associate_params {
size_t ssid_len;
/**
* freq - Frequency of the channel the selected AP is using
* Frequency that the selected AP is using (in MHz as
* reported in the scan results)
* freq - channel parameters
*/
int freq;
struct hostapd_freq_params freq;
/**
* freq_hint - Frequency of the channel the proposed AP is using
@ -1091,25 +1108,6 @@ struct hostapd_sta_add_params {
size_t supp_oper_classes_len;
};
struct hostapd_freq_params {
int mode;
int freq;
int channel;
/* for HT */
int ht_enabled;
int sec_channel_offset; /* 0 = HT40 disabled, -1 = HT40 enabled,
* secondary channel below primary, 1 = HT40
* enabled, secondary channel above primary */
/* for VHT */
int vht_enabled;
/* valid for both HT and VHT, center_freq2 is non-zero
* only for bandwidth 80 and an 80+80 channel */
int center_freq1, center_freq2;
int bandwidth;
};
struct mac_address {
u8 addr[ETH_ALEN];
};

View file

@ -358,7 +358,8 @@ static void wpa_driver_nl80211_scan_timeout(void *eloop_ctx,
void *timeout_ctx);
static int wpa_driver_nl80211_set_mode(struct i802_bss *bss,
enum nl80211_iftype nlmode);
static int wpa_driver_nl80211_set_mode_ibss(struct i802_bss *bss, int freq);
static int wpa_driver_nl80211_set_mode_ibss(struct i802_bss *bss,
struct hostapd_freq_params *freq);
static int
wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data *drv,
@ -8681,9 +8682,6 @@ static int wpa_driver_nl80211_ap(struct wpa_driver_nl80211_data *drv,
struct wpa_driver_associate_params *params)
{
enum nl80211_iftype nlmode, old_mode;
struct hostapd_freq_params freq = {
.freq = params->freq,
};
if (params->p2p) {
wpa_printf(MSG_DEBUG, "nl80211: Setup AP operations for P2P "
@ -8698,7 +8696,7 @@ static int wpa_driver_nl80211_ap(struct wpa_driver_nl80211_data *drv,
return -1;
}
if (nl80211_set_channel(drv->first_bss, &freq, 0)) {
if (nl80211_set_channel(drv->first_bss, &params->freq, 0)) {
if (old_mode != nlmode)
wpa_driver_nl80211_set_mode(drv->first_bss, old_mode);
nl80211_remove_monitor_interface(drv);
@ -8752,7 +8750,7 @@ static int wpa_driver_nl80211_ibss(struct wpa_driver_nl80211_data *drv,
wpa_printf(MSG_DEBUG, "nl80211: Join IBSS (ifindex=%d)", drv->ifindex);
if (wpa_driver_nl80211_set_mode_ibss(drv->first_bss, params->freq)) {
if (wpa_driver_nl80211_set_mode_ibss(drv->first_bss, &params->freq)) {
wpa_printf(MSG_INFO, "nl80211: Failed to set interface into "
"IBSS mode");
return -1;
@ -8776,8 +8774,16 @@ retry:
os_memcpy(drv->ssid, params->ssid, params->ssid_len);
drv->ssid_len = params->ssid_len;
wpa_printf(MSG_DEBUG, " * freq=%d", params->freq);
NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, params->freq);
wpa_printf(MSG_DEBUG, " * freq=%d", params->freq.freq);
wpa_printf(MSG_DEBUG, " * ht_enabled=%d", params->freq.ht_enabled);
wpa_printf(MSG_DEBUG, " * sec_channel_offset=%d",
params->freq.sec_channel_offset);
wpa_printf(MSG_DEBUG, " * vht_enabled=%d", params->freq.vht_enabled);
wpa_printf(MSG_DEBUG, " * center_freq1=%d", params->freq.center_freq1);
wpa_printf(MSG_DEBUG, " * center_freq2=%d", params->freq.center_freq2);
wpa_printf(MSG_DEBUG, " * bandwidth=%d", params->freq.bandwidth);
if (nl80211_put_freq_params(msg, &params->freq) < 0)
goto nla_put_failure;
if (params->beacon_int > 0) {
wpa_printf(MSG_DEBUG, " * beacon_int=%d", params->beacon_int);
@ -8855,10 +8861,10 @@ static int nl80211_connect_common(struct wpa_driver_nl80211_data *drv,
params->bssid_hint);
}
if (params->freq) {
wpa_printf(MSG_DEBUG, " * freq=%d", params->freq);
NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, params->freq);
drv->assoc_freq = params->freq;
if (params->freq.freq) {
wpa_printf(MSG_DEBUG, " * freq=%d", params->freq.freq);
NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, params->freq.freq);
drv->assoc_freq = params->freq.freq;
} else
drv->assoc_freq = 0;
@ -9349,13 +9355,11 @@ static int wpa_driver_nl80211_set_mode(struct i802_bss *bss,
}
static int wpa_driver_nl80211_set_mode_ibss(struct i802_bss *bss, int freq)
static int wpa_driver_nl80211_set_mode_ibss(struct i802_bss *bss,
struct hostapd_freq_params *freq)
{
struct hostapd_freq_params freq_params;
os_memset(&freq_params, 0, sizeof(freq_params));
freq_params.freq = freq;
return wpa_driver_nl80211_set_mode_impl(bss, NL80211_IFTYPE_ADHOC,
&freq_params);
freq);
}

View file

@ -1478,7 +1478,7 @@ static int wpa_driver_test_associate(
struct wpa_driver_test_data *drv = dbss->drv;
wpa_printf(MSG_DEBUG, "%s: priv=%p freq=%d pairwise_suite=%d "
"group_suite=%d key_mgmt_suite=%d auth_alg=%d mode=%d",
__func__, priv, params->freq, params->pairwise_suite,
__func__, priv, params->freq.freq, params->pairwise_suite,
params->group_suite, params->key_mgmt_suite,
params->auth_alg, params->mode);
wpa_driver_update_mode(drv, params->mode == IEEE80211_MODE_AP);

View file

@ -2119,7 +2119,8 @@ int wpa_driver_wext_associate(void *priv,
if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_MFP, value) < 0)
ret = -1;
#endif /* CONFIG_IEEE80211W */
if (params->freq && wpa_driver_wext_set_freq(drv, params->freq) < 0)
if (params->freq.freq &&
wpa_driver_wext_set_freq(drv, params->freq.freq) < 0)
ret = -1;
if (!drv->cfg80211 &&
wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len) < 0)