123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- From b9329c5dfeed7d5c55d2117d8dfe326fc40c8fb1 Mon Sep 17 00:00:00 2001
- From: Antonio Quartulli <ordex@autistici.org>
- Date: Tue, 3 Jul 2012 00:36:24 +0200
- Subject: [PATCH] wpa_s: support htmode param
- possible values are HT20, HT40-, HT40+ and NOHT
- Signed-off-by: Antonio Quartulli <ordex@autistici.org>
- ---
- src/drivers/driver.h | 2 ++
- src/drivers/driver_nl80211.c | 16 ++++++++++
- wpa_supplicant/config.c | 66 +++++++++++++++++++++++++++++++++++++++
- wpa_supplicant/config_ssid.h | 2 ++
- wpa_supplicant/wpa_supplicant.c | 2 ++
- 5 files changed, 88 insertions(+)
- --- a/src/drivers/driver.h
- +++ b/src/drivers/driver.h
- @@ -590,6 +590,8 @@ struct wpa_driver_associate_params {
-
- unsigned char rates[WLAN_SUPP_RATES_MAX];
- int mcast_rate;
- + int ht_set;
- + unsigned int htmode;
-
- /**
- * bssid_hint - BSSID of a proposed AP
- --- a/src/drivers/driver_nl80211.c
- +++ b/src/drivers/driver_nl80211.c
- @@ -4702,6 +4702,22 @@ retry:
- nla_put_u32(msg, NL80211_ATTR_MCAST_RATE, params->mcast_rate);
- }
-
- + if (params->ht_set) {
- + switch(params->htmode) {
- + case NL80211_CHAN_HT20:
- + wpa_printf(MSG_DEBUG, " * ht=HT20");
- + break;
- + case NL80211_CHAN_HT40PLUS:
- + wpa_printf(MSG_DEBUG, " * ht=HT40+");
- + break;
- + case NL80211_CHAN_HT40MINUS:
- + wpa_printf(MSG_DEBUG, " * ht=HT40-");
- + break;
- + }
- + nla_put_u32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE,
- + params->htmode);
- + }
- +
- ret = nl80211_set_conn_keys(params, msg);
- if (ret)
- goto fail;
- --- a/wpa_supplicant/config.c
- +++ b/wpa_supplicant/config.c
- @@ -1848,6 +1848,71 @@ static char * wpa_config_write_mcast_rat
- }
- #endif /* NO_CONFIG_WRITE */
-
- +static int wpa_config_parse_htmode(const struct parse_data *data,
- + struct wpa_ssid *ssid, int line,
- + const char *value)
- +{
- + int i;
- + static const struct {
- + const char *name;
- + unsigned int val;
- + } htmap[] = {
- + { .name = "HT20", .val = NL80211_CHAN_HT20, },
- + { .name = "HT40+", .val = NL80211_CHAN_HT40PLUS, },
- + { .name = "HT40-", .val = NL80211_CHAN_HT40MINUS, },
- + { .name = "NOHT", .val = NL80211_CHAN_NO_HT, },
- + };
- + ssid->ht_set = 0;;
- + for (i = 0; i < 4; i++) {
- + if (strcasecmp(htmap[i].name, value) == 0) {
- + ssid->htmode = htmap[i].val;
- + ssid->ht_set = 1;
- + break;
- + }
- + }
- +
- + return 0;
- +}
- +
- +#ifndef NO_CONFIG_WRITE
- +static char * wpa_config_write_htmode(const struct parse_data *data,
- + struct wpa_ssid *ssid)
- +{
- + char *value;
- + int res;
- +
- + value = os_malloc(6); /* longest: HT40+ */
- + if (value == NULL)
- + return NULL;
- +
- + switch(ssid->htmode) {
- + case NL80211_CHAN_HT20:
- + res = os_snprintf(value, 4, "HT20");
- + break;
- + case NL80211_CHAN_HT40PLUS:
- + res = os_snprintf(value, 5, "HT40+");
- + break;
- + case NL80211_CHAN_HT40MINUS:
- + res = os_snprintf(value, 5, "HT40-");
- + break;
- + case NL80211_CHAN_NO_HT:
- + res = os_snprintf(value, 4, "NOHT");
- + break;
- + default:
- + os_free(value);
- + return NULL;
- + }
- +
- + if (res < 0) {
- + os_free(value);
- + return NULL;
- + }
- +
- + return value;
- +}
- +#endif /* NO_CONFIG_WRITE */
- +
- +
- static int wpa_config_parse_rates(const struct parse_data *data,
- struct wpa_ssid *ssid, int line,
- const char *value)
- @@ -2142,6 +2207,7 @@ static const struct parse_data ssid_fiel
- { INT_RANGE(fixed_freq, 0, 1) },
- { FUNC(rates) },
- { FUNC(mcast_rate) },
- + { FUNC(htmode) },
- #ifdef CONFIG_MACSEC
- { INT_RANGE(macsec_policy, 0, 1) },
- #endif /* CONFIG_MACSEC */
- --- a/wpa_supplicant/config_ssid.h
- +++ b/wpa_supplicant/config_ssid.h
- @@ -715,6 +715,8 @@ struct wpa_ssid {
-
- unsigned char rates[WLAN_SUPP_RATES_MAX];
- double mcast_rate;
- + int ht_set;
- + unsigned int htmode;
-
- #ifdef CONFIG_MACSEC
- /**
- --- a/wpa_supplicant/wpa_supplicant.c
- +++ b/wpa_supplicant/wpa_supplicant.c
- @@ -2517,6 +2517,8 @@ static void wpas_start_assoc_cb(struct w
- i++;
- }
- params.mcast_rate = ssid->mcast_rate;
- + params.ht_set = ssid->ht_set;
- + params.htmode = ssid->htmode;
- }
-
- params.wpa_ie = wpa_ie;
|