硬汉嵌入式论坛

 找回密码
 立即注册
查看: 771|回复: 4
收起左侧

以太网的ICMP校验和计算前为什么没有清0

[复制链接]

8

主题

52

回帖

76

积分

初级会员

积分
76
发表于 2024-10-8 16:06:40 | 显示全部楼层 |阅读模式
STM32F4以太网,DMA发送描述符在校验和插入控制时,有一个选项:“使能IP报头校验和以及有效负载校验和的计算与插入,并在硬件中计算伪报头校验和”。此类校验和计算三步曲,一是清0校验和初始值,二是校验和计算,三是加载校验和。在TCP/UDP时都完美执行了此三步曲,但在ICMP时第一步清0校验和初始值并未得到执行,而是要求输入的ICMP协议校验和值必须为0。不知道为什么这样设计?是有什么我不知道的原因吗?有哪位大神知道此GET?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115653
QQ
发表于 2024-10-8 16:37:50 | 显示全部楼层
楼主的这个看的是那个驱动或者手册上说的,我一直用的这个

全都开了,统一设计的

[C] 纯文本查看 复制代码
/* Driver Capabilities */
static const ARM_ETH_MAC_CAPABILITIES DriverCapabilities = {
  (EMAC_CHECKSUM_OFFLOAD != 0) ? 1U : 0U,   /* checksum_offload_rx_ip4  */
  (EMAC_CHECKSUM_OFFLOAD != 0) ? 1U : 0U,   /* checksum_offload_rx_ip6  */
  (EMAC_CHECKSUM_OFFLOAD != 0) ? 1U : 0U,   /* checksum_offload_rx_udp  */
  (EMAC_CHECKSUM_OFFLOAD != 0) ? 1U : 0U,   /* checksum_offload_rx_tcp  */
  (EMAC_CHECKSUM_OFFLOAD != 0) ? 1U : 0U,   /* checksum_offload_rx_icmp */
  (EMAC_CHECKSUM_OFFLOAD != 0) ? 1U : 0U,   /* checksum_offload_tx_ip4  */
  (EMAC_CHECKSUM_OFFLOAD != 0) ? 1U : 0U,   /* checksum_offload_tx_ip6  */
  (EMAC_CHECKSUM_OFFLOAD != 0) ? 1U : 0U,   /* checksum_offload_tx_udp  */
  (EMAC_CHECKSUM_OFFLOAD != 0) ? 1U : 0U,   /* checksum_offload_tx_tcp  */
  (EMAC_CHECKSUM_OFFLOAD != 0) ? 1U : 0U,   /* checksum_offload_tx_icmp */
  (ETH_MII != 0) ?
  ARM_ETH_INTERFACE_MII :
  ARM_ETH_INTERFACE_RMII,                   /* media_interface          */
  0U,                                       /* mac_address              */
  1U,                                       /* event_rx_frame           */
  1U,                                       /* event_tx_frame           */
  1U,                                       /* event_wakeup             */
  0U                                        /* precision_timer          */
#if (defined(ARM_ETH_MAC_API_VERSION) && (ARM_ETH_MAC_API_VERSION >= 0x201U))
, 0U                                        /* reserved bits            */
#endif
};


回复

使用道具 举报

8

主题

52

回帖

76

积分

初级会员

积分
76
 楼主| 发表于 2024-10-8 19:26:22 | 显示全部楼层
    我明白在以太网驱动和第三方软件之间进行适合的配置,可以规避此类问题。但不明白为什么ST这样设计,经过查询,F4,H7,H5都是此类设计。如果这是一个BUG,最多体现在F4上,后续的H7,H5应该很容易解决,但就是没有解决。所以担心是不是自己有哪个地方的知识没有掌握。
    IP手册上的描述:For ICMP-over-IPv4 packets, the Checksum field in the ICMP packet must always be 16'0000 in both modes, because pseudo-headers are not defined for such packets. If it does not equal 16'0000, an incorrect checksum may be inserted into the packet.
    哎,不明白为什么这种设计。这个设计导致L3层的TCP/UDP都没法硬件校验和了。否则就会PING不通,因此校验和失败。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115653
QQ
发表于 2024-10-9 09:55:24 | 显示全部楼层
shzdf123 发表于 2024-10-8 19:26
我明白在以太网驱动和第三方软件之间进行适合的配置,可以规避此类问题。但不明白为什么ST这样设计,经 ...

这个问题还真没留意过,后面我也对比其它厂家的看看。

这种的也正常,属于祖传设计,省钱,同一IP核,不用花钱买了。

勘误手册也看了,不是bug,他就是这么设计的。

下载.png
回复

使用道具 举报

8

主题

52

回帖

76

积分

初级会员

积分
76
 楼主| 发表于 2024-10-9 20:39:41 | 显示全部楼层
是的。我也看了IP核的资料,F4/H7/H5都是这种设计。好奇怪,这个就把硬件自动校验枪毙了,否则PING协议就不通了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-9 23:27 , Processed in 0.475712 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表