ovs bridge breaking TCP between two virtio net devices when checksum offload on
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
openvswitch (Ubuntu) |
Expired
|
Low
|
Unassigned |
Bug Description
== Comment: #0 - Gowrishankar Muthukrishnan - 2016-09-29 13:06:10 ==
---Problem Description---
Two kvm guests, each booted with a vnic (virtio_net) in ovs bridge in host seem
to fail in establishing TCP when virtio turned on for tcp checksum offload.
Where as, these guests are able to complete TCP when vnics are over linux
bridge in host.
tcpdump on destination guest that confirms SYN retransmission, in OVS case:
12:21:56.588835 52:54:c1:a2:7c:63 > 52:54:c1:a2:7c:53, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 64, id 49483, offset 0, flags [DF], proto TCP (6), length 60)
10.
12:21:57.588220 52:54:c1:a2:7c:63 > 52:54:c1:a2:7c:53, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 64, id 49484, offset 0, flags [DF], proto TCP (6), length 60)
10.
tcpdump on destination guest that confirms SYN/SYN-ACK/ACK , in bridge case:
12:34:53.140513 52:54:c1:a2:7c:64 > 52:54:c1:a2:7c:54, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 64, id 57464, offset 0, flags [DF], proto TCP (6), length 60)
10.
12:34:53.140729 52:54:c1:a2:7c:54 > 52:54:c1:a2:7c:64, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
10.1.126.2.22 > 10.1.126.3.41722: Flags [S.], cksum 0x1036 (incorrect -> 0xe19a), seq 3214677586, ack 1286151910, win 28960, options [mss 1460,sackOK,TS val 524786 ecr 523933,nop,wscale 7], length 0
12:34:53.141253 52:54:c1:a2:7c:64 > 52:54:c1:a2:7c:54, ethertype IPv4 (0x0800), length 66: (tos 0x0, ttl 64, id 57465, offset 0, flags [DF], proto TCP (6), length 52)
10.
---uname output---
Linux ip9-114-219-126gate 4.4.0-9136-generic #55-Ubuntu SMP Fri Aug 26 05:56:24 UTC 2016 ppc64le ppc64le ppc64le GNU/Linux
Machine Type = P8 LE
---Steps to Reproduce---
1. Create a ovs bridge "ovsbr0"
2. Create a kvm guest (preferably same as host - Ubuntu 16.10) carrying a vnic
(as shown below) in ovsbr0
<interface type='bridge'>
<mac address=
<source bridge='ovsbr0'/>
<virtualport type='openvswit
<model type='virtio'/>
</interface>
Similarly create another kvm guest but with vnic of different mac address.
3. Assign a static IP over vnic inside each guest.
For eg, if enp0s3 is vnic:
sudo ifconfig enp0s3 10.0.126.2/24 up (in guest 1)
sudo ifconfig enp0s3 10.0.126.3/24 up (in guest 2)
4. Ping and ensure ARP completes.
ping 10.0.126.3 (from guest 2)
5. Check tcp scum offload ON as by default.
ethtool -k enp0s3
Features for enp0s3:
rx-
tx-
tx-checksum-ipv4: off [fixed]
tx-checksum-
tx-checksum-ipv6: off [fixed]
tx-checksum-
tx-checksum-sctp: off [fixed]
6. Check if TCP establishes between two guests on above IPs, using nc (netcat).
nc 10.0.126.2 22
As you would not see "SSH-2.
confirms TCP over port did not establish.
You may run tcpdump on each port while running nc to confirm invalid
checksum received in tcp (as shown in problem description).
tags: | added: architecture-ppc64le bugnameltc-147080 severity-medium targetmilestone-inin--- |
Changed in ubuntu: | |
assignee: | nobody → Taco Screen team (taco-screen-team) |
affects: | ubuntu → openvswitch (Ubuntu) |
Changed in openvswitch (Ubuntu): | |
importance: | Undecided → Low |
Changed in openvswitch (Ubuntu): | |
assignee: | James Page (james-page) → nobody |
status: | New → Incomplete |
tags: | removed: bugnameltc-147080 severity-medium |
Hi,
I've had a very similar setup avail atm.
Running that in the guest gave me:
ethtool -k ens4' | grep check
rx-checksumming: on [fixed]
tx-checksum- ipv4: off [fixed]
tx-checksum- ip-generic: off [fixed]
tx-checksum- ipv6: off [fixed]
tx-checksum- fcoe-crc: off [fixed]
tx-checksum- sctp: off [fixed]
tx-checksumming: off
Just to clarify the default is "tx-checksumming: off" right - is it on for you by default?
Note: Guest and Host are Yakkety for me.