I noticed that my athn AP sends RTS frames before probe responses.
RTS should only used for unicast data frames. RTS reserves the medium,
i.e. it blocks transmissions from other devices for a given duration.

In the trace below, fe:e1:ba:d2:94:dc is my AP and fe:e1:ba:d1:8e:8f is
some unknown client trying to associate to a different network:

09:03:43.822925 802.11 flags=0<>: probe request, <radiotap v0, 1Mbit/s, chan 1, 
11g, sig -85dBm, noise -91dBm>
09:03:43.828944 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -71dBm, noise 
-91dBm>
09:03:43.830007 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -24dBm, noise 
-91dBm>
09:03:43.835756 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -21dBm, noise 
-91dBm>
09:03:43.836541 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -21dBm, noise 
-91dBm>
09:03:43.838416 802.11 flags=0<>: probe response, 
caps=61<ESS,PRIVACY,SHORT_PREAMBLE>, ssid (stsp.name), rates 1M* 2M* 5M* 11M* 
6M 9M 12M 18M, ds (chan 1), xrates 24M 36M 48M 54M, rsn 
0x0100000fac040100000fac040100000fac0200000000, htcaps=<20MHz,A-MSDU 
3839,A-MPDU max 8191,RxMCS 0xffff0000000000000000>, htop=<20MHz chan 1,STA 
chanw 20MHz,protect non-HT,basic MCS set 0x0000000000000000>, vendor 
0x0050f202010100000364000027a4000041435e0061322f00, <radiotap v0, 1Mbit/s, chan 
1, 11g, sig -39dBm, noise -91dBm>
09:03:43.840794 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -50dBm, noise 
-91dBm>
09:03:43.841639 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -21dBm, noise 
-91dBm>
09:03:43.842324 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -23dBm, noise 
-91dBm>
09:03:43.846901 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -22dBm, noise 
-91dBm>
09:03:43.847484 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -22dBm, noise 
-91dBm>
09:03:43.849345 802.11 flags=8<RETRY>: probe response, 
caps=61<ESS,PRIVACY,SHORT_PREAMBLE>, ssid (stsp.name), rates 1M* 2M* 5M* 11M* 
6M 9M 12M 18M, ds (chan 1), xrates 24M 36M 48M 54M, rsn 
0x0100000fac040100000fac040100000fac0200000000, htcaps=<20MHz,A-MSDU 
3839,A-MPDU max 8191,RxMCS 0xffff0000000000000000>, htop=<20MHz chan 1,STA 
chanw 20MHz,protect non-HT,basic MCS set 0x0000000000000000>, vendor 
0x0050f202010100000364000027a4000041435e0061322f00, <radiotap v0, 1Mbit/s, chan 
1, 11g, sig -22dBm, noise -91dBm>
09:03:43.849819 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -24dBm, noise 
-91dBm>
09:03:43.850357 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -24dBm, noise 
-91dBm>
09:03:43.850872 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -22dBm, noise 
-91dBm>
09:03:43.851845 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -24dBm, noise 
-91dBm>
09:03:43.852362 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -21dBm, noise 
-91dBm>
09:03:43.852827 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -85dBm, noise 
-91dBm>
09:03:43.853374 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -22dBm, noise 
-91dBm>
09:03:43.854360 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -24dBm, noise 
-91dBm>
09:03:43.855054 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -24dBm, noise 
-91dBm>
09:03:43.855692 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -22dBm, noise 
-91dBm>
09:03:43.858697 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -51dBm, noise 
-91dBm>
09:03:43.862407 802.11 flags=0<>: rts, duration 3158us, ra fe:e1:ba:d1:8e:8f, 
ta fe:e1:ba:d2:94:dc, <radiotap v0, 1Mbit/s, chan 1, 11g, sig -21dBm, noise 
-91dBm>

This diff stops the madness.

OK?

Index: ar5008.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/ar5008.c,v
retrieving revision 1.39
diff -u -p -r1.39 ar5008.c
--- ar5008.c    22 Jan 2017 10:17:37 -0000      1.39
+++ ar5008.c    30 Jan 2017 08:24:35 -0000
@@ -1500,7 +1500,9 @@ ar5008_tx(struct athn_softc *sc, struct 
        ds->ds_ctl6 = SM(AR_TXC6_ENCR_TYPE, encrtype);
 
        /* Check if frame must be protected using RTS/CTS or CTS-to-self. */
-       if (!IEEE80211_IS_MULTICAST(wh->i_addr1)) {
+       if (!IEEE80211_IS_MULTICAST(wh->i_addr1) &&
+           (wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) ==
+           IEEE80211_FC0_TYPE_DATA) {
                enum ieee80211_htprot htprot;
                
                htprot = (ic->ic_bss->ni_htop1 & IEEE80211_HTOP1_PROT_MASK);
Index: ar9003.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/ar9003.c,v
retrieving revision 1.43
diff -u -p -r1.43 ar9003.c
--- ar9003.c    22 Jan 2017 10:17:37 -0000      1.43
+++ ar9003.c    30 Jan 2017 08:33:48 -0000
@@ -1600,7 +1600,9 @@ ar9003_tx(struct athn_softc *sc, struct 
        ds->ds_ctl17 = SM(AR_TXC17_ENCR_TYPE, encrtype);
 
        /* Check if frame must be protected using RTS/CTS or CTS-to-self. */
-       if (!IEEE80211_IS_MULTICAST(wh->i_addr1)) {
+       if (!IEEE80211_IS_MULTICAST(wh->i_addr1) &&
+           (wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) ==
+           IEEE80211_FC0_TYPE_DATA) {
                /* NB: Group frames are sent using CCK in 802.11b/g. */
                if (totlen > ic->ic_rtsthreshold) {
                        ds->ds_ctl11 |= AR_TXC11_RTS_ENABLE;

Reply via email to