Existing ingress qdisc gets removed from port

Bug #1840716 reported by Jorge Niedbalski
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
openvswitch
New
Undecided
Unassigned
openvswitch (Ubuntu)
New
Undecided
Unassigned

Bug Description

[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.

description: updated
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.