diff --git a/umac/mlme/connection_mgr/core/src/wlan_cm_connect.c b/umac/mlme/connection_mgr/core/src/wlan_cm_connect.c index 7497458034..1e0d015049 100644 --- a/umac/mlme/connection_mgr/core/src/wlan_cm_connect.c +++ b/umac/mlme/connection_mgr/core/src/wlan_cm_connect.c @@ -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); diff --git a/umac/mlme/connection_mgr/core/src/wlan_cm_host_roam.c b/umac/mlme/connection_mgr/core/src/wlan_cm_host_roam.c index 3a36e9b226..95d892bb16 100644 --- a/umac/mlme/connection_mgr/core/src/wlan_cm_host_roam.c +++ b/umac/mlme/connection_mgr/core/src/wlan_cm_host_roam.c @@ -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)); diff --git a/umac/mlme/include/wlan_mlme_cmn.h b/umac/mlme/include/wlan_mlme_cmn.h index cbcc071995..bc7c550fb7 100644 --- a/umac/mlme/include/wlan_mlme_cmn.h +++ b/umac/mlme/include/wlan_mlme_cmn.h @@ -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 diff --git a/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c b/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c index 686c10a562..176c3cbfa7 100644 --- a/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c +++ b/umac/mlme/mlme_objmgr/dispatcher/src/wlan_cmn_mlme_main.c @@ -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; }