CAPL如何对以太网报文的长度字段和校验和字段设置错误值
当我们使用CAPL中的关键字ethernetPacket组装一条以太网报文并发送时,除了一些必要的字段(ip地址、mac地址、payload数据)需要单独设置外,其他字段会根据你初始化的协议使用默认值。比如你初始化一条icmpv4 echo request报文,那么icmpv4协议中的type字段默认值是8,code值是0,这个值用来表示协议,属于固定值。还有一些字段使用的默认值,属于可变值,你可以设置也可以不用设置,对报文类型不会有什么影响,比如icmpv4协议中的identifier和sequence number。另外还有一些字段值是根据报文数据必须设置正确的,比如length字段或checksum字段。
这三种字段中,第一种是在对ethernetPacket的协议初始化时就会设置好的,第二种需要对字段单独进行设置,否则使用默认值,一般是0。第三种可以通过调用函数CompletePacket()自动计算协议中的length字段和checksum字段的正确值。
我们先看一个正确组装报文的例子:
on key 'a'
{
ethernetPacket pkt;
pkt.icmpv4.echo.Init();
pkt.ipv4.source.ParseAddress("192.168.1.1");
pkt.ipv4.destination.ParseAddress("192.168.1.2");
pkt.source.ParseAddress("02:00:00:00:00:01");
pkt.destination.ParseAddress("02:00:00:00:00:02");
pkt.CompletePacket();
output(pkt);
}