diff mbox series

[ovs-dev,ovn] Rely on unique name for ovn qos meters

Message ID 0326dd3f348095913d12014988640f28bd41bbc3.1587735081.git.lorenzo.bianconi@redhat.com
State Superseded
Headers show
Series [ovs-dev,ovn] Rely on unique name for ovn qos meters | expand

Commit Message

Lorenzo Bianconi April 24, 2020, 1:32 p.m. UTC
ovn currently identifies qos meters according to the rate and burst values
configured. Doing so 2 meters on the same hv assigned to 2 different logical
switch ports and configured with the same values for rate and burst will be
mapped to the same ovs kernel mater and will share the bandwidth.
Fix this behavior making qos meter name unique

Tested-By: Maciej Jozefczyk <mjozefcz@redhat.com>
Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
---
 controller/ofctrl.c |  2 +-
 lib/actions.c       | 11 ++++++-----
 2 files changed, 7 insertions(+), 6 deletions(-)

Comments

Han Zhou April 27, 2020, 6:49 a.m. UTC | #1
On Fri, Apr 24, 2020 at 6:33 AM Lorenzo Bianconi <
lorenzo.bianconi@redhat.com> wrote:
>
> ovn currently identifies qos meters according to the rate and burst values
> configured. Doing so 2 meters on the same hv assigned to 2 different
logical
> switch ports and configured with the same values for rate and burst will
be
> mapped to the same ovs kernel mater and will share the bandwidth.
> Fix this behavior making qos meter name unique
>
> Tested-By: Maciej Jozefczyk <mjozefcz@redhat.com>
> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
> ---
>  controller/ofctrl.c |  2 +-
>  lib/actions.c       | 11 ++++++-----
>  2 files changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/controller/ofctrl.c b/controller/ofctrl.c
> index 36e39ba06..485a857d1 100644
> --- a/controller/ofctrl.c
> +++ b/controller/ofctrl.c
> @@ -970,7 +970,7 @@ add_meter_string(struct ovn_extend_table_info
*m_desired,
>      enum ofputil_protocol usable_protocols;
>      char *meter_string = xasprintf("meter=%"PRIu32",%s",
>                                     m_desired->table_id,
> -                                   &m_desired->name[9]);
> +                                   &m_desired->name[52]);
>      char *error = parse_ofp_meter_mod_str(&mm, meter_string, OFPMC13_ADD,
>                                            &usable_protocols);
>      if (!error) {
> diff --git a/lib/actions.c b/lib/actions.c
> index deca18842..20a7a5caf 100644
> --- a/lib/actions.c
> +++ b/lib/actions.c
> @@ -2851,12 +2851,13 @@ encode_SET_METER(const struct ovnact_set_meter
*cl,
>       * describes the meter itself. */
>      char *name;
>      if (cl->burst) {
> -        name = xasprintf("__string: kbps burst stats bands=type=drop "
> -                         "rate=%"PRId64" burst_size=%"PRId64"", cl->rate,
> -                         cl->burst);
> +        name = xasprintf("__string: uuid "UUID_FMT" kbps burst stats "
> +                         "bands=type=drop rate=%"PRId64"
burst_size=%"PRId64,
> +                         UUID_ARGS(&ep->lflow_uuid), cl->rate,
cl->burst);
>      } else {
> -        name = xasprintf("__string: kbps stats bands=type=drop "
> -                         "rate=%"PRId64"", cl->rate);
> +        name = xasprintf("__string: uuid "UUID_FMT" kbps stats "
> +                         "bands=type=drop rate=%"PRId64,
> +                         UUID_ARGS(&ep->lflow_uuid), cl->rate);
>      }
>
>      table_id = ovn_extend_table_assign_id(ep->meter_table, name,
> --
> 2.25.3
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Thanks for the fix. Looks good to me. It would be great if you could
add/update QoS test case in ovn.at to cover this scenario.

Acked-by: Han Zhou <hzhou@ovn.org>
diff mbox series

Patch

diff --git a/controller/ofctrl.c b/controller/ofctrl.c
index 36e39ba06..485a857d1 100644
--- a/controller/ofctrl.c
+++ b/controller/ofctrl.c
@@ -970,7 +970,7 @@  add_meter_string(struct ovn_extend_table_info *m_desired,
     enum ofputil_protocol usable_protocols;
     char *meter_string = xasprintf("meter=%"PRIu32",%s",
                                    m_desired->table_id,
-                                   &m_desired->name[9]);
+                                   &m_desired->name[52]);
     char *error = parse_ofp_meter_mod_str(&mm, meter_string, OFPMC13_ADD,
                                           &usable_protocols);
     if (!error) {
diff --git a/lib/actions.c b/lib/actions.c
index deca18842..20a7a5caf 100644
--- a/lib/actions.c
+++ b/lib/actions.c
@@ -2851,12 +2851,13 @@  encode_SET_METER(const struct ovnact_set_meter *cl,
      * describes the meter itself. */
     char *name;
     if (cl->burst) {
-        name = xasprintf("__string: kbps burst stats bands=type=drop "
-                         "rate=%"PRId64" burst_size=%"PRId64"", cl->rate,
-                         cl->burst);
+        name = xasprintf("__string: uuid "UUID_FMT" kbps burst stats "
+                         "bands=type=drop rate=%"PRId64" burst_size=%"PRId64,
+                         UUID_ARGS(&ep->lflow_uuid), cl->rate, cl->burst);
     } else {
-        name = xasprintf("__string: kbps stats bands=type=drop "
-                         "rate=%"PRId64"", cl->rate);
+        name = xasprintf("__string: uuid "UUID_FMT" kbps stats "
+                         "bands=type=drop rate=%"PRId64,
+                         UUID_ARGS(&ep->lflow_uuid), cl->rate);
     }
 
     table_id = ovn_extend_table_assign_id(ep->meter_table, name,