1 Objects
1. Eth
CAPL 函数 >> 以太网 >> 函数概述 >> Eth
函数
用于获取以太网链路的状态和统计信息。使用 ethResetStatistics 可重置统计值。
语法
Eth <Ethernet Channel Number>;
参数
- Ethernet Channel Number:通道号(1...32)。
选择器
| 选择器 | 类型 | 访问权限 | 说明 |
|---|---|---|---|
| status | long | 只读 | 链路状态:0-链路断开,1-链路连接 |
| bitrate | dword | 只读 | 比特率(kBit/sec) |
| TxBitrate | dword | 只读 | 当前发送比特率(kBit/sec) |
| RxBitrate | dword | 只读 | 当前接收比特率(kBit/sec) |
| TxPacketRate | dword | 只读 | 当前发送包速率(pkt/sec) |
| RxPacketRate | dword | 只读 | 当前接收包速率(pkt/sec) |
| TxPacketCount | qword | 只读 | 发送的以太网包数量 |
| RxPacketCount | qword | 只读 | 接收的以太网包数量 |
| TxByteCount | qword | 只读 | 发送的字节数 |
| RxByteCount | qword | 只读 | 接收的字节数 |
| TxErrorCount | dword | 只读 | 发送错误包数量 |
| RxErrorCount | dword | 只读 | 接收错误包数量 |
| SQI | dword | 只读 | 服务质量指示:0-错误发生,1-无余量,2-临界,3-可接受,4-良好,5-优秀,6-不可用 |
可用性
- 版本:8.5(基础功能),11.0(统计选择器)
- 适用场景:以太网测量/仿真测试
示例
capl
switch(Eth1.status)
{
case 0:
write("Eth1 以太网链路已断开");
break;
case 1:
write("Eth1 以太网链路已连接,速率为 %dMBit/sec", Eth1.bitrate/1000);
}
2. ethernetErrorPacket
CAPL 函数 >> 以太网 >> 函数概述 >> ethernetErrorPacket
函数
用于在 on ethernetErrorPacket 事件处理程序中访问错误包数据。
语法
ethernetErrorPacket <errorPacket var>;
参数
- errorPacket var:错误包变量名(字符串)。
选择器
| 选择器 | 类型 | 访问权限 | 说明 |
|---|---|---|---|
| time_ns | int64 | 只读 | 时间戳(纳秒) |
| dir | byte | 只读 | 方向 |
| msgChannel | word | - | 应用通道(如 Eth 1) |
| hwChannel | word | 只读 | 硬件通道(仅 Vector 接口支持,如 VN5640) |
| hwPort | ethernetPort | 只读 | 网络访问端口(仅网络模式) |
| Length | word | - | 以太网 payload 长度(从 Ethertype 后开始) |
| FCS | word | 只读 | 帧校验和(部分硬件不支持,值为 0) |
| FrameLen | word | 只读 | 帧持续时间(纳秒,部分硬件不支持) |
| SOF | word | 只读 | 帧起始时间戳(纳秒,部分硬件不支持) |
| Type | word/qword | - | Ethertype 类型 |
| Source | qword | - | 源 MAC 地址(6 字节,网络字节序) |
| Destination | qword | - | 目的 MAC 地址(6 字节,网络字节序) |
| ErrorCode | byte | 只读 | 错误码:1-无效帧长,2-无效 CRC,4-无效数据,8-冲突检测(半双工) |
可用性
- 版本:8.5(基础功能),后续版本扩展选择器支持
示例
capl
on ethernetErrorPacket *
{
write("在 Eth%d 上收到以太网错误包", this.msgChannel);
output(this); // 仅在测量模式下的 CAPL 节点中需要
}
3. ethernetPacket
CAPL 函数 >> 以太网 >> 函数概述 >> ethernetPacket
函数
用于创建以太网发送对象,可通过选择器操作包数据。
语法
ethernetPacket <packet var>;
参数
- packet var:包变量名(字符串)。
选择器
| 选择器 | 类型 | 访问权限 | 说明 |
|---|---|---|---|
| time_ns | int64 | 只读 | 时间戳(纳秒) |
| dir | byte | 只读 | 方向(Rx/Tx) |
| msgChannel | word | - | 应用通道(如 Eth 1) |
| hwChannel/hwPort | word/ethernetPort | 只读 | 硬件通道/端口(仅特定硬件支持) |
| Length | word | - | payload 长度(从 Ethertype 后开始) |
| Source/Destination | qword | - | 源/目的 MAC 地址(6 字节,网络字节序) |
| byte(x)/word(x)/... | 多种类型 | - | 数据字段(x 为偏移量,从 Ethertype 后开始) |
| Type | word | - | Ethertype 类型 |
| . | 多种类型 | - | 协议字段(如 TCP.port,取决于协议解析) |
方法
- 数据操作 :
Clear()、GetData()、SetData() - 协议解析 :
GetDestinationIPAddress()、GetVlanId()、HasVlan()等 - 错误注入 :
FaultInjectFCS()、FaultInjectDisableLengthPadding()
示例
capl
ethernetPacket txPacket;
int i;
txPacket.msgChannel = 1;
txPacket.source = EthGetMacAddressAsNumber("20:00:00:00:00:01");
txPacket.destination = EthGetMacAddressAsNumber("FF:FF:FF:FF:FF:FF");
txPacket.Length = 100;
txPacket.type = 0xF123;
for(i = 0; i < txPacket.Length; i++)
{
txPacket.Byte(i) = i & 0xFF;
}
output(txPacket);
4. IP_Address
CAPL 函数 >> 以太网 >> 函数概述 >> IP_Address
函数
初始化 IPv4/IPv6 地址变量。
语法
- 形式 1:
IP_Address <addr> <var name>;(带具体地址) - 形式 2:
IP_Address <var name>;(不带地址)
参数
- addr :IPv4/IPv6 地址(如
192.168.0.1或ff::1)。 - var name:变量名。
选择器
| 选择器 | 类型 | 说明 |
|---|---|---|
| IPv4Address | dword | IPv4 地址值(字节序参考 IP 地址规范) |
| ScopeID | dword | IPv6 作用域 ID |
方法
IsIPv4Address()/IsIPv6Address():判断地址类型ParseAddressFromString()/PrintAddressToString():字符串解析/转换IsBroadcast()/IsMulticast():判断广播/组播地址
示例
capl
variables
{
IP_Address 192.168.0.1 ipv4Addr;
IP_Address ff::1 ipv6Addr;
}
on start
{
IP_Address addr;
addr.ParseAddressFromString("192.168.1.1");
write("IP 地址: %s", addr.PrintAddressToString());
}
5. IP_Endpoint
CAPL 函数 >> 以太网 >> 函数概述 >> IP_Endpoint
函数
初始化 IP 端点(IP 地址+端口)变量。
语法
- 形式 1:
IP_Endpoint <endpoint> <var name>;(带具体端点) - 形式 2:
IP_Endpoint <var name>;(不带端点)
参数
- endpoint :IPv4/IPv6 地址+端口(如
TCP:192.168.1.1:4000或UDP:[ff::1]:6000)。 - var name:变量名。
选择器
| 选择器 | 类型 | 说明 |
|---|---|---|
| PortNumber | dword | 端口号(主机字节序) |
| IP_Address | IP_Address | 关联的 IP 地址对象 |
方法
IsTCP()/IsUDP():判断传输协议ParseEndpointFromString()/PrintEndpointToString():字符串解析/转换SetToTCP()/SetToUDP():设置协议类型
示例
capl
variables
{
IP_Endpoint TCP:192.168.1.1:4000 ipEndpoint1;
IP_Endpoint UDP:[ff::1]:6000 ipEndpoint4;
}
on start
{
IP_Endpoint ep;
ep = IP_Endpoint("192.168.1.2:4001");
write("端口号: %d", ep.PortNumber);
}
2 基于网络架构特有
ethernetPort::::
函数
初始化一个带有端口限定的 ethernetPort 类型变量。
语法
capl
ethernetPort ethernetPort.<NetworkName>.<PortName>;
参数
-
NetworkName
以太网网络的名称。
-
PortName
端口的名称。
可用性
| 版本 | 适用范围 | 测量设置 | 仿真/测试设置 |
|---|---|---|---|
| 12.0 SP4 | Ethernet | • | • |
示例
capl
on start
{
ethernetport clientPort;
clientPort = ethernetport::Ethernet1::ChatClient1;
// ... 对 clientPort 执行操作
}
参见
- ethSetLinkStatus
- ethGetLinkStatus
- on ethernetStatus