PERFORCE change 131554 for review

Robert Watson rwatson at FreeBSD.org
Mon Dec 24 14:52:32 PST 2007


http://perforce.freebsd.org/chv.cgi?CH=131554

Change 131554 by rwatson at rwatson_cinnamon on 2007/12/24 22:51:45

	Rather than using an environmental variable to trigger use of
	zero-copy BPF, instead always enable it in libcap if the kernel
	is willing to service it.
	
	Add a new sysctl, net.bpf.zerocopy_enable to enable/disable
	zero-copy support.  Default to enable, so that if zero-copy
	support is compiled into the kernel, we use it by default.
	Wee.

Affected files ...

.. //depot/projects/zcopybpf/src/contrib/libpcap/pcap-bpf.c#17 edit
.. //depot/projects/zcopybpf/src/sys/net/bpf.c#35 edit

Differences ...

==== //depot/projects/zcopybpf/src/contrib/libpcap/pcap-bpf.c#17 (text+ko) ====

@@ -805,8 +805,7 @@
 	 */
 #ifdef BIOCSETBUFMODE
 	bufmode = BPF_BUFMODE_ZBUF;
-	if (getenv("BPF_ZEROCOPY") &&
-	    ioctl(fd, BIOCSETBUFMODE, (caddr_t)&bufmode) == 0) {
+	if (ioctl(fd, BIOCSETBUFMODE, (caddr_t)&bufmode) == 0) {
 		p->zerocopy = 1;
 		if (ioctl(fd, BIOCGETZMAX, (caddr_t)&zbufmax) < 0) {
 			snprintf(ebuf, PCAP_ERRBUF_SIZE, "BIOCGETZMAX: %s",

==== //depot/projects/zcopybpf/src/sys/net/bpf.c#35 (text+ko) ====

@@ -134,6 +134,11 @@
 static int bpf_maxinsns = BPF_MAXINSNS;
 SYSCTL_INT(_net_bpf, OID_AUTO, maxinsns, CTLFLAG_RW,
     &bpf_maxinsns, 0, "Maximum bpf program instructions");
+#ifdef BPF_ZEROCOPY
+static int bpf_zerocopy_enable = 1;
+SYSCTL_INT(_net_bpf, OID_AUTO, zerocopy_enable, CTLFLAG_RW,
+    &bpf_zerocopy_enable, 0, "Enable new zero-copy BPF buffer sessions");
+#endif
 SYSCTL_NODE(_net_bpf, OID_AUTO, stats, CTLFLAG_RW,
     bpf_stats_sysctl, "bpf statistics portal");
 
@@ -1305,7 +1310,9 @@
 
 #ifdef BPF_ZEROCOPY
 		case BPF_BUFMODE_ZBUF:
-			break;
+			if (bpf_zerocopy_enable)
+				break;
+			/* FALLSTHROUGH */
 #endif
 
 		default:


More information about the p4-projects mailing list