[rt2x00-users] [PATCH][RFC/RFT] rt2800: Implement selectable support for 802.11w (MFP)
Ivo Van Doorn
ivdoorn at gmail.com
Thu May 10 18:58:18 EST 2012
Hi,
On Thu, May 10, 2012 at 9:19 AM, Andreas Hartmann
<andihartmann at 01019freenet.de> wrote:
> 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 at 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;
> + }
Can't the whole patch be simplified into
if (!test_bit(CAPABILITY_HW_CRYPTO, &rt2x00dev->cap_flags)) {
INFO(rt2x00dev, "802.11w support (MFP) enabled.\n");
rt2x00dev->hw->flags |=
IEEE80211_HW_MFP_CAPABLE;
}
Why need a extra moduleflag when all it does is toggle the nohwcrypto
module parameter?
> /*
> * 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;
If enablemfp is already a boolean, why need the ? 1 : 0 statement?
And the changes here are really needed (see earlier comment)
can't the mfprequested bit not be a flag in the cap_flags or something?
> /*
> * 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.
> */
>
> _______________________________________________
> users mailing list
> users at rt2x00.serialmonkey.com
> http://rt2x00.serialmonkey.com/mailman/listinfo/users_rt2x00.serialmonkey.com
More information about the users
mailing list