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:
Huashan Qu
2021-03-31 14:32:17 +08:00
committed by Madan Koyyalamudi
szülő 45fa11262a
commit 3493643d20
13 fájl változott, egészen pontosan 634 új sor hozzáadva és 86 régi sor törölve

Fájl megtekintése

@@ -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
};
/**

Fájl megtekintése

@@ -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 */

Fájl megtekintése

@@ -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,

Fájl megtekintése

@@ -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
};
/**