ixgbe: Fix checksum error when using stacked vlan
When a skb has multiple vlans and it is CHECKSUM_PARTIAL, ixgbe_tx_csum() fails to get the network protocol and checksum related descriptor fields are not configured correctly because skb->protocol doesn't show the L3 protocol in this case. Use vlan_get_protocol() to get the proper network protocol. Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
72b1405964
commit
0213668f06
@@ -7227,11 +7227,11 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,
|
|||||||
if (!vhdr)
|
if (!vhdr)
|
||||||
goto out_drop;
|
goto out_drop;
|
||||||
|
|
||||||
protocol = vhdr->h_vlan_encapsulated_proto;
|
|
||||||
tx_flags |= ntohs(vhdr->h_vlan_TCI) <<
|
tx_flags |= ntohs(vhdr->h_vlan_TCI) <<
|
||||||
IXGBE_TX_FLAGS_VLAN_SHIFT;
|
IXGBE_TX_FLAGS_VLAN_SHIFT;
|
||||||
tx_flags |= IXGBE_TX_FLAGS_SW_VLAN;
|
tx_flags |= IXGBE_TX_FLAGS_SW_VLAN;
|
||||||
}
|
}
|
||||||
|
protocol = vlan_get_protocol(skb);
|
||||||
|
|
||||||
if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
|
if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
|
||||||
adapter->ptp_clock &&
|
adapter->ptp_clock &&
|
||||||
|
Reference in New Issue
Block a user