下载
中文
注册

dcmi_set_traceroute接口原型

函数原型

int dcmi_set_traceroute (int card_id, int device_id, struct traceroute param_info, struct node_info *ret_info[], unsigned int ret_info_size)

功能说明

配置Traceroute参数探测报文途径的网络节点信息。

参数说明

参数名称

输入/输出

类型

描述

card_id

输入

int

指定NPU管理单元ID,当前实际支持的ID通过dcmi_get_card_list接口获取。

device_id

输入

int

指定设备编号,通过dcmi_get_device_id_in_card接口获取。取值范围如下:

NPU芯片:[0, device_id_max-1]。

param_info

输入

struct traceroute

traceroute接口的入参

struct tracerout_result {

int max_ttl; //探测报文的最大跳数。取值范围:-1,1~255。

设置为-1时,表示默认值为30

int tos; //IPv4设置TOS优先级,取值范围:-1~63。IPv6设置流量控制值,取值范围:-1~255。数值越大优先级越高,设置为-1时,表示默认值为0

int waittime; //设置等待探测响应的最大时间。取值范围:-1,1~60,单位:s,设置为-1时,表示默认值为3s

int sport; //设置源端口号,取值范围:-1~65535。设置为-1时,表示默认值为大于30000的随机值

int dport; //设置目的端口号,取值范围:-1~65535。设置为-1时,表示默认值为大于30000的随机值

char dest_ip[48]; //目标主机IP

bool ipv6_flag; //是否使用ipv6协议。0表示不使用,1表示使用

bool reset_flag; //终止device侧traceroute所有后台进程,当traceroute测试异常时配置为1结束device侧进程。

};

说明:

端口号设置为0时,系统会使用大于30000的随机

ret_info[]

输出

struct node_info *

traceroute接口的返回信息

struct tracerout_result {

int mask; //掩码,表示后面的数据是否有效,例如:0xFF代表mask后的8个字段是有效的

char ip[48]; //路由节点的ip地址

int snt; //发送ICMP请求报文的数量

double loss; //对应节点的丢包率

double last; //最新报文的响应时间,单位ms

double avg; //所有报文的平均响应时间,单位ms

double best; //报文最快响应时间,单位ms

double wrst; //报文最慢响应时间,单位ms

double stdev; //标准偏差值,越大说明相应节点越不稳定

char reserve[64]; //附加扩展信息

};

说明:

返回信息的使用结构体数组存储,每个节点信息使用一个结构体。

ret_info_size

输入

unsigned int

传入的节点信息结构体的大小。

返回值

类型

描述

int

处理结果:

  • 成功:返回0。
  • 失败:返回码请参见返回码

异常处理

约束说明

表1 部署场景

Linux物理机

Linux物理机容器

root用户

运行用户组(非root用户)

root用户

N

N

N

调用示例

… 
int ret = 0;
int card_id = 0;
int device_id = 0;
struct traceroute param_info = {0};
struct node_info ret_info[10] = {0};
size_t ret_info_size = sizeof(ret_info);
param_info.sport = 40000;
param_info.waittime = 5;
strncpy_s(param_info.dest_ip, sizeof(param_info.dest_ip), "x.x.x.x", strlen("x.x.x.x"));

ret = dcmi_set_traceroute_get_info(card_id, device_id, param_info, &ret_info, ret_info_size);
if (ret != 0){
    //todo:记录日志
    return ret;
}
…

x.x.x.x表示目的IP地址。