Signed-off-by: Gavin McKee <[email protected]>
---
 controller/ovn-controller.8.xml |  5 +++++
 controller/patch.c              | 21 +++++++++++++++++----
 2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/controller/ovn-controller.8.xml b/controller/ovn-controller.8.xml
index 5007f5f80..422eb2cf7 100644
--- a/controller/ovn-controller.8.xml
+++ b/controller/ovn-controller.8.xml
@@ -554,6 +554,11 @@
           bridge, with the same <code>external_ids:ovn-localnet-port</code>
           value.
         </p>
+        <p>
+          When a <code>localnet</code> port has additional values in its
+          <code>external_ids</code> column, these key-value pairs are copied to
+          the corresponding patch ports.
+        </p>
       </dd>
 
       <dt>
diff --git a/controller/patch.c b/controller/patch.c
index 4fed6e375..b83c28162 100644
--- a/controller/patch.c
+++ b/controller/patch.c
@@ -79,7 +79,8 @@ create_patch_port(struct ovsdb_idl_txn *ovs_idl_txn,
                   const char *key, const char *value,
                   const struct ovsrec_bridge *src, const char *src_name,
                   const struct ovsrec_bridge *dst, const char *dst_name,
-                  struct shash *existing_ports)
+                  struct shash *existing_ports,
+                  const struct smap *extra_ids)
 {
     for (size_t i = 0; i < src->n_ports; i++) {
         if (match_patch_port(src->ports[i], dst_name)) {
@@ -94,9 +95,16 @@ create_patch_port(struct ovsdb_idl_txn *ovs_idl_txn,
             src_name, src->name, dst->name);
 
     const struct smap if_options = SMAP_CONST1(&if_options, "peer", dst_name);
-    const struct smap port_ids = SMAP_CONST1(&port_ids, key, value);
+
+    struct smap port_ids = SMAP_INITIALIZER(&port_ids);
+    if (extra_ids) {
+        smap_clone(&port_ids, extra_ids);
+    }
+    smap_replace(&port_ids, key, value);
+
     ovsport_create(ovs_idl_txn, src, src_name, "patch", &port_ids, NULL,
                    &if_options, 0);
+    smap_destroy(&port_ids);
 }
 
 static void
@@ -223,12 +231,17 @@ add_bridge_mappings_by_type(struct ovsdb_idl_txn 
*ovs_idl_txn,
         sset_find_and_delete(&missed_bridges, msg_key);
         free(msg_key);
 
+        const struct smap *extra_ids =
+            !strcmp(pb_type, "localnet") ? &binding->external_ids : NULL;
+
         char *name1 = patch_port_name(br_int->name, binding->logical_port);
         char *name2 = patch_port_name(binding->logical_port, br_int->name);
         create_patch_port(ovs_idl_txn, patch_port_id, binding->logical_port,
-                          br_int, name1, br_ln, name2, existing_ports);
+                          br_int, name1, br_ln, name2, existing_ports,
+                          extra_ids);
         create_patch_port(ovs_idl_txn, patch_port_id, binding->logical_port,
-                          br_ln, name2, br_int, name1, existing_ports);
+                          br_ln, name2, br_int, name1, existing_ports,
+                          extra_ids);
         free(name1);
         free(name2);
     }
-- 
2.34.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to