123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- From 4bb69d15477e0f2b00e166845341dc933de47c58 Mon Sep 17 00:00:00 2001
- From: Antonio Quartulli <ordex@autistici.org>
- Date: Sun, 3 Jun 2012 18:22:56 +0200
- Subject: [PATCHv2 601/602] wpa_supplicant: add new config params to be used
- with the ibss join command
- Signed-hostap: Antonio Quartulli <ordex@autistici.org>
- ---
- src/drivers/driver.h | 6 +++
- wpa_supplicant/config.c | 96 +++++++++++++++++++++++++++++++++++++++
- wpa_supplicant/config_ssid.h | 6 +++
- wpa_supplicant/wpa_supplicant.c | 23 +++++++---
- 4 files changed, 124 insertions(+), 7 deletions(-)
- --- a/src/drivers/driver.h
- +++ b/src/drivers/driver.h
- @@ -19,6 +19,7 @@
-
- #define WPA_SUPPLICANT_DRIVER_VERSION 4
-
- +#include "drivers/nl80211_copy.h"
- #include "common/defs.h"
- #include "common/ieee802_11_defs.h"
- #include "utils/list.h"
- @@ -587,6 +588,9 @@ struct wpa_driver_associate_params {
- * responsible for selecting with which BSS to associate. */
- const u8 *bssid;
-
- + unsigned char rates[NL80211_MAX_SUPP_RATES];
- + int mcast_rate;
- +
- /**
- * bssid_hint - BSSID of a proposed AP
- *
- --- a/wpa_supplicant/config.c
- +++ b/wpa_supplicant/config.c
- @@ -16,6 +16,7 @@
- #include "eap_peer/eap.h"
- #include "p2p/p2p.h"
- #include "fst/fst.h"
- +#include "drivers/nl80211_copy.h"
- #include "config.h"
-
-
- @@ -1816,6 +1817,97 @@ static char * wpa_config_write_mesh_basi
- #endif /* CONFIG_MESH */
-
-
- +static int wpa_config_parse_mcast_rate(const struct parse_data *data,
- + struct wpa_ssid *ssid, int line,
- + const char *value)
- +{
- + ssid->mcast_rate = (int)(strtod(value, NULL) * 10);
- +
- + return 0;
- +}
- +
- +#ifndef NO_CONFIG_WRITE
- +static char * wpa_config_write_mcast_rate(const struct parse_data *data,
- + struct wpa_ssid *ssid)
- +{
- + char *value;
- + int res;
- +
- + if (!ssid->mcast_rate == 0)
- + return NULL;
- +
- + value = os_malloc(6); /* longest: 300.0 */
- + if (value == NULL)
- + return NULL;
- + res = os_snprintf(value, 5, "%.1f", (double)ssid->mcast_rate / 10);
- + 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)
- +{
- + int i;
- + char *pos, *r, *sptr, *end;
- + double rate;
- +
- + pos = (char *)value;
- + r = strtok_r(pos, ",", &sptr);
- + i = 0;
- + while (pos && i < NL80211_MAX_SUPP_RATES) {
- + rate = 0.0;
- + if (r)
- + rate = strtod(r, &end);
- + ssid->rates[i] = rate * 2;
- + if (*end != '\0' || rate * 2 != ssid->rates[i])
- + return 1;
- +
- + i++;
- + r = strtok_r(NULL, ",", &sptr);
- + }
- +
- + return 0;
- +}
- +
- +#ifndef NO_CONFIG_WRITE
- +static char * wpa_config_write_rates(const struct parse_data *data,
- + struct wpa_ssid *ssid)
- +{
- + char *value, *pos;
- + int res, i;
- +
- + if (ssid->rates[0] <= 0)
- + return NULL;
- +
- + value = os_malloc(6 * NL80211_MAX_SUPP_RATES + 1);
- + if (value == NULL)
- + return NULL;
- + pos = value;
- + for (i = 0; i < NL80211_MAX_SUPP_RATES - 1; i++) {
- + res = os_snprintf(pos, 6, "%.1f,", (double)ssid->rates[i] / 2);
- + if (res < 0) {
- + os_free(value);
- + return NULL;
- + }
- + pos += res;
- + }
- + res = os_snprintf(pos, 6, "%.1f",
- + (double)ssid->rates[NL80211_MAX_SUPP_RATES - 1] / 2);
- + if (res < 0) {
- + os_free(value);
- + return NULL;
- + }
- +
- + value[6 * NL80211_MAX_SUPP_RATES] = '\0';
- + return value;
- +}
- +#endif /* NO_CONFIG_WRITE */
- +
- /* Helper macros for network block parser */
-
- #ifdef OFFSET
- @@ -2047,6 +2139,9 @@ static const struct parse_data ssid_fiel
- { INT(ap_max_inactivity) },
- { INT(dtim_period) },
- { INT(beacon_int) },
- + { INT_RANGE(fixed_freq, 0, 1) },
- + { FUNC(rates) },
- + { FUNC(mcast_rate) },
- #ifdef CONFIG_MACSEC
- { INT_RANGE(macsec_policy, 0, 1) },
- #endif /* CONFIG_MACSEC */
- --- a/wpa_supplicant/config_ssid.h
- +++ b/wpa_supplicant/config_ssid.h
- @@ -12,6 +12,7 @@
- #include "common/defs.h"
- #include "utils/list.h"
- #include "eap_peer/eap_config.h"
- +#include "drivers/nl80211_copy.h"
-
-
- #define DEFAULT_EAP_WORKAROUND ((unsigned int) -1)
- @@ -711,6 +712,9 @@ struct wpa_ssid {
- */
- void *parent_cred;
-
- + unsigned char rates[NL80211_MAX_SUPP_RATES];
- + double mcast_rate;
- +
- #ifdef CONFIG_MACSEC
- /**
- * macsec_policy - Determines the policy for MACsec secure session
- --- a/wpa_supplicant/wpa_supplicant.c
- +++ b/wpa_supplicant/wpa_supplicant.c
- @@ -2510,6 +2510,13 @@ static void wpas_start_assoc_cb(struct w
- params.beacon_int = ssid->beacon_int;
- else
- params.beacon_int = wpa_s->conf->beacon_int;
- + params.fixed_freq = ssid->fixed_freq;
- + i = 0;
- + while (i < NL80211_MAX_SUPP_RATES) {
- + params.rates[i] = ssid->rates[i];
- + i++;
- + }
- + params.mcast_rate = ssid->mcast_rate;
- }
-
- params.wpa_ie = wpa_ie;
|