linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH][RFC/RFT] rt2800: Implement selectable support for 802.11w (MFP)
@ 2012-05-10  7:19 Andreas Hartmann
  2012-05-10  8:58 ` [rt2x00-users] " Ivo Van Doorn
  0 siblings, 1 reply; 7+ messages in thread
From: Andreas Hartmann @ 2012-05-10  7:19 UTC (permalink / raw)
  To: users@rt2x00.serialmonkey.com; +Cc: linux-wireless@vger.kernel.org

This patch adds support for 802.11w for rt2800. This is achieved by
using the 802.11w implementation in mac80211.

To get this working, it is necessary to disable hw encryption of
rt2800pci / rt2800usb, because I don't know of any support in hardware
for 802.11w and therefore let mac80211 do the whole job.

The user can enable 802.11w with the new mod parameter enablemfp.
Enabling MFP disables hw encryption.

802.11w is deactivated per default.

Tested with rt2860 and rt3572.

This is a workaround as long as there isn't hardware support implemented
in the driver.

Signed-off-by: Andreas Hartmann <andihartmann@01019freenet.de>
---
diff -ur compat-wireless-2012-04-26.orig/drivers/net/wireless/rt2x00/rt2800lib.c compat-wireless-2012-04-26/drivers/net/wireless/rt2x00/rt2800lib.c
--- compat-wireless-2012-04-26.orig/drivers/net/wireless/rt2x00/rt2800lib.c	2012-04-26 22:10:30.000000000 +0200
+++ compat-wireless-2012-04-26/drivers/net/wireless/rt2x00/rt2800lib.c	2012-05-09 11:37:48.463278177 +0200
@@ -4519,6 +4519,15 @@
 	    IEEE80211_HW_AMPDU_AGGREGATION |
 	    IEEE80211_HW_REPORTS_TX_ACK_STATUS;
 
+	/* 
+	 * Enable support for 802.11w in mac80211. hwencryption must be disabled
+	 */
+	if (!test_bit(CAPABILITY_HW_CRYPTO, &rt2x00dev->cap_flags) && rt2x00dev->mfprequested) {
+		INFO(rt2x00dev, "802.11w support (MFP) enabled.\n");
+		rt2x00dev->hw->flags |=
+			IEEE80211_HW_MFP_CAPABLE;
+	}
+
 	/*
 	 * Don't set IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING for USB devices
 	 * unless we are capable of sending the buffered frames out after the
diff -ur compat-wireless-2012-04-26.orig/drivers/net/wireless/rt2x00/rt2800pci.c compat-wireless-2012-04-26/drivers/net/wireless/rt2x00/rt2800pci.c
--- compat-wireless-2012-04-26.orig/drivers/net/wireless/rt2x00/rt2800pci.c	2012-04-26 22:10:30.000000000 +0200
+++ compat-wireless-2012-04-26/drivers/net/wireless/rt2x00/rt2800pci.c	2012-05-09 13:29:47.159979903 +0200
@@ -54,6 +54,13 @@
 module_param_named(nohwcrypt, modparam_nohwcrypt, bool, S_IRUGO);
 MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption.");
 
+/*
+ * Enable support for 802.11w / MFP
+ */
+static bool modparam_enablemfp = false;
+module_param_named(enablemfp, modparam_enablemfp, bool, S_IRUGO);
+MODULE_PARM_DESC(enablemfp, "Enable 802.11w / MFP support. Hardware encryption gets disabled.");
+
 static void rt2800pci_mcu_status(struct rt2x00_dev *rt2x00dev, const u8 token)
 {
 	unsigned int i;
@@ -989,6 +996,8 @@
 	if (retval)
 		return retval;
 
+	rt2x00dev->mfprequested = modparam_enablemfp ? 1 : 0;
+
 	/*
 	 * Initialize hw specifications.
 	 */
@@ -1018,8 +1027,14 @@
 	__set_bit(REQUIRE_L2PAD, &rt2x00dev->cap_flags);
 	__set_bit(REQUIRE_TXSTATUS_FIFO, &rt2x00dev->cap_flags);
 	__set_bit(REQUIRE_TASKLET_CONTEXT, &rt2x00dev->cap_flags);
-	if (!modparam_nohwcrypt)
+
+	if (!modparam_nohwcrypt && !modparam_enablemfp) {
+		INFO(rt2x00dev, "hw encryption enabled.\n");
 		__set_bit(CAPABILITY_HW_CRYPTO, &rt2x00dev->cap_flags);
+		}
+	else
+		INFO(rt2x00dev, "hw encryption disabled. See modparams nohwcrypt or enablemfp.\n");
+
 	__set_bit(CAPABILITY_LINK_TUNING, &rt2x00dev->cap_flags);
 	__set_bit(REQUIRE_HT_TX_DESC, &rt2x00dev->cap_flags);
 
diff -ur compat-wireless-2012-04-26.orig/drivers/net/wireless/rt2x00/rt2800usb.c compat-wireless-2012-04-26/drivers/net/wireless/rt2x00/rt2800usb.c
--- compat-wireless-2012-04-26.orig/drivers/net/wireless/rt2x00/rt2800usb.c	2012-04-26 22:10:30.000000000 +0200
+++ compat-wireless-2012-04-26/drivers/net/wireless/rt2x00/rt2800usb.c	2012-05-09 13:38:26.633954818 +0200
@@ -50,6 +50,13 @@
 MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption.");
 
 /*
+ * Allow support for 802.11w / MFP to be enabled
+ */
+static bool modparam_enablemfp = false;
+module_param_named(enablemfp, modparam_enablemfp, bool, S_IRUGO);
+MODULE_PARM_DESC(enablemfp, "Enable 802.11w / MFP support. Hardware encryption gets disabled.");
+
+/*
  * Queue handlers.
  */
 static void rt2800usb_start_queue(struct data_queue *queue)
@@ -748,6 +755,8 @@
 	if (retval)
 		return retval;
 
+	rt2x00dev->mfprequested = modparam_enablemfp ? 1 : 0;
+
 	/*
 	 * Initialize hw specifications.
 	 */
@@ -767,8 +776,14 @@
 	 */
 	__set_bit(REQUIRE_FIRMWARE, &rt2x00dev->cap_flags);
 	__set_bit(REQUIRE_L2PAD, &rt2x00dev->cap_flags);
-	if (!modparam_nohwcrypt)
+
+	if (!modparam_nohwcrypt && !modparam_enablemfp) {
+		INFO(rt2x00dev, "hw encryption enabled.\n");
 		__set_bit(CAPABILITY_HW_CRYPTO, &rt2x00dev->cap_flags);
+	}
+	else
+		INFO(rt2x00dev, "hw encryption disabled. See modparams nohwcrypt or enablemfp.\n");
+
 	__set_bit(CAPABILITY_LINK_TUNING, &rt2x00dev->cap_flags);
 	__set_bit(REQUIRE_HT_TX_DESC, &rt2x00dev->cap_flags);
 	__set_bit(REQUIRE_TXSTATUS_FIFO, &rt2x00dev->cap_flags);
diff -ur compat-wireless-2012-04-26.orig/drivers/net/wireless/rt2x00/rt2x00.h compat-wireless-2012-04-26/drivers/net/wireless/rt2x00/rt2x00.h
--- compat-wireless-2012-04-26.orig/drivers/net/wireless/rt2x00/rt2x00.h	2012-04-26 22:10:30.000000000 +0200
+++ compat-wireless-2012-04-26/drivers/net/wireless/rt2x00/rt2x00.h	2012-05-09 11:10:56.733118518 +0200
@@ -821,6 +821,11 @@
 	struct hw_mode_spec spec;
 
 	/*
+	 * 802.11w (MFP) support requested by module parameter
+	 */
+	u8 mfprequested;
+
+	/*
 	 * This is the default TX/RX antenna setup as indicated
 	 * by the device's EEPROM.
 	 */

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2012-05-10 15:35 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-10  7:19 [PATCH][RFC/RFT] rt2800: Implement selectable support for 802.11w (MFP) Andreas Hartmann
2012-05-10  8:58 ` [rt2x00-users] " Ivo Van Doorn
2012-05-10 10:55   ` Andreas Hartmann
2012-05-10 12:34     ` Ivo Van Doorn
2012-05-10 14:21       ` Andreas Hartmann
2012-05-10 14:47         ` Gertjan van Wingerde
2012-05-10 15:32           ` Andreas Hartmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).