socsvn commit: r271525 - soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw
dpl at FreeBSD.org
dpl at FreeBSD.org
Tue Jul 29 10:50:00 UTC 2014
Author: dpl
Date: Tue Jul 29 10:49:57 2014
New Revision: 271525
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=271525
Log:
Added a first version of lockcheckvnet()
Added:
soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw_rules.c
Modified:
soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw2.c
soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw_rules.h
soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/jit.cc
soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/jit.h
Modified: soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw2.c
==============================================================================
--- soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw2.c Tue Jul 29 09:46:08 2014 (r271524)
+++ soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw2.c Tue Jul 29 10:49:57 2014 (r271525)
@@ -128,7 +128,6 @@
static unsigned int default_fw_tables = IPFW_TABLES_DEFAULT;
/* JIT compiling API */
-void ipfw_jit_init();
funcptr compile_code();
/* Pointer to the actual compiled code */
@@ -266,7 +265,7 @@
ipfw_chk(struct ip_fw_args *args)
{
if (compiledfuncptr == 0)
- compiledfuncptr = compile_code();
+ compiledfuncptr = compile_code(args);
if ((int)compiledfuncptr != 0) {
return compiledfuncptr();
@@ -655,11 +654,9 @@
args->f_id.dst_port = dst_port = ntohs(dst_port);
}
- IPFW_PF_RLOCK(chain);
- if (! V_ipfw_vnet_ready) { /* shutting down, leave NOW. */
- IPFW_PF_RUNLOCK(chain);
- return (IP_FW_PASS); /* accept */
- }
+ /* Returns -1 on error */
+ if (lockcheckvnet(chain))
+ return (IP_FW_PASS);
if (args->rule.slot) {
/*
* Packet has already been tagged as a result of a previous
@@ -1230,9 +1227,6 @@
ipfw_log_bpf(1); /* init */
- /* Start JIT */
- ipfw_jit_init();
-
return (error);
}
Added: soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw_rules.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw_rules.c Tue Jul 29 10:49:57 2014 (r271525)
@@ -0,0 +1,7 @@
+/*
+ * This is the file that gets compiled when
+ * generating bitcode.
+ */
+
+ #define IPFW_RULES_INLINE __unused
+ #include "ip_fw_rules.h"
Modified: soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw_rules.h
==============================================================================
--- soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw_rules.h Tue Jul 29 09:46:08 2014 (r271524)
+++ soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw_rules.h Tue Jul 29 10:49:57 2014 (r271525)
@@ -1921,3 +1921,19 @@
}
*done = 1; /* exit outer loop */
}
+
+/*
+ * From here on, there's ip_fw2 code, so that
+ * we can add this to our jit compiled code.
+ */
+static IPFW_RULES_INLINE int
+lockcheckvnet(struct ip_fw_chain *chain)
+{
+ IPFW_PF_RLOCK(chain);
+ if (! V_ipfw_vnet_ready) { /* shutting down, leave NOW. */
+ IPFW_PF_RUNLOCK(chain);
+ return (-1); /* accept */
+ }
+ return 0;
+}
+
Modified: soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/jit.cc
==============================================================================
--- soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/jit.cc Tue Jul 29 09:46:08 2014 (r271524)
+++ soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/jit.cc Tue Jul 29 10:49:57 2014 (r271525)
@@ -1,15 +1,21 @@
/* JIT compilation code */
+#include <net/vnet.h>
+
#include <iostream>
#include <string>
#include <vector>
#include <llvm/ADT/OwningPtr.h>
#include <llvm/Bitcode/ReaderWriter.h>
+#include <llvm/IR/IRBuilder.h>
#include <llvm/IR/LLVMContext.h>
#include <llvm/IR/Module.h>
#include <llvm/Support/MemoryBuffer.h>
#include <llvm/Support/ErrorOr.h>
+#include "ip_fw_private.h"
+#include "ip_fw_private.h"
+
typedef int (*funcptr)();
using namespace llvm;
@@ -19,6 +25,7 @@
LLVMContext con;
LLVMContext &c = con;
OwningPtr<MemoryBuffer> buffer;
+ //IRBuilder<> irb;
public:
jitCompiler(std::string name)
{
@@ -37,14 +44,27 @@
}
mod = ptr.get();
}
-} ;
-extern "C" void
-ipfw_jit_init()
+ int
+ loadStub(std::string funcname)
+ {
+ return 0;
+ }
+};
+
+extern "C" funcptr
+compile_code(struct ip_fw_args *args)
{
jitCompiler("ip_fw_rules.bc");
- /* XXX - We have to understand what we have to here.
+ int f_pos = 0; /* index of current rule in the array */
+
+ // Now I have to load the stubs of the loaded rules.
+ // For that, I need a table: RULE, "functname", #args
+
+ // Iterate through the rules.
+
+ /*
// Get the stub (prototype) for the cell function
F = Mod->getFunction("cell");
// Set it to have private linkage, so that it can be removed after being
@@ -85,11 +105,5 @@
}
*/
-}
-
-/* The mother of all functions! */
-extern "C" funcptr
-compile_code()
-{
return 0;
}
Modified: soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/jit.h
==============================================================================
--- soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/jit.h Tue Jul 29 09:46:08 2014 (r271524)
+++ soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/jit.h Tue Jul 29 10:49:57 2014 (r271525)
@@ -1,4 +1,5 @@
+#include "ip_fw_private.h"
+
typedef int (*funcptr)();
-void ipfw_jit_init();
-funcptr compile_code();
+funcptr compile_code(struct ip_fw_args *);
More information about the svn-soc-all
mailing list