From patchwork Sat Oct 10 04:15:31 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Pfaff X-Patchwork-Id: 528529 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (unknown [IPv6:2600:3c00::f03c:91ff:fe6e:bdf7]) by ozlabs.org (Postfix) with ESMTP id 9005E140E3D for ; Sat, 10 Oct 2015 15:16:50 +1100 (AEDT) Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id A09D110AD5; Fri, 9 Oct 2015 21:16:11 -0700 (PDT) X-Original-To: dev@openvswitch.org Delivered-To: dev@openvswitch.org Received: from mx3v1.cudamail.com (mx3.cudamail.com [64.34.241.5]) by archives.nicira.com (Postfix) with ESMTPS id 24CEA10ACE for ; Fri, 9 Oct 2015 21:16:10 -0700 (PDT) Received: from bar4.cudamail.com (bar2 [192.168.15.2]) by mx3v1.cudamail.com (Postfix) with ESMTP id 920E3619854 for ; Fri, 9 Oct 2015 22:16:09 -0600 (MDT) X-ASG-Debug-ID: 1444450567-03dc213abb8e780001-byXFYA Received: from mx3-pf3.cudamail.com ([192.168.14.3]) by bar4.cudamail.com with ESMTP id EdphEHB11RbLnXRr (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Fri, 09 Oct 2015 22:16:07 -0600 (MDT) X-Barracuda-Envelope-From: blp@nicira.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.14.3 Received: from unknown (HELO mail-pa0-f48.google.com) (209.85.220.48) by mx3-pf3.cudamail.com with ESMTPS (RC4-SHA encrypted); 10 Oct 2015 04:16:07 -0000 Received-SPF: unknown (mx3-pf3.cudamail.com: Multiple SPF records returned) X-Barracuda-RBL-Trusted-Forwarder: 209.85.220.48 Received: by pablk4 with SMTP id lk4so103948159pab.3 for ; Fri, 09 Oct 2015 21:16:06 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=9iGY5UDV8ZhSlgpV7elj4aBb4S6cpryqDvPP4ROu+8M=; b=fNcc9oSXR37zkk3baL+PrjLSyQZMqLZNULEJewEbcp9BoQZpLawXLZW91pUoMfEtOj fThqvGf3oC0WG5l6pHF2uq/mt+zXU05IWpGPpxGVk8vFycUH6wlIpINUuNEgNToUYcU2 DT7OmQyR1oezCETZji21wmhdr+lGK5D6iq4++IvQj6K/uQFznCDGP6LnaHYeZB0a77zr gg/Eh4bgt3cXChNwDYr3p2ht+truJ86wA7b3/m6i5j9Ww3ufZ2Eav8zi5LZ2+BPlqLj8 FvTH571Ze09piFUc+W59f7GisDUCWbj24UKUST1/YuUo0RRxoIm7blF1mN26xquBbbG+ wMeQ== X-Gm-Message-State: ALoCoQkWrv8J35IJkoD71Gi/J48yIB2JQumcQgzzgGy22KLQSIxMqAu4IHK3KZIpPPWG3OkKO9iC X-Received: by 10.68.90.195 with SMTP id by3mr19985455pbb.148.1444450566797; Fri, 09 Oct 2015 21:16:06 -0700 (PDT) Received: from sigabrt.gateway.sonic.net (173-228-112-112.dsl.dynamic.fusionbroadband.com. [173.228.112.112]) by smtp.gmail.com with ESMTPSA id bk8sm5386937pad.18.2015.10.09.21.16.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 09 Oct 2015 21:16:05 -0700 (PDT) X-CudaMail-Envelope-Sender: blp@nicira.com X-Barracuda-Apparent-Source-IP: 173.228.112.112 From: Ben Pfaff To: dev@openvswitch.org X-CudaMail-Whitelist-To: dev@openvswitch.org X-CudaMail-MID: CM-V3-1008077234 X-CudaMail-DTE: 100915 X-CudaMail-Originating-IP: 209.85.220.48 Date: Fri, 9 Oct 2015 21:15:31 -0700 X-ASG-Orig-Subj: [##CM-V3-1008077234##][PATCH 10/23] patch: Refactor to better support new kinds of patches. Message-Id: <1444450544-11845-11-git-send-email-blp@nicira.com> X-Mailer: git-send-email 2.1.3 In-Reply-To: <1444450544-11845-1-git-send-email-blp@nicira.com> References: <1444450544-11845-1-git-send-email-blp@nicira.com> X-Barracuda-Connect: UNKNOWN[192.168.14.3] X-Barracuda-Start-Time: 1444450567 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://web.cudamail.com:443/cgi-mod/mark.cgi X-ASG-Whitelist: Header =?UTF-8?B?eFwtY3VkYW1haWxcLXdoaXRlbGlzdFwtdG8=?= X-Virus-Scanned: by bsmtpd at cudamail.com X-Barracuda-BRTS-Status: 1 Cc: Ben Pfaff Subject: [ovs-dev] [PATCH 10/23] patch: Refactor to better support new kinds of patches. X-BeenThere: dev@openvswitch.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dev-bounces@openvswitch.org Sender: "dev" Until now, the code here lumped together what was necessary to create and destroy patch ports, with what was necessary to identify the patch ports that were needed. An upcoming patch will add new reasons to create patch ports, so this commit more cleanly separates those two functions. Signed-off-by: Ben Pfaff Acked-by: Justin Pettit --- ovn/controller/patch.c | 70 ++++++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 37 deletions(-) diff --git a/ovn/controller/patch.c b/ovn/controller/patch.c index 1cce559..6a55f90 100644 --- a/ovn/controller/patch.c +++ b/ovn/controller/patch.c @@ -124,19 +124,6 @@ create_patch_ports(struct controller_ctx *ctx, } static void -init_existing_ports(struct controller_ctx *ctx, - struct shash *existing_ports) -{ - const struct ovsrec_port *port; - - OVSREC_PORT_FOR_EACH (port, ctx->ovs_idl) { - if (smap_get(&port->external_ids, "ovn-patch-port")) { - shash_add(existing_ports, port->name, port); - } - } -} - -static void remove_port(struct controller_ctx *ctx, const struct ovsrec_port *port) { @@ -170,11 +157,20 @@ remove_port(struct controller_ctx *ctx, static void parse_bridge_mappings(struct controller_ctx *ctx, const struct ovsrec_bridge *br_int, - const char *mappings_cfg) + struct shash *existing_ports) { - struct shash existing_ports = SHASH_INITIALIZER(&existing_ports); - init_existing_ports(ctx, &existing_ports); + /* Get ovn-bridge-mappings. */ + const char *mappings_cfg = ""; + const struct ovsrec_open_vswitch *cfg; + cfg = ovsrec_open_vswitch_first(ctx->ovs_idl); + if (cfg) { + mappings_cfg = smap_get(&cfg->external_ids, "ovn-bridge-mappings"); + if (!mappings_cfg) { + mappings_cfg = ""; + } + } + /* Create patch ports. */ char *cur, *next, *start; next = start = xstrdup(mappings_cfg); while ((cur = strsep(&next, ",")) && *cur) { @@ -195,20 +191,10 @@ parse_bridge_mappings(struct controller_ctx *ctx, continue; } - create_patch_ports(ctx, network, &existing_ports, br_int, ovs_bridge); - create_patch_ports(ctx, network, &existing_ports, ovs_bridge, br_int); + create_patch_ports(ctx, network, existing_ports, br_int, ovs_bridge); + create_patch_ports(ctx, network, existing_ports, ovs_bridge, br_int); } free(start); - - /* Any ports left in existing_ports are related to configuration that has - * been removed, so we should delete the ports now. */ - struct shash_node *port_node, *port_next_node; - SHASH_FOR_EACH_SAFE (port_node, port_next_node, &existing_ports) { - struct ovsrec_port *port = port_node->data; - shash_delete(&existing_ports, port_node); - remove_port(ctx, port); - } - shash_destroy(&existing_ports); } void @@ -218,15 +204,25 @@ patch_run(struct controller_ctx *ctx, const struct ovsrec_bridge *br_int) return; } - const char *mappings_cfg = ""; - const struct ovsrec_open_vswitch *cfg; - - cfg = ovsrec_open_vswitch_first(ctx->ovs_idl); - if (cfg) { - mappings_cfg = smap_get(&cfg->external_ids, "ovn-bridge-mappings"); - if (!mappings_cfg) { - mappings_cfg = ""; + /* Figure out what patch ports already exist. */ + struct shash existing_ports = SHASH_INITIALIZER(&existing_ports); + const struct ovsrec_port *port; + OVSREC_PORT_FOR_EACH (port, ctx->ovs_idl) { + if (smap_get(&port->external_ids, "ovn-patch-port")) { + shash_add(&existing_ports, port->name, port); } } - parse_bridge_mappings(ctx, br_int, mappings_cfg); + + /* Add any patch ports that should exist but don't. */ + parse_bridge_mappings(ctx, br_int, &existing_ports); + + /* Delete any patch ports that do exist but shouldn't. (Any that both + * should and do exist were removed above.) */ + struct shash_node *port_node, *port_next_node; + SHASH_FOR_EACH_SAFE (port_node, port_next_node, &existing_ports) { + struct ovsrec_port *port = port_node->data; + shash_delete(&existing_ports, port_node); + remove_port(ctx, port); + } + shash_destroy(&existing_ports); }