|
@@ -1,6 +1,6 @@
|
|
|
/*
|
|
|
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
|
|
|
- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
|
+ * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
|
*
|
|
|
* Permission to use, copy, modify, and/or distribute this software for any
|
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
@@ -818,6 +818,7 @@ mlo_update_connect_req_chan_info(struct wlan_cm_connect_req *req)
|
|
|
* @ml_parnter_info: ml partner link info
|
|
|
* @link_info: link info on which connect req will be sent
|
|
|
* @ssid: ssid to connect
|
|
|
+ * @mld_addr: MLD address for connect request.
|
|
|
*
|
|
|
* Return: none
|
|
|
*/
|
|
@@ -826,7 +827,8 @@ static void
|
|
|
mlo_prepare_and_send_connect(struct wlan_objmgr_vdev *vdev,
|
|
|
struct mlo_partner_info ml_parnter_info,
|
|
|
struct mlo_link_info link_info,
|
|
|
- struct wlan_ssid ssid)
|
|
|
+ struct wlan_ssid ssid,
|
|
|
+ struct qdf_mac_addr *mld_addr)
|
|
|
{
|
|
|
struct wlan_cm_connect_req req = {0};
|
|
|
struct wlan_mlo_dev_context *mlo_dev_ctx = vdev->mlo_dev_ctx;
|
|
@@ -861,8 +863,11 @@ mlo_prepare_and_send_connect(struct wlan_objmgr_vdev *vdev,
|
|
|
&ml_parnter_info,
|
|
|
sizeof(struct mlo_partner_info));
|
|
|
|
|
|
+ req.vdev_id = wlan_vdev_get_id(vdev);
|
|
|
req.ssid.length = ssid.length;
|
|
|
qdf_mem_copy(&req.ssid.ssid, &ssid.ssid, ssid.length);
|
|
|
+ if (mld_addr)
|
|
|
+ qdf_copy_macaddr(&req.mld_addr, mld_addr);
|
|
|
|
|
|
if (sta_ctx->copied_conn_req)
|
|
|
mlo_allocate_and_copy_ies(&req, sta_ctx->copied_conn_req);
|
|
@@ -900,10 +905,12 @@ mlo_send_link_connect(struct wlan_objmgr_vdev *vdev,
|
|
|
struct mlo_partner_info *ml_parnter_info)
|
|
|
{
|
|
|
/* Create the secondary interface, Send keys if the last link */
|
|
|
+ QDF_STATUS status;
|
|
|
uint8_t i, partner_idx = 0;
|
|
|
struct wlan_ssid ssid = {0};
|
|
|
struct wlan_objmgr_vdev *wlan_vdev_list[WLAN_UMAC_MLO_MAX_VDEVS];
|
|
|
uint16_t vdev_count = 0;
|
|
|
+ struct qdf_mac_addr mld_addr;
|
|
|
|
|
|
mlo_debug("Sending link connect on partner interface");
|
|
|
wlan_vdev_mlme_get_ssid(
|
|
@@ -918,6 +925,10 @@ mlo_send_link_connect(struct wlan_objmgr_vdev *vdev,
|
|
|
if(wlan_vdev_mlme_is_mlo_link_vdev(vdev))
|
|
|
return;
|
|
|
|
|
|
+ status = wlan_vdev_get_bss_peer_mld_mac(vdev, &mld_addr);
|
|
|
+ if (QDF_IS_STATUS_ERROR(status))
|
|
|
+ return;
|
|
|
+
|
|
|
mlo_sta_get_vdev_list(vdev, &vdev_count, wlan_vdev_list);
|
|
|
for (i = 0; i < vdev_count; i++) {
|
|
|
if (wlan_vdev_list[i] == vdev) {
|
|
@@ -936,7 +947,7 @@ mlo_send_link_connect(struct wlan_objmgr_vdev *vdev,
|
|
|
wlan_vdev_list[i],
|
|
|
*ml_parnter_info,
|
|
|
ml_parnter_info->partner_link_info[partner_idx],
|
|
|
- ssid);
|
|
|
+ ssid, &mld_addr);
|
|
|
mlo_update_connected_links(wlan_vdev_list[i], 1);
|
|
|
partner_idx++;
|
|
|
mlo_release_vdev_ref(wlan_vdev_list[i]);
|
|
@@ -984,7 +995,7 @@ mlo_send_link_connect(struct wlan_objmgr_vdev *vdev,
|
|
|
mlo_dev_ctx->wlan_vdev_list[i],
|
|
|
*ml_parnter_info,
|
|
|
ml_parnter_info->partner_link_info[j],
|
|
|
- ssid);
|
|
|
+ ssid, NULL);
|
|
|
mlo_dev_lock_release(mlo_dev_ctx);
|
|
|
return;
|
|
|
}
|