Date: Thu, 24 Jul 2014 17:15:40 GMT From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r271342 - in soc2014/dpl/netmap-ipfwjit: . sys/netpfil/ipfw Message-ID: <201407241715.s6OHFeDw052877@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dpl Date: Thu Jul 24 17:15:40 2014 New Revision: 271342 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=271342 Log: Make it compile. Modified: soc2014/dpl/netmap-ipfwjit/Makefile.kipfw 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/Makefile.kipfw ============================================================================== --- soc2014/dpl/netmap-ipfwjit/Makefile.kipfw Thu Jul 24 16:33:29 2014 (r271341) +++ soc2014/dpl/netmap-ipfwjit/Makefile.kipfw Thu Jul 24 17:15:40 2014 (r271342) @@ -152,7 +152,7 @@ #Generate the actual bytecode to be used ../ip_fw_rules.bc: - @$(CC) $(CFLAGS) $(BCFLAGS) -o ../ip_fw_rules.bc ../sys/netpfil/ipfw/ip_fw_rules.h + @$(CC) $(CFLAGS) $(BCFLAGS) -o ../ip_fw_rules.bc ../sys/netpfil/ipfw/ip_fw_rules.c radix.o:# CFLAGS += -U_KERNEL Modified: soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw2.c ============================================================================== --- soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw2.c Thu Jul 24 16:33:29 2014 (r271341) +++ soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw2.c Thu Jul 24 17:15:40 2014 (r271342) @@ -38,6 +38,7 @@ #endif /* INET */ #include "opt_inet6.h" #include "opt_ipsec.h" +#define IPFW_RULES_INLINE __always_inline #include "ip_fw_rules.h" #include "jit.h" @@ -126,114 +127,7 @@ /* Use 128 tables by default */ static unsigned int default_fw_tables = IPFW_TABLES_DEFAULT; -/* Rule functions, ordered by appereance in the code */ -static __always_inline void rule_nop(int *); -static __always_inline void rule_forward_mac(int); -static __always_inline void rule_jail(int *, u_short, uint8_t, ipfw_insn *, struct ip_fw_args *, int, void *); -static __always_inline void rule_recv(int *, ipfw_insn *, struct mbuf *, struct ip_fw_chain *, uint32_t *); -static __always_inline void rule_xmit(int *, struct ifnet *, ipfw_insn *, struct ip_fw_chain *, uint32_t *); -static __always_inline void rule_via(int *, struct ifnet *, struct mbuf *, ipfw_insn *, struct ip_fw_chain *, uint32_t *); -static __always_inline void rule_macaddr2(int *, struct ip_fw_args *, ipfw_insn *); -static __always_inline void rule_mac_type(int *, struct ip_fw_args *, ipfw_insn *, int, uint16_t); -static __always_inline void rule_frag(int *, u_short); -static __always_inline void rule_in(int *, struct ifnet *); -static __always_inline void rule_layer2(int *, struct ip_fw_args *); -static __always_inline void rule_diverted(int *, struct ip_fw_args *, ipfw_insn *); -static __always_inline void rule_proto(int *, uint8_t, ipfw_insn *); -static __always_inline void rule_ip_src(int *, int, ipfw_insn *, struct in_addr *); -static __always_inline void rule_ip_dst_lookup(int *, ipfw_insn *, int, struct ip_fw_args *, uint32_t *, int, int, struct ip *, struct in_addr *, struct in_addr *, uint16_t, uint16_t, u_short, uint8_t, int, void *, struct ip_fw_chain *); -static __always_inline void rule_ip_dst_mask(int *, int, ipfw_insn *, int, struct in_addr *, struct in_addr *); -static __always_inline void rule_ip_src_me(int *, int, int, struct in_addr *, struct ip_fw_args *); - -#ifdef INET6 -static __always_inline void rule_ip6_src_me(int *, int, struct ip_fw_args *); -#endif /* INET6 */ - -static __always_inline void rule_ip_src_set(int *, int, ipfw_insn *, struct ip_fw_args *); -static __always_inline void rule_ip_dst(int *, int, ipfw_insn *, struct in_addr *); -static __always_inline void rule_ip_dst_me(int *, struct ip_fw_args *, int, int, struct in_addr *); - -#ifdef INET6 -static __always_inline void rule_ip6_dst_me(int *, struct ip_fw_args *args, int is_ipv6); -#endif /* INET6 */ - -static __always_inline void rule_ip_dstport(int *, uint8_t, u_short , ipfw_insn *, int , uint16_t , uint16_t); -static __always_inline void rule_icmptype(int *, u_short, uint8_t , void *, ipfw_insn *); - -#ifdef INET6 -static __always_inline void rule_icmp6type(int *, u_short, int, uint8_t, void *, ipfw_insn *); -#endif /* INET6 */ - -static __always_inline void rule_ipopt(int *, int, struct ip *, ipfw_insn *); -static __always_inline void rule_ipver(int *, int, ipfw_insn *, struct ip *); -static __always_inline void rule_ipttl(int *, int, ipfw_insn *, int, struct ip *, uint16_t); -static __always_inline void rule_ipprecedence(int *, int, ipfw_insn *, struct ip *); -static __always_inline void rule_iptos(int *, int, ipfw_insn *, struct ip *); -static __always_inline void rule_dscp(int *, int, int, ipfw_insn *, struct ip *); -static __always_inline void rule_tcpdatalen(int *, uint8_t, u_short, void *, uint16_t, int, ipfw_insn *, struct ip *); -static __always_inline void rule_tcpflags(int *, uint8_t, u_short, ipfw_insn *, void *); -static __always_inline int rule_tcpopts(int *, u_int, void *, uint8_t, u_short, ipfw_insn *, struct mbuf *, struct ip_fw_args *); -static __always_inline void rule_tcpseq(int *, uint8_t, u_short, ipfw_insn *, void *); -static __always_inline void rule_tcpack(int *, uint8_t, u_short, ipfw_insn *, void *); -static __always_inline void rule_tcpwin(int *, uint8_t, u_short, ipfw_insn *, int, void *); -static __always_inline void rule_estab(int *, uint8_t, u_short, void *); -static __always_inline void rule_altq(int *, ipfw_insn *, struct mbuf *, struct ip *); -static __always_inline void rule_log(int *, struct ip_fw *, u_int, struct ip_fw_args *, struct mbuf *, struct ifnet *, u_short, u_short, uint32_t, struct ip *); -static __always_inline void rule_prob(int *, ipfw_insn *); -static __always_inline void rule_verrevpath(int *, struct ifnet *, struct mbuf *, int, struct ip_fw_args *, struct in_addr *); -static __always_inline void rule_versrcreach(int *, u_int, struct ifnet *, int, struct ip_fw_args *, struct in_addr *); -static __always_inline void rule_antispoof(int *, struct ifnet *, u_int, int, int, struct in_addr *, struct ip_fw_args *, struct mbuf *); - -#ifdef IPSEC -static __always_inline void rule_ipsec(int *match, struct mbuf *); -#endif /* IPSEC */ - -#ifdef INET6 -static __always_inline void rule_ip6_src(int *, int, struct ip_fw_args *, ipfw_insn *); -static __always_inline void rule_ip6_dst(int *, int, struct ip_fw_args *, ipfw_insn *); -static __always_inline void rule_ip6_dst_mask(int *, struct ip_fw_args *, ipfw_insn *, int, int); -static __always_inline void rule_flow6id(int *, int, struct ip_fw_args *, ipfw_insn *); -static __always_inline void rule_ext_hdr(int *, int, uint16_t, ipfw_insn *); -static __always_inline void rule_ip6(int *, int); -#endif /* INET6 */ - -static __always_inline void rule_ip4(int *, int); -static __always_inline void rule_tag(int *, ipfw_insn *, struct mbuf *, uint32_t); -static __always_inline void rule_fib(int *, struct ip_fw_args *, ipfw_insn *); -static __always_inline void rule_sockarg(int *, int, uint8_t, struct in_addr *, struct in_addr *, uint16_t, uint16_t, struct ip_fw_args *, uint32_t *); -static __always_inline void rule_tagged(int *, ipfw_insn *, int, struct mbuf *, uint32_t); - -/* The second sets of opcodes. They represent the actions of a rule. */ -static __always_inline void rule_keep_state(int *, struct ip_fw *f, ipfw_insn *, struct ip_fw_args *, uint32_t, int *, int *, int *); -static __always_inline void rule_check_state(int *, int *, ipfw_dyn_rule *, struct ip_fw_args *, uint8_t, void *, int, struct ip_fw *, int *, struct ip_fw_chain *, ipfw_insn *, int *, int *); -static __always_inline void rule_accept(int *, int *, int *); -static __always_inline void rule_queue(struct ip_fw_args *, int, struct ip_fw_chain *, ipfw_insn *, uint32_t, int *, int *, int *); -static __always_inline void rule_tee(int *, int *, int *, ipfw_insn *, struct ip_fw_args *, int, uint32_t, struct ip_fw_chain *); -static __always_inline void rule_count(int *, struct ip_fw *, int); -static __always_inline void rule_skipto(int *, int *, ipfw_insn *, int *, int *, int *, struct ip_fw *, int, struct ip_fw_chain *, uint32_t); -static __always_inline void rule_callreturn(ipfw_insn *, struct mbuf *, struct ip_fw *, struct ip_fw_chain *, uint32_t, int, int *, int *, int *, int *); -static __always_inline void rule_reject(u_int, int, u_short, uint8_t, void *, struct mbuf *, struct in_addr *, struct ip_fw_args *, ipfw_insn *, uint16_t, struct ip *); - -#ifdef INET6 -static __always_inline void rule_unreach6(u_int, int, u_short, uint8_t, uint8_t, struct mbuf *, struct ip_fw_args *, ipfw_insn *, struct ip *); -#endif /* INET6 */ - -static __always_inline void rule_deny(int *, int *, int *); -static __always_inline void rule_forward_ip(struct ip_fw_args *, ipfw_dyn_rule *, struct ip_fw *, int, ipfw_insn *, uint32_t, int *, int *, int *); - -#ifdef INET6 -static __always_inline void rule_forward_ip6(struct ip_fw_args *, ipfw_dyn_rule *, struct ip_fw *, int, ipfw_insn *, int *, int *, int *); -#endif /* INET6 */ - -static __always_inline void rule_ngtee(struct ip_fw_args *, int, struct ip_fw_chain *, ipfw_insn *, uint32_t, int *, int *, int *); -static __always_inline void rule_setfib(struct ip_fw *, int, uint32_t, ipfw_insn *, struct mbuf *, struct ip_fw_args *, int *); -static __always_inline void rule_setdscp(ipfw_insn *, struct ip *, int, int, uint32_t, struct ip_fw *, int, int *); -static __always_inline void rule_nat(struct ip_fw_args *, int, struct ip_fw_chain *, ipfw_insn *, struct mbuf *, uint32_t, int *, int *, int *); -static __always_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(); Modified: soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw_rules.h ============================================================================== --- soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw_rules.h Thu Jul 24 16:33:29 2014 (r271341) +++ soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/ip_fw_rules.h Thu Jul 24 17:15:40 2014 (r271342) @@ -656,13 +656,13 @@ * Actions executed per-rule. */ -static void +static IPFW_RULES_INLINE void rule_nop(int *match) { *match = 1; } -static void +static IPFW_RULES_INLINE void rule_forward_mac(int opcode) { printf("ipfw: opcode %d unimplemented\n", @@ -670,7 +670,7 @@ } -static void +static IPFW_RULES_INLINE void rule_jail(int * match, u_short offset, uint8_t proto, ipfw_insn *cmd, struct ip_fw_args *args, int ucred_lookup, void *ucred_cache) { /* @@ -693,25 +693,25 @@ #endif } -static void +static IPFW_RULES_INLINE void rule_recv(int *match, ipfw_insn *cmd, struct mbuf *m, struct ip_fw_chain *chain, uint32_t *tablearg) { *match = iface_match(m->m_pkthdr.rcvif, (ipfw_insn_if *)cmd, chain, tablearg); } -static void +static IPFW_RULES_INLINE void rule_xmit(int *match, struct ifnet *oif, ipfw_insn *cmd, struct ip_fw_chain *chain, uint32_t *tablearg) { *match = iface_match(oif, (ipfw_insn_if *)cmd, chain, tablearg); } -static void +static IPFW_RULES_INLINE void rule_via(int *match, struct ifnet *oif, struct mbuf *m, ipfw_insn *cmd, struct ip_fw_chain *chain, uint32_t *tablearg) { *match = iface_match(oif ? oif : m->m_pkthdr.rcvif, (ipfw_insn_if *)cmd, chain, tablearg); } -static void +static IPFW_RULES_INLINE void rule_macaddr2(int *match, struct ip_fw_args *args, ipfw_insn *cmd) { if (args->eh != NULL) { /* have MAC header */ @@ -729,7 +729,7 @@ } -static void +static IPFW_RULES_INLINE void rule_mac_type(int *match, struct ip_fw_args *args, ipfw_insn *cmd, int cmdlen, uint16_t etype) { if (args->eh != NULL) { @@ -745,26 +745,26 @@ } -static void +static IPFW_RULES_INLINE void rule_frag(int *match, u_short offset) { *match = (offset != 0); } -static void +static IPFW_RULES_INLINE void rule_in(int *match, struct ifnet *oif) { /* "out" is "not in" */ *match = (oif == NULL); } -static void +static IPFW_RULES_INLINE void rule_layer2(int *match, struct ip_fw_args * args) { *match = (args->eh != NULL); } -static void +static IPFW_RULES_INLINE void rule_diverted(int *match, struct ip_fw_args * args, ipfw_insn *cmd) { /* For diverted packets, args->rule.info @@ -776,7 +776,7 @@ cmd->arg1 & ((i & IPFW_INFO_IN) ? 1 : 2); } -static void +static IPFW_RULES_INLINE void rule_proto(int *match, uint8_t proto, ipfw_insn *cmd) { /* @@ -786,7 +786,7 @@ *match = (proto == cmd->arg1); } -static void +static IPFW_RULES_INLINE void rule_ip_src(int *match, int is_ipv4, ipfw_insn *cmd, struct in_addr *src_ip) { *match = is_ipv4 && @@ -794,7 +794,7 @@ src_ip->s_addr); } -static void +static IPFW_RULES_INLINE void rule_ip_dst_lookup(int *match, ipfw_insn *cmd, int cmdlen, struct ip_fw_args *args, uint32_t *tablearg, int is_ipv4, int is_ipv6, struct ip *ip, struct in_addr *dst_ip, struct in_addr *src_ip, uint16_t dst_port, uint16_t src_port, u_short offset, uint8_t proto, int ucred_lookup, void *ucred_cache, struct ip_fw_chain *chain) { if (is_ipv4) { @@ -869,7 +869,7 @@ } } -static void +static IPFW_RULES_INLINE void rule_ip_dst_mask(int *match, int is_ipv4, ipfw_insn *cmd, int cmdlen, struct in_addr *dst_ip, struct in_addr *src_ip) { if (is_ipv4) { @@ -884,7 +884,7 @@ } } -static void +static IPFW_RULES_INLINE void rule_ip_src_me(int *match, int is_ipv4, int is_ipv6, struct in_addr *src_ip, struct ip_fw_args *args) { if (is_ipv4) { @@ -901,14 +901,14 @@ } #ifdef INET6 -static void +static IPFW_RULES_INLINE void rule_ip6_src_me(int *match, int is_ipv6, struct ip_fw_args *args) { *match= is_ipv6 && search_ip6_addr_net(&args->f_id.src_ip6); } #endif /* INET6 */ -static void +static IPFW_RULES_INLINE void rule_ip_src_set(int *match, int is_ipv4, ipfw_insn *cmd, struct ip_fw_args *args) { if (is_ipv4) { @@ -927,7 +927,7 @@ } } -static void +static IPFW_RULES_INLINE void rule_ip_dst(int *match, int is_ipv4, ipfw_insn *cmd, struct in_addr *dst_ip) { *match = is_ipv4 && @@ -935,7 +935,7 @@ dst_ip->s_addr); } -static void +static IPFW_RULES_INLINE void rule_ip_dst_me(int *match, struct ip_fw_args *args, int is_ipv4, int is_ipv6, struct in_addr *dst_ip) { if (is_ipv4) { @@ -951,14 +951,14 @@ } #ifdef INET6 -static void +static IPFW_RULES_INLINE void rule_ip6_dst_me(int *match, struct ip_fw_args *args, int is_ipv6) { *match= is_ipv6 && search_ip6_addr_net(&args->f_id.dst_ip6); } #endif /* INET6 */ -static void +static IPFW_RULES_INLINE void rule_ip_dstport(int *match, uint8_t proto, u_short offset, ipfw_insn *cmd, int cmdlen, uint16_t dst_port, uint16_t src_port) { /* @@ -981,7 +981,7 @@ } } -static void +static IPFW_RULES_INLINE void rule_icmptype(int *match, u_short offset, uint8_t proto, void *ulp, ipfw_insn *cmd ) { *match = (offset == 0 && proto==IPPROTO_ICMP && @@ -989,7 +989,7 @@ } #ifdef INET6 -static void +static IPFW_RULES_INLINE void rule_icmp6type(int *match, u_short offset, int is_ipv6, uint8_t proto, void *ulp, ipfw_insn *cmd) { *match = is_ipv6 && offset == 0 && @@ -1001,7 +1001,7 @@ #endif /* INET6 */ -static void +static IPFW_RULES_INLINE void rule_ipopt(int *match, int is_ipv4, struct ip *ip, ipfw_insn *cmd) { *match = (is_ipv4 && @@ -1009,14 +1009,14 @@ } -static void +static IPFW_RULES_INLINE void rule_ipver(int *match, int is_ipv4, ipfw_insn *cmd, struct ip *ip) { *match = (is_ipv4 && cmd->arg1 == ip->ip_v); } -static void +static IPFW_RULES_INLINE void rule_ipttl(int *match, int is_ipv4, ipfw_insn *cmd, int cmdlen, struct ip *ip, uint16_t iplen) { if (is_ipv4) { /* only for IP packets */ @@ -1042,21 +1042,21 @@ } } -static void +static IPFW_RULES_INLINE void rule_ipprecedence(int *match, int is_ipv4, ipfw_insn *cmd, struct ip *ip) { *match = (is_ipv4 && (cmd->arg1 == (ip->ip_tos & 0xe0)) ); } -static void +static IPFW_RULES_INLINE void rule_iptos(int *match, int is_ipv4, ipfw_insn *cmd, struct ip *ip) { *match = (is_ipv4 && flags_match(cmd, ip->ip_tos)); } -static void +static IPFW_RULES_INLINE void rule_dscp(int *match, int is_ipv4, int is_ipv6, ipfw_insn *cmd, struct ip *ip) { uint32_t *p; @@ -1082,7 +1082,7 @@ *match = *p & (1 << x); } -static void +static IPFW_RULES_INLINE void rule_tcpdatalen(int *match, uint8_t proto, u_short offset, void *ulp, uint16_t iplen, int cmdlen, ipfw_insn *cmd, struct ip *ip) { if (proto == IPPROTO_TCP && offset == 0) { @@ -1106,14 +1106,14 @@ } } -static void +static IPFW_RULES_INLINE void rule_tcpflags(int *match, uint8_t proto, u_short offset, ipfw_insn *cmd, void *ulp) { *match = (proto == IPPROTO_TCP && offset == 0 && flags_match(cmd, TCP(ulp)->th_flags)); } -static int +static IPFW_RULES_INLINE int rule_tcpopts(int *match, u_int hlen, void *ulp, uint8_t proto, u_short offset, ipfw_insn *cmd, struct mbuf *m, struct ip_fw_args *args) { /* @@ -1137,7 +1137,7 @@ return (0); } -static void +static IPFW_RULES_INLINE void rule_tcpseq(int *match, uint8_t proto, u_short offset, ipfw_insn *cmd, void *ulp) { *match = (proto == IPPROTO_TCP && offset == 0 && @@ -1145,7 +1145,7 @@ TCP(ulp)->th_seq); } -static void +static IPFW_RULES_INLINE void rule_tcpack(int *match, uint8_t proto, u_short offset, ipfw_insn *cmd, void *ulp) { *match = (proto == IPPROTO_TCP && offset == 0 && @@ -1153,7 +1153,7 @@ TCP(ulp)->th_ack); } -static void +static IPFW_RULES_INLINE void rule_tcpwin(int *match, uint8_t proto, u_short offset, ipfw_insn *cmd, int cmdlen, void *ulp) { if (proto == IPPROTO_TCP && offset == 0) { @@ -1174,7 +1174,7 @@ } } -static void +static IPFW_RULES_INLINE void rule_estab(int *match, uint8_t proto, u_short offset, void *ulp) { /* reject packets which have SYN only */ @@ -1184,7 +1184,7 @@ (TH_RST | TH_ACK | TH_SYN)) != TH_SYN); } -static void +static IPFW_RULES_INLINE void rule_altq(int *match, ipfw_insn *cmd, struct mbuf *m, struct ip *ip) { struct pf_mtag *at; @@ -1216,7 +1216,7 @@ at->hdr = ip; } -static void +static IPFW_RULES_INLINE void rule_log(int *match, struct ip_fw *f, u_int hlen, struct ip_fw_args *args, struct mbuf *m, struct ifnet *oif, u_short offset, u_short ip6f_mf, uint32_t tablearg, struct ip *ip) { ipfw_log(f, hlen, args, m, @@ -1224,14 +1224,14 @@ *match = 1; } -static void +static IPFW_RULES_INLINE void rule_prob(int *match, ipfw_insn *cmd) { *match = (random()<((ipfw_insn_u32 *)cmd)->d[0]); return; } -static void +static IPFW_RULES_INLINE void rule_verrevpath(int *match, struct ifnet *oif, struct mbuf *m, int is_ipv6, struct ip_fw_args *args, struct in_addr *src_ip) { /* Outgoing packets automatically pass/match */ @@ -1247,7 +1247,7 @@ args->f_id.fib))); } -static void +static IPFW_RULES_INLINE void rule_versrcreach(int *match, u_int hlen, struct ifnet *oif, int is_ipv6, struct ip_fw_args *args, struct in_addr *src_ip) { /* Outgoing packets automatically pass/match */ @@ -1261,7 +1261,7 @@ } /* dpl XXX We could pass pointers to struct in_addr at in_localaddr() */ -static void +static IPFW_RULES_INLINE void rule_antispoof(int *match, struct ifnet *oif, u_int hlen, int is_ipv4, int is_ipv6, struct in_addr *src_ip, struct ip_fw_args *args, struct mbuf *m) { /* Outgoing packets automatically pass/match */ @@ -1287,7 +1287,7 @@ } #ifdef IPSEC -static void +static IPFW_RULES_INLINE void rule_ipsec(int *match, struct mbuf *) { *match = (m_tag_find(m, @@ -1296,7 +1296,7 @@ #endif /* IPSEC */ #ifdef INET6 -static void +static IPFW_RULES_INLINE void rule_ip6_src(int *match, int is_ipv6, struct ip_fw_args *args, ipfw_insn *cmd) { *match = is_ipv6 && @@ -1304,7 +1304,7 @@ &((ipfw_insn_ip6 *)cmd)->addr6); } -static void +static IPFW_RULES_INLINE void rule_ip6_dst(int *match, int is_ipv6, struct ip_fw_args *args, ipfw_insn *cmd) { *match = is_ipv6 && @@ -1312,7 +1312,7 @@ &((ipfw_insn_ip6 *)cmd)->addr6); } -static void +static IPFW_RULES_INLINE void rule_ip6_dst_mask(int *match, struct ip_fw_args *args, ipfw_insn *cmd, int cmdlen, int is_ipv6) { if (is_ipv6) { @@ -1336,7 +1336,7 @@ } } -static void +static IPFW_RULES_INLINE void rule_flow6id(int *match, int is_ipv6, struct ip_fw_args *args, ipfw_insn *cmd) { *match = is_ipv6 && @@ -1344,27 +1344,27 @@ (ipfw_insn_u32 *) cmd); } -static void +static IPFW_RULES_INLINE void rule_ext_hdr(int *match, int is_ipv6, uint16_t ext_hd, ipfw_insn *cmd) { *match = is_ipv6 && (ext_hd & ((ipfw_insn *) cmd)->arg1); } -static void +static IPFW_RULES_INLINE void rule_ip6(int *match, int is_ipv6) { *match = is_ipv6; } #endif /* INET6 */ -static void +static IPFW_RULES_INLINE void rule_ip4(int *match, int is_ipv4) { *match = is_ipv4; } -static void +static IPFW_RULES_INLINE void rule_tag(int *match, ipfw_insn *cmd, struct mbuf *m, uint32_t tablearg) { struct m_tag *mtag; @@ -1395,14 +1395,14 @@ } } -static void +static IPFW_RULES_INLINE void rule_fib(int *match, struct ip_fw_args *args, ipfw_insn *cmd) { if (args->f_id.fib == cmd->arg1) *match = 1; } -static void +static IPFW_RULES_INLINE void rule_sockarg(int *match, int is_ipv6, uint8_t proto, struct in_addr *dst_ip, struct in_addr *src_ip, uint16_t dst_port, uint16_t src_port, struct ip_fw_args *args, uint32_t *tablearg) { #ifndef USERSPACE /* not supported in userspace */ @@ -1449,7 +1449,7 @@ #endif /* !USERSPACE */ } -static void +static IPFW_RULES_INLINE void rule_tagged(int *match, ipfw_insn *cmd, int cmdlen, struct mbuf *m, uint32_t tablearg) { struct m_tag *mtag; @@ -1483,7 +1483,7 @@ /* * The second sets of opcodes. They represent the actions of a rule. */ -static void +static IPFW_RULES_INLINE void rule_keep_state(int *match, struct ip_fw *f, ipfw_insn *cmd, struct ip_fw_args *args, uint32_t tablearg, int *retval, int *l, int *done) { if (ipfw_install_state(f, @@ -1496,7 +1496,7 @@ *match = 1; } -static void +static IPFW_RULES_INLINE void rule_check_state(int *match, int *dyn_dir, ipfw_dyn_rule *q, struct ip_fw_args *args, uint8_t proto, void *ulp, int pktlen, struct ip_fw *f, int *f_pos, struct ip_fw_chain *chain, ipfw_insn *cmd, int *cmdlen, int *l) { /* @@ -1545,7 +1545,7 @@ *match = 1; } -static void +static IPFW_RULES_INLINE void rule_accept(int *retval, int *l, int *done) { *retval = 0; /* accept */ @@ -1553,7 +1553,7 @@ *done = 1; /* exit outer loop */ } -static void +static IPFW_RULES_INLINE void rule_queue(struct ip_fw_args *args, int f_pos, struct ip_fw_chain *chain, ipfw_insn *cmd, uint32_t tablearg, int *retval, int *l, int *done) { set_match(args, f_pos, chain); @@ -1567,7 +1567,7 @@ *done = 1; /* exit outer loop */ } -static void +static IPFW_RULES_INLINE void rule_tee(int *l, int *done, int *retval, ipfw_insn *cmd, struct ip_fw_args *args, int f_pos, uint32_t tablearg, struct ip_fw_chain *chain) { if (args->eh) /* not on layer 2 */ @@ -1581,14 +1581,14 @@ args->rule.info = IP_FW_ARG_TABLEARG(cmd->arg1); } -static void +static IPFW_RULES_INLINE void rule_count(int *l, struct ip_fw *f, int pktlen) { IPFW_INC_RULE_COUNTER(f, pktlen); *l = 0; /* exit inner loop */ } -static void +static IPFW_RULES_INLINE void rule_skipto(int *match, int *l, ipfw_insn *cmd, int *cmdlen, int *skip_or, int *f_pos, struct ip_fw *f, int pktlen, struct ip_fw_chain *chain, uint32_t tablearg) { IPFW_INC_RULE_COUNTER(f, pktlen); @@ -1613,7 +1613,7 @@ *skip_or = 0; } -static void +static IPFW_RULES_INLINE void rule_callreturn(ipfw_insn *cmd, struct mbuf *m, struct ip_fw *f, struct ip_fw_chain *chain, uint32_t tablearg, int pktlen, int *skip_or, int *cmdlen, int *f_pos, int *l) { /* @@ -1710,7 +1710,7 @@ #undef IS_RETURN } -static void +static IPFW_RULES_INLINE void rule_reject(u_int hlen, int is_ipv4, u_short offset, uint8_t proto, void *ulp, struct mbuf *m, struct in_addr *dst_ip, struct ip_fw_args *args, ipfw_insn *cmd, uint16_t iplen, struct ip *ip) { /* @@ -1729,7 +1729,7 @@ } #ifdef INET6 -static void +static IPFW_RULES_INLINE void rule_unreach6(u_int hlen, int is_ipv6, u_short offset, uint8_t proto, uint8_t icmp6_type, struct mbuf *m, struct ip_fw_args *args, ipfw_insn *cmd, struct ip *ip) { if (hlen > 0 && is_ipv6 && @@ -1747,7 +1747,7 @@ #endif /* INET6 */ -static void +static IPFW_RULES_INLINE void rule_deny(int *l, int *done, int *retval) { *retval = IP_FW_DENY; @@ -1755,7 +1755,7 @@ *done = 1; /* exit outer loop */ } -static void +static IPFW_RULES_INLINE void rule_forward_ip(struct ip_fw_args *args, ipfw_dyn_rule *q, struct ip_fw *f, int dyn_dir, ipfw_insn *cmd, uint32_t tablearg, int *retval, int *l, int *done) { if (args->eh) /* not valid on layer2 pkts */ @@ -1780,7 +1780,7 @@ } #ifdef INET6 -static void +static IPFW_RULES_INLINE void rule_forward_ip6(struct ip_fw_args *args, ipfw_dyn_rule *q, struct ip_fw *f, int dyn_dir, ipfw_insn *cmd, int *retval, int *l, int *done) { if (args->eh) /* not valid on layer2 pkts */ @@ -1798,7 +1798,7 @@ } #endif /* INET6 */ -static void +static IPFW_RULES_INLINE void rule_ngtee(struct ip_fw_args *args, int f_pos, struct ip_fw_chain *chain, ipfw_insn *cmd, uint32_t tablearg, int *retval, int *l, int *done) { set_match(args, f_pos, chain); @@ -1811,7 +1811,7 @@ *done = 1; /* exit outer loop */ } -static void +static IPFW_RULES_INLINE void rule_setfib(struct ip_fw *f, int pktlen, uint32_t tablearg, ipfw_insn *cmd, struct mbuf *m, struct ip_fw_args *args, int *l) { uint32_t fib; @@ -1825,7 +1825,7 @@ *l = 0; /* exit inner loop */ } -static void +static IPFW_RULES_INLINE void rule_setdscp(ipfw_insn *cmd, struct ip *ip, int is_ipv4, int is_ipv6, uint32_t tablearg, struct ip_fw *f, int pktlen, int *l) { uint16_t code; @@ -1852,7 +1852,7 @@ IPFW_INC_RULE_COUNTER(f, pktlen); } -static void +static IPFW_RULES_INLINE void rule_nat(struct ip_fw_args *args, int f_pos, struct ip_fw_chain *chain, ipfw_insn *cmd, struct mbuf *m, uint32_t tablearg, int *retval, int *done, int *l) { *l = 0; /* exit inner loop */ @@ -1886,7 +1886,8 @@ *retval = ipfw_nat_ptr(args, t, m); } -static void rule_reass(struct ip_fw *f, int f_pos, struct ip_fw_chain *chain, int pktlen, struct ip *ip, struct ip_fw_args *args, struct mbuf *m, int *retval, int *done, int *l) +static IPFW_RULES_INLINE void +rule_reass(struct ip_fw *f, int f_pos, struct ip_fw_chain *chain, int pktlen, struct ip *ip, struct ip_fw_args *args, struct mbuf *m, int *retval, int *done, int *l) { int ip_off; Modified: soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/jit.cc ============================================================================== --- soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/jit.cc Thu Jul 24 16:33:29 2014 (r271341) +++ soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/jit.cc Thu Jul 24 17:15:40 2014 (r271342) @@ -10,6 +10,7 @@ #include <llvm/Support/MemoryBuffer.h> #include <llvm/Support/ErrorOr.h> +typedef int (*funcptr)(); using namespace llvm; class jitCompiler { @@ -35,7 +36,6 @@ exit(EXIT_FAILURE); } mod = ptr.get(); - ptr = parseBitcodeFile(buffer.get(), c); } } ; @@ -86,3 +86,10 @@ */ } + +/* 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 Thu Jul 24 16:33:29 2014 (r271341) +++ soc2014/dpl/netmap-ipfwjit/sys/netpfil/ipfw/jit.h Thu Jul 24 17:15:40 2014 (r271342) @@ -1,2 +1,4 @@ -/* JIT code headers */ +typedef int (*funcptr)(); + void ipfw_jit_init(); +funcptr compile_code();
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201407241715.s6OHFeDw052877>