Hi Lorenzo,

I find the ovn.at test to not be very exhaustive. It seems to only test the following:

* Records exist in the OVS database when QoS is added in full to a logical switch port. * Records do not exist in the OVS database when QoS is removed in full from a logical switch port or a logical switch port is deleted.

This doesn't test any of the following:
* Invalid configuration (e.g. What happens if min_rate > max_rate?).
* Partial configuration (e.g. What happens if only min_rate is configured on a logical switch port, but nothing else is? What happens if QoS is completely configured on a vif but the localnet port doesn't have its network_name set?) * Partial change (e.g. what happens when QoS is configured successfully, but then the min_rate is removed from the LSP?)

Also, someone can speak up if they disagree with me on this, but I think the system-ovn.at test should be removed (including the pre-existing parts). From OVN's perspective, once QoS has been successfully configured in the OVS DB, we're done. We shouldn't care about the implementation details within OVS. OVS could switch from tc to something else and we shouldn't have our tests suddenly fail because of that. If we really wanted to have a system test, a better test would be to send traffic and ensure the configured bandwidth and burst are applied as expected. This way, no matter the implementation within OVS, we can ensure that the outcome is what we expect. Having said that, I don't think we need to add such a system test as part of this patch series since presumably this should be tested already at the lower layers (e.g. OVS and/or tc). However, I think it would benefit us to have such a test as part of a later change.

See below for one more comment from me.

On 5/15/23 06:03, Lorenzo Bianconi wrote:
This patch allows to apply QoS rules on the localnet port related to
logical switch ports running on the same datapath. Considering the
following netowrk configuration:

LSP{0,1} -- LogicalSwitch -- Localnet0

It is possible to apply the following QoS rules on Localnet0 on egress traffic
entering the cluster from LSP{0,1}:
- LSP0: min-rate r0, max_rate R0
- LSP1: min-rate r1, max_rate R1

Acked-By: Ihar Hrachyshka <[email protected]>
Tested-by: Rodolfo Alonso <[email protected]>
Signed-off-by: Lorenzo Bianconi <[email protected]>
---
  controller/binding.c     |   6 +-
  northd/northd.c          |  26 +++++++--
  northd/ovn-northd.8.xml  |  12 ++++
  tests/ovn-northd.at      |   2 +
  tests/ovn-performance.at |   5 --
  tests/ovn.at             | 121 +++++++++++++++++++++++++++++++++++++++
  tests/system-ovn.at      |  86 +++++++++++++++++++++++++++-
  7 files changed, 242 insertions(+), 16 deletions(-)

diff --git a/controller/binding.c b/controller/binding.c
index 9ee145b54..931db8068 100644
--- a/controller/binding.c
+++ b/controller/binding.c
@@ -202,9 +202,9 @@ get_qos_egress_port_interface(struct shash *bridge_mappings,
                  continue;
              }
- bool is_egress_iface = smap_get_bool(&iface->external_ids,
-                                                 "ovn-egress-iface", false);
-            if (is_egress_iface) {
+            if (smap_get_bool(&iface->external_ids,
+                              "ovn-egress-iface", false) ||
+                !strcmp(iface->type, "")) {
                  *pport = port;
                  return iface;
              }
diff --git a/northd/northd.c b/northd/northd.c
index 53217347d..80aad25a0 100644
--- a/northd/northd.c
+++ b/northd/northd.c
@@ -5784,15 +5784,29 @@ build_lswitch_port_sec_op(struct ovn_port *op, struct 
hmap *lflows,
                                            ds_cstr(match), ds_cstr(actions),
                                            op->key, &op->nbsp->header_);
+ if (!lsp_is_localnet(op->nbsp) && !op->od->n_localnet_ports) {
+            return;
+        }
+
+        ds_clear(actions);
+        ds_put_format(actions, "set_queue(%s); output;", queue_id);
+
+        ds_clear(match);
          if (lsp_is_localnet(op->nbsp)) {
-            ds_clear(match);
-            ds_clear(actions);
              ds_put_format(match, "outport == %s", op->json_key);
-            ds_put_format(actions, "set_queue(%s); output;", queue_id);
              ovn_lflow_add_with_lport_and_hint(lflows, op->od,
-                                            S_SWITCH_OUT_APPLY_PORT_SEC, 100,
-                                            ds_cstr(match), ds_cstr(actions),
-                                            op->key, &op->nbsp->header_);
+                                              S_SWITCH_OUT_APPLY_PORT_SEC, 100,
+                                              ds_cstr(match), ds_cstr(actions),
+                                              op->key, &op->nbsp->header_);
+        } else if (op->od->n_localnet_ports) {
+            ds_put_format(match, "outport == %s && inport == %s",
+                          op->od->localnet_ports[0]->json_key,
+                          op->json_key);
+            ovn_lflow_add_with_lport_and_hint(lflows, op->od,
+                    S_SWITCH_OUT_APPLY_PORT_SEC, 110,
+                    ds_cstr(match), ds_cstr(actions),
+                    op->od->localnet_ports[0]->key,
+                    &op->od->localnet_ports[0]->nbsp->header_);
          }
      }
  }
diff --git a/northd/ovn-northd.8.xml b/northd/ovn-northd.8.xml
index 70153dc9e..7da912da3 100644
--- a/northd/ovn-northd.8.xml
+++ b/northd/ovn-northd.8.xml
@@ -2223,6 +2223,18 @@ output;
      </p>
<ul>
+      <li>
+        <p>
+        For each port configured with egress qos in the
+        <ref column="options:qdisc_queue_id" table="Logical_Switch_Port"
+        db="OVN_Northbound"/> column of <ref table="Logical_Switch_Port"
+        db="OVN_Northbound"/>, running a localnet port on the same logical
+        switch, a priority 110 flow is added which matches on the localnet
+        <code>outport</code> and on the port <code>inport</code> and
+        applies the action <code>set_queue(id); output;"</code>.
+        </p>
+      </li>
+
        <li>
          <p>
          For each localnet port configured with egress qos in the
diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at
index 047b8b6ad..8005c09b8 100644
--- a/tests/ovn-northd.at
+++ b/tests/ovn-northd.at
@@ -8065,6 +8065,7 @@ sort | sed 's/table=../table=??/' ], [0], [dnl
    table=??(ls_out_check_port_sec), priority=0    , match=(1), 
action=(reg0[[15]] = check_out_port_sec(); next;)
    table=??(ls_out_check_port_sec), priority=100  , match=(eth.mcast), 
action=(reg0[[15]] = 0; next;)
    table=??(ls_out_apply_port_sec), priority=0    , match=(1), action=(output;)
+  table=??(ls_out_apply_port_sec), priority=110  , match=(outport == "localnetport" && 
inport == "sw0p2"), action=(set_queue(10); output;)
    table=??(ls_out_apply_port_sec), priority=50   , match=(reg0[[15]] == 1), 
action=(drop;)
  ])
@@ -8095,6 +8096,7 @@ sort | sed 's/table=../table=??/' ], [0], [dnl
    table=??(ls_out_check_port_sec), priority=100  , match=(eth.mcast), 
action=(reg0[[15]] = 0; next;)
    table=??(ls_out_apply_port_sec), priority=0    , match=(1), action=(output;)
    table=??(ls_out_apply_port_sec), priority=100  , match=(outport == 
"localnetport"), action=(set_queue(10); output;)
+  table=??(ls_out_apply_port_sec), priority=110  , match=(outport == "localnetport" && 
inport == "sw0p2"), action=(set_queue(10); output;)
    table=??(ls_out_apply_port_sec), priority=50   , match=(reg0[[15]] == 1), 
action=(drop;)
  ])
diff --git a/tests/ovn-performance.at b/tests/ovn-performance.at
index 8ac0a392c..ba329f0f6 100644
--- a/tests/ovn-performance.at
+++ b/tests/ovn-performance.at
@@ -559,11 +559,6 @@ OVN_CONTROLLER_EXPECT_NO_HIT(
      [ovn-nbctl --wait=hv set Logical_Switch_Port ln-public 
options:qos_burst=1000]
  )
-OVN_CONTROLLER_EXPECT_HIT(
-    [hv3], [lflow_run],
-    [as hv3 ovs-vsctl set interface vgw3 external-ids:ovn-egress-iface=true]
-)
-
  ovn-nbctl --wait=hv meter-add meter0 drop 100 pktps 10
OVN_CONTROLLER_EXPECT_NO_HIT(
diff --git a/tests/ovn.at b/tests/ovn.at
index 2ba7c7ce5..625e7814b 100644
--- a/tests/ovn.at
+++ b/tests/ovn.at
@@ -35659,3 +35659,124 @@ check test "$current_id2" = "$prev_id2"
  OVN_CLEANUP([hv1])
  AT_CLEANUP
  ])
+
+OVN_FOR_EACH_NORTHD([
+AT_SETUP([OVN QoS])
+ovn_start
+
+check ovn-nbctl ls-add ls
+check ovn-nbctl lsp-add ls public
+check ovn-nbctl lsp-set-addresses public unknown
+check ovn-nbctl lsp-set-type public localnet
+check ovn-nbctl lsp-set-options public network_name=phys
+net_add n
+
+# two hypervisors, each connected to the same network
+for i in 1 2; do
+    sim_add hv-$i
+    as hv-$i
+    ovs-vsctl add-br br-phys
+    ovs-vsctl set open . external-ids:ovn-bridge-mappings=phys:br-phys
+    ovn_attach n br-phys 192.168.0.$i
+done
+
+for i in 1 2; do
+    check ovn-nbctl lsp-add ls lsp$i
+    check ovn-nbctl lsp-set-addresses lsp$i f0:00:00:00:00:0$i
+done
+
+for i in 1 2; do
+    as hv-$i
+    ovs-vsctl add-port br-int vif$i -- set Interface vif$i 
external-ids:iface-id=lsp$i \
+                                  ofport-request=$i
+    OVS_WAIT_UNTIL([test x`ovn-nbctl lsp-get-up lsp$i` = xup])
+
+    # Patch port might be created after ports are reported up
+    # Wait for a flow outputing to patch port
+    OVN_WAIT_PATCH_PORT_FLOWS(["public"], ["hv-$i"])
+done
+
+check ovn-nbctl --wait=hv set Logical_Switch_Port lsp1 
options:qos_min_rate=200000

Throughout this test, --wait=hv is used too much. We don't need to wait for the change to get propagated to the hypervisors after every ovn-nbctl call. We can either:

1) Only apply it to the final call in a chain of ovn-nbctl commands.
2) Do away with it entirely since we're using OVS_WAIT_UNTIL afterwards anyway.

+check ovn-nbctl --wait=hv set Logical_Switch_Port lsp1 
options:qos_max_rate=350000
+check ovn-nbctl --wait=hv set Logical_Switch_Port lsp1 
options:qos_burst=3000000
+
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list qos | grep -c linux-htb) -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'min-rate="200000"') -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'max-rate="350000"') -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'burst="3000000"') -eq 1])
+
+check ovn-nbctl --wait=hv set Logical_Switch_Port lsp2 
options:qos_min_rate=400000
+check ovn-nbctl --wait=hv set Logical_Switch_Port lsp2 
options:qos_max_rate=500000
+check ovn-nbctl --wait=hv set Logical_Switch_Port lsp2 
options:qos_burst=3000000
+
+OVS_WAIT_UNTIL([test $(as hv-2 ovs-vsctl list qos | grep -c linux-htb) -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-2 ovs-vsctl list queue | grep -c 
'min-rate="400000"') -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-2 ovs-vsctl list queue | grep -c 
'max-rate="500000"') -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-2 ovs-vsctl list queue | grep -c 
'burst="3000000"') -eq 1])
+
+check ovn-nbctl lsp-add ls lsp3
+check ovn-nbctl lsp-set-addresses lsp3 f0:00:00:00:00:03
+as hv-1
+ovs-vsctl add-port br-int vif3 -- \
+    set Interface vif3 external-ids:iface-id=lsp3 \
+    ofport-request=3
+OVS_WAIT_UNTIL([test x`ovn-nbctl lsp-get-up lsp3` = xup])
+
+check ovn-nbctl --wait=hv set Logical_Switch_Port lsp3 
options:qos_min_rate=700000
+check ovn-nbctl --wait=hv set Logical_Switch_Port lsp3 
options:qos_max_rate=800000
+check ovn-nbctl --wait=hv set Logical_Switch_Port lsp3 
options:qos_burst=9000000
+
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list qos | grep -c linux-htb) -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'min-rate="200000"') -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'max-rate="350000"') -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'burst="3000000"') -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'min-rate="700000"') -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'max-rate="800000"') -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'burst="9000000"') -eq 1])
+
+check ovn-nbctl --wait=hv remove Logical_Switch_Port lsp3 options 
qos_min_rate=700000
+check ovn-nbctl --wait=hv remove Logical_Switch_Port lsp3 options 
qos_max_rate=800000
+check ovn-nbctl --wait=hv remove Logical_Switch_Port lsp3 options 
qos_burst=9000000
+
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list qos | grep -c linux-htb) -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'min-rate="200000"') -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'max-rate="350000"') -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'burst="3000000"') -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'min-rate="700000"') -eq 0])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'max-rate="800000"') -eq 0])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'burst="9000000"') -eq 0])
+
+check ovn-nbctl --wait=hv set Logical_Switch_Port lsp2 
options:qos_min_rate=410000
+OVS_WAIT_UNTIL([test $(as hv-2 ovs-vsctl list queue | grep -c 
'min-rate="410000"') -eq 1])
+
+check ovn-nbctl --wait=hv remove Logical_Switch_Port lsp2 options 
qos_min_rate=410000
+check ovn-nbctl --wait=hv remove Logical_Switch_Port lsp2 options 
qos_max_rate=500000
+check ovn-nbctl --wait=hv remove Logical_Switch_Port lsp2 options 
qos_burst=3000000
+
+OVS_WAIT_UNTIL([test $(as hv-2 ovs-vsctl list qos | grep -c linux-htb) -eq 0])
+OVS_WAIT_UNTIL([test $(as hv-2 ovs-vsctl list queue | grep -c 
'min-rate="410000"') -eq 0])
+OVS_WAIT_UNTIL([test $(as hv-2 ovs-vsctl list queue | grep -c 
'max-rate="500000"') -eq 0])
+OVS_WAIT_UNTIL([test $(as hv-2 ovs-vsctl list queue | grep -c 
'burst="3000000"') -eq 0])
+
+check ovn-nbctl --wait=hv lsp-del lsp1
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list qos | grep -c linux-htb) -eq 0])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'min-rate="200000"') -eq 0])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'max-rate="350000"') -eq 0])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'burst="3000000"') -eq 0])
+
+check ovn-nbctl --wait=hv set Logical_Switch_Port public 
options:qos_min_rate=100000
+check ovn-nbctl --wait=hv set Logical_Switch_Port public 
options:qos_max_rate=200000
+check ovn-nbctl --wait=hv set Logical_Switch_Port public 
options:qos_burst=3000000
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list qos | grep -c linux-htb) -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'min-rate="100000"') -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'max-rate="200000"') -eq 1])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'burst="3000000"') -eq 1])
+
+check ovn-nbctl --wait=hv lsp-del public
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list qos | grep -c linux-htb) -eq 0])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'min-rate="100000"') -eq 0])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'max-rate="200000"') -eq 0])
+OVS_WAIT_UNTIL([test $(as hv-1 ovs-vsctl list queue | grep -c 
'burst="3000000"') -eq 0])
+
+AT_CLEANUP
+])
diff --git a/tests/system-ovn.at b/tests/system-ovn.at
index a4387349c..8fe8e4d28 100644
--- a/tests/system-ovn.at
+++ b/tests/system-ovn.at
@@ -6553,6 +6553,11 @@ ADD_VETH(sw01, sw01, br-int, "192.168.1.2/24", 
"f0:00:00:01:02:03")
  ovn-nbctl lsp-add sw0 sw01 \
      -- lsp-set-addresses sw01 "f0:00:00:01:02:03 192.168.1.2"
+ADD_NAMESPACES(sw02)
+ADD_VETH(sw02, sw02, br-int, "192.168.1.3/24", "f0:00:00:01:02:44")
+ovn-nbctl lsp-add sw0 sw02 \
+    -- lsp-set-addresses sw02 "f0:00:00:01:02:44 192.168.1.3"
+
  ovn-nbctl ls-add sw1
ADD_NAMESPACES(sw11)
@@ -6560,6 +6565,11 @@ ADD_VETH(sw11, sw11, br-int, "192.168.4.2/24", 
"f0:00:00:01:04:03")
  ovn-nbctl lsp-add sw1 sw11 \
      -- lsp-set-addresses sw11 "f0:00:00:01:04:03 192.168.4.2"
+ADD_NAMESPACES(sw12)
+ADD_VETH(sw12, sw12, br-int, "192.168.4.3/24", "f0:00:00:03:04:03")
+ovn-nbctl lsp-add sw1 sw12 \
+    -- lsp-set-addresses sw11 "f0:00:00:03:04:03 192.168.4.3"
+
  ADD_NAMESPACES(public)
  ADD_VETH(public, public, br-public, "192.168.2.2/24", "f0:00:00:01:02:05")
  AT_CHECK([ovs-vsctl remove interface ovs-public external-ids iface-id=public])
@@ -6582,12 +6592,10 @@ ovn-nbctl lsp-add sw1 ext \
  AT_CHECK([ovn-nbctl set Logical_Switch_Port public 
options:qos_min_rate=200000])
  AT_CHECK([ovn-nbctl set Logical_Switch_Port public 
options:qos_max_rate=300000])
  AT_CHECK([ovn-nbctl set Logical_Switch_Port public options:qos_burst=3000000])
-AT_CHECK([ovs-vsctl set interface ovs-public 
external-ids:ovn-egress-iface=true])
AT_CHECK([ovn-nbctl set Logical_Switch_Port ext options:qos_min_rate=400000])
  AT_CHECK([ovn-nbctl set Logical_Switch_Port ext options:qos_max_rate=600000])
  AT_CHECK([ovn-nbctl set Logical_Switch_Port ext options:qos_burst=6000000])
-AT_CHECK([ovs-vsctl set interface ovs-ext external-ids:ovn-egress-iface=true])
OVS_WAIT_UNTIL([tc qdisc show | grep -q 'htb 1: dev ovs-public'])
  OVS_WAIT_UNTIL([tc class show dev ovs-public | \
@@ -6634,6 +6642,80 @@ AT_CHECK([ovn-nbctl remove Logical_Switch_Port public 
options qos_burst=6000000]
OVS_WAIT_UNTIL([test "$(tc qdisc show | grep 'htb 1: dev ovs-public')" = ""]) +AT_CHECK([ovn-nbctl set Logical_Switch_Port sw01 options:qos_min_rate=200000])
+AT_CHECK([ovn-nbctl set Logical_Switch_Port sw01 options:qos_max_rate=350000])
+AT_CHECK([ovn-nbctl set Logical_Switch_Port sw01 options:qos_burst=3000000])
+
+AT_CHECK([ovn-nbctl set Logical_Switch_Port sw11 options:qos_min_rate=400000])
+AT_CHECK([ovn-nbctl set Logical_Switch_Port sw11 options:qos_max_rate=700000])
+AT_CHECK([ovn-nbctl set Logical_Switch_Port sw11 options:qos_burst=6000000])
+
+OVS_WAIT_UNTIL([tc qdisc show | grep -q 'htb 1: dev ovs-public'])
+OVS_WAIT_UNTIL([tc class show dev ovs-public | \
+                grep -q 'class htb .* rate 200Kbit ceil 350Kbit burst 375000b 
cburst 374999b'])
+
+OVS_WAIT_UNTIL([tc qdisc show | grep -q 'htb 1: dev ovs-ext'])
+OVS_WAIT_UNTIL([tc class show dev ovs-ext | \
+                grep -q 'class htb .* prio 0 rate 400Kbit ceil 700Kbit burst 
750000b cburst 749999b'])
+
+AT_CHECK([ovn-nbctl set Logical_Switch_Port sw02 options:qos_min_rate=300000])
+AT_CHECK([ovn-nbctl set Logical_Switch_Port sw02 options:qos_max_rate=500000])
+AT_CHECK([ovn-nbctl set Logical_Switch_Port sw02 options:qos_burst=3000000])
+
+OVS_WAIT_UNTIL([tc class show dev ovs-public | \
+                grep -q 'class htb .* prio 0 rate 300Kbit ceil 500Kbit burst 
375000b cburst 375000b'])
+
+AT_CHECK([ovn-nbctl set Logical_Switch_Port sw12 options:qos_min_rate=400000])
+AT_CHECK([ovn-nbctl set Logical_Switch_Port sw12 options:qos_max_rate=500000])
+AT_CHECK([ovn-nbctl set Logical_Switch_Port sw12 options:qos_burst=3000000])
+
+OVS_WAIT_UNTIL([tc class show dev ovs-ext | \
+                grep -q 'class htb .* prio 0 rate 400Kbit ceil 500Kbit burst 
375000b cburst 375000b'])
+
+AT_CHECK([ovn-nbctl remove Logical_Switch_Port sw02 options 
qos_min_rate=300000])
+AT_CHECK([ovn-nbctl remove Logical_Switch_Port sw02 options 
qos_max_rate=500000])
+AT_CHECK([ovn-nbctl remove Logical_Switch_Port sw02 options qos_burst=3000000])
+
+OVS_WAIT_UNTIL([tc qdisc show | grep -q 'htb 1: dev ovs-public'])
+OVS_WAIT_UNTIL([tc class show dev ovs-public | \
+                grep -q 'class htb .* rate 200Kbit ceil 350Kbit burst 375000b 
cburst 374999b'])
+OVS_WAIT_UNTIL([test "$(tc class show dev ovs-public | \
+                grep 'class htb .* prio 0 rate 300Kbit ceil 500Kbit burst 375000b cburst 
375000b')" = ""])
+
+AT_CHECK([ovn-nbctl remove Logical_Switch_Port sw01 options 
qos_min_rate=200000])
+AT_CHECK([ovn-nbctl remove Logical_Switch_Port sw01 options 
qos_max_rate=350000])
+AT_CHECK([ovn-nbctl remove Logical_Switch_Port sw01 options qos_burst=3000000])
+OVS_WAIT_UNTIL([test "$(tc qdisc show | grep 'htb 1: dev ovs-public')" = ""])
+
+OVS_WAIT_UNTIL([tc qdisc show | grep -q 'htb 1: dev ovs-ext'])
+OVS_WAIT_UNTIL([tc class show dev ovs-ext | \
+                grep -q 'class htb .* prio 0 rate 400Kbit ceil 700Kbit burst 
750000b cburst 749999b'])
+OVS_WAIT_UNTIL([tc class show dev ovs-ext | \
+                grep -q 'class htb .* prio 0 rate 400Kbit ceil 500Kbit burst 
375000b cburst 375000b'])
+
+AT_CHECK([ovn-nbctl remove Logical_Switch_Port sw11 options 
qos_min_rate=400000])
+AT_CHECK([ovn-nbctl remove Logical_Switch_Port sw11 options 
qos_max_rate=700000])
+AT_CHECK([ovn-nbctl remove Logical_Switch_Port sw11 options qos_burst=6000000])
+
+OVS_WAIT_UNTIL([tc qdisc show | grep -q 'htb 1: dev ovs-ext'])
+OVS_WAIT_UNTIL([test "$(tc class show dev ovs-ext | \
+                grep 'class htb .* prio 0 rate 400Kbit ceil 700Kbit burst 750000b cburst 
749999b')" = ""])
+OVS_WAIT_UNTIL([tc class show dev ovs-ext | \
+                grep -q 'class htb .* prio 0 rate 400Kbit ceil 500Kbit burst 
375000b cburst 375000b'])
+
+AT_CHECK([ovn-nbctl remove Logical_Switch_Port sw12 options 
qos_min_rate=400000])
+AT_CHECK([ovn-nbctl remove Logical_Switch_Port sw12 options 
qos_max_rate=500000])
+AT_CHECK([ovn-nbctl remove Logical_Switch_Port sw12 options qos_burst=3000000])
+
+OVS_WAIT_UNTIL([test "$(tc qdisc show | grep 'htb 1: dev ovs-ext')" = ""])
+
+AT_CHECK([ovn-nbctl set Logical_Switch_Port sw02 
options:qos_min_rate=5000000000])
+AT_CHECK([ovn-nbctl set Logical_Switch_Port sw02 
options:qos_max_rate=6000000000])
+AT_CHECK([ovn-nbctl set Logical_Switch_Port sw02 options:qos_burst=1000000])
+
+OVS_WAIT_UNTIL([tc class show dev ovs-public | \
+                grep -q 'class htb .* prio 0 rate 5Gbit ceil 6Gbit burst 
125000b cburst 124500b'])
+
  kill $(pidof ovn-controller)
as ovn-sb

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to