From: Jason Wang <jasowang@redhat.com>
To: aliguori@us.ibm.com, mst@redhat.com, qemu-devel@nongnu.org,
blauwirbel@gmail.com, shajnocz@redhat.com
Cc: krkumar2@in.ibm.com, kvm@vger.kernel.org, mprivozn@redhat.com,
Jason Wang <jasowang@redhat.com>,
rusty@rustcorp.com.au, jwhan@filewood.snu.ac.kr,
gaowanlong@cn.fujitsu.com
Subject: [Qemu-devel] [PATCH V4 RESEND 11/22] tap: factor out common tap initialization
Date: Fri, 1 Feb 2013 15:39:45 +0800 [thread overview]
Message-ID: <1359704396-55327-12-git-send-email-jasowang@redhat.com> (raw)
In-Reply-To: <1359704396-55327-1-git-send-email-jasowang@redhat.com>
This patch factors out the common initialization of tap into a new helper
net_init_tap_one(). This will be used by multiqueue tap patches.
Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
net/tap.c | 130 ++++++++++++++++++++++++++++++++++---------------------------
1 files changed, 73 insertions(+), 57 deletions(-)
diff --git a/net/tap.c b/net/tap.c
index 5542c98..23fb6e0 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -591,6 +591,73 @@ static int net_tap_init(const NetdevTapOptions *tap, int *vnet_hdr,
return fd;
}
+static int net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer,
+ const char *model, const char *name,
+ const char *ifname, const char *script,
+ const char *downscript, const char *vhostfdname,
+ int vnet_hdr, int fd)
+{
+ TAPState *s;
+
+ s = net_tap_fd_init(peer, model, name, fd, vnet_hdr);
+ if (!s) {
+ close(fd);
+ return -1;
+ }
+
+ if (tap_set_sndbuf(s->fd, tap) < 0) {
+ return -1;
+ }
+
+ if (tap->has_fd) {
+ snprintf(s->nc.info_str, sizeof(s->nc.info_str), "fd=%d", fd);
+ } else if (tap->has_helper) {
+ snprintf(s->nc.info_str, sizeof(s->nc.info_str), "helper=%s",
+ tap->helper);
+ } else {
+ const char *downscript;
+
+ downscript = tap->has_downscript ? tap->downscript :
+ DEFAULT_NETWORK_DOWN_SCRIPT;
+
+ snprintf(s->nc.info_str, sizeof(s->nc.info_str),
+ "ifname=%s,script=%s,downscript=%s", ifname, script,
+ downscript);
+
+ if (strcmp(downscript, "no") != 0) {
+ snprintf(s->down_script, sizeof(s->down_script), "%s", downscript);
+ snprintf(s->down_script_arg, sizeof(s->down_script_arg),
+ "%s", ifname);
+ }
+ }
+
+ if (tap->has_vhost ? tap->vhost :
+ vhostfdname || (tap->has_vhostforce && tap->vhostforce)) {
+ int vhostfd;
+
+ if (tap->has_vhostfd) {
+ vhostfd = monitor_handle_fd_param(cur_mon, vhostfdname);
+ if (vhostfd == -1) {
+ return -1;
+ }
+ } else {
+ vhostfd = -1;
+ }
+
+ s->vhost_net = vhost_net_init(&s->nc, vhostfd,
+ tap->has_vhostforce && tap->vhostforce);
+ if (!s->vhost_net) {
+ error_report("vhost-net requested but could not be initialized");
+ return -1;
+ }
+ } else if (tap->has_vhostfd) {
+ error_report("vhostfd= is not valid without vhost");
+ return -1;
+ }
+
+ return 0;
+}
+
int net_init_tap(const NetClientOptions *opts, const char *name,
NetClientState *peer)
{
@@ -598,10 +665,10 @@ int net_init_tap(const NetClientOptions *opts, const char *name,
int fd, vnet_hdr = 0;
const char *model;
- TAPState *s;
/* for the no-fd, no-helper case */
const char *script = NULL; /* suppress wrong "uninit'd use" gcc warning */
+ const char *downscript = NULL;
char ifname[128];
assert(opts->kind == NET_CLIENT_OPTIONS_KIND_TAP);
@@ -647,6 +714,8 @@ int net_init_tap(const NetClientOptions *opts, const char *name,
} else {
script = tap->has_script ? tap->script : DEFAULT_NETWORK_SCRIPT;
+ downscript = tap->has_downscript ? tap->downscript :
+ DEFAULT_NETWORK_DOWN_SCRIPT;
fd = net_tap_init(tap, &vnet_hdr, script, ifname, sizeof ifname);
if (fd == -1) {
return -1;
@@ -655,62 +724,9 @@ int net_init_tap(const NetClientOptions *opts, const char *name,
model = "tap";
}
- s = net_tap_fd_init(peer, model, name, fd, vnet_hdr);
- if (!s) {
- close(fd);
- return -1;
- }
-
- if (tap_set_sndbuf(s->fd, tap) < 0) {
- return -1;
- }
-
- if (tap->has_fd) {
- snprintf(s->nc.info_str, sizeof(s->nc.info_str), "fd=%d", fd);
- } else if (tap->has_helper) {
- snprintf(s->nc.info_str, sizeof(s->nc.info_str), "helper=%s",
- tap->helper);
- } else {
- const char *downscript;
-
- downscript = tap->has_downscript ? tap->downscript :
- DEFAULT_NETWORK_DOWN_SCRIPT;
-
- snprintf(s->nc.info_str, sizeof(s->nc.info_str),
- "ifname=%s,script=%s,downscript=%s", ifname, script,
- downscript);
-
- if (strcmp(downscript, "no") != 0) {
- snprintf(s->down_script, sizeof(s->down_script), "%s", downscript);
- snprintf(s->down_script_arg, sizeof(s->down_script_arg), "%s", ifname);
- }
- }
-
- if (tap->has_vhost ? tap->vhost :
- tap->has_vhostfd || (tap->has_vhostforce && tap->vhostforce)) {
- int vhostfd;
-
- if (tap->has_vhostfd) {
- vhostfd = monitor_handle_fd_param(cur_mon, tap->vhostfd);
- if (vhostfd == -1) {
- return -1;
- }
- } else {
- vhostfd = -1;
- }
-
- s->vhost_net = vhost_net_init(&s->nc, vhostfd,
- tap->has_vhostforce && tap->vhostforce);
- if (!s->vhost_net) {
- error_report("vhost-net requested but could not be initialized");
- return -1;
- }
- } else if (tap->has_vhostfd) {
- error_report("vhostfd= is not valid without vhost");
- return -1;
- }
-
- return 0;
+ return net_init_tap_one(tap, peer, model, name, ifname, script,
+ downscript, tap->has_vhostfd ? tap->vhostfd : NULL,
+ vnet_hdr, fd);
}
VHostNetState *tap_get_vhost_net(NetClientState *nc)
--
1.7.1
next prev parent reply other threads:[~2013-02-01 7:49 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-01 7:39 [Qemu-devel] [PATCH V4 RESEND 00/22] Multiqueue virtio-net Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 01/22] net: tap: using bool instead of bitfield Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 02/22] net: tap: use abort() instead of assert(0) Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 03/22] net: introduce qemu_get_queue() Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 04/22] net: introduce qemu_get_nic() Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 05/22] net: intorduce qemu_del_nic() Jason Wang
2013-02-01 18:00 ` Eric Blake
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 06/22] net: introduce qemu_find_net_clients_except() Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 07/22] net: introduce qemu_net_client_setup() Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 08/22] net: introduce NetClientState destructor Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 09/22] net: multiqueue support Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 10/22] tap: import linux multiqueue constants Jason Wang
2013-02-01 7:39 ` Jason Wang [this message]
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 12/22] tap: add Linux multiqueue support Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 13/22] tap: support enabling or disabling a queue Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 14/22] tap: introduce a helper to get the name of an interface Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 15/22] tap: multiqueue support Jason Wang
2013-02-01 22:43 ` Eric Blake
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 17/22] virtio: introduce virtio_del_queue() Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 18/22] virtio: add a queue_index to VirtQueue Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 19/22] virtio-net: separate virtqueue from VirtIONet Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 20/22] virtio-net: multiqueue support Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 21/22] virtio-net: migration support for multiqueue Jason Wang
2013-02-01 7:39 ` [Qemu-devel] [PATCH V4 RESEND 22/22] virtio-net: compat multiqueue support Jason Wang
2013-02-01 8:22 ` [Qemu-devel] [PATCH V4 RESEND 00/22] Multiqueue virtio-net Jason Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1359704396-55327-12-git-send-email-jasowang@redhat.com \
--to=jasowang@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=blauwirbel@gmail.com \
--cc=gaowanlong@cn.fujitsu.com \
--cc=jwhan@filewood.snu.ac.kr \
--cc=krkumar2@in.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=mprivozn@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rusty@rustcorp.com.au \
--cc=shajnocz@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).