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

            Line data    Source code
       1              : /**
       2              :  * Copyright (c) 2026 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 "ra_hdc_ping.h"
      12              : #include "ra_hdc.h"
      13              : #include "ra_adp.h"
      14              : #include "rs_ping.h"
      15              : #include "ra_adp_ping.h"
      16              : 
      17              : struct RsPingOps gPingOps = {
      18              :     .pingInit = RsPingInit,
      19              :     .pingTargetAdd = RsPingTargetAdd,
      20              :     .pingTaskStart = RsPingTaskStart,
      21              :     .pingGetResults = RsPingGetResults,
      22              :     .pingTaskStop = RsPingTaskStop,
      23              :     .pingTargetDel = RsPingTargetDel,
      24              :     .pingDeinit = RsPingDeinit,
      25              : };
      26              : 
      27            2 : int RaRsPingInit(char *inBuf, char *outBuf, int *outLen, int *opResult, int rcvBufLen)
      28              : {
      29              :     (void)outLen;
      30            2 :     union OpPingInitData *pingDataOut = (union OpPingInitData *)(outBuf + sizeof(struct MsgHead));
      31            2 :     union OpPingInitData *pingData = (union OpPingInitData *)(inBuf + sizeof(struct MsgHead));
      32              : 
      33              :     HCCP_CHECK_PARAM_LEN_RET_HOST(sizeof(union OpPingInitData), sizeof(struct MsgHead), rcvBufLen, opResult);
      34              : 
      35            2 :     *opResult = gPingOps.pingInit(&pingData->txData.attr, &pingDataOut->rxData.info, &pingDataOut->rxData.devIndex);
      36            2 :     if (*opResult != 0) {
      37            1 :         hccp_err("ping_init failed ret[%d].", *opResult);
      38              :     }
      39              :     // only negative return value will be parsed
      40            2 :     if (*opResult > 0) {
      41            1 :         *opResult = -*opResult;
      42              :     }
      43              : 
      44            2 :     return 0;
      45              : }
      46              : 
      47            2 : int RaRsPingTargetAdd(char *inBuf, char *outBuf, int *outLen, int *opResult, int rcvBufLen)
      48              : {
      49              :     (void)outBuf;
      50              :     (void)outLen;
      51            2 :     union OpPingAddData *pingData = (union OpPingAddData *)(inBuf + sizeof(struct MsgHead));
      52              : 
      53              :     HCCP_CHECK_PARAM_LEN_RET_HOST(sizeof(union OpPingAddData), sizeof(struct MsgHead), rcvBufLen, opResult);
      54              : 
      55            2 :     *opResult = gPingOps.pingTargetAdd(&pingData->txData.rdev, &pingData->txData.target);
      56            2 :     if (*opResult != 0) {
      57            1 :         hccp_err("ping_target_add failed ret[%d].", *opResult);
      58              :     }
      59              :     // only negative return value will be parsed
      60            2 :     if (*opResult > 0) {
      61            1 :         *opResult = -*opResult;
      62              :     }
      63              : 
      64            2 :     return 0;
      65              : }
      66              : 
      67            2 : int RaRsPingTaskStart(char *inBuf, char *outBuf, int *outLen, int *opResult, int rcvBufLen)
      68              : {
      69              :     (void)outBuf;
      70              :     (void)outLen;
      71            2 :     union OpPingStartData *pingData = (union OpPingStartData *)(inBuf + sizeof(struct MsgHead));
      72              : 
      73              :     HCCP_CHECK_PARAM_LEN_RET_HOST(sizeof(union OpPingStartData), sizeof(struct MsgHead), rcvBufLen, opResult);
      74              : 
      75            2 :     *opResult = gPingOps.pingTaskStart(&pingData->txData.rdev, &pingData->txData.attr);
      76            2 :     if (*opResult != 0) {
      77            1 :         hccp_err("ping_task_start failed ret[%d].", *opResult);
      78              :     }
      79              :     // only negative return value will be parsed
      80            2 :     if (*opResult > 0) {
      81            1 :         *opResult = -*opResult;
      82              :     }
      83              : 
      84            2 :     return 0;
      85              : }
      86              : 
      87            3 : int RaRsPingGetResults(char *inBuf, char *outBuf, int *outLen, int *opResult, int rcvBufLen)
      88              : {
      89              :     (void)outLen;
      90            3 :     union OpPingResultsData *pingDataOut = (union OpPingResultsData *)(outBuf + sizeof(struct MsgHead));
      91            3 :     union OpPingResultsData *pingData = (union OpPingResultsData *)(inBuf + sizeof(struct MsgHead));
      92              : 
      93              :     HCCP_CHECK_PARAM_LEN_RET_HOST(sizeof(union OpPingResultsData), sizeof(struct MsgHead), rcvBufLen, opResult);
      94              :     HCCP_CHECK_PARAM_LEN_RET_HOST(pingData->txData.num, 0, RA_MAX_PING_TARGET_NUM, opResult);
      95              : 
      96            6 :     *opResult = gPingOps.pingGetResults(&pingData->txData.rdev, pingData->txData.target, &pingData->txData.num,
      97            3 :         pingDataOut->rxData.target);
      98              :     // caller needs to retry, degrade log level
      99            3 :     if (*opResult == -EAGAIN) {
     100            1 :         hccp_warn("ping_get_results unsuccessful, ret[%d].", *opResult);
     101            2 :     } else if (*opResult != 0) {
     102            1 :         hccp_err("ping_get_results failed, ret[%d].", *opResult);
     103              :     }
     104              :     // only negative return value will be parsed
     105            3 :     if (*opResult > 0) {
     106            1 :         *opResult = -*opResult;
     107            1 :         return 0;
     108              :     }
     109            2 :     pingDataOut->rxData.num = pingData->txData.num;
     110              : 
     111            2 :     return 0;
     112              : }
     113              : 
     114            2 : int RaRsPingTaskStop(char *inBuf, char *outBuf, int *outLen, int *opResult, int rcvBufLen)
     115              : {
     116              :     (void)outBuf;
     117              :     (void)outLen;
     118            2 :     union OpPingStopData *pingData = (union OpPingStopData *)(inBuf + sizeof(struct MsgHead));
     119              : 
     120              :     HCCP_CHECK_PARAM_LEN_RET_HOST(sizeof(union OpPingStopData), sizeof(struct MsgHead), rcvBufLen, opResult);
     121              : 
     122            2 :     *opResult = gPingOps.pingTaskStop(&pingData->txData.rdev);
     123            2 :     if (*opResult != 0) {
     124            1 :         hccp_err("ping_task_stop failed ret[%d].", *opResult);
     125              :     }
     126              :     // only negative return value will be parsed
     127            2 :     if (*opResult > 0) {
     128            1 :         *opResult = -*opResult;
     129              :     }
     130              : 
     131            2 :     return 0;
     132              : }
     133              : 
     134            2 : int RaRsPingTargetDel(char *inBuf, char *outBuf, int *outLen, int *opResult, int rcvBufLen)
     135              : {
     136              :     (void)outBuf;
     137              :     (void)outLen;
     138            2 :     union OpPingDelData *pingData = (union OpPingDelData *)(inBuf + sizeof(struct MsgHead));
     139              : 
     140              :     HCCP_CHECK_PARAM_LEN_RET_HOST(sizeof(union OpPingDelData), sizeof(struct MsgHead), rcvBufLen, opResult);
     141              :     HCCP_CHECK_PARAM_LEN_RET_HOST(pingData->txData.num, 0, RA_MAX_PING_TARGET_NUM, opResult);
     142              : 
     143            2 :     *opResult = gPingOps.pingTargetDel(&pingData->txData.rdev, pingData->txData.target, &pingData->txData.num);
     144            2 :     if (*opResult != 0) {
     145            1 :         hccp_err("ping_target_del failed ret[%d].", *opResult);
     146              :     }
     147              :     // only negative return value will be parsed
     148            2 :     if (*opResult > 0) {
     149            1 :         *opResult = -*opResult;
     150              :     }
     151              : 
     152            2 :     return 0;
     153              : }
     154              : 
     155            2 : int RaRsPingDeinit(char *inBuf, char *outBuf, int *outLen, int *opResult, int rcvBufLen)
     156              : {
     157              :     (void)outBuf;
     158              :     (void)outLen;
     159            2 :     union OpPingDeinitData *pingData = (union OpPingDeinitData *)(inBuf + sizeof(struct MsgHead));
     160              : 
     161              :     HCCP_CHECK_PARAM_LEN_RET_HOST(sizeof(union OpPingDeinitData), sizeof(struct MsgHead), rcvBufLen, opResult);
     162              : 
     163            2 :     *opResult = gPingOps.pingDeinit(&pingData->txData.rdev);
     164            2 :     if (*opResult != 0) {
     165            1 :         hccp_err("ping_deinit failed ret[%d].", *opResult);
     166              :     }
     167              :     // only negative return value will be parsed
     168            2 :     if (*opResult > 0) {
     169            1 :         *opResult = -*opResult;
     170              :     }
     171              : 
     172            2 :     return 0;
     173              : }
        

Generated by: LCOV version 2.0-1