mbox series

[v2,00/44] Add basic MLO support for AP

Message ID 20230522193412.658666-1-andrei.otcheretianski@intel.com
Headers show
Series Add basic MLO support for AP | expand

Message

Andrei Otcheretianski May 22, 2023, 7:33 p.m. UTC
This patch series adds initial support for Multi-Link operation AP.
First, it refactors the driver_nl80211 to support multiple links by
introducing internal structs to hold the links and API's to configure
links and link stations.
Next it allows to start multiple hostapd_iface's and bind them to the same
underlying network interface and driver instance. Each hostapd_iface
represents a separate link BSS. The events are forwarded to the correct hapd
according to the link id.
Afterwards we implement advertising and parsing of basic MLE and RNR in
beacons, probe responses and during authentication and association
stages.
Finally, implement WPA authenticator for MLO and also adjust SAE to use the
MLD addresses for commit derivation.
It needs to be noticed, that this series are minimal and add a very basic MLO
implementation which allow to establish SAE/OWE connection and intended
to be used mainly for testing purposes.
---
v2 changes:
- Fixed most of the comments from v1
- Fixed several bugs with non-MLO STA connecting to MLO AP
- Auto assignment of mld_link_id
- Fetching MLD/EML capabilities from kernel
- Proper AID allocation

Andrei Otcheretianski (23):
  AP: Add some basic MLD configuration options
  driver: Add MLD link id to AP parameters
  driver_nl80211: Support setting up an AP on a specified link
  AP: Allow starting multiple interfaces within single MLD
  driver_nl80211: Select freq according to transmitting link
  AP: Support building basic Multi-Link Element
  AP: MLO: Handle ML element during authentication
  AP: MLO: Add MLO information to hostapd_sta_add_params struct
  AP: Support AID allocation for MLD
  AP: MLO: Process EHT ML element from association request
  AP: MLO: Add ML element to association response
  AP: Print MLD info in STATUS command
  AP/wpa_supplicant/driver: Add link id to send eapol callbacks
  driver_nl80211: use frequency to determine mld link for MLME events
  AP: Forward link specific events
  WPA_AUTH: MLO: Store MLO link information
  WPA_AUTH: MLO: Add MLO KDEs to message 3 of the 4-way handshake
  AP: Use MLD address for SAE commit derivation
  AP: Don't process SAE/OWE assoc info on MLD links
  AP: Use MLD address for traffic tests
  AP: Forward EAPOL frames and status to correct BSS
  driver_nl80211: Store and report link id for MLO control frames
  tests: Add basic MLD hwsim tests

Benjamin Berg (3):
  driver_nl80211: Rename the per iface-type capabilities struct
  nl80211: Add support to fetch EML/MLD capabilities
  AP: MLO: Retrieve EML and MLD capabilities from driver

Ilan Peer (18):
  driver: Allow to provide a link ID when setting a channel
  AP: Include an RNR element in beacons for MLD AP
  AP: MLO: Make 802.1X SM, authserv and radius client singletons
  AP: Match Rx frames against MLD address
  AP: MLO: Handle association callback
  AP: MLO: Handle deauth/disassoc of MLD station
  AP: MLO: Handle 802.1X port authorization
  driver: Specify link ID for 'send_mlme' and 'sta_deauth' callbacks
  AP: Do not prune station when adding a link station
  AP: Handle TX status for MLD AP
  AP: Provide the link ID for an MLD setting when setting VLAN
  AP/driver: Add link id to the set_tx_queue_params() callback
  WPA_AUTH: MLO: Add MAC KDE to 1st message in 4-way handshake
  WPA_AUTH: MLO: Validate MLO KDEs in 2nd message of 4-way handshake
  WPA_AUTH: MLO: Validate MLO KDEs in 4th message of 4-way handshake
  WPA_AUTH: MLO: Add MLO KDEs to message 1 of the group handshake
  WPA_AUTH: MLO: Get the correct AA and SPA based on MLD operation
  AP: Specify the link ID for set_key() callback

 hostapd/config_file.c              |    4 +
 hostapd/ctrl_iface.c               |    7 +-
 hostapd/main.c                     |   90 +++
 src/ap/ap_config.h                 |    8 +
 src/ap/ap_drv_ops.c                |   73 +-
 src/ap/ap_drv_ops.h                |   25 +-
 src/ap/authsrv.c                   |   38 ++
 src/ap/beacon.c                    |   55 +-
 src/ap/ctrl_iface_ap.c             |   15 +
 src/ap/drv_callbacks.c             |  131 +++-
 src/ap/hostapd.c                   |  148 +++-
 src/ap/hostapd.h                   |   14 +-
 src/ap/ieee802_11.c                | 1017 ++++++++++++++++++++++++----
 src/ap/ieee802_11.h                |   11 +
 src/ap/ieee802_11_eht.c            |  684 +++++++++++++++++++
 src/ap/ieee802_1x.c                |  109 ++-
 src/ap/sta_info.c                  |   43 +-
 src/ap/sta_info.h                  |   34 +
 src/ap/utils.c                     |   14 +-
 src/ap/wpa_auth.c                  |  652 +++++++++++++++++-
 src/ap/wpa_auth.h                  |   48 ++
 src/ap/wpa_auth_glue.c             |  107 ++-
 src/ap/wpa_auth_i.h                |   16 +
 src/common/ieee802_11_defs.h       |   11 +
 src/common/wpa_common.h            |    3 +
 src/drivers/driver.h               |   52 +-
 src/drivers/driver_nl80211.c       |  443 ++++++++----
 src/drivers/driver_nl80211.h       |   11 +-
 src/drivers/driver_nl80211_capa.c  |   30 +-
 src/drivers/driver_nl80211_event.c |   35 +-
 tests/hwsim/example-hostapd.config |    1 +
 tests/hwsim/hostapd.py             |   77 ++-
 tests/hwsim/hwsim.py               |   11 +-
 tests/hwsim/test_eht.py            |  293 ++++++++
 wpa_supplicant/driver_i.h          |   20 +-
 wpa_supplicant/ibss_rsn.c          |    4 +-
 wpa_supplicant/wpas_glue.c         |    2 +-
 37 files changed, 3929 insertions(+), 407 deletions(-)

Comments

Jouni Malinen June 15, 2023, 2:56 p.m. UTC | #1
On Mon, May 22, 2023 at 10:33:28PM +0300, Andrei Otcheretianski wrote:
> This patch series adds initial support for Multi-Link operation AP.
> First, it refactors the driver_nl80211 to support multiple links by
> introducing internal structs to hold the links and API's to configure
> links and link stations.
> Next it allows to start multiple hostapd_iface's and bind them to the same
> underlying network interface and driver instance. Each hostapd_iface
> represents a separate link BSS. The events are forwarded to the correct hapd
> according to the link id.
> Afterwards we implement advertising and parsing of basic MLE and RNR in
> beacons, probe responses and during authentication and association
> stages.
> Finally, implement WPA authenticator for MLO and also adjust SAE to use the
> MLD addresses for commit derivation.
> It needs to be noticed, that this series are minimal and add a very basic MLO
> implementation which allow to establish SAE/OWE connection and intended
> to be used mainly for testing purposes.

Thanks, applied with a number of fixes and cleanup. Quite a bit of
additional work is still needed to make this more complete and to
optimize some data structure uses to be a bit more reasonable, but it is
good to get the patches in so that people can now move ahead with the
pending items on top of a common baseline in hostap.git.
Andrei Otcheretianski June 18, 2023, 12:09 p.m. UTC | #2
> 
> Thanks, applied with a number of fixes and cleanup. Quite a bit of additional
> work is still needed to make this more complete and to optimize some data
> structure uses to be a bit more reasonable, but it is good to get the patches
> in so that people can now move ahead with the pending items on top of a
> common baseline in hostap.git.

Thank you Jouni for your time reviewing this series.
We have few more internal patches on top of it and some more stuff WIP.
I will send more patches out after cleanups and porting.

Thank you,
Andrei
> 
> --
> Jouni Malinen                                            PGP id EFC895FA