mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 22:44:27 -05:00 
			
		
		
		
	hostapd: add pending patches
add patched needed to pass more parameters to the IBSS JOIN command Signed-off-by: Antonio Quartulli <ordex@autistici.org> SVN-Revision: 32828
This commit is contained in:
		
							parent
							
								
									0e9e7dcd10
								
							
						
					
					
						commit
						3f3268c0c2
					
				@ -0,0 +1,222 @@
 | 
				
			|||||||
 | 
					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(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/src/drivers/driver.h b/src/drivers/driver.h
 | 
				
			||||||
 | 
					index 5ee92f7..d204148 100644
 | 
				
			||||||
 | 
					--- 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"
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 #define HOSTAPD_CHAN_DISABLED 0x00000001
 | 
				
			||||||
 | 
					@@ -332,6 +333,11 @@ struct wpa_driver_associate_params {
 | 
				
			||||||
 | 
					 	 */
 | 
				
			||||||
 | 
					 	int freq;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+	int beacon_interval;
 | 
				
			||||||
 | 
					+	int fixed_freq;
 | 
				
			||||||
 | 
					+	unsigned char rates[NL80211_MAX_SUPP_RATES];
 | 
				
			||||||
 | 
					+	int mcast_rate;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 	/**
 | 
				
			||||||
 | 
					 	 * bg_scan_period - Background scan period in seconds, 0 to disable
 | 
				
			||||||
 | 
					 	 * background scan, or -1 to indicate no change to default driver
 | 
				
			||||||
 | 
					diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
 | 
				
			||||||
 | 
					index c423bc3..be566ee 100644
 | 
				
			||||||
 | 
					--- a/wpa_supplicant/config.c
 | 
				
			||||||
 | 
					+++ b/wpa_supplicant/config.c
 | 
				
			||||||
 | 
					@@ -14,6 +14,7 @@
 | 
				
			||||||
 | 
					 #include "rsn_supp/wpa.h"
 | 
				
			||||||
 | 
					 #include "eap_peer/eap.h"
 | 
				
			||||||
 | 
					 #include "p2p/p2p.h"
 | 
				
			||||||
 | 
					+#include "drivers/nl80211_copy.h"
 | 
				
			||||||
 | 
					 #include "config.h"
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -1431,6 +1432,97 @@ static char * wpa_config_write_p2p_client_list(const struct parse_data *data,
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 #endif /* CONFIG_P2P */
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+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
 | 
				
			||||||
 | 
					@@ -1605,6 +1697,10 @@ static const struct parse_data ssid_fields[] = {
 | 
				
			||||||
 | 
					 	{ STR(ht_mcs) },
 | 
				
			||||||
 | 
					 #endif /* CONFIG_HT_OVERRIDES */
 | 
				
			||||||
 | 
					 	{ INT(ap_max_inactivity) },
 | 
				
			||||||
 | 
					+	{ INT_RANGE(fixed_freq, 0, 1) },
 | 
				
			||||||
 | 
					+	{ INT_RANGE(beacon_interval, 0, 1000) },
 | 
				
			||||||
 | 
					+	{ FUNC(rates) },
 | 
				
			||||||
 | 
					+	{ FUNC(mcast_rate) },
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 #undef OFFSET
 | 
				
			||||||
 | 
					diff --git a/wpa_supplicant/config_ssid.h b/wpa_supplicant/config_ssid.h
 | 
				
			||||||
 | 
					index 80d4382..8d152a4 100644
 | 
				
			||||||
 | 
					--- a/wpa_supplicant/config_ssid.h
 | 
				
			||||||
 | 
					+++ b/wpa_supplicant/config_ssid.h
 | 
				
			||||||
 | 
					@@ -11,6 +11,7 @@
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 #include "common/defs.h"
 | 
				
			||||||
 | 
					 #include "eap_peer/eap_config.h"
 | 
				
			||||||
 | 
					+#include "drivers/nl80211_copy.h"
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 #define MAX_SSID_LEN 32
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -499,6 +500,11 @@ struct wpa_ssid {
 | 
				
			||||||
 | 
					 	 * By default: 300 seconds.
 | 
				
			||||||
 | 
					 	 */
 | 
				
			||||||
 | 
					 	int ap_max_inactivity;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	int fixed_freq;
 | 
				
			||||||
 | 
					+	int beacon_interval;
 | 
				
			||||||
 | 
					+	unsigned char rates[NL80211_MAX_SUPP_RATES];
 | 
				
			||||||
 | 
					+	double mcast_rate;
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 #endif /* CONFIG_SSID_H */
 | 
				
			||||||
 | 
					diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
 | 
				
			||||||
 | 
					index cc85f1e..1473d91 100644
 | 
				
			||||||
 | 
					--- a/wpa_supplicant/wpa_supplicant.c
 | 
				
			||||||
 | 
					+++ b/wpa_supplicant/wpa_supplicant.c
 | 
				
			||||||
 | 
					@@ -1395,15 +1395,24 @@ void wpa_supplicant_associate(struct wpa_supplicant *wpa_s,
 | 
				
			||||||
 | 
					 		params.ssid_len = ssid->ssid_len;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	if (ssid->mode == WPAS_MODE_IBSS && ssid->bssid_set &&
 | 
				
			||||||
 | 
					-	    wpa_s->conf->ap_scan == 2) {
 | 
				
			||||||
 | 
					-		params.bssid = ssid->bssid;
 | 
				
			||||||
 | 
					-		params.fixed_bssid = 1;
 | 
				
			||||||
 | 
					+	if (ssid->mode == WPAS_MODE_IBSS) {
 | 
				
			||||||
 | 
					+		if (ssid->bssid_set && wpa_s->conf->ap_scan == 2) {
 | 
				
			||||||
 | 
					+			params.bssid = ssid->bssid;
 | 
				
			||||||
 | 
					+			params.fixed_bssid = 1;
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					+		if (ssid->frequency > 0 && params.freq == 0)
 | 
				
			||||||
 | 
					+			/* Initial channel for IBSS */
 | 
				
			||||||
 | 
					+			params.freq = ssid->frequency;
 | 
				
			||||||
 | 
					+		params.fixed_freq = ssid->fixed_freq;
 | 
				
			||||||
 | 
					+		params.beacon_interval = ssid->beacon_interval;
 | 
				
			||||||
 | 
					+		i = 0;
 | 
				
			||||||
 | 
					+		while (i < NL80211_MAX_SUPP_RATES) {
 | 
				
			||||||
 | 
					+			params.rates[i] = ssid->rates[i];
 | 
				
			||||||
 | 
					+			i++;
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					+		params.mcast_rate = ssid->mcast_rate;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-	if (ssid->mode == WPAS_MODE_IBSS && ssid->frequency > 0 &&
 | 
				
			||||||
 | 
					-	    params.freq == 0)
 | 
				
			||||||
 | 
					-		params.freq = ssid->frequency; /* Initial channel for IBSS */
 | 
				
			||||||
 | 
					 	params.wpa_ie = wpa_ie;
 | 
				
			||||||
 | 
					 	params.wpa_ie_len = wpa_ie_len;
 | 
				
			||||||
 | 
					 	params.pairwise_suite = cipher_pairwise;
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					1.7.9.4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,64 @@
 | 
				
			|||||||
 | 
					From ffc4445958a3ed4064f2e1bf73fa478a61c5cf7b Mon Sep 17 00:00:00 2001
 | 
				
			||||||
 | 
					From: Antonio Quartulli <ordex@autistici.org>
 | 
				
			||||||
 | 
					Date: Sun, 3 Jun 2012 18:42:25 +0200
 | 
				
			||||||
 | 
					Subject: [PATCHv2 602/602] driver_nl80211: use new parameters during ibss join
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Signed-hostap: Antonio Quartulli <ordex@autistici.org>
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					 src/drivers/driver_nl80211.c |   33 ++++++++++++++++++++++++++++++++-
 | 
				
			||||||
 | 
					 1 file changed, 32 insertions(+), 1 deletion(-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
 | 
				
			||||||
 | 
					index 22e7075..f510d18 100644
 | 
				
			||||||
 | 
					--- a/src/drivers/driver_nl80211.c
 | 
				
			||||||
 | 
					+++ b/src/drivers/driver_nl80211.c
 | 
				
			||||||
 | 
					@@ -6481,7 +6481,7 @@ static int wpa_driver_nl80211_ibss(struct wpa_driver_nl80211_data *drv,
 | 
				
			||||||
 | 
					 				   struct wpa_driver_associate_params *params)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct nl_msg *msg;
 | 
				
			||||||
 | 
					-	int ret = -1;
 | 
				
			||||||
 | 
					+	int ret = -1, i;
 | 
				
			||||||
 | 
					 	int count = 0;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 	wpa_printf(MSG_DEBUG, "nl80211: Join IBSS (ifindex=%d)", drv->ifindex);
 | 
				
			||||||
 | 
					@@ -6514,6 +6514,37 @@ retry:
 | 
				
			||||||
 | 
					 	wpa_printf(MSG_DEBUG, "  * freq=%d", params->freq);
 | 
				
			||||||
 | 
					 	NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, params->freq);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+	if (params->fixed_freq) {
 | 
				
			||||||
 | 
					+		wpa_printf(MSG_DEBUG, "  * fixed_freq");
 | 
				
			||||||
 | 
					+		NLA_PUT_FLAG(msg, NL80211_ATTR_FREQ_FIXED);
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	if (params->beacon_interval > 0) {
 | 
				
			||||||
 | 
					+		wpa_printf(MSG_DEBUG, "  * beacon_interval=%d",
 | 
				
			||||||
 | 
					+			   params->beacon_interval);
 | 
				
			||||||
 | 
					+		NLA_PUT_U32(msg, NL80211_ATTR_BEACON_INTERVAL,
 | 
				
			||||||
 | 
					+			    params->beacon_interval);
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	if (params->rates[0] > 0) {
 | 
				
			||||||
 | 
					+		wpa_printf(MSG_DEBUG, "  * basic_rates:");
 | 
				
			||||||
 | 
					+		i = 0;
 | 
				
			||||||
 | 
					+		while (i < NL80211_MAX_SUPP_RATES &&
 | 
				
			||||||
 | 
					+		       params->rates[i] > 0) {
 | 
				
			||||||
 | 
					+			wpa_printf(MSG_DEBUG, "    %.1f",
 | 
				
			||||||
 | 
					+				   (double)params->rates[i] / 2);
 | 
				
			||||||
 | 
					+			i++;
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					+		NLA_PUT(msg, NL80211_ATTR_BSS_BASIC_RATES, i,
 | 
				
			||||||
 | 
					+			params->rates);
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	if (params->mcast_rate > 0) {
 | 
				
			||||||
 | 
					+		wpa_printf(MSG_DEBUG, "  * mcast_rates=%.1f",
 | 
				
			||||||
 | 
					+			   (double)params->mcast_rate / 10);
 | 
				
			||||||
 | 
					+		NLA_PUT_U32(msg, NL80211_ATTR_MCAST_RATE, params->mcast_rate);
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 	ret = nl80211_set_conn_keys(params, msg);
 | 
				
			||||||
 | 
					 	if (ret)
 | 
				
			||||||
 | 
					 		goto nla_put_failure;
 | 
				
			||||||
 | 
					-- 
 | 
				
			||||||
 | 
					1.7.9.4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user