diff --git a/core/hdd/src/wlan_hdd_nan_datapath.c b/core/hdd/src/wlan_hdd_nan_datapath.c index 4dcc69db31..d83302cc7d 100644 --- a/core/hdd/src/wlan_hdd_nan_datapath.c +++ b/core/hdd/src/wlan_hdd_nan_datapath.c @@ -411,14 +411,9 @@ static int __wlan_hdd_cfg80211_process_ndp_cmd(struct wiphy *wiphy, hdd_err_rl("NAN datapath is not enabled"); return -EPERM; } - /* NAN data path coexists only with STA interface */ - if (false == hdd_is_ndp_allowed(hdd_ctx)) { - hdd_err_rl("Unsupported concurrency for NAN datapath"); - return -EPERM; - } - return os_if_nan_process_ndp_cmd(hdd_ctx->psoc, - data, data_len); + return os_if_nan_process_ndp_cmd(hdd_ctx->psoc, data, data_len, + hdd_is_ndp_allowed(hdd_ctx)); } /** diff --git a/os_if/nan/inc/os_if_nan.h b/os_if/nan/inc/os_if_nan.h index 7a74c19d35..8d2c83ebcb 100644 --- a/os_if/nan/inc/os_if_nan.h +++ b/os_if/nan/inc/os_if_nan.h @@ -43,11 +43,14 @@ struct ndi_find_vdev_filter { * @psoc: pointer to psoc object * @data: request data. contains vendor cmd tlvs * @data_len: length of data + * @is_ndp_allowed: Indicates whether to allow NDP creation. + * NDI creation is always allowed. * * Return: status of operation */ int os_if_nan_process_ndp_cmd(struct wlan_objmgr_psoc *psoc, - const void *data, int data_len); + const void *data, int data_len, + bool is_ndp_allowed); /** * os_if_nan_register_hdd_callbacks: os_if api to register hdd callbacks diff --git a/os_if/nan/src/os_if_nan.c b/os_if/nan/src/os_if_nan.c index 419020790a..2adb5d7e2b 100644 --- a/os_if/nan/src/os_if_nan.c +++ b/os_if/nan/src/os_if_nan.c @@ -1015,7 +1015,8 @@ static int os_if_nan_process_ndp_end_req(struct wlan_objmgr_psoc *psoc, } int os_if_nan_process_ndp_cmd(struct wlan_objmgr_psoc *psoc, - const void *data, int data_len) + const void *data, int data_len, + bool is_ndp_allowed) { uint32_t ndp_cmd_type; uint16_t transaction_id; @@ -1058,10 +1059,22 @@ int os_if_nan_process_ndp_cmd(struct wlan_objmgr_psoc *psoc, case QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_DELETE: return os_if_nan_process_ndi_delete(psoc, tb); case QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_REQUEST: + if (!is_ndp_allowed) { + osif_err("Unsupported concurrency for NAN datapath"); + return -EOPNOTSUPP; + } return os_if_nan_process_ndp_initiator_req(psoc, tb); case QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_REQUEST: + if (!is_ndp_allowed) { + osif_err("Unsupported concurrency for NAN datapath"); + return -EOPNOTSUPP; + } return os_if_nan_process_ndp_responder_req(psoc, tb); case QCA_WLAN_VENDOR_ATTR_NDP_END_REQUEST: + if (!is_ndp_allowed) { + osif_err("Unsupported concurrency for NAN datapath"); + return -EOPNOTSUPP; + } return os_if_nan_process_ndp_end_req(psoc, tb); default: osif_err("Unrecognized NDP vendor cmd %d", ndp_cmd_type);