[ovs-dev] [PATCH] ovn-controller: Provide the option to set the datapath-type of br-int
nusiddiq at redhat.com
nusiddiq at redhat.com
Mon Feb 18 04:42:22 UTC 2019
From: Numan Siddique <nusiddiq at redhat.com>
If the integration bridge is deleted, ovn-controller recreates it
but the previous datapath-type value is lost if it was set. This
patch adds the code in ovn-controller to set the datapath-type
if it is configured by the user in the 'external_ids:ovn-bridge-datapath-type'
column of OpenvSwitch table.
Signed-off-by: Numan Siddique <nusiddiq at redhat.com>
---
ovn/controller/ovn-controller.8.xml | 8 ++++++++
ovn/controller/ovn-controller.c | 11 ++++++++++-
tests/ovn-controller.at | 14 ++++++++++++++
3 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/ovn/controller/ovn-controller.8.xml b/ovn/controller/ovn-controller.8.xml
index 8035638b3..fd2e10a7a 100644
--- a/ovn/controller/ovn-controller.8.xml
+++ b/ovn/controller/ovn-controller.8.xml
@@ -81,6 +81,14 @@
default configuration suggested in <code>ovn-architecture</code>(7).
</dd>
+ <dt><code>external_ids:ovn-bridge-datapath-type</code></dt>
+ <dd>
+ This configuration is optional. If set, then the datapath type of
+ the integration bridge will be set to the configured value. If this
+ option is not set, then <code>ovn-controller</code> will not modify
+ the existing <code>datapath-type</code> of the integration bridge.
+ </dd>
+
<dt><code>external_ids:ovn-remote</code></dt>
<dd>
<p>
diff --git a/ovn/controller/ovn-controller.c b/ovn/controller/ovn-controller.c
index 2098f280c..882cc195f 100644
--- a/ovn/controller/ovn-controller.c
+++ b/ovn/controller/ovn-controller.c
@@ -253,7 +253,16 @@ get_br_int(struct ovsdb_idl_txn *ovs_idl_txn,
const struct ovsrec_bridge *br = get_bridge(bridge_table, br_int_name);
if (!br) {
- return create_br_int(ovs_idl_txn, cfg, br_int_name);
+ br = create_br_int(ovs_idl_txn, cfg, br_int_name);
+ }
+ if (br && ovs_idl_txn) {
+ const char *datapath_type = smap_get(&cfg->external_ids,
+ "ovn-bridge-datapath-type");
+ /* Check for the datapath_type and set it only if it is defined in
+ * cfg. */
+ if (datapath_type && strcmp(br->datapath_type, datapath_type)) {
+ ovsrec_bridge_set_datapath_type(br, datapath_type);
+ }
}
return br;
}
diff --git a/tests/ovn-controller.at b/tests/ovn-controller.at
index 13e88a0cc..4ed4ca083 100644
--- a/tests/ovn-controller.at
+++ b/tests/ovn-controller.at
@@ -158,6 +158,20 @@ OVS_WAIT_UNTIL([check_datapath_type bar])
ovs-vsctl set Bridge br-int datapath-type=\"\"
OVS_WAIT_UNTIL([check_datapath_type ""])
+# Set the datapath_type in external_ids:ovn-bridge-datapath-type.
+ovs-vsctl set Open_vSwitch . external_ids:ovn-bridge-datapath-type=foo
+OVS_WAIT_UNTIL([check_datapath_type foo])
+
+# Change the br-int's datapath type to bar.
+# It should be reset to foo since ovn-bridge-datapath-type is configured.
+ovs-vsctl set Bridge br-int datapath-type=bar
+OVS_WAIT_UNTIL([test foo=`ovs-vsctl get Bridge br-int datapath-type`])
+OVS_WAIT_UNTIL([check_datapath_type foo])
+
+ovs-vsctl set Open_vSwitch . external_ids:ovn-bridge-datapath-type=foobar
+OVS_WAIT_UNTIL([test foobar=`ovs-vsctl get Bridge br-int datapath-type`])
+OVS_WAIT_UNTIL([check_datapath_type foobar])
+
expected_iface_types=$(ovs-vsctl get Open_vSwitch . iface_types | tr -d '[[]] ""')
echo "expected_iface_types = ${expected_iface_types}"
chassis_iface_types=$(ovn-sbctl get Chassis ${sysid} external_ids:iface-types | sed -e 's/\"//g')
--
2.20.1
More information about the dev
mailing list