Did anyone test this?
On Wed, Jul 20, 2016 at 02:48:02PM +0200, Stefan Sperling wrote:
> Currently, if running in 11n mode, iwm always enables RTS/CTS to protect
> frames it is sending.
>
> To recap what the various HT protection modes are:
>
> /*
> * HT protection modes (see 802.11-2012 8.4.2.59)
> */
> enum ieee80211_htprot {
> IEEE80211_HTPROT_NONE = 0, /* only 20/40MHz HT STAs exist */
> IEEE80211_HTPROT_NONMEMBER, /* non-HT STA overlaps our channel */
> IEEE80211_HTPROT_20MHZ, /* 20MHz HT STA on a 40MHz channel */
> IEEE80211_HTPROT_NONHT_MIXED /* non-HT STA associated to our BSS */
> };
>
> If HT protection is 'none' or '20 MHz', we should not have to protect frames.
> Frame protection adds some overhead, so in theory not using protection
> should make Tx faster.
>
> This is an experimental change, and is not targeting 6.0.
>
> Still, it would be nice to get some test reports, especially where there are
> no 11a/b/g networks in the neighbourhood and all devices are capable of 11n.
>
> Index: if_iwm.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/if_iwm.c,v
> retrieving revision 1.95
> diff -u -p -r1.95 if_iwm.c
> --- if_iwm.c 18 Jul 2016 13:10:35 -0000 1.95
> +++ if_iwm.c 20 Jul 2016 12:15:54 -0000
> @@ -2799,6 +2799,9 @@ iwm_htprot_task(void *arg)
> if (error != 0)
> printf("%s: could not change HT protection: error %d\n",
> DEVNAME(sc), error);
> +
> + /* Also update RTS/CTS config via LQ command. */
> + iwm_setrates(in);
> }
>
> /*
> @@ -6093,9 +6096,14 @@ iwm_setrates(struct iwm_node *in)
> memset(lq, 0, sizeof(*lq));
> lq->sta_id = IWM_STATION_ID;
>
> - /* For HT, always enable RTS/CTS to avoid excessive retries. */
> - if (ni->ni_flags & IEEE80211_NODE_HT)
> - lq->flags |= IWM_LQ_FLAG_USE_RTS_MSK;
> + /* Enable RTS/CTS for HT protection. */
> + if (ni->ni_flags & IEEE80211_NODE_HT) {
> + enum ieee80211_htprot htprot =
> + (ni->ni_htop1 & IEEE80211_HTOP1_PROT_MASK);
> + if (htprot == IEEE80211_HTPROT_NONMEMBER ||
> + htprot == IEEE80211_HTPROT_NONHT_MIXED)
> + lq->flags |= IWM_LQ_FLAG_USE_RTS_MSK;
> + }
>
> /*
> * Fill the LQ rate selection table with legacy and/or HT rates
>