From patchwork Mon Oct 8 20:23:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Michelson X-Patchwork-Id: 980802 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 42TWzh23VTz9sBq for ; Tue, 9 Oct 2018 07:24:16 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id A501F7D19; Mon, 8 Oct 2018 20:24:14 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 047807D15 for ; Mon, 8 Oct 2018 20:23:56 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 57AE67E9 for ; Mon, 8 Oct 2018 20:23:55 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CD2AF30820DF for ; Mon, 8 Oct 2018 20:23:54 +0000 (UTC) Received: from monae.redhat.com (ovpn-122-123.rdu2.redhat.com [10.10.122.123]) by smtp.corp.redhat.com (Postfix) with ESMTP id 58A6A60927 for ; Mon, 8 Oct 2018 20:23:54 +0000 (UTC) From: Mark Michelson To: dev@openvswitch.org Date: Mon, 8 Oct 2018 16:23:53 -0400 Message-Id: <20181008202353.29585-1-mmichels@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.47]); Mon, 08 Oct 2018 20:23:54 +0000 (UTC) X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH v2] ovn-nbctl: Add basic port group commands. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org This adds the following commands: pg-add: Add a new port group, optionally adding switch ports at creation. pg-set-ports: Sets the logical switch ports on a port group pg-del: Remove a port group. The main motivation for these commands is that it allows for adding logical switch ports by name rather than UUID. Signed-off-by: Mark Michelson Acked-by: Han Zhou --- v1 -> v2 Moved tests to tests/ovn-nbctl.at. This revealed issues when listing database information in ovn-nbctl daemon mode. These issues are fixed in series https://patchwork.ozlabs.org/project/openvswitch/list/?series=69636 Therefore this patch is dependent on the linked series. --- ovn/utilities/ovn-nbctl.8.xml | 22 +++++++++++++ ovn/utilities/ovn-nbctl.c | 72 +++++++++++++++++++++++++++++++++++++++++++ tests/ovn-nbctl.at | 34 +++++++++++++++++++- tests/ovn.at | 1 + 4 files changed, 128 insertions(+), 1 deletion(-) diff --git a/ovn/utilities/ovn-nbctl.8.xml b/ovn/utilities/ovn-nbctl.8.xml index 5e18fa7c0..14cc02f53 100644 --- a/ovn/utilities/ovn-nbctl.8.xml +++ b/ovn/utilities/ovn-nbctl.8.xml @@ -881,6 +881,28 @@ +

Port Group commands

+ +
+
pg-add group [port]...
+
+ Creates a new port group in the Port_Group table named + group with optional ports added to the group. +
+ +
pg-set-ports group port...
+
+ Sets ports on the port group named group. It + is an error if group does not exist. +
+ +
pg-del group
+
+ Deletes port group group. It is an error if + group does not exist. +
+
+

Database Commands

These commands query and modify the contents of ovsdb tables. They are a slight abstraction of the ovsdb interface and diff --git a/ovn/utilities/ovn-nbctl.c b/ovn/utilities/ovn-nbctl.c index bff6d1380..89f0d6213 100644 --- a/ovn/utilities/ovn-nbctl.c +++ b/ovn/utilities/ovn-nbctl.c @@ -4655,6 +4655,73 @@ cmd_set_ssl(struct ctl_context *ctx) nbrec_nb_global_set_ssl(nb_global, ssl); } +static char * +set_ports_on_pg(struct ctl_context *ctx, const struct nbrec_port_group *pg, + char **new_ports, size_t num_new_ports) +{ + struct nbrec_logical_switch_port **lports; + lports = xmalloc(sizeof *lports * num_new_ports); + + size_t i; + char *error = NULL; + for (i = 0; i < num_new_ports; i++) { + const struct nbrec_logical_switch_port *lsp; + error = lsp_by_name_or_uuid(ctx, new_ports[i], true, &lsp); + if (error) { + goto out; + } + lports[i] = (struct nbrec_logical_switch_port *) lsp; + } + + nbrec_port_group_set_ports(pg, lports, num_new_ports); + +out: + free(lports); + return error; +} + +static void +cmd_pg_add(struct ctl_context *ctx) +{ + const struct nbrec_port_group *pg; + + pg = nbrec_port_group_insert(ctx->txn); + nbrec_port_group_set_name(pg, ctx->argv[1]); + if (ctx->argc > 2) { + ctx->error = set_ports_on_pg(ctx, pg, ctx->argv + 2, ctx->argc - 2); + } +} + +static void +cmd_pg_set_ports(struct ctl_context *ctx) +{ + const struct nbrec_port_group *pg; + + char *error; + error = pg_by_name_or_uuid(ctx, ctx->argv[1], true, &pg); + if (error) { + ctx->error = error; + return; + } + + ctx->error = set_ports_on_pg(ctx, pg, ctx->argv + 2, ctx->argc - 2); +} + +static void +cmd_pg_del(struct ctl_context *ctx) +{ + const struct nbrec_port_group *pg; + + char *error; + error = pg_by_name_or_uuid(ctx, ctx->argv[1], true, &pg); + if (error) { + ctx->error = error; + return; + } + + nbrec_port_group_delete(pg); +} + static const struct ctl_table_class tables[NBREC_N_TABLES] = { [NBREC_TABLE_DHCP_OPTIONS].row_ids = {{&nbrec_logical_switch_port_col_name, NULL, @@ -5123,6 +5190,11 @@ static const struct ctl_command_syntax nbctl_commands[] = { "PRIVATE-KEY CERTIFICATE CA-CERT [SSL-PROTOS [SSL-CIPHERS]]", pre_cmd_set_ssl, cmd_set_ssl, NULL, "--bootstrap", RW}, + /* Port Group Commands */ + {"pg-add", 1, INT_MAX, "", NULL, cmd_pg_add, NULL, "", RW }, + {"pg-set-ports", 2, INT_MAX, "", NULL, cmd_pg_set_ports, NULL, "", RW }, + {"pg-del", 1, 1, "", NULL, cmd_pg_del, NULL, "", RW }, + {NULL, 0, 0, NULL, NULL, NULL, NULL, "", RO}, }; diff --git a/tests/ovn-nbctl.at b/tests/ovn-nbctl.at index 3f89874ba..25414b8bd 100644 --- a/tests/ovn-nbctl.at +++ b/tests/ovn-nbctl.at @@ -1518,7 +1518,6 @@ AT_CHECK([ovn-nbctl get Port_Group pg0 name], [0], [dnl "pg0" ])]) - OVN_NBCTL_TEST([ovn_nbctl_extra_newlines], [extra newlines], [ dnl This test addresses a specific issue seen when running ovn-nbctl in dnl daemon mode. All we have to do is ensure that each time we list database @@ -1539,3 +1538,36 @@ AT_CHECK([ovn-nbctl ls-add sw1], [0], [ignore]) AT_CHECK([ovn-nbctl --bare --columns=name list logical_switch sw1], [0], [dnl sw1 ])]) +dnl --------------------------------------------------------------------- + +OVN_NBCTL_TEST([ovn_nbctl_port_group_commands], [port group commands], [ +AT_CHECK([ovn-nbctl pg-add pg1], [0], [ignore]) +AT_CHECK([ovn-nbctl --bare --columns=name list port_group pg1], [0], +[pg1 +]) + +AT_CHECK([ovn-nbctl pg-del pg1], [0], [ignore]) +AT_CHECK([ovn-nbctl list port_group], [0], []) + +AT_CHECK([ovn-nbctl ls-add sw1], [0], [ignore]) +AT_CHECK([ovn-nbctl lsp-add sw1 sw1-p1], [0], [ignore]) +SW1P1=$(ovn-nbctl --bare --columns=_uuid list logical_switch_port sw1-p1) +AT_CHECK([ovn-nbctl lsp-add sw1 sw1-p2], [0], [ignore]) +SW1P2=$(ovn-nbctl --bare --columns=_uuid list logical_switch_port sw1-p2) + +AT_CHECK([ovn-nbctl pg-add pg1 sw1-p1], [0], [ignore]) +AT_CHECK([ovn-nbctl --bare --columns=name list port_group pg1], [0],[dnl +pg1 +]) +AT_CHECK_UNQUOTED([ovn-nbctl --bare --columns=ports list port_group pg1], [0], [dnl +$SW1P1 +]) + +AT_CHECK([ovn-nbctl pg-set-ports pg1 sw1-p2], [0], [ignore]) +AT_CHECK_UNQUOTED([ovn-nbctl --bare --columns=ports list port_group pg1], [0], [dnl +$SW1P2 +]) + +AT_CHECK([ovn-nbctl pg-del pg1], [0], [ignore]) +AT_CHECK([ovn-nbctl list port_group], [0], []) +]) diff --git a/tests/ovn.at b/tests/ovn.at index 769e09f81..b747a7992 100644 --- a/tests/ovn.at +++ b/tests/ovn.at @@ -11253,3 +11253,4 @@ AT_CHECK([ovn-nbctl lsp-set-addresses sw2-p1 "00:00:00:00:00:04 192.168.0.3"]) AT_CHECK([ovn-nbctl lsp-set-addresses sw2-p1 "00:00:00:00:00:04 aef0::1"]) AT_CLEANUP +