qcacld-3.0: Handle legacy connect request

Handle legacy connect request and create pe_session
for the same.

Change-Id: Ie1e801c42f90d79d613f9d0233ec9a00a2b0d58b
CRs-Fixed: 2808000
This commit is contained in:
gaurank kathpalia
2020-10-29 12:21:52 +05:30
committed by snandini
parent 2dc00ea324
commit e5fb361504
4 changed files with 297 additions and 2 deletions

View File

@@ -29,7 +29,7 @@
#include "scheduler_api.h"
/**
* struct cm_vdev_join_req - connect req from legacy CM to peer manager
* struct cm_vdev_join_req - connect req from legacy CM to vdev manager
* @vdev_id: vdev id
* @cm_id: Connect manager id
* @force_rsne_override: force the arbitrary rsne received in connect req to be
@@ -49,6 +49,16 @@ struct cm_vdev_join_req {
struct scan_cache_entry *entry;
};
/**
* struct cm_vdev_join_rsp - connect rsp from vdev mgr to connection mgr
* @psoc: psoc object
* @connect_rsp: Connect response to be sent to CM
*/
struct cm_vdev_join_rsp {
struct wlan_objmgr_psoc *psoc;
struct wlan_cm_connect_rsp connect_rsp;
};
/**
* cm_handle_connect_req() - Connection manager ext connect request to start
* vdev and peer assoc state machine
@@ -156,6 +166,25 @@ QDF_STATUS cm_process_join_req(struct scheduler_msg *msg);
*/
QDF_STATUS cm_process_disconnect_req(struct scheduler_msg *msg);
/**
* wlan_cm_send_connect_rsp() - Process vdev join rsp and send to CM
* @msg: scheduler message
*
* Process connect response and send it to CM SM.
*
* Return: QDF_STATUS
*/
QDF_STATUS wlan_cm_send_connect_rsp(struct scheduler_msg *msg);
/**
* wlan_cm_free_connect_rsp() - Function to free all params in join rsp
* @rsp: CM join response
*
* Function to free up all the memory in join rsp.
*
* Return: void
*/
void wlan_cm_free_connect_rsp(struct cm_vdev_join_rsp *rsp);
#endif /* FEATURE_CM_ENABLE */
#endif /* __WLAN_CM_VDEV_API_H__ */

View File

@@ -22,6 +22,7 @@
#include "wlan_cm_vdev_api.h"
#include "wlan_scan_utils_api.h"
#include "wlan_mlme_dbg.h"
#include "wlan_cm_api.h"
void cm_free_join_req(struct cm_vdev_join_req *join_req)
{
@@ -84,6 +85,35 @@ cm_copy_join_params(struct cm_vdev_join_req *join_req,
return QDF_STATUS_SUCCESS;
}
QDF_STATUS wlan_cm_send_connect_rsp(struct scheduler_msg *msg)
{
struct cm_vdev_join_rsp *rsp;
struct wlan_objmgr_vdev *vdev;
QDF_STATUS status;
if (!msg || !msg->bodyptr)
return QDF_STATUS_E_FAILURE;
rsp = msg->bodyptr;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(rsp->psoc,
rsp->connect_rsp.vdev_id,
WLAN_MLME_CM_ID);
if (!vdev) {
mlme_err("vdev_id: %d cm_id 0x%x : vdev not found",
rsp->connect_rsp.vdev_id, rsp->connect_rsp.cm_id);
wlan_cm_free_connect_rsp(rsp);
return QDF_STATUS_E_INVAL;
}
status = wlan_cm_connect_rsp(vdev, &rsp->connect_rsp);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
wlan_cm_free_connect_rsp(rsp);
return status;
}
QDF_STATUS
cm_handle_connect_req(struct wlan_objmgr_vdev *vdev,
struct wlan_cm_vdev_connect_req *req)
@@ -134,3 +164,37 @@ cm_handle_connect_complete(struct wlan_objmgr_vdev *vdev,
{
return QDF_STATUS_SUCCESS;
}
#ifdef WLAN_FEATURE_FILS_SK
static inline void wlan_cm_free_fils_ie(struct wlan_connect_rsp_ies *connect_ie)
{
if (!connect_ie->fils_ie)
return;
if (connect_ie->fils_ie->fils_pmk) {
qdf_mem_zero(connect_ie->fils_ie->fils_pmk,
connect_ie->fils_ie->fils_pmk_len);
qdf_mem_free(connect_ie->fils_ie->fils_pmk);
}
qdf_mem_zero(connect_ie->fils_ie, sizeof(*connect_ie->fils_ie));
qdf_mem_free(connect_ie->fils_ie);
}
#else
static inline void wlan_cm_free_fils_ie(struct wlan_connect_rsp_ies *connect_ie)
{
}
#endif
void wlan_cm_free_connect_rsp(struct cm_vdev_join_rsp *rsp)
{
struct wlan_connect_rsp_ies *connect_ie =
&rsp->connect_rsp.connect_ies;
qdf_mem_free(connect_ie->assoc_req.ptr);
qdf_mem_free(connect_ie->bcn_probe_rsp.ptr);
qdf_mem_free(connect_ie->assoc_rsp.ptr);
qdf_mem_free(connect_ie->ric_resp_ie.ptr);
wlan_cm_free_fils_ie(connect_ie);
qdf_mem_zero(rsp, sizeof(*rsp));
qdf_mem_free(rsp);
}