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

parent
45fa11262a
commit
3493643d20
@@ -257,6 +257,40 @@ void osif_cm_unlink_bss(struct wlan_objmgr_vdev *vdev,
|
|||||||
uint8_t *ssid, uint8_t ssid_len) {}
|
uint8_t *ssid, uint8_t ssid_len) {}
|
||||||
#endif
|
#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_ops: connection manager legacy callbacks
|
||||||
* @osif_cm_connect_comp_cb: callback for connect complete to legacy
|
* @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
|
* actions on napi serialization
|
||||||
* @save_gtk_cb : callback to legacy module to save gtk
|
* @save_gtk_cb : callback to legacy module to save gtk
|
||||||
* @set_hlp_data_cb: callback to legacy module to save hlp data
|
* @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 {
|
struct osif_cm_ops {
|
||||||
osif_cm_connect_comp_cb connect_complete_cb;
|
osif_cm_connect_comp_cb connect_complete_cb;
|
||||||
@@ -281,6 +319,12 @@ struct osif_cm_ops {
|
|||||||
#ifdef WLAN_FEATURE_FILS_SK
|
#ifdef WLAN_FEATURE_FILS_SK
|
||||||
osif_cm_set_hlp_data_cb set_hlp_data_cb;
|
osif_cm_set_hlp_data_cb set_hlp_data_cb;
|
||||||
#endif
|
#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 cfg80211_bss *bss;
|
||||||
struct ieee80211_channel *chan;
|
struct ieee80211_channel *chan;
|
||||||
struct wlan_objmgr_psoc *psoc;
|
struct wlan_objmgr_psoc *psoc;
|
||||||
bool roam_offload = false;
|
|
||||||
|
|
||||||
if (QDF_IS_STATUS_ERROR(rsp->connect_status))
|
if (QDF_IS_STATUS_ERROR(rsp->connect_status))
|
||||||
return;
|
return;
|
||||||
@@ -395,8 +394,6 @@ void osif_indicate_reassoc_results(struct wlan_objmgr_vdev *vdev,
|
|||||||
if (!psoc)
|
if (!psoc)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ucfg_mlme_is_roam_scan_offload_enabled(psoc, &roam_offload);
|
|
||||||
|
|
||||||
chan = ieee80211_get_channel(osif_priv->wdev->wiphy,
|
chan = ieee80211_get_channel(osif_priv->wdev->wiphy,
|
||||||
rsp->freq);
|
rsp->freq);
|
||||||
bss = wlan_cfg80211_get_bss(osif_priv->wdev->wiphy, chan,
|
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);
|
rsp->ssid.length);
|
||||||
if (!bss)
|
if (!bss)
|
||||||
osif_warn("not able to find 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,
|
osif_cm_get_assoc_req_ie_data(&rsp->connect_ies.assoc_req,
|
||||||
&req_len, &req_ie);
|
&req_len, &req_ie);
|
||||||
else
|
else
|
||||||
@@ -418,4 +415,32 @@ void osif_indicate_reassoc_results(struct wlan_objmgr_vdev *vdev,
|
|||||||
|
|
||||||
osif_update_fils_hlp_data(dev, vdev, rsp);
|
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,
|
void osif_indicate_reassoc_results(struct wlan_objmgr_vdev *vdev,
|
||||||
struct vdev_osif_priv *osif_priv,
|
struct vdev_osif_priv *osif_priv,
|
||||||
struct wlan_cm_connect_resp *rsp);
|
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
|
#else
|
||||||
static inline void
|
static inline void
|
||||||
osif_indicate_reassoc_results(struct wlan_objmgr_vdev *vdev,
|
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_STOP_ALL_NETIF_QUEUE_N_CARRIER,
|
||||||
WLAN_CONTROL_PATH);
|
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
|
#else
|
||||||
static inline QDF_STATUS
|
static inline QDF_STATUS
|
||||||
osif_cm_disable_netif_queue(struct wlan_objmgr_vdev *vdev)
|
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);
|
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
|
* osif_cm_roam_cmpl_cb() - Roam sync complete callback
|
||||||
* @vdev: vdev pointer
|
* @vdev: vdev pointer
|
||||||
@@ -386,18 +402,84 @@ osif_cm_roam_cmpl_cb(struct wlan_objmgr_vdev *vdev)
|
|||||||
}
|
}
|
||||||
#endif
|
#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 = {
|
static struct mlme_cm_ops cm_ops = {
|
||||||
.mlme_cm_connect_complete_cb = osif_cm_connect_complete_cb,
|
.mlme_cm_connect_complete_cb = osif_cm_connect_complete_cb,
|
||||||
.mlme_cm_failed_candidate_cb = osif_cm_failed_candidate_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_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_complete_cb = osif_cm_disconnect_complete_cb,
|
||||||
.mlme_cm_disconnect_start_cb = osif_cm_disconnect_start_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
|
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||||
.mlme_cm_roam_start_cb = osif_cm_roam_start_cb,
|
.mlme_cm_roam_start_cb = osif_cm_roam_start_cb,
|
||||||
.mlme_cm_roam_abort_cb = osif_cm_roam_abort_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,
|
.mlme_cm_roam_cmpl_cb = osif_cm_roam_cmpl_cb,
|
||||||
#endif
|
#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
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -113,18 +113,21 @@ cm_send_reassoc_start_fail(struct cnx_mgr *cm_ctx,
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cm_connect_prepare_scan_filter_for_roam(
|
#ifdef CONN_MGR_ADV_FEATURE
|
||||||
struct wlan_objmgr_pdev *pdev,
|
static QDF_STATUS
|
||||||
struct cnx_mgr *cm_ctx, struct cm_roam_req *cm_req,
|
cm_update_roam_scan_filter(
|
||||||
|
struct wlan_objmgr_vdev *vdev, struct cm_roam_req *cm_req,
|
||||||
|
struct scan_filter *filter, bool security_valid_for_6ghz)
|
||||||
|
{
|
||||||
|
return cm_update_advance_roam_scan_filter(vdev, filter);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static QDF_STATUS
|
||||||
|
cm_update_roam_scan_filter(
|
||||||
|
struct wlan_objmgr_vdev *vdev, struct cm_roam_req *cm_req,
|
||||||
struct scan_filter *filter, bool security_valid_for_6ghz)
|
struct scan_filter *filter, bool security_valid_for_6ghz)
|
||||||
{
|
{
|
||||||
uint16_t rsn_caps;
|
uint16_t rsn_caps;
|
||||||
struct wlan_objmgr_vdev *vdev = cm_ctx->vdev;
|
|
||||||
|
|
||||||
if (!qdf_is_macaddr_zero(&cm_req->req.bssid)) {
|
|
||||||
filter->num_of_bssid = 1;
|
|
||||||
qdf_copy_macaddr(&filter->bssid_list[0], &cm_req->req.bssid);
|
|
||||||
}
|
|
||||||
|
|
||||||
filter->num_of_ssid = 1;
|
filter->num_of_ssid = 1;
|
||||||
wlan_vdev_mlme_get_ssid(vdev, filter->ssid_list[0].ssid,
|
wlan_vdev_mlme_get_ssid(vdev, filter->ssid_list[0].ssid,
|
||||||
@@ -139,21 +142,6 @@ static void cm_connect_prepare_scan_filter_for_roam(
|
|||||||
if (!security_valid_for_6ghz)
|
if (!security_valid_for_6ghz)
|
||||||
filter->ignore_6ghz_channel = true;
|
filter->ignore_6ghz_channel = true;
|
||||||
|
|
||||||
filter->authmodeset =
|
|
||||||
wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_AUTH_MODE);
|
|
||||||
|
|
||||||
filter->ucastcipherset =
|
|
||||||
wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_UCAST_CIPHER);
|
|
||||||
|
|
||||||
filter->mcastcipherset =
|
|
||||||
wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_MCAST_CIPHER);
|
|
||||||
|
|
||||||
filter->key_mgmt =
|
|
||||||
wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_KEY_MGMT);
|
|
||||||
|
|
||||||
filter->mgmtcipherset =
|
|
||||||
wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_MGMT_CIPHER);
|
|
||||||
|
|
||||||
if (!QDF_HAS_PARAM(filter->authmodeset, WLAN_CRYPTO_AUTH_WAPI) &&
|
if (!QDF_HAS_PARAM(filter->authmodeset, WLAN_CRYPTO_AUTH_WAPI) &&
|
||||||
!QDF_HAS_PARAM(filter->authmodeset, WLAN_CRYPTO_AUTH_RSNA) &&
|
!QDF_HAS_PARAM(filter->authmodeset, WLAN_CRYPTO_AUTH_RSNA) &&
|
||||||
!QDF_HAS_PARAM(filter->authmodeset, WLAN_CRYPTO_AUTH_WPA)) {
|
!QDF_HAS_PARAM(filter->authmodeset, WLAN_CRYPTO_AUTH_WPA)) {
|
||||||
@@ -169,6 +157,38 @@ static void cm_connect_prepare_scan_filter_for_roam(
|
|||||||
filter->pmf_cap = WLAN_PMF_CAPABLE;
|
filter->pmf_cap = WLAN_PMF_CAPABLE;
|
||||||
else
|
else
|
||||||
filter->pmf_cap = WLAN_PMF_DISABLED;
|
filter->pmf_cap = WLAN_PMF_DISABLED;
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static QDF_STATUS cm_connect_prepare_scan_filter_for_roam(
|
||||||
|
struct cnx_mgr *cm_ctx, struct cm_roam_req *cm_req,
|
||||||
|
struct scan_filter *filter, bool security_valid_for_6ghz)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_vdev *vdev = cm_ctx->vdev;
|
||||||
|
|
||||||
|
if (!qdf_is_macaddr_zero(&cm_req->req.bssid)) {
|
||||||
|
filter->num_of_bssid = 1;
|
||||||
|
qdf_copy_macaddr(&filter->bssid_list[0], &cm_req->req.bssid);
|
||||||
|
}
|
||||||
|
|
||||||
|
filter->authmodeset =
|
||||||
|
wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_AUTH_MODE);
|
||||||
|
|
||||||
|
filter->ucastcipherset =
|
||||||
|
wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_UCAST_CIPHER);
|
||||||
|
|
||||||
|
filter->mcastcipherset =
|
||||||
|
wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_MCAST_CIPHER);
|
||||||
|
|
||||||
|
filter->key_mgmt =
|
||||||
|
wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_KEY_MGMT);
|
||||||
|
|
||||||
|
filter->mgmtcipherset =
|
||||||
|
wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_MGMT_CIPHER);
|
||||||
|
|
||||||
|
return cm_update_roam_scan_filter(vdev, cm_req, filter,
|
||||||
|
security_valid_for_6ghz);
|
||||||
}
|
}
|
||||||
|
|
||||||
static QDF_STATUS cm_roam_get_candidates(struct wlan_objmgr_pdev *pdev,
|
static QDF_STATUS cm_roam_get_candidates(struct wlan_objmgr_pdev *pdev,
|
||||||
@@ -187,7 +207,7 @@ static QDF_STATUS cm_roam_get_candidates(struct wlan_objmgr_pdev *pdev,
|
|||||||
if (!filter)
|
if (!filter)
|
||||||
return QDF_STATUS_E_NOMEM;
|
return QDF_STATUS_E_NOMEM;
|
||||||
|
|
||||||
cm_connect_prepare_scan_filter_for_roam(pdev, cm_ctx, cm_req, filter,
|
cm_connect_prepare_scan_filter_for_roam(cm_ctx, cm_req, filter,
|
||||||
security_valid_for_6ghz);
|
security_valid_for_6ghz);
|
||||||
|
|
||||||
candidate_list = wlan_scan_get_result(pdev, filter);
|
candidate_list = wlan_scan_get_result(pdev, filter);
|
||||||
@@ -222,6 +242,22 @@ static QDF_STATUS cm_roam_get_candidates(struct wlan_objmgr_pdev *pdev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_PREAUTH_ENABLE
|
#ifdef WLAN_FEATURE_PREAUTH_ENABLE
|
||||||
|
QDF_STATUS cm_handle_reassoc_timer(struct cnx_mgr *cm_ctx, wlan_cm_id *cm_id)
|
||||||
|
{
|
||||||
|
struct cm_req *cm_req;
|
||||||
|
|
||||||
|
if (!cm_id)
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
|
||||||
|
cm_req = cm_get_req_by_cm_id(cm_ctx, *cm_id);
|
||||||
|
if (!cm_req)
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
|
||||||
|
return cm_sm_deliver_event_sync(cm_ctx, WLAN_CM_SM_EV_START_REASSOC,
|
||||||
|
sizeof(cm_req->roam_req),
|
||||||
|
&cm_req->roam_req);
|
||||||
|
}
|
||||||
|
|
||||||
static QDF_STATUS cm_host_roam_start(struct cnx_mgr *cm_ctx,
|
static QDF_STATUS cm_host_roam_start(struct cnx_mgr *cm_ctx,
|
||||||
struct cm_req *cm_req)
|
struct cm_req *cm_req)
|
||||||
{
|
{
|
||||||
@@ -245,10 +281,7 @@ static QDF_STATUS cm_host_roam_start(struct cnx_mgr *cm_ctx,
|
|||||||
* all candidate.
|
* all candidate.
|
||||||
*/
|
*/
|
||||||
cm_req->roam_req.cur_candidate = NULL;
|
cm_req->roam_req.cur_candidate = NULL;
|
||||||
|
return cm_host_roam_preauth_start(cm_ctx, cm_req);
|
||||||
/* start preauth process */
|
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
@@ -256,10 +289,8 @@ QDF_STATUS cm_host_roam_start_fail(struct cnx_mgr *cm_ctx,
|
|||||||
struct cm_req *cm_req,
|
struct cm_req *cm_req,
|
||||||
enum wlan_cm_connect_fail_reason reason)
|
enum wlan_cm_connect_fail_reason reason)
|
||||||
{
|
{
|
||||||
/*
|
cm_send_preauth_start_fail(cm_ctx, cm_req->cm_id, reason);
|
||||||
* call API to send WLAN_CM_SM_EV_PREAUTH_FAIL to call preauth complete
|
|
||||||
* and move SM to CONNECTED state
|
|
||||||
*/
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@@ -623,6 +654,8 @@ static QDF_STATUS cm_ser_reassoc_req(struct cnx_mgr *cm_ctx,
|
|||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
uint8_t vdev_id = wlan_vdev_get_id(cm_ctx->vdev);
|
uint8_t vdev_id = wlan_vdev_get_id(cm_ctx->vdev);
|
||||||
|
|
||||||
|
mlme_cm_osif_roam_sync_ind(cm_ctx->vdev);
|
||||||
|
|
||||||
status = wlan_objmgr_vdev_try_get_ref(cm_ctx->vdev, WLAN_MLME_CM_ID);
|
status = wlan_objmgr_vdev_try_get_ref(cm_ctx->vdev, WLAN_MLME_CM_ID);
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
mlme_err(CM_PREFIX_FMT "unable to get reference",
|
mlme_err(CM_PREFIX_FMT "unable to get reference",
|
||||||
|
@@ -124,12 +124,16 @@ struct cm_connect_req {
|
|||||||
* @req: roam req from osif
|
* @req: roam req from osif
|
||||||
* @candidate_list: candidate list
|
* @candidate_list: candidate list
|
||||||
* @cur_candidate: current candidate
|
* @cur_candidate: current candidate
|
||||||
|
* @num_preauth_retry: retry times for the same candidate
|
||||||
*/
|
*/
|
||||||
struct cm_roam_req {
|
struct cm_roam_req {
|
||||||
wlan_cm_id cm_id;
|
wlan_cm_id cm_id;
|
||||||
struct wlan_cm_roam_req req;
|
struct wlan_cm_roam_req req;
|
||||||
qdf_list_t *candidate_list;
|
qdf_list_t *candidate_list;
|
||||||
struct scan_cache_node *cur_candidate;
|
struct scan_cache_node *cur_candidate;
|
||||||
|
#ifdef WLAN_FEATURE_PREAUTH_ENABLE
|
||||||
|
uint8_t num_preauth_retry;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -202,7 +202,91 @@ cm_send_reassoc_start_fail(struct cnx_mgr *cm_ctx,
|
|||||||
enum wlan_cm_connect_fail_reason reason,
|
enum wlan_cm_connect_fail_reason reason,
|
||||||
bool sync);
|
bool sync);
|
||||||
|
|
||||||
#else
|
#ifdef CONN_MGR_ADV_FEATURE
|
||||||
|
/*
|
||||||
|
* cm_update_advance_roam_scan_filter() - fill scan filter for roam
|
||||||
|
* @vdev: vdev
|
||||||
|
* @filter: scan filter
|
||||||
|
*
|
||||||
|
* Return QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS cm_update_advance_roam_scan_filter(
|
||||||
|
struct wlan_objmgr_vdev *vdev, struct scan_filter *filter);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_PREAUTH_ENABLE
|
||||||
|
/*
|
||||||
|
* cm_host_roam_preauth_start() - start preauth process
|
||||||
|
* @cm_ctx: Connection manager context
|
||||||
|
* @cm_req: Struct containing the roam request
|
||||||
|
*
|
||||||
|
* Return QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS cm_host_roam_preauth_start(struct cnx_mgr *cm_ctx,
|
||||||
|
struct cm_req *cm_req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cm_preauth_active() - This API would be called after the preauth
|
||||||
|
* request gets activated in serialization.
|
||||||
|
* @cm_ctx: connection manager context
|
||||||
|
* @cm_id: Connection mgr ID assigned to this preauth request.
|
||||||
|
*
|
||||||
|
* Return: QDF status
|
||||||
|
*/
|
||||||
|
QDF_STATUS cm_preauth_active(struct cnx_mgr *cm_ctx, wlan_cm_id *cm_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cm_preauth_done_resp() - This API would be called when preauth
|
||||||
|
* response msg handling
|
||||||
|
* @cm_ctx: connection manager context
|
||||||
|
* @cm_id: Connection mgr ID assigned to this preauth request.
|
||||||
|
*
|
||||||
|
* Return: void
|
||||||
|
*/
|
||||||
|
void cm_preauth_done_resp(struct cnx_mgr *cm_ctx, struct wlan_preauth_rsp *rsp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cm_preauth_success() - Preauth is successfully completed
|
||||||
|
* @cm_ctx: connection manager context
|
||||||
|
* @rsp: Preauth resp
|
||||||
|
*
|
||||||
|
* Return: void
|
||||||
|
*/
|
||||||
|
void cm_preauth_success(struct cnx_mgr *cm_ctx, struct wlan_preauth_rsp *rsp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cm_preauth_fail() - This API would be called after the preauth
|
||||||
|
* request gets failed.
|
||||||
|
* @cm_ctx: connection manager context
|
||||||
|
* @preauth_fail_rsp: preauth fail response
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
|
*/
|
||||||
|
void cm_preauth_fail(struct cnx_mgr *cm_ctx,
|
||||||
|
struct wlan_cm_preauth_fail *preauth_fail_rsp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cm_send_preauth_start_fail() - This API would be called after send preauth
|
||||||
|
* request failed.
|
||||||
|
* @cm_ctx: connection manager context
|
||||||
|
* @cm_id: connection mgr ID assigned to this preauth request.
|
||||||
|
* @reason: connect fail reason
|
||||||
|
*
|
||||||
|
* Return: QDF status
|
||||||
|
*/
|
||||||
|
QDF_STATUS cm_send_preauth_start_fail(struct cnx_mgr *cm_ctx, wlan_cm_id cm_id,
|
||||||
|
enum wlan_cm_connect_fail_reason reason);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cm_handle_reassoc_timer() - handle ressoc timer expiry
|
||||||
|
* @cm_ctx: connection manager context
|
||||||
|
* @cm_id: connection mgr ID assigned to this preauth request.
|
||||||
|
*
|
||||||
|
* Return: QDF status
|
||||||
|
*/
|
||||||
|
QDF_STATUS cm_handle_reassoc_timer(struct cnx_mgr *cm_ctx, wlan_cm_id *cm_id);
|
||||||
|
#endif /* WLAN_FEATURE_PREAUTH_ENABLE */
|
||||||
|
#else /* WLAN_FEATURE_HOST_ROAM */
|
||||||
|
|
||||||
#ifdef WLAN_POLICY_MGR_ENABLE
|
#ifdef WLAN_POLICY_MGR_ENABLE
|
||||||
static inline
|
static inline
|
||||||
@@ -231,7 +315,7 @@ QDF_STATUS cm_roam_bss_peer_create_rsp(struct wlan_objmgr_vdev *vdev,
|
|||||||
{
|
{
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* WLAN_FEATURE_HOST_ROAM */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cm_check_and_prepare_roam_req() - Initiate roam request
|
* cm_check_and_prepare_roam_req() - Initiate roam request
|
||||||
|
@@ -177,6 +177,47 @@ void cm_subst_preauth_exit(void *ctx)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_PREAUTH_ENABLE
|
||||||
|
static bool
|
||||||
|
cm_handle_preauth_event(struct cnx_mgr *cm_ctx, uint16_t event,
|
||||||
|
uint16_t data_len, void *data)
|
||||||
|
{
|
||||||
|
bool event_handled = true;
|
||||||
|
|
||||||
|
switch (event) {
|
||||||
|
case WLAN_CM_SM_EV_PREAUTH_ACTIVE:
|
||||||
|
if (!cm_check_cmid_match_list_head(cm_ctx, data)) {
|
||||||
|
event_handled = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
cm_preauth_active(cm_ctx, data);
|
||||||
|
break;
|
||||||
|
case WLAN_CM_SM_EV_PREAUTH_RESP:
|
||||||
|
cm_preauth_done_resp(cm_ctx, data);
|
||||||
|
break;
|
||||||
|
case WLAN_CM_SM_EV_PREAUTH_DONE:
|
||||||
|
cm_sm_transition_to(cm_ctx, WLAN_CM_SS_REASSOC);
|
||||||
|
cm_preauth_success(cm_ctx, data);
|
||||||
|
break;
|
||||||
|
case WLAN_CM_SM_EV_PREAUTH_FAIL:
|
||||||
|
cm_sm_transition_to(cm_ctx, WLAN_CM_S_CONNECTED);
|
||||||
|
cm_preauth_fail(cm_ctx, data);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
event_handled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return event_handled;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline bool
|
||||||
|
cm_handle_preauth_event(struct cnx_mgr *cm_ctx, uint16_t event,
|
||||||
|
uint16_t data_len, void *data)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool cm_subst_preauth_event(void *ctx, uint16_t event,
|
bool cm_subst_preauth_event(void *ctx, uint16_t event,
|
||||||
uint16_t data_len, void *data)
|
uint16_t data_len, void *data)
|
||||||
{
|
{
|
||||||
@@ -201,7 +242,8 @@ bool cm_subst_preauth_event(void *ctx, uint16_t event,
|
|||||||
cm_reassoc_complete(cm_ctx, data);
|
cm_reassoc_complete(cm_ctx, data);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
event_handled = false;
|
event_handled = cm_handle_preauth_event(cm_ctx, event,
|
||||||
|
data_len, data);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,6 +266,35 @@ void cm_subst_reassoc_exit(void *ctx)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_PREAUTH_ENABLE
|
||||||
|
static bool
|
||||||
|
cm_handle_reassoc_event(struct cnx_mgr *cm_ctx, uint16_t event,
|
||||||
|
uint16_t data_len, void *data)
|
||||||
|
{
|
||||||
|
bool event_handled = true;
|
||||||
|
QDF_STATUS status;
|
||||||
|
|
||||||
|
switch (event) {
|
||||||
|
case WLAN_CM_SM_EV_REASSOC_TIMER:
|
||||||
|
status = cm_handle_reassoc_timer(cm_ctx, data);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
|
event_handled = false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
event_handled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return event_handled;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline bool
|
||||||
|
cm_handle_reassoc_event(struct cnx_mgr *cm_ctx, uint16_t event,
|
||||||
|
uint16_t data_len, void *data)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool cm_subst_reassoc_event(void *ctx, uint16_t event,
|
bool cm_subst_reassoc_event(void *ctx, uint16_t event,
|
||||||
uint16_t data_len, void *data)
|
uint16_t data_len, void *data)
|
||||||
{
|
{
|
||||||
@@ -278,7 +349,8 @@ bool cm_subst_reassoc_event(void *ctx, uint16_t event,
|
|||||||
cm_handle_reassoc_hw_mode_change(cm_ctx, data, event);
|
cm_handle_reassoc_hw_mode_change(cm_ctx, data, event);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
event_handled = false;
|
event_handled = cm_handle_reassoc_event(cm_ctx, event,
|
||||||
|
data_len, data);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1009,6 +1009,9 @@ static const char *cm_sm_event_names[] = {
|
|||||||
"EV_ROAM_INVOKE",
|
"EV_ROAM_INVOKE",
|
||||||
"EV_ROAM_ABORT",
|
"EV_ROAM_ABORT",
|
||||||
"EV_ROAM_DONE",
|
"EV_ROAM_DONE",
|
||||||
|
"EV_PREAUTH_ACTIVE",
|
||||||
|
"EV_PREAUTH_RESP",
|
||||||
|
"EV_REASSOC_TIMER",
|
||||||
};
|
};
|
||||||
|
|
||||||
enum wlan_cm_sm_state cm_get_state(struct cnx_mgr *cm_ctx)
|
enum wlan_cm_sm_state cm_get_state(struct cnx_mgr *cm_ctx)
|
||||||
|
@@ -64,6 +64,9 @@
|
|||||||
* @WLAN_CM_SM_EV_ROAM_INVOKE: Host initiated LFR3/FW roam req
|
* @WLAN_CM_SM_EV_ROAM_INVOKE: Host initiated LFR3/FW roam req
|
||||||
* @WLAN_CM_SM_EV_ROAM_ABORT: Roam abort
|
* @WLAN_CM_SM_EV_ROAM_ABORT: Roam abort
|
||||||
* @WLAN_CM_SM_EV_ROAM_DONE: Roam done
|
* @WLAN_CM_SM_EV_ROAM_DONE: Roam done
|
||||||
|
* @WLAN_CM_SM_EV_PREAUTH_ACTIVE: Preauth active
|
||||||
|
* @WLAN_CM_SM_EV_PREAUTH_RESP: Preauth response
|
||||||
|
* @WLAN_CM_SM_EV_REASSOC_TIMER: Reassoc timer expired
|
||||||
* @WLAN_CM_SM_EV_MAX: Max event
|
* @WLAN_CM_SM_EV_MAX: Max event
|
||||||
*/
|
*/
|
||||||
enum wlan_cm_sm_evt {
|
enum wlan_cm_sm_evt {
|
||||||
@@ -100,6 +103,9 @@ enum wlan_cm_sm_evt {
|
|||||||
WLAN_CM_SM_EV_ROAM_INVOKE = 30,
|
WLAN_CM_SM_EV_ROAM_INVOKE = 30,
|
||||||
WLAN_CM_SM_EV_ROAM_ABORT = 31,
|
WLAN_CM_SM_EV_ROAM_ABORT = 31,
|
||||||
WLAN_CM_SM_EV_ROAM_DONE = 32,
|
WLAN_CM_SM_EV_ROAM_DONE = 32,
|
||||||
|
WLAN_CM_SM_EV_PREAUTH_ACTIVE = 33,
|
||||||
|
WLAN_CM_SM_EV_PREAUTH_RESP = 34,
|
||||||
|
WLAN_CM_SM_EV_REASSOC_TIMER = 35,
|
||||||
WLAN_CM_SM_EV_MAX,
|
WLAN_CM_SM_EV_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -491,6 +491,58 @@ struct wlan_cm_connect_resp {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_PREAUTH_ENABLE
|
||||||
|
/**
|
||||||
|
* struct wlan_preauth_req - preauth request
|
||||||
|
* @vdev_id: vdev id
|
||||||
|
* @entry: scan entry for the candidate
|
||||||
|
*/
|
||||||
|
struct wlan_preauth_req {
|
||||||
|
uint8_t vdev_id;
|
||||||
|
struct scan_cache_entry *entry;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct wlan_cm_preauth_fail - connection manager preauth fail
|
||||||
|
* @cm_id: connection id
|
||||||
|
* @reason: connect fail reason
|
||||||
|
*/
|
||||||
|
struct wlan_cm_preauth_fail {
|
||||||
|
wlan_cm_id cm_id;
|
||||||
|
enum wlan_cm_connect_fail_reason reason;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define CM_MAX_FTIE_SIZE 384
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct wlan_preauth_rsp - preauth response
|
||||||
|
* @psoc: psoc object
|
||||||
|
* @vdev_id: vdev id
|
||||||
|
* @cm_id: connection manager ID
|
||||||
|
* @pre_auth_bssid: bssid to preauth to
|
||||||
|
* @status: QDF_STATUS
|
||||||
|
* @ft_ie_length: ft ie length
|
||||||
|
* @ft_ie: ft ie
|
||||||
|
* @ric_ies_length: ric ies length
|
||||||
|
* @ric_ies: ric ies
|
||||||
|
* @timestamp: time stamp
|
||||||
|
*/
|
||||||
|
struct wlan_preauth_rsp {
|
||||||
|
struct wlan_objmgr_psoc *psoc;
|
||||||
|
uint8_t vdev_id;
|
||||||
|
wlan_cm_id cm_id;
|
||||||
|
struct qdf_mac_addr pre_auth_bssid;
|
||||||
|
QDF_STATUS status;
|
||||||
|
uint16_t ft_ie_length;
|
||||||
|
uint8_t ft_ie[CM_MAX_FTIE_SIZE];
|
||||||
|
uint16_t ric_ies_length;
|
||||||
|
uint8_t ric_ies[CM_MAX_FTIE_SIZE];
|
||||||
|
#ifdef FEATURE_WLAN_ESE
|
||||||
|
uint32_t timestamp[2];
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct wlan_cm_discon_rsp - disconnect resp from VDEV mgr and will be sent to
|
* struct wlan_cm_discon_rsp - disconnect resp from VDEV mgr and will be sent to
|
||||||
* OSIF
|
* OSIF
|
||||||
|
@@ -52,17 +52,31 @@
|
|||||||
* @mlme_cm_disconnect_start_cb: Disconnect start callback
|
* @mlme_cm_disconnect_start_cb: Disconnect start callback
|
||||||
* @vdev: vdev pointer
|
* @vdev: vdev pointer
|
||||||
*
|
*
|
||||||
|
* @mlme_cm_roam_sync_cb: Roam sync callback
|
||||||
|
* @vdev: vdev pointer
|
||||||
|
*
|
||||||
|
* @mlme_cm_pmksa_candidate_notify_cb: Roam pmksa candidate notify callback
|
||||||
|
* @vdev: vdev pointer
|
||||||
|
* @bssid: bssid
|
||||||
|
* @index: index
|
||||||
|
* @preauth: preauth flag
|
||||||
|
*
|
||||||
* @mlme_cm_roam_start_cb: Roam start callback
|
* @mlme_cm_roam_start_cb: Roam start callback
|
||||||
* @vdev: vdev pointer
|
* @vdev: vdev pointer
|
||||||
*
|
*
|
||||||
* @mlme_cm_roam_abort_cb: Roam abort callback
|
* @mlme_cm_roam_abort_cb: Roam abort callback
|
||||||
* @vdev: vdev pointer
|
* @vdev: vdev pointer
|
||||||
*
|
*
|
||||||
* @mlme_cm_roam_sync_cb: Roam sync callback
|
|
||||||
* @vdev: vdev pointer
|
|
||||||
*
|
|
||||||
* @mlme_cm_roam_cmpl_cb: Roam sync complete cb
|
* @mlme_cm_roam_cmpl_cb: Roam sync complete cb
|
||||||
* @vdev: vdev pointer
|
* @vdev: vdev pointer
|
||||||
|
*
|
||||||
|
* @mlme_cm_ft_preauth_cmpl_cb: Roam ft preauth complete cb
|
||||||
|
* @vdev: vdev pointer
|
||||||
|
* @rsp: preauth response pointer
|
||||||
|
*
|
||||||
|
* @mlme_cm_cckm_preauth_cmpl_cb: Roam cckm preauth complete cb
|
||||||
|
* @vdev: vdev pointer
|
||||||
|
* @rsp: preauth response pointer
|
||||||
*/
|
*/
|
||||||
struct mlme_cm_ops {
|
struct mlme_cm_ops {
|
||||||
QDF_STATUS (*mlme_cm_connect_complete_cb)(
|
QDF_STATUS (*mlme_cm_connect_complete_cb)(
|
||||||
@@ -80,12 +94,28 @@ struct mlme_cm_ops {
|
|||||||
struct wlan_cm_discon_rsp *rsp);
|
struct wlan_cm_discon_rsp *rsp);
|
||||||
QDF_STATUS (*mlme_cm_disconnect_start_cb)(
|
QDF_STATUS (*mlme_cm_disconnect_start_cb)(
|
||||||
struct wlan_objmgr_vdev *vdev);
|
struct wlan_objmgr_vdev *vdev);
|
||||||
|
#ifdef CONN_MGR_ADV_FEATURE
|
||||||
|
QDF_STATUS (*mlme_cm_roam_sync_cb)(struct wlan_objmgr_vdev *vdev);
|
||||||
|
QDF_STATUS (*mlme_cm_pmksa_candidate_notify_cb)(
|
||||||
|
struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *bssid,
|
||||||
|
int index, bool preauth);
|
||||||
|
#endif
|
||||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||||
QDF_STATUS (*mlme_cm_roam_start_cb)(struct wlan_objmgr_vdev *vdev);
|
QDF_STATUS (*mlme_cm_roam_start_cb)(struct wlan_objmgr_vdev *vdev);
|
||||||
QDF_STATUS (*mlme_cm_roam_abort_cb)(struct wlan_objmgr_vdev *vdev);
|
QDF_STATUS (*mlme_cm_roam_abort_cb)(struct wlan_objmgr_vdev *vdev);
|
||||||
QDF_STATUS (*mlme_cm_roam_sync_cb)(struct wlan_objmgr_vdev *vdev);
|
|
||||||
QDF_STATUS (*mlme_cm_roam_cmpl_cb)(struct wlan_objmgr_vdev *vdev);
|
QDF_STATUS (*mlme_cm_roam_cmpl_cb)(struct wlan_objmgr_vdev *vdev);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef WLAN_FEATURE_PREAUTH_ENABLE
|
||||||
|
QDF_STATUS (*mlme_cm_ft_preauth_cmpl_cb)(
|
||||||
|
struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct wlan_preauth_rsp *rsp);
|
||||||
|
#ifdef FEATURE_WLAN_ESE
|
||||||
|
QDF_STATUS (*mlme_cm_cckm_preauth_cmpl_cb)(
|
||||||
|
struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct wlan_preauth_rsp *rsp);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -612,6 +642,35 @@ mlme_cm_osif_disconnect_complete(struct wlan_objmgr_vdev *vdev,
|
|||||||
*/
|
*/
|
||||||
QDF_STATUS mlme_cm_osif_disconnect_start_ind(struct wlan_objmgr_vdev *vdev);
|
QDF_STATUS mlme_cm_osif_disconnect_start_ind(struct wlan_objmgr_vdev *vdev);
|
||||||
|
|
||||||
|
#ifdef CONN_MGR_ADV_FEATURE
|
||||||
|
/**
|
||||||
|
* mlme_cm_osif_roam_sync_ind() - osif Roam sync indication
|
||||||
|
* @vdev: vdev pointer
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS mlme_cm_osif_roam_sync_ind(struct wlan_objmgr_vdev *vdev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* mlme_cm_osif_pmksa_candidate_notify() - osif roam pmksa candidate notify
|
||||||
|
* @vdev: vdev pointer
|
||||||
|
* @bssid: bssid
|
||||||
|
* @index: index
|
||||||
|
* @preauth: preauth flag
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS mlme_cm_osif_pmksa_candidate_notify(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *bssid,
|
||||||
|
int index, bool preauth);
|
||||||
|
#else
|
||||||
|
static inline
|
||||||
|
QDF_STATUS mlme_cm_osif_roam_sync_ind(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||||
/**
|
/**
|
||||||
* mlme_cm_osif_roam_start_ind() - osif Roam start indication
|
* mlme_cm_osif_roam_start_ind() - osif Roam start indication
|
||||||
@@ -629,14 +688,6 @@ QDF_STATUS mlme_cm_osif_roam_start_ind(struct wlan_objmgr_vdev *vdev);
|
|||||||
*/
|
*/
|
||||||
QDF_STATUS mlme_cm_osif_roam_abort_ind(struct wlan_objmgr_vdev *vdev);
|
QDF_STATUS mlme_cm_osif_roam_abort_ind(struct wlan_objmgr_vdev *vdev);
|
||||||
|
|
||||||
/**
|
|
||||||
* mlme_cm_osif_roam_sync_ind() - osif Roam sync indication
|
|
||||||
* @vdev: vdev pointer
|
|
||||||
*
|
|
||||||
* Return: QDF_STATUS
|
|
||||||
*/
|
|
||||||
QDF_STATUS mlme_cm_osif_roam_sync_ind(struct wlan_objmgr_vdev *vdev);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mlme_cm_osif_roam_complete() - osif Roam sync complete callback
|
* mlme_cm_osif_roam_complete() - osif Roam sync complete callback
|
||||||
* @vdev: vdev pointer
|
* @vdev: vdev pointer
|
||||||
@@ -646,6 +697,38 @@ QDF_STATUS mlme_cm_osif_roam_sync_ind(struct wlan_objmgr_vdev *vdev);
|
|||||||
QDF_STATUS mlme_cm_osif_roam_complete(struct wlan_objmgr_vdev *vdev);
|
QDF_STATUS mlme_cm_osif_roam_complete(struct wlan_objmgr_vdev *vdev);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_PREAUTH_ENABLE
|
||||||
|
/**
|
||||||
|
* mlme_cm_osif_ft_preauth_complete() - osif roam ft preauth complete callback
|
||||||
|
* @vdev: vdev pointer
|
||||||
|
* @rsp: preauth response pointer
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS
|
||||||
|
mlme_cm_osif_ft_preauth_complete(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct wlan_preauth_rsp *rsp);
|
||||||
|
#ifdef FEATURE_WLAN_ESE
|
||||||
|
/**
|
||||||
|
* mlme_cm_osif_cckm_preauth_complete() - osif cckm preauth complete callback
|
||||||
|
* @vdev: vdev pointer
|
||||||
|
* @rsp: preauth response pointer
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS
|
||||||
|
mlme_cm_osif_cckm_preauth_complete(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct wlan_preauth_rsp *rsp);
|
||||||
|
#else
|
||||||
|
static inline QDF_STATUS
|
||||||
|
mlme_cm_osif_cckm_preauth_complete(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct wlan_preauth_rsp *rsp)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif /* FEATURE_WLAN_ESE */
|
||||||
|
#endif /* WLAN_FEATURE_PREAUTH_ENABLE */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* typedef osif_cm_get_global_ops_cb() - Callback to get connection manager
|
* typedef osif_cm_get_global_ops_cb() - Callback to get connection manager
|
||||||
* global ops
|
* global ops
|
||||||
|
@@ -461,6 +461,33 @@ QDF_STATUS mlme_cm_osif_disconnect_start_ind(struct wlan_objmgr_vdev *vdev)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONN_MGR_ADV_FEATURE
|
||||||
|
QDF_STATUS mlme_cm_osif_roam_sync_ind(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
if (glbl_cm_ops &&
|
||||||
|
glbl_cm_ops->mlme_cm_roam_sync_cb)
|
||||||
|
ret = glbl_cm_ops->mlme_cm_roam_sync_cb(vdev);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS mlme_cm_osif_pmksa_candidate_notify(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *bssid,
|
||||||
|
int index, bool preauth)
|
||||||
|
{
|
||||||
|
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
if (glbl_cm_ops &&
|
||||||
|
glbl_cm_ops->mlme_cm_pmksa_candidate_notify_cb)
|
||||||
|
ret = glbl_cm_ops->mlme_cm_pmksa_candidate_notify_cb(
|
||||||
|
vdev, bssid, index, preauth);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||||
QDF_STATUS mlme_cm_osif_roam_start_ind(struct wlan_objmgr_vdev *vdev)
|
QDF_STATUS mlme_cm_osif_roam_start_ind(struct wlan_objmgr_vdev *vdev)
|
||||||
{
|
{
|
||||||
@@ -484,17 +511,6 @@ QDF_STATUS mlme_cm_osif_roam_abort_ind(struct wlan_objmgr_vdev *vdev)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
QDF_STATUS mlme_cm_osif_roam_sync_ind(struct wlan_objmgr_vdev *vdev)
|
|
||||||
{
|
|
||||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
|
||||||
|
|
||||||
if (glbl_cm_ops &&
|
|
||||||
glbl_cm_ops->mlme_cm_roam_sync_cb)
|
|
||||||
ret = glbl_cm_ops->mlme_cm_roam_sync_cb(vdev);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
mlme_cm_osif_roam_complete(struct wlan_objmgr_vdev *vdev)
|
mlme_cm_osif_roam_complete(struct wlan_objmgr_vdev *vdev)
|
||||||
{
|
{
|
||||||
@@ -506,8 +522,38 @@ mlme_cm_osif_roam_complete(struct wlan_objmgr_vdev *vdev)
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_PREAUTH_ENABLE
|
||||||
|
QDF_STATUS
|
||||||
|
mlme_cm_osif_ft_preauth_complete(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct wlan_preauth_rsp *rsp)
|
||||||
|
{
|
||||||
|
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
if (glbl_cm_ops &&
|
||||||
|
glbl_cm_ops->mlme_cm_ft_preauth_cmpl_cb)
|
||||||
|
ret = glbl_cm_ops->mlme_cm_ft_preauth_cmpl_cb(vdev, rsp);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef FEATURE_WLAN_ESE
|
||||||
|
QDF_STATUS
|
||||||
|
mlme_cm_osif_cckm_preauth_complete(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct wlan_preauth_rsp *rsp)
|
||||||
|
{
|
||||||
|
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
if (glbl_cm_ops &&
|
||||||
|
glbl_cm_ops->mlme_cm_cckm_preauth_cmpl_cb)
|
||||||
|
ret = glbl_cm_ops->mlme_cm_cckm_preauth_cmpl_cb(vdev, rsp);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
void mlme_set_osif_cm_cb(osif_cm_get_global_ops_cb osif_cm_ops)
|
void mlme_set_osif_cm_cb(osif_cm_get_global_ops_cb osif_cm_ops)
|
||||||
{
|
{
|
||||||
glbl_cm_ops_cb = osif_cm_ops;
|
glbl_cm_ops_cb = osif_cm_ops;
|
||||||
|
Reference in New Issue
Block a user