"Fischetti, Antonio" <antonio.fische...@intel.com> writes:

> 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-boun...@openvswitch.org] On Behalf Of Robert
>> Wojciechowicz
>> Sent: Monday, May 23, 2016 11:29 AM
>> To: dev@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.wojciechow...@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?

I haven't reviewed the whole patch, but I don't think this would be an
appropriate change.  As it stands, if a user sees this error message,
they may simply mkdir the missing subdirectory, and then dpdk vhost-user
sockets will begin to work.  With your change, not only will the error
message be displayed, but user sockets will be popping up in unexpected
places, meaning a restart will be required to resolve the issue fully.

>>              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@openvswitch.org
>> http://openvswitch.org/mailman/listinfo/dev
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to