Wi-Fi 7 - MLO - Phase 1.0

General

The first phase of MLO support in OpenSync introduces an abstraction layer for remote (SDN) control (OVSDB Schema) and telemetry reporting (Protocol buffer messages through MQTT) associated to Multi Link Operation.

MLO is an integral and mandatory part of Wi-Fi 7 (11be) specification. It allows aggregating multiple bands/APs as single links at protocol level allowing for increased throughput capacity and decreased (improved) latency.

Initial MLO support in OpenSync is by design very restrictive in runtime configuration to allow lowest common denominator support.

MLO is supported only with OWM. WM2 is not supported.

This should be considered as a technology preview.

Northbound API

OVSDB

Wifi_VIF_Config

Additional meaning

  • enabled - for interfaces that are mode = sta this implicitly defines whether a given link is also intended to be used for MLO setup. If multiple VIFs that share the same mld_addrare enabled then a MLO association shall be done as soon as possible with as little VIFs as possible. Additional VIF links can be added through a re-setup after they get discovered. The MLO non-AP STA can be setup initially with a single link only if other affiliated VIFs are incapable of finding a matching link.

Wifi_VIF_State

Added

  • mld_addr - the MLD address that given VIF is part of. This is non-configurable at runtime. This is considered a system property. If empty, the VIF is not part of an MLD.

  • mld_if_name - this is system dependent. If the data path will be routed through a different network device in the system, then this shall be reported here. This is required to properly configure bridging rules.

Wifi_Associated_Clients

Added

  • mld_addr - the MLD address that belongs to the associated client. If empty, the link is not part of an MLD and is a regular non-MLO association. If non-empty it signals the client is Wi-Fi 7, uses MLO and this particular row is one of the affiliated links of the MLD client. A client may have 1 or more links (ie. rows). Each link (row) will have a different mac_addr, but the same mld_addr.

Notes

  • MLO clients will appear >1 in the Wifi_Associated_Clients. Each MLO link will show up as separate entry (row) in the table and will be tied up by the mld_addr column.

Wifi_VIF_Neighbors

  • mld_addr - the MLD address that the given Neighbor entry is part of. If empty, the neighbor is not part of an MLD and is a regular non-MLD AP.

MQTT

Client

Added

  • mld_address - a string, format of aa:bb:cc:dd:ee:ff that denotes the client’s MLD address, if Wi-Fi 7 MLO association took place. Multiple reports with different mac_address can appear sharing the same mld_address.

Notes

  • MLO clients will advertise their statistics in separate Client messages per link (and will be part of separate band reports). The mld_addresswill tie up the separate link reports.

BSClient

Added

  • mld_address - a string, format of aa:bb:cc:dd:ee:ff that denotes the client’s MLD address, if Wi-Fi 7 MLO association took place. Multiple reports with different mac_address can appear sharing the same mld_address.

Notes

  • MLO clients will advertise their statistics in separate BSClient messages per link (and will be part of separate band reports). The mld_addresswill tie up the separate link reports.

Southbound API

osw_drv modules are expected to report additional data in reports:

  • osw_drv_vif_state_ap

    • struct osw_drv_mld_state mld - see below

  • osw_drv_vif_state_sta

    • struct osw_drv_mld_state mld - see below

  • osw_drv_vif_state_sta_link

    • struct osw_hwaddr mld_addr- Signals given STA iftype VIF link association is part of an MLD. If 00:00:00:00:00:00 is reported then the link is not part of an MLD.

  • osw_drv_sta_state

    • struct osw_hwaddr mld_addr - Signals given STA link association is part of an MLD. If 00:00:00:00:00:00 is reported then the link is not part of an MLD.

  • struct osw_drv_mld_state - shared structure to de-duplicate and represent similar data

    • struct osw_hwaddr addr - Signals what MLD address given entity (that uses struct osw_drv_mld_state) is part of. 00:00:00:00:00:00 if not part of an MLD.

    • struct osw_ifname if_name - Signals where datapath will be redirected by the system to. Possible values could be:

      • "" (empty) if datapath is not re-routed in any way and the system

      • if_name of one of the VIFs that are part of the MLD

        • In other words, multiple VIFs that are part of the same MLD can report that one of them was elected for datapath processing.

      • some special if_name of a bond-style VIF

Requirements