$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 <dirent.h>
 #ifdef _BSD
 #include <sys/stat.h>
-#ifndef __APPLE__
+#if !defined(__APPLE__) && !defined(__OpenBSD__)
 #include <libutil.h>
 #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;
