Hi Numa,
     I have add codes to check if the uuid is exist. If not, it will print 
"uuid is not found".  Please help to check , if this way is ok , I will summit 
another patch to fix the same problem in logical router policy.


Regards,
Yun
--------------
taoyunxi...@cmss.chinamobile.com
>On Sat, May 9, 2020 at 2:15 PM Tao YunXiang <
>taoyunxi...@cmss.chinamobile.com> wrote:
>
>> usage:
>> ovn-nbctl qos-del ls0 [UUID0]
>>
>> Author: Tao YunXiang <taoyunxi...@cmss.chinamobile.com>
>> Co-authored-by: Liu Chang <liuch...@cmss.chinamobile.com>
>> Co-authored-by: Rong Yin <rong...@cmss.chinamobile.com>
>> Signed-off-by: Tao YunXiang <taoyunxi...@cmss.chinamobile.com>
>> Signed-off-by: Liu Chang <liuch...@cmss.chinamobile.com>
>> Signed-off-by: Rong Yin <rong...@cmss.chinamobile.com>
>>
>> ---
>> 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
>>
>>
>Thanks for adding the test case.
>
>I see a small issue.  When I run "ovn-nbctl qos-del <some_uuid>, the
>commands doesn't
>print any error if the qos with the given <some_uuid> doesn't exist.
>
>Can you please address this.
>I think the same would go for logical router policy too. Can you please
>address that also.
>
>Thanks
>Numa
>
>---
>>  tests/ovn-nbctl.at        |  7 +++++--
>>  utilities/ovn-nbctl.8.xml | 19 +++++++++++++------
>>  utilities/ovn-nbctl.c     | 39 ++++++++++++++++++++++++++++-----------
>>  3 files changed, 46 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..07ed85251 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,39 @@ 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 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 +6166,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
>> d...@openvswitch.org
>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>>
>>
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to