qcacmn: Pass mld address and assoc link info when creating bss peer

MLO sta needs mld mac and assoc link information to create bss peer
Get mld address and assoc link info from connection manager and pass
it to bss peer creation.

Change-Id: I147ac8365f3c99c6231df589ac17d39122d57362
CRs-Fixed: 2987496
This commit is contained in:
bings
2021-07-08 16:15:25 +08:00
committed by Madan Koyyalamudi
parent d746469888
commit 4ea9496323
4 changed files with 66 additions and 7 deletions

View File

@@ -485,6 +485,34 @@ static void cm_update_vdev_mlme_macaddr(struct cnx_mgr *cm_ctx,
{
}
#endif
/**
* cm_get_bss_peer_mld_addr() - get bss peer mld mac address
* @req: pointer to cm_connect_req
*
* Return: mld mac address
*/
static struct qdf_mac_addr *cm_get_bss_peer_mld_addr(struct cm_connect_req *req)
{
if (req && req->cur_candidate && req->cur_candidate->entry &&
req->cur_candidate->entry->ml_info)
return &req->cur_candidate->entry->ml_info->mld_mac_addr;
else
return NULL;
}
/**
* cm_bss_peer_is_assoc_peer() - is the bss peer to be created assoc peer or not
* @req: pointer to cm_connect_req
*
* Return: true if the bss peer to be created is assoc peer
*/
static bool cm_bss_peer_is_assoc_peer(struct cm_connect_req *req)
{
if (req)
return !req->req.is_non_assoc_link;
return false;
}
#else
static inline
void cm_set_vdev_link_id(struct cnx_mgr *cm_ctx,
@@ -495,6 +523,16 @@ static void cm_update_vdev_mlme_macaddr(struct cnx_mgr *cm_ctx,
struct cm_connect_req *req)
{
}
static struct qdf_mac_addr *cm_get_bss_peer_mld_addr(struct cm_connect_req *req)
{
return NULL;
}
static bool cm_bss_peer_is_assoc_peer(struct cm_connect_req *req)
{
return false;
}
#endif
static void cm_create_bss_peer(struct cnx_mgr *cm_ctx,
@@ -502,10 +540,23 @@ static void cm_create_bss_peer(struct cnx_mgr *cm_ctx,
{
QDF_STATUS status;
struct qdf_mac_addr *bssid;
struct qdf_mac_addr *mld_mac;
bool is_assoc_link = false;
if (!cm_ctx) {
mlme_err("invalid cm_ctx");
return;
}
if (!req) {
mlme_err("invalid req");
return;
}
bssid = &req->cur_candidate->entry->bssid;
cm_set_vdev_link_id(cm_ctx, req);
status = mlme_cm_bss_peer_create_req(cm_ctx->vdev, bssid);
mld_mac = cm_get_bss_peer_mld_addr(req);
is_assoc_link = cm_bss_peer_is_assoc_peer(req);
status = mlme_cm_bss_peer_create_req(cm_ctx->vdev, bssid,
mld_mac, is_assoc_link);
if (QDF_IS_STATUS_ERROR(status)) {
struct wlan_cm_connect_resp *resp;
uint8_t vdev_id = wlan_vdev_get_id(cm_ctx->vdev);

View File

@@ -403,7 +403,7 @@ QDF_STATUS cm_reassoc_disconnect_complete(struct cnx_mgr *cm_ctx,
mlme_cm_disconnect_complete_ind(cm_ctx->vdev, resp);
bssid = &cm_req->roam_req.cur_candidate->entry->bssid;
status = mlme_cm_bss_peer_create_req(cm_ctx->vdev, bssid);
status = mlme_cm_bss_peer_create_req(cm_ctx->vdev, bssid, NULL, false);
if (QDF_IS_STATUS_ERROR(status)) {
mlme_err(CM_PREFIX_FMT "Peer create request failed",
CM_PREFIX_REF(vdev_id, cm_id));

View File

@@ -205,7 +205,9 @@ struct mlme_ext_ops {
struct wlan_cm_vdev_connect_req *req);
QDF_STATUS (*mlme_cm_ext_bss_peer_create_req_cb)(
struct wlan_objmgr_vdev *vdev,
struct qdf_mac_addr *peer_mac);
struct qdf_mac_addr *peer_mac,
struct qdf_mac_addr *mld_mac,
bool is_assoc_link);
QDF_STATUS (*mlme_cm_ext_connect_req_cb)(struct wlan_objmgr_vdev *vdev,
struct wlan_cm_vdev_connect_req *req);
QDF_STATUS (*mlme_cm_ext_connect_complete_ind_cb)(
@@ -476,11 +478,15 @@ QDF_STATUS mlme_cm_bss_select_ind(struct wlan_objmgr_vdev *vdev,
* request
* @vdev: VDEV object
* @peer_mac: Peer mac address
* @mld_mac: mld mac address
* @is_assoc_link: assoc happens on this link or not
*
* Return: QDF_STATUS
*/
QDF_STATUS mlme_cm_bss_peer_create_req(struct wlan_objmgr_vdev *vdev,
struct qdf_mac_addr *peer_mac);
struct qdf_mac_addr *peer_mac,
struct qdf_mac_addr *mld_mac,
bool is_assoc_link);
/**
* mlme_cm_connect_req() - Connection manager ext connect request to start vdev

View File

@@ -281,13 +281,15 @@ QDF_STATUS mlme_cm_bss_select_ind(struct wlan_objmgr_vdev *vdev,
}
QDF_STATUS mlme_cm_bss_peer_create_req(struct wlan_objmgr_vdev *vdev,
struct qdf_mac_addr *peer_mac)
struct qdf_mac_addr *peer_mac,
struct qdf_mac_addr *mld_mac,
bool is_assoc_link)
{
QDF_STATUS ret = QDF_STATUS_SUCCESS;
if ((glbl_ops) && glbl_ops->mlme_cm_ext_bss_peer_create_req_cb)
ret = glbl_ops->mlme_cm_ext_bss_peer_create_req_cb(vdev,
peer_mac);
ret = glbl_ops->mlme_cm_ext_bss_peer_create_req_cb(
vdev, peer_mac, mld_mac, is_assoc_link);
return ret;
}