diff --git a/components/nan/dispatcher/src/nan_ucfg_api.c b/components/nan/dispatcher/src/nan_ucfg_api.c index 3dda88bfe9c4..35abaf83b953 100644 --- a/components/nan/dispatcher/src/nan_ucfg_api.c +++ b/components/nan/dispatcher/src/nan_ucfg_api.c @@ -1130,12 +1130,30 @@ ucfg_nan_is_vdev_creation_supp_by_host(struct nan_psoc_priv_obj *nan_obj) return nan_obj->cfg_param.nan_separate_iface_support; } +static void ucfg_nan_cleanup_all_ndps(struct wlan_objmgr_psoc *psoc) +{ + QDF_STATUS status; + uint32_t ndi_count, vdev_id, i; + + ndi_count = policy_mgr_mode_specific_connection_count(psoc, PM_NDI_MODE, + NULL); + for (i = 0; i < ndi_count; i++) { + vdev_id = policy_mgr_mode_specific_vdev_id(psoc, PM_NDI_MODE); + status = ucfg_nan_disable_ndi(psoc, vdev_id); + if (status == QDF_STATUS_E_TIMEOUT) + policy_mgr_decr_session_set_pcl(psoc, QDF_NDI_MODE, + vdev_id); + } +} + QDF_STATUS ucfg_disable_nan_discovery(struct wlan_objmgr_psoc *psoc, uint8_t *data, uint32_t data_len) { struct nan_disable_req *nan_req; QDF_STATUS status; + ucfg_nan_cleanup_all_ndps(psoc); + nan_req = qdf_mem_malloc(sizeof(*nan_req) + data_len); if (!nan_req) return -ENOMEM;