Root/package/network/services/hostapd/patches/604-wpa_s-support-htmode-param.patch

1From b9329c5dfeed7d5c55d2117d8dfe326fc40c8fb1 Mon Sep 17 00:00:00 2001
2From: Antonio Quartulli <ordex@autistici.org>
3Date: Tue, 3 Jul 2012 00:36:24 +0200
4Subject: [PATCH] wpa_s: support htmode param
5
6possible values are HT20, HT40-, HT40+ and NOHT
7
8Signed-off-by: Antonio Quartulli <ordex@autistici.org>
9---
10 src/drivers/driver.h | 2 ++
11 src/drivers/driver_nl80211.c | 16 ++++++++++
12 wpa_supplicant/config.c | 66 +++++++++++++++++++++++++++++++++++++++
13 wpa_supplicant/config_ssid.h | 2 ++
14 wpa_supplicant/wpa_supplicant.c | 2 ++
15 5 files changed, 88 insertions(+)
16
17--- a/src/drivers/driver.h
18+++ b/src/drivers/driver.h
19@@ -356,6 +356,8 @@ struct wpa_driver_associate_params {
20     int fixed_freq;
21     unsigned char rates[NL80211_MAX_SUPP_RATES];
22     int mcast_rate;
23+ int ht_set;
24+ unsigned int htmode;
25 
26     /**
27      * bg_scan_period - Background scan period in seconds, 0 to disable
28--- a/src/drivers/driver_nl80211.c
29+++ b/src/drivers/driver_nl80211.c
30@@ -6651,6 +6651,22 @@ retry:
31         NLA_PUT_U32(msg, NL80211_ATTR_MCAST_RATE, params->mcast_rate);
32     }
33 
34+ if (params->ht_set) {
35+ switch(params->htmode) {
36+ case NL80211_CHAN_HT20:
37+ wpa_printf(MSG_DEBUG, " * ht=HT20");
38+ break;
39+ case NL80211_CHAN_HT40PLUS:
40+ wpa_printf(MSG_DEBUG, " * ht=HT40+");
41+ break;
42+ case NL80211_CHAN_HT40MINUS:
43+ wpa_printf(MSG_DEBUG, " * ht=HT40-");
44+ break;
45+ }
46+ NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE,
47+ params->htmode);
48+ }
49+
50     ret = nl80211_set_conn_keys(params, msg);
51     if (ret)
52         goto nla_put_failure;
53--- a/wpa_supplicant/config.c
54+++ b/wpa_supplicant/config.c
55@@ -1495,6 +1495,71 @@ static char * wpa_config_write_mcast_rat
56 }
57 #endif /* NO_CONFIG_WRITE */
58 
59+static int wpa_config_parse_htmode(const struct parse_data *data,
60+ struct wpa_ssid *ssid, int line,
61+ const char *value)
62+{
63+ int i;
64+ static const struct {
65+ const char *name;
66+ unsigned int val;
67+ } htmap[] = {
68+ { .name = "HT20", .val = NL80211_CHAN_HT20, },
69+ { .name = "HT40+", .val = NL80211_CHAN_HT40PLUS, },
70+ { .name = "HT40-", .val = NL80211_CHAN_HT40MINUS, },
71+ { .name = "NOHT", .val = NL80211_CHAN_NO_HT, },
72+ };
73+ ssid->ht_set = 0;;
74+ for (i = 0; i < 4; i++) {
75+ if (strcasecmp(htmap[i].name, value) == 0) {
76+ ssid->htmode = htmap[i].val;
77+ ssid->ht_set = 1;
78+ break;
79+ }
80+ }
81+
82+ return 0;
83+}
84+
85+#ifndef NO_CONFIG_WRITE
86+static char * wpa_config_write_htmode(const struct parse_data *data,
87+ struct wpa_ssid *ssid)
88+{
89+ char *value;
90+ int res;
91+
92+ value = os_malloc(6); /* longest: HT40+ */
93+ if (value == NULL)
94+ return NULL;
95+
96+ switch(ssid->htmode) {
97+ case NL80211_CHAN_HT20:
98+ res = os_snprintf(value, 4, "HT20");
99+ break;
100+ case NL80211_CHAN_HT40PLUS:
101+ res = os_snprintf(value, 5, "HT40+");
102+ break;
103+ case NL80211_CHAN_HT40MINUS:
104+ res = os_snprintf(value, 5, "HT40-");
105+ break;
106+ case NL80211_CHAN_NO_HT:
107+ res = os_snprintf(value, 4, "NOHT");
108+ break;
109+ default:
110+ os_free(value);
111+ return NULL;
112+ }
113+
114+ if (res < 0) {
115+ os_free(value);
116+ return NULL;
117+ }
118+
119+ return value;
120+}
121+#endif /* NO_CONFIG_WRITE */
122+
123+
124 static int wpa_config_parse_rates(const struct parse_data *data,
125                   struct wpa_ssid *ssid, int line,
126                   const char *value)
127@@ -1734,6 +1799,7 @@ static const struct parse_data ssid_fiel
128     { INT_RANGE(beacon_interval, 0, 1000) },
129     { FUNC(rates) },
130     { FUNC(mcast_rate) },
131+ { FUNC(htmode) },
132 };
133 
134 #undef OFFSET
135--- a/wpa_supplicant/config_ssid.h
136+++ b/wpa_supplicant/config_ssid.h
137@@ -535,6 +535,8 @@ struct wpa_ssid {
138     int beacon_interval;
139     unsigned char rates[NL80211_MAX_SUPP_RATES];
140     double mcast_rate;
141+ int ht_set;
142+ unsigned int htmode;
143 };
144 
145 #endif /* CONFIG_SSID_H */
146--- a/wpa_supplicant/wpa_supplicant.c
147+++ b/wpa_supplicant/wpa_supplicant.c
148@@ -1577,6 +1577,8 @@ void wpa_supplicant_associate(struct wpa
149             i++;
150         }
151         params.mcast_rate = ssid->mcast_rate;
152+ params.ht_set = ssid->ht_set;
153+ params.htmode = ssid->htmode;
154     }
155 
156     params.wpa_ie = wpa_ie;
157

Archive Download this file



interactive