freebsd-dev/sys/net80211
Adrian Chadd a67acf111f [net80211] First part of A-MSDU offload handling - don't bump A-MPDU reordering seqno
When doing A-MSDU offload handling the driver is required to mark
A-MSDUs from the same MPDU with the same sequence number.
It then tags them as AMSDU (if it's a decap'ed A-MSDU) and AMSDU_MORE
(saying there's more AMSDUs decapped in the same MSDU.)
This allows encryption and sequence number offload to work right.

In the A-MSDU path the sequence number check looks at the A-MSDU flags
in the frame to see whether it's part of the same seqno and will pass them
(ie, not increment rx_seq until the last A-MSDU is seen from the driver,
or a new seqno shows up.0

However, I did this work in the A-MSDU path but not the A-MSDU in A-MPDU path.
For the non A-MDSU offload case the A-MPDU receive reordering will do its
thing and then pass up the MPDU up for decap - which then will see it's
an A-MSDU and decap each sub-frame.  But this isn't done for offloaded
A-MSDU frames.

This requires two parts:

* Don't bump the RX sequence number, same as above; and
* If frames go into the reordering buffer, they need to be added into the slot
  as a set of frames rather than a single frame, so once a new seqno shows up
  this slot can be marked as "full" and we can move on.

This patch does the first.  The latter requires that I find and commit
work to change rxa_m from an mbuf to an mbufq and the nhandle A-MSDU
there.  But, the first is enough to allow the normal case (ie, no or not
a lot of A-MPDU RX reordering) to work.

This allows the athp driver (QCA9880) throughput to go from VERY low
(like 5mbit TCP, 1/3-1/4 expected UDP throughput) to ~ 250mbit TCP
and > 300mbit UDP on a VHT/40 channel.  TCP sucks because, well, it
shows up as MASSIVE packet loss when all but one frame in a decap'ed
A-MSDU stream is dropped. Le whoops.

Now, where'd I put that laptop with the patch for rxa_m mbufq that
I wrote like in 2017...

Tested:

* AR9380, STA/AP mode (a big no-op, no A-MSDU hardware decap);
* if_run (RT3593), STA DWDS mode (A-MPDU / A-MSDU receive, but again
  no A-MSDU hardware decap);
* QCA9880, STA/AP mode (which is doing hardware A-MPDU/A-MSDU decap,
  but no A-MPDU reordering in the firmware.)
2020-06-12 04:19:03 +00:00
..
_ieee80211.h [net80211] Add initial A-MSDU in A-MPDU negotation support. 2020-06-05 07:38:10 +00:00
ieee80211_acl.c
ieee80211_action.c
ieee80211_action.h
ieee80211_adhoc.c [net80211] Send a probe request after IBSS node discovery 2020-06-05 00:11:44 +00:00
ieee80211_adhoc.h
ieee80211_ageq.c
ieee80211_ageq.h
ieee80211_alq.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (7 of many) 2020-02-21 16:32:17 +00:00
ieee80211_alq.h
ieee80211_amrr.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (7 of many) 2020-02-21 16:32:17 +00:00
ieee80211_amrr.h
ieee80211_crypto_ccmp.c
ieee80211_crypto_none.c
ieee80211_crypto_tkip.c
ieee80211_crypto_wep.c
ieee80211_crypto.c net80211: drop m_pullup call from ieee80211_crypto_decap. 2019-01-19 16:04:26 +00:00
ieee80211_crypto.h
ieee80211_ddb.c
ieee80211_dfs.c Do not acquire IEEE80211_LOCK twice in cac_timeout(); reuse 2019-02-02 16:21:23 +00:00
ieee80211_dfs.h
ieee80211_freebsd.c [net80211] ok ok if_xname won't ever be NULL. 2020-06-10 18:59:46 +00:00
ieee80211_freebsd.h [net80211] Add a method to return the vap's ifname. 2020-06-07 04:57:48 +00:00
ieee80211_hostap.c net80211(4): hide casts for 'i_seq' field offset calculation inside 2019-02-10 23:58:56 +00:00
ieee80211_hostap.h
ieee80211_ht.c [net80211] First part of A-MSDU offload handling - don't bump A-MPDU reordering seqno 2020-06-12 04:19:03 +00:00
ieee80211_ht.h [net80211] Fix this typo! 2020-06-06 06:17:51 +00:00
ieee80211_hwmp.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (7 of many) 2020-02-21 16:32:17 +00:00
ieee80211_input.c
ieee80211_input.h
ieee80211_ioctl.c Don't use if_maddr_rlock() in 802.11, use epoch(9) directly instead. 2019-10-10 23:55:33 +00:00
ieee80211_ioctl.h
ieee80211_mesh.c Don't indirect user pointers directly in two 802.11s ioctls. 2020-04-24 22:10:02 +00:00
ieee80211_mesh.h
ieee80211_monitor.c
ieee80211_monitor.h
ieee80211_node.c [net80211] Fix typo. 2020-06-06 05:46:12 +00:00
ieee80211_node.h
ieee80211_output.c [net80211] Flip on A-MPDU, A-MSDU, A-MPDU+A-MSDU and Fast frames options. 2020-06-06 22:25:00 +00:00
ieee80211_phy.c
ieee80211_phy.h [net80211] Migrate short slot time configuration into per-vap and deferred taskqueue updates. 2020-06-05 06:21:23 +00:00
ieee80211_power.c
ieee80211_power.h
ieee80211_proto.c [net80211] Don't call ic_updateslot if it's not set. 2020-06-05 14:17:19 +00:00
ieee80211_proto.h [net80211] Migrate short slot time configuration into per-vap and deferred taskqueue updates. 2020-06-05 06:21:23 +00:00
ieee80211_radiotap.c
ieee80211_radiotap.h
ieee80211_ratectl_none.c
ieee80211_ratectl.c
ieee80211_ratectl.h
ieee80211_regdomain.c
ieee80211_regdomain.h
ieee80211_rssadapt.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (7 of many) 2020-02-21 16:32:17 +00:00
ieee80211_rssadapt.h
ieee80211_scan_sta.c [net80211] Add some more debugging during scanning 2020-06-05 00:16:54 +00:00
ieee80211_scan_sw.c [net80211] Add some more debugging during scanning 2020-06-05 00:16:54 +00:00
ieee80211_scan_sw.h
ieee80211_scan.c net80211(4): do not setup roaming parameters for unsupported modes. 2019-02-03 01:32:02 +00:00
ieee80211_scan.h
ieee80211_sta.c [net80211] print out node A-MSDU state. 2020-06-05 07:38:46 +00:00
ieee80211_sta.h
ieee80211_superg.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (7 of many) 2020-02-21 16:32:17 +00:00
ieee80211_superg.h
ieee80211_tdma.c net80211(4): do not setup Tx parameters for unsupported modes. 2019-02-03 04:31:50 +00:00
ieee80211_tdma.h
ieee80211_var.h [net80211] Migrate short slot time configuration into per-vap and deferred taskqueue updates. 2020-06-05 06:21:23 +00:00
ieee80211_vht.c
ieee80211_vht.h
ieee80211_wds.c Restructure mbuf send tags to provide stronger guarantees. 2019-05-24 22:30:40 +00:00
ieee80211_wds.h
ieee80211_wps.h [ifconfig] Print more WPS attributes in verbose "list scan" output 2019-01-20 00:45:44 +00:00
ieee80211_xauth.c
ieee80211.c [net80211] Migrate short slot time configuration into per-vap and deferred taskqueue updates. 2020-06-05 06:21:23 +00:00
ieee80211.h [net80211] Add field definition for A-MSDU inside A-MPDU. 2020-06-05 04:04:47 +00:00