[ovs-dev] [PATCH OVN, v8] ovn-nbctl.c: Add an optional way to delete QoS by uuid

Numan Siddique numans at ovn.org
Tue May 12 11:00:08 UTC 2020


On Tue, May 12, 2020 at 2:58 PM Tao YunXiang <
taoyunxiang at cmss.chinamobile.com> wrote:

> We can delete qos by specify ls and more parameters.
> If CMS want to delete it exactly, it must specify detailed "match" field.
> It's not an easy way, also maybe deleted by mistake.
> This change adds a way to specify ls and uuid, which is optional.
> You can still use the previous method to delete.
>
> usage:
> ovn-nbctl qos-del ls0 [UUID0]
>
> Author: Tao YunXiang <taoyunxiang at cmss.chinamobile.com>
> Co-authored-by: Liu Chang <liuchang at cmss.chinamobile.com>
> Co-authored-by: Rong Yin <rongyin at cmss.chinamobile.com>
> Signed-off-by: Tao YunXiang <taoyunxiang at cmss.chinamobile.com>
> Signed-off-by: Liu Chang <liuchang at cmss.chinamobile.com>
> Signed-off-by: Rong Yin <rongyin at cmss.chinamobile.com>
>
>
Thanks for v7. I applied this patch to master.

Numan


> ---
> v7: ovn-nbctl.c: Add an optional way to delete QoS by uuid
> v6: ovn-nbctl.c: Add an optional way to delete QoS by uuid
> v5: ovn-nbctl.c: Add an optional way to delete QoS by uuid
> v4: Add a way to delete QoS by its name or uuid
> v3: ovn-nbctl.c: Add a way to delete QoS by its name or uuid
> ---
>  tests/ovn-nbctl.at        |  7 +++++--
>  utilities/ovn-nbctl.8.xml | 19 +++++++++++------
>  utilities/ovn-nbctl.c     | 43 +++++++++++++++++++++++++++++----------
>  3 files changed, 50 insertions(+), 19 deletions(-)
>
> diff --git a/tests/ovn-nbctl.at b/tests/ovn-nbctl.at
> index 1187fe3e1..14de1a8bf 100644
> --- a/tests/ovn-nbctl.at
> +++ b/tests/ovn-nbctl.at
> @@ -308,13 +308,16 @@ AT_CHECK([ovn-nbctl qos-list ls0], [0], [dnl
>
>  AT_CHECK([ovn-nbctl qos-add ls0 from-lport 600 ip rate=1000101])
>  AT_CHECK([ovn-nbctl qos-add ls0 from-lport 400 tcp dscp=44])
> -AT_CHECK([ovn-nbctl qos-add ls0 from-lport 200 ip burst=1000102 rate=301
> dscp=19])
>
>  dnl Delete a single flow.
>  AT_CHECK([ovn-nbctl qos-del ls0 from-lport 400 tcp])
>  AT_CHECK([ovn-nbctl qos-list ls0], [0], [dnl
>  from-lport   600 (ip) rate=1000101
> -from-lport   200 (ip) rate=301 burst=1000102 dscp=19
> +])
> +
> +dnl Delete QoS rule by specified uuid
> +AT_CHECK([ovn-nbctl qos-del ls0 $(ovn-nbctl --bare --column _uuid list
> qos)])
> +AT_CHECK([ovn-nbctl list qos], [0], [dnl
>  ])
>
>  AT_CHECK([ovn-nbctl qos-add ls0 from-lport 600 ip rate=100010111111],
> [1], [],
> diff --git a/utilities/ovn-nbctl.8.xml b/utilities/ovn-nbctl.8.xml
> index 9c624d40c..d265c7fcc 100644
> --- a/utilities/ovn-nbctl.8.xml
> +++ b/utilities/ovn-nbctl.8.xml
> @@ -160,12 +160,19 @@
>
>        <dt><code>qos-del</code> <var>switch</var> [<var>direction</var>
> [<var>priority</var> <var>match</var>]]</dt>
>        <dd>
> -        Deletes QoS rules from <var>switch</var>.  If only
> -        <var>switch</var> is supplied, all the QoS rules from the logical
> -        switch are deleted.  If <var>direction</var> is also specified,
> -        then all the flows in that direction will be deleted from the
> -        logical switch.  If all the fields are supplied, then a single
> -        flow that matches the given fields will be deleted.
> +        <p>
> +          Deletes QoS rules from <var>switch</var>.  If only
> +          <var>switch</var> is supplied, all the QoS rules from the
> logical
> +          switch are deleted.  If <var>direction</var> is also specified,
> +          then all the flows in that direction will be deleted from the
> +          logical switch.  If all the fields are supplied, then a single
> +          flow that matches the given fields will be deleted.
> +        </p>
> +
> +        <p>
> +          If <var>switch</var> and <var>uuid</var> are supplied, then the
> +          QoS rule with sepcified uuid is deleted.
> +        </p>
>        </dd>
>
>        <dt><code>qos-list</code> <var>switch</var></dt>
> diff --git a/utilities/ovn-nbctl.c b/utilities/ovn-nbctl.c
> index 02fc10c9e..960f156c4 100644
> --- a/utilities/ovn-nbctl.c
> +++ b/utilities/ovn-nbctl.c
> @@ -604,7 +604,7 @@ ACL commands:\n\
>  QoS commands:\n\
>    qos-add SWITCH DIRECTION PRIORITY MATCH [rate=RATE [burst=BURST]]
> [dscp=DSCP]\n\
>                              add an QoS rule to SWITCH\n\
> -  qos-del SWITCH [DIRECTION [PRIORITY MATCH]]\n\
> +  qos-del SWITCH [{DIRECTION | UUID} [PRIORITY MATCH]]\n\
>                              remove QoS rules from SWITCH\n\
>    qos-list SWITCH           print QoS rules for SWITCH\n\
>  \n\
> @@ -2526,22 +2526,43 @@ nbctl_qos_del(struct ctl_context *ctx)
>      }
>
>      const char *direction;
> -    error = parse_direction(ctx->argv[2], &direction);
> -    if (error) {
> -        ctx->error = error;
> -        return;
> +    const struct uuid *qos_rule_uuid = NULL;
> +    struct uuid uuid_from_cmd;
> +    if (uuid_from_string(&uuid_from_cmd, ctx->argv[2])) {
> +        qos_rule_uuid = &uuid_from_cmd;
> +    } else {
> +        error = parse_direction(ctx->argv[2], &direction);
> +        if (error) {
> +            ctx->error = error;
> +            return;
> +        }
>      }
>
> -    /* If priority and match are not specified, delete all qos_rules with
> the
> -     * specified direction. */
> +    /* If uuid was specified, delete qos_rule with the
> +     * specified uuid. */
>      if (ctx->argc == 3) {
>          struct nbrec_qos **new_qos_rules
>              = xmalloc(sizeof *new_qos_rules * ls->n_qos_rules);
>
>          int n_qos_rules = 0;
> -        for (size_t i = 0; i < ls->n_qos_rules; i++) {
> -            if (strcmp(direction, ls->qos_rules[i]->direction)) {
> -                new_qos_rules[n_qos_rules++] = ls->qos_rules[i];
> +        if (qos_rule_uuid) {
> +            for (size_t i = 0; i < ls->n_qos_rules; i++) {
> +                if (!uuid_equals(qos_rule_uuid,
> +                                 &(ls->qos_rules[i]->header_.uuid))) {
> +                    new_qos_rules[n_qos_rules++] = ls->qos_rules[i];
> +                }
> +            }
> +            if (n_qos_rules == ls->n_qos_rules) {
> +                ctl_error(ctx, "uuid is not found");
> +                }
> +
> +        /* If priority and match are not specified, delete all qos_rules
> +         * with the specified direction. */
> +        } else {
> +            for (size_t i = 0; i < ls->n_qos_rules; i++) {
> +                if (strcmp(direction, ls->qos_rules[i]->direction)) {
> +                    new_qos_rules[n_qos_rules++] = ls->qos_rules[i];
> +                }
>              }
>          }
>
> @@ -6149,7 +6170,7 @@ static const struct ctl_command_syntax
> nbctl_commands[] = {
>      { "qos-add", 5, 7,
>        "SWITCH DIRECTION PRIORITY MATCH [rate=RATE [burst=BURST]]
> [dscp=DSCP]",
>        NULL, nbctl_qos_add, NULL, "--may-exist", RW },
> -    { "qos-del", 1, 4, "SWITCH [DIRECTION [PRIORITY MATCH]]", NULL,
> +    { "qos-del", 1, 4, "SWITCH [{DIRECTION | UUID} [PRIORITY MATCH]]",
> NULL,
>        nbctl_qos_del, NULL, "", RW },
>      { "qos-list", 1, 1, "SWITCH", NULL, nbctl_qos_list, NULL, "", RO },
>
> --
> 2.17.1
>
>
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>


More information about the dev mailing list