Currently Fast xmit is supported for AP, STA and other device types where the destination doesn't change for the lifetime of its association by caching the static parts of the header that can be reused directly for every Tx such as addresses and updates the mutable header fields such as PN. This technique is not directly applicable for a Mesh device type due to the dynamic nature of the topology and protocol. The header is built based on the destination mesh device which is proxying a certain external device and based on the Mesh destination the next hop changes. And the RA/A1 which is the next hop for reaching the destination can vary during runtime as per the best route based on airtime. To accommodate these changes and to come up with a solution to avoid overhead during header generation, the headers comprising the MAC, Mesh and LLC part are cached whenever data for a certain external destination is sent. This cached header is reused every time a data is sent to that external destination. To ensure the changes in network are reflected in these cached headers, the Mesh Proxy path table and Mesh path table changes are monitored and corresponding headers are updated or flushed as applicable so that the header used for a frame towards a certain destination is valid. Old headers are flushed by the mesh housekeeping timers and based on the cache size. Only 6addr frame headers are cached currently. Tested with ath11k driver. Sriram R (3): cfg80211: increase mesh config attribute bitmask size cfg80211: Add provision for changing mesh header cache size mac80211: Mesh Fast xmit support include/net/cfg80211.h | 5 +- include/uapi/linux/nl80211.h | 4 + net/mac80211/cfg.c | 6 +- net/mac80211/debugfs_netdev.c | 3 + net/mac80211/ieee80211_i.h | 20 +++ net/mac80211/mesh.c | 2 + net/mac80211/mesh.h | 45 +++++ net/mac80211/mesh_hwmp.c | 8 +- net/mac80211/mesh_pathtbl.c | 396 ++++++++++++++++++++++++++++++++++++++++++ net/mac80211/rx.c | 9 +- net/mac80211/tx.c | 90 ++++++++++ net/wireless/mesh.c | 3 + net/wireless/nl80211.c | 12 +- net/wireless/rdev-ops.h | 2 +- net/wireless/trace.h | 6 +- 15 files changed, 596 insertions(+), 15 deletions(-) -- 2.7.4