1 From 4bb69d15477e0f2b00e166845341dc933de47c58 Mon Sep 17 00:00:00 2001
2 From: Antonio Quartulli <ordex@autistici.org>
3 Date: Sun, 3 Jun 2012 18:22:56 +0200
4 Subject: [PATCHv2 601/602] wpa_supplicant: add new config params to be used
5 with the ibss join command
7 Signed-hostap: Antonio Quartulli <ordex@autistici.org>
9 src/drivers/driver.h | 6 +++
10 wpa_supplicant/config.c | 96 +++++++++++++++++++++++++++++++++++++++
11 wpa_supplicant/config_ssid.h | 6 +++
12 wpa_supplicant/wpa_supplicant.c | 23 +++++++---
13 4 files changed, 124 insertions(+), 7 deletions(-)
15 --- a/src/drivers/driver.h
16 +++ b/src/drivers/driver.h
19 #define WPA_SUPPLICANT_DRIVER_VERSION 4
21 +#include "drivers/nl80211_copy.h"
22 #include "common/defs.h"
23 #include "utils/list.h"
25 @@ -538,6 +539,9 @@ struct wpa_driver_associate_params {
26 * responsible for selecting with which BSS to associate. */
29 + unsigned char rates[NL80211_MAX_SUPP_RATES];
33 * bssid_hint - BSSID of a proposed AP
35 --- a/wpa_supplicant/config.c
36 +++ b/wpa_supplicant/config.c
38 #include "rsn_supp/wpa.h"
39 #include "eap_peer/eap.h"
41 +#include "drivers/nl80211_copy.h"
45 @@ -1722,6 +1723,97 @@ static char * wpa_config_write_mesh_basi
46 #endif /* CONFIG_MESH */
49 +static int wpa_config_parse_mcast_rate(const struct parse_data *data,
50 + struct wpa_ssid *ssid, int line,
53 + ssid->mcast_rate = (int)(strtod(value, NULL) * 10);
58 +#ifndef NO_CONFIG_WRITE
59 +static char * wpa_config_write_mcast_rate(const struct parse_data *data,
60 + struct wpa_ssid *ssid)
65 + if (!ssid->mcast_rate == 0)
68 + value = os_malloc(6); /* longest: 300.0 */
71 + res = os_snprintf(value, 5, "%.1f", (double)ssid->mcast_rate / 10);
78 +#endif /* NO_CONFIG_WRITE */
80 +static int wpa_config_parse_rates(const struct parse_data *data,
81 + struct wpa_ssid *ssid, int line,
85 + char *pos, *r, *sptr, *end;
88 + pos = (char *)value;
89 + r = strtok_r(pos, ",", &sptr);
91 + while (pos && i < NL80211_MAX_SUPP_RATES) {
94 + rate = strtod(r, &end);
95 + ssid->rates[i] = rate * 2;
96 + if (*end != '\0' || rate * 2 != ssid->rates[i])
100 + r = strtok_r(NULL, ",", &sptr);
106 +#ifndef NO_CONFIG_WRITE
107 +static char * wpa_config_write_rates(const struct parse_data *data,
108 + struct wpa_ssid *ssid)
113 + if (ssid->rates[0] <= 0)
116 + value = os_malloc(6 * NL80211_MAX_SUPP_RATES + 1);
120 + for (i = 0; i < NL80211_MAX_SUPP_RATES - 1; i++) {
121 + res = os_snprintf(pos, 6, "%.1f,", (double)ssid->rates[i] / 2);
128 + res = os_snprintf(pos, 6, "%.1f",
129 + (double)ssid->rates[NL80211_MAX_SUPP_RATES - 1] / 2);
135 + value[6 * NL80211_MAX_SUPP_RATES] = '\0';
138 +#endif /* NO_CONFIG_WRITE */
140 /* Helper macros for network block parser */
143 @@ -1947,6 +2039,9 @@ static const struct parse_data ssid_fiel
144 { INT(ap_max_inactivity) },
145 { INT(dtim_period) },
147 + { INT_RANGE(fixed_freq, 0, 1) },
149 + { FUNC(mcast_rate) },
151 { INT_RANGE(macsec_policy, 0, 1) },
152 #endif /* CONFIG_MACSEC */
153 --- a/wpa_supplicant/config_ssid.h
154 +++ b/wpa_supplicant/config_ssid.h
156 #include "common/defs.h"
157 #include "utils/list.h"
158 #include "eap_peer/eap_config.h"
159 +#include "drivers/nl80211_copy.h"
161 #define MAX_SSID_LEN 32
163 @@ -675,6 +676,9 @@ struct wpa_ssid {
167 + unsigned char rates[NL80211_MAX_SUPP_RATES];
172 * macsec_policy - Determines the policy for MACsec secure session
173 --- a/wpa_supplicant/wpa_supplicant.c
174 +++ b/wpa_supplicant/wpa_supplicant.c
175 @@ -2266,6 +2266,13 @@ static void wpas_start_assoc_cb(struct w
176 params.beacon_int = ssid->beacon_int;
178 params.beacon_int = wpa_s->conf->beacon_int;
179 + params.fixed_freq = ssid->fixed_freq;
181 + while (i < NL80211_MAX_SUPP_RATES) {
182 + params.rates[i] = ssid->rates[i];
185 + params.mcast_rate = ssid->mcast_rate;
188 params.wpa_ie = wpa_ie;