eba3b028e4
The following patches were merged upstream: 000-hostapd-Avoid-key-reinstallation-in-FT-handshake.patch replaced by commit 0e3bd7ac6 001-Prevent-reinstallation-of-an-already-in-use-group-ke.patch replaced by commit cb5132bb3 002-Extend-protection-of-GTK-IGTK-reinstallation-of-WNM-.patch replaced by commit 87e2db16b 003-Prevent-installation-of-an-all-zero-TK.patch replaced by commit 53bb18cc8 004-Fix-PTK-rekeying-to-generate-a-new-ANonce.patch replaced by commit 0adc9b28b 005-TDLS-Reject-TPK-TK-reconfiguration.patch replaced by commit ff89af96e 006-WNM-Ignore-WNM-Sleep-Mode-Response-without-pending-r.patch replaced by commit adae51f8b 007-FT-Do-not-allow-multiple-Reassociation-Response-fram.patch replaced by commit 2a9c5217b 008-WPA-Extra-defense-against-PTK-reinstalls-in-4-way-ha.patch replaced by commit a00e946c1 009-Clear-PMK-length-and-check-for-this-when-deriving-PT.patch replaced by commit b488a1294 010-Optional-AP-side-workaround-for-key-reinstallation-a.patch replaced by commit 6f234c1e2 011-Additional-consistentcy-checks-for-PTK-component-len.patch replaced by commit a6ea66530 012-Clear-BSSID-information-in-supplicant-state-machine-.patch replaced by commit c0fe5f125 013-WNM-Ignore-WNM-Sleep-Mode-Request-in-wnm_sleep_mode-.patch replaced by commit 114f2830d Some patches had to be modified to work with changed upstream source: 380-disable_ctrl_iface_mib.patch (adding more ifdef'ery) plus some minor knits needed for other patches to apply which are not worth being explicitely listed here. For SAE key management in mesh mode, use the newly introduce sae_password parameter instead of the psk parameter to also support SAE keys which would fail the checks applied on the psk field (ie. length and such). This fixes compatibility issues for users migrating from authsae. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
189 lines
4.6 KiB
Diff
189 lines
4.6 KiB
Diff
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 "ap/sta_info.h"
|
|
#include "common/defs.h"
|
|
#include "common/ieee802_11_defs.h"
|
|
#include "common/wpa_common.h"
|
|
@@ -762,6 +763,9 @@ struct wpa_driver_associate_params {
|
|
* responsible for selecting with which BSS to associate. */
|
|
const u8 *bssid;
|
|
|
|
+ unsigned char rates[WLAN_SUPP_RATES_MAX];
|
|
+ int mcast_rate;
|
|
+
|
|
/**
|
|
* bssid_hint - BSSID of a proposed AP
|
|
*
|
|
--- a/wpa_supplicant/config.c
|
|
+++ b/wpa_supplicant/config.c
|
|
@@ -17,6 +17,7 @@
|
|
#include "eap_peer/eap.h"
|
|
#include "p2p/p2p.h"
|
|
#include "fst/fst.h"
|
|
+#include "ap/sta_info.h"
|
|
#include "config.h"
|
|
|
|
|
|
@@ -2037,6 +2038,97 @@ static char * wpa_config_write_peerkey(c
|
|
#endif /* NO_CONFIG_WRITE */
|
|
|
|
|
|
+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 < WLAN_SUPP_RATES_MAX) {
|
|
+ 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 * WLAN_SUPP_RATES_MAX + 1);
|
|
+ if (value == NULL)
|
|
+ return NULL;
|
|
+ pos = value;
|
|
+ for (i = 0; i < WLAN_SUPP_RATES_MAX - 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[WLAN_SUPP_RATES_MAX - 1] / 2);
|
|
+ if (res < 0) {
|
|
+ os_free(value);
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ value[6 * WLAN_SUPP_RATES_MAX] = '\0';
|
|
+ return value;
|
|
+}
|
|
+#endif /* NO_CONFIG_WRITE */
|
|
+
|
|
/* Helper macros for network block parser */
|
|
|
|
#ifdef OFFSET
|
|
@@ -2279,6 +2371,8 @@ static const struct parse_data ssid_fiel
|
|
{ INT(ap_max_inactivity) },
|
|
{ INT(dtim_period) },
|
|
{ INT(beacon_int) },
|
|
+ { FUNC(rates) },
|
|
+ { FUNC(mcast_rate) },
|
|
#ifdef CONFIG_MACSEC
|
|
{ INT_RANGE(macsec_policy, 0, 1) },
|
|
{ INT_RANGE(macsec_integ_only, 0, 1) },
|
|
--- a/wpa_supplicant/config_ssid.h
|
|
+++ b/wpa_supplicant/config_ssid.h
|
|
@@ -10,8 +10,10 @@
|
|
#define CONFIG_SSID_H
|
|
|
|
#include "common/defs.h"
|
|
+#include "ap/sta_info.h"
|
|
#include "utils/list.h"
|
|
#include "eap_peer/eap_config.h"
|
|
+#include "drivers/nl80211_copy.h"
|
|
|
|
|
|
#define DEFAULT_EAP_WORKAROUND ((unsigned int) -1)
|
|
@@ -743,6 +745,9 @@ struct wpa_ssid {
|
|
*/
|
|
void *parent_cred;
|
|
|
|
+ unsigned char rates[WLAN_SUPP_RATES_MAX];
|
|
+ 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
|
|
@@ -2942,6 +2942,12 @@ static void wpas_start_assoc_cb(struct w
|
|
params.beacon_int = ssid->beacon_int;
|
|
else
|
|
params.beacon_int = wpa_s->conf->beacon_int;
|
|
+ i = 0;
|
|
+ while (i < WLAN_SUPP_RATES_MAX) {
|
|
+ params.rates[i] = ssid->rates[i];
|
|
+ i++;
|
|
+ }
|
|
+ params.mcast_rate = ssid->mcast_rate;
|
|
}
|
|
|
|
params.pairwise_suite = cipher_pairwise;
|