]> git.ipfire.org Git - thirdparty/hostap.git/blobdiff - src/drivers/driver.h
hostapd: Add ctrl iface indications for WDS STA interface
[thirdparty/hostap.git] / src / drivers / driver.h
index 6797a5a84f2e50187621fb92f9b6309f2748b124..9922962ea1fa35926ed6f3a71e8e2f64f3663dfd 100644 (file)
@@ -814,7 +814,7 @@ struct wpa_driver_associate_params {
         * WPA information element to be included in (Re)Association
         * Request (including information element id and length). Use
         * of this WPA IE is optional. If the driver generates the WPA
-        * IE, it can use pairwise_suite, group_suite, and
+        * IE, it can use pairwise_suite, group_suite, group_mgmt_suite, and
         * key_mgmt_suite to select proper algorithms. In this case,
         * the driver has to notify wpa_supplicant about the used WPA
         * IE by generating an event that the interface code will
@@ -853,6 +853,13 @@ struct wpa_driver_associate_params {
         */
        unsigned int group_suite;
 
+       /**
+        * mgmt_group_suite - Selected group management cipher suite (WPA_CIPHER_*)
+        *
+        * This is usually ignored if @wpa_ie is used.
+        */
+       unsigned int mgmt_group_suite;
+
        /**
         * key_mgmt_suite - Selected key management suite (WPA_KEY_MGMT_*)
         *
@@ -1556,6 +1563,8 @@ struct wpa_driver_capa {
  * functionality but can support only OCE STA-CFON functionality.
  */
 #define WPA_DRIVER_FLAGS_OCE_STA_CFON          0x0020000000000000ULL
+/** Driver supports MFP-optional in the connect command */
+#define WPA_DRIVER_FLAGS_MFP_OPTIONAL          0x0040000000000000ULL
        u64 flags;
 
 #define FULL_AP_CLIENT_STATE_SUPP(drv_flags) \
@@ -1677,18 +1686,35 @@ struct wpa_driver_capa {
 
 struct hostapd_data;
 
+#define STA_DRV_DATA_TX_MCS BIT(0)
+#define STA_DRV_DATA_RX_MCS BIT(1)
+#define STA_DRV_DATA_TX_VHT_MCS BIT(2)
+#define STA_DRV_DATA_RX_VHT_MCS BIT(3)
+#define STA_DRV_DATA_TX_VHT_NSS BIT(4)
+#define STA_DRV_DATA_RX_VHT_NSS BIT(5)
+#define STA_DRV_DATA_TX_SHORT_GI BIT(6)
+#define STA_DRV_DATA_RX_SHORT_GI BIT(7)
+#define STA_DRV_DATA_LAST_ACK_RSSI BIT(8)
+
 struct hostap_sta_driver_data {
        unsigned long rx_packets, tx_packets;
        unsigned long long rx_bytes, tx_bytes;
        int bytes_64bit; /* whether 64-bit byte counters are supported */
        unsigned long current_tx_rate;
+       unsigned long current_rx_rate;
        unsigned long inactive_msec;
-       unsigned long flags;
+       unsigned long flags; /* bitfield of STA_DRV_DATA_* */
        unsigned long num_ps_buf_frames;
        unsigned long tx_retry_failed;
        unsigned long tx_retry_count;
-       int last_rssi;
-       int last_ack_rssi;
+       s8 last_ack_rssi;
+       s8 signal;
+       u8 rx_vhtmcs;
+       u8 tx_vhtmcs;
+       u8 rx_mcs;
+       u8 tx_mcs;
+       u8 rx_vht_nss;
+       u8 tx_vht_nss;
 };
 
 struct hostapd_sta_add_params {
@@ -1851,6 +1877,17 @@ enum wnm_oper {
        WNM_SLEEP_TFS_IE_DEL        /* AP delete the TFS IE */
 };
 
+/* enum smps_mode - SMPS mode definitions */
+enum smps_mode {
+       SMPS_AUTOMATIC,
+       SMPS_OFF,
+       SMPS_DYNAMIC,
+       SMPS_STATIC,
+
+       /* Keep last */
+       SMPS_INVALID,
+};
+
 /* enum chan_width - Channel width definitions */
 enum chan_width {
        CHAN_WIDTH_20_NOHT,
@@ -2020,6 +2057,43 @@ struct wpa_pmkid_params {
        size_t pmk_len;
 };
 
+/* Mask used to specify which connection parameters have to be updated */
+enum wpa_drv_update_connect_params_mask {
+       WPA_DRV_UPDATE_ASSOC_IES        = BIT(0),
+       WPA_DRV_UPDATE_FILS_ERP_INFO    = BIT(1),
+       WPA_DRV_UPDATE_AUTH_TYPE        = BIT(2),
+};
+
+/**
+ * struct external_auth - External authentication trigger parameters
+ *
+ * These are used across the external authentication request and event
+ * interfaces.
+ * @action: Action type / trigger for external authentication. Only significant
+ *     for the event interface.
+ * @bssid: BSSID of the peer with which the authentication has to happen. Used
+ *     by both the request and event interface.
+ * @ssid: SSID of the AP. Used by both the request and event interface.
+ * @ssid_len: SSID length in octets.
+ * @key_mgmt_suite: AKM suite of the respective authentication. Optional for
+ *     the request interface.
+ * @status: Status code, %WLAN_STATUS_SUCCESS for successful authentication,
+ *     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.
+ */
+struct external_auth {
+       enum {
+               EXT_AUTH_START,
+               EXT_AUTH_ABORT,
+       } action;
+       u8 bssid[ETH_ALEN];
+       u8 ssid[SSID_MAX_LEN];
+       size_t ssid_len;
+       unsigned int key_mgmt_suite;
+       u16 status;
+};
+
 /**
  * struct wpa_driver_ops - Driver interface API definition
  *
@@ -3579,6 +3653,17 @@ struct wpa_driver_ops {
         */
        int (*roaming)(void *priv, int allowed, const u8 *bssid);
 
+       /**
+        * disable_fils - Enable/disable FILS feature
+        * @priv: Private driver interface data
+        * @disable: 0-enable and 1-disable FILS feature
+        * Returns: 0 on success, -1 on failure
+        *
+        * This callback can be used to configure driver and below layers to
+        * enable/disable all FILS features.
+        */
+       int (*disable_fils)(void *priv, int disable);
+
        /**
         * set_mac_addr - Set MAC address
         * @priv: Private driver interface data
@@ -3953,6 +4038,33 @@ struct wpa_driver_ops {
         */
        int (*set_bssid_blacklist)(void *priv, unsigned int num_bssid,
                                   const u8 *bssid);
+
+       /**
+        * update_connect_params - Update the connection parameters
+        * @priv: Private driver interface data
+        * @params: Association parameters
+        * @mask: Bit mask indicating which parameters in @params have to be
+        *      updated
+        * Returns: 0 on success, -1 on failure
+        *
+        * Update the connection parameters when in connected state so that the
+        * driver uses the updated parameters for subsequent roaming. This is
+        * used only with drivers that implement internal BSS selection and
+        * roaming.
+        */
+       int (*update_connect_params)(
+               void *priv, struct wpa_driver_associate_params *params,
+               enum wpa_drv_update_connect_params_mask mask);
+
+       /**
+        * send_external_auth_status - Indicate the status of external
+        * authentication processing to the host driver.
+        * @priv: Private driver interface data
+        * @params: Status of authentication processing.
+        * Returns: 0 on success, -1 on failure
+        */
+       int (*send_external_auth_status)(void *priv,
+                                        struct external_auth *params);
 };
 
 /**
@@ -4062,17 +4174,6 @@ enum wpa_event_type {
         */
        EVENT_PMKID_CANDIDATE,
 
-       /**
-        * EVENT_STKSTART - Request STK handshake (MLME-STKSTART.request)
-        *
-        * This event can be used to inform wpa_supplicant about desire to set
-        * up secure direct link connection between two stations as defined in
-        * IEEE 802.11e with a new PeerKey mechanism that replaced the original
-        * STAKey negotiation. The caller will need to set peer address for the
-        * event.
-        */
-       EVENT_STKSTART,
-
        /**
         * EVENT_TDLS - Request TDLS operation
         *
@@ -4459,6 +4560,47 @@ enum wpa_event_type {
         * performed before start operating on this channel.
         */
        EVENT_DFS_PRE_CAC_EXPIRED,
+
+       /**
+        * EVENT_EXTERNAL_AUTH - This event interface is used by host drivers
+        * that do not define separate commands for authentication and
+        * association (~WPA_DRIVER_FLAGS_SME) but offload the 802.11
+        * authentication to wpa_supplicant. This event carries all the
+        * necessary information from the host driver for the authentication to
+        * happen.
+        */
+       EVENT_EXTERNAL_AUTH,
+
+       /**
+        * EVENT_PORT_AUTHORIZED - Notification that a connection is authorized
+        *
+        * This event should be indicated when the driver completes the 4-way
+        * handshake. This event should be preceded by an EVENT_ASSOC that
+        * indicates the completion of IEEE 802.11 association.
+        */
+       EVENT_PORT_AUTHORIZED,
+
+       /**
+        * EVENT_STATION_OPMODE_CHANGED - Notify STA's HT/VHT operation mode
+        * change event.
+        */
+       EVENT_STATION_OPMODE_CHANGED,
+
+       /**
+        * EVENT_INTERFACE_MAC_CHANGED - Notify that interface MAC changed
+        *
+        * This event is emitted when the MAC changes while the interface is
+        * enabled. When an interface was disabled and becomes enabled, it
+        * must be always assumed that the MAC possibly changed.
+        */
+       EVENT_INTERFACE_MAC_CHANGED,
+
+       /**
+        * EVENT_WDS_STA_INTERFACE_STATUS - Notify WDS STA interface status
+        *
+        * This event is emitted when an interface is added/removed for WDS STA.
+        */
+       EVENT_WDS_STA_INTERFACE_STATUS,
 };
 
 
@@ -4777,13 +4919,6 @@ union wpa_event_data {
                int preauth;
        } pmkid_candidate;
 
-       /**
-        * struct stkstart - Data for EVENT_STKSTART
-        */
-       struct stkstart {
-               u8 peer[ETH_ALEN];
-       } stkstart;
-
        /**
         * struct tdls - Data for EVENT_TDLS
         */
@@ -5268,6 +5403,37 @@ union wpa_event_data {
                        P2P_LO_STOPPED_REASON_NOT_SUPPORTED,
                } reason_code;
        } p2p_lo_stop;
+
+       /* For EVENT_EXTERNAL_AUTH */
+       struct external_auth external_auth;
+
+       /**
+        * struct sta_opmode - Station's operation mode change event
+        * @addr: The station MAC address
+        * @smps_mode: SMPS mode of the station
+        * @chan_width: Channel width of the station
+        * @rx_nss: RX_NSS of the station
+        *
+        * This is used as data with EVENT_STATION_OPMODE_CHANGED.
+        */
+       struct sta_opmode {
+               const u8 *addr;
+               enum smps_mode smps_mode;
+               enum chan_width chan_width;
+               u8 rx_nss;
+       } sta_opmode;
+
+       /**
+        * struct wds_sta_interface - Data for EVENT_WDS_STA_INTERFACE_STATUS.
+        */
+       struct wds_sta_interface {
+               const u8 *sta_addr;
+               const char *ifname;
+               enum {
+                       INTERFACE_ADDED,
+                       INTERFACE_REMOVED
+               } istatus;
+       } wds_sta_interface;
 };
 
 /**