Search Linux Wireless

Re: [rt2x00-users] [PATCH][RFC/RFT] rt2800: Implement selectable support for 802.11w (MFP)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Thu, May 10, 2012 at 9:19 AM, Andreas Hartmann
<andihartmann@xxxxxxxxxxxxxxx> 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@xxxxxxxxxxxxxxx>
> ---
> 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@xxxxxxxxxxxxxxxxxxxxxxx
> http://rt2x00.serialmonkey.com/mailman/listinfo/users_rt2x00.serialmonkey.com
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux