cfg80211: Allow cfg80211_connect_result() errors to be distinguished
[cascardo/linux.git] / include / net / cfg80211.h
index 6392167..537f010 100644 (file)
@@ -2367,19 +2367,23 @@ struct cfg80211_qos_map {
  *     (invoked with the wireless_dev mutex held)
  *
  * @connect: Connect to the ESS with the specified parameters. When connected,
- *     call cfg80211_connect_result() with status code %WLAN_STATUS_SUCCESS.
- *     If the connection fails for some reason, call cfg80211_connect_result()
- *     with the status from the AP. The driver is allowed to roam to other
- *     BSSes within the ESS when the other BSS matches the connect parameters.
- *     When such roaming is initiated by the driver, the driver is expected to
- *     verify that the target matches the configured security parameters and
- *     to use Reassociation Request frame instead of Association Request frame.
- *     The connect function can also be used to request the driver to perform
- *     a specific roam when connected to an ESS. In that case, the prev_bssid
+ *     call cfg80211_connect_result()/cfg80211_connect_bss() with status code
+ *     %WLAN_STATUS_SUCCESS. If the connection fails for some reason, call
+ *     cfg80211_connect_result()/cfg80211_connect_bss() with the status code
+ *     from the AP or cfg80211_connect_timeout() if no frame with status code
+ *     was received.
+ *     The driver is allowed to roam to other BSSes within the ESS when the
+ *     other BSS matches the connect parameters. When such roaming is initiated
+ *     by the driver, the driver is expected to verify that the target matches
+ *     the configured security parameters and to use Reassociation Request
+ *     frame instead of Association Request frame.
+ *     The connect function can also be used to request the driver to perform a
+ *     specific roam when connected to an ESS. In that case, the prev_bssid
  *     parameter is set to the BSSID of the currently associated BSS as an
- *     indication of requesting reassociation. In both the driver-initiated and
- *     new connect() call initiated roaming cases, the result of roaming is
- *     indicated with a call to cfg80211_roamed() or cfg80211_roamed_bss().
+ *     indication of requesting reassociation.
+ *     In both the driver-initiated and new connect() call initiated roaming
+ *     cases, the result of roaming is indicated with a call to
+ *     cfg80211_roamed() or cfg80211_roamed_bss().
  *     (invoked with the wireless_dev mutex held)
  * @disconnect: Disconnect from the BSS/ESS.
  *     (invoked with the wireless_dev mutex held)
@@ -4680,7 +4684,7 @@ static inline void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp)
 void cfg80211_connect_bss(struct net_device *dev, const u8 *bssid,
                          struct cfg80211_bss *bss, const u8 *req_ie,
                          size_t req_ie_len, const u8 *resp_ie,
-                         size_t resp_ie_len, u16 status, gfp_t gfp);
+                         size_t resp_ie_len, int status, gfp_t gfp);
 
 /**
  * cfg80211_connect_result - notify cfg80211 of connection result
@@ -4709,6 +4713,29 @@ cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
                             resp_ie_len, status, gfp);
 }
 
+/**
+ * cfg80211_connect_timeout - notify cfg80211 of connection timeout
+ *
+ * @dev: network device
+ * @bssid: the BSSID of the AP
+ * @req_ie: association request IEs (maybe be %NULL)
+ * @req_ie_len: association request IEs length
+ * @gfp: allocation flags
+ *
+ * It should be called by the underlying driver whenever connect() has failed
+ * in a sequence where no explicit authentication/association rejection was
+ * received from the AP. This could happen, e.g., due to not being able to send
+ * out the Authentication or Association Request frame or timing out while
+ * waiting for the response.
+ */
+static inline void
+cfg80211_connect_timeout(struct net_device *dev, const u8 *bssid,
+                        const u8 *req_ie, size_t req_ie_len, gfp_t gfp)
+{
+       cfg80211_connect_bss(dev, bssid, NULL, req_ie, req_ie_len, NULL, 0, -1,
+                            gfp);
+}
+
 /**
  * cfg80211_roamed - notify cfg80211 of roaming
  *