CAPL学习-ETH功能函数-方法类4

IP_Address::IsBroadcast

方法
语法

capl 复制代码
long IP_Address::IsBroadcast();  

功能

检查当前IP地址是否为广播地址(如IPv4的 255.255.255.255)。

返回值

  • 1:是广播地址
  • 0:不是广播地址

可用性

  • 版本:12.0及以上
  • 支持:以太网测量/仿真测试环境

示例

capl 复制代码
void DoSomething(IP_Address addr) {  
  if (addr.IsBroadcast()) {  
    // 处理广播地址逻辑  
  }  
}  

IP_Address::IsIPv4Address

方法
语法

capl 复制代码
long IP_Address::IsIPv4Address();  

功能

检查当前IP地址是否为IPv4地址(如 192.168.1.2)。

返回值

  • 1:是IPv4地址
  • 0:不是IPv4地址

可用性

  • 版本:12.0及以上
  • 支持:以太网测量/仿真测试环境

示例

capl 复制代码
void DoSomething(IP_Address addr) {  
  if (addr.IsIPv4Address()) {  
    // 处理IPv4地址逻辑  
  }  
}  

IP_Address::IsIPv6Address

方法
语法

capl 复制代码
long IP_Address::IsIPv6Address();  

功能

检查当前IP地址是否为IPv6地址(如 FC00::1)。

返回值

  • 1:是IPv6地址
  • 0:不是IPv6地址

可用性

  • 版本:12.0及以上
  • 支持:以太网测量/仿真测试环境

示例

IP_Address::IsIPv4Address 示例。

IP_Address::IsMulticast

方法
语法

capl 复制代码
long IP_Address::IsMulticast();  

功能

检查当前IP地址是否为组播地址(如IPv4的 239.0.0.1 或IPv6的 FF02::1)。

返回值

  • 1:是组播地址
  • 0:不是组播地址

可用性

  • 版本:12.0及以上
  • 支持:以太网测量/仿真测试环境

示例

capl 复制代码
void DoSomething(IP_Address addr) {  
  if (addr.IsMulticast()) {  
    // 处理组播地址逻辑  
  }  
}  

IP_Address::MatchesAddress

方法
语法

cpp 复制代码
long IP_Address::MatchesAddress (IP_Address ipAddr); // 形式1  
long IP_Address::MatchesAddress (IP_Address ipAddr, long prefix); // 形式2  

功能

比较两个IP地址,通配符始终匹配。若未设置地址类型或地址为0.0.0.0(IPv4)/::0(IPv6),则视为通配符。形式2仅考虑IP地址的网络部分(由前缀指定)。

参数

  • ipAddr:可能包含通配符的IP_Address对象。
  • prefix:前缀长度(比特数),仅考虑指定的前几位。

返回值

  • 0:不匹配
  • 1:匹配

可用性

  • 版本:12.0及以上
  • 适用场景:以太网测量/仿真测试

示例

cpp 复制代码
// 示例1:基础匹配  
on start {  
  IP_Address 192.168.1.1 addr1;  
  IP_Address 192.168.1.2 addr2;  
  if (addr1.MatchesAddress(addr2) == 1) {  
    write("地址匹配!");  
  }  
}  

// 示例2:带前缀匹配(前24位网络地址)  
on start {  
  IP_Address 192.168.1.1 addr1;  
  IP_Address 192.168.1.2 addr2;  
  if (addr1.MatchesAddress(addr2, 24) == 1) { // 192.168.1.0/24网段匹配  
    write("地址匹配!");  
  }  
}  

// 示例3:直接比较(需完全相等)  
on start {  
  IP_Address 192.168.1.1 addr1;  
  IP_Address 192.168.1.2 addr2;  
  if (addr1 == addr2) {  
    write("地址完全相等!");  
  } else {  
    write("地址不相等!");  
  }  
}  

IP_Address::ParseAddressFromString

方法
语法

cpp 复制代码
long IP_Address::ParseAddressFromString(char ipAddr[]);  

功能

将字符串转换为IPv4或IPv6地址,并赋值给IP_Address对象。

参数

  • ipAddr:表示IPv4/IPv6地址的字符串(如"192.168.1.1""2001:DB8::1")。

返回值

  • 0:成功
  • 1:解析错误

可用性

  • 版本:12.0及以上
  • 适用场景:以太网测量/仿真测试

示例

cpp 复制代码
on start {  
  IP_Address addr;  
  if (addr.ParseAddressFromString("192.168.1.1") == 0) {  
    // 成功解析,可使用addr  
  }  
}  

IP_Address::PrintAddressToString

方法
语法

cpp 复制代码
long IP_Address::PrintAddressToString(char ipAddr[]);  

功能

将IP地址转换为字符串。IPv6地址采用压缩格式(最长零序列替换为::);若IPv6包含非零作用域ID,则格式为<ipv6地址>%<作用域ID>(如2001:DB8::1%1)。

参数

  • ipAddr:存储转换后字符串的缓冲区。

返回值

  • 0:成功
  • 1:缓冲区过小
  • 2:IP对象未设置有效地址

可用性

  • 版本:12.0及以上
  • 适用场景:以太网测量/仿真测试

示例

cpp 复制代码
on start {  
  IP_Address 192.168.1.1 addr;  
  char addrStr[20];  
  if (addr.PrintAddressToString(addrStr) == 0) {  
    write("地址:%s", addrStr); // 输出:地址:192.168.1.1  
  }  
}  

IP_Address::SetAddressAsArray

方法
语法

cpp 复制代码
long IP_Address::SetAddressAsArray(byte ipAddr[]); // 形式1(字节数组)  
long IP_Address::SetAddressAsArray(char ipAddr[]);  // 形式2(字符数组)  

功能

将字节/字符数组复制为IP地址值(IPv4需4字节,IPv6需16字节)。

返回值

  • 0:成功
  • 1:数组长度非4(IPv4)或16(IPv6)

可用性

  • 版本:12.0及以上
  • 适用场景:以太网测量/仿真测试

示例

cpp 复制代码
on start {  
  byte addrData[16] = {0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};  
  IP_Address addr;  
  if (addr.SetAddressAsArray(addrData) == 0) {  
    // 成功设置IPv6地址:fc00::1  
  }  
}  

IP_Endpoint::IsTCP

方法
语法

cpp 复制代码
long IP_Endpoint::IsTCP();  

功能

检查端点的传输协议是否为TCP。

返回值

  • 1:是TCP协议
  • 0:非TCP协议

可用性

  • 版本:12.0及以上
  • 适用场景:以太网测量/仿真测试

示例

cpp 复制代码
on start {  
  IP_Endpoint UDP:192.168.1.1:4000 addr;  
  if (addr.IsUDP()) {  
    write("是UDP端点");  
  } else if (addr.IsTCP()) {  
    write("是TCP端点");  
  }  
}  

IP_Endpoint::IsUDP

方法
语法

cpp 复制代码
long IP_Endpoint::IsUDP();  

功能

检查端点的传输协议是否为UDP。

返回值

  • 1:是UDP协议
  • 0:非UDP协议

可用性

  • 版本:12.0及以上
  • 适用场景:以太网测量/仿真测试

示例

同IP_Endpoint::IsTCP示例。

IP_Endpoint::MatchesEndpoint

方法
语法

cpp 复制代码
long IP_Endpoint::MatchesEndpoint(IP_Endpoint ipEndpoint); // 形式1  
long IP_Endpoint::MatchesEndpoint(IP_Endpoint ipEndpoint, long prefix); // 形式2  

功能

比较两个端点(IP+端口+协议),通配符始终匹配。若未设置协议或端口为0,则视为通配符。IP地址部分需通过MatchesAddress匹配;形式2仅考虑网络部分(由前缀指定)。

参数

  • ipEndpoint:可能包含通配符的IP_Endpoint对象。
  • prefix:前缀长度(比特数),仅考虑指定的前几位。

返回值

  • 0:不匹配
  • 1:匹配

可用性

  • 版本:12.0及以上
  • 适用场景:以太网测量/仿真测试

示例

cpp 复制代码
// 示例1:基础端点匹配(IP+端口需完全一致,协议默认匹配)  
on start {  
  IP_Endpoint 192.168.1.1:4000 ep1;  
  IP_Endpoint 192.168.1.2:4000 ep2;  
  if (ep1.MatchesEndpoint(ep2) == 1) {  
    write("端点匹配!");  
  }  
}  

// 示例2:带前缀匹配(IP前24位网络地址+端口匹配)  
on start {  
  IP_Endpoint 192.168.1.1:4000 ep1;  
  IP_Endpoint 192.168.1.2:4000 ep2;  
  if (ep1.MatchesEndpoint(ep2, 24) == 1) { // 192.168.1.0/24网段+端口4000匹配  
    write("端点匹配!");  
  }  
}  

IP_Endpoint::ParseEndpointFromString

方法
语法
long IP_Endpoint::ParseEndpointFromString(char endpoint[]);

功能

将字符串转换为端点,并将该端点设置为IP端点值。

参数
endpoint:表示IP端点的字符串。

返回值

  • 0:成功
  • 1:解析错误

可用性

  • 版本要求:12.0及以上
  • 适用范围:以太网
  • 支持场景:测量设置 ✔️ / 仿真/测试设置 ✔️

示例

capl 复制代码
variables
{
  ip_Endpoint ipEndpoint;
}

on sysvar_update sysvar::Endpoint
{
  char endpointText[60];
  sysGetVariableString(this, endpointText, elcount(endpointText));
  ipEndpoint.ParseEndpointFromString(endpointText);
}

IP_Endpoint::PrintEndpointToString

方法
语法
long IP_Endpoint::PrintEndpointToString(char endpoint[]);

功能

将端点转换为以下格式的字符串:
<TCP/UDP>:<ip_Address>:<Port>

示例

  • IPv4端点:192.168.1.1:100
  • IPv4 TCP端点:TCP:192.168.1.1:100
  • IPv6端点:[2001:DB8::1]:100
  • 带作用域ID的IPv6 TCP端点:TCP:[2001:DB8::1%1]:100
  • IPv6 UDP端点:UDP:[2001:DB8::1]:100

参数
endpoint:存储端点字符串的字符数组。

返回值

  • 0:成功
  • 1:字符串缓冲区过小

可用性

  • 版本要求:12.0及以上
  • 适用范围:以太网
  • 支持场景:测量设置 ✔️ / 仿真/测试设置 ✔️

示例

capl 复制代码
void OnReceiveFrom(UdpSocket socket, long result, IP_Endpoint senderEndpoint, byte buffer[], dword size)
{
  char endpointText[60];
  senderEndpoint.PrintEndpointToString(endpointText);
  write("packet from %s received", endpointText);
}

IP_Endpoint::SetToTCP

方法
语法
long IP_Endpoint::SetToTCP();

功能

将传输协议设置为TCP。

参数

返回值

  • 0:成功

可用性

  • 版本要求:12.0及以上
  • 适用范围:以太网
  • 支持场景:测量设置 ✔️ / 仿真/测试设置 ✔️

示例

capl 复制代码
on start
{
  IP_Endpoint 192.168.1.1:4000 addr;
  addr.SetToTCP();
  if (addr.IsTCP())
  {
    write("Is TCP endpoint");
  }
}

IP_Endpoint::SetToUDP

方法
语法
long IP_Endpoint::SetToUDP();

功能

将传输协议设置为UDP。

参数

返回值

  • 0:成功

可用性

  • 版本要求:12.0及以上
  • 适用范围:以太网
  • 支持场景:测量设置 ✔️ / 仿真/测试设置 ✔️

示例

capl 复制代码
on start
{
  IP_Endpoint 192.168.1.1:4000 addr;
  addr.Set**返回值**  
- `0`:成功  

**可用性**  
- 版本要求:12.0及以上  
- 适用范围:以太网  
- 支持场景:测量设置 ✔️ / 仿真/测试设置 ✔️  

**示例**  
```capl
on start
{
  IP_Endpoint UDP:192.168.1.1:4000 addr;
  addr.SetTransportProtocolToUnknown();
  if (addr.IsTCP())
  {
    write("Is TCP endpoint");
  }
  else if (addr.IsUDP())
  {
    write("Is UDP endpoint");
  }
  else
  {
    write("No transport protocol specified for endpoint");
  }
}

IP_Endpoint::SetTransportProtocolToUnknown

CAPL 函数 >> 以太网 >> 函数概述 >> IP_Endpoint::SetTransportProtocolToUnknown

方法
语法

long IP_Endpoint::SetTransportProtocolToUnknown();

功能

使传输协议失效。

参数

返回值

0:成功

可用性
  • 起始版本:12.0
  • 适用范围:以太网
  • 支持场景
    • 测量设置:•
    • 仿真/测试设置:•
示例
capl 复制代码
on start  
{  
    IP_Endpoint UDP:192.168.1.1:4000 addr;  // 定义UDP端点  
    addr.SetTransportProtocolToUnknown();    // 使传输协议失效  

    if (addr.IsTCP())  
    {  
        write("Is TCP endpoint");  // 若为TCP端点  
    }  
    else if (addr.IsUDP())  
    {  
        write("Is UDP endpoint");  // 若为UDP端点  
    }  
    else  
    {  
        write("No transport protocol specified for endpoint");  // 未指定传输协议  
    }  
}  
相关推荐
hnlq3 小时前
基于dpdk的用户态协议栈的实现(三)—— TCP的三次握手实现
网络·网络协议·tcp/ip
sugar__salt4 小时前
网络编程套接字(二)——TCP
java·网络·网络协议·tcp/ip·java-ee·javaee
buyutang_6 小时前
Linux 网络编程:TCP协议Socket开发全流程,理解多线程多进程实现的多连接网络通讯模型
linux·网络·tcp/ip
濊繵6 小时前
Linux网络--HTTP cookie 与 session
网络·网络协议·http
Tandy12356_7 小时前
手写TCP/IP协议栈——ARP超时重新请求
c语言·c++·网络协议·计算机网络
方块A7 小时前
轻量级的 HTTP 跳转服务
网络·网络协议·http
爱跑步的程序员~7 小时前
TCP三次握手
网络·网络协议·tcp/ip
濊繵7 小时前
Linux网络--传输层协议 TCP
linux·网络·tcp/ip
盛满暮色 风止何安7 小时前
负责均衡的理解
运维·服务器·网络·网络协议·系统安全·安全架构