LCOV - code coverage report
Current view: top level - base_comm/resources/hccp/rdma_agent/client - ra_tlv.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 91.3 % 69 63
Test Date: 2026-08-18 17:47:01 Functions: 100.0 % 3 3

            Line data    Source code
       1              : /**
       2              :  * Copyright (c) 2025 Huawei Technologies Co., Ltd.
       3              :  * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
       4              :  * CANN Open Software License Agreement Version 2.0 (the "License").
       5              :  * Please refer to the License for details. You may not use this file except in compliance with the License.
       6              :  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
       7              :  * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
       8              :  * See LICENSE in the root of the software repository for the full text of the License.
       9              :  */
      10              : 
      11              : #include <string.h>
      12              : #include "securec.h"
      13              : #include "ra_hdc.h"
      14              : #include "ra_hdc_tlv.h"
      15              : #include "ra_rs_err.h"
      16              : #include "ra.h"
      17              : #include "ra_tlv.h"
      18              : 
      19              : STATIC struct RaTlvOps gRaHdcTlvOps = {
      20              :     .raTlvInit = RaHdcTlvInit,
      21              :     .raTlvDeinit = RaHdcTlvDeinit,
      22              :     .raTlvRequest = RaHdcTlvRequest,
      23              : };
      24              : 
      25            3 : HCCP_ATTRI_VISI_DEF int RaTlvInit(struct TlvInitInfo *initInfo, unsigned int *bufferSize, void **tlvHandle)
      26              : {
      27            3 :     struct RaTlvHandle *tlvHandleTmp = NULL;
      28            3 :     int ret = 0;
      29              : 
      30            3 :     CHK_PRT_RETURN(initInfo == NULL || bufferSize == NULL || tlvHandle == NULL,
      31              :         hccp_err("[init][ra_tlv]init_info or buffer_size or tlv_handle is NULL"), ConverReturnCode(HCCP_INIT, -EINVAL));
      32              : 
      33            3 :     CHK_PRT_RETURN(initInfo->nicPosition != NETWORK_OFFLINE,
      34              :         hccp_err("[init][ra_tlv]mode(%u) not support", initInfo->nicPosition), ConverReturnCode(HCCP_INIT, -EINVAL));
      35            3 :     CHK_PRT_RETURN(initInfo->phyId >= RA_MAX_PHY_ID_NUM,
      36              :         hccp_err("[init][ra_tlv]phy_id(%u) must smaller than %u", initInfo->phyId, RA_MAX_PHY_ID_NUM),
      37              :         ConverReturnCode(HCCP_INIT, -EINVAL));
      38              : 
      39            3 :     tlvHandleTmp = calloc(1, sizeof(struct RaTlvHandle));
      40            3 :     CHK_PRT_RETURN(tlvHandleTmp == NULL, hccp_err("[init][ra_tlv]calloc for tlv_handle failed"),
      41              :         ConverReturnCode(HCCP_INIT, -ENOMEM));
      42              : 
      43            3 :     (void)memcpy_s(&(tlvHandleTmp->initInfo), sizeof(struct TlvInitInfo), initInfo, sizeof(struct TlvInitInfo));
      44            3 :     tlvHandleTmp->tlvOps = &gRaHdcTlvOps;
      45            3 :     if (tlvHandleTmp->tlvOps->raTlvInit == NULL) {
      46            0 :         ret = -EINVAL;
      47            0 :         hccp_err("[init][ra_tlv]ra_tlv_init is NULL");
      48            0 :         goto ra_tlv_init_err;
      49              :     }
      50              : 
      51            3 :     hccp_run_info("Input parameters: phy_id[%u], nicPosition[%u]", initInfo->phyId, initInfo->nicPosition);
      52            3 :     ret = tlvHandleTmp->tlvOps->raTlvInit(tlvHandleTmp);
      53            3 :     if (ret == -ENOTSUPP) {
      54            0 :         hccp_run_warn("[init][ra_tlv]ra_tlv_init unsuccessful, ret(%d), phyId(%u)", ret, initInfo->phyId);
      55            0 :         goto ra_tlv_init_err;
      56            3 :     } else if (ret != 0) {
      57            1 :         hccp_err("[init][ra_tlv]ra_tlv_init failed, ret(%d), phyId(%u)", ret, initInfo->phyId);
      58            1 :         goto ra_tlv_init_err;
      59              :     }
      60              : 
      61            2 :     ret = pthread_mutex_init(&tlvHandleTmp->mutex, NULL);
      62            2 :     if (ret != 0) {
      63            1 :         hccp_err("[init][ra_tlv]init mutext failed, ret(%d), phyId(%u)", ret, initInfo->phyId);
      64            1 :         goto ra_tlv_init_err;
      65              :     }
      66              : 
      67            1 :     *bufferSize = tlvHandleTmp->bufferSize;
      68            1 :     *tlvHandle = (void *)tlvHandleTmp;
      69            1 :     return 0;
      70              : 
      71            2 : ra_tlv_init_err:
      72            2 :     free(tlvHandleTmp);
      73            2 :     tlvHandleTmp = NULL;
      74            2 :     *bufferSize = 0;
      75            2 :     return ConverReturnCode(HCCP_INIT, ret);
      76              : }
      77              : 
      78            3 : HCCP_ATTRI_VISI_DEF int RaTlvDeinit(void *tlvHandle)
      79              : {
      80            3 :     struct RaTlvHandle *tlvHandleTmp = NULL;
      81            3 :     int ret = 0;
      82              : 
      83            3 :     CHK_PRT_RETURN(tlvHandle == NULL, hccp_err("[deinit][ra_tlv]tlv_handle is NULL"),
      84              :         ConverReturnCode(HCCP_INIT, -EINVAL));
      85              : 
      86            3 :     tlvHandleTmp = (struct RaTlvHandle *)tlvHandle;
      87            3 :     if (tlvHandleTmp->tlvOps->raTlvDeinit == NULL) {
      88            1 :         ret = -EINVAL;
      89            1 :         hccp_err("[deinit][ra_tlv]ra_tlv_deinit is NULL, ret(%d), phyId(%u)", ret, tlvHandleTmp->initInfo.phyId);
      90            1 :         goto ra_tlv_deinit_fail;
      91              :     }
      92              : 
      93            2 :     hccp_run_info("Input parameters: phy_id[%u], nic_position[%u]", tlvHandleTmp->initInfo.phyId,
      94              :         tlvHandleTmp->initInfo.nicPosition);
      95              : 
      96            2 :     ret = tlvHandleTmp->tlvOps->raTlvDeinit(tlvHandleTmp);
      97            2 :     if (ret != 0) {
      98            1 :         hccp_err("[deinit][ra_tlv]ra_tlv_deinit failed, ret(%d), phyId(%u)", ret, tlvHandleTmp->initInfo.phyId);
      99            1 :         goto ra_tlv_deinit_fail;
     100              :     }
     101              : 
     102            1 : ra_tlv_deinit_fail:
     103            3 :     (void)pthread_mutex_destroy(&tlvHandleTmp->mutex);
     104            3 :     free(tlvHandleTmp);
     105            3 :     tlvHandleTmp = NULL;
     106            3 :     return ConverReturnCode(HCCP_INIT, ret);
     107              : }
     108              : 
     109            4 : HCCP_ATTRI_VISI_DEF int RaTlvRequest(void *tlvHandle, unsigned int moduleType, struct TlvMsg *sendMsg,
     110              :     struct TlvMsg *recvMsg)
     111              : {
     112            4 :     struct RaTlvHandle *tlvHandleTmp = NULL;
     113            4 :     int ret = 0;
     114              : 
     115            4 :     CHK_PRT_RETURN(tlvHandle == NULL || sendMsg == NULL || recvMsg == NULL,
     116              :         hccp_err("[request][ra_tlv]tlv_handle or send_msg or recv_msg is NULL"), ConverReturnCode(OTHERS, -EINVAL));
     117              : 
     118            4 :     CHK_PRT_RETURN(moduleType > TLV_MODULE_TYPE_MAX,
     119              :         hccp_err("[request][ra_tlv]module_type(%u) invalid, must smaller than (%u)", moduleType, TLV_MODULE_TYPE_MAX),
     120              :         -EINVAL);
     121              : 
     122            4 :     tlvHandleTmp = (struct RaTlvHandle *)tlvHandle;
     123            4 :     CHK_PRT_RETURN(sendMsg->length > tlvHandleTmp->bufferSize,
     124              :         hccp_err("[request][ra_tlv]send length(%u) out of range(%u)", sendMsg->length, tlvHandleTmp->bufferSize),
     125              :         ConverReturnCode(OTHERS, -EINVAL));
     126            3 :     CHK_PRT_RETURN(tlvHandleTmp->tlvOps->raTlvRequest == NULL, hccp_err("[request][ra_tlv]ra_tlv_request is NULL"),
     127              :         ConverReturnCode(OTHERS, -EINVAL));
     128              : 
     129            2 :     RA_PTHREAD_MUTEX_LOCK(&tlvHandleTmp->mutex);
     130            2 :     ret = tlvHandleTmp->tlvOps->raTlvRequest(tlvHandleTmp, moduleType, sendMsg, recvMsg);
     131            2 :     if (ret == -EUSERS || ret == -ENOTSUPP) {
     132            0 :         hccp_warn("[request][ra_tlv]ra_tlv_request unsuccessful, ret(%d), phyId(%u) sendType(%u)", ret,
     133              :             tlvHandleTmp->initInfo.phyId, sendMsg->type);
     134            2 :     } else if (ret != 0) {
     135            1 :         hccp_err("[request][ra_tlv]ra_tlv_request failed, ret(%d), phyId(%u) sendType(%u)", ret,
     136              :             tlvHandleTmp->initInfo.phyId, sendMsg->type);
     137              :     }
     138            2 :     RA_PTHREAD_MUTEX_UNLOCK(&tlvHandleTmp->mutex);
     139              : 
     140            2 :     return ConverReturnCode(OTHERS, ret);
     141              : }
        

Generated by: LCOV version 2.0-1