]> git.ipfire.org Git - thirdparty/hostap.git/blobdiff - src/drivers/driver.h
nl80211: Share VHT channel configuration for HE
[thirdparty/hostap.git] / src / drivers / driver.h
index 6b8334711c3a2ae2ab2de1a412011a0af659851b..84b80ac2918d7284e86b0a89cc0554dcf48ebafd 100644 (file)
 #define HOSTAPD_CHAN_VHT_130_30 0x04000000
 #define HOSTAPD_CHAN_VHT_150_10 0x08000000
 
+/* Allowed bandwidth mask */
+enum hostapd_chan_width_attr {
+       HOSTAPD_CHAN_WIDTH_10   = BIT(0),
+       HOSTAPD_CHAN_WIDTH_20   = BIT(1),
+       HOSTAPD_CHAN_WIDTH_40P  = BIT(2),
+       HOSTAPD_CHAN_WIDTH_40M  = BIT(3),
+       HOSTAPD_CHAN_WIDTH_80   = BIT(4),
+       HOSTAPD_CHAN_WIDTH_160  = BIT(5),
+};
+
 /* Filter gratuitous ARP */
 #define WPA_DATA_FRAME_FILTER_FLAG_ARP BIT(0)
 /* Filter unsolicited Neighbor Advertisement */
@@ -110,6 +120,13 @@ struct hostapd_channel_data {
         */
        int flag;
 
+       /**
+        * allowed_bw - Allowed channel width bitmask
+        *
+        * See enum hostapd_chan_width_attr.
+        */
+       u32 allowed_bw;
+
        /**
         * max_tx_power - Regulatory transmit power limit in dBm
         */
@@ -141,27 +158,19 @@ struct hostapd_channel_data {
        unsigned int dfs_cac_ms;
 };
 
-#define HE_MAX_NUM_SS          8
-#define HE_MAX_PHY_CAPAB_SIZE  3
-
-/**
- * struct he_ppe_threshold - IEEE 802.11ax HE PPE Threshold
- */
-struct he_ppe_threshold {
-       u32 numss_m1;
-       u32 ru_count;
-       u32 ppet16_ppet8_ru3_ru0[HE_MAX_NUM_SS];
-};
+#define HE_MAX_MAC_CAPAB_SIZE  6
+#define HE_MAX_PHY_CAPAB_SIZE  11
+#define HE_MAX_MCS_CAPAB_SIZE  12
 
 /**
  * struct he_capabilities - IEEE 802.11ax HE capabilities
  */
 struct he_capabilities {
        u8 he_supported;
-       u32 phy_cap[HE_MAX_PHY_CAPAB_SIZE];
-       u32 mac_cap;
-       u32 mcs;
-       struct he_ppe_threshold ppet;
+       u8 phy_cap[HE_MAX_PHY_CAPAB_SIZE];
+       u8 mac_cap[HE_MAX_MAC_CAPAB_SIZE];
+       u8 mcs[HE_MAX_MCS_CAPAB_SIZE];
+       u8 ppet[25];
 };
 
 #define HOSTAPD_MODE_FLAG_HT_INFO_KNOWN BIT(0)
@@ -681,6 +690,11 @@ struct hostapd_freq_params {
         */
        int vht_enabled;
 
+       /**
+        * he_enabled - Whether HE is enabled
+        */
+       int he_enabled;
+
        /**
         * center_freq1 - Segment 0 center frequency in MHz
         *
@@ -914,10 +928,10 @@ struct wpa_driver_associate_params {
         * passphrase - RSN passphrase for PSK
         *
         * This value is made available only for WPA/WPA2-Personal (PSK) and
-        * only for drivers that set WPA_DRIVER_FLAGS_4WAY_HANDSHAKE. This is
-        * the 8..63 character ASCII passphrase, if available. Please note that
-        * this can be %NULL if passphrase was not used to generate the PSK. In
-        * that case, the psk field must be used to fetch the PSK.
+        * only for drivers that set WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK. This
+        * is the 8..63 character ASCII passphrase, if available. Please note
+        * that this can be %NULL if passphrase was not used to generate the
+        * PSK. In that case, the psk field must be used to fetch the PSK.
         */
        const char *passphrase;
 
@@ -925,9 +939,9 @@ struct wpa_driver_associate_params {
         * psk - RSN PSK (alternative for passphrase for PSK)
         *
         * This value is made available only for WPA/WPA2-Personal (PSK) and
-        * only for drivers that set WPA_DRIVER_FLAGS_4WAY_HANDSHAKE. This is
-        * the 32-octet (256-bit) PSK, if available. The driver wrapper should
-        * be prepared to handle %NULL value as an error.
+        * only for drivers that set WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK. This
+        * is the 32-octet (256-bit) PSK, if available. The driver wrapper
+        * should be prepared to handle %NULL value as an error.
         */
        const u8 *psk;
 
@@ -1105,6 +1119,11 @@ enum hide_ssid {
        HIDDEN_SSID_ZERO_CONTENTS
 };
 
+enum ch_switch_state {
+       CH_SW_STARTED,
+       CH_SW_FINISHED
+};
+
 struct wowlan_triggers {
        u8 any;
        u8 disconnect;
@@ -1367,6 +1386,23 @@ struct wpa_driver_ap_params {
         * service).
         */
        int multicast_to_unicast;
+
+       /**
+        * ftm_responder - Whether FTM responder is enabled
+        */
+       int ftm_responder;
+
+       /**
+        * lci - Binary data, the content of an LCI report IE with type 8 as
+        * defined in IEEE Std 802.11-2016, 9.4.2.22.10
+        */
+       const struct wpabuf *lci;
+
+       /**
+        * civic - Binary data, the content of a measurement report IE with
+        * type 11 as defined in IEEE Std 802.11-2016, 9.4.2.22.13
+        */
+       const struct wpabuf *civic;
 };
 
 struct wpa_driver_mesh_bss_params {
@@ -1424,6 +1460,7 @@ struct wpa_driver_capa {
 #define WPA_DRIVER_CAPA_KEY_MGMT_FILS_SHA384    0x00002000
 #define WPA_DRIVER_CAPA_KEY_MGMT_FT_FILS_SHA256 0x00004000
 #define WPA_DRIVER_CAPA_KEY_MGMT_FT_FILS_SHA384 0x00008000
+#define WPA_DRIVER_CAPA_KEY_MGMT_SAE           0x00010000
        /** Bitfield of supported key management suites */
        unsigned int key_mgmt;
 
@@ -1457,7 +1494,7 @@ struct wpa_driver_capa {
 #define WPA_DRIVER_FLAGS_DFS_OFFLOAD                   0x00000004
 /** Driver takes care of RSN 4-way handshake internally; PMK is configured with
  * struct wpa_driver_ops::set_key using alg = WPA_ALG_PMK */
-#define WPA_DRIVER_FLAGS_4WAY_HANDSHAKE 0x00000008
+#define WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_8021X          0x00000008
 /** Driver is for a wired Ethernet interface */
 #define WPA_DRIVER_FLAGS_WIRED         0x00000010
 /** Driver provides separate commands for authentication and association (SME in
@@ -1579,6 +1616,10 @@ struct wpa_driver_capa {
 #define WPA_DRIVER_FLAGS_MFP_OPTIONAL          0x0040000000000000ULL
 /** Driver is a self-managed regulatory device */
 #define WPA_DRIVER_FLAGS_SELF_MANAGED_REGULATORY       0x0080000000000000ULL
+/** Driver supports FTM responder functionality */
+#define WPA_DRIVER_FLAGS_FTM_RESPONDER         0x0100000000000000ULL
+/** Driver support 4-way handshake offload for WPA-Personal */
+#define WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK    0x0200000000000000ULL
        u64 flags;
 
 #define FULL_AP_CLIENT_STATE_SUPP(drv_flags) \
@@ -1713,6 +1754,7 @@ struct hostapd_data;
 struct hostap_sta_driver_data {
        unsigned long rx_packets, tx_packets;
        unsigned long long rx_bytes, tx_bytes;
+       unsigned long long rx_airtime, tx_airtime;
        int bytes_64bit; /* whether 64-bit byte counters are supported */
        unsigned long current_tx_rate;
        unsigned long current_rx_rate;
@@ -1722,6 +1764,8 @@ struct hostap_sta_driver_data {
        unsigned long tx_retry_failed;
        unsigned long tx_retry_count;
        s8 last_ack_rssi;
+       unsigned long backlog_packets;
+       unsigned long backlog_bytes;
        s8 signal;
        u8 rx_vhtmcs;
        u8 tx_vhtmcs;
@@ -1742,6 +1786,8 @@ struct hostapd_sta_add_params {
        const struct ieee80211_vht_capabilities *vht_capabilities;
        int vht_opmode_enabled;
        u8 vht_opmode;
+       const struct ieee80211_he_capabilities *he_capab;
+       size_t he_capab_len;
        u32 flags; /* bitmask of WPA_STA_* flags */
        u32 flags_mask; /* unset bits in flags */
 #ifdef CONFIG_MESH
@@ -1902,17 +1948,6 @@ enum smps_mode {
        SMPS_INVALID,
 };
 
-/* enum chan_width - Channel width definitions */
-enum chan_width {
-       CHAN_WIDTH_20_NOHT,
-       CHAN_WIDTH_20,
-       CHAN_WIDTH_40,
-       CHAN_WIDTH_80,
-       CHAN_WIDTH_80P80,
-       CHAN_WIDTH_160,
-       CHAN_WIDTH_UNKNOWN
-};
-
 #define WPA_INVALID_NOISE 9999
 
 /**
@@ -2128,17 +2163,19 @@ enum wpa_drv_update_connect_params_mask {
  *     use %WLAN_STATUS_UNSPECIFIED_FAILURE if wpa_supplicant cannot give
  *     the real status code for failures. Used only for the request interface
  *     from user space to the driver.
+ * @pmkid: Generated PMKID as part of external auth exchange (e.g., SAE).
  */
 struct external_auth {
        enum {
                EXT_AUTH_START,
                EXT_AUTH_ABORT,
        } action;
-       u8 bssid[ETH_ALEN];
-       u8 ssid[SSID_MAX_LEN];
+       const u8 *bssid;
+       const u8 *ssid;
        size_t ssid_len;
        unsigned int key_mgmt_suite;
        u16 status;
+       const u8 *pmkid;
 };
 
 /**
@@ -2307,7 +2344,7 @@ struct wpa_driver_ops {
         *
         * Returns: 0 on success, -1 on failure
         */
-       int (*deauthenticate)(void *priv, const u8 *addr, int reason_code);
+       int (*deauthenticate)(void *priv, const u8 *addr, u16 reason_code);
 
        /**
         * associate - Request driver to associate
@@ -2776,7 +2813,7 @@ struct wpa_driver_ops {
         * a Deauthentication frame to be sent to it.
         */
        int (*sta_deauth)(void *priv, const u8 *own_addr, const u8 *addr,
-                         int reason);
+                         u16 reason);
 
        /**
         * sta_disassoc - Disassociate a station (AP only)
@@ -2790,7 +2827,7 @@ struct wpa_driver_ops {
         * a Disassociation frame to be sent to it.
         */
        int (*sta_disassoc)(void *priv, const u8 *own_addr, const u8 *addr,
-                           int reason);
+                           u16 reason);
 
        /**
         * sta_remove - Remove a station entry (AP only)
@@ -2907,6 +2944,16 @@ struct wpa_driver_ops {
                             unsigned int total_flags, unsigned int flags_or,
                             unsigned int flags_and);
 
+       /**
+        * sta_set_airtime_weight - Set station airtime weight (AP only)
+        * @priv: Private driver interface data
+        * @addr: Station address
+        * @weight: New weight for station airtime assignment
+        * Returns: 0 on success, -1 on failure
+        */
+       int (*sta_set_airtime_weight)(void *priv, const u8 *addr,
+                                     unsigned int weight);
+
        /**
         * set_tx_queue_params - Set TX queue parameters
         * @priv: Private driver interface data
@@ -3686,7 +3733,7 @@ struct wpa_driver_ops {
        /**
         * status - Get driver interface status information
         * @priv: Private driver interface data
-        * @buf: Buffer for printing tou the status information
+        * @buf: Buffer for printing the status information
         * @buflen: Maximum length of the buffer
         * Returns: Length of written status information or -1 on failure
         */
@@ -3809,6 +3856,14 @@ struct wpa_driver_ops {
         */
        int (*set_transmit_next_pn)(void *priv, struct transmit_sa *sa);
 
+       /**
+        * set_receive_lowest_pn - Set receive lowest PN
+        * @priv: Private driver interface data
+        * @sa: secure association
+        * Returns: 0 on success, -1 on failure (or if not supported)
+        */
+       int (*set_receive_lowest_pn)(void *priv, struct receive_sa *sa);
+
        /**
         * create_receive_sc - create secure channel for receiving
         * @priv: Private driver interface data
@@ -4502,6 +4557,15 @@ enum wpa_event_type {
         * */
        EVENT_CH_SWITCH,
 
+       /**
+        * EVENT_CH_SWITCH_STARTED - AP or GO started to switch channels
+        *
+        * This is a pre-switch event indicating the shortly following switch
+        * of operating channels.
+        *
+        * Described in wpa_event_data.ch_switch
+        */
+       EVENT_CH_SWITCH_STARTED,
        /**
         * EVENT_WNM - Request WNM operation
         *