This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294NCPDT:LWIP ICMP 校验和

Guru**** 2032800 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/669947/tm4c1294ncpdt-lwip-icmp-checksum

器件型号:TM4C1294NCPDT

您好!  

我一直在尝试通过 LWIP 对定制的 TM4C 板实施 ping、但几乎没有成功。  

在 Wireshark 上执行跟踪操作后、我发现电路板接收到 ping 命令并做出响应、但将校验和保留为0 (所有这一切都在 Windows 10上完成)。  由于校验和为0、我的命令行中的响应 为"请求超时"。

因此、我查看了一些其他 LWIP 源、发现问题出在 icmp_input 函数中的 icmp.c (IPv4)源文件中。 当我尝试单步执行本节时、我可以看到校验和变为 具有值的 IP_OUTPUT_IF 并返回0。 我已经通过 IP_output_if 进行跟踪、找不到一个位置来修改通过有效载荷缓冲器传递的校验和。  

我还修改了 lwipopts.h LWIP_ICMP 定义为1、校验和选项中的所有校验和定义为1。  

此时、我卡在、希望获得一些帮助、以解决此校验和问题。 就我所能说的,这是我唯一把我的 ping 回应扣为人质的事情。   

参考代码:  

ip_output_if (p、ip_current_dest_addr ()、ip_HDRINCL、icmp_TTL、0、 IP_PROTO_ICMP、INP);// icmp.c 中的第223行


//
//  
//------ 校验和选项----------------------------------------------------
//从原来的更改,所有这些都被注释
//
#define CHECKSUM_GEN_IP 1.
#define CHECKSUM_GEN_UDP 1.
#define CHECKSUM_GEN_TCP 1.
#define CHECKSUM_CHECK_IP 1.
#define CHECKSUM_CHECK_UDP 1.
#define CHECKSUM_CHECK_TCP 1.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    LWIP 是第三方(TI 不做)软件、在 TivaWare 中提供方便。 您可以通过将 LWIP 问题发布到 LWIP 用户的邮件列表中找到更好的结果: lists.nongnu.org/.../lwip-users

    也就是说、在验证已连接校验和的数据包时、预期结果为0。
    请参阅 :www.roman10.net/.../
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您提供有关 LWIP 邮件列表的信息。

    就您的第二条评论而言、这与此问题无关、因为 ICMP 在 IP/TCP/UDP 层下有自己的校验和。 我很欣赏这些信息、但遗憾的是、这对当前问题没有帮助。

    Daniel
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否看到过以下内容:

    lists.gnu.org/.../msg00053.html
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Daniel NorRIS">我还修改了 lwipopts.h LWIP_ICMP 定义为1、校验和选项中的所有校验和都定义为1。[/引用]

    EMAC0 DMA 引擎 通过 硬件添加/验证校验和、除非在  DMA 引擎配置中禁用校验和。 您可以启用 LWIP1.4.1 IP 校验和、似乎调用 tcp_ip.c 或 ip.c。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Daniel、您好!

     我假设您的 PC 正在尝试向定制板发送 ping 命令。 是这样吗?

    您能否尝试其中一个 TivaWare 以太网示例(我使用了 enet_lwip)并使用 PC 对电路板执行 ping 操作? 我刚刚尝试过、下面是我在 Wireshark 上看到的内容。

     在第131号中、PC 尝试通过回显(ping)请求对 MCU 执行 ping 操作。 ping 请求中的校验和如下所示。

    在第134号中、MCU 按如下方式发送回波(ping 应答)。

    ICMP 是用于诊断的 Lwip 堆栈的一部分。 我甚至认为、如果没有定义 LWIP_ICMP、它在响应来自主机的回显请求时仍应起作用。  

    但是、如果您尝试在 MCU 中构建一个 ping 命令、那么我认为 ping 将在应用层中实现。 我认为 LwIP 堆栈中没有一个 API 可供您调用以发送 ICMP 消息。 我可能弄错了。 我建议您将您的问题发布到 LwIP 论坛、在该论坛中、LwIP 专家可以建议您是否尝试这样做。 我认为您应该能够在 IP 级别实施 ICMP 消息。