From 15ac913bfe10abe142334a8b432c1f4c410fb04b Mon Sep 17 00:00:00 2001 From: Mark McLoughlin Date: Thu, 22 Oct 2009 17:49:13 +0100 Subject: net: move tap_set_sndbuf() to tap-linux.c TUNSETSNDBUF is only available on linux Signed-off-by: Mark McLoughlin Signed-off-by: Anthony Liguori --- net/tap-linux.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'net/tap-linux.c') diff --git a/net/tap-linux.c b/net/tap-linux.c index c6f751e..6c3b6e3 100644 --- a/net/tap-linux.c +++ b/net/tap-linux.c @@ -76,3 +76,26 @@ int tap_open(char *ifname, int ifname_size, int *vnet_hdr, int vnet_hdr_required fcntl(fd, F_SETFL, O_NONBLOCK); return fd; } + +/* sndbuf should be set to a value lower than the tx queue + * capacity of any destination network interface. + * Ethernet NICs generally have txqueuelen=1000, so 1Mb is + * a good default, given a 1500 byte MTU. + */ +#define TAP_DEFAULT_SNDBUF 1024*1024 + +int tap_set_sndbuf(int fd, QemuOpts *opts) +{ + int sndbuf; + + sndbuf = qemu_opt_get_size(opts, "sndbuf", TAP_DEFAULT_SNDBUF); + if (!sndbuf) { + sndbuf = INT_MAX; + } + + if (ioctl(fd, TUNSETSNDBUF, &sndbuf) == -1 && qemu_opt_get(opts, "sndbuf")) { + qemu_error("TUNSETSNDBUF ioctl failed: %s\n", strerror(errno)); + return -1; + } + return 0; +} -- cgit v1.1