OpenWrt – Blame information for rev 3
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 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 |
||
6 | |||
7 | Signed-hostap: Antonio Quartulli <ordex@autistici.org> |
||
8 | --- |
||
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(-) |
||
14 | |||
15 | --- a/src/drivers/driver.h |
||
16 | +++ b/src/drivers/driver.h |
||
17 | @@ -19,6 +19,7 @@ |
||
18 | |||
19 | #define WPA_SUPPLICANT_DRIVER_VERSION 4 |
||
20 | |||
21 | +#include "ap/sta_info.h" |
||
22 | #include "common/defs.h" |
||
23 | #include "common/ieee802_11_defs.h" |
||
24 | #include "common/wpa_common.h" |
||
3 | office | 25 | @@ -762,6 +763,9 @@ struct wpa_driver_associate_params { |
1 | office | 26 | * responsible for selecting with which BSS to associate. */ |
27 | const u8 *bssid; |
||
28 | |||
29 | + unsigned char rates[WLAN_SUPP_RATES_MAX]; |
||
30 | + int mcast_rate; |
||
31 | + |
||
32 | /** |
||
33 | * bssid_hint - BSSID of a proposed AP |
||
34 | * |
||
35 | --- a/wpa_supplicant/config.c |
||
36 | +++ b/wpa_supplicant/config.c |
||
37 | @@ -17,6 +17,7 @@ |
||
38 | #include "eap_peer/eap.h" |
||
39 | #include "p2p/p2p.h" |
||
40 | #include "fst/fst.h" |
||
41 | +#include "ap/sta_info.h" |
||
42 | #include "config.h" |
||
43 | |||
44 | |||
3 | office | 45 | @@ -2037,6 +2038,97 @@ static char * wpa_config_write_peerkey(c |
1 | office | 46 | #endif /* NO_CONFIG_WRITE */ |
47 | |||
48 | |||
49 | +static int wpa_config_parse_mcast_rate(const struct parse_data *data, |
||
50 | + struct wpa_ssid *ssid, int line, |
||
51 | + const char *value) |
||
52 | +{ |
||
53 | + ssid->mcast_rate = (int)(strtod(value, NULL) * 10); |
||
54 | + |
||
55 | + return 0; |
||
56 | +} |
||
57 | + |
||
58 | +#ifndef NO_CONFIG_WRITE |
||
59 | +static char * wpa_config_write_mcast_rate(const struct parse_data *data, |
||
60 | + struct wpa_ssid *ssid) |
||
61 | +{ |
||
62 | + char *value; |
||
63 | + int res; |
||
64 | + |
||
65 | + if (!ssid->mcast_rate == 0) |
||
66 | + return NULL; |
||
67 | + |
||
68 | + value = os_malloc(6); /* longest: 300.0 */ |
||
69 | + if (value == NULL) |
||
70 | + return NULL; |
||
71 | + res = os_snprintf(value, 5, "%.1f", (double)ssid->mcast_rate / 10); |
||
72 | + if (res < 0) { |
||
73 | + os_free(value); |
||
74 | + return NULL; |
||
75 | + } |
||
76 | + return value; |
||
77 | +} |
||
78 | +#endif /* NO_CONFIG_WRITE */ |
||
79 | + |
||
80 | +static int wpa_config_parse_rates(const struct parse_data *data, |
||
81 | + struct wpa_ssid *ssid, int line, |
||
82 | + const char *value) |
||
83 | +{ |
||
84 | + int i; |
||
85 | + char *pos, *r, *sptr, *end; |
||
86 | + double rate; |
||
87 | + |
||
88 | + pos = (char *)value; |
||
89 | + r = strtok_r(pos, ",", &sptr); |
||
90 | + i = 0; |
||
91 | + while (pos && i < WLAN_SUPP_RATES_MAX) { |
||
92 | + rate = 0.0; |
||
93 | + if (r) |
||
94 | + rate = strtod(r, &end); |
||
95 | + ssid->rates[i] = rate * 2; |
||
96 | + if (*end != '\0' || rate * 2 != ssid->rates[i]) |
||
97 | + return 1; |
||
98 | + |
||
99 | + i++; |
||
100 | + r = strtok_r(NULL, ",", &sptr); |
||
101 | + } |
||
102 | + |
||
103 | + return 0; |
||
104 | +} |
||
105 | + |
||
106 | +#ifndef NO_CONFIG_WRITE |
||
107 | +static char * wpa_config_write_rates(const struct parse_data *data, |
||
108 | + struct wpa_ssid *ssid) |
||
109 | +{ |
||
110 | + char *value, *pos; |
||
111 | + int res, i; |
||
112 | + |
||
113 | + if (ssid->rates[0] <= 0) |
||
114 | + return NULL; |
||
115 | + |
||
116 | + value = os_malloc(6 * WLAN_SUPP_RATES_MAX + 1); |
||
117 | + if (value == NULL) |
||
118 | + return NULL; |
||
119 | + pos = value; |
||
120 | + for (i = 0; i < WLAN_SUPP_RATES_MAX - 1; i++) { |
||
121 | + res = os_snprintf(pos, 6, "%.1f,", (double)ssid->rates[i] / 2); |
||
122 | + if (res < 0) { |
||
123 | + os_free(value); |
||
124 | + return NULL; |
||
125 | + } |
||
126 | + pos += res; |
||
127 | + } |
||
128 | + res = os_snprintf(pos, 6, "%.1f", |
||
129 | + (double)ssid->rates[WLAN_SUPP_RATES_MAX - 1] / 2); |
||
130 | + if (res < 0) { |
||
131 | + os_free(value); |
||
132 | + return NULL; |
||
133 | + } |
||
134 | + |
||
135 | + value[6 * WLAN_SUPP_RATES_MAX] = '\0'; |
||
136 | + return value; |
||
137 | +} |
||
138 | +#endif /* NO_CONFIG_WRITE */ |
||
139 | + |
||
140 | /* Helper macros for network block parser */ |
||
141 | |||
142 | #ifdef OFFSET |
||
3 | office | 143 | @@ -2281,6 +2373,8 @@ static const struct parse_data ssid_fiel |
1 | office | 144 | { INT(ap_max_inactivity) }, |
145 | { INT(dtim_period) }, |
||
146 | { INT(beacon_int) }, |
||
147 | + { FUNC(rates) }, |
||
148 | + { FUNC(mcast_rate) }, |
||
149 | #ifdef CONFIG_MACSEC |
||
150 | { INT_RANGE(macsec_policy, 0, 1) }, |
||
151 | { INT_RANGE(macsec_integ_only, 0, 1) }, |
||
152 | --- a/wpa_supplicant/config_ssid.h |
||
153 | +++ b/wpa_supplicant/config_ssid.h |
||
154 | @@ -10,8 +10,10 @@ |
||
155 | #define CONFIG_SSID_H |
||
156 | |||
157 | #include "common/defs.h" |
||
158 | +#include "ap/sta_info.h" |
||
159 | #include "utils/list.h" |
||
160 | #include "eap_peer/eap_config.h" |
||
161 | +#include "drivers/nl80211_copy.h" |
||
162 | |||
163 | |||
164 | #define DEFAULT_EAP_WORKAROUND ((unsigned int) -1) |
||
3 | office | 165 | @@ -749,6 +751,9 @@ struct wpa_ssid { |
1 | office | 166 | */ |
167 | void *parent_cred; |
||
168 | |||
169 | + unsigned char rates[WLAN_SUPP_RATES_MAX]; |
||
170 | + double mcast_rate; |
||
171 | + |
||
172 | #ifdef CONFIG_MACSEC |
||
173 | /** |
||
174 | * macsec_policy - Determines the policy for MACsec secure session |
||
175 | --- a/wpa_supplicant/wpa_supplicant.c |
||
176 | +++ b/wpa_supplicant/wpa_supplicant.c |
||
3 | office | 177 | @@ -3000,6 +3000,12 @@ static void wpas_start_assoc_cb(struct w |
1 | office | 178 | params.beacon_int = ssid->beacon_int; |
179 | else |
||
180 | params.beacon_int = wpa_s->conf->beacon_int; |
||
181 | + i = 0; |
||
182 | + while (i < WLAN_SUPP_RATES_MAX) { |
||
183 | + params.rates[i] = ssid->rates[i]; |
||
184 | + i++; |
||
185 | + } |
||
186 | + params.mcast_rate = ssid->mcast_rate; |
||
187 | } |
||
188 | |||
189 | params.pairwise_suite = cipher_pairwise; |