static Action_SkBuff par4(arguments_t args, SkBuff b) { function_t f0 = GET_ARG_0(function_t, args); function_t f1 = GET_ARG_1(function_t, args); function_t f2 = GET_ARG_2(function_t, args); function_t f3 = GET_ARG_3(function_t, args); fanout_t fout = PFQ_CB(b.skb)->monad->fanout; Action_SkBuff a; a = EVAL_FUNCTION(f0, b); if (a.value.skb && !is_drop(PFQ_CB(a.value.skb)->monad->fanout)) return a; PFQ_CB(b.skb)->monad->fanout = fout; a = EVAL_FUNCTION(f1, b); if (a.value.skb && !is_drop(PFQ_CB(a.value.skb)->monad->fanout)) return a; PFQ_CB(b.skb)->monad->fanout = fout; a = EVAL_FUNCTION(f2, b); if (a.value.skb && !is_drop(PFQ_CB(a.value.skb)->monad->fanout)) return a; PFQ_CB(b.skb)->monad->fanout = fout; return EVAL_FUNCTION(f3, b); }
static ActionSkBuff filter_dst_addr(arguments_t args, SkBuff b) { __be32 addr = GET_ARG_0(__be32, args); __be32 mask = GET_ARG_1(__be32, args); return has_dst_addr(b, addr, mask) ? Pass(b) : Drop(b); }
static bool pred_has_dst_addr(arguments_t args, SkBuff b) { __be32 addr = GET_ARG_0(__be32, args); __be32 mask = GET_ARG_1(__be32, args); return has_dst_addr(b, addr, mask); }
static ActionSkBuff par8(arguments_t args, SkBuff skb) { function_t f0 = GET_ARG_0(function_t, args); function_t f1 = GET_ARG_1(function_t, args); function_t f2 = GET_ARG_2(function_t, args); function_t f3 = GET_ARG_3(function_t, args); function_t f4 = GET_ARG_4(function_t, args); function_t f5 = GET_ARG_5(function_t, args); function_t f6 = GET_ARG_6(function_t, args); function_t f7 = GET_ARG_7(function_t, args); fanout_t fout = PFQ_CB(skb)->monad->fanout; ActionSkBuff a; a = EVAL_FUNCTION(f0, skb); if (a.skb && !is_drop(PFQ_CB(a.skb)->monad->fanout)) return a; PFQ_CB(skb)->monad->fanout = fout; a = EVAL_FUNCTION(f1, skb); if (a.skb && !is_drop(PFQ_CB(a.skb)->monad->fanout)) return a; PFQ_CB(skb)->monad->fanout = fout; a = EVAL_FUNCTION(f2, skb); if (a.skb && !is_drop(PFQ_CB(a.skb)->monad->fanout)) return a; PFQ_CB(skb)->monad->fanout = fout; a = EVAL_FUNCTION(f3, skb); if (a.skb && !is_drop(PFQ_CB(a.skb)->monad->fanout)) return a; PFQ_CB(skb)->monad->fanout = fout; a = EVAL_FUNCTION(f4, skb); if (a.skb && !is_drop(PFQ_CB(a.skb)->monad->fanout)) return a; PFQ_CB(skb)->monad->fanout = fout; a = EVAL_FUNCTION(f5, skb); if (a.skb && !is_drop(PFQ_CB(a.skb)->monad->fanout)) return a; PFQ_CB(skb)->monad->fanout = fout; a = EVAL_FUNCTION(f6, skb); if (a.skb && !is_drop(PFQ_CB(a.skb)->monad->fanout)) return a; PFQ_CB(skb)->monad->fanout = fout; return EVAL_FUNCTION(f7, skb); }
static int filter_addr_init(arguments_t args) { __be32 mask, ipv4 = GET_ARG_0(__be32, args); int prefix = GET_ARG_1(int, args); mask = inet_make_mask(prefix); SET_ARG_0(args, ipv4 & mask); SET_ARG_1(args, mask); pr_devel("[PFQ|init] filter: addr:%pI4 mask:%pI4\n", &ipv4, &mask); return 0; }
static ActionSkBuff par(arguments_t args, SkBuff skb) { function_t f0 = GET_ARG_0(function_t, args); function_t f1 = GET_ARG_1(function_t, args); fanout_t fout = PFQ_CB(skb)->monad->fanout; ActionSkBuff a; a = EVAL_FUNCTION(f0, skb); if (a.skb && !is_drop(PFQ_CB(a.skb)->monad->fanout)) return a; PFQ_CB(skb)->monad->fanout = fout; return EVAL_FUNCTION(f1, skb); }
static bool bloom(arguments_t args, struct qbuff * buff) { struct iphdr _iph; const struct iphdr *ip; uint32_t fold, addr; __be32 mask; char *mem; ip = qbuff_ip_header_pointer(buff, 0, sizeof(_iph), &_iph); if (ip == NULL) return false; fold = GET_ARG_0(uint32_t, args); mem = GET_ARG_1(char *, args); mask = GET_ARG_2(__be32, args); if (buff->monad->ep_ctx & EPOINT_DST) { addr = be32_to_cpu(ip->daddr & mask); if ( BF_TEST(mem, hfun1(addr) & fold) && BF_TEST(mem, hfun2(addr) & fold) && BF_TEST(mem, hfun3(addr) & fold) && BF_TEST(mem, hfun4(addr) & fold) ) return true; } if (buff->monad->ep_ctx & EPOINT_SRC) { addr = be32_to_cpu(ip->saddr & mask); if ( BF_TEST(mem, hfun1(addr) & fold) && BF_TEST(mem, hfun2(addr) & fold) && BF_TEST(mem, hfun3(addr) & fold) && BF_TEST(mem, hfun4(addr) & fold) ) return true; } return false; }