]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Introduce QCA_NL80211_VENDOR_SUBCMD_DRIVER_DISCONNECT_REASON
authorSachin Ahuja <sahuja@codeaurora.org>
Thu, 13 Feb 2020 12:12:04 +0000 (17:42 +0530)
committerJouni Malinen <jouni@codeaurora.org>
Thu, 13 Feb 2020 16:47:48 +0000 (18:47 +0200)
This acts as an event from the host driver to the user space to notify
the driver specific reason for a disconnection. The host driver
initiates the disconnection for various scenarios (beacon miss, Tx
Failures, gateway unreachability, etc.) and the reason codes from
cfg80211_disconnected() do not carry these driver specific reason codes.
Host drivers should trigger this event immediately prior to triggering
cfg80211_disconnected() to allow the user space to correlate the driver
specific reason code with the disconnect indication.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
src/common/qca-vendor.h

index b26acc98ab587c209e6316d4563836c4d7faceff..6be377e3590e87418253e7fa6be15938191da91c 100644 (file)
@@ -634,6 +634,18 @@ enum qca_radiotap_vendor_ids {
  *     is used to update the information about the station from the driver to
  *     userspace. Uses attributes from enum
  *     qca_wlan_vendor_attr_update_sta_info.
+ *
+ * @QCA_NL80211_VENDOR_SUBCMD_DRIVER_DISCONNECT_REASON: This acts as an event.
+ *     The host driver initiates the disconnection for scenarios such as beacon
+ *     miss, NUD failure, peer kick out, etc. The disconnection indication
+ *     through cfg80211_disconnected() expects the reason codes from enum
+ *     ieee80211_reasoncode which does not signify these various reasons why
+ *     the driver has triggered the disconnection. This event will be used to
+ *     send the driver specific reason codes by the host driver to userspace.
+ *     Host drivers should trigger this event and pass the respective reason
+ *     code immediately prior to triggering cfg80211_disconnected(). The
+ *     attributes used with this event are defined in enum
+ *     qca_wlan_vendor_attr_driver_disconnect_reason.
  */
 enum qca_nl80211_vendor_subcmds {
        QCA_NL80211_VENDOR_SUBCMD_UNSPEC = 0,
@@ -812,6 +824,7 @@ enum qca_nl80211_vendor_subcmds {
        QCA_NL80211_VENDOR_SUBCMD_GET_STA_INFO = 186,
        QCA_NL80211_VENDOR_SUBCMD_GET_SAR_LIMITS_EVENT = 187,
        QCA_NL80211_VENDOR_SUBCMD_UPDATE_STA_INFO = 188,
+       QCA_NL80211_VENDOR_SUBCMD_DRIVER_DISCONNECT_REASON = 189,
 };
 
 enum qca_wlan_vendor_attr {
@@ -8438,4 +8451,103 @@ enum qca_wlan_vendor_attr_update_sta_info {
        QCA_WLAN_VENDOR_ATTR_UPDATE_STA_INFO_AFTER_LAST - 1,
 };
 
+/**
+ * enum qca_disconnect_reason_codes - Specifies driver disconnect reason codes.
+ * Used when the driver triggers the STA to disconnect from the AP.
+ *
+ * @QCA_DISCONNECT_REASON_UNSPECIFIED: The host driver triggered the
+ * disconnection with the AP due to unspecified reasons.
+ *
+ * @QCA_DISCONNECT_REASON_INTERNAL_ROAM_FAILURE: The host driver triggered the
+ * disconnection with the AP due to a roaming failure. This roaming is triggered
+ * internally (host driver/firmware).
+ *
+ * @QCA_DISCONNECT_REASON_EXTERNAL_ROAM_FAILURE: The driver disconnected from
+ * the AP when the user/external triggered roaming fails.
+ *
+ * @QCA_DISCONNECT_REASON_GATEWAY_REACHABILITY_FAILURE: This reason code is used
+ * by the host driver whenever gateway reachability failure is detected and the
+ * driver disconnects with AP.
+ *
+ * @QCA_DISCONNECT_REASON_UNSUPPORTED_CHANNEL_CSA: The driver disconnected from
+ * the AP on a channel switch announcement from it with an unsupported channel.
+ *
+ * @QCA_DISCONNECT_REASON_OPER_CHANNEL_DISABLED_INDOOR: On a concurrent AP start
+ * with indoor channels disabled and if the STA is connected on one of these
+ * disabled channels, the host driver disconnected the STA with this reason
+ * code.
+ *
+ * @QCA_DISCONNECT_REASON_OPER_CHANNEL_USER_DISABLED: Disconnection due to an
+ * explicit request from the user to disable the current operating channel.
+ *
+ * @QCA_DISCONNECT_REASON_DEVICE_RECOVERY: STA disconnected from the AP due to
+ * the internal host driver/firmware recovery.
+ *
+ * @QCA_DISCONNECT_REASON_KEY_TIMEOUT: The driver triggered the disconnection on
+ * a timeout for the key installations from the user space.
+ *
+ * @QCA_DISCONNECT_REASON_OPER_CHANNEL_BAND_CHANGE: The dDriver disconnected the
+ * STA on a band change request from the user space to a different band from the
+ * current operation channel/band.
+ *
+ * @QCA_DISCONNECT_REASON_IFACE_DOWN: The STA disconnected from the AP on an
+ * interface down trigger from the user space.
+ *
+ * @QCA_DISCONNECT_REASON_PEER_XRETRY_FAIL: The host driver disconnected the
+ * STA on getting continuous transmission failures for multiple Data frames.
+ *
+ * @QCA_DISCONNECT_REASON_PEER_INACTIVITY: The STA does a keep alive
+ * notification to the AP by transmitting NULL/G-ARP frames. This disconnection
+ * represents inactivity from AP on such transmissions.
+
+ * @QCA_DISCONNECT_REASON_SA_QUERY_TIMEOUT: This reason code is used on
+ * disconnection when SA Query times out (AP does not respond to SA Query).
+ *
+ * @QCA_DISCONNECT_REASON_BEACON_MISS_FAILURE: The host driver disconnected the
+ * STA on missing the beacons continuously from the AP.
+ *
+ * @QCA_DISCONNECT_REASON_CHANNEL_SWITCH_FAILURE: Disconnection due to STA not
+ * able to move to the channel mentioned by the AP in CSA.
+ *
+ * @QCA_DISCONNECT_REASON_USER_TRIGGERED: User triggered disconnection.
+ */
+enum qca_disconnect_reason_codes {
+       QCA_DISCONNECT_REASON_UNSPECIFIED = 0,
+       QCA_DISCONNECT_REASON_INTERNAL_ROAM_FAILURE = 1,
+       QCA_DISCONNECT_REASON_EXTERNAL_ROAM_FAILURE = 2,
+       QCA_DISCONNECT_REASON_GATEWAY_REACHABILITY_FAILURE = 3,
+       QCA_DISCONNECT_REASON_UNSUPPORTED_CHANNEL_CSA = 4,
+       QCA_DISCONNECT_REASON_OPER_CHANNEL_DISABLED_INDOOR = 5,
+       QCA_DISCONNECT_REASON_OPER_CHANNEL_USER_DISABLED = 6,
+       QCA_DISCONNECT_REASON_DEVICE_RECOVERY = 7,
+       QCA_DISCONNECT_REASON_KEY_TIMEOUT = 8,
+       QCA_DISCONNECT_REASON_OPER_CHANNEL_BAND_CHANGE = 9,
+       QCA_DISCONNECT_REASON_IFACE_DOWN = 10,
+       QCA_DISCONNECT_REASON_PEER_XRETRY_FAIL = 11,
+       QCA_DISCONNECT_REASON_PEER_INACTIVITY = 12,
+       QCA_DISCONNECT_REASON_SA_QUERY_TIMEOUT = 13,
+       QCA_DISCONNECT_REASON_BEACON_MISS_FAILURE = 14,
+       QCA_DISCONNECT_REASON_CHANNEL_SWITCH_FAILURE = 15,
+       QCA_DISCONNECT_REASON_USER_TRIGGERED = 16,
+};
+
+/**
+ * enum qca_wlan_vendor_attr_driver_disconnect_reason - Defines attributes
+ * used by %QCA_NL80211_VENDOR_SUBCMD_DRIVER_DISCONNECT_REASON vendor command.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_DRIVER_DISCONNECT_REASCON_CODE: u32 attribute.
+ * This attribute represents the driver specific reason codes (local
+ * driver/firmware initiated reasons for disconnection) defined
+ * in enum qca_disconnect_reason_codes.
+ */
+enum qca_wlan_vendor_attr_driver_disconnect_reason {
+       QCA_WLAN_VENDOR_ATTR_DRIVER_DISCONNECT_REASON_INVALID = 0,
+       QCA_WLAN_VENDOR_ATTR_DRIVER_DISCONNECT_REASCON_CODE = 1,
+
+       /* keep last */
+       QCA_WLAN_VENDOR_ATTR_DRIVER_DISCONNECT_REASON_AFTER_LAST,
+       QCA_WLAN_VENDOR_ATTR_DRIVER_DISCONNECT_REASON_MAX =
+       QCA_WLAN_VENDOR_ATTR_DRIVER_DISCONNECT_REASON_AFTER_LAST - 1,
+};
+
 #endif /* QCA_VENDOR_H */