diff options
| author | Naveen Rawat <naveenrawat@codeaurora.org> | 2017-03-14 16:46:29 -0700 |
|---|---|---|
| committer | Sandeep Puligilla <spuligil@codeaurora.org> | 2017-03-22 18:48:58 -0700 |
| commit | caccfda20affe284318ff7d46a725146b8ee0d0c (patch) | |
| tree | 84a4d59807aa7bd65c0aaf19cb1314f9788807dc | |
| parent | 41562919366d450c1741dad5207f0562ad4a2438 (diff) | |
qcacld-3.0: Add Passphrase and Service Name parameter to NDP cmds
Add Passphrase and Service Name to NDP initiator request and NDP
responder request.
Change-Id: I6a189747760a15393fcbac9dc382847fef789ab1
CRs-Fixed: 2022066
| -rw-r--r-- | core/hdd/src/wlan_hdd_nan_datapath.c | 105 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_nan_datapath.h | 8 | ||||
| -rw-r--r-- | core/mac/inc/sir_api.h | 26 | ||||
| -rw-r--r-- | core/sme/src/nan/nan_datapath_api.c | 69 | ||||
| -rw-r--r-- | core/wma/src/wma_nan_datapath.c | 65 |
5 files changed, 234 insertions, 39 deletions
diff --git a/core/hdd/src/wlan_hdd_nan_datapath.c b/core/hdd/src/wlan_hdd_nan_datapath.c index 98372ece75f5..6c7bfdafbcaf 100644 --- a/core/hdd/src/wlan_hdd_nan_datapath.c +++ b/core/hdd/src/wlan_hdd_nan_datapath.c @@ -66,6 +66,10 @@ qca_wlan_vendor_ndp_policy[QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_MAX + 1] = { .len = NDP_PMK_LEN }, [QCA_WLAN_VENDOR_ATTR_NDP_SCID] = { .type = NLA_BINARY, .len = NDP_SCID_BUF_LEN }, + [QCA_WLAN_VENDOR_ATTR_NDP_PASSPHRASE] = { .type = NLA_BINARY, + .len = NAN_PASSPHRASE_MAX_LEN }, + [QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_NAME] = { .type = NLA_BINARY, + .len = NAN_MAX_SERVICE_NAME_LEN }, }; /** @@ -450,6 +454,65 @@ static int hdd_ndi_delete_req_handler(hdd_context_t *hdd_ctx, } /** + * ndp_parse_security_params() - parse vendor attributes for security params. + * @tb: parsed NL attribute list + * @ncs_sk_type: out parameter to populate ncs_sk_type + * @pmk: out parameter to populate pmk + * @passphrase: out parameter to populate passphrase + * @service_name: out parameter to populate service_name + * + * Return: 0 on success or error code on failure + */ +static int ndp_parse_security_params(struct nlattr **tb, + uint32_t *ncs_sk_type, struct ndp_pmk *pmk, + struct ndp_passphrase *passphrase, + struct ndp_service_name *service_name) +{ + if (!ncs_sk_type || !pmk || !passphrase || !service_name) { + hdd_err("out buffers for one ore more parameters is null"); + return -EINVAL; + } + + if (tb[QCA_WLAN_VENDOR_ATTR_NDP_NCS_SK_TYPE]) { + *ncs_sk_type = + nla_get_u32(tb[QCA_WLAN_VENDOR_ATTR_NDP_NCS_SK_TYPE]); + } + + if (tb[QCA_WLAN_VENDOR_ATTR_NDP_PMK]) { + pmk->pmk_len = + nla_len(tb[QCA_WLAN_VENDOR_ATTR_NDP_PMK]); + pmk->pmk = + nla_data(tb[QCA_WLAN_VENDOR_ATTR_NDP_PMK]); + hdd_err("pmk len: %d", pmk->pmk_len); + QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, + pmk->pmk, pmk->pmk_len); + } + + if (tb[QCA_WLAN_VENDOR_ATTR_NDP_PASSPHRASE]) { + passphrase->passphrase_len = + nla_len(tb[QCA_WLAN_VENDOR_ATTR_NDP_PASSPHRASE]); + passphrase->passphrase = + nla_data(tb[QCA_WLAN_VENDOR_ATTR_NDP_PASSPHRASE]); + hdd_err("passphrase len: %d", passphrase->passphrase_len); + QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, + passphrase->passphrase, passphrase->passphrase_len); + } + + if (tb[QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_NAME]) { + service_name->service_name_len = + nla_len(tb[QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_NAME]); + service_name->service_name = + nla_data(tb[QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_NAME]); + hdd_err("service_name len: %d", service_name->service_name_len); + QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR, + service_name->service_name, + service_name->service_name_len); + } + + return 0; +} + +/** * hdd_ndp_initiator_req_handler() - NDP initiator request handler * @hdd_ctx: hdd context * @tb: parsed NL attribute list @@ -465,6 +528,8 @@ static int hdd_ndi_delete_req_handler(hdd_context_t *hdd_ctx, * QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_QOS - optional * QCA_WLAN_VENDOR_ATTR_NDP_PMK - optional * QCA_WLAN_VENDOR_ATTR_NDP_NCS_SK_TYPE - optional + * QCA_WLAN_VENDOR_ATTR_NDP_PASSPHRASE - optional + * QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_NAME - optional * * Return: 0 on success or error code on failure */ @@ -564,26 +629,12 @@ static int hdd_ndp_initiator_req_handler(hdd_context_t *hdd_ctx, nla_get_u32(tb[QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_QOS]); } - if (tb[QCA_WLAN_VENDOR_ATTR_NDP_NCS_SK_TYPE] && - !tb[QCA_WLAN_VENDOR_ATTR_NDP_PMK]) { - hdd_err("PMK cannot be absent when CSID is present."); + if (ndp_parse_security_params(tb, &req.ncs_sk_type, &req.pmk, + &req.passphrase, &req.service_name)) { + hdd_err("inconsistent security params present in request."); return -EINVAL; } - if (tb[QCA_WLAN_VENDOR_ATTR_NDP_PMK]) { - req.pmk.pmk = nla_data(tb[QCA_WLAN_VENDOR_ATTR_NDP_PMK]); - req.pmk.pmk_len = nla_len(tb[QCA_WLAN_VENDOR_ATTR_NDP_PMK]); - QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_DEBUG, - req.pmk.pmk, req.pmk.pmk_len); - } - - if (tb[QCA_WLAN_VENDOR_ATTR_NDP_NCS_SK_TYPE]) { - req.ncs_sk_type = - nla_get_u32(tb[QCA_WLAN_VENDOR_ATTR_NDP_NCS_SK_TYPE]); - - } - hdd_info("vdev_id: %d, transaction_id: %d, channel: %d, service_instance_id: %d, ndp_app_info_len: %d, csid: %d, peer_discovery_mac_addr: %pM", req.vdev_id, req.transaction_id, req.channel, req.service_instance_id, req.ndp_info.ndp_app_info_len, @@ -704,26 +755,12 @@ static int hdd_ndp_responder_req_handler(hdd_context_t *hdd_ctx, hdd_info("NDP config data is unavailable"); } - if (tb[QCA_WLAN_VENDOR_ATTR_NDP_NCS_SK_TYPE] && - !tb[QCA_WLAN_VENDOR_ATTR_NDP_PMK]) { - hdd_err("PMK cannot be absent when CSID is present."); + if (ndp_parse_security_params(tb, &req.ncs_sk_type, &req.pmk, + &req.passphrase, &req.service_name)) { + hdd_err("inconsistent security params present in request."); return -EINVAL; } - if (tb[QCA_WLAN_VENDOR_ATTR_NDP_PMK]) { - req.pmk.pmk = nla_data(tb[QCA_WLAN_VENDOR_ATTR_NDP_PMK]); - req.pmk.pmk_len = nla_len(tb[QCA_WLAN_VENDOR_ATTR_NDP_PMK]); - QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_HDD, - QDF_TRACE_LEVEL_DEBUG, - req.pmk.pmk, req.pmk.pmk_len); - } - - if (tb[QCA_WLAN_VENDOR_ATTR_NDP_NCS_SK_TYPE]) { - req.ncs_sk_type = - nla_get_u32(tb[QCA_WLAN_VENDOR_ATTR_NDP_NCS_SK_TYPE]); - - } - hdd_info("vdev_id: %d, transaction_id: %d, ndp_rsp %d, ndp_instance_id: %d, ndp_app_info_len: %d, csid: %d", req.vdev_id, req.transaction_id, req.ndp_rsp, req.ndp_instance_id, req.ndp_info.ndp_app_info_len, diff --git a/core/hdd/src/wlan_hdd_nan_datapath.h b/core/hdd/src/wlan_hdd_nan_datapath.h index 4f29c3089ead..1c983f98693a 100644 --- a/core/hdd/src/wlan_hdd_nan_datapath.h +++ b/core/hdd/src/wlan_hdd_nan_datapath.h @@ -43,6 +43,10 @@ struct wireless_dev; #define NDP_SCID_BUF_LEN 256 #define NDP_NUM_INSTANCE_ID 255 +#define NAN_MAX_SERVICE_NAME_LEN 255 +#define NAN_PASSPHRASE_MIN_LEN 8 +#define NAN_PASSPHRASE_MAX_LEN 63 + #define NDP_BROADCAST_STAID (0) #ifdef WLAN_FEATURE_NAN_DATAPATH @@ -78,6 +82,8 @@ struct wireless_dev; * @QCA_WLAN_VENDOR_ATTR_NDP_NCS_SK_TYPE: Cipher Suit ID * @QCA_WLAN_VENDOR_ATTR_NDP_PMK: Pairwise Master Key * @QCA_WLAN_VENDOR_ATTR_NDP_SCID: Security Context ID + * @QCA_WLAN_VENDOR_ATTR_NDP_PASSPHRASE - pass phrase + * @QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_NAME - service name */ enum qca_wlan_vendor_attr_ndp_params { QCA_WLAN_VENDOR_ATTR_NDP_PARAM_INVALID = 0, @@ -101,6 +107,8 @@ enum qca_wlan_vendor_attr_ndp_params { QCA_WLAN_VENDOR_ATTR_NDP_NCS_SK_TYPE, QCA_WLAN_VENDOR_ATTR_NDP_PMK, QCA_WLAN_VENDOR_ATTR_NDP_SCID, + QCA_WLAN_VENDOR_ATTR_NDP_PASSPHRASE, + QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_NAME, QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_AFTER_LAST, QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_MAX = diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 77164e5e0fdf..356dadcb1403 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -6582,6 +6582,28 @@ struct ndp_pmk { }; /** + * struct ndp_passphrase - structure to hold passphrase + * @passphrase_len: length of passphrase + * @passphrase: buffer containing passphrase + * + */ +struct ndp_passphrase { + uint32_t passphrase_len; + uint8_t *passphrase; +}; + +/** + * struct ndp_service_name - structure to hold service_name + * @service_name_len: length of service_name + * @service_name: buffer containing service_name + * + */ +struct ndp_service_name { + uint32_t service_name_len; + uint8_t *service_name; +}; + +/** * struct ndi_create_req - ndi create request params * @transaction_id: unique identifier * @iface_name: interface name @@ -6642,6 +6664,8 @@ struct ndp_initiator_req { struct ndp_app_info ndp_info; uint32_t ncs_sk_type; struct ndp_pmk pmk; + struct ndp_passphrase passphrase; + struct ndp_service_name service_name; }; /** @@ -6712,6 +6736,8 @@ struct ndp_responder_req { struct ndp_app_info ndp_info; struct ndp_pmk pmk; uint32_t ncs_sk_type; + struct ndp_passphrase passphrase; + struct ndp_service_name service_name; }; /** diff --git a/core/sme/src/nan/nan_datapath_api.c b/core/sme/src/nan/nan_datapath_api.c index 9036ba4dd2d8..b8d02bccdf92 100644 --- a/core/sme/src/nan/nan_datapath_api.c +++ b/core/sme/src/nan/nan_datapath_api.c @@ -48,6 +48,12 @@ static void csr_free_ndp_initiator_req(tSmeCmd *cmd) qdf_mem_free(cmd->u.initiator_req.pmk.pmk); cmd->u.initiator_req.pmk.pmk = NULL; cmd->u.initiator_req.pmk.pmk_len = 0; + qdf_mem_free(cmd->u.initiator_req.passphrase.passphrase); + cmd->u.initiator_req.passphrase.passphrase = NULL; + cmd->u.initiator_req.passphrase.passphrase_len = 0; + qdf_mem_free(cmd->u.initiator_req.service_name.service_name); + cmd->u.initiator_req.service_name.service_name = NULL; + cmd->u.initiator_req.service_name.service_name_len = 0; } /** @@ -68,6 +74,12 @@ static void csr_free_ndp_responder_req(tSmeCmd *cmd) qdf_mem_free(cmd->u.responder_req.pmk.pmk); cmd->u.responder_req.pmk.pmk = NULL; cmd->u.responder_req.pmk.pmk_len = 0; + qdf_mem_free(cmd->u.initiator_req.passphrase.passphrase); + cmd->u.initiator_req.passphrase.passphrase = NULL; + cmd->u.initiator_req.passphrase.passphrase_len = 0; + qdf_mem_free(cmd->u.initiator_req.service_name.service_name); + cmd->u.initiator_req.service_name.service_name = NULL; + cmd->u.initiator_req.service_name.service_name_len = 0; } /** @@ -147,6 +159,37 @@ QDF_STATUS sme_ndp_initiator_req_handler(tHalHandle hal, req_params->pmk.pmk, req_params->pmk.pmk_len); } + if (req_params->passphrase.passphrase_len) { + cmd->u.initiator_req.passphrase.passphrase = + qdf_mem_malloc(req_params->passphrase.passphrase_len); + if (NULL == cmd->u.initiator_req.passphrase.passphrase) { + csr_release_ndp_initiator_req(mac_ctx, cmd); + sme_release_global_lock(&mac_ctx->sme); + return QDF_STATUS_E_NOMEM; + } + qdf_mem_copy(cmd->u.initiator_req.passphrase.passphrase, + req_params->passphrase.passphrase, + req_params->passphrase.passphrase_len); + } + + if (req_params->service_name.service_name_len) { + cmd->u.initiator_req.service_name.service_name = + qdf_mem_malloc(req_params->service_name.service_name_len); + if (NULL == cmd->u.initiator_req.service_name.service_name) { + csr_release_ndp_initiator_req(mac_ctx, cmd); + sme_release_global_lock(&mac_ctx->sme); + return QDF_STATUS_E_NOMEM; + } + qdf_mem_copy(cmd->u.initiator_req.service_name.service_name, + req_params->service_name.service_name, + req_params->service_name.service_name_len); + } + + sme_debug("pmk_len: %d, passphrase_len: %d, service_name_len: %d", + cmd->u.initiator_req.pmk.pmk_len, + cmd->u.initiator_req.passphrase.passphrase_len, + cmd->u.initiator_req.service_name.service_name_len); + status = csr_queue_sme_command(mac_ctx, cmd, true); if (QDF_STATUS_SUCCESS != status) { sme_err("SME enqueue failed, status: %d", status); @@ -237,6 +280,32 @@ QDF_STATUS sme_ndp_responder_req_handler(tHalHandle hal, req_params->pmk.pmk, req_params->pmk.pmk_len); } + if (req_params->passphrase.passphrase_len) { + cmd->u.responder_req.passphrase.passphrase = + qdf_mem_malloc(req_params->passphrase.passphrase_len); + if (NULL == cmd->u.responder_req.passphrase.passphrase) { + csr_release_ndp_responder_req(mac_ctx, cmd); + sme_release_global_lock(&mac_ctx->sme); + return QDF_STATUS_E_NOMEM; + } + qdf_mem_copy(cmd->u.responder_req.passphrase.passphrase, + req_params->passphrase.passphrase, + req_params->passphrase.passphrase_len); + } + + if (req_params->service_name.service_name_len) { + cmd->u.responder_req.service_name.service_name = + qdf_mem_malloc(req_params->service_name.service_name_len); + if (NULL == cmd->u.responder_req.service_name.service_name) { + csr_release_ndp_responder_req(mac_ctx, cmd); + sme_release_global_lock(&mac_ctx->sme); + return QDF_STATUS_E_NOMEM; + } + qdf_mem_copy(cmd->u.responder_req.service_name.service_name, + req_params->service_name.service_name, + req_params->service_name.service_name_len); + } + status = csr_queue_sme_command(mac_ctx, cmd, true); if (QDF_STATUS_SUCCESS != status) { sme_err("SME enqueue failed, status: %d", status); diff --git a/core/wma/src/wma_nan_datapath.c b/core/wma/src/wma_nan_datapath.c index 55833f3ab762..08c4ef843c9e 100644 --- a/core/wma/src/wma_nan_datapath.c +++ b/core/wma/src/wma_nan_datapath.c @@ -45,6 +45,7 @@ QDF_STATUS wma_handle_ndp_initiator_req(tp_wma_handle wma_handle, void *req) int ret; uint16_t len; uint32_t vdev_id, ndp_cfg_len, ndp_app_info_len, pmk_len; + uint32_t passphrase_len, service_name_len; struct ndp_initiator_rsp ndp_rsp = {0}; ol_txrx_vdev_handle vdev; wmi_buf_t buf; @@ -77,9 +78,13 @@ QDF_STATUS wma_handle_ndp_initiator_req(tp_wma_handle wma_handle, void *req) ndp_cfg_len = qdf_roundup(ndp_req->ndp_config.ndp_cfg_len, 4); ndp_app_info_len = qdf_roundup(ndp_req->ndp_info.ndp_app_info_len, 4); pmk_len = qdf_roundup(ndp_req->pmk.pmk_len, 4); + passphrase_len = qdf_roundup(ndp_req->passphrase.passphrase_len, 4); + service_name_len = + qdf_roundup(ndp_req->service_name.service_name_len, 4); /* allocated memory for fixed params as well as variable size data */ - len = sizeof(*cmd) + sizeof(*ch_tlv) + (3 * WMI_TLV_HDR_SIZE) - + ndp_cfg_len + ndp_app_info_len + pmk_len; + len = sizeof(*cmd) + sizeof(*ch_tlv) + (5 * WMI_TLV_HDR_SIZE) + + ndp_cfg_len + ndp_app_info_len + pmk_len + + passphrase_len + service_name_len; buf = wmi_buf_alloc(wma_handle->wmi_handle, len); if (!buf) { @@ -102,6 +107,8 @@ QDF_STATUS wma_handle_ndp_initiator_req(tp_wma_handle wma_handle, void *req) cmd->ndp_channel_cfg = ndp_req->channel_cfg; cmd->nan_pmk_len = ndp_req->pmk.pmk_len; cmd->nan_csid = ndp_req->ncs_sk_type; + cmd->nan_passphrase_len = ndp_req->passphrase.passphrase_len; + cmd->nan_servicename_len = ndp_req->service_name.service_name_len; ch_tlv = (wmi_channel *)&cmd[1]; WMITLV_SET_HDR(ch_tlv, WMITLV_TAG_STRUC_wmi_channel, @@ -126,6 +133,17 @@ QDF_STATUS wma_handle_ndp_initiator_req(tp_wma_handle wma_handle, void *req) cmd->nan_pmk_len); tlv_ptr = tlv_ptr + WMI_TLV_HDR_SIZE + pmk_len; + WMITLV_SET_HDR(tlv_ptr, WMITLV_TAG_ARRAY_BYTE, passphrase_len); + qdf_mem_copy(&tlv_ptr[WMI_TLV_HDR_SIZE], ndp_req->passphrase.passphrase, + cmd->nan_passphrase_len); + tlv_ptr = tlv_ptr + WMI_TLV_HDR_SIZE + passphrase_len; + + WMITLV_SET_HDR(tlv_ptr, WMITLV_TAG_ARRAY_BYTE, service_name_len); + qdf_mem_copy(&tlv_ptr[WMI_TLV_HDR_SIZE], + ndp_req->service_name.service_name, + cmd->nan_servicename_len); + tlv_ptr = tlv_ptr + WMI_TLV_HDR_SIZE + service_name_len; + WMA_LOGE(FL("vdev_id = %d, transaction_id: %d, service_instance_id: %d, ch: %d, ch_cfg: %d, csid: %d"), cmd->vdev_id, cmd->transaction_id, cmd->service_instance_id, ch_tlv->mhz, cmd->ndp_channel_cfg, cmd->nan_csid); @@ -146,6 +164,14 @@ QDF_STATUS wma_handle_ndp_initiator_req(tp_wma_handle wma_handle, void *req) WMA_LOGE(FL("pmk len: %d"), cmd->nan_pmk_len); QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_DEBUG, ndp_req->pmk.pmk, cmd->nan_pmk_len); + WMA_LOGE(FL("pass phrase len: %d"), cmd->nan_passphrase_len); + QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_DEBUG, + ndp_req->passphrase.passphrase, + cmd->nan_passphrase_len); + WMA_LOGE(FL("service name len: %d"), cmd->nan_servicename_len); + QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_DEBUG, + ndp_req->service_name.service_name, + cmd->nan_servicename_len); WMA_LOGE(FL("sending WMI_NDP_INITIATOR_REQ_CMDID(0x%X)"), WMI_NDP_INITIATOR_REQ_CMDID); @@ -191,6 +217,7 @@ QDF_STATUS wma_handle_ndp_responder_req(tp_wma_handle wma_handle, wmi_buf_t buf; ol_txrx_vdev_handle vdev; uint32_t vdev_id = 0, ndp_cfg_len, ndp_app_info_len, pmk_len; + uint32_t passphrase_len, service_name_len; uint8_t *tlv_ptr; int ret; wmi_ndp_responder_req_fixed_param *cmd; @@ -225,11 +252,15 @@ QDF_STATUS wma_handle_ndp_responder_req(tp_wma_handle wma_handle, * round up ndp_cfg_len and ndp_app_info_len to 4 bytes */ ndp_cfg_len = qdf_roundup(req_params->ndp_config.ndp_cfg_len, 4); - ndp_app_info_len = qdf_roundup(req_params->ndp_info.ndp_app_info_len, 4); + ndp_app_info_len = + qdf_roundup(req_params->ndp_info.ndp_app_info_len, 4); pmk_len = qdf_roundup(req_params->pmk.pmk_len, 4); + passphrase_len = qdf_roundup(req_params->passphrase.passphrase_len, 4); + service_name_len = + qdf_roundup(req_params->service_name.service_name_len, 4); /* allocated memory for fixed params as well as variable size data */ - len = sizeof(*cmd) + 3*WMI_TLV_HDR_SIZE + ndp_cfg_len + ndp_app_info_len - + pmk_len; + len = sizeof(*cmd) + 5*WMI_TLV_HDR_SIZE + ndp_cfg_len + ndp_app_info_len + + pmk_len + passphrase_len + service_name_len; buf = wmi_buf_alloc(wma_handle->wmi_handle, len); if (!buf) { @@ -250,6 +281,8 @@ QDF_STATUS wma_handle_ndp_responder_req(tp_wma_handle wma_handle, cmd->ndp_app_info_len = req_params->ndp_info.ndp_app_info_len; cmd->nan_pmk_len = req_params->pmk.pmk_len; cmd->nan_csid = req_params->ncs_sk_type; + cmd->nan_passphrase_len = req_params->passphrase.passphrase_len; + cmd->nan_servicename_len = req_params->service_name.service_name_len; tlv_ptr = (uint8_t *)&cmd[1]; @@ -269,6 +302,18 @@ QDF_STATUS wma_handle_ndp_responder_req(tp_wma_handle wma_handle, cmd->nan_pmk_len); tlv_ptr = tlv_ptr + WMI_TLV_HDR_SIZE + pmk_len; + WMITLV_SET_HDR(tlv_ptr, WMITLV_TAG_ARRAY_BYTE, passphrase_len); + qdf_mem_copy(&tlv_ptr[WMI_TLV_HDR_SIZE], + req_params->passphrase.passphrase, + cmd->nan_passphrase_len); + tlv_ptr = tlv_ptr + WMI_TLV_HDR_SIZE + passphrase_len; + + WMITLV_SET_HDR(tlv_ptr, WMITLV_TAG_ARRAY_BYTE, service_name_len); + qdf_mem_copy(&tlv_ptr[WMI_TLV_HDR_SIZE], + req_params->service_name.service_name, + cmd->nan_servicename_len); + tlv_ptr = tlv_ptr + WMI_TLV_HDR_SIZE + service_name_len; + WMA_LOGE(FL("vdev_id = %d, transaction_id: %d, csid: %d"), cmd->vdev_id, cmd->transaction_id, cmd->nan_csid); @@ -288,6 +333,16 @@ QDF_STATUS wma_handle_ndp_responder_req(tp_wma_handle wma_handle, QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_DEBUG, req_params->pmk.pmk, cmd->nan_pmk_len); + WMA_LOGE(FL("pass phrase len: %d"), cmd->nan_passphrase_len); + QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_DEBUG, + req_params->passphrase.passphrase, + cmd->nan_passphrase_len); + + WMA_LOGE(FL("service name len: %d"), cmd->nan_servicename_len); + QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_DEBUG, + req_params->service_name.service_name, + cmd->nan_servicename_len); + WMA_LOGE(FL("sending WMI_NDP_RESPONDER_REQ_CMDID(0x%X)"), WMI_NDP_RESPONDER_REQ_CMDID); ret = wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len, |
