From patchwork Fri Nov 29 19:52:24 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Antonios Motakis X-Patchwork-Id: 295511 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 2E1872C00AD for ; Sat, 30 Nov 2013 06:55:12 +1100 (EST) Received: from localhost ([::1]:49212 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VmU9d-0004dJ-NI for incoming@patchwork.ozlabs.org; Fri, 29 Nov 2013 14:55:09 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34239) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VmU7X-0000Qd-OK for qemu-devel@nongnu.org; Fri, 29 Nov 2013 14:53:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VmU7R-0005K6-Ot for qemu-devel@nongnu.org; Fri, 29 Nov 2013 14:52:59 -0500 Received: from mail-wi0-f175.google.com ([209.85.212.175]:39670) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VmU7R-0005Jt-Er for qemu-devel@nongnu.org; Fri, 29 Nov 2013 14:52:53 -0500 Received: by mail-wi0-f175.google.com with SMTP id hi5so2491071wib.14 for ; Fri, 29 Nov 2013 11:52:52 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=aXMa63lXFw7m4lajjJdhj2kVcW0TVDNvbtTACzCJxa4=; b=AGoWZZ8r5OC/2TMpoh/VeCAmoEvy+FI4KUFYZ45EZ4+AUlriI5160Nnbflv2QV4KJR 9UJ+5i77kKIqfpD2J1Gu663hDKMtZrf7omh3WX/HQaDSieUN33Esvjim3UBR/euWjyzq 6sqXAlZW9Nb9qjq1KB0OZfYOfh1f4w5RIWgCiVJ9MoBaMlK1UUQRdS43n9jQ9HDfeYWe L3Hum5wSEhgJD3GBwmPfsZ6l4P0cJAANHXCAVZsxuY7hEQOgnxOYq0W1CJW+yb7Cz78O fDMOfkOXTvYx2CXidqdi0a1hH9CaobK6jwtkO1QZ35iuI+3iGqvIESfxmGQaMukWTnU7 LTDg== X-Gm-Message-State: ALoCoQkd2FYt6rX0vKlkq18hA1WICe9Mqbk6EdKpwcDPJ6udbhFsZT/z/6nvDncRHRM0XQt7qRoG X-Received: by 10.194.171.34 with SMTP id ar2mr280495wjc.81.1385754772654; Fri, 29 Nov 2013 11:52:52 -0800 (PST) Received: from localhost.localdomain (home.tvelocity.eu. [82.67.68.96]) by mx.google.com with ESMTPSA id c10sm94793456wie.11.2013.11.29.11.52.50 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 29 Nov 2013 11:52:51 -0800 (PST) From: Antonios Motakis To: qemu-devel@nongnu.org Date: Fri, 29 Nov 2013 20:52:24 +0100 Message-Id: <1385754746-21172-4-git-send-email-a.motakis@virtualopensystems.com> X-Mailer: git-send-email 1.8.3.2 In-Reply-To: <1385754746-21172-1-git-send-email-a.motakis@virtualopensystems.com> References: <1385754746-21172-1-git-send-email-a.motakis@virtualopensystems.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.85.212.175 Cc: Stefan Hajnoczi , "Michael S. Tsirkin" , Michael Tokarev , Markus Armbruster , n.nikolaev@virtualopensystems.com, Luiz Capitulino , Anthony Liguori , Paolo Bonzini , lukego@gmail.com, Antonios Motakis , tech@virtualopensystems.com Subject: [Qemu-devel] [PATCH 3/5] Add vhostsock option X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Adding a new tap network backend option - vhostsock. It points to a named unix domain socket, that will be used to communicate with vhost-user backend. This is a temporary work around; in future versions of this series vhost-user will be made independent from the tap network backend. Signed-off-by: Antonios Motakis Signed-off-by: Nikolay Nikolaev --- hw/net/vhost_net.c | 22 +++++++++++++++++----- include/net/vhost_net.h | 5 ++++- net/tap.c | 4 +++- qapi-schema.json | 3 +++ qemu-options.hx | 3 ++- 5 files changed, 29 insertions(+), 8 deletions(-) diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c index 58a1880..8c9d425 100644 --- a/hw/net/vhost_net.c +++ b/hw/net/vhost_net.c @@ -91,15 +91,27 @@ static int vhost_net_get_fd(NetClientState *backend) } } -struct vhost_net *vhost_net_init(NetClientState *backend, int devfd, - bool force) +struct vhost_net *vhost_net_init(NetClientState *backend, char *vhostsock, + int devfd, bool force) { int r; struct vhost_net *net = g_malloc(sizeof *net); + const char *backend_sock = 0; + VhostBackendType backend_type = VHOST_BACKEND_TYPE_NONE; + if (!backend) { fprintf(stderr, "vhost-net requires backend to be setup\n"); goto fail; } + + if (vhostsock && strcmp(vhostsock, VHOST_NET_DEFAULT_SOCK) != 0) { + backend_type = VHOST_BACKEND_TYPE_USER; + backend_sock = vhostsock; + } else { + backend_type = VHOST_BACKEND_TYPE_KERNEL; + backend_sock = VHOST_NET_DEFAULT_SOCK; + } + r = vhost_net_get_fd(backend); if (r < 0) { goto fail; @@ -112,7 +124,7 @@ struct vhost_net *vhost_net_init(NetClientState *backend, int devfd, net->dev.nvqs = 2; net->dev.vqs = net->vqs; - r = vhost_dev_init(&net->dev, devfd, "/dev/vhost-net", VHOST_BACKEND_TYPE_KERNEL, force); + r = vhost_dev_init(&net->dev, devfd, backend_sock, backend_type, force); if (r < 0) { goto fail; } @@ -282,8 +294,8 @@ void vhost_net_virtqueue_mask(VHostNetState *net, VirtIODevice *dev, vhost_virtqueue_mask(&net->dev, dev, idx, mask); } #else -struct vhost_net *vhost_net_init(NetClientState *backend, int devfd, - bool force) +struct vhost_net *vhost_net_init(NetClientState *backend, char *vhostsock, + int devfd, bool force) { error_report("vhost-net support is not compiled in"); return NULL; diff --git a/include/net/vhost_net.h b/include/net/vhost_net.h index 2d936bb..7bb6435 100644 --- a/include/net/vhost_net.h +++ b/include/net/vhost_net.h @@ -3,10 +3,13 @@ #include "net/net.h" +#define VHOST_NET_DEFAULT_SOCK "/dev/vhost-net" + struct vhost_net; typedef struct vhost_net VHostNetState; -VHostNetState *vhost_net_init(NetClientState *backend, int devfd, bool force); +VHostNetState *vhost_net_init(NetClientState *backend, char *vhostsock, + int devfd, bool force); bool vhost_net_query(VHostNetState *net, VirtIODevice *dev); int vhost_net_start(VirtIODevice *dev, NetClientState *ncs, int total_queues); diff --git a/net/tap.c b/net/tap.c index 39c1cda..c4eba01 100644 --- a/net/tap.c +++ b/net/tap.c @@ -632,7 +632,9 @@ static int net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer, vhostfd = -1; } - s->vhost_net = vhost_net_init(&s->nc, vhostfd, + s->vhost_net = vhost_net_init(&s->nc, + tap->has_vhostsock ? tap->vhostsock : 0, + vhostfd, tap->has_vhostforce && tap->vhostforce); if (!s->vhost_net) { error_report("vhost-net requested but could not be initialized"); diff --git a/qapi-schema.json b/qapi-schema.json index 83fa485..dc35929 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -2891,6 +2891,8 @@ # # @vhostforce: #optional vhost on for non-MSIX virtio guests # +# @vhostsock: #optional vhost backend socket +# # @queues: #optional number of queues to be created for multiqueue capable tap # # Since 1.2 @@ -2909,6 +2911,7 @@ '*vhostfd': 'str', '*vhostfds': 'str', '*vhostforce': 'bool', + '*vhostsock': 'str', '*queues': 'uint32'} } ## diff --git a/qemu-options.hx b/qemu-options.hx index 8b94264..9f80720 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -1370,7 +1370,7 @@ DEF("net", HAS_ARG, QEMU_OPTION_net, "-net tap[,vlan=n][,name=str],ifname=name\n" " connect the host TAP network interface to VLAN 'n'\n" #else - "-net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile][,helper=helper][,sndbuf=nbytes][,vnet_hdr=on|off][,vhost=on|off][,vhostfd=h][,vhostfds=x:y:...:z][,vhostforce=on|off][,queues=n]\n" + "-net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile][,helper=helper][,sndbuf=nbytes][,vnet_hdr=on|off][,vhost=on|off][,vhostfd=h][,vhostfds=x:y:...:z][,vhostforce=on|off][,queues=n][,vhostsock=file]\n" " connect the host TAP network interface to VLAN 'n'\n" " use network scripts 'file' (default=" DEFAULT_NETWORK_SCRIPT ")\n" " to configure it and 'dfile' (default=" DEFAULT_NETWORK_DOWN_SCRIPT ")\n" @@ -1390,6 +1390,7 @@ DEF("net", HAS_ARG, QEMU_OPTION_net, " use 'vhostfd=h' to connect to an already opened vhost net device\n" " use 'vhostfds=x:y:...:z to connect to multiple already opened vhost net devices\n" " use 'queues=n' to specify the number of queues to be created for multiqueue TAP\n" + " use 'vhostsock=file' vhost-user backend socket\n" "-net bridge[,vlan=n][,name=str][,br=bridge][,helper=helper]\n" " connects a host TAP network interface to a host bridge device 'br'\n" " (default=" DEFAULT_BRIDGE_INTERFACE ") using the program 'helper'\n"