Activity log for bug #1840716

Date Who What changed Old value New value Message
2019-08-19 21:49:48 Jorge Niedbalski bug added bug
2019-08-19 21:50:13 Jorge Niedbalski description [Environment] OpenvSwitch Ubuntu Bionic [Description] The current netdev linux bridge implementation removes the tc rules for an existing ovs bridge port. This issue is reproducible without neutron with a bare ovs bridge + a libvirt definition. Consider the following ovs bridge. root@bionic-test:/home/ubuntu# ovs-vsctl show b936ab43-ba83-4aa0-825d-5975e8b87270 Bridge "ovs-br0" Port "ens7" Interface "ens7" Port "ovs-br0" Interface "ovs-br0" type: internal ovs_version: "2.9.2" root@bionic-test:/home/ubuntu# ip link 3: ens7: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master ovs-system state DOWN mode DEFAULT group default qlen 1000 link/ether 52:54:00:84:60:6e brd ff:ff:ff:ff:ff:ff 4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether ba:5b:46:3a:dd:ff brd ff:ff:ff:ff:ff:ff 5: ovs-br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/ether 3a:bf:0b:5c:87:4a brd ff:ff:ff:ff:ff:ff 16: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc htb master ovs-system state UNKNOWN mode DEFAULT group default qlen 1000 link/ether fe:54:00:ae:17:05 brd ff:ff:ff:ff:ff:ff root@bionic-test:/home/ubuntu# tc qdisc show dev vnet1 qdisc htb 1: root refcnt 2 r2q 10 default 1 direct_packets_stat 0 direct_qlen 1000 qdisc sfq 2: parent 1:1 limit 127p quantum 1514b depth 127 divisor 1024 perturb 10sec root@bionic-test:/home/ubuntu# tc class show dev vnet1 class htb 1:1 root leaf 2: prio rate 1024Kbit ceil 2048Kbit burst 256Kb cburst 1599b root@bionic-test:/home/ubuntu# tc filter show dev vnet1 parent ffff: root@bionic-test:/home/ubuntu# Following is the interface definition: <interface type='bridge'> <mac address='52:54:00:ae:17:05'/> <source bridge='ovs-br0'/> <virtualport type='openvswitch'> <parameters interfaceid='86814ca6-615b-41cd-8d85-4873638d1b66'/> </virtualport> <bandwidth> <inbound average='128' peak='256' burst='256'/> <outbound average='128' peak='256' burst='256'/> </bandwidth> <model type='rtl8139'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </interface> ---- 2nd case Through a direct linux bridge (not managed by ovs) <interface type='bridge'> <mac address='52:54:00:88:9d:0a'/> <source bridge='virbr0'/> <bandwidth> <inbound average='128' peak='256' burst='256'/> <outbound average='128' peak='256' burst='256'/> </bandwidth> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> root@bionic-test:/home/ubuntu# tc qdisc show dev vnet2 qdisc htb 1: root refcnt 2 r2q 10 default 1 direct_packets_stat 0 direct_qlen 1000 qdisc sfq 2: parent 1:1 limit 127p quantum 1514b depth 127 divisor 1024 perturb 10sec qdisc ingress ffff: parent ffff:fff1 ---------------- root@bionic-test:/home/ubuntu# tc class show dev vnet2 class htb 1:1 root leaf 2: prio rate 1024Kbit ceil 2048Kbit burst 256Kb cburst 1599b root@bionic-test:/home/ubuntu# tc filter show dev vnet2 parent ffff: filter protocol all pref 49152 u32 chain 0 filter protocol all pref 49152 u32 chain 0 fh 800: ht divisor 1 filter protocol all pref 49152 u32 chain 0 fh 800::800 order 2048 key ht 800 bkt 0 flowid :1 not_in_hw match 00000000/00000000 at 0 police 0x1 rate 1024Kbit burst 256Kb mtu 64Kb action drop overhead 0b ref 1 bind 1 [Suggested solution] If no tc rate limits have been provided for the port and there is an existing ingress qdisc already set that differs from provided limits, avoid resetting the existing ingress qdisc. [Environment] OpenvSwitch Ubuntu Bionic [Description] The current netdev linux bridge implementation removes the tc ingress qdisc for an existing ovs bridge port. This issue is reproducible without neutron with a bare ovs bridge + a libvirt definition. Consider the following ovs bridge. root@bionic-test:/home/ubuntu# ovs-vsctl show b936ab43-ba83-4aa0-825d-5975e8b87270 Bridge "ovs-br0" Port "ens7" Interface "ens7" Port "ovs-br0" Interface "ovs-br0" type: internal ovs_version: "2.9.2" root@bionic-test:/home/ubuntu# ip link 3: ens7: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master ovs-system state DOWN mode DEFAULT group default qlen 1000 link/ether 52:54:00:84:60:6e brd ff:ff:ff:ff:ff:ff 4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether ba:5b:46:3a:dd:ff brd ff:ff:ff:ff:ff:ff 5: ovs-br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/ether 3a:bf:0b:5c:87:4a brd ff:ff:ff:ff:ff:ff 16: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc htb master ovs-system state UNKNOWN mode DEFAULT group default qlen 1000 link/ether fe:54:00:ae:17:05 brd ff:ff:ff:ff:ff:ff root@bionic-test:/home/ubuntu# tc qdisc show dev vnet1 qdisc htb 1: root refcnt 2 r2q 10 default 1 direct_packets_stat 0 direct_qlen 1000 qdisc sfq 2: parent 1:1 limit 127p quantum 1514b depth 127 divisor 1024 perturb 10sec root@bionic-test:/home/ubuntu# tc class show dev vnet1 class htb 1:1 root leaf 2: prio rate 1024Kbit ceil 2048Kbit burst 256Kb cburst 1599b root@bionic-test:/home/ubuntu# tc filter show dev vnet1 parent ffff: root@bionic-test:/home/ubuntu# Following is the interface definition: <interface type='bridge'> <mac address='52:54:00:ae:17:05'/> <source bridge='ovs-br0'/> <virtualport type='openvswitch'> <parameters interfaceid='86814ca6-615b-41cd-8d85-4873638d1b66'/> </virtualport> <bandwidth> <inbound average='128' peak='256' burst='256'/> <outbound average='128' peak='256' burst='256'/> </bandwidth> <model type='rtl8139'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </interface> ---- 2nd case Through a direct linux bridge (not managed by ovs) <interface type='bridge'> <mac address='52:54:00:88:9d:0a'/> <source bridge='virbr0'/> <bandwidth> <inbound average='128' peak='256' burst='256'/> <outbound average='128' peak='256' burst='256'/> </bandwidth> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> root@bionic-test:/home/ubuntu# tc qdisc show dev vnet2 qdisc htb 1: root refcnt 2 r2q 10 default 1 direct_packets_stat 0 direct_qlen 1000 qdisc sfq 2: parent 1:1 limit 127p quantum 1514b depth 127 divisor 1024 perturb 10sec qdisc ingress ffff: parent ffff:fff1 ---------------- root@bionic-test:/home/ubuntu# tc class show dev vnet2 class htb 1:1 root leaf 2: prio rate 1024Kbit ceil 2048Kbit burst 256Kb cburst 1599b root@bionic-test:/home/ubuntu# tc filter show dev vnet2 parent ffff: filter protocol all pref 49152 u32 chain 0 filter protocol all pref 49152 u32 chain 0 fh 800: ht divisor 1 filter protocol all pref 49152 u32 chain 0 fh 800::800 order 2048 key ht 800 bkt 0 flowid :1 not_in_hw match 00000000/00000000 at 0 police 0x1 rate 1024Kbit burst 256Kb mtu 64Kb action drop overhead 0b ref 1 bind 1 [Suggested solution] If no tc rate limits have been provided for the port and there is an existing ingress qdisc already set that differs from provided limits, avoid resetting the existing ingress qdisc.
2019-08-19 21:55:35 Jorge Niedbalski bug task added openvswitch