* [Qemu-devel] [Fwd: qemu-0.11.1 / tap device bug]
@ 2009-12-19 15:27 Victor Dorneanu
0 siblings, 0 replies; only message in thread
From: Victor Dorneanu @ 2009-12-19 15:27 UTC (permalink / raw)
To: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 101 bytes --]
Hi there!
I send you some bug report I've reported to NetBSD's mailing lists.
--
Victor Dorneanu
[-- Attachment #2: qemu-0.11.1 / tap device bug.eml --]
[-- Type: message/rfc822, Size: 3095 bytes --]
[-- Attachment #2.1.1: Type: text/plain, Size: 1166 bytes --]
Hello there!
I don't know if you can remember this thread [1]. Whenever I tried to
use some previously configured TAP device, I got a segmentation fault. I
thought it could some brilliant idea to have a look at the sources and
try to find out what's causing that error. After several gdb sessions,
it turned out qemu was accessing the wrong device.
-------------- File: net.c / Lines:1466-1470 --------------
TFR(fd = open("/dev/tap", O_RDWR));
if (fd < 0) {
fprintf(stderr, "warning: could not open /dev/tap: no virtual network emulation\n");
return -1;
}
-----------------------------------------------------------------------
If you run qemu like this:
$ qemu -net tap,ifname=tap0 ...
why is "/dev/tap" being used as tap device?! It should be "/dev/tap0". I
have attached a patch which should do the work.
Any suggestions/improvements are appreciated.
Links:
[1] http://mail-index.netbsd.org/netbsd-users/2009/11/25/msg004957.html
--
Victor Dorneanu
Contact
- Web/Blog: http://dornea.nu
GnuPGP information
- KeyID = 0xD20870F4 (subkeys.pgp.net)
- Key fingerprint = DD6B 5E09 242F 7410 3F90 492A 4CBA FD13 D208 70F4
[-- Attachment #2.1.2: patch.diff --]
[-- Type: text/plain, Size: 1177 bytes --]
--- net.c.orig 2009-12-18 18:24:20.000000000 +0100
+++ net.c 2009-12-18 18:19:07.000000000 +0100
@@ -116,7 +116,7 @@
#include "sysemu.h"
#include "qemu-timer.h"
#include "qemu-char.h"
-#include "audio/audio.h"
+#include "audio/qaudio.h"
#include "qemu_socket.h"
#include "qemu-log.h"
@@ -1461,11 +1461,27 @@
{
int fd;
char *dev;
+ char tap_dev[1024];
struct stat s;
- TFR(fd = open("/dev/tap", O_RDWR));
+#if defined (__NetBSD__)
+ // Concatenate dev path (/dev/) and tap device name (e.g. tap0)
+ if (strlcpy(tap_dev, "/dev/", sizeof(tap_dev)) >= sizeof(tap_dev)) {
+ fprintf(stderr, "error: tap device name too long\n");
+ return -1;
+ }
+
+ if (strlcat(tap_dev, ifname, sizeof(tap_dev)) >= sizeof(tap_dev)) {
+ fprintf(stderr, "error: tap device name too long\n");
+ return -1;
+ }
+#else
+ tap_dev="/dev/tap";
+#endif
+ TFR(fd = open(tap_dev, O_RDWR));
+
if (fd < 0) {
- fprintf(stderr, "warning: could not open /dev/tap: no virtual network emulation\n");
+ fprintf(stderr, "warning: could not open %s: no virtual network emulation\n",tap_dev);
return -1;
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2009-12-19 15:29 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-19 15:27 [Qemu-devel] [Fwd: qemu-0.11.1 / tap device bug] Victor Dorneanu
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.