From patchwork Wed Jul 25 00:59:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Han Zhou X-Patchwork-Id: 948981 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=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="VmZwQ+hi"; dkim-atps=neutral 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 41ZxqY2qBZz9s0R for ; Wed, 25 Jul 2018 11:05:45 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id DC7F2EBC; Wed, 25 Jul 2018 00:59: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 7808FE47 for ; Wed, 25 Jul 2018 00:59:48 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-pl0-f67.google.com (mail-pl0-f67.google.com [209.85.160.67]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id CDAD6708 for ; Wed, 25 Jul 2018 00:59:47 +0000 (UTC) Received: by mail-pl0-f67.google.com with SMTP id 31-v6so2499604plc.4 for ; Tue, 24 Jul 2018 17:59:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=74pazNC29Y94F3vU66pjPC06nNYko9hLiOREyjC4wco=; b=VmZwQ+hi4RtuH7cfKevhUCPy+qj9DRWj5gIAgMQXqWZieUE8BYvxGksg4Gpyu3QuJU BC9+d9gpv6ZKuyzSU4ouOk3zWu3ydTGMf7BbeJIRYPoozCPJdC3FEUrWfUk48szKWzsJ Uv724xvn+qRM77RG0ShpyEIOGiNpriSkZvNpsvHio4F1Is21XAJ3TAuM2cVMyS8tC7oB D+kyBW+B+X7GY7+Dp1tXjkqQYFyqhnu+XzAvqspDBQHcornFiJn8oMGTR80/PLMaOnkz GDErsUp892gxOeD7txTMMo12X33dAOhocUYn5ke6DBJbWX4SwURUaJ1vTd4n7WynvARB 2fzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=74pazNC29Y94F3vU66pjPC06nNYko9hLiOREyjC4wco=; b=OLxPzk7XDydXyMlfm+U4JJvIRU+0OTLdhANA10mdVOUblqqLQzCsKSoRDcSFYqMM53 2da0nFpyMaW//02B8Tc0xgZsle7Rz9z1zu/bVytEmo5IT86iJInkDNXsgEAasTgSUT3R c2lB6Kkx8w/b8eW285u9PDFLqhTJ8n4jiNu8Sjsmh5QutdYL4cb33K9dUWt6HmwSb28F RsSaP+XptcLOVixa5Zv/4a/GISr4v6EaYTbn9F3R+DKmy7qI/W6fuk8uXqjNjTDgcnno 4I6uXTp2LyBFxPQ63unPRk0+pBxpTWfOVWe/+OCCBQMNR4+KWkwc6V94jG6kgsfNR5NP VtEw== X-Gm-Message-State: AOUpUlGNm+14lnxgXi/FiWXcBfXi6tRbXpvTL3RWoHrOxH37Y5/tgoFC VciNUg8H6cB9FDxkJughNOLC2O2w X-Google-Smtp-Source: AAOMgpdtaksGLfubpRbHCei/DpyDpfb7rCaFCCYGp3XmJByD7kwbVb0lOo7hDTYwtE9nwMRGqBL9BA== X-Received: by 2002:a17:902:708b:: with SMTP id z11-v6mr18642570plk.262.1532480387248; Tue, 24 Jul 2018 17:59:47 -0700 (PDT) Received: from localhost.localdomain.localdomain ([216.113.160.71]) by smtp.gmail.com with ESMTPSA id g11-v6sm18798424pgi.90.2018.07.24.17.59.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Jul 2018 17:59:46 -0700 (PDT) From: Han Zhou X-Google-Original-From: Han Zhou To: dev@openvswitch.org Date: Tue, 24 Jul 2018 17:59:39 -0700 Message-Id: <1532480380-97578-14-git-send-email-hzhou8@ebay.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1532480380-97578-1-git-send-email-hzhou8@ebay.com> References: <1532480380-97578-1-git-send-email-hzhou8@ebay.com> X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, 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] [RFC 13/14] ovn-controller: Split port_groups from runtime_data. 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 Signed-off-by: Han Zhou --- ovn/controller/ovn-controller.c | 91 +++++++++++++++++++++++++++++++++-------- 1 file changed, 73 insertions(+), 18 deletions(-) diff --git a/ovn/controller/ovn-controller.c b/ovn/controller/ovn-controller.c index 7bccb42..13bc333 100644 --- a/ovn/controller/ovn-controller.c +++ b/ovn/controller/ovn-controller.c @@ -317,7 +317,7 @@ addr_sets_update(const struct sbrec_address_set_table *address_set_table, /* Iterate port groups in the southbound database. Create and update the * corresponding symtab entries as necessary. */ -static void + static void port_groups_init(const struct sbrec_port_group_table *port_group_table, struct shash *port_groups) { @@ -698,6 +698,56 @@ addr_sets_sb_address_set_handler(struct engine_node *node) return true; } +struct ed_type_port_groups{ + struct shash port_groups; + bool change_tracked; + struct sset new; + struct sset deleted; + struct sset updated; +}; + +static void +en_port_groups_init(struct engine_node *node) +{ + struct ed_type_port_groups *pg = (struct ed_type_port_groups *)node->data; + shash_init(&pg->port_groups); + pg->change_tracked = false; + sset_init(&pg->new); + sset_init(&pg->deleted); + sset_init(&pg->updated); +} + +static void +en_port_groups_cleanup(struct engine_node *node) +{ + struct ed_type_port_groups *pg = (struct ed_type_port_groups *)node->data; + expr_const_sets_destroy(&pg->port_groups); + shash_destroy(&pg->port_groups); + sset_destroy(&pg->new); + sset_destroy(&pg->deleted); + sset_destroy(&pg->updated); +} + +static void +en_port_groups_run(struct engine_node *node) +{ + struct ed_type_port_groups *pg = (struct ed_type_port_groups *)node->data; + + sset_clear(&pg->new); + sset_clear(&pg->deleted); + sset_clear(&pg->updated); + expr_const_sets_destroy(&pg->port_groups); + + struct sbrec_port_group_table *pg_table = + (struct sbrec_port_group_table *)EN_OVSDB_GET( + engine_get_input("SB_port_group", node)); + + port_groups_init(pg_table, &pg->port_groups); + + pg->change_tracked = false; + node->changed = true; +} + struct ed_type_runtime_data { /* Contains "struct local_datapath" nodes. */ struct hmap local_datapaths; @@ -713,7 +763,6 @@ struct ed_type_runtime_data { * _ */ struct sset local_lport_ids; struct sset active_tunnels; - struct shash port_groups; /* connection tracking zones. */ unsigned long ct_zone_bitmap[BITMAP_N_LONGS(MAX_CT_ZONES)]; @@ -736,7 +785,6 @@ en_runtime_data_init(struct engine_node *node) sset_init(&data->local_lports); sset_init(&data->local_lport_ids); sset_init(&data->active_tunnels); - shash_init(&data->port_groups); shash_init(&data->pending_ct_zones); simap_init(&data->ct_zones); @@ -753,9 +801,6 @@ en_runtime_data_cleanup(struct engine_node *node) struct ed_type_runtime_data *data = (struct ed_type_runtime_data *)node->data; - expr_const_sets_destroy(&data->port_groups); - shash_destroy(&data->port_groups); - sset_destroy(&data->local_lports); sset_destroy(&data->local_lport_ids); sset_destroy(&data->active_tunnels); @@ -781,7 +826,6 @@ en_runtime_data_run(struct engine_node *node) struct sset *local_lports = &data->local_lports; struct sset *local_lport_ids = &data->local_lport_ids; struct sset *active_tunnels = &data->active_tunnels; - struct shash *port_groups = &data->port_groups; unsigned long *ct_zone_bitmap = data->ct_zone_bitmap; struct shash *pending_ct_zones = &data->pending_ct_zones; struct simap *ct_zones = &data->ct_zones; @@ -801,7 +845,6 @@ en_runtime_data_run(struct engine_node *node) sset_destroy(local_lports); sset_destroy(local_lport_ids); sset_destroy(active_tunnels); - expr_const_sets_destroy(port_groups); sset_init(local_lports); sset_init(local_lport_ids); sset_init(active_tunnels); @@ -867,11 +910,6 @@ en_runtime_data_run(struct engine_node *node) active_tunnels, local_datapaths, local_lports, local_lport_ids); - struct sbrec_port_group_table *pg_table = - (struct sbrec_port_group_table *)EN_OVSDB_GET( - engine_get_input("SB_port_group", node)); - port_groups_init(pg_table, port_groups); - update_ct_zones(local_lports, local_datapaths, ct_zones, ct_zone_bitmap, pending_ct_zones); @@ -964,7 +1002,6 @@ en_flow_output_run(struct engine_node *node) struct sset *local_lports = &rt_data->local_lports; struct sset *local_lport_ids = &rt_data->local_lport_ids; struct sset *active_tunnels = &rt_data->active_tunnels; - struct shash *port_groups = &rt_data->port_groups; struct simap *ct_zones = &rt_data->ct_zones; struct ovsrec_open_vswitch_table *ovs_table = @@ -984,6 +1021,11 @@ en_flow_output_run(struct engine_node *node) (struct ed_type_addr_sets *)engine_get_input("addr_sets", node)->data; struct shash *addr_sets = &as_data->addr_sets; + struct ed_type_port_groups *pg_data = + (struct ed_type_port_groups *)engine_get_input( + "port_groups", node)->data; + struct shash *port_groups = &pg_data->port_groups; + const struct sbrec_chassis *chassis = NULL; if (chassis_id) { chassis = chassis_lookup_by_name(sbrec_chassis_by_name, chassis_id); @@ -1080,11 +1122,15 @@ flow_output_sb_logical_flow_handler(struct engine_node *node) struct hmap *local_datapaths = &data->local_datapaths; struct sset *local_lport_ids = &data->local_lport_ids; struct sset *active_tunnels = &data->active_tunnels; - struct shash *port_groups = &data->port_groups; struct ed_type_addr_sets *as_data = (struct ed_type_addr_sets *)engine_get_input("addr_sets", node)->data; struct shash *addr_sets = &as_data->addr_sets; + struct ed_type_port_groups *pg_data = + (struct ed_type_port_groups *)engine_get_input( + "port_groups", node)->data; + struct shash *port_groups = &pg_data->port_groups; + struct ovsrec_open_vswitch_table *ovs_table = (struct ovsrec_open_vswitch_table *)EN_OVSDB_GET( engine_get_input("OVS_open_vswitch", node)); @@ -1098,6 +1144,7 @@ flow_output_sb_logical_flow_handler(struct engine_node *node) engine_ovsdb_node_get_index( engine_get_input("SB_chassis", node), "name"); + const struct sbrec_chassis *chassis = NULL; if (chassis_id) { chassis = chassis_lookup_by_name(sbrec_chassis_by_name, chassis_id); @@ -1299,7 +1346,7 @@ flow_output_addr_sets_handler(struct engine_node *node) struct hmap *local_datapaths = &data->local_datapaths; struct sset *local_lport_ids = &data->local_lport_ids; struct sset *active_tunnels = &data->active_tunnels; - struct shash *port_groups = &data->port_groups; + struct ed_type_addr_sets *as_data = (struct ed_type_addr_sets *)engine_get_input("addr_sets", node)->data; @@ -1309,6 +1356,11 @@ flow_output_addr_sets_handler(struct engine_node *node) } struct shash *addr_sets = &as_data->addr_sets; + struct ed_type_port_groups *pg_data = + (struct ed_type_port_groups *)engine_get_input( + "port_groups", node)->data; + struct shash *port_groups = &pg_data->port_groups; + struct ovsrec_open_vswitch_table *ovs_table = (struct ovsrec_open_vswitch_table *)EN_OVSDB_GET( engine_get_input("OVS_open_vswitch", node)); @@ -1477,6 +1529,7 @@ main(int argc, char *argv[]) struct ed_type_runtime_data ed_runtime_data; struct ed_type_flow_output ed_flow_output; struct ed_type_addr_sets ed_addr_sets; + struct ed_type_port_groups ed_port_groups; #define SB_NODE(NAME, NAME_STR) ENGINE_NODE_SB(NAME, NAME_STR); SB_NODES @@ -1496,10 +1549,13 @@ main(int argc, char *argv[]) ENGINE_NODE(runtime_data, "runtime_data"); ENGINE_NODE(flow_output, "flow_output"); ENGINE_NODE(addr_sets, "addr_sets"); + ENGINE_NODE(port_groups, "port_groups"); engine_add_input(&en_addr_sets, &en_sb_address_set, addr_sets_sb_address_set_handler); + engine_add_input(&en_port_groups, &en_sb_port_group, NULL); engine_add_input(&en_flow_output, &en_addr_sets, flow_output_addr_sets_handler); + engine_add_input(&en_flow_output, &en_port_groups, NULL); engine_add_input(&en_flow_output, &en_runtime_data, NULL); engine_add_input(&en_flow_output, &en_ovs_open_vswitch, NULL); @@ -1526,7 +1582,6 @@ main(int argc, char *argv[]) engine_add_input(&en_runtime_data, &en_ovs_interface, NULL); engine_add_input(&en_runtime_data, &en_sb_chassis, NULL); - engine_add_input(&en_runtime_data, &en_sb_port_group, NULL); engine_add_input(&en_runtime_data, &en_sb_datapath_binding, NULL); engine_add_input(&en_runtime_data, &en_sb_port_binding, runtime_data_sb_port_binding_handler); engine_add_input(&en_runtime_data, &en_sb_gateway_chassis, NULL); @@ -1684,7 +1739,7 @@ main(int argc, char *argv[]) if (pending_pkt.conn) { if (br_int && chassis) { char *error = ofctrl_inject_pkt(br_int, pending_pkt.flow_s, - &ed_runtime_data.port_groups, + &ed_port_groups.port_groups, &ed_addr_sets.addr_sets); if (error) { unixctl_command_reply_error(pending_pkt.conn, error);