IBSS: Add fixed_freq network parameter

Add fixed_freq=<0/1> network block parameter and pass it to the driver
when starting or joining an IBSS. If this flag is set, IBSS should not
try to look for other IBSS networks to merge with on different channels.

Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
This commit is contained in:
Janusz Dziedzic 2015-02-19 07:15:45 +01:00 committed by Jouni Malinen
parent 6f5e1b0bf6
commit 4d9e6fba2a
6 changed files with 22 additions and 0 deletions

View file

@ -766,6 +766,14 @@ struct wpa_driver_associate_params {
*/
int fixed_bssid;
/**
* fixed_freq - Fix control channel in IBSS mode
* 0 = don't fix control channel (default)
* 1 = fix control channel; this prevents IBSS merging with another
* channel
*/
int fixed_freq;
/**
* disable_ht - Disable HT (IEEE 802.11n) for this connection
*/

View file

@ -4378,6 +4378,12 @@ retry:
goto fail;
}
if (params->fixed_freq) {
wpa_printf(MSG_DEBUG, " * fixed_freq");
if (nla_put_flag(msg, NL80211_ATTR_FREQ_FIXED))
goto fail;
}
if (params->key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X ||
params->key_mgmt_suite == WPA_KEY_MGMT_PSK ||
params->key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X_SHA256 ||

View file

@ -1896,6 +1896,7 @@ static const struct parse_data ssid_fields[] = {
{ INT_RANGE(peerkey, 0, 1) },
{ INT_RANGE(mixed_cell, 0, 1) },
{ INT_RANGE(frequency, 0, 65000) },
{ INT_RANGE(fixed_freq, 0, 1) },
#ifdef CONFIG_MESH
{ FUNC(mesh_basic_rates) },
{ INT(dot11MeshMaxRetries) },

View file

@ -736,6 +736,7 @@ static void wpa_config_write_network(FILE *f, struct wpa_ssid *ssid)
#endif /* IEEE8021X_EAPOL */
INT(mode);
INT(frequency);
INT(fixed_freq);
write_int(f, "proactive_key_caching", ssid->proactive_key_caching, -1);
INT(disabled);
INT(peerkey);

View file

@ -419,6 +419,11 @@ struct wpa_ssid {
*/
int frequency;
/**
* fixed_freq - Use fixed frequency for IBSS
*/
int fixed_freq;
/**
* mesh_basic_rates - BSS Basic rate set for mesh network
*

View file

@ -2122,6 +2122,7 @@ static void wpas_start_assoc_cb(struct wpa_radio_work *work, int deinit)
ibss_mesh_setup_freq(wpa_s, ssid, &params.freq);
if (ssid->mode == WPAS_MODE_IBSS) {
params.fixed_freq = ssid->fixed_freq;
if (ssid->beacon_int)
params.beacon_int = ssid->beacon_int;
else