Date: Thu, 11 Sep 2014 10:13:19 GMT From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r273961 - soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw Message-ID: <201409111013.s8BADJbW092981@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dpl Date: Thu Sep 11 10:13:18 2014 New Revision: 273961 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=273961 Log: Force inclusion of functions at bitcode. Modified: soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw_rules.c Modified: soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw_rules.c ============================================================================== --- soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw_rules.c Thu Sep 11 10:13:04 2014 (r273960) +++ soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw_rules.c Thu Sep 11 10:13:18 2014 (r273961) @@ -7,8 +7,18 @@ // The real function will be compiled and inserted by the JIT. int ipfw_chk_jit(struct ip_fw_args *args, struct ip_fw_chain *chain); +static int jump_fast(struct ip_fw_chain *chain, struct ip_fw *f, int num, + int tablearg, int jump_backwards); +static void set_match(struct ip_fw_args *args, int slot, struct ip_fw_chain *chain); +static int is_icmp_query(struct icmphdr *icmp); +static int ipopts_match(struct ip *ip, ipfw_insn *cmd); +static int tcpopts_match(struct tcphdr *tcp, ipfw_insn *cmd); +static int iface_match(struct ifnet *ifp, ipfw_insn_if *cmd, + struct ip_fw_chain *chain, uint32_t *tablearg); +static int verify_path(struct in_addr src, struct ifnet *ifp, u_int fib); +static void send_reject(struct ip_fw_args *args, int code, int iplen, + struct ip *ip); -void crfree(struct ucred *); time_t time_uptime = 0; /* XXX Function defined at ip_fw_sockopt.c @@ -41,7 +51,6 @@ int tags_minlen = 64; int tags_freelist_count = 0; static int tags_freelist_max = 0; - struct mbuf *mbuf_freelist; void @@ -87,50 +96,56 @@ struct _ipfw_insn_if; struct _ipfw_dyn_rule; -// We should hide this. -#ifndef __FreeBSD__ - struct bsd_ucred; -#else - struct ucred; -#endif - // This functions only forces the compiler to store the stubs of the functions // so that they can be used by the JIT-compiled code instead. -// this functions is not to be called anywhere. +// This function is not to be called ever. void voidfunction() { struct ip_fw_args arguments; struct ip_fw_chain chainss; - uint32_t thing; - - #ifndef __FreeBSD__ - struct bsd_ucred user_creds; - #else - struct ucred user_creds; - #endif - // These two structs are not included. + // These structs are not included. // We need to do something with them. struct _ipfw_insn_if insnif; struct _ipfw_dyn_rule rules; - - struct ip_fw_args *args = &arguments; + struct _ipfw_insn_ip ip; + struct _ipfw_insn_u16 u16; + struct _ipfw_dyn_rule rule; + struct ip_fw_args *args; struct ip_fw_chain *chain = &chainss; + struct ip_fw f; + struct icmphdr icmp; + struct ip ipstruct; + struct tcphdr tcp; + ipfw_insn cmd; + struct ifnet ifp; + ipfw_insn_if cmdif; + struct in_addr src; + + int n, tablearg, jmp; + uint32_t t; + u_int fib; + + args = &arguments; + ip.o.opcode = 1; + u16.o.opcode = 1; + rule.pcnt = 0; ipfw_find_rule(chain, 0, 0); - ipfw_chk_jit(args, chain); - insnif.o.opcode = 0; rules.next = &rules; -#ifdef __FreeBSD__ - struct ucred *ucreds = &user_creds; - - crfree(ucreds); -#endif - - thing = htonl(thing); - thing = ntohl(thing); + /* Functions */ + ipfw_chk_jit(args, chain); + n = tablearg = jmp = t = fib = 0; + jump_fast(chain, &f, n, tablearg, jmp); + set_match(args, n, chain); + is_icmp_query(&icmp); + ipopts_match(&ipstruct, &cmd); + tcpopts_match(&tcp, &cmd); + iface_match(&ifp, &cmdif, chain, &t); + verify_path(src, &ifp, fib); + send_reject(args, tablearg , n, &ipstruct); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201409111013.s8BADJbW092981>