[ovs-dev] [PATCH] ovsdb: Expose vhost-user socket directory in ovsdb
Robert Wojciechowicz
robertx.wojciechowicz at intel.com
Thu Jan 28 10:57:35 UTC 2016
In order to correctly interoperate with Openstack and ODL,
the vhost-user socket directory must be exposed from OVS via OVSDB.
Different distros may package OVS in different ways,
so the locations of these sockets may vary depending on how
ovs-vswitchd has been started. Some clients need information where
the sockets are located when instantiating Qemu virtual machines.
This path is stored in Open_vSwitch table in other_config column
with key vhost-sock-dir, e.g.:
{vhost-sock-dir="/usr/local/var/run/openvswitch"}
Signed-off-by: Robert Wojciechowicz <robertx.wojciechowicz at intel.com>
---
INSTALL.DPDK.md | 3 +++
lib/netdev-dpdk.c | 26 ++++++++++++++++++++++++++
lib/netdev-dpdk.h | 9 +++++++++
vswitchd/bridge.c | 3 +++
4 files changed, 41 insertions(+)
diff --git a/INSTALL.DPDK.md b/INSTALL.DPDK.md
index 96b686c..27ba317 100644
--- a/INSTALL.DPDK.md
+++ b/INSTALL.DPDK.md
@@ -527,6 +527,9 @@ have arbitrary names.
`./vswitchd/ovs-vswitchd --dpdk -vhost_sock_dir /my-dir -c 0x1 ...`
+ Additionally vhost-user sockets directory is exposed in OVSDB
+ (table: Open_vSwitch, column: other_config, key: vhost-sock-dir).
+
DPDK vhost-user VM configuration:
---------------------------------
Follow the steps below to attach vhost-user port(s) to a VM.
diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index b209df2..272ade5 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -2207,6 +2207,32 @@ dpdk_init(int argc, char **argv)
return result + 1 + base;
}
+void
+dpdk_set_config(const struct ovsrec_open_vswitch *cfg)
+{
+ struct smap dpdk_args;
+ const struct ovsdb_datum *datum;
+ size_t i;
+
+ ovs_mutex_lock(&dpdk_mutex);
+
+ if (vhost_sock_dir && strlen(vhost_sock_dir)) {
+ smap_init(&dpdk_args);
+ datum = ovsrec_open_vswitch_get_other_config(cfg, OVSDB_TYPE_STRING,
+ OVSDB_TYPE_STRING);
+ for (i = 0; i < datum->n; i++) {
+ smap_add(&dpdk_args, datum->keys[i].string,
+ datum->values[i].string);
+ }
+ smap_add_format(&dpdk_args, "vhost-sock-dir", "%s", vhost_sock_dir);
+ ovsrec_open_vswitch_set_other_config(cfg, &dpdk_args);
+ smap_destroy(&dpdk_args);
+ }
+
+ ovs_mutex_unlock(&dpdk_mutex);
+}
+
+
static const struct netdev_class dpdk_class =
NETDEV_DPDK_CLASS(
"dpdk",
diff --git a/lib/netdev-dpdk.h b/lib/netdev-dpdk.h
index 646d3e2..f11d877 100644
--- a/lib/netdev-dpdk.h
+++ b/lib/netdev-dpdk.h
@@ -3,6 +3,8 @@
#include <config.h>
+#include "lib/vswitch-idl.h"
+
struct dp_packet;
#ifdef DPDK_NETDEV
@@ -23,6 +25,7 @@ struct dp_packet;
#define NON_PMD_CORE_ID LCORE_ID_ANY
int dpdk_init(int argc, char **argv);
+void dpdk_set_config(const struct ovsrec_open_vswitch *cfg);
void netdev_dpdk_register(void);
void free_dpdk_buf(struct dp_packet *);
int pmd_thread_setaffinity_cpu(unsigned cpu);
@@ -43,6 +46,12 @@ dpdk_init(int argc, char **argv)
}
static inline void
+dpdk_set_config(const struct ovsrec_open_vswitch *cfg)
+{
+ /* Nothing */
+}
+
+static inline void
netdev_dpdk_register(void)
{
/* Nothing */
diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
index f8afe55..cf84093 100644
--- a/vswitchd/bridge.c
+++ b/vswitchd/bridge.c
@@ -411,6 +411,7 @@ bridge_init(const char *remote)
ovsdb_idl_omit(idl, &ovsrec_open_vswitch_col_db_version);
ovsdb_idl_omit(idl, &ovsrec_open_vswitch_col_system_type);
ovsdb_idl_omit(idl, &ovsrec_open_vswitch_col_system_version);
+ ovsdb_idl_omit_alert(idl, &ovsrec_open_vswitch_col_other_config);
ovsdb_idl_omit_alert(idl, &ovsrec_bridge_col_datapath_id);
ovsdb_idl_omit_alert(idl, &ovsrec_bridge_col_datapath_version);
@@ -428,6 +429,7 @@ bridge_init(const char *remote)
ovsdb_idl_omit(idl, &ovsrec_port_col_external_ids);
ovsdb_idl_omit_alert(idl, &ovsrec_port_col_trunks);
ovsdb_idl_omit_alert(idl, &ovsrec_port_col_vlan_mode);
+
ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_admin_state);
ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_duplex);
ovsdb_idl_omit_alert(idl, &ovsrec_interface_col_link_speed);
@@ -2976,6 +2978,7 @@ bridge_run(void)
if (cfg) {
ovsrec_open_vswitch_set_cur_cfg(cfg, cfg->next_cfg);
+ dpdk_set_config(cfg);
discover_types(cfg);
}
--
1.8.3.1
More information about the dev
mailing list