socsvn commit: r271699 - soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw

dpl at FreeBSD.org dpl at FreeBSD.org
Fri Aug 1 18:09:55 UTC 2014


Author: dpl
Date: Fri Aug  1 18:09:54 2014
New Revision: 271699
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=271699

Log:
  Move the compiling code to a more sensible place.

Modified:
  soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw2.c

Modified: soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw2.c
==============================================================================
--- soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw2.c	Fri Aug  1 17:24:36 2014	(r271698)
+++ soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw2.c	Fri Aug  1 18:09:54 2014	(r271699)
@@ -264,17 +264,6 @@
 int
 ipfw_chk(struct ip_fw_args *args)
 {
-	if (compiledfuncptr == 0) {
-		IPFW_PF_RLOCK(chain);
-		if (! V_ipfw_vnet_ready) { /* shutting down, leave NOW. */
-			IPFW_PF_RUNLOCK(chain);
-			return (IP_FW_PASS);	/* accept */
-		}
-		compiledfuncptr = compile_code(args);
-		IPFW_PF_RUNLOCK(chain);
-	} else
-		return compiledfuncptr();
-
 	/*
 	 * Local variables holding state while processing a packet:
 	 *
@@ -404,6 +393,19 @@
 	proto = args->f_id.proto = 0;	/* mark f_id invalid */
 		/* XXX 0 is a valid proto: IP/IPv6 Hop-by-Hop Option */
 
+	/* If we haven't, JIT-compile the actions to be executed per-rule */
+	if (compiledfuncptr == 0) {
+		IPFW_PF_RLOCK(chain);
+		if (! V_ipfw_vnet_ready) { /* shutting down, leave NOW. */
+			IPFW_PF_RUNLOCK(chain);
+			return (IP_FW_PASS);	/* accept */
+		}
+		compiledfuncptr = compile_code(args, chain);
+		IPFW_PF_RUNLOCK(chain);
+	} else
+		return compiledfuncptr();
+
+
 /*
  * PULLUP_TO(len, p, T) makes sure that len + sizeof(T) is contiguous,
  * then it sets p to point at the offset "len" in the mbuf. WARNING: the


More information about the svn-soc-all mailing list