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 --- 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