From e387e3e885222651f11a23c401e9e27fca3362ef Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Thu, 7 May 2015 16:09:41 -0700 Subject: [PATCH] ovn: Adopt consistent naming, by renaming "Bindings" to "Binding". The convention in OVSDB is to use singular names for database tables, but Bindings was plural. Signed-off-by: Ben Pfaff Acked-by: Justin Pettit --- ovn/controller/automake.mk | 4 +- ovn/controller/{bindings.c => binding.c} | 42 ++++++++--------- ovn/controller/{bindings.h => binding.h} | 12 ++--- ovn/controller/ovn-controller.c | 8 ++-- ovn/controller/physical.c | 4 +- ovn/controller/pipeline.c | 8 ++-- ovn/northd/ovn-northd.c | 60 ++++++++++++------------ ovn/ovn-architecture.7.xml | 30 ++++++------ ovn/ovn-nb.xml | 2 +- ovn/ovn-sb.ovsschema | 2 +- ovn/ovn-sb.xml | 12 ++--- 11 files changed, 92 insertions(+), 92 deletions(-) rename ovn/controller/{bindings.c => binding.c} (76%) rename ovn/controller/{bindings.h => binding.h} (74%) diff --git a/ovn/controller/automake.mk b/ovn/controller/automake.mk index 01bb28745..12a360669 100644 --- a/ovn/controller/automake.mk +++ b/ovn/controller/automake.mk @@ -1,7 +1,7 @@ bin_PROGRAMS += ovn/controller/ovn-controller ovn_controller_ovn_controller_SOURCES = \ - ovn/controller/bindings.c \ - ovn/controller/bindings.h \ + ovn/controller/binding.c \ + ovn/controller/binding.h \ ovn/controller/chassis.c \ ovn/controller/chassis.h \ ovn/controller/ofctrl.c \ diff --git a/ovn/controller/bindings.c b/ovn/controller/binding.c similarity index 76% rename from ovn/controller/bindings.c rename to ovn/controller/binding.c index e5b48272f..ab6d9f901 100644 --- a/ovn/controller/bindings.c +++ b/ovn/controller/binding.c @@ -14,7 +14,7 @@ */ #include -#include "bindings.h" +#include "binding.h" #include "lib/sset.h" #include "lib/util.h" @@ -23,10 +23,10 @@ #include "ovn/lib/ovn-sb-idl.h" #include "ovn-controller.h" -VLOG_DEFINE_THIS_MODULE(bindings); +VLOG_DEFINE_THIS_MODULE(binding); void -bindings_init(struct controller_ctx *ctx) +binding_init(struct controller_ctx *ctx) { ovsdb_idl_add_table(ctx->ovs_idl, &ovsrec_table_open_vswitch); ovsdb_idl_add_column(ctx->ovs_idl, &ovsrec_open_vswitch_col_bridges); @@ -72,9 +72,9 @@ get_local_iface_ids(struct controller_ctx *ctx, struct sset *lports) } void -bindings_run(struct controller_ctx *ctx) +binding_run(struct controller_ctx *ctx) { - const struct sbrec_bindings *bindings_rec; + const struct sbrec_binding *binding_rec; struct ovsdb_idl_txn *txn; struct sset lports, all_lports; const char *name; @@ -90,27 +90,27 @@ bindings_run(struct controller_ctx *ctx) "ovn-controller: updating bindings for '%s'", ctx->chassis_id); - SBREC_BINDINGS_FOR_EACH(bindings_rec, ctx->ovnsb_idl) { - if (sset_find_and_delete(&lports, bindings_rec->logical_port) || - (bindings_rec->parent_port && bindings_rec->parent_port[0] && - sset_contains(&all_lports, bindings_rec->parent_port))) { - if (!strcmp(bindings_rec->chassis, ctx->chassis_id)) { + SBREC_BINDING_FOR_EACH(binding_rec, ctx->ovnsb_idl) { + if (sset_find_and_delete(&lports, binding_rec->logical_port) || + (binding_rec->parent_port && binding_rec->parent_port[0] && + sset_contains(&all_lports, binding_rec->parent_port))) { + if (!strcmp(binding_rec->chassis, ctx->chassis_id)) { continue; } - if (bindings_rec->chassis[0]) { + if (binding_rec->chassis[0]) { VLOG_INFO("Changing chassis for lport %s from %s to %s", - bindings_rec->logical_port, bindings_rec->chassis, + binding_rec->logical_port, binding_rec->chassis, ctx->chassis_id); } - sbrec_bindings_set_chassis(bindings_rec, ctx->chassis_id); - } else if (!strcmp(bindings_rec->chassis, ctx->chassis_id)) { - sbrec_bindings_set_chassis(bindings_rec, ""); + sbrec_binding_set_chassis(binding_rec, ctx->chassis_id); + } else if (!strcmp(binding_rec->chassis, ctx->chassis_id)) { + sbrec_binding_set_chassis(binding_rec, ""); } } retval = ovsdb_idl_txn_commit_block(txn); if (retval == TXN_ERROR) { - VLOG_INFO("Problem committing bindings information: %s", + VLOG_INFO("Problem committing binding information: %s", ovsdb_idl_txn_status_to_string(retval)); } @@ -124,14 +124,14 @@ bindings_run(struct controller_ctx *ctx) } void -bindings_destroy(struct controller_ctx *ctx) +binding_destroy(struct controller_ctx *ctx) { int retval = TXN_TRY_AGAIN; ovs_assert(ctx->ovnsb_idl); while (retval != TXN_SUCCESS && retval != TXN_UNCHANGED) { - const struct sbrec_bindings *bindings_rec; + const struct sbrec_binding *binding_rec; struct ovsdb_idl_txn *txn; txn = ovsdb_idl_txn_create(ctx->ovnsb_idl); @@ -139,9 +139,9 @@ bindings_destroy(struct controller_ctx *ctx) "ovn-controller: removing all bindings for '%s'", ctx->chassis_id); - SBREC_BINDINGS_FOR_EACH(bindings_rec, ctx->ovnsb_idl) { - if (!strcmp(bindings_rec->chassis, ctx->chassis_id)) { - sbrec_bindings_set_chassis(bindings_rec, ""); + SBREC_BINDING_FOR_EACH(binding_rec, ctx->ovnsb_idl) { + if (!strcmp(binding_rec->chassis, ctx->chassis_id)) { + sbrec_binding_set_chassis(binding_rec, ""); } } diff --git a/ovn/controller/bindings.h b/ovn/controller/binding.h similarity index 74% rename from ovn/controller/bindings.h rename to ovn/controller/binding.h index 07681cd84..2611173d8 100644 --- a/ovn/controller/bindings.h +++ b/ovn/controller/binding.h @@ -14,13 +14,13 @@ */ -#ifndef OVN_BINDINGS_H -#define OVN_BINDINGS_H 1 +#ifndef OVN_BINDING_H +#define OVN_BINDING_H 1 struct controller_ctx; -void bindings_init(struct controller_ctx *); -void bindings_run(struct controller_ctx *); -void bindings_destroy(struct controller_ctx *); +void binding_init(struct controller_ctx *); +void binding_run(struct controller_ctx *); +void binding_destroy(struct controller_ctx *); -#endif /* ovn/bindings.h */ +#endif /* ovn/binding.h */ diff --git a/ovn/controller/ovn-controller.c b/ovn/controller/ovn-controller.c index 1fd0161e8..8ef8c25b6 100644 --- a/ovn/controller/ovn-controller.c +++ b/ovn/controller/ovn-controller.c @@ -40,7 +40,7 @@ #include "util.h" #include "ofctrl.h" -#include "bindings.h" +#include "binding.h" #include "chassis.h" #include "physical.h" #include "pipeline.h" @@ -184,7 +184,7 @@ main(int argc, char *argv[]) ovsdb_idl_add_column(ctx.ovs_idl, &ovsrec_open_vswitch_col_external_ids); chassis_init(&ctx); - bindings_init(&ctx); + binding_init(&ctx); pipeline_init(); get_initial_snapshot(ctx.ovs_idl); @@ -229,7 +229,7 @@ main(int argc, char *argv[]) ofctrl_clear_flows(); chassis_run(&ctx); - bindings_run(&ctx); + binding_run(&ctx); pipeline_run(&ctx); physical_run(&ctx); ofctrl_run(&ctx); @@ -249,7 +249,7 @@ main(int argc, char *argv[]) unixctl_server_destroy(unixctl); pipeline_destroy(&ctx); ofctrl_destroy(); - bindings_destroy(&ctx); + binding_destroy(&ctx); chassis_destroy(&ctx); ovsdb_idl_destroy(ctx.ovs_idl); diff --git a/ovn/controller/physical.c b/ovn/controller/physical.c index 8d9f652e6..593899d82 100644 --- a/ovn/controller/physical.c +++ b/ovn/controller/physical.c @@ -90,8 +90,8 @@ physical_run(struct controller_ctx *ctx) /* Set up flows in table 0 for physical-to-logical translation and in table * 64 for logical-to-physical translation. */ - const struct sbrec_bindings *binding; - SBREC_BINDINGS_FOR_EACH (binding, ctx->ovnsb_idl) { + const struct sbrec_binding *binding; + SBREC_BINDING_FOR_EACH (binding, ctx->ovnsb_idl) { /* Find the Openflow port for the logical port, as 'ofport'. If it's * on a remote chassis, this is the OpenFlow port for the tunnel to * that chassis (and set 'local' to false). Otherwise, if it's on the diff --git a/ovn/controller/pipeline.c b/ovn/controller/pipeline.c index 6df54858b..58412e625 100644 --- a/ovn/controller/pipeline.c +++ b/ovn/controller/pipeline.c @@ -143,7 +143,7 @@ symtab_init(void) * practical for use in an OpenFlow flow table than a UUID. * * 'ports' maps 'logical_port' names to 'tunnel_key' values in the OVN_SB - * Bindings table within the logical datapath. */ + * Binding table within the logical datapath. */ struct logical_datapath { struct hmap_node hmap_node; /* Indexed on 'uuid'. */ struct uuid uuid; /* The logical_datapath's UUID. */ @@ -204,7 +204,7 @@ ldp_free(struct logical_datapath *ldp) free(ldp); } -/* Iterates through all of the records in the Bindings table, updating the +/* Iterates through all of the records in the Binding table, updating the * table of logical_datapaths to match the values found in active Bindings. */ static void ldp_run(struct controller_ctx *ctx) @@ -214,8 +214,8 @@ ldp_run(struct controller_ctx *ctx) simap_clear(&ldp->ports); } - const struct sbrec_bindings *binding; - SBREC_BINDINGS_FOR_EACH (binding, ctx->ovnsb_idl) { + const struct sbrec_binding *binding; + SBREC_BINDING_FOR_EACH (binding, ctx->ovnsb_idl) { struct logical_datapath *ldp; ldp = ldp_lookup(&binding->logical_datapath); diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c index 0b5becfef..cfad6bef1 100644 --- a/ovn/northd/ovn-northd.c +++ b/ovn/northd/ovn-northd.c @@ -416,7 +416,7 @@ build_pipeline(struct northd_context *ctx) } static bool -parents_equal(const struct sbrec_bindings *binding, +parents_equal(const struct sbrec_binding *binding, const struct nbrec_logical_port *lport) { if (!!binding->parent_port != !!lport->parent_name) { @@ -434,7 +434,7 @@ parents_equal(const struct sbrec_bindings *binding, } static bool -tags_equal(const struct sbrec_bindings *binding, +tags_equal(const struct sbrec_binding *binding, const struct nbrec_logical_port *lport) { if (binding->n_tag != lport->n_tag) { @@ -447,7 +447,7 @@ tags_equal(const struct sbrec_bindings *binding, struct binding_hash_node { struct hmap_node lp_node; /* In 'lp_map', by binding->logical_port. */ struct hmap_node tk_node; /* In 'tk_map', by binding->tunnel_key. */ - const struct sbrec_bindings *binding; + const struct sbrec_binding *binding; }; static bool @@ -485,14 +485,14 @@ choose_tunnel_key(const struct hmap *tk_hmap) /* * When a change has occurred in the OVN_Northbound database, we go through and - * make sure that the contents of the Bindings table in the OVN_Southbound + * make sure that the contents of the Binding table in the OVN_Southbound * database are up to date with the logical ports defined in the * OVN_Northbound database. */ static void set_bindings(struct northd_context *ctx) { - const struct sbrec_bindings *binding; + const struct sbrec_binding *binding; const struct nbrec_logical_port *lport; /* @@ -513,7 +513,7 @@ set_bindings(struct northd_context *ctx) struct hmap lp_hmap = HMAP_INITIALIZER(&lp_hmap); struct hmap tk_hmap = HMAP_INITIALIZER(&tk_hmap); - SBREC_BINDINGS_FOR_EACH(binding, ctx->ovnsb_idl) { + SBREC_BINDING_FOR_EACH(binding, ctx->ovnsb_idl) { struct binding_hash_node *hash_node = xzalloc(sizeof *hash_node); hash_node->binding = binding; hmap_insert(&lp_hmap, &hash_node->lp_node, @@ -548,17 +548,17 @@ set_bindings(struct northd_context *ctx) if (!macs_equal(binding->mac, binding->n_mac, lport->macs, lport->n_macs)) { - sbrec_bindings_set_mac(binding, + sbrec_binding_set_mac(binding, (const char **) lport->macs, lport->n_macs); } if (!parents_equal(binding, lport)) { - sbrec_bindings_set_parent_port(binding, lport->parent_name); + sbrec_binding_set_parent_port(binding, lport->parent_name); } if (!tags_equal(binding, lport)) { - sbrec_bindings_set_tag(binding, lport->tag, lport->n_tag); + sbrec_binding_set_tag(binding, lport->tag, lport->n_tag); } if (!uuid_equals(&binding->logical_datapath, &logical_datapath)) { - sbrec_bindings_set_logical_datapath(binding, + sbrec_binding_set_logical_datapath(binding, logical_datapath); } } else { @@ -569,21 +569,21 @@ set_bindings(struct northd_context *ctx) continue; } - binding = sbrec_bindings_insert(ctx->ovnsb_txn); - sbrec_bindings_set_logical_port(binding, lport->name); - sbrec_bindings_set_mac(binding, + binding = sbrec_binding_insert(ctx->ovnsb_txn); + sbrec_binding_set_logical_port(binding, lport->name); + sbrec_binding_set_mac(binding, (const char **) lport->macs, lport->n_macs); if (lport->parent_name && lport->n_tag > 0) { - sbrec_bindings_set_parent_port(binding, lport->parent_name); - sbrec_bindings_set_tag(binding, lport->tag, lport->n_tag); + sbrec_binding_set_parent_port(binding, lport->parent_name); + sbrec_binding_set_tag(binding, lport->tag, lport->n_tag); } - sbrec_bindings_set_tunnel_key(binding, tunnel_key); - sbrec_bindings_set_logical_datapath(binding, logical_datapath); + sbrec_binding_set_tunnel_key(binding, tunnel_key); + sbrec_binding_set_logical_datapath(binding, logical_datapath); /* Add the tunnel key to the tk_hmap so that we don't try to use it * for another port. (We don't want it in the lp_hmap because that - * would just get the Bindings record deleted later.) */ + * would just get the Binding record deleted later.) */ struct binding_hash_node *hash_node = xzalloc(sizeof *hash_node); hash_node->binding = binding; hmap_insert(&tk_hmap, &hash_node->tk_node, @@ -594,7 +594,7 @@ set_bindings(struct northd_context *ctx) struct binding_hash_node *hash_node; HMAP_FOR_EACH (hash_node, lp_node, &lp_hmap) { hmap_remove(&lp_hmap, &hash_node->lp_node); - sbrec_bindings_delete(hash_node->binding); + sbrec_binding_delete(hash_node->binding); } hmap_destroy(&lp_hmap); @@ -617,14 +617,14 @@ ovnnb_db_changed(struct northd_context *ctx) /* * The only change we get notified about is if the 'chassis' column of the - * 'Bindings' table changes. When this column is not empty, it means we need to + * 'Binding' table changes. When this column is not empty, it means we need to * set the corresponding logical port as 'up' in the northbound DB. */ static void ovnsb_db_changed(struct northd_context *ctx) { struct hmap lports_hmap; - const struct sbrec_bindings *binding; + const struct sbrec_binding *binding; const struct nbrec_logical_port *lport; struct lport_hash_node { @@ -643,7 +643,7 @@ ovnsb_db_changed(struct northd_context *ctx) hash_string(lport->name, 0)); } - SBREC_BINDINGS_FOR_EACH(binding, ctx->ovnsb_idl) { + SBREC_BINDING_FOR_EACH(binding, ctx->ovnsb_idl) { lport = NULL; HMAP_FOR_EACH_WITH_HASH(hash_node, node, hash_string(binding->logical_port, 0), &lports_hmap) { @@ -787,14 +787,14 @@ main(int argc, char *argv[]) * has to care about, so we'll enable monitoring those directly. */ ctx.ovnsb_idl = ovnsb_idl = ovsdb_idl_create(ovnsb_db, &sbrec_idl_class, false, true); - ovsdb_idl_add_table(ovnsb_idl, &sbrec_table_bindings); - ovsdb_idl_add_column(ovnsb_idl, &sbrec_bindings_col_logical_port); - ovsdb_idl_add_column(ovnsb_idl, &sbrec_bindings_col_chassis); - ovsdb_idl_add_column(ovnsb_idl, &sbrec_bindings_col_mac); - ovsdb_idl_add_column(ovnsb_idl, &sbrec_bindings_col_tag); - ovsdb_idl_add_column(ovnsb_idl, &sbrec_bindings_col_parent_port); - ovsdb_idl_add_column(ovnsb_idl, &sbrec_bindings_col_logical_datapath); - ovsdb_idl_add_column(ovnsb_idl, &sbrec_bindings_col_tunnel_key); + ovsdb_idl_add_table(ovnsb_idl, &sbrec_table_binding); + ovsdb_idl_add_column(ovnsb_idl, &sbrec_binding_col_logical_port); + ovsdb_idl_add_column(ovnsb_idl, &sbrec_binding_col_chassis); + ovsdb_idl_add_column(ovnsb_idl, &sbrec_binding_col_mac); + ovsdb_idl_add_column(ovnsb_idl, &sbrec_binding_col_tag); + ovsdb_idl_add_column(ovnsb_idl, &sbrec_binding_col_parent_port); + ovsdb_idl_add_column(ovnsb_idl, &sbrec_binding_col_logical_datapath); + ovsdb_idl_add_column(ovnsb_idl, &sbrec_binding_col_tunnel_key); ovsdb_idl_add_column(ovnsb_idl, &sbrec_pipeline_col_logical_datapath); ovsdb_idl_omit_alert(ovnsb_idl, &sbrec_pipeline_col_logical_datapath); ovsdb_idl_add_column(ovnsb_idl, &sbrec_pipeline_col_table_id); diff --git a/ovn/ovn-architecture.7.xml b/ovn/ovn-architecture.7.xml index 36732590e..5d95e26e8 100644 --- a/ovn/ovn-architecture.7.xml +++ b/ovn/ovn-architecture.7.xml @@ -152,7 +152,7 @@ software gateway. Northbound, it connects to the OVN Southbound Database to learn about OVN configuration and status and to populate the PN table and the Chassis column in - Bindings table with the hypervisor's status. + Binding table with the hypervisor's status. Southbound, it connects to ovs-vswitchd(8) as an OpenFlow controller, for control over network traffic, and to the local ovsdb-server(1) to allow it to monitor and @@ -350,7 +350,7 @@ flow to recognize that packets destined to the new port's MAC address should be delivered to it, and update the flow that delivers broadcast and multicast packets to include the new port. - It also creates a record in the Bindings table and + It also creates a record in the Binding table and populates all its columns except the column that identifies the chassis. @@ -381,7 +381,7 @@ Interface. In response, it updates the local hypervisor's OpenFlow tables so that packets to and from the VIF are properly handled. Afterward, in the OVN Southbound DB, it updates the - Bindings table's chassis column for the + Binding table's chassis column for the row that links the logical port from external-ids:iface-id to the hypervisor. @@ -390,7 +390,7 @@ Some CMS systems, including OpenStack, fully start a VM only when its networking is ready. To support this, ovn-northd notices the chassis column updated for the row in - Bindings table and pushes this upward by updating the + Binding table and pushes this upward by updating the column in the OVN Northbound database's table to indicate that the VIF is now up. The CMS, if it uses this feature, can @@ -401,7 +401,7 @@
  • On every hypervisor but the one where the VIF resides, ovn-controller notices the completely populated row in the - Bindings table. This provides ovn-controller + Binding table. This provides ovn-controller the physical location of the logical port, so each instance updates the OpenFlow tables of its switch (based on logical datapath flows in the OVN DB Pipeline table) so that packets to and from the VIF can @@ -418,12 +418,12 @@ On the hypervisor where the VM was powered off, ovn-controller notices that the VIF was deleted. In response, it removes the Chassis column content in the - Bindings table for the logical port. + Binding table for the logical port.
  • On every hypervisor, ovn-controller notices the empty - Chassis column in the Bindings table's row + Chassis column in the Binding table's row for the logical port. This means that ovn-controller no longer knows the physical location of the logical port, so each instance updates its OpenFlow table to reflect that. @@ -444,7 +444,7 @@ ovn-northd receives the OVN Northbound update and in turn updates the OVN Southbound database accordingly, by removing or updating the rows from the OVN Southbound database - Pipeline table and Bindings table that + Pipeline table and Binding table that were related to the now-destroyed VIF.
  • @@ -454,7 +454,7 @@ in the previous step. ovn-controller updates OpenFlow tables to reflect the update, although there may not be much to do, since the VIF had already become unreachable when it was removed from the - Bindings table in a previous step. + Binding table in a previous step. @@ -542,29 +542,29 @@ In turn, it makes the corresponding updates to the OVN Southbound database, by adding rows to the OVN Southbound database's Pipeline table to reflect the new port and also by - creating a new row in the Bindings table and + creating a new row in the Binding table and populating all its columns except the column that identifies the chassis.
  • On every hypervisor, ovn-controller subscribes to the - changes in the Bindings table. When a new row is created + changes in the Binding table. When a new row is created by ovn-northd that includes a value in - parent_port column of Bindings table, the + parent_port column of Binding table, the ovn-controller in the hypervisor whose OVN integration bridge has that same value in vif-id in external-ids:iface-id updates the local hypervisor's OpenFlow tables so that packets to and from the VIF with the particular VLAN tag are properly handled. Afterward it updates the chassis column of - the Bindings to reflect the physical location. + the Binding to reflect the physical location.
  • One can only start the application inside the container after the underlying network is ready. To support this, ovn-northd - notices the updated chassis column in Bindings + notices the updated chassis column in Binding table and updates the column in the OVN Northbound database's table to indicate that the @@ -583,7 +583,7 @@ updates the OVN Southbound database accordingly, by removing or updating the rows from the OVN Southbound database Pipeline table that were related to the now-destroyed - CIF. It also deletes the row in the Bindings table + CIF. It also deletes the row in the Binding table for that CIF.
  • diff --git a/ovn/ovn-nb.xml b/ovn/ovn-nb.xml index 2c6f7f855..b15aeaccb 100644 --- a/ovn/ovn-nb.xml +++ b/ovn/ovn-nb.xml @@ -119,7 +119,7 @@ This column is populated by ovn-northd, rather than by the CMS plugin as is most of this database. When a logical port is bound to a physical location in the OVN Southbound database table, ovn-northd + db="OVN_Southbound" table="Binding"/> table, ovn-northd sets this column to true; otherwise, or if the port becomes unbound later, it sets it to false. This allows the CMS to wait for a VM's (or container's) networking to diff --git a/ovn/ovn-sb.ovsschema b/ovn/ovn-sb.ovsschema index a29e98631..699bfc535 100644 --- a/ovn/ovn-sb.ovsschema +++ b/ovn/ovn-sb.ovsschema @@ -45,7 +45,7 @@ "match": {"type": "string"}, "actions": {"type": "string"}}, "isRoot": true}, - "Bindings": { + "Binding": { "columns": { "logical_datapath": {"type": "uuid"}, "logical_port": {"type": "string"}, diff --git a/ovn/ovn-sb.xml b/ovn/ovn-sb.xml index bc3a20ec6..334d11a0c 100644 --- a/ovn/ovn-sb.xml +++ b/ovn/ovn-sb.xml @@ -80,7 +80,7 @@

    Bindings data

    - The Bindings tables contain the current placement of logical components + The Binding tables contain the current placement of logical components (such as VMs and VIFs) onto chassis and the bindings between logical ports and MACs.

    @@ -98,7 +98,7 @@

    - The table is currently the only Bindings table. + The table is currently the only binding data.

    @@ -231,7 +231,7 @@ The logical datapath to which the logical flow belongs. A logical datapath implements a logical pipeline among the ports in the table associated with it. (No table represents a + table="Binding"/> table associated with it. (No table represents a logical datapath.) In practice, the pipeline in a given logical datapath implements either a logical switch or a logical router, and ovn-northd reuses the UUIDs for those logical entities from @@ -456,8 +456,8 @@ String constants have the same syntax as quoted strings in JSON (thus, they are Unicode strings). String constants are used for naming logical ports. Thus, the useful values are names from the and - table in a logical flow's names from the and + tables in a logical flow's .

    @@ -633,7 +633,7 @@
    - +

    Each row in this table identifies the physical location of a logical port. -- 2.20.1