[ovs-dev] [PATCH] ovsdb: Expose vhost-user socket directory in ovsdb
Fischetti, Antonio
antonio.fischetti at intel.com
Tue May 31 13:23:56 UTC 2016
Hi Robert,
one comment below.
I've checked it applies cleanly to the latest master branch.
Also with utilities/checkpatch.py is ok.
Thanks,
Antonio
> -----Original Message-----
> From: dev [mailto:dev-bounces at openvswitch.org] On Behalf Of Robert
> Wojciechowicz
> Sent: Monday, May 23, 2016 11:29 AM
> To: dev at openvswitch.org
> Subject: [ovs-dev] [PATCH] ovsdb: Expose vhost-user socket directory
> in ovsdb
>
> 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.
> The full vhost-user socket directory is constructed from current
> OVS working directory and optionally from specified subdirectory.
> This patch exposes vhost-user socket directory in Open_vSwitch
> table in other_config column in two following keys:
> 1. ovs-run-dir - OVS working directory
> 2. vhost-sock-dir - subdirectory of ovs-run-dir (might be empty)
>
> Signed-off-by: Robert Wojciechowicz <robertx.wojciechowicz at intel.com>
> ---
> lib/netdev-dpdk.c | 38 ++++++++++++++++++++++++++++++++++----
> lib/netdev-dpdk.h | 9 +++++++++
> vswitchd/bridge.c | 2 ++
> vswitchd/vswitch.xml | 11 +++++++++++
> 4 files changed, 56 insertions(+), 4 deletions(-)
>
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> index 9ffa7ff..4e68bd6 100644
> --- a/lib/netdev-dpdk.c
> +++ b/lib/netdev-dpdk.c
> @@ -138,9 +138,13 @@ BUILD_ASSERT_DECL((MAX_NB_MBUF /
> ROUND_DOWN_POW2(MAX_NB_MBUF/MIN_NB_MBUF))
>
> #ifdef VHOST_CUSE
> static char *cuse_dev_name = NULL; /* Character device
> cuse_dev_name. */
> +#else
> +static char *sock_dir_subcomponent = NULL; /* Subdir of OVS run
> dir
> + for vhost-user
> sockets */
> #endif
> static char *vhost_sock_dir = NULL; /* Location of vhost-user
> sockets */
>
> +
> /*
> * Maximum amount of time in micro seconds to try and enqueue to
> vhost.
> */
> @@ -3086,9 +3090,6 @@ dpdk_init__(const struct smap
> *ovs_other_config)
> bool auto_determine = true;
> int err = 0;
> cpu_set_t cpuset;
> -#ifndef VHOST_CUSE
> - char *sock_dir_subcomponent;
> -#endif
>
> if (!smap_get_bool(ovs_other_config, "dpdk-init", false)) {
> VLOG_INFO("DPDK Disabled - to change this requires a
> restart.\n");
> @@ -3119,10 +3120,11 @@ dpdk_init__(const struct smap
> *ovs_other_config)
[Antonio F] Just wondering if inside the previous lines
where the vhu sock does not exist, should we consider to
restore vhost_sock_dir to ovs_rundir(), like:
err = stat(vhost_sock_dir, &s);
if (err) {
VLOG_ERR("vhost-user sock directory '%s' does not exist.",
vhost_sock_dir);
+ vhost_sock_dir = xasprintf("%s", ovs_rundir());
+ sock_dir_subcomponent = "";
}
?
Or is that ok to leave it as it is now?
> VLOG_ERR("vhost-user sock directory request '%s/%s' has
> invalid"
> "characters '..' - using %s instead.",
> ovs_rundir(), sock_dir_subcomponent,
> ovs_rundir());
> + sock_dir_subcomponent = "";
> }
> - free(sock_dir_subcomponent);
> } else {
> vhost_sock_dir = sock_dir_subcomponent;
> + sock_dir_subcomponent = "";
> #endif
> }
>
> @@ -3244,6 +3246,34 @@ dpdk_init(const struct smap *ovs_other_config)
> }
> }
>
> +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);
> +
> + smap_init(&dpdk_args);
> + /* read current values from database */
> + 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);
> + }
> + /* add default paths to the database */
> + smap_add_format(&dpdk_args, "ovs-run-dir", "%s", ovs_rundir());
> + if (sock_dir_subcomponent) {
> + smap_add_format(&dpdk_args, "vhost-sock-dir", "%s",
> + sock_dir_subcomponent);
> + }
> + 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 ee748e0..08abcac 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;
> struct smap;
>
> @@ -25,6 +27,7 @@ struct smap;
>
> void netdev_dpdk_register(void);
> void free_dpdk_buf(struct dp_packet *);
> +void dpdk_set_config(const struct ovsrec_open_vswitch *cfg);
> int pmd_thread_setaffinity_cpu(unsigned cpu);
>
> #else
> @@ -45,6 +48,12 @@ free_dpdk_buf(struct dp_packet *buf OVS_UNUSED)
> /* Nothing */
> }
>
> +static inline void
> +dpdk_set_config(const struct ovsrec_open_vswitch *cfg)
> +{
> + /* Nothing */
> +}
> +
> static inline int
> pmd_thread_setaffinity_cpu(unsigned cpu OVS_UNUSED)
> {
> diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
> index 41ec4ba..d248721 100644
> --- a/vswitchd/bridge.c
> +++ b/vswitchd/bridge.c
> @@ -393,6 +393,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);
> @@ -2957,6 +2958,7 @@ bridge_run(void)
>
> if (cfg) {
> ovsrec_open_vswitch_set_cur_cfg(cfg, cfg->next_cfg);
> + dpdk_set_config(cfg);
> discover_types(cfg);
> }
>
> diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
> index 944d8ec..8d06d29 100644
> --- a/vswitchd/vswitch.xml
> +++ b/vswitchd/vswitch.xml
> @@ -311,6 +311,17 @@
> </p>
> </column>
>
> + <column name="other_config" key="ovs-run-dir"
> + type='{"type": "string"}'>
> + <p>
> + Specifies the Open vSwitch run directory.
> + </p>
> + <p>
> + Defaults to the working directory of the application.
> Changing this
> + value requires restarting the daemon.
> + </p>
> + </column>
> +
> <column name="other_config" key="n-handler-threads"
> type='{"type": "integer", "minInteger": 1}'>
> <p>
> --
> 1.8.3.1
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
More information about the dev
mailing list