mac80211: update to linux 6.1-rc8
[openwrt/openwrt.git] / package / network / utils / iw / patches / 001-nl80211_h_sync.patch
index 49d08d9b01a09382d500ab15a532c5585a4df30a..afe27d6f238f155ecf747f1953ffd6b69ae6fe12 100644 (file)
 --- a/nl80211.h
 +++ b/nl80211.h
-@@ -11,7 +11,7 @@
-  * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com>
-  * Copyright 2008 Colin McCabe <colin@cozybit.com>
-  * Copyright 2015-2017        Intel Deutschland GmbH
-- * Copyright (C) 2018-2022 Intel Corporation
-+ * Copyright (C) 2018-2021 Intel Corporation
-  *
-  * Permission to use, copy, modify, and/or distribute this software for any
-  * purpose with or without fee is hereby granted, provided that the above
-@@ -301,29 +301,6 @@
+@@ -324,6 +324,17 @@
   */
  
  /**
-- * DOC: FILS shared key crypto offload
-- *
-- * This feature is applicable to drivers running in AP mode.
-- *
-- * FILS shared key crypto offload can be advertised by drivers by setting
-- * @NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD flag. The drivers that support
-- * FILS shared key crypto offload should be able to encrypt and decrypt
-- * association frames for FILS shared key authentication as per IEEE 802.11ai.
-- * With this capability, for FILS key derivation, drivers depend on userspace.
-- *
-- * After FILS key derivation, userspace shares the FILS AAD details with the
-- * driver and the driver stores the same to use in decryption of association
-- * request and in encryption of association response. The below parameters
-- * should be given to the driver in %NL80211_CMD_SET_FILS_AAD.
-- *    %NL80211_ATTR_MAC - STA MAC address, used for storing FILS AAD per STA
-- *    %NL80211_ATTR_FILS_KEK - Used for encryption or decryption
-- *    %NL80211_ATTR_FILS_NONCES - Used for encryption or decryption
-- *                    (STA Nonce 16 bytes followed by AP Nonce 16 bytes)
-- *
-- * Once the association is done, the driver cleans the FILS AAD data.
-- */
--
--/**
++ * DOC: Multi-Link Operation
++ *
++ * In Multi-Link Operation, a connection between to MLDs utilizes multiple
++ * links. To use this in nl80211, various commands and responses now need
++ * to or will include the new %NL80211_ATTR_MLO_LINKS attribute.
++ * Additionally, various commands that need to operate on a specific link
++ * now need to be given the %NL80211_ATTR_MLO_LINK_ID attribute, e.g. to
++ * use %NL80211_CMD_START_AP or similar functions.
++ */
++
++/**
   * enum nl80211_commands - supported nl80211 commands
   *
   * @NL80211_CMD_UNSPEC: unspecified command to catch errors
-@@ -1226,17 +1203,6 @@
-  * @NL80211_CMD_COLOR_CHANGE_COMPLETED: Notify userland that the color change
-  *    has completed
+@@ -366,14 +377,22 @@
+  *    the non-transmitting interfaces are deleted as well.
+  *
+  * @NL80211_CMD_GET_KEY: Get sequence counter information for a key specified
+- *    by %NL80211_ATTR_KEY_IDX and/or %NL80211_ATTR_MAC.
++ *    by %NL80211_ATTR_KEY_IDX and/or %NL80211_ATTR_MAC. %NL80211_ATTR_MAC
++ *    represents peer's MLD address for MLO pairwise key. For MLO group key,
++ *    the link is identified by %NL80211_ATTR_MLO_LINK_ID.
+  * @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT,
+  *    %NL80211_ATTR_KEY_DEFAULT_MGMT, or %NL80211_ATTR_KEY_THRESHOLD.
++ *    For MLO connection, the link to set default key is identified by
++ *    %NL80211_ATTR_MLO_LINK_ID.
+  * @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA,
+  *    %NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC, %NL80211_ATTR_KEY_CIPHER,
+- *    and %NL80211_ATTR_KEY_SEQ attributes.
++ *    and %NL80211_ATTR_KEY_SEQ attributes. %NL80211_ATTR_MAC represents
++ *    peer's MLD address for MLO pairwise key. The link to add MLO
++ *    group key is identified by %NL80211_ATTR_MLO_LINK_ID.
+  * @NL80211_CMD_DEL_KEY: delete a key identified by %NL80211_ATTR_KEY_IDX
+- *    or %NL80211_ATTR_MAC.
++ *    or %NL80211_ATTR_MAC. %NL80211_ATTR_MAC represents peer's MLD address
++ *    for MLO pairwise key. The link to delete group key is identified by
++ *    %NL80211_ATTR_MLO_LINK_ID.
   *
-- * @NL80211_CMD_SET_FILS_AAD: Set FILS AAD data to the driver using -
-- *    &NL80211_ATTR_MAC - for STA MAC address
-- *    &NL80211_ATTR_FILS_KEK - for KEK
-- *    &NL80211_ATTR_FILS_NONCES - for FILS Nonces
-- *            (STA Nonce 16 bytes followed by AP Nonce 16 bytes)
-- *
-- * @NL80211_CMD_ASSOC_COMEBACK: notification about an association
-- *      temporal rejection with comeback. The event includes %NL80211_ATTR_MAC
-- *      to describe the BSSID address of the AP and %NL80211_ATTR_TIMEOUT to
-- *      specify the timeout value.
-- *
+  * @NL80211_CMD_GET_BEACON: (not used)
+  * @NL80211_CMD_SET_BEACON: change the beacon on an access point interface
+@@ -753,6 +772,13 @@
+  *    %NL80211_ATTR_CSA_C_OFFSETS_TX is an array of offsets to CSA
+  *    counters which will be updated to the current value. This attribute
+  *    is used during CSA period.
++ *    For TX on an MLD, the frequency can be omitted and the link ID be
++ *    specified, or if transmitting to a known peer MLD (with MLD addresses
++ *    in the frame) both can be omitted and the link will be selected by
++ *    lower layers.
++ *    For RX notification, %NL80211_ATTR_RX_HW_TIMESTAMP may be included to
++ *    indicate the frame RX timestamp and %NL80211_ATTR_TX_HW_TIMESTAMP may
++ *    be included to indicate the ack TX timestamp.
+  * @NL80211_CMD_FRAME_WAIT_CANCEL: When an off-channel TX was requested, this
+  *    command may be used with the corresponding cookie to cancel the wait
+  *    time if it is known that it is no longer necessary.  This command is
+@@ -763,7 +789,9 @@
+  *    transmitted with %NL80211_CMD_FRAME. %NL80211_ATTR_COOKIE identifies
+  *    the TX command and %NL80211_ATTR_FRAME includes the contents of the
+  *    frame. %NL80211_ATTR_ACK flag is included if the recipient acknowledged
+- *    the frame.
++ *    the frame. %NL80211_ATTR_TX_HW_TIMESTAMP may be included to indicate the
++ *    tx timestamp and %NL80211_ATTR_RX_HW_TIMESTAMP may be included to
++ *    indicate the ack RX timestamp.
+  * @NL80211_CMD_ACTION_TX_STATUS: Alias for @NL80211_CMD_FRAME_TX_STATUS for
+  *    backward compatibility.
+  *
+@@ -1108,6 +1136,12 @@
+  *    has been received. %NL80211_ATTR_FRAME is used to specify the
+  *    frame contents.  The frame is the raw EAPoL data, without ethernet or
+  *    802.11 headers.
++ *    For an MLD transmitter, the %NL80211_ATTR_MLO_LINK_ID may be given and
++ *    its effect will depend on the destination: If the destination is known
++ *    to be an MLD, this will be used as a hint to select the link to transmit
++ *    the frame on. If the destination is not an MLD, this will select both
++ *    the link to transmit on and the source address will be set to the link
++ *    address of that link.
+  *    When used as an event indication %NL80211_ATTR_CONTROL_PORT_ETHERTYPE,
+  *    %NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT and %NL80211_ATTR_MAC are added
+  *    indicating the protocol type of the received frame; whether the frame
+@@ -1237,6 +1271,16 @@
+  *      to describe the BSSID address of the AP and %NL80211_ATTR_TIMEOUT to
+  *      specify the timeout value.
+  *
++ * @NL80211_CMD_ADD_LINK: Add a new link to an interface. The
++ *    %NL80211_ATTR_MLO_LINK_ID attribute is used for the new link.
++ * @NL80211_CMD_REMOVE_LINK: Remove a link from an interface. This may come
++ *    without %NL80211_ATTR_MLO_LINK_ID as an easy way to remove all links
++ *    in preparation for e.g. roaming to a regular (non-MLO) AP.
++ *
++ * @NL80211_CMD_ADD_LINK_STA: Add a link to an MLD station
++ * @NL80211_CMD_MODIFY_LINK_STA: Modify a link of an MLD station
++ * @NL80211_CMD_REMOVE_LINK_STA: Remove a link of an MLD station
++ *
   * @NL80211_CMD_MAX: highest used command number
   * @__NL80211_CMD_AFTER_LAST: internal use
   */
-@@ -1477,10 +1443,6 @@ enum nl80211_commands {
-       NL80211_CMD_COLOR_CHANGE_ABORTED,
-       NL80211_CMD_COLOR_CHANGE_COMPLETED,
+@@ -1481,6 +1525,13 @@ enum nl80211_commands {
+       NL80211_CMD_ASSOC_COMEBACK,
  
--      NL80211_CMD_SET_FILS_AAD,
--
--      NL80211_CMD_ASSOC_COMEBACK,
--
++      NL80211_CMD_ADD_LINK,
++      NL80211_CMD_REMOVE_LINK,
++
++      NL80211_CMD_ADD_LINK_STA,
++      NL80211_CMD_MODIFY_LINK_STA,
++      NL80211_CMD_REMOVE_LINK_STA,
++
        /* add new commands above here */
  
        /* used to define NL80211_CMD_MAX below */
-@@ -2477,9 +2439,7 @@ enum nl80211_commands {
-  *    space supports external authentication. This attribute shall be used
-  *    with %NL80211_CMD_CONNECT and %NL80211_CMD_START_AP request. The driver
-  *    may offload authentication processing to user space if this capability
-- *    is indicated in the respective requests from the user space. (This flag
-- *    attribute deprecated for %NL80211_CMD_START_AP, use
-- *    %NL80211_ATTR_AP_SETTINGS_FLAGS)
-+ *    is indicated in the respective requests from the user space.
+@@ -2340,8 +2391,10 @@ enum nl80211_commands {
   *
-  * @NL80211_ATTR_NSS: Station's New/updated  RX_NSS value notified using this
-  *    u8 attribute. This is used with %NL80211_CMD_STA_OPMODE_CHANGED.
-@@ -2655,13 +2615,8 @@ enum nl80211_commands {
-  *    switching on a different channel during CAC detection on the selected
-  *    radar channel.
+  * @NL80211_ATTR_IFTYPE_EXT_CAPA: Nested attribute of the following attributes:
+  *    %NL80211_ATTR_IFTYPE, %NL80211_ATTR_EXT_CAPA,
+- *    %NL80211_ATTR_EXT_CAPA_MASK, to specify the extended capabilities per
+- *    interface type.
++ *    %NL80211_ATTR_EXT_CAPA_MASK, to specify the extended capabilities and
++ *    other interface-type specific capabilities per interface type. For MLO,
++ *    %NL80211_ATTR_EML_CAPABILITY and %NL80211_ATTR_MLD_CAPA_AND_OPS are
++ *    present.
   *
-- * @NL80211_ATTR_AP_SETTINGS_FLAGS: u32 attribute contains ap settings flags,
-- *    enumerated in &enum nl80211_ap_settings_flags. This attribute shall be
-- *    used with %NL80211_CMD_START_AP request.
-- *
-- * @NL80211_ATTR_EHT_CAPABILITY: EHT Capability information element (from
-- *    association request when used with NL80211_CMD_NEW_STATION). Can be set
-- *    only if %NL80211_STA_FLAG_WME is set.
+  * @NL80211_ATTR_MU_MIMO_GROUP_DATA: array of 24 bytes that defines a MU-MIMO
+  *    groupID for monitor mode.
+@@ -2663,6 +2716,44 @@ enum nl80211_commands {
+  *    association request when used with NL80211_CMD_NEW_STATION). Can be set
+  *    only if %NL80211_STA_FLAG_WME is set.
+  *
++ * @NL80211_ATTR_MLO_LINK_ID: A (u8) link ID for use with MLO, to be used with
++ *    various commands that need a link ID to operate.
++ * @NL80211_ATTR_MLO_LINKS: A nested array of links, each containing some
++ *    per-link information and a link ID.
++ * @NL80211_ATTR_MLD_ADDR: An MLD address, used with various commands such as
++ *    authenticate/associate.
++ *
++ * @NL80211_ATTR_MLO_SUPPORT: Flag attribute to indicate user space supports MLO
++ *    connection. Used with %NL80211_CMD_CONNECT. If this attribute is not
++ *    included in NL80211_CMD_CONNECT drivers must not perform MLO connection.
++ *
++ * @NL80211_ATTR_MAX_NUM_AKM_SUITES: U16 attribute. Indicates maximum number of
++ *    AKM suites allowed for %NL80211_CMD_CONNECT, %NL80211_CMD_ASSOCIATE and
++ *    %NL80211_CMD_START_AP in %NL80211_CMD_GET_WIPHY response. If this
++ *    attribute is not present userspace shall consider maximum number of AKM
++ *    suites allowed as %NL80211_MAX_NR_AKM_SUITES which is the legacy maximum
++ *    number prior to the introduction of this attribute.
++ *
++ * @NL80211_ATTR_EML_CAPABILITY: EML Capability information (u16)
++ * @NL80211_ATTR_MLD_CAPA_AND_OPS: MLD Capabilities and Operations (u16)
++ *
++ * @NL80211_ATTR_TX_HW_TIMESTAMP: Hardware timestamp for TX operation in
++ *    nanoseconds (u64). This is the device clock timestamp so it will
++ *    probably reset when the device is stopped or the firmware is reset.
++ *    When used with %NL80211_CMD_FRAME_TX_STATUS, indicates the frame TX
++ *    timestamp. When used with %NL80211_CMD_FRAME RX notification, indicates
++ *    the ack TX timestamp.
++ * @NL80211_ATTR_RX_HW_TIMESTAMP: Hardware timestamp for RX operation in
++ *    nanoseconds (u64). This is the device clock timestamp so it will
++ *    probably reset when the device is stopped or the firmware is reset.
++ *    When used with %NL80211_CMD_FRAME_TX_STATUS, indicates the ack RX
++ *    timestamp. When used with %NL80211_CMD_FRAME RX notification, indicates
++ *    the incoming frame RX timestamp.
++ * @NL80211_ATTR_TD_BITMAP: Transition Disable bitmap, for subsequent
++ *    (re)associations.
 + * @NL80211_ATTR_WIPHY_ANTENNA_GAIN: Configured antenna gain. Used to reduce
 + *    transmit power to stay within regulatory limits. u32, dBi.
-  *
++ *
   * @NUM_NL80211_ATTR: total number of nl80211_attrs available
   * @NL80211_ATTR_MAX: highest attribute number currently defined
-@@ -3171,11 +3126,7 @@ enum nl80211_attrs {
+  * @__NL80211_ATTR_AFTER_LAST: internal use
+@@ -3177,6 +3268,23 @@ enum nl80211_attrs {
  
-       NL80211_ATTR_RADAR_BACKGROUND,
+       NL80211_ATTR_DISABLE_EHT,
  
--      NL80211_ATTR_AP_SETTINGS_FLAGS,
--
--      NL80211_ATTR_EHT_CAPABILITY,
--
--      NL80211_ATTR_DISABLE_EHT,
++      NL80211_ATTR_MLO_LINKS,
++      NL80211_ATTR_MLO_LINK_ID,
++      NL80211_ATTR_MLD_ADDR,
++
++      NL80211_ATTR_MLO_SUPPORT,
++
++      NL80211_ATTR_MAX_NUM_AKM_SUITES,
++
++      NL80211_ATTR_EML_CAPABILITY,
++      NL80211_ATTR_MLD_CAPA_AND_OPS,
++
++      NL80211_ATTR_TX_HW_TIMESTAMP,
++      NL80211_ATTR_RX_HW_TIMESTAMP,
++      NL80211_ATTR_TD_BITMAP,
++
 +      NL80211_ATTR_WIPHY_ANTENNA_GAIN,
++
        /* add attributes here, update the policy in nl80211.c */
  
-@@ -3232,8 +3183,6 @@ enum nl80211_attrs {
+       __NL80211_ATTR_AFTER_LAST,
+@@ -3231,6 +3339,11 @@ enum nl80211_attrs {
+ #define NL80211_HE_MIN_CAPABILITY_LEN           16
  #define NL80211_HE_MAX_CAPABILITY_LEN           54
  #define NL80211_MAX_NR_CIPHER_SUITES          5
++
++/*
++ * NL80211_MAX_NR_AKM_SUITES is obsolete when %NL80211_ATTR_MAX_NUM_AKM_SUITES
++ * present in %NL80211_CMD_GET_WIPHY response.
++ */
  #define NL80211_MAX_NR_AKM_SUITES             2
--#define NL80211_EHT_MIN_CAPABILITY_LEN          13
--#define NL80211_EHT_MAX_CAPABILITY_LEN          51
- #define NL80211_MIN_REMAIN_ON_CHANNEL_TIME    10
-@@ -3261,7 +3210,7 @@ enum nl80211_attrs {
-  *    and therefore can't be created in the normal ways, use the
-  *    %NL80211_CMD_START_P2P_DEVICE and %NL80211_CMD_STOP_P2P_DEVICE
-  *    commands to create and destroy one
-- * @NL80211_IFTYPE_OCB: Outside Context of a BSS
-+ * @NL80211_IF_TYPE_OCB: Outside Context of a BSS
-  *    This mode corresponds to the MIB variable dot11OCBActivated=true
-  * @NL80211_IFTYPE_NAN: NAN device interface type (not a netdev)
-  * @NL80211_IFTYPE_MAX: highest interface type number currently defined
-@@ -3403,56 +3352,6 @@ enum nl80211_he_ru_alloc {
- };
- /**
-- * enum nl80211_eht_gi - EHT guard interval
-- * @NL80211_RATE_INFO_EHT_GI_0_8: 0.8 usec
-- * @NL80211_RATE_INFO_EHT_GI_1_6: 1.6 usec
-- * @NL80211_RATE_INFO_EHT_GI_3_2: 3.2 usec
-- */
--enum nl80211_eht_gi {
--      NL80211_RATE_INFO_EHT_GI_0_8,
--      NL80211_RATE_INFO_EHT_GI_1_6,
--      NL80211_RATE_INFO_EHT_GI_3_2,
--};
--
--/**
-- * enum nl80211_eht_ru_alloc - EHT RU allocation values
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC_26: 26-tone RU allocation
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC_52: 52-tone RU allocation
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC_52P26: 52+26-tone RU allocation
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC_106: 106-tone RU allocation
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC_106P26: 106+26 tone RU allocation
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC_242: 242-tone RU allocation
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC_484: 484-tone RU allocation
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC_484P242: 484+242 tone RU allocation
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC_996: 996-tone RU allocation
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC_996P484: 996+484 tone RU allocation
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC_996P484P242: 996+484+242 tone RU allocation
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC_2x996: 2x996-tone RU allocation
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC_2x996P484: 2x996+484 tone RU allocation
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC_3x996: 3x996-tone RU allocation
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC_3x996P484: 3x996+484 tone RU allocation
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC_4x996: 4x996-tone RU allocation
-- */
--enum nl80211_eht_ru_alloc {
--      NL80211_RATE_INFO_EHT_RU_ALLOC_26,
--      NL80211_RATE_INFO_EHT_RU_ALLOC_52,
--      NL80211_RATE_INFO_EHT_RU_ALLOC_52P26,
--      NL80211_RATE_INFO_EHT_RU_ALLOC_106,
--      NL80211_RATE_INFO_EHT_RU_ALLOC_106P26,
--      NL80211_RATE_INFO_EHT_RU_ALLOC_242,
--      NL80211_RATE_INFO_EHT_RU_ALLOC_484,
--      NL80211_RATE_INFO_EHT_RU_ALLOC_484P242,
--      NL80211_RATE_INFO_EHT_RU_ALLOC_996,
--      NL80211_RATE_INFO_EHT_RU_ALLOC_996P484,
--      NL80211_RATE_INFO_EHT_RU_ALLOC_996P484P242,
--      NL80211_RATE_INFO_EHT_RU_ALLOC_2x996,
--      NL80211_RATE_INFO_EHT_RU_ALLOC_2x996P484,
--      NL80211_RATE_INFO_EHT_RU_ALLOC_3x996,
--      NL80211_RATE_INFO_EHT_RU_ALLOC_3x996P484,
--      NL80211_RATE_INFO_EHT_RU_ALLOC_4x996,
--};
--
--/**
-  * enum nl80211_rate_info - bitrate information
-  *
-  * These attribute types are used with %NL80211_STA_INFO_TXRATE
-@@ -3491,13 +3390,6 @@ enum nl80211_eht_ru_alloc {
-  * @NL80211_RATE_INFO_HE_DCM: HE DCM value (u8, 0/1)
-  * @NL80211_RATE_INFO_RU_ALLOC: HE RU allocation, if not present then
-  *    non-OFDMA was used (u8, see &enum nl80211_he_ru_alloc)
-- * @NL80211_RATE_INFO_320_MHZ_WIDTH: 320 MHz bitrate
-- * @NL80211_RATE_INFO_EHT_MCS: EHT MCS index (u8, 0-15)
-- * @NL80211_RATE_INFO_EHT_NSS: EHT NSS value (u8, 1-8)
-- * @NL80211_RATE_INFO_EHT_GI: EHT guard interval identifier
-- *    (u8, see &enum nl80211_eht_gi)
-- * @NL80211_RATE_INFO_EHT_RU_ALLOC: EHT RU allocation, if not present then
-- *    non-OFDMA was used (u8, see &enum nl80211_eht_ru_alloc)
-  * @__NL80211_RATE_INFO_AFTER_LAST: internal use
+ #define NL80211_EHT_MIN_CAPABILITY_LEN          13
+ #define NL80211_EHT_MAX_CAPABILITY_LEN          51
+@@ -4853,6 +4966,8 @@ enum nl80211_bss_scan_width {
+  *    Contains a nested array of signal strength attributes (u8, dBm),
+  *    using the nesting index as the antenna number.
+  * @NL80211_BSS_FREQUENCY_OFFSET: frequency offset in KHz
++ * @NL80211_BSS_MLO_LINK_ID: MLO link ID of the BSS (u8).
++ * @NL80211_BSS_MLD_ADDR: MLD address of this BSS if connected to it.
+  * @__NL80211_BSS_AFTER_LAST: internal
+  * @NL80211_BSS_MAX: highest BSS attribute
   */
- enum nl80211_rate_info {
-@@ -3519,11 +3411,6 @@ enum nl80211_rate_info {
-       NL80211_RATE_INFO_HE_GI,
-       NL80211_RATE_INFO_HE_DCM,
-       NL80211_RATE_INFO_HE_RU_ALLOC,
--      NL80211_RATE_INFO_320_MHZ_WIDTH,
--      NL80211_RATE_INFO_EHT_MCS,
--      NL80211_RATE_INFO_EHT_NSS,
--      NL80211_RATE_INFO_EHT_GI,
--      NL80211_RATE_INFO_EHT_RU_ALLOC,
+@@ -4878,6 +4993,8 @@ enum nl80211_bss {
+       NL80211_BSS_PARENT_BSSID,
+       NL80211_BSS_CHAIN_SIGNAL,
+       NL80211_BSS_FREQUENCY_OFFSET,
++      NL80211_BSS_MLO_LINK_ID,
++      NL80211_BSS_MLD_ADDR,
  
        /* keep last */
-       __NL80211_RATE_INFO_AFTER_LAST,
-@@ -3834,20 +3721,13 @@ enum nl80211_mpath_info {
-  *     capabilities IE
-  * @NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE: HE PPE thresholds information as
-  *     defined in HE capabilities IE
-+ * @NL80211_BAND_IFTYPE_ATTR_MAX: highest band HE capability attribute currently
-+ *     defined
-  * @NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA: HE 6GHz band capabilities (__le16),
-  *    given for all 6 GHz band channels
-  * @NL80211_BAND_IFTYPE_ATTR_VENDOR_ELEMS: vendor element capabilities that are
-  *    advertised on this band/for this iftype (binary)
-- * @NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MAC: EHT MAC capabilities as in EHT
-- *    capabilities element
-- * @NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PHY: EHT PHY capabilities as in EHT
-- *    capabilities element
-- * @NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MCS_SET: EHT supported NSS/MCS as in EHT
-- *    capabilities element
-- * @NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PPE: EHT PPE thresholds information as
-- *    defined in EHT capabilities element
-  * @__NL80211_BAND_IFTYPE_ATTR_AFTER_LAST: internal use
-- * @NL80211_BAND_IFTYPE_ATTR_MAX: highest band attribute currently defined
-  */
- enum nl80211_band_iftype_attr {
-       __NL80211_BAND_IFTYPE_ATTR_INVALID,
-@@ -3859,10 +3739,6 @@ enum nl80211_band_iftype_attr {
-       NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE,
-       NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA,
-       NL80211_BAND_IFTYPE_ATTR_VENDOR_ELEMS,
--      NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MAC,
--      NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PHY,
--      NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MCS_SET,
--      NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PPE,
-       /* keep last */
-       __NL80211_BAND_IFTYPE_ATTR_AFTER_LAST,
-@@ -4007,10 +3883,6 @@ enum nl80211_wmm_rule {
-  *    on this channel in current regulatory domain.
-  * @NL80211_FREQUENCY_ATTR_16MHZ: 16 MHz operation is allowed
-  *    on this channel in current regulatory domain.
-- * @NL80211_FREQUENCY_ATTR_NO_320MHZ: any 320 MHz channel using this channel
-- *    as the primary or any of the secondary channels isn't possible
-- * @NL80211_FREQUENCY_ATTR_NO_EHT: EHT operation is not allowed on this channel
-- *    in current regulatory domain.
-  * @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number
-  *    currently defined
-  * @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use
-@@ -4047,8 +3919,6 @@ enum nl80211_frequency_attr {
-       NL80211_FREQUENCY_ATTR_4MHZ,
-       NL80211_FREQUENCY_ATTR_8MHZ,
-       NL80211_FREQUENCY_ATTR_16MHZ,
--      NL80211_FREQUENCY_ATTR_NO_320MHZ,
--      NL80211_FREQUENCY_ATTR_NO_EHT,
-       /* keep last */
-       __NL80211_FREQUENCY_ATTR_AFTER_LAST,
-@@ -4247,7 +4117,6 @@ enum nl80211_sched_scan_match_attr {
-  * @NL80211_RRF_NO_80MHZ: 80MHz operation not allowed
-  * @NL80211_RRF_NO_160MHZ: 160MHz operation not allowed
-  * @NL80211_RRF_NO_HE: HE operation not allowed
-- * @NL80211_RRF_NO_320MHZ: 320MHz operation not allowed
-  */
- enum nl80211_reg_rule_flags {
-       NL80211_RRF_NO_OFDM             = 1<<0,
-@@ -4266,7 +4135,6 @@ enum nl80211_reg_rule_flags {
-       NL80211_RRF_NO_80MHZ            = 1<<15,
-       NL80211_RRF_NO_160MHZ           = 1<<16,
-       NL80211_RRF_NO_HE               = 1<<17,
--      NL80211_RRF_NO_320MHZ           = 1<<18,
- };
- #define NL80211_RRF_PASSIVE_SCAN      NL80211_RRF_NO_IR
-@@ -4764,8 +4632,6 @@ enum nl80211_key_mode {
-  * @NL80211_CHAN_WIDTH_4: 4 MHz OFDM channel
-  * @NL80211_CHAN_WIDTH_8: 8 MHz OFDM channel
-  * @NL80211_CHAN_WIDTH_16: 16 MHz OFDM channel
-- * @NL80211_CHAN_WIDTH_320: 320 MHz channel, the %NL80211_ATTR_CENTER_FREQ1
-- *    attribute must be provided as well
-  */
- enum nl80211_chan_width {
-       NL80211_CHAN_WIDTH_20_NOHT,
-@@ -4781,7 +4647,6 @@ enum nl80211_chan_width {
-       NL80211_CHAN_WIDTH_4,
-       NL80211_CHAN_WIDTH_8,
-       NL80211_CHAN_WIDTH_16,
--      NL80211_CHAN_WIDTH_320,
- };
- /**
-@@ -5096,7 +4961,6 @@ enum nl80211_txrate_gi {
-  * @NL80211_BAND_60GHZ: around 60 GHz band (58.32 - 69.12 GHz)
-  * @NL80211_BAND_6GHZ: around 6 GHz band (5.9 - 7.2 GHz)
-  * @NL80211_BAND_S1GHZ: around 900MHz, supported by S1G PHYs
-- * @NL80211_BAND_LC: light communication band (placeholder)
-  * @NUM_NL80211_BANDS: number of bands, avoid using this in userspace
-  *    since newer kernel versions may support more bands
-  */
-@@ -5106,7 +4970,6 @@ enum nl80211_band {
-       NL80211_BAND_60GHZ,
-       NL80211_BAND_6GHZ,
-       NL80211_BAND_S1GHZ,
--      NL80211_BAND_LC,
-       NUM_NL80211_BANDS,
- };
-@@ -5673,7 +5536,7 @@ enum nl80211_iface_limit_attrs {
-  *    => allows 8 of AP/GO that can have BI gcd >= min gcd
-  *
-  *    numbers = [ #{STA} <= 2 ], channels = 2, max = 2
-- *    => allows two STAs on the same or on different channels
-+ *    => allows two STAs on different channels
-  *
-  *    numbers = [ #{STA} <= 1, #{P2P-client,P2P-GO} <= 3 ], max = 4
-  *    => allows a STA plus three P2P interfaces
-@@ -5718,7 +5581,7 @@ enum nl80211_if_combination_attrs {
-  * @NL80211_PLINK_ESTAB: mesh peer link is established
-  * @NL80211_PLINK_HOLDING: mesh peer link is being closed or cancelled
-  * @NL80211_PLINK_BLOCKED: all frames transmitted from this mesh
-- *    plink are discarded, except for authentication frames
-+ *    plink are discarded
-  * @NUM_NL80211_PLINK_STATES: number of peer link states
-  * @MAX_NL80211_PLINK_STATES: highest numerical value of plink states
-  */
-@@ -5855,15 +5718,13 @@ enum nl80211_tdls_operation {
-       NL80211_TDLS_DISABLE_LINK,
- };
--/**
-+/*
-  * enum nl80211_ap_sme_features - device-integrated AP features
-- * @NL80211_AP_SME_SA_QUERY_OFFLOAD: SA Query procedures offloaded to driver
-- *    when user space indicates support for SA Query procedures offload during
-- *    "start ap" with %NL80211_AP_SETTINGS_SA_QUERY_OFFLOAD_SUPPORT.
-- */
-+ * Reserved for future use, no bits are defined in
-+ * NL80211_ATTR_DEVICE_AP_SME yet.
- enum nl80211_ap_sme_features {
--      NL80211_AP_SME_SA_QUERY_OFFLOAD         = 1 << 0,
- };
-+ */
- /**
-  * enum nl80211_feature_flags - device/driver features
-@@ -6166,11 +6027,6 @@ enum nl80211_feature_flags {
-  * @NL80211_EXT_FEATURE_BSS_COLOR: The driver supports BSS color collision
-  *    detection and change announcemnts.
-  *
-- * @NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD: Driver running in AP mode supports
-- *    FILS encryption and decryption for (Re)Association Request and Response
-- *    frames. Userspace has to share FILS AAD details to the driver by using
-- *    @NL80211_CMD_SET_FILS_AAD.
-- *
+       __NL80211_BSS_AFTER_LAST,
+@@ -5874,7 +5991,7 @@ enum nl80211_ap_sme_features {
+  * @NL80211_FEATURE_INACTIVITY_TIMER: This driver takes care of freeing up
+  *    the connected inactive stations in AP mode.
+  * @NL80211_FEATURE_CELL_BASE_REG_HINTS: This driver has been tested
+- *    to work properly to suppport receiving regulatory hints from
++ *    to work properly to support receiving regulatory hints from
+  *    cellular base stations.
+  * @NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL: (no longer available, only
+  *    here to reserve the value for API/ABI compatibility)
+@@ -6174,6 +6291,14 @@ enum nl80211_feature_flags {
   * @NL80211_EXT_FEATURE_RADAR_BACKGROUND: Device supports background radar/CAC
   *    detection.
   *
-@@ -6239,7 +6095,6 @@ enum nl80211_ext_feature_index {
-       NL80211_EXT_FEATURE_SECURE_RTT,
-       NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE,
++ * @NL80211_EXT_FEATURE_POWERED_ADDR_CHANGE: Device can perform a MAC address
++ *    change without having to bring the underlying network device down
++ *    first. For example, in station mode this can be used to vary the
++ *    origin MAC address prior to a connection to a new AP for privacy
++ *    or other reasons. Note that certain driver specific restrictions
++ *    might apply, e.g. no scans in progress, no offchannel operations
++ *    in progress, and no active connections.
++ *
+  * @NUM_NL80211_EXT_FEATURES: number of extended features.
+  * @MAX_NL80211_EXT_FEATURES: highest extended feature index.
+  */
+@@ -6241,6 +6366,7 @@ enum nl80211_ext_feature_index {
        NL80211_EXT_FEATURE_BSS_COLOR,
--      NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD,
+       NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD,
        NL80211_EXT_FEATURE_RADAR_BACKGROUND,
++      NL80211_EXT_FEATURE_POWERED_ADDR_CHANGE,
  
        /* add new features before the definition below */
-@@ -7548,7 +7403,7 @@ enum nl80211_sar_specs_attrs {
-  * @NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY: Used by the kernel
-  *    to advertise the maximum profile periodicity supported by the driver
-  *    if EMA is enabled. Driver should indicate EMA support to the userspace
-- *    by setting wiphy->ema_max_profile_periodicity to
-+ *    by setting wiphy->mbssid_max_ema_profile_periodicity to
-  *    a non-zero value.
-  *
-  * @NL80211_MBSSID_CONFIG_ATTR_INDEX: Mandatory parameter to pass the index of
-@@ -7567,7 +7422,7 @@ enum nl80211_sar_specs_attrs {
-  *
-  * @NL80211_MBSSID_CONFIG_ATTR_EMA: Flag used to enable EMA AP feature.
-  *    Setting this flag is permitted only if the driver advertises EMA support
-- *    by setting wiphy->ema_max_profile_periodicity to non-zero.
-+ *    by setting wiphy->mbssid_max_ema_profile_periodicity to non-zero.
-  *
-  * @__NL80211_MBSSID_CONFIG_ATTR_LAST: Internal
-  * @NL80211_MBSSID_CONFIG_ATTR_MAX: highest attribute
-@@ -7586,20 +7441,4 @@ enum nl80211_mbssid_config_attributes {
-       NL80211_MBSSID_CONFIG_ATTR_MAX = __NL80211_MBSSID_CONFIG_ATTR_LAST - 1,
- };
--/**
-- * enum nl80211_ap_settings_flags - AP settings flags
-- *
-- * @NL80211_AP_SETTINGS_EXTERNAL_AUTH_SUPPORT: AP supports external
-- *    authentication.
-- * @NL80211_AP_SETTINGS_SA_QUERY_OFFLOAD_SUPPORT: Userspace supports SA Query
-- *    procedures offload to driver. If driver advertises
-- *    %NL80211_AP_SME_SA_QUERY_OFFLOAD in AP SME features, userspace shall
-- *    ignore SA Query procedures and validations when this flag is set by
-- *    userspace.
-- */
--enum nl80211_ap_settings_flags {
--      NL80211_AP_SETTINGS_EXTERNAL_AUTH_SUPPORT       = 1 << 0,
--      NL80211_AP_SETTINGS_SA_QUERY_OFFLOAD_SUPPORT    = 1 << 1,
--};
--
- #endif /* __LINUX_NL80211_H */
---- a/event.c
-+++ b/event.c
-@@ -1292,9 +1292,6 @@ static int print_event(struct nl_msg *ms
-       case NL80211_CMD_CH_SWITCH_NOTIFY:
-               parse_ch_switch_notify(tb, gnlh->cmd);
-               break;
--      case NL80211_CMD_ASSOC_COMEBACK: /* 147 */
--              parse_assoc_comeback(tb, gnlh->cmd);
--              break;
-       default:
-               printf("unknown event %d (%s)\n",
-                      gnlh->cmd, command_name(gnlh->cmd));
---- a/info.c
-+++ b/info.c
-@@ -164,7 +164,6 @@ static void ext_feat_print(enum nl80211_
-       ext_feat_case(PROT_RANGE_NEGO_AND_MEASURE,
-                     "support for MFP in range measurement negotiation/procedure");
-       ext_feat_case(BSS_COLOR, "BSS coloring support");
--      ext_feat_case(FILS_CRYPTO_OFFLOAD, "FILS crypto offload");
-       ext_feat_case(RADAR_BACKGROUND, "Radar background support");
-       }
- }
---- a/interface.c
-+++ b/interface.c
-@@ -362,8 +362,6 @@ char *channel_width_name(enum nl80211_ch
-               return "5 MHz";
-       case NL80211_CHAN_WIDTH_10:
-               return "10 MHz";
--      case NL80211_CHAN_WIDTH_320:
--              return "320 MHz";
-       default:
-               return "unknown";
-       }
---- a/util.c
-+++ b/util.c
-@@ -508,7 +508,6 @@ static int parse_freqs(struct chandef *c
-       case NL80211_CHAN_WIDTH_40:
-       case NL80211_CHAN_WIDTH_80:
-       case NL80211_CHAN_WIDTH_160:
--      case NL80211_CHAN_WIDTH_320:
-               need_cf1 = true;
-               break;
-       case NL80211_CHAN_WIDTH_1:
-@@ -626,10 +625,6 @@ int parse_freqchan(struct chandef *chand
-                 .width = NL80211_CHAN_WIDTH_160,
-                 .freq1_diff = 0,
-                 .chantype = -1 },
--              { .name = "320MHz",
--                .width = NL80211_CHAN_WIDTH_320,
--                .freq1_diff = 0,
--                .chantype = -1 },
-       };
-       const struct chanmode *chanmode_selected = NULL;
-       unsigned int freq;
-@@ -1599,48 +1594,6 @@ void print_eht_info(struct nlattr *nl_if
-       print_iftype_line(tb[NL80211_BAND_IFTYPE_ATTR_IFTYPES]);
-       printf("\n");
--      if (tb[NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MAC]) {
--              len = nla_len(tb[NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MAC]);
--              if (len > sizeof(mac_cap))
--                      len = sizeof(mac_cap);
--              memcpy(mac_cap,
--                     nla_data(tb[NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MAC]),
--                     len);
--      }
--
--      if (tb[NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PHY]) {
--              len = nla_len(tb[NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PHY]);
--
--              if (len > sizeof(phy_cap))
--                      len = sizeof(phy_cap);
--
--              memcpy(phy_cap,
--                     nla_data(tb[NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PHY]),
--                     len);
--      }
--
--      if (tb[NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MCS_SET]) {
--              len = nla_len(tb[NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MCS_SET]);
--              if (len > sizeof(mcs_set))
--                      len = sizeof(mcs_set);
--              memcpy(mcs_set,
--                     nla_data(tb[NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MCS_SET]),
--                     len);
--
--              // Assume that all parts of the MCS set are present
--              mcs_len = sizeof(mcs_set);
--      }
--
--      if (tb[NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PPE]) {
--              len = nla_len(tb[NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PPE]);
--              if (len > sizeof(ppet))
--                      len = sizeof(ppet);
--              memcpy(ppet,
--                     nla_data(tb[NL80211_BAND_IFTYPE_ATTR_EHT_CAP_PPE]),
--                     len);
--              ppet_len = len;
--      }
--
-       if (tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY]) {
-               len = nla_len(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY]);
---- a/reg.c
-+++ b/reg.c
-@@ -210,7 +210,6 @@ static int print_reg_handler(struct nl_m
-               PARSE_FLAG(NL80211_RRF_NO_80MHZ, "NO-80MHZ");
-               PARSE_FLAG(NL80211_RRF_NO_160MHZ, "NO-160MHZ");
-               PARSE_FLAG(NL80211_RRF_NO_HE, "NO-HE");
--              PARSE_FLAG(NL80211_RRF_NO_320MHZ, "NO-320MHZ");
-               /* Kernels that support NO_IR always turn on both flags */
-               if ((flags & NL80211_RRF_NO_IR) && (flags & __NL80211_RRF_NO_IBSS)) {
---- a/station.c
-+++ b/station.c
-@@ -239,8 +239,6 @@ void parse_bitrate(struct nlattr *bitrat
-               pos += snprintf(pos, buflen - (pos - buf), " 80P80MHz");
-       if (rinfo[NL80211_RATE_INFO_160_MHZ_WIDTH])
-               pos += snprintf(pos, buflen - (pos - buf), " 160MHz");
--      if (rinfo[NL80211_RATE_INFO_320_MHZ_WIDTH])
--              pos += snprintf(pos, buflen - (pos - buf), " 320MHz");
-       if (rinfo[NL80211_RATE_INFO_SHORT_GI])
-               pos += snprintf(pos, buflen - (pos - buf), " short GI");
-       if (rinfo[NL80211_RATE_INFO_VHT_NSS])
-@@ -261,18 +259,6 @@ void parse_bitrate(struct nlattr *bitrat
-       if (rinfo[NL80211_RATE_INFO_HE_RU_ALLOC])
-               pos += snprintf(pos, buflen - (pos - buf),
-                               " HE-RU-ALLOC %d", nla_get_u8(rinfo[NL80211_RATE_INFO_HE_RU_ALLOC]));
--      if (rinfo[NL80211_RATE_INFO_EHT_MCS])
--              pos += snprintf(pos, buflen - (pos - buf),
--                              " EHT-MCS %d", nla_get_u8(rinfo[NL80211_RATE_INFO_EHT_MCS]));
--      if (rinfo[NL80211_RATE_INFO_EHT_NSS])
--              pos += snprintf(pos, buflen - (pos - buf),
--                              " EHT-NSS %d", nla_get_u8(rinfo[NL80211_RATE_INFO_EHT_NSS]));
--      if (rinfo[NL80211_RATE_INFO_EHT_GI])
--              pos += snprintf(pos, buflen - (pos - buf),
--                              " EHT-GI %d", nla_get_u8(rinfo[NL80211_RATE_INFO_EHT_GI]));
--      if (rinfo[NL80211_RATE_INFO_EHT_RU_ALLOC])
--              pos += snprintf(pos, buflen - (pos - buf),
--                              " EHT-RU-ALLOC %d", nla_get_u8(rinfo[NL80211_RATE_INFO_EHT_RU_ALLOC]));
- }
- static char *get_chain_signal(struct nlattr *attr_list)
+       NUM_NL80211_EXT_FEATURES,