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:

کامیت شده توسط
Ravindra Konda

والد
5df227d97f
کامیت
ab3ca03ac2
@@ -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
|
||||
|
مرجع در شماره جدید
Block a user