Module Name:    src
Committed By:   pooka
Date:           Mon Jan 25 22:25:38 UTC 2010

Modified Files:
        src/sys/rump/net/rumptest: rumptest_net.c

Log Message:
In case opening /dev/bpf fails, try to load bpf kmod and try again.


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/sys/rump/net/rumptest/rumptest_net.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/rump/net/rumptest/rumptest_net.c
diff -u src/sys/rump/net/rumptest/rumptest_net.c:1.15 src/sys/rump/net/rumptest/rumptest_net.c:1.16
--- src/sys/rump/net/rumptest/rumptest_net.c:1.15	Tue Jan 19 17:51:03 2010
+++ src/sys/rump/net/rumptest/rumptest_net.c	Mon Jan 25 22:25:38 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumptest_net.c,v 1.15 2010/01/19 17:51:03 pooka Exp $	*/
+/*	$NetBSD: rumptest_net.c,v 1.16 2010/01/25 22:25:38 pooka Exp $	*/
 
 /*
  * Copyright (c) 2008 Antti Kantee.  All Rights Reserved.
@@ -29,6 +29,7 @@
  */
 
 #include <sys/param.h>
+#include <sys/module.h>
 #include <sys/mbuf.h>
 #include <sys/time.h>
 #include <sys/sockio.h>
@@ -189,12 +190,37 @@
 	struct bpf_hdr *bhdr;
 	void *buf;
 	struct ifreq ifr;
-	int bpfd;
+	int bpfd, modfd;
 	u_int bpflen, x;
 
 	bpfd = rump_sys_open("/dev/bpf", O_RDWR);
-	if (bpfd == -1)
-		err(1, "bpf open");
+
+	/* fail?  try to load kernel module */
+	if (bpfd == -1) {
+		modctl_load_t ml;
+
+		/* XXX: struct stat size */
+		modfd = open("./bpf.kmod", O_RDONLY);
+		if (modfd == -1)
+			err(1, "no bpf, no bpf kmod");
+		close(modfd);
+
+		rump_pub_etfs_register("/bpf.kmod",
+		    "./bpf.kmod", RUMP_ETFS_REG);
+		ml.ml_filename = "/bpf.kmod";
+		ml.ml_flags = 0;
+		ml.ml_props = NULL;
+		ml.ml_propslen = 0;
+
+		if (rump_sys_modctl(MODCTL_LOAD, &ml) == -1)
+			err(1, "load bpf module");
+		/* XXX: I "know" it's 256 XXX */
+		rump_sys_mknod("/dev/bpf", 0777 | S_IFCHR, makedev(256,0));
+
+		bpfd = rump_sys_open("/dev/bpf", O_RDWR);
+		if (bpfd == -1)
+			err(1, "open bpf");
+	}
 
 	if (rump_sys_ioctl(bpfd, BIOCGBLEN, &bpflen) == -1)
 		err(1, "BIOCGBLEN");

Reply via email to