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