套接字缓冲区中的校验和字段

时间:2014-04-07 10:44:02

标签: network-programming checksum

我正在努力了解csum_startcsum_offsetstruct sk_buff字段的用途。

用Google搜索,我发现了以下定义:

csum_start是从skb->head的地址到校验和字段地址的偏移量。 csum_offset是从校验和的地址开头到结尾的偏移量。

  1. 这些字段何时实际使用?
  2. 如果通过NETIF_F_HW_CSUM将校验和卸载到设备驱动程序,那么在此上下文中如何使用/解释上述值?
  3. 对此有任何见解都非常感谢!

1 个答案:

答案 0 :(得分:0)

如果设备的功能设置为NETIF_F_HW_CSUM,则网络堆栈不会计算传输路径上的传输校验和。相反,它会通过将ip_summed设置为CHECKSUM_PARTIAL来告诉设备计算校验和。

设备应使用csum_start(或偶尔skb_checksum_start_offset(skb))作为起始位置并计算校验和直到数据包结束(套接字缓冲区中的len字段)。计算的校验和存储在csum_offset的{​​{1}}。