Message ID | 4E2D316F.5020300@amd.com |
---|---|
State | New |
Headers | show |
On Mon, Jul 25, 2011 at 9:03 AM, Christoph Egger <Christoph.Egger@amd.com> wrote: > On 07/23/11 18:17, Anthony Liguori wrote: >> >> On 06/17/2011 03:56 AM, Christoph Egger wrote: >>> >>> Fix network interface tap backend work on NetBSD. >>> It uses an ioctl to get the tap name. >>> >>> From Manuel Bouyer<bouyer@netbsd.org> >>> Signed-off-by: Christoph Egger<Christoph.Egger@amd.com> >>> >>> diff --git a/net/tap-bsd.c b/net/tap-bsd.c >>> index 2f3efde..577aafe 100644 >>> --- a/net/tap-bsd.c >>> +++ b/net/tap-bsd.c >>> @@ -28,6 +28,8 @@ >>> #include "qemu-error.h" >>> >>> #ifdef __NetBSD__ >>> +#include<sys/ioctl.h> >> >> Your mailer munged this patch. > > ... or by the MS Exchange Server. > > Resending the patch as attachment, the only one > way I have that works for everyone. Sorry. Please attach the whole commit for example from 'git show', instead of just the diff. That can be fed to 'git am' directly. Now I had to combine the lines below and the patch by hand. Thanks, applied. > Fix network interface tap backend work on NetBSD. > It uses an ioctl to get the tap name. > > From Manuel Bouyer<bouyer@netbsd.org> > Signed-off-by: Christoph Egger<Christoph.Egger@amd.com> > > -- > ---to satisfy European Law for business letters: > Advanced Micro Devices GmbH > Einsteinring 24, 85689 Dornach b. Muenchen > Geschaeftsfuehrer: Alberto Bozzo, Andrew Bowd > Sitz: Dornach, Gemeinde Aschheim, Landkreis Muenchen > Registergericht Muenchen, HRB Nr. 43632 >
diff --git a/net/tap-bsd.c b/net/tap-bsd.c index 2f3efde..577aafe 100644 --- a/net/tap-bsd.c +++ b/net/tap-bsd.c @@ -28,6 +28,8 @@ #include "qemu-error.h" #ifdef __NetBSD__ +#include <sys/ioctl.h> +#include <net/if.h> #include <net/if_tap.h> #endif @@ -40,8 +42,12 @@ int tap_open(char *ifname, int ifname_size, int *vnet_hdr, int vnet_hdr_required) { int fd; +#ifdef TAPGIFNAME + struct ifreq ifr; +#else char *dev; struct stat s; +#endif #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) /* if no ifname is given, always start the search from tap0/tun0. */ @@ -77,14 +83,30 @@ int tap_open(char *ifname, int ifname_size, int *vnet_hdr, int vnet_hdr_required #else TFR(fd = open("/dev/tap", O_RDWR)); if (fd < 0) { - fprintf(stderr, "warning: could not open /dev/tap: no virtual network emulation\n"); + fprintf(stderr, + "warning: could not open /dev/tap: no virtual network emulation: %s\n", + strerror(errno)); return -1; } #endif - fstat(fd, &s); +#ifdef TAPGIFNAME + if (ioctl(fd, TAPGIFNAME, (void *)&ifr) < 0) { + fprintf(stderr, "warning: could not get tap name: %s\n", + strerror(errno)); + return -1; + } + pstrcpy(ifname, ifname_size, ifr.ifr_name); +#else + if (fstat(fd, &s) < 0) { + fprintf(stderr, + "warning: could not stat /dev/tap: no virtual network emulation: %s\n", + strerror(errno)); + return -1; + } dev = devname(s.st_rdev, S_IFCHR); pstrcpy(ifname, ifname_size, dev); +#endif if (*vnet_hdr) { /* BSD doesn't have IFF_VNET_HDR */