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