mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-29 22:26:44 +07:00
igb: Correctly get protocol information
We can't look at the socket to get protocol information. We should instead look directly at the packet, and hope there are no IPv6 option headers. Signed-off-by: Mitch Williams <mitch.a.williams@intel.com> Signed-off-by: Auke Kok <auke-jan.h.kok@intel.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
725e49c5da
commit
44b0cda375
@ -31,7 +31,6 @@
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/tcp.h>
|
||||
#include <linux/ipv6.h>
|
||||
#include <net/checksum.h>
|
||||
#include <net/ip6_checksum.h>
|
||||
@ -2484,10 +2483,24 @@ static inline bool igb_tx_csum_adv(struct igb_adapter *adapter,
|
||||
tu_cmd |= (E1000_TXD_CMD_DEXT | E1000_ADVTXD_DTYP_CTXT);
|
||||
|
||||
if (skb->ip_summed == CHECKSUM_PARTIAL) {
|
||||
if (skb->protocol == htons(ETH_P_IP))
|
||||
switch (skb->protocol) {
|
||||
case __constant_htons(ETH_P_IP):
|
||||
tu_cmd |= E1000_ADVTXD_TUCMD_IPV4;
|
||||
if (skb->sk && (skb->sk->sk_protocol == IPPROTO_TCP))
|
||||
tu_cmd |= E1000_ADVTXD_TUCMD_L4T_TCP;
|
||||
if (ip_hdr(skb)->protocol == IPPROTO_TCP)
|
||||
tu_cmd |= E1000_ADVTXD_TUCMD_L4T_TCP;
|
||||
break;
|
||||
case __constant_htons(ETH_P_IPV6):
|
||||
/* XXX what about other V6 headers?? */
|
||||
if (ipv6_hdr(skb)->nexthdr == IPPROTO_TCP)
|
||||
tu_cmd |= E1000_ADVTXD_TUCMD_L4T_TCP;
|
||||
break;
|
||||
default:
|
||||
if (unlikely(net_ratelimit()))
|
||||
dev_warn(&adapter->pdev->dev,
|
||||
"partial checksum but proto=%x!\n",
|
||||
skb->protocol);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
context_desc->type_tucmd_mlhl = cpu_to_le32(tu_cmd);
|
||||
|
Loading…
Reference in New Issue
Block a user