mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
ibmveth: Remove condition to recompute TCP header checksum.
In some OVS environments the TCP pseudo header checksum may need to be
recomputed. Currently this is only done when the interface instance is
configured for "Trunk Mode". We found the issue also occurs in some
Kubernetes environments, these environments do not use "Trunk Mode",
therefor the condition is removed.
Performance tests with this change show only a fractional decrease in
throughput (< 0.2%).
Fixes: 7525de2516
("ibmveth: Set CHECKSUM_PARTIAL if NULL TCP CSUM.")
Signed-off-by: David Wilder <dwilder@us.ibm.com>
Reviewed-by: Nick Child <nnac123@linux.ibm.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f9a1d3216a
commit
51e7a66666
1 changed files with 12 additions and 13 deletions
|
@ -1303,24 +1303,23 @@ static void ibmveth_rx_csum_helper(struct sk_buff *skb,
|
|||
* the user space for finding a flow. During this process, OVS computes
|
||||
* checksum on the first packet when CHECKSUM_PARTIAL flag is set.
|
||||
*
|
||||
* So, re-compute TCP pseudo header checksum when configured for
|
||||
* trunk mode.
|
||||
* So, re-compute TCP pseudo header checksum.
|
||||
*/
|
||||
|
||||
if (iph_proto == IPPROTO_TCP) {
|
||||
struct tcphdr *tcph = (struct tcphdr *)(skb->data + iphlen);
|
||||
|
||||
if (tcph->check == 0x0000) {
|
||||
/* Recompute TCP pseudo header checksum */
|
||||
if (adapter->is_active_trunk) {
|
||||
tcphdrlen = skb->len - iphlen;
|
||||
if (skb_proto == ETH_P_IP)
|
||||
tcph->check =
|
||||
~csum_tcpudp_magic(iph->saddr,
|
||||
iph->daddr, tcphdrlen, iph_proto, 0);
|
||||
else if (skb_proto == ETH_P_IPV6)
|
||||
tcph->check =
|
||||
~csum_ipv6_magic(&iph6->saddr,
|
||||
&iph6->daddr, tcphdrlen, iph_proto, 0);
|
||||
}
|
||||
tcphdrlen = skb->len - iphlen;
|
||||
if (skb_proto == ETH_P_IP)
|
||||
tcph->check =
|
||||
~csum_tcpudp_magic(iph->saddr,
|
||||
iph->daddr, tcphdrlen, iph_proto, 0);
|
||||
else if (skb_proto == ETH_P_IPV6)
|
||||
tcph->check =
|
||||
~csum_ipv6_magic(&iph6->saddr,
|
||||
&iph6->daddr, tcphdrlen, iph_proto, 0);
|
||||
/* Setup SKB fields for checksum offload */
|
||||
skb_partial_csum_set(skb, iphlen,
|
||||
offsetof(struct tcphdr, check));
|
||||
|
|
Loading…
Reference in a new issue