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");