qcacld-3.0: Send roam abort on peer create failure

Sending deauth on one of the links in MLO connection will result
in removing anchor link in FW and driver shall silently remove the
next link without initiating another deauth. For this reason the
status of MLO peer is set to DISCONN_INITIATED on sending first
deauth frame so that subsequent links do not send again.

The MLO peer context holds the list of all object manager peers for
that MLD connection and failure to add to the context shall result
in termination of connection. Currently the failures are not handled
and the object manager peer is not having any MLO peer context and
this results in sending deauth frame on both the links.

Handle the error of peer create and MLO peer attach on roaming
to abort the roam sync.

Change-Id: I4d5a766b673b36edb44d19065237aa35ff7d5f1d
CRs-Fixed: 3837890
This commit is contained in:
Vinod Kumar Pirla
2024-06-18 20:06:08 +05:30
کامیت شده توسط Ravindra Konda
والد 5df227d97f
کامیت ab3ca03ac2
5فایلهای تغییر یافته به همراه75 افزوده شده و 62 حذف شده

مشاهده پرونده

@@ -564,15 +564,14 @@ QDF_STATUS cm_roam_sync_event_handler_cb(struct wlan_objmgr_vdev *vdev,
!is_multi_link_roam(sync_ind)) {
mlme_err("vdev:%d Ignoring RSI as its already in progress on roamed vdev:%d",
vdev_id, sync_ind->roamed_vdev_id);
status = QDF_STATUS_E_FAILURE;
goto err;
return QDF_STATUS_E_FAILURE;
}
status = cm_fw_roam_sync_start_ind(vdev, sync_ind);
if (QDF_IS_STATUS_ERROR(status)) {
mlme_err("LFR3: vdev:%d CSR Roam synch cb failed", vdev_id);
wlan_cm_free_roam_synch_frame_ind(rso_cfg);
goto err;
return status;
}
/* 24 byte MAC header and 12 byte to ssid IE */
@@ -585,8 +584,7 @@ QDF_STATUS cm_roam_sync_event_handler_cb(struct wlan_objmgr_vdev *vdev,
} else {
mlme_err("LFR3: MLO: vdev:%d Invalid link Beacon Length",
vdev_id);
status = QDF_STATUS_E_FAILURE;
goto err;
return QDF_STATUS_E_FAILURE;
}
} else if (sync_ind->beacon_probe_resp_length >
(QDF_IEEE80211_3ADDR_HDR_LEN + MAC_B_PR_SSID_OFFSET)) {
@@ -613,18 +611,18 @@ QDF_STATUS cm_roam_sync_event_handler_cb(struct wlan_objmgr_vdev *vdev,
} else {
mlme_err("LFR3: vdev:%d Invalid Beacon Length:%d", vdev_id,
sync_ind->beacon_probe_resp_length);
status = QDF_STATUS_E_FAILURE;
goto err;
return QDF_STATUS_E_FAILURE;
}
if (QDF_IS_STATUS_ERROR(cm_roam_pe_sync_callback(sync_ind, vdev_id,
ie_len))) {
mlme_err("LFR3: vdev:%d PE roam synch cb failed", vdev_id);
status = QDF_STATUS_E_BUSY;
goto err;
return QDF_STATUS_E_BUSY;
}
cm_roam_update_vdev(vdev, sync_ind);
status = cm_roam_update_vdev(vdev, sync_ind);
if (QDF_IS_STATUS_ERROR(status))
return status;
/*
* update phy_mode in wma to avoid mismatch in phymode between host and
@@ -640,6 +638,5 @@ QDF_STATUS cm_roam_sync_event_handler_cb(struct wlan_objmgr_vdev *vdev,
vdev_id,
sync_ind);
err:
return status;
}

مشاهده پرونده

@@ -1989,10 +1989,10 @@ cm_roam_vendor_handoff_event_handler(struct wlan_objmgr_psoc *psoc,
* respect to the self sta and the peer after roaming and completes
* the roam synch propagation with respect to WMA layer.
*
* Return: None
* Return: QDF_STATUS
*/
void cm_roam_update_vdev(struct wlan_objmgr_vdev *vdev,
struct roam_offload_synch_ind *sync_ind);
QDF_STATUS cm_roam_update_vdev(struct wlan_objmgr_vdev *vdev,
struct roam_offload_synch_ind *sync_ind);
/**
* cm_roam_pe_sync_callback() - Callback registered at pe, gets invoked when