mac80211: add radiotap flag to assure frames are not reordered
authorMathy Vanhoef <Mathy.Vanhoef@kuleuven.be>
Wed, 4 Nov 2020 06:18:19 +0000 (10:18 +0400)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 6 Nov 2020 10:01:01 +0000 (11:01 +0100)
Add a new radiotap flag to indicate injected frames must not be
reordered relative to other frames that also have this flag set,
independent of priority field values in the transmitted frame.
Parse this radiotap flag and define and set a corresponding Tx
control flag. Note that this flag has recently been standardized
as part of an update to radiotap.

Signed-off-by: Mathy Vanhoef <Mathy.Vanhoef@kuleuven.be>
Link: https://lore.kernel.org/r/20201104061823.197407-2-Mathy.Vanhoef@kuleuven.be
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/ieee80211_radiotap.h
include/net/mac80211.h
net/mac80211/tx.c

index 19c00d10009677bac7cff568fff7a417ee5cefa5..c0854933e24f24c82e16821286b314fa3f0574be 100644 (file)
@@ -118,6 +118,7 @@ enum ieee80211_radiotap_tx_flags {
        IEEE80211_RADIOTAP_F_TX_RTS = 0x0004,
        IEEE80211_RADIOTAP_F_TX_NOACK = 0x0008,
        IEEE80211_RADIOTAP_F_TX_NOSEQNO = 0x0010,
+       IEEE80211_RADIOTAP_F_TX_ORDER = 0x0020,
 };
 
 /* for IEEE80211_RADIOTAP_MCS "have" flags */
index ee72ea5ec8610c7336167fc390f024723e03bfd3..4805af149ef5c6b60239894e73fe2b3a6c2018bf 100644 (file)
@@ -857,6 +857,9 @@ enum mac80211_tx_info_flags {
  *     it can be sent out.
  * @IEEE80211_TX_CTRL_NO_SEQNO: Do not overwrite the sequence number that
  *     has already been assigned to this frame.
+ * @IEEE80211_TX_CTRL_DONT_REORDER: This frame should not be reordered
+ *     relative to other frames that have this flag set, independent
+ *     of their QoS TID or other priority field values.
  *
  * These flags are used in tx_info->control.flags.
  */
@@ -869,6 +872,7 @@ enum mac80211_tx_control_flags {
        IEEE80211_TX_CTRL_SKIP_MPATH_LOOKUP     = BIT(5),
        IEEE80211_TX_INTCFL_NEED_TXPROCESSING   = BIT(6),
        IEEE80211_TX_CTRL_NO_SEQNO              = BIT(7),
+       IEEE80211_TX_CTRL_DONT_REORDER          = BIT(8),
 };
 
 /*
index 8ba10a48ded4cab1c80e7da7026b2c19a3941035..d4e1a27208073214e887f0b17ab2f366d4506704 100644 (file)
@@ -2102,6 +2102,9 @@ bool ieee80211_parse_tx_radiotap(struct sk_buff *skb,
                                info->flags |= IEEE80211_TX_CTL_NO_ACK;
                        if (txflags & IEEE80211_RADIOTAP_F_TX_NOSEQNO)
                                info->control.flags |= IEEE80211_TX_CTRL_NO_SEQNO;
+                       if (txflags & IEEE80211_RADIOTAP_F_TX_ORDER)
+                               info->control.flags |=
+                                       IEEE80211_TX_CTRL_DONT_REORDER;
                        break;
 
                case IEEE80211_RADIOTAP_RATE: