Linux wireless drivers development
 help / color / mirror / Atom feed
* [RFC PATCH 00/15] wifi: SCS and MSCS
@ 2026-09-02  8:45 Felix Fietkau
  2026-09-02  8:45 ` [RFC PATCH 01/15] wifi: cfg80211: add the TCLAS element parsers Felix Fietkau
                   ` (15 more replies)
  0 siblings, 16 replies; 19+ messages in thread
From: Felix Fietkau @ 2026-09-02  8:45 UTC (permalink / raw)
  To: linux-wireless; +Cc: johannes

These two services let a station tell an AP how to classify the traffic
the AP sends to it. SCS carries a classifier and the user priority to
give what matches it. MSCS asks the AP to mirror onto the downlink
whatever priority the station used on the uplink of the same flow.
802.11be adds a QoS Characteristics element to an SCS descriptor, which
describes the service a stream wants rather than how to recognise it.

The split follows the one the QoS map already uses. hostapd and
wpa_supplicant encode and decode the Robust AV Streaming action frames
that carry both services, hold the dialog tokens and decide policy. The
kernel parses the classifier elements, classifies every MSDU it queues,
and hands the traffic description to the driver. Each descriptor is
answered on its own, and the per descriptor IEEE status codes are what
userspace puts into the SCS Response frame, so the answer a station gets
is the kernel's.

An earlier RFC proposed a different split, where hostapd translates each
classifier into an nftables rule that tags the packet. Two things argue
against it. It costs on the software path, where netfilter on the bridge
adds work to every frame and evaluation scales with the rule count of
the whole BSS. And it makes a wireless feature depend on a second
subsystem being built in and enabled.

Patches 1 to 7 build the cfg80211 side, which has no user by design: the
element parsers, the flow parser and the MSCS key, the evaluator, the
request validation, the two driver ops, the nl80211 commands, and KUnit
tests for the classifier.

Patches 8 to 13 make it work in mac80211: per station rule storage, the
transmit hook, MSCS learning on receive and its application on transmit,
the sta_set_scs driver op, and two debugfs files.

Patch 14 turns both on in hwsim, so the whole of the above can be
exercised without hardware. mac80211 classifies in software for every
driver it serves, so the two feature flags are all it takes to reach the
transmit hook, the learning and the evaluator. It answers sta_set_scs as
well, because without an answer every descriptor carrying a traffic
description is declined and that half of the path cannot be reached.
Nothing simulated schedules a stream, so what it answers with comes from
debugfs.

That path is tested: on hwsim, with hostapd driving the two commands, a
classifier tags the frames it names with the user priority it asks for,
the granularity rule and the per descriptor status codes answer as
11.25.2 says, and MSCS mirrors the priority of an uplink flow onto the
downlink under its limit and its priority bitmap, each one checked
against the TID of the frames on the air.

Patch 15 is the first hardware. mt7996 hands an uplink QoS
Characteristics element to its MURU scheduler, which serves the stream
with trigger frames. It depends on the op added in patch 12, so it cannot
travel through the mt76 tree on its own.

Felix Fietkau (15):
  wifi: cfg80211: add the TCLAS element parsers
  wifi: cfg80211: add the flow parser and the MSCS key
  wifi: cfg80211: add the SCS evaluator
  wifi: cfg80211: add SCS and MSCS request validation
  wifi: cfg80211: add set_scs and set_mscs driver ops
  wifi: cfg80211: add SCS and MSCS configuration commands
  wifi: cfg80211: add KUnit tests for the SCS classifier
  wifi: mac80211: add SCS and MSCS rule storage
  wifi: mac80211: classify transmitted MSDUs with SCS
  wifi: mac80211: learn MSCS flows on receive
  wifi: mac80211: apply MSCS on transmit
  wifi: mac80211: add the sta_set_scs driver op
  wifi: mac80211: add SCS and MSCS debugfs files
  wifi: mac80211_hwsim: support SCS and MSCS
  wifi: mt76: mt7996: apply the SCS traffic description

 drivers/net/wireless/mediatek/mt76/mt7996/init.c   |   1 +-
 drivers/net/wireless/mediatek/mt76/mt7996/main.c   |  79 +-
 drivers/net/wireless/mediatek/mt76/mt7996/mcu.c    |  40 +-
 drivers/net/wireless/mediatek/mt76/mt7996/mcu.h    |   4 +-
 drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h |   2 +-
 drivers/net/wireless/virtual/mac80211_hwsim_i.h    |   3 +-
 drivers/net/wireless/virtual/mac80211_hwsim_main.c |  25 +-
 include/linux/ieee80211-eht.h                      | 128 ++-
 include/linux/ieee80211.h                          |   6 +-
 include/net/cfg80211.h                             | 235 ++++-
 include/net/mac80211.h                             |  22 +-
 include/uapi/linux/nl80211.h                       | 128 ++-
 net/mac80211/Makefile                              |   3 +-
 net/mac80211/cfg.c                                 |   2 +-
 net/mac80211/debugfs_sta.c                         | 238 ++++-
 net/mac80211/driver-ops.h                          |  26 +-
 net/mac80211/ieee80211_i.h                         |  17 +-
 net/mac80211/iface.c                               |  12 +-
 net/mac80211/rx.c                                  |   5 +-
 net/mac80211/scs.c                                 | 639 ++++++++++-
 net/mac80211/sta_info.c                            |   1 +-
 net/mac80211/sta_info.h                            |  78 +-
 net/mac80211/trace.h                               |  27 +-
 net/mac80211/util.c                                |   2 +-
 net/mac80211/wme.c                                 |  13 +-
 net/wireless/Makefile                              |   2 +-
 net/wireless/core.c                                |  10 +-
 net/wireless/core.h                                |   8 +-
 net/wireless/nl80211.c                             | 426 +++++++-
 net/wireless/rdev-ops.h                            |  32 +-
 net/wireless/scs.c                                 | 917 ++++++++++++++-
 net/wireless/tests/Makefile                        |   2 +-
 net/wireless/tests/scs.c                           | 547 ++++++++-
 net/wireless/trace.h                               |  49 +-
 34 files changed, 3725 insertions(+), 4 deletions(-)
 create mode 100644 net/mac80211/scs.c
 create mode 100644 net/wireless/scs.c
 create mode 100644 net/wireless/tests/scs.c

base-commit: ca800a9302764c445de0da0e84d2252400a770ee
-- 
git-series 0.9.1

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2026-09-13 21:19 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-02  8:45 [RFC PATCH 00/15] wifi: SCS and MSCS Felix Fietkau
2026-09-02  8:45 ` [RFC PATCH 01/15] wifi: cfg80211: add the TCLAS element parsers Felix Fietkau
2026-09-02  8:45 ` [RFC PATCH 02/15] wifi: cfg80211: add the flow parser and the MSCS key Felix Fietkau
2026-09-02  8:45 ` [RFC PATCH 03/15] wifi: cfg80211: add the SCS evaluator Felix Fietkau
2026-09-02  8:45 ` [RFC PATCH 04/15] wifi: cfg80211: add SCS and MSCS request validation Felix Fietkau
2026-09-02  8:46 ` [RFC PATCH 05/15] wifi: cfg80211: add set_scs and set_mscs driver ops Felix Fietkau
2026-09-02  8:46 ` [RFC PATCH 06/15] wifi: cfg80211: add SCS and MSCS configuration commands Felix Fietkau
2026-09-02  8:46 ` [RFC PATCH 07/15] wifi: cfg80211: add KUnit tests for the SCS classifier Felix Fietkau
2026-09-02  8:46 ` [RFC PATCH 08/15] wifi: mac80211: add SCS and MSCS rule storage Felix Fietkau
2026-09-02  8:46 ` [RFC PATCH 09/15] wifi: mac80211: classify transmitted MSDUs with SCS Felix Fietkau
2026-09-02  8:46 ` [RFC PATCH 10/15] wifi: mac80211: learn MSCS flows on receive Felix Fietkau
2026-09-02  8:46 ` [RFC PATCH 11/15] wifi: mac80211: apply MSCS on transmit Felix Fietkau
2026-09-02  8:46 ` [RFC PATCH 12/15] wifi: mac80211: add the sta_set_scs driver op Felix Fietkau
2026-09-02  8:46 ` [RFC PATCH 13/15] wifi: mac80211: add SCS and MSCS debugfs files Felix Fietkau
2026-09-02  8:46 ` [RFC PATCH 14/15] wifi: mac80211_hwsim: support SCS and MSCS Felix Fietkau
2026-09-02  8:46 ` [RFC PATCH 15/15] wifi: mt76: mt7996: apply the SCS traffic description Felix Fietkau
     [not found] ` <4c3aee64-d289-4648-9520-edb6518b3d13@oss.qualcomm.com>
2026-09-09 13:55   ` [RFC PATCH 00/15] wifi: SCS and MSCS Felix Fietkau
2026-09-13 19:23     ` Vivek Chettri
2026-09-13 21:19       ` Felix Fietkau

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox