From patchwork Mon Jul 30 14:37:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Sitnicki X-Patchwork-Id: 951020 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 41fMd00GT6z9rxx for ; Tue, 31 Jul 2018 00:38:28 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 5F7C1C83; Mon, 30 Jul 2018 14:37:56 +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 15A0BC7A for ; Mon, 30 Jul 2018 14:37:55 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-wm0-f65.google.com (mail-wm0-f65.google.com [74.125.82.65]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 8591075C for ; Mon, 30 Jul 2018 14:37:54 +0000 (UTC) Received: by mail-wm0-f65.google.com with SMTP id s9-v6so13392038wmh.3 for ; Mon, 30 Jul 2018 07:37:54 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=4Z1pzAtPUXpFGqkmSogq+Z+yWonpt1b4fHpgfoy9BDE=; b=iPhQaFYd30IGE0BECcNaJEWrxp2jUdj7kiFUa7RWaSY0ZBwbWIYnotJO2vhZ5rebfN csqNi7YFLujgMlo9bdqkT0cEzwKaNZZDfQNy6M9rQJw2ML/+VIcMLTnJ1MHSsKOwOuPj xz0nOdEdD6yGhduSwd5liQ8cKObcIOZWHTHovt0TxpnTSfQf8ssguAB19D1n/Sgop0Vj h7ZZwl4jMViygomOlYqwNBOur0pTxiGbNS6G1L1564zAZG6rF2Pwl75CBD0w24D3fhHo 5FkK9nqHO+OUiu1bb4d5+R2MSJvdi1vKxevd3UCTKW/pK2EbmEN4EIMDYWxw/cxB4IRC pufg== X-Gm-Message-State: AOUpUlGknLNHnNZJBIzYZJ7hixd3nZT8JGPwQF/yaz0Q8Oz9FN+BhrzA lqM55ikVjIV5u32anOqdgaIVpzAa9qo= X-Google-Smtp-Source: AAOMgpe1IqlJLsGgZ09CX4JNOjHRqXuD60HqI3NXNb+f18K2pm1HIBd4hRLKv+UpCl4K4e7yMIoKEg== X-Received: by 2002:a1c:d10c:: with SMTP id i12-v6mr10859180wmg.133.1532961472815; Mon, 30 Jul 2018 07:37:52 -0700 (PDT) Received: from redhat.com (157.red-81-34-71.dynamicip.rima-tde.net. [81.34.71.157]) by smtp.gmail.com with ESMTPSA id q77-v6sm7660331wmb.38.2018.07.30.07.37.51 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 30 Jul 2018 07:37:52 -0700 (PDT) From: Jakub Sitnicki To: dev@openvswitch.org Date: Mon, 30 Jul 2018 16:37:47 +0200 Message-Id: <20180730143749.8173-2-jkbs@redhat.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180730143749.8173-1-jkbs@redhat.com> References: <20180730143749.8173-1-jkbs@redhat.com> X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE 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 1/3] ovn-nbctl: Allow referring to port groups by name. 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 Be user-friendly and allow using port group's name as its identifier in database commands. Signed-off-by: Jakub Sitnicki Acked-by: Han Zhou --- ovn/utilities/ovn-nbctl.c | 3 +++ tests/ovn-nbctl.at | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/ovn/utilities/ovn-nbctl.c b/ovn/utilities/ovn-nbctl.c index 3c3e582cb..f99b81bc0 100644 --- a/ovn/utilities/ovn-nbctl.c +++ b/ovn/utilities/ovn-nbctl.c @@ -4369,6 +4369,9 @@ static const struct ctl_table_class tables[NBREC_N_TABLES] = { [NBREC_TABLE_ADDRESS_SET].row_ids[0] = {&nbrec_address_set_col_name, NULL, NULL}, + [NBREC_TABLE_PORT_GROUP].row_ids[0] + = {&nbrec_port_group_col_name, NULL, NULL}, + [NBREC_TABLE_ACL].row_ids[0] = {&nbrec_acl_col_name, NULL, NULL}, }; diff --git a/tests/ovn-nbctl.at b/tests/ovn-nbctl.at index 64e217654..069b7b5b6 100644 --- a/tests/ovn-nbctl.at +++ b/tests/ovn-nbctl.at @@ -1505,3 +1505,17 @@ AT_CHECK([grep 'command takes at most .* arguments' stderr], [0], [ignore]) OVN_NBCTL_TEST_STOP AT_CLEANUP + +dnl --------------------------------------------------------------------- + +AT_SETUP([ovn-nbctl - Port Groups]) +OVN_NBCTL_TEST_START + +dnl Check that port group can be looked up by name +AT_CHECK([ovn-nbctl create Port_Group name=pg0], [0], [ignore]) +AT_CHECK([ovn-nbctl get Port_Group pg0 name], [0], [dnl +"pg0" +]) + +OVN_NBCTL_TEST_STOP +AT_CLEANUP From patchwork Mon Jul 30 14:37:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Sitnicki X-Patchwork-Id: 951021 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 41fMdY3V3tz9rxx for ; Tue, 31 Jul 2018 00:38:57 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 36D5CCA0; Mon, 30 Jul 2018 14:37:58 +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 8B4C3C93 for ; Mon, 30 Jul 2018 14:37:56 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id BA78F75C for ; Mon, 30 Jul 2018 14:37:55 +0000 (UTC) Received: by mail-wr1-f68.google.com with SMTP id h9-v6so13173333wro.3 for ; Mon, 30 Jul 2018 07:37:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=6zDEG5f46EuxYGYddBs10uhaSghGgzAhrHifwUTv36I=; b=TvXRCyZnfkwXl7msMMxtkucKzao715ykE9nAKfyT+9KmO97Bvra54RJtruODXXYwyt 8Zy2A86IUMvECt/J1c7jOdxIC4S8KPx5TS0eHamifWZ8sHtnANs3k7L1tH/k5W5A2kNj qmMrn3YfDo8qUqYkAj9cqtUzSIY9AupC3me/RDL1PqnS4ovjhbRZ8CB8lsxVoObE9iIW rHBKgETef28mTmgI/KeCfF4g3YSQXcffc9geowb5ofyUTqHrxWeTZtZRbp/ZE0T1aYET KpNADQbByjlv7IZTUOw/GoLLtgkCgkeL6EPILsqUvo+PSHTXfnkT0s0A0u/KQLxWWgZn ddBg== X-Gm-Message-State: AOUpUlEHs/g6R0vKektpeJTOoT5dyXwr4itC+3rYW8Cv0iJnF751q32j dl7fhDLMCoOALzuqUIJpGvR9I1U6tZA= X-Google-Smtp-Source: AAOMgpcFkfURPOUh8lRlFV4PZt7x24xRCETFHk8AUiJH8JV907FrsSq0r4/ZpfjOSuWsTnmmAsUEJg== X-Received: by 2002:a5d:66c4:: with SMTP id k4-v6mr17952493wrw.154.1532961474260; Mon, 30 Jul 2018 07:37:54 -0700 (PDT) Received: from redhat.com (157.red-81-34-71.dynamicip.rima-tde.net. [81.34.71.157]) by smtp.gmail.com with ESMTPSA id y128-v6sm12216052wmy.26.2018.07.30.07.37.53 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 30 Jul 2018 07:37:53 -0700 (PDT) From: Jakub Sitnicki To: dev@openvswitch.org Date: Mon, 30 Jul 2018 16:37:48 +0200 Message-Id: <20180730143749.8173-3-jkbs@redhat.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180730143749.8173-1-jkbs@redhat.com> References: <20180730143749.8173-1-jkbs@redhat.com> X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE 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 2/3] ovn-northd: Make use of svec for storing lists of addresses. 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 Get rid of what is, esentially, an open-coded version of svec. Signed-off-by: Jakub Sitnicki Acked-by: Han Zhou --- ovn/northd/ovn-northd.c | 47 +++++++++++++++------------------------------- tests/ovn.at | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 32 deletions(-) diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c index 572022897..52f47c5ed 100644 --- a/ovn/northd/ovn-northd.c +++ b/ovn/northd/ovn-northd.c @@ -39,6 +39,7 @@ #include "openvswitch/poll-loop.h" #include "smap.h" #include "sset.h" +#include "svec.h" #include "stream.h" #include "stream-ssl.h" #include "unixctl.h" @@ -6675,54 +6676,36 @@ sync_address_sets(struct northd_context *ctx) /* sync port group generated address sets first */ const struct nbrec_port_group *nb_port_group; NBREC_PORT_GROUP_FOR_EACH (nb_port_group, ctx->ovnnb_idl) { - char **ipv4_addrs = xcalloc(1, sizeof *ipv4_addrs); - size_t n_ipv4_addrs = 0; - size_t n_ipv4_addrs_buf = 1; - char **ipv6_addrs = xcalloc(1, sizeof *ipv6_addrs); - size_t n_ipv6_addrs = 0; - size_t n_ipv6_addrs_buf = 1; + struct svec ipv4_addrs = SVEC_EMPTY_INITIALIZER; + struct svec ipv6_addrs = SVEC_EMPTY_INITIALIZER; for (size_t i = 0; i < nb_port_group->n_ports; i++) { for (size_t j = 0; j < nb_port_group->ports[i]->n_addresses; j++) { struct lport_addresses laddrs; extract_lsp_addresses(nb_port_group->ports[i]->addresses[j], &laddrs); - while (n_ipv4_addrs_buf < n_ipv4_addrs + laddrs.n_ipv4_addrs) { - n_ipv4_addrs_buf *= 2; - ipv4_addrs = xrealloc(ipv4_addrs, - n_ipv4_addrs_buf * sizeof *ipv4_addrs); - } for (size_t k = 0; k < laddrs.n_ipv4_addrs; k++) { - ipv4_addrs[n_ipv4_addrs++] = - xstrdup(laddrs.ipv4_addrs[k].addr_s); - } - while (n_ipv6_addrs_buf < n_ipv6_addrs + laddrs.n_ipv6_addrs) { - n_ipv6_addrs_buf *= 2; - ipv6_addrs = xrealloc(ipv6_addrs, - n_ipv6_addrs_buf * sizeof *ipv6_addrs); + svec_add(&ipv4_addrs, laddrs.ipv4_addrs[k].addr_s); } for (size_t k = 0; k < laddrs.n_ipv6_addrs; k++) { - ipv6_addrs[n_ipv6_addrs++] = - xstrdup(laddrs.ipv6_addrs[k].addr_s); + svec_add(&ipv6_addrs, laddrs.ipv6_addrs[k].addr_s); } destroy_lport_addresses(&laddrs); } } char *ipv4_addrs_name = xasprintf("%s_ip4", nb_port_group->name); char *ipv6_addrs_name = xasprintf("%s_ip6", nb_port_group->name); - sync_address_set(ctx, ipv4_addrs_name, (const char **)ipv4_addrs, - n_ipv4_addrs, &sb_address_sets); - sync_address_set(ctx, ipv6_addrs_name, (const char **)ipv6_addrs, - n_ipv6_addrs, &sb_address_sets); + sync_address_set(ctx, ipv4_addrs_name, + /* "char **" is not compatible with "const char **" */ + (const char **)ipv4_addrs.names, + ipv4_addrs.n, &sb_address_sets); + sync_address_set(ctx, ipv6_addrs_name, + /* "char **" is not compatible with "const char **" */ + (const char **)ipv6_addrs.names, + ipv6_addrs.n, &sb_address_sets); free(ipv4_addrs_name); free(ipv6_addrs_name); - for (size_t i = 0; i < n_ipv4_addrs; i++) { - free(ipv4_addrs[i]); - } - free(ipv4_addrs); - for (size_t i = 0; i < n_ipv6_addrs; i++) { - free(ipv6_addrs[i]); - } - free(ipv6_addrs); + svec_destroy(&ipv4_addrs); + svec_destroy(&ipv6_addrs); } /* sync user defined address sets, which may overwrite port group diff --git a/tests/ovn.at b/tests/ovn.at index e80c965a3..e7bdfe250 100644 --- a/tests/ovn.at +++ b/tests/ovn.at @@ -10217,6 +10217,56 @@ done OVN_CLEANUP([hv1], [hv2], [hv3]) AT_CLEANUP +AT_SETUP([ovn -- Address Set generation from Port Groups (static addressing)]) +ovn_start + +ovn-nbctl ls-add ls1 + +ovn-nbctl lsp-add ls1 lp1 +ovn-nbctl lsp-add ls1 lp2 +ovn-nbctl lsp-add ls1 lp3 + +ovn-nbctl lsp-set-addresses lp1 "02:00:00:00:00:01 10.0.0.1 2001:db8::1" +ovn-nbctl lsp-set-addresses lp2 "02:00:00:00:00:02 10.0.0.2 2001:db8::2" +ovn-nbctl lsp-set-addresses lp3 "02:00:00:00:00:03 10.0.0.3 2001:db8::3" + +ovn-nbctl create Port_Group name=pg1 +ovn-nbctl create Port_Group name=pg2 + +ovn-nbctl --id=@p get Logical_Switch_Port lp1 -- add Port_Group pg1 ports @p +ovn-nbctl --id=@p get Logical_Switch_Port lp2 -- add Port_Group pg1 ports @p +ovn-nbctl --id=@p get Logical_Switch_Port lp2 -- add Port_Group pg2 ports @p +ovn-nbctl --id=@p get Logical_Switch_Port lp3 -- add Port_Group pg2 ports @p + +ovn-nbctl --wait=sb sync + +dnl Check if port group address sets were populated with ports' addresses +AT_CHECK([ovn-sbctl get Address_Set pg1_ip4 addresses], + [0], [[["10.0.0.1", "10.0.0.2"]] +]) +AT_CHECK([ovn-sbctl get Address_Set pg2_ip4 addresses], + [0], [[["10.0.0.2", "10.0.0.3"]] +]) +AT_CHECK([ovn-sbctl get Address_Set pg1_ip6 addresses], + [0], [[["2001:db8::1", "2001:db8::2"]] +]) +AT_CHECK([ovn-sbctl get Address_Set pg2_ip6 addresses], + [0], [[["2001:db8::2", "2001:db8::3"]] +]) + +ovn-nbctl --wait=sb lsp-set-addresses lp1 \ + "02:00:00:00:00:01 10.0.0.11 2001:db8::11" + +dnl Check if updated address got propagated to the port group address sets +AT_CHECK([ovn-sbctl get Address_Set pg1_ip4 addresses], + [0], [[["10.0.0.11", "10.0.0.2"]] +]) +AT_CHECK([ovn-sbctl get Address_Set pg1_ip6 addresses], + [0], [[["2001:db8::11", "2001:db8::2"]] +]) + +AT_CLEANUP + AT_SETUP([ovn -- ACL conjunction]) ovn_start From patchwork Mon Jul 30 14:37:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Sitnicki X-Patchwork-Id: 951022 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 41fMf844s4z9rxx for ; Tue, 31 Jul 2018 00:39:28 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id E61F8CA8; Mon, 30 Jul 2018 14:38:00 +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 4BE07CA5 for ; Mon, 30 Jul 2018 14:37:58 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-wm0-f67.google.com (mail-wm0-f67.google.com [74.125.82.67]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 97E91796 for ; Mon, 30 Jul 2018 14:37:57 +0000 (UTC) Received: by mail-wm0-f67.google.com with SMTP id o11-v6so13347775wmh.2 for ; Mon, 30 Jul 2018 07:37:57 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=MBksh94HaezGOzfCl+Fl8HhvuHrxQhk0y28sW+06sT4=; b=TWpRrZONswAyTWHIJBqELuiKjy00Q8JqTDNtEITXF7Nc4ivatjYUOdEZLnBgG/zsFH piUxRHnsacLAq6IHJQ7QDocN+HwRUcz7sBbaeTPhtXv/JTmbtXQPb+8EWMolJNrrwbRG qg0YXGgTIcGkImq65HY17zACEIhPLfvPhedOvOfRoJm4fO5V+br0XIIb1B1R9R4Ykd1J uahKvitEch949n09RlYMgmKuGB4A6p5U0elTAJ8zQQY6EewmKiGr+oSPWY0EH86n5CP0 bfNvtdrpRK+R9UeGJgaANcMDPRHWv+yT96O/rHwLUFiSvHgyGbfuR+gBKj25wnQFI5ck bFog== X-Gm-Message-State: AOUpUlHPOlGPVvRFWphE6m9jP+6YT8fkkVksHGyHA4hnm9i/xGBffSbL BwvlNRIywacD4glkQsTBZgc9m5VwYM4= X-Google-Smtp-Source: AAOMgpcXmpr4SGou0A/oVtAEgB4rjAoFjJFSqb9vbPXyQNv/odm56PPMnWTakvjTroNTXHEhtAFgkA== X-Received: by 2002:a1c:ea9c:: with SMTP id g28-v6mr15548462wmi.65.1532961475959; Mon, 30 Jul 2018 07:37:55 -0700 (PDT) Received: from redhat.com (157.red-81-34-71.dynamicip.rima-tde.net. [81.34.71.157]) by smtp.gmail.com with ESMTPSA id k3-v6sm13632168wme.44.2018.07.30.07.37.55 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 30 Jul 2018 07:37:55 -0700 (PDT) From: Jakub Sitnicki To: dev@openvswitch.org Date: Mon, 30 Jul 2018 16:37:49 +0200 Message-Id: <20180730143749.8173-4-jkbs@redhat.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180730143749.8173-1-jkbs@redhat.com> References: <20180730143749.8173-1-jkbs@redhat.com> X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE 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 3/3] ovn-northd: Propagate dynamic addresses to port group address sets. 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 If a logical switch port belongs to a port group and has dynamic addresses assigned, propagate the addresses to the auto-generated address sets for the port group. Signed-off-by: Jakub Sitnicki Acked-by: Han Zhou --- ovn/northd/ovn-northd.c | 34 ++++++++++++++++++++-------- tests/ovn.at | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 9 deletions(-) diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c index 52f47c5ed..d744836d3 100644 --- a/ovn/northd/ovn-northd.c +++ b/ovn/northd/ovn-northd.c @@ -6653,6 +6653,24 @@ sync_address_set(struct northd_context *ctx, const char *name, addrs, n_addrs); } +/* Go through 'addresses' and add found IPv4 addresses to 'ipv4_addrs' and IPv6 + * addresses to 'ipv6_addrs'. + */ +static void +split_addresses(const char *addresses, struct svec *ipv4_addrs, + struct svec *ipv6_addrs) +{ + struct lport_addresses laddrs; + extract_lsp_addresses(addresses, &laddrs); + for (size_t k = 0; k < laddrs.n_ipv4_addrs; k++) { + svec_add(ipv4_addrs, laddrs.ipv4_addrs[k].addr_s); + } + for (size_t k = 0; k < laddrs.n_ipv6_addrs; k++) { + svec_add(ipv6_addrs, laddrs.ipv6_addrs[k].addr_s); + } + destroy_lport_addresses(&laddrs); +} + /* OVN_Southbound Address_Set table contains same records as in north * bound, plus the records generated from Port_Group table in north bound. * @@ -6680,16 +6698,14 @@ sync_address_sets(struct northd_context *ctx) struct svec ipv6_addrs = SVEC_EMPTY_INITIALIZER; for (size_t i = 0; i < nb_port_group->n_ports; i++) { for (size_t j = 0; j < nb_port_group->ports[i]->n_addresses; j++) { - struct lport_addresses laddrs; - extract_lsp_addresses(nb_port_group->ports[i]->addresses[j], - &laddrs); - for (size_t k = 0; k < laddrs.n_ipv4_addrs; k++) { - svec_add(&ipv4_addrs, laddrs.ipv4_addrs[k].addr_s); - } - for (size_t k = 0; k < laddrs.n_ipv6_addrs; k++) { - svec_add(&ipv6_addrs, laddrs.ipv6_addrs[k].addr_s); + const char *addrs = nb_port_group->ports[i]->addresses[j]; + if (!is_dynamic_lsp_address(addrs)) { + split_addresses(addrs, &ipv4_addrs, &ipv6_addrs); } - destroy_lport_addresses(&laddrs); + } + if (nb_port_group->ports[i]->dynamic_addresses) { + split_addresses(nb_port_group->ports[i]->dynamic_addresses, + &ipv4_addrs, &ipv6_addrs); } } char *ipv4_addrs_name = xasprintf("%s_ip4", nb_port_group->name); diff --git a/tests/ovn.at b/tests/ovn.at index e7bdfe250..32e6c1738 100644 --- a/tests/ovn.at +++ b/tests/ovn.at @@ -10267,6 +10267,65 @@ AT_CHECK([ovn-sbctl get Address_Set pg1_ip6 addresses], AT_CLEANUP +AT_SETUP([ovn -- Address Set generation from Port Groups (dynamic addressing)]) +ovn_start + +ovn-nbctl ls-add ls1 +ovn-nbctl ls-add ls2 +ovn-nbctl ls-add ls3 + +ovn-nbctl set Logical_Switch ls1 \ + other_config:subnet=10.1.0.0/24 other_config:ipv6_prefix="2001:db8:1::" +ovn-nbctl set Logical_Switch ls2 \ + other_config:subnet=10.2.0.0/24 other_config:ipv6_prefix="2001:db8:2::" +ovn-nbctl set Logical_Switch ls3 \ + other_config:subnet=10.3.0.0/24 other_config:ipv6_prefix="2001:db8:3::" + +ovn-nbctl lsp-add ls1 lp1 +ovn-nbctl lsp-add ls2 lp2 +ovn-nbctl lsp-add ls3 lp3 + +ovn-nbctl lsp-set-addresses lp1 "02:00:00:00:00:01 dynamic" +ovn-nbctl lsp-set-addresses lp2 "02:00:00:00:00:02 dynamic" +ovn-nbctl lsp-set-addresses lp3 "02:00:00:00:00:03 dynamic" + +ovn-nbctl create Port_Group name=pg1 +ovn-nbctl create Port_Group name=pg2 + +ovn-nbctl --id=@p get Logical_Switch_Port lp1 -- add Port_Group pg1 ports @p +ovn-nbctl --id=@p get Logical_Switch_Port lp2 -- add Port_Group pg1 ports @p +ovn-nbctl --id=@p get Logical_Switch_Port lp2 -- add Port_Group pg2 ports @p +ovn-nbctl --id=@p get Logical_Switch_Port lp3 -- add Port_Group pg2 ports @p + +ovn-nbctl --wait=sb sync + +dnl Check if port group address sets were populated with ports' addresses +AT_CHECK([ovn-sbctl get Address_Set pg1_ip4 addresses], + [0], [[["10.1.0.2", "10.2.0.2"]] +]) +AT_CHECK([ovn-sbctl get Address_Set pg2_ip4 addresses], + [0], [[["10.2.0.2", "10.3.0.2"]] +]) +AT_CHECK([ovn-sbctl get Address_Set pg1_ip6 addresses], + [0], [[["2001:db8:1::ff:fe00:1", "2001:db8:2::ff:fe00:2"]] +]) +AT_CHECK([ovn-sbctl get Address_Set pg2_ip6 addresses], + [0], [[["2001:db8:2::ff:fe00:2", "2001:db8:3::ff:fe00:3"]] +]) + +ovn-nbctl set Logical_Switch ls1 \ + other_config:subnet=10.11.0.0/24 other_config:ipv6_prefix="2001:db8:11::" + +dnl Check if updated address got propagated to the port group address sets +AT_CHECK([ovn-sbctl get Address_Set pg1_ip4 addresses], + [0], [[["10.11.0.2", "10.2.0.2"]] +]) +AT_CHECK([ovn-sbctl get Address_Set pg1_ip6 addresses], + [0], [[["2001:db8:11::ff:fe00:1", "2001:db8:2::ff:fe00:2"]] +]) + +AT_CLEANUP + AT_SETUP([ovn -- ACL conjunction]) ovn_start