socsvn commit: r271283 - soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw
dpl at FreeBSD.org
dpl at FreeBSD.org
Wed Jul 23 16:27:03 UTC 2014
Author: dpl
Date: Wed Jul 23 16:27:02 2014
New Revision: 271283
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=271283
Log:
Added more JIT compiling code.
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 Wed Jul 23 16:26:29 2014 (r271282)
+++ soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw2.c Wed Jul 23 16:27:02 2014 (r271283)
@@ -232,7 +232,13 @@
static inline void rule_reass(struct ip_fw *, int, struct ip_fw_chain *, int, struct ip *, struct ip_fw_args *, struct mbuf *, int *, int *, int *);
/* JIT compiling API */
+typedef int (*funcptr)();
+
void ipfw_jit_init();
+funcptr compile_code();
+
+/* Pointer to the actual compiled code */
+int (*compiledfuncptr)() = 0;
/*
* Each rule belongs to one of 32 different sets (0..31).
@@ -365,6 +371,12 @@
int
ipfw_chk(struct ip_fw_args *args)
{
+ if (compiledfuncptr == 0)
+ compiledfuncptr = compile_code();
+
+ if ((int)compiledfuncptr != 0) {
+ return compiledfuncptr();
+ }
/*
* Local variables holding state while processing a packet:
@@ -1323,6 +1335,8 @@
default_fw_tables = IPFW_TABLES_MAX;
ipfw_log_bpf(1); /* init */
+
+ /* Start JIT */
ipfw_jit_init();
return (error);
More information about the svn-soc-all
mailing list