> -----Original Message-----
> From: dev [mailto:dev-boun...@openvswitch.org] On Behalf Of Aaron Conole
> Sent: Saturday, August 20, 2016 12:48 AM
> To: dev@openvswitch.org; Ben Pfaff <b...@ovn.org>; Daniele Di Proietto
> <diproiet...@vmware.com>
> Subject: [ovs-dev] [PATCH v4 3/3] netdev-dpdk: Support user-defined socket 
> attribs
> 
> Currently, when vhost-user server socket devices are created, they inherit the
> running umask and uid/gid of the vswitchd process. This leads to difficulties 
> when
> using vhost_user consumers (such as qemu).
> 
> This patch introduces two new database entries, 'vhost-sock-owner' to set the
> ownership, and 'vhost-sock-perms' to set the permissions bits for all 
> vhost_user
> server sockets.
[Mooney, Sean K] will they default to the user and group of the vswitchd 
process if
Not set to maintain backwards compatibility?
> 
> Signed-off-by: Aaron Conole <acon...@redhat.com>
> ---
> v3->v4:
> * Rebased on upstream, the dev->vhost_id had to move to dev->vhost_server_id
> 
>  INSTALL.DPDK.md      |  8 ++++++++
>  lib/netdev-dpdk.c    | 37 +++++++++++++++++++++++++++++++++++++
>  vswitchd/vswitch.xml | 23 +++++++++++++++++++++++
>  3 files changed, 68 insertions(+)
> 
> diff --git a/INSTALL.DPDK.md b/INSTALL.DPDK.md index 30e9258..93bc380 100644
> --- a/INSTALL.DPDK.md
> +++ b/INSTALL.DPDK.md
> @@ -223,6 +223,14 @@ advanced install guide [INSTALL.DPDK-ADVANCED.md]
>       * vhost-sock-dir
>       Option to set the path to the vhost_user unix socket files.
> 
> +     * vhost-sock-owner
> +     Option to set the file-system ownership of the vhost_user unix socket
> +     files.
> +
> +     * vhost-sock-dir
> +     Option to set the file-system permissions of the vhost_user unix socket
> +     files.
> +
>       NOTE: Changing any of these options requires restarting the ovs-vswitchd
>       application.
> 
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 6d334db..6cac2ea 
> 100644
> --- a/lib/netdev-dpdk.c
> +++ b/lib/netdev-dpdk.c
> @@ -31,6 +31,7 @@
>  #include <sys/stat.h>
>  #include <getopt.h>
> 
> +#include "chutil.h"
>  #include "dirs.h"
>  #include "dp-packet.h"
>  #include "dpif-netdev.h"
> @@ -141,6 +142,10 @@ BUILD_ASSERT_DECL((MAX_NB_MBUF /
> ROUND_DOWN_POW2(MAX_NB_MBUF/MIN_NB_MBUF))
>                                            * yet mapped to another queue. */
> 
>  static char *vhost_sock_dir = NULL;   /* Location of vhost-user sockets */
> +static char *vhost_sock_def_owner = NULL; /* Default owner of vhost-user
> +                                           * sockets */ static char
> +*vhost_sock_def_perms = NULL; /* Default permissions of
> +                                           * vhost-user sockets */
> 
>  #define VHOST_ENQ_RETRY_NUM 8
>  #define IF_NAME_SZ (PATH_MAX > IFNAMSIZ ? PATH_MAX : IFNAMSIZ) @@ -
> 889,6 +894,30 @@ get_vhost_id(struct netdev_dpdk *dev)  }
> 
>  static int
> +vhost_set_permissions(struct netdev_dpdk *dev) OVS_REQUIRES(dpdk_mutex)
> +{
> +    int err = 0;
> +
> +    /* ovs_kchown and ovs_kchmod are robust enough to deal with null or
> +     * empty strings.  However, since they have the potential to race,
> +     * only attempt them if the user actually requested a change. */
> +
> +    if (vhost_sock_def_owner &&
> +        (err = ovs_kchown(dev->vhost_server_id, vhost_sock_def_owner))) {
> +        VLOG_ERR("dpdk: vhost-user socket (%s) ownership change failed 
> (%s).",
> +                 dev->vhost_server_id, ovs_strerror(err));
> +    }
> +
> +    if (!err && vhost_sock_def_perms &&
> +        (err = ovs_kchmod(dev->vhost_server_id, vhost_sock_def_perms))) {
> +        VLOG_ERR("dpdk: vhost-user socket (%s) permissions failed (%s).",
> +                 dev->vhost_server_id, ovs_strerror(err));
> +    }
> +    return err;
> +}
> +
> +
> +static int
>  netdev_dpdk_vhost_construct(struct netdev *netdev)  {
>      struct netdev_dpdk *dev = netdev_dpdk_cast(netdev); @@ -932,10 +961,14 @@
> netdev_dpdk_vhost_construct(struct netdev *netdev)
>          err = netdev_dpdk_init(netdev, -1, DPDK_DEV_VHOST);
>      }
> 
> +    if (!err) {
> +        err = vhost_set_permissions(dev);
> +    }
>      ovs_mutex_unlock(&dpdk_mutex);
>      return err;
>  }
> 
> +
>  static int
>  netdev_dpdk_construct(struct netdev *netdev)  { @@ -3363,6 +3396,10 @@
> dpdk_init__(const struct smap *ovs_other_config)
>      } else {
>          vhost_sock_dir = sock_dir_subcomponent;
>      }
> +    process_vhost_flags("vhost-sock-owner", NULL, NAME_MAX, ovs_other_config,
> +                        &vhost_sock_def_owner);
> +    process_vhost_flags("vhost-sock-perms", NULL, NAME_MAX, ovs_other_config,
> +                        &vhost_sock_def_perms);
> 
>      argv = grow_argv(&argv, 0, 1);
>      argc = 1;
> diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml index 
> 69b5592..257edd8
> 100644
> --- a/vswitchd/vswitch.xml
> +++ b/vswitchd/vswitch.xml
> @@ -299,6 +299,29 @@
>          </p>
>        </column>
> 
> +      <column name="other_config" key="vhost-sock-owner"
> +              type='{"type": "string"}'>
> +        <p>
> +          Specifies the owner of the vhost-user unix domain socket files.
> +        </p>
> +        <p>
> +          The default is to inherit from the running user and group id's. The
> +          argument is specified in the same form as the 'chown' unix utility.
> +        </p>
> +      </column>
> +
> +      <column name="other_config" key="vhost-sock-perms"
> +              type='{"type": "string"}'>
> +        <p>
> +          Specifies the permissions for the vhost-user unix domain socket
> +          files.
> +        </p>
> +        <p>
> +          The default is derived from the running mask. The argument is
> +          specified in the same form as the 'chmod' unix utility.
> +        </p>
> +      </column>
> +
>        <column name="other_config" key="n-handler-threads"
>                type='{"type": "integer", "minInteger": 1}'>
>          <p>
> --
> 2.5.5
> 
> _______________________________________________
> 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