mirror of
https://github.com/apache/nuttx.git
synced 2026-05-28 11:56:10 +08:00
net: skip TCP/UDP pseudo-header checksum with hardware offload
When supporting hardware checksum offloading, the network protocol stack does not perform TCP/UDP pseudo-header checksum calculation. Skip TCP/UDP pseudo header checksum calculation in network protocol stack Signed-off-by: daichuan <daichuan@xiaomi.com>
This commit is contained in:
+8
-24
@@ -250,46 +250,30 @@ void udp_send(FAR struct net_driver_s *dev, FAR struct udp_conn_s *conn)
|
||||
#ifdef CONFIG_NET_UDP_CHECKSUMS
|
||||
/* Calculate UDP checksum. */
|
||||
|
||||
if ((dev->d_features & NETDEV_TX_CSUM) == 0)
|
||||
{
|
||||
#ifdef CONFIG_NET_IPv4
|
||||
#ifdef CONFIG_NET_IPv6
|
||||
if (IFF_IS_IPv4(dev->d_flags))
|
||||
if (IFF_IS_IPv4(dev->d_flags))
|
||||
#endif
|
||||
{
|
||||
if ((dev->d_features & NETDEV_TX_CSUM) == 0)
|
||||
{
|
||||
udp->udpchksum = ~udp_ipv4_chksum(dev);
|
||||
}
|
||||
else
|
||||
{
|
||||
uint16_t chksum = ipv4_upperlayer_header_chksum(dev,
|
||||
IP_PROTO_UDP);
|
||||
udp->udpchksum = HTONS(chksum);
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_NET_IPv4 */
|
||||
|
||||
#ifdef CONFIG_NET_IPv6
|
||||
#ifdef CONFIG_NET_IPv4
|
||||
else
|
||||
else
|
||||
#endif
|
||||
{
|
||||
if ((dev->d_features & NETDEV_TX_CSUM) == 0)
|
||||
{
|
||||
udp->udpchksum = ~udp_ipv6_chksum(dev);
|
||||
}
|
||||
else
|
||||
{
|
||||
uint16_t chksum = ipv6_upperlayer_header_chksum(dev,
|
||||
IP_PROTO_UDP,
|
||||
IPv6_HDRLEN);
|
||||
udp->udpchksum = HTONS(chksum);
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_NET_IPv6 */
|
||||
|
||||
if (udp->udpchksum == 0)
|
||||
{
|
||||
udp->udpchksum = 0xffff;
|
||||
if (udp->udpchksum == 0)
|
||||
{
|
||||
udp->udpchksum = 0xffff;
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_NET_UDP_CHECKSUMS */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user