Note: This bug is displayed in read-only format because the product is no longer active in Red Hat Bugzilla.
The FDP team is no longer accepting new bugs in Bugzilla. Please report your issues under FDP project in Jira. Thanks.

Bug 2139632

Summary: OVS fails to set qdisc on tap interfaces with "noqueue" qdisc
Product: Red Hat Enterprise Linux Fast Datapath Reporter: OvS team <ovs-bugzilla>
Component: openvswitch2.13Assignee: Ilya Maximets <i.maximets>
Status: CLOSED EOL QA Contact: Rick Alongi <ralongi>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: FDP 22.DCC: ctrautma, jhsiao, ralongi
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: openvswitch2.13-2.13.0-170.el7fdp Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2024-03-07 10:09:59 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description OvS team 2022-11-03 06:19:56 UTC
+++ This bug was initially created as a clone of Bug #2138339 +++

Description of problem:
Libvirt since version 6.9.0 (see https://www.libvirt.org/news.html#v6-9-0-2020-11-02) is by default setting "noqueue" qdisc for tap interfaces. So newly created tap device looks in tc like:

qdisc noqueue 8007: dev tap20326cf2-f1 root refcnt 2

When qos and queue is set for such interface in ovs, e.g. with commands like:

ovs-vsctl -- set port tap20326cf2-f1 qos=@newqos -- --id=@newqos create qos type=linux-htb other-config:max-rate=1000000 queues:0=@newqueue -- --id=@newqueue create queue other-config:burst=800000 other-config:max-rate=1000000

OVS fails to create htb qdisc for this interface.

AFAIU ovs, to create proper htb qdisc is doing something like:

tc qdisc add dev tap20326cf2-f1 root handle 1: htb default 100

and this ends up with error like:

Error: NLM_F_REPLACE needed to override.

OVS should first delete existing qdisc with function tc_del_qdisc (https://github.com/openvswitch/ovs/blob/850e639021125c3646effa0eae9e422082ade2ca/lib/netdev-linux.c#L6127) but it not happens. Probably because this function is just trying to delete qdisc with handle "1:0" even if doc says that it's doing equivalent to "tc qdisc del dev <name> root".

Version-Release number of selected component (if applicable):

I checked on:
openvswitch2.15-2.15.0-109.el8fdp.x86_64
and
openvswitch2.17-2.17.0-59.el8fdp.x86_64

How reproducible:
Always

Steps to Reproduce:
1. Spawn VM with libvirt (e.g. using OpenStack)
2. Create qos and queue for tap port in ovs:

ovs-vsctl -- set port tap20326cf2-f1 qos=@newqos -- --id=@newqos create qos type=linux-htb other-config:max-rate=1000000 queues:0=@newqueue -- --id=@newqueue create queue other-config:burst=800000 other-config:max-rate=1000000

or use neutron qos ingress bandwith limit rule to create it automatically by neutron-openvswitch-agent.
3. check if htb qdisc is created for tap port

Actual results:
tap interface still have "noqueue" qdisc configured

Expected results:
tap interface should have "htb" qdisc configured

Additional info:

Comment 1 OvS team 2022-11-03 06:19:59 UTC
* Wed Nov 02 2022 Open vSwitch CI <ovs-ci> - 2.13.0-170
- Merging upstream branch-2.13 [RH git: 0ad143d37d]
    Commit list:
    bc2dfd7a63 netdev-linux: Fix inability to apply QoS on ports with custom qdiscs. (#2138339)
    b397eb8c8e vswitch.xml: Fix the name of rstp-path-cost option.
    7c9bdf0ba5 bond: Fix crash while logging not yet enabled member.