【朝花夕拾】RT1060ICMP硬件checksum插入方法 一, 文章简介 ICMP(Internet Control Message Protocol,英特网控制报文协议),常用于网络的调试与维护. ICMP通常被认为是IP层协议的一部分,但从体系结构上,它是位于IP层之上。 图1 Ping命令使用的就是ICMP的查询报文,如果能ping成功,说明网卡、IP层、ICMP层是能正常通信的。 对于RT1060,可以支持ICMP的硬件checksum插入,所涉及的控制寄存器相关位为: 图2 那么,如何在现有的RT1060 LWIP SDK ping工程中加入ICMP的硬件checksum呢?SDK ping工程默认是使用软件checksum。如果要测试ICMP硬件checksum的插入,首先需要关闭软件checksum,然后才能通过配置RT1060 ENET IP的TACC寄存器中的IPCHK, PROCHK 位去使能硬件checksum。IPCHK控制的是IP头checksum,PROCHK控制的是messageprotocol checksum。 小编在测试的时候,遇到了一些坑,开始只是简单的使能了lwipopts.h中的CHECKSUM_BY_HARDWARE宏,认为该宏是直接控制所有的软硬件checksum选择,但是测试发现该宏只能去掉软件ICMP报文中的IP checksum,但是报文中的message protocol的checksum还是存在,这种情况只能测试IP硬件checksum的插入,无法测试messageprotocol 硬件checksum的插入,就像下图一样: 图 3 可以发现,报文中IP checksum已经关闭,但是message protocol的checksum依旧存在。所以本篇文章旨在如何在官方SDK lwip ping工程中实现ICMP硬件checksum的插入。
更多内容查看附件文档和代码 |