qcacmn: Add host roam preauth handling code for connection manager
Add host roam preauth handling code for connection manager Change-Id: Ie2ee72bb33fe5706349d1eb13208a0cfcd15aacf CRs-Fixed: 2954506
This commit is contained in:

committed by
Madan Koyyalamudi

szülő
45fa11262a
commit
3493643d20
@@ -257,6 +257,40 @@ void osif_cm_unlink_bss(struct wlan_objmgr_vdev *vdev,
|
||||
uint8_t *ssid, uint8_t ssid_len) {}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_FEATURE_PREAUTH_ENABLE
|
||||
/**
|
||||
* typedef osif_cm_ft_preauth_complete_cb: Callback to send fast
|
||||
* transition event
|
||||
* @vdev: vdev pointer
|
||||
* @rsp: preauth response pointer
|
||||
*
|
||||
* This callback indicates legacy modules to send fast transition event
|
||||
*
|
||||
* Context: Any context.
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
typedef QDF_STATUS
|
||||
(*osif_cm_ft_preauth_complete_cb)(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_preauth_rsp *rsp);
|
||||
#ifdef FEATURE_WLAN_ESE
|
||||
/**
|
||||
* typedef osif_cm_cckm_preauth_complete_cb: Callback to send cckm preauth
|
||||
* indication to the supplicant via wireless custom event
|
||||
* @vdev: vdev pointer
|
||||
* @rsp: preauth response pointer
|
||||
*
|
||||
* This callback indicates legacy modules to send cckm preauth indication
|
||||
* to the supplicant via wireless custom event
|
||||
*
|
||||
* Context: Any context.
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
typedef QDF_STATUS
|
||||
(*osif_cm_cckm_preauth_complete_cb)(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_preauth_rsp *rsp);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
* osif_cm_ops: connection manager legacy callbacks
|
||||
* @osif_cm_connect_comp_cb: callback for connect complete to legacy
|
||||
@@ -269,6 +303,10 @@ void osif_cm_unlink_bss(struct wlan_objmgr_vdev *vdev,
|
||||
* actions on napi serialization
|
||||
* @save_gtk_cb : callback to legacy module to save gtk
|
||||
* @set_hlp_data_cb: callback to legacy module to save hlp data
|
||||
* @ft_preauth_complete_cb: callback to legacy module to send fast
|
||||
* transition event
|
||||
* @cckm_preauth_complete_cb: callback to legacy module to send cckm
|
||||
* preauth indication to the supplicant via wireless custom event.
|
||||
*/
|
||||
struct osif_cm_ops {
|
||||
osif_cm_connect_comp_cb connect_complete_cb;
|
||||
@@ -281,6 +319,12 @@ struct osif_cm_ops {
|
||||
#ifdef WLAN_FEATURE_FILS_SK
|
||||
osif_cm_set_hlp_data_cb set_hlp_data_cb;
|
||||
#endif
|
||||
#ifdef WLAN_FEATURE_PREAUTH_ENABLE
|
||||
osif_cm_ft_preauth_complete_cb ft_preauth_complete_cb;
|
||||
#ifdef FEATURE_WLAN_ESE
|
||||
osif_cm_cckm_preauth_complete_cb cckm_preauth_complete_cb;
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -386,7 +386,6 @@ void osif_indicate_reassoc_results(struct wlan_objmgr_vdev *vdev,
|
||||
struct cfg80211_bss *bss;
|
||||
struct ieee80211_channel *chan;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
bool roam_offload = false;
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(rsp->connect_status))
|
||||
return;
|
||||
@@ -395,8 +394,6 @@ void osif_indicate_reassoc_results(struct wlan_objmgr_vdev *vdev,
|
||||
if (!psoc)
|
||||
return;
|
||||
|
||||
ucfg_mlme_is_roam_scan_offload_enabled(psoc, &roam_offload);
|
||||
|
||||
chan = ieee80211_get_channel(osif_priv->wdev->wiphy,
|
||||
rsp->freq);
|
||||
bss = wlan_cfg80211_get_bss(osif_priv->wdev->wiphy, chan,
|
||||
@@ -404,7 +401,7 @@ void osif_indicate_reassoc_results(struct wlan_objmgr_vdev *vdev,
|
||||
rsp->ssid.length);
|
||||
if (!bss)
|
||||
osif_warn("not able to find bss");
|
||||
if (!roam_offload || rsp->is_ft)
|
||||
if (rsp->is_ft)
|
||||
osif_cm_get_assoc_req_ie_data(&rsp->connect_ies.assoc_req,
|
||||
&req_len, &req_ie);
|
||||
else
|
||||
@@ -418,4 +415,32 @@ void osif_indicate_reassoc_results(struct wlan_objmgr_vdev *vdev,
|
||||
|
||||
osif_update_fils_hlp_data(dev, vdev, rsp);
|
||||
}
|
||||
#endif
|
||||
|
||||
QDF_STATUS
|
||||
osif_pmksa_candidate_notify(struct wlan_objmgr_vdev *vdev,
|
||||
struct qdf_mac_addr *bssid,
|
||||
int index, bool preauth)
|
||||
{
|
||||
struct vdev_osif_priv *osif_priv = wlan_vdev_get_ospriv(vdev);
|
||||
struct wireless_dev *wdev;
|
||||
|
||||
if (!osif_priv) {
|
||||
osif_err("Invalid vdev osif priv");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
wdev = osif_priv->wdev;
|
||||
if (!wdev) {
|
||||
osif_err("wdev is null");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
osif_debug("is going to notify supplicant of:");
|
||||
osif_info(QDF_MAC_ADDR_FMT, QDF_MAC_ADDR_REF(bssid->bytes));
|
||||
|
||||
cfg80211_pmksa_candidate_notify(wdev->netdev, index,
|
||||
bssid->bytes,
|
||||
preauth, GFP_KERNEL);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif /* CONN_MGR_ADV_FEATURE */
|
||||
|
@@ -97,6 +97,20 @@ QDF_STATUS osif_connect_handler(struct wlan_objmgr_vdev *vdev,
|
||||
void osif_indicate_reassoc_results(struct wlan_objmgr_vdev *vdev,
|
||||
struct vdev_osif_priv *osif_priv,
|
||||
struct wlan_cm_connect_resp *rsp);
|
||||
|
||||
/**
|
||||
* @osif_pmksa_candidate_notify_cb: Roam pmksa candidate notify callback
|
||||
* @vdev: vdev pointer
|
||||
* @bssid: bssid
|
||||
* @index: index
|
||||
* @preauth: preauth flag
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
osif_pmksa_candidate_notify(struct wlan_objmgr_vdev *vdev,
|
||||
struct qdf_mac_addr *bssid,
|
||||
int index, bool preauth);
|
||||
#else
|
||||
static inline void
|
||||
osif_indicate_reassoc_results(struct wlan_objmgr_vdev *vdev,
|
||||
|
@@ -289,6 +289,41 @@ osif_cm_disable_netif_queue(struct wlan_objmgr_vdev *vdev)
|
||||
WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER,
|
||||
WLAN_CONTROL_PATH);
|
||||
}
|
||||
|
||||
/**
|
||||
* osif_cm_roam_sync_cb() - Roam sync callback
|
||||
* @vdev: vdev pointer
|
||||
*
|
||||
* This callback indicates os_if that roam sync ind received
|
||||
* so that os_if can stop all the activity on this connection
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
osif_cm_roam_sync_cb(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
osif_cm_napi_serialize(true);
|
||||
return osif_cm_netif_queue_ind(vdev,
|
||||
WLAN_STOP_ALL_NETIF_QUEUE,
|
||||
WLAN_CONTROL_PATH);
|
||||
}
|
||||
|
||||
/**
|
||||
* @osif_pmksa_candidate_notify_cb: Roam pmksa candidate notify callback
|
||||
* @vdev: vdev pointer
|
||||
* @bssid: bssid
|
||||
* @index: index
|
||||
* @preauth: preauth flag
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
osif_pmksa_candidate_notify_cb(struct wlan_objmgr_vdev *vdev,
|
||||
struct qdf_mac_addr *bssid,
|
||||
int index, bool preauth)
|
||||
{
|
||||
return osif_pmksa_candidate_notify(vdev, bssid, index, preauth);
|
||||
}
|
||||
#else
|
||||
static inline QDF_STATUS
|
||||
osif_cm_disable_netif_queue(struct wlan_objmgr_vdev *vdev)
|
||||
@@ -349,25 +384,6 @@ osif_cm_roam_abort_cb(struct wlan_objmgr_vdev *vdev)
|
||||
WLAN_CONTROL_PATH);
|
||||
}
|
||||
|
||||
/**
|
||||
* osif_cm_roam_sync_cb() - Roam sync callback
|
||||
* @vdev: vdev pointer
|
||||
*
|
||||
* This callback indicates os_if that roam sync ind received
|
||||
* so that os_if can stop all the activity on this connection
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
|
||||
static QDF_STATUS
|
||||
osif_cm_roam_sync_cb(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
osif_cm_napi_serialize(true);
|
||||
return osif_cm_netif_queue_ind(vdev,
|
||||
WLAN_STOP_ALL_NETIF_QUEUE,
|
||||
WLAN_CONTROL_PATH);
|
||||
}
|
||||
|
||||
/**
|
||||
* osif_cm_roam_cmpl_cb() - Roam sync complete callback
|
||||
* @vdev: vdev pointer
|
||||
@@ -386,18 +402,84 @@ osif_cm_roam_cmpl_cb(struct wlan_objmgr_vdev *vdev)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_FEATURE_PREAUTH_ENABLE
|
||||
/**
|
||||
* osif_cm_ft_preauth_cmpl_cb() - Roam ft preauth complete callback
|
||||
* @vdev: vdev pointer
|
||||
* @rsp: preauth response
|
||||
*
|
||||
* This callback indicates os_if that roam ft preauth is complete
|
||||
* so that os_if can send fast transition event
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
|
||||
static QDF_STATUS
|
||||
osif_cm_ft_preauth_cmpl_cb(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_preauth_rsp *rsp)
|
||||
{
|
||||
osif_cm_ft_preauth_complete_cb cb = NULL;
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if (osif_cm_legacy_ops)
|
||||
cb = osif_cm_legacy_ops->ft_preauth_complete_cb;
|
||||
if (cb)
|
||||
ret = cb(vdev, rsp);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef FEATURE_WLAN_ESE
|
||||
/**
|
||||
* osif_cm_cckm_preauth_cmpl_cb() - Roam cckm preauth complete callback
|
||||
* @vdev: vdev pointer
|
||||
* @rsp: preauth response
|
||||
*
|
||||
* This callback indicates os_if that roam cckm preauth is complete
|
||||
* so that os_if can send cckm preauth indication to the supplicant
|
||||
* via wireless custom event.
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
|
||||
static QDF_STATUS
|
||||
osif_cm_cckm_preauth_cmpl_cb(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_preauth_rsp *rsp)
|
||||
{
|
||||
osif_cm_cckm_preauth_complete_cb cb = NULL;
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
|
||||
if (osif_cm_legacy_ops)
|
||||
cb = osif_cm_legacy_ops->cckm_preauth_complete_cb;
|
||||
if (cb)
|
||||
ret = cb(vdev, rsp);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static struct mlme_cm_ops cm_ops = {
|
||||
.mlme_cm_connect_complete_cb = osif_cm_connect_complete_cb,
|
||||
.mlme_cm_failed_candidate_cb = osif_cm_failed_candidate_cb,
|
||||
.mlme_cm_update_id_and_src_cb = osif_cm_update_id_and_src_cb,
|
||||
.mlme_cm_disconnect_complete_cb = osif_cm_disconnect_complete_cb,
|
||||
.mlme_cm_disconnect_start_cb = osif_cm_disconnect_start_cb,
|
||||
#ifdef CONN_MGR_ADV_FEATURE
|
||||
.mlme_cm_roam_sync_cb = osif_cm_roam_sync_cb,
|
||||
.mlme_cm_pmksa_candidate_notify_cb = osif_pmksa_candidate_notify_cb,
|
||||
#endif
|
||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||
.mlme_cm_roam_start_cb = osif_cm_roam_start_cb,
|
||||
.mlme_cm_roam_abort_cb = osif_cm_roam_abort_cb,
|
||||
.mlme_cm_roam_sync_cb = osif_cm_roam_sync_cb,
|
||||
.mlme_cm_roam_cmpl_cb = osif_cm_roam_cmpl_cb,
|
||||
#endif
|
||||
#ifdef WLAN_FEATURE_PREAUTH_ENABLE
|
||||
.mlme_cm_ft_preauth_cmpl_cb = osif_cm_ft_preauth_cmpl_cb,
|
||||
#ifdef FEATURE_WLAN_ESE
|
||||
.mlme_cm_cckm_preauth_cmpl_cb = osif_cm_cckm_preauth_cmpl_cb,
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user