Public bug reported:

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

** Affects: openvswitch (Ubuntu)
     Importance: Undecided
         Status: New

** Description changed:

  [Environment]
  
- OpenvSwitch 
+ OpenvSwitch
  Ubuntu Bionic
  
  [Description]
  
- The current netdev linux bridge implementation removes the tc rules for
- an existing ovs bridge port.
+ 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.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1840716

Title:
  Existing ingress qdisc gets removed from port

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/openvswitch/+bug/1840716/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to