[ovs-dev] [PATCH v4] netdev-dpdk: add dpdk vhost-user ports

Panu Matilainen pmatilai at redhat.com
Mon May 18 15:45:20 UTC 2015


On 05/13/2015 04:15 PM, Ciara Loftus wrote:
> This patch adds support for a new port type to the userspace
> datapath called dpdkvhostuser.
>
> A new dpdkvhostuser port will create a unix domain socket which
> when provided to QEMU is used to facilitate communication between
> the virtio-net device on the VM and the OVS port on the host.
>
> vhost-cuse ('dpdkvhost') ports are still available, and will be
> enabled if vhost-cuse support is detected in the DPDK build
> specified during compilation of the switch. Otherwise, vhost-user
> ports are enabled.
>
> v4:
> - Included helper function for the new_device callbacks to minimise
> code duplication.
> - Fixed indentation & line-wrap.
> - Simplified and corrected the processing of vhost ovs-vswitchd flags.
>
> Signed-off-by: Ciara Loftus <ciara.loftus at intel.com>
[...]
> @@ -1896,6 +1960,32 @@ unlock_dpdk:
>       NULL,                       /* rxq_drain */               \
>   }
>
> +static int
> +process_vhost_flags(char* flag, char* default_val, int size, char** argv, char** new_val)
> +{
> +    int changed = 0;
> +
> +    /* Depending on which version of vhost is in use, process the vhost-specific
> +     * flag if it is provided on the vswitchd command line, otherwise resort to
> +     * a default value.
> +     *
> +     * For vhost-user: Process "--cuse_dev_name" to set the custom location of
> +     * the vhost-user socket(s).
> +     * For vhost-cuse: Process "--vhost_sock_dir" to set the custom name of the
> +     * vhost-cuse character device.
> +     */
> +    if (!strcmp(argv[1], flag) && (strlen(argv[2]) <= size)) {
> +        *new_val = strdup(argv[2]);
> +        VLOG_INFO("User-provided %s in use: %s", flag, *new_val);
> +        changed = 1;
> +    } else {
> +        *new_val = strdup(default_val);
> +        VLOG_INFO("No %s provided - defaulting to %s", flag, default_val);
> +    }
> +
> +    return changed;
> +}
> +
>   int
>   dpdk_init(int argc, char **argv)
>   {
> @@ -1910,27 +2000,20 @@ dpdk_init(int argc, char **argv)
>       argc--;
>       argv++;
>
> -    /* If the cuse_dev_name parameter has been provided, set 'cuse_dev_name' to
> -     * this string if it meets the correct criteria. Otherwise, set it to the
> -     * default (vhost-net).
> -     */
> -    if (!strcmp(argv[1], "--cuse_dev_name") &&
> -        (strlen(argv[2]) <= NAME_MAX)) {
> -
> -        cuse_dev_name = strdup(argv[2]);
> -
> -        /* Remove the cuse_dev_name configuration parameters from the argument
> +#ifdef VHOST_CUSE
> +    if(process_vhost_flags("--cuse_dev_name", strdup("vhost-net"),
> +            PATH_MAX, argv, &cuse_dev_name)) {
> +#else
> +    if (process_vhost_flags("--vhost_sock_dir", strdup(ovs_rundir()),
> +            NAME_MAX, argv, &vhost_sock_dir)) {
> +#endif

This introduces a tiny memory leak as process_vhost_flags() also 
strdup()'s the argument. Not that it really matters for functionality or 
anything, just a matter of being clean. Also the cuse-if is missing a 
space after it, while we're down to nitpicking.

I'd prefer the memleak fixed but other than that ACK from me as well.

	- Panu -




More information about the dev mailing list