aboutsummaryrefslogtreecommitdiff
path: root/net.c
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2009-06-25 18:29:06 +0300
committerAvi Kivity <avi@redhat.com>2009-06-25 18:29:06 +0300
commitad35b5fe688a420ed4705f41f7f1bddd6ab268c5 (patch)
treeaf1389841e33d80644268f1616ad3bbff887cfe7 /net.c
parentMerge commit '4a77b25e2af0ccfa637c963f64a01468edcf94ac' into upstream-merge (diff)
parentnet: add '-net tap,sndbuf=nbytes' (diff)
downloadqemu-kvm-ad35b5fe688a420ed4705f41f7f1bddd6ab268c5.tar.gz
qemu-kvm-ad35b5fe688a420ed4705f41f7f1bddd6ab268c5.tar.bz2
qemu-kvm-ad35b5fe688a420ed4705f41f7f1bddd6ab268c5.zip
Merge commit '0df0ff6de70393680cea81ad696d9d74b75f88da' into upstream-merge
* commit '0df0ff6de70393680cea81ad696d9d74b75f88da': net: add '-net tap,sndbuf=nbytes' Conflicts: net.c Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'net.c')
-rw-r--r--net.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/net.c b/net.c
index c4fa1a657..9833b1108 100644
--- a/net.c
+++ b/net.c
@@ -1238,6 +1238,18 @@ static void tap_send(void *opaque)
} while (size > 0);
}
+static void tap_set_sndbuf(TAPState *s, int sndbuf, Monitor *mon)
+{
+#ifdef TUNSETSNDBUF
+ if (ioctl(s->fd, TUNSETSNDBUF, &sndbuf) == -1) {
+ config_error(mon, "TUNSETSNDBUF ioctl failed: %s\n",
+ strerror(errno));
+ }
+#else
+ config_error(mon, "No '-net tap,sndbuf=<nbytes>' support available\n");
+#endif
+}
+
int tap_has_vnet_hdr(void *opaque)
{
VLANClientState *vc = opaque;
@@ -2297,9 +2309,6 @@ void qemu_check_nic_model_list(NICInfo *nd, const char * const *models,
int net_client_init(Monitor *mon, const char *device, const char *p)
{
- static const char * const fd_params[] = {
- "vlan", "name", "fd", NULL
- };
char buf[1024];
int vlan_id, ret;
VLANState *vlan;
@@ -2454,6 +2463,9 @@ int net_client_init(Monitor *mon, const char *device, const char *p)
int fd;
vlan->nb_host_devs++;
if (get_param_value(buf, sizeof(buf), "fd", p) > 0) {
+ static const char * const fd_params[] = {
+ "vlan", "name", "fd", "sndbuf", NULL
+ };
if (check_params(chkbuf, sizeof(chkbuf), fd_params, p) < 0) {
config_error(mon, "invalid parameter '%s' in '%s'\n", chkbuf, p);
ret = -1;
@@ -2464,7 +2476,7 @@ int net_client_init(Monitor *mon, const char *device, const char *p)
s = net_tap_fd_init(vlan, device, name, fd, tap_probe_vnet_hdr(fd));
} else {
static const char * const tap_params[] = {
- "vlan", "name", "ifname", "script", "downscript", NULL
+ "vlan", "name", "ifname", "script", "downscript", "sndbuf", NULL
};
if (check_params(chkbuf, sizeof(chkbuf), tap_params, p) < 0) {
config_error(mon, "invalid parameter '%s' in '%s'\n", chkbuf, p);
@@ -2483,6 +2495,9 @@ int net_client_init(Monitor *mon, const char *device, const char *p)
s = net_tap_init(vlan, device, name, ifname, setup_script, down_script);
}
if (s != NULL) {
+ if (get_param_value(buf, sizeof(buf), "sndbuf", p)) {
+ tap_set_sndbuf(s, atoi(buf), mon);
+ }
ret = 0;
} else {
ret = -1;
@@ -2492,6 +2507,9 @@ int net_client_init(Monitor *mon, const char *device, const char *p)
if (!strcmp(device, "socket")) {
char chkbuf[64];
if (get_param_value(buf, sizeof(buf), "fd", p) > 0) {
+ static const char * const fd_params[] = {
+ "vlan", "name", "fd", NULL
+ };
int fd;
if (check_params(chkbuf, sizeof(chkbuf), fd_params, p) < 0) {
config_error(mon, "invalid parameter '%s' in '%s'\n", chkbuf, p);