freebsd-dev/sys/net80211
Adrian Chadd 1c7b0c8456 [net80211] Initial A-MSDU support for testing / evaluation
A-MSDU is another 11n aggregation mechanism where multiple ethernet
frames get LLC encapsulated (so they have a length field), padded,
and put in a single MPDU (802.11 MAC frame.)  This means it gets sent
out as a single frame, with a single seqno, it's acked as one frame, etc.

It turns out that, hah, atheros fast frames is almost but not quite
like this, so I'm reusing all of the current superg/fast-frames stuff
in order to actually transmit A-MSDU.  Yes, this means that A-MSDU
frames are also only aggregated two at a time, so it's not necessarily
a huge win, but it's better than nothing.

This doesn't do anything by default - the driver needs to say it does
A-MSDU as well as set the AMSDU software TX capability so this code path
gets exercised.

For now, the only driver that enables this is urtwn.  I'll enable it
for rsu at some point soon.
Tested:

* Add an amsdu encap path to aggregate two frames, same as the
  fast-frames path.

* Always do the superg init/teardown and node init/teardown stuff,
  regardless of whether the nodes are doing fast-frames (the ATH
  capability stuff.)  That way we can reuse it for amsdu.

* Don't do AMSDU for multicast/broadcast and EAPOL frames.

* If we're doing A-MPDU, then don't bother doing FF/A-MSDU.
  We can likely do both together, but I don't want to change
  behaviour.

* Teach the fast frames approx txtime logic to support the 11n
  rates.  But, since we don't currently have a full "current rate"
  support, assume it's HT20, long-gi, etc.  That way we overshoot
  on the TX time estimation, so we're always inside the requirements.
  (And we only aggregate two frames for now, so we're not really
  going to exceed that.)

* Drop the maximum FF age default down to 2ms, otherwise we end up
  with some very annoyingly large latencies.

TODO:

* We only aggregate two ethernet frames, so I'm not checking the max
  A-MSDU size.  But when it comes time to support >2 frames, we should
  obey that.

Tested:

* urtwn(4)
2016-04-06 01:21:51 +00:00
..
_ieee80211.h Perform some rather amusing layering violations to add mbuf tags to the 2015-09-26 00:53:37 +00:00
ieee80211_acl.c These files were getting sys/malloc.h and vm/uma.h with header pollution 2016-02-01 17:41:21 +00:00
ieee80211_action.c These files were getting sys/malloc.h and vm/uma.h with header pollution 2016-02-01 17:41:21 +00:00
ieee80211_action.h
ieee80211_adhoc.c net80211: eliminate copy-paste nearby ieee80211_check_rxseq() 2016-03-01 06:47:21 +00:00
ieee80211_adhoc.h
ieee80211_ageq.c These files were getting sys/malloc.h and vm/uma.h with header pollution 2016-02-01 17:41:21 +00:00
ieee80211_ageq.h
ieee80211_alq.c - Provide necessary includes, that before came via if.h pollution. 2013-10-28 22:26:03 +00:00
ieee80211_alq.h
ieee80211_amrr.c [net80211] Begin implementing rate control module stats. 2016-03-16 02:07:04 +00:00
ieee80211_amrr.h
ieee80211_crypto_ccmp.c net80211: add new method for ieee80211_cipher (ic_setiv). 2015-10-03 00:50:13 +00:00
ieee80211_crypto_none.c These files were getting sys/malloc.h and vm/uma.h with header pollution 2016-02-01 17:41:21 +00:00
ieee80211_crypto_tkip.c net80211: add new method for ieee80211_cipher (ic_setiv). 2015-10-03 00:50:13 +00:00
ieee80211_crypto_wep.c net80211: add new method for ieee80211_cipher (ic_setiv). 2015-10-03 00:50:13 +00:00
ieee80211_crypto.c net80211: drop redundant 3rd parameter from iv_key_set(). 2015-10-03 21:48:27 +00:00
ieee80211_crypto.h net80211: add a possibility to retrieve current TX key without encapsulation. 2015-10-03 00:57:33 +00:00
ieee80211_ddb.c These files were getting sys/malloc.h and vm/uma.h with header pollution 2016-02-01 17:41:21 +00:00
ieee80211_dfs.c [net80211] migrate the time_* macros to ieee80211_* namespace. 2016-03-30 00:44:10 +00:00
ieee80211_dfs.h
ieee80211_freebsd.c These files were getting sys/malloc.h and vm/uma.h with header pollution 2016-02-01 17:41:21 +00:00
ieee80211_freebsd.h [net80211] note that M_FF will soon mean "fast-frames" or "A-MSDU." 2016-04-05 21:54:42 +00:00
ieee80211_hostap.c net80211: eliminate copy-paste nearby ieee80211_check_rxseq() 2016-03-01 06:47:21 +00:00
ieee80211_hostap.h
ieee80211_ht.c [net80211] migrate the time_* macros to ieee80211_* namespace. 2016-03-30 00:44:10 +00:00
ieee80211_ht.h [net80211] Initial A-MSDU support for testing / evaluation 2016-04-06 01:21:51 +00:00
ieee80211_hwmp.c [net80211] add missing static declarations. 2016-03-22 22:07:14 +00:00
ieee80211_input.c [net80211] IE 127 is not MESHEXTCAP, just EXTCAP. 2016-03-18 04:00:57 +00:00
ieee80211_input.h net80211: eliminate copy-paste nearby ieee80211_check_rxseq() 2016-03-01 06:47:21 +00:00
ieee80211_ioctl.c net80211: fix 'taskqueue_drain with non-sleepable locks held' warning 2016-02-28 23:35:03 +00:00
ieee80211_ioctl.h [net80211] add amsdu and fast frames encap failure counters in the ioctl 2016-04-04 20:32:31 +00:00
ieee80211_mesh.c net80211: eliminate copy-paste nearby ieee80211_check_rxseq() 2016-03-01 06:47:21 +00:00
ieee80211_mesh.h Migrate the 802.11s locks out into ieee80211_freebsd.h, so they can be 2015-05-26 04:25:11 +00:00
ieee80211_monitor.c Begin plumbing ieee80211_rx_stats through the receive path. 2015-05-25 16:37:41 +00:00
ieee80211_monitor.h
ieee80211_node.c [net80211] Initial A-MSDU support for testing / evaluation 2016-04-06 01:21:51 +00:00
ieee80211_node.h Migrate the fast-frames transmit support away from using the txa_private 2015-09-28 00:59:07 +00:00
ieee80211_output.c [net80211] Initial A-MSDU support for testing / evaluation 2016-04-06 01:21:51 +00:00
ieee80211_phy.c [net80211] rename 11n rate macros into a useful spot 2016-04-05 22:01:56 +00:00
ieee80211_phy.h [net80211] rename 11n rate macros into a useful spot 2016-04-05 22:01:56 +00:00
ieee80211_power.c [net80211] migrate the time_* macros to ieee80211_* namespace. 2016-03-30 00:44:10 +00:00
ieee80211_power.h Begin fleshing out support for net80211 provided (legacy) sleep management. 2014-04-24 01:39:53 +00:00
ieee80211_proto.c net80211: enable software beacon miss timer in SLEEP state 2016-03-21 20:52:09 +00:00
ieee80211_proto.h net80211: add ieee80211_restart_all() call. 2015-10-27 20:40:57 +00:00
ieee80211_radiotap.c Remove unused include. 2015-05-25 14:54:10 +00:00
ieee80211_radiotap.h
ieee80211_ratectl_none.c Move counter.h include into ieee80211_freebsd.h. Should fix build. 2015-05-27 14:05:46 +00:00
ieee80211_ratectl.c [net80211] Begin implementing rate control module stats. 2016-03-16 02:07:04 +00:00
ieee80211_ratectl.h [net80211] Begin implementing rate control module stats. 2016-03-16 02:07:04 +00:00
ieee80211_regdomain.c Replay r286410. Change KPI of how device drivers that provide wireless 2015-08-27 08:56:39 +00:00
ieee80211_regdomain.h
ieee80211_rssadapt.c Convert malloc/free back to #define's, as part of OS portability work. 2015-05-25 19:18:16 +00:00
ieee80211_rssadapt.h
ieee80211_scan_sta.c [net80211] migrate the time_* macros to ieee80211_* namespace. 2016-03-30 00:44:10 +00:00
ieee80211_scan_sw.c [net80211] migrate the time_* macros to ieee80211_* namespace. 2016-03-30 00:44:10 +00:00
ieee80211_scan_sw.h Break out the current 802.11 software scan methods into an indirect table. 2015-06-08 02:35:43 +00:00
ieee80211_scan.c These files were getting sys/malloc.h and vm/uma.h with header pollution 2016-02-01 17:41:21 +00:00
ieee80211_scan.h Break out the current 802.11 software scan methods into an indirect table. 2015-06-08 02:35:43 +00:00
ieee80211_sta.c [net80211] Initial A-MSDU support for testing / evaluation 2016-04-06 01:21:51 +00:00
ieee80211_sta.h
ieee80211_superg.c [net80211] Initial A-MSDU support for testing / evaluation 2016-04-06 01:21:51 +00:00
ieee80211_superg.h [net80211] Initial A-MSDU support for testing / evaluation 2016-04-06 01:21:51 +00:00
ieee80211_tdma.c Convert malloc/free back to #define's, as part of OS portability work. 2015-05-25 19:18:16 +00:00
ieee80211_tdma.h Begin plumbing ieee80211_rx_stats through the receive path. 2015-05-25 16:37:41 +00:00
ieee80211_var.h [net80211] Add a new capability flag to indicate that the stack should 2016-04-05 21:54:07 +00:00
ieee80211_wds.c net80211: fix panic for DWDS vaps 2016-03-26 08:59:56 +00:00
ieee80211_wds.h
ieee80211_xauth.c These files were getting sys/malloc.h and vm/uma.h with header pollution 2016-02-01 17:41:21 +00:00
ieee80211.c net80211: copy MAC address into iv_myaddr[] instead of aliasing it. 2016-04-05 21:29:11 +00:00
ieee80211.h [net80211] Add fields to decode uAPSD fields. 2016-03-30 00:42:18 +00:00