$OpenBSD: patch-vl_c,v 1.2 2005/08/11 01:15:17 todd Exp $ --- vl.c.orig Sun Jul 24 13:52:08 2005 +++ vl.c Wed Aug 10 17:49:15 2005 @@ -42,7 +42,7 @@ #include #ifdef _BSD #include -#ifndef __APPLE__ +#if !defined(__APPLE__) && !defined(__OpenBSD__) #include #endif #else @@ -128,6 +128,7 @@ NetDriverState nd_table[MAX_NICS]; QEMUTimer *gui_timer; int vm_running; int audio_enabled = 0; +int nic_pcnet = 0; int sb16_enabled = 1; int adlib_enabled = 1; int gus_enabled = 1; @@ -1610,11 +1611,35 @@ static int tun_open(char *ifname, int if char *dev; struct stat s; +#ifdef __OpenBSD__ + int i = 0, enoentcount = 0, err = 0; + char dname[100]; + + for (; i < 10; i++) { + snprintf(dname, sizeof dname, "/dev/tun%d", i); + fd = open(dname, O_RDWR); + if (fd >= 0) + break; + else if (errno != ENOENT || ++enoentcount > 3) { + if (errno != EBUSY) { + err = errno; + break; + } + } else + err = errno; + } + if (fd < 0) { + fprintf(stderr, "warning: could not open %s (%s): no virtual " + "network emulation\n", dname, strerror(err)); + return -1; + } +#else fd = open("/dev/tap", O_RDWR); if (fd < 0) { fprintf(stderr, "warning: could not open /dev/tap: no virtual network emulation\n"); return -1; } +#endif fstat(fd, &s); dev = devname(s.st_rdev, S_IFCHR); @@ -2819,6 +2844,7 @@ void help(void) #if defined(TARGET_PPC) || defined(TARGET_SPARC) "-g WxH[xDEPTH] Set the initial graphical resolution and depth\n" #endif + "-nic-pcnet simulate an AMD PC-Net PCI ethernet adaptor\n" "\n" "Network options:\n" "-nics n simulate 'n' network cards [default=1]\n" @@ -2932,6 +2958,7 @@ enum { QEMU_OPTION_L, QEMU_OPTION_no_code_copy, QEMU_OPTION_pci, + QEMU_OPTION_nic_pcnet, QEMU_OPTION_isa, QEMU_OPTION_prep, QEMU_OPTION_k, @@ -3020,6 +3047,7 @@ const QEMUOption qemu_options[] = { /* temporary options */ { "pci", 0, QEMU_OPTION_pci }, + { "nic-pcnet", 0, QEMU_OPTION_nic_pcnet }, { "cirrusvga", 0, QEMU_OPTION_cirrusvga }, { NULL }, }; @@ -3425,6 +3453,9 @@ int main(int argc, char **argv) break; case QEMU_OPTION_pci: pci_enabled = 1; + break; + case QEMU_OPTION_nic_pcnet: + nic_pcnet = 1; break; case QEMU_OPTION_isa: pci_enabled = 0;