X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fip_pipeline%2Fpipeline%2Fpipeline_actions_common.h;h=ab08612db708fa98653e42ad9ddd0fbe1a5c3ae0;hb=99c12dcca65d;hp=aa1dd59a3790de4649431102bc88d0c9026425b0;hpb=9ef2593651f916516f8b191c2aa050bd42d31898;p=dpdk.git diff --git a/examples/ip_pipeline/pipeline/pipeline_actions_common.h b/examples/ip_pipeline/pipeline/pipeline_actions_common.h index aa1dd59a37..ab08612db7 100644 --- a/examples/ip_pipeline/pipeline/pipeline_actions_common.h +++ b/examples/ip_pipeline/pipeline/pipeline_actions_common.h @@ -1,7 +1,7 @@ /*- * BSD LICENSE * - * Copyright(c) 2010-2015 Intel Corporation. All rights reserved. + * Copyright(c) 2010-2016 Intel Corporation. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -33,12 +33,19 @@ #ifndef __INCLUDE_PIPELINE_ACTIONS_COMMON_H__ #define __INCLUDE_PIPELINE_ACTIONS_COMMON_H__ +#include + +#include +#include +#include +#include + #define PIPELINE_PORT_IN_AH(f_ah, f_pkt_work, f_pkt4_work) \ static int \ f_ah( \ + __rte_unused struct rte_pipeline *p, \ struct rte_mbuf **pkts, \ uint32_t n_pkts, \ - uint64_t *pkts_mask, \ void *arg) \ { \ uint32_t i; \ @@ -49,7 +56,27 @@ f_ah( \ for ( ; i < n_pkts; i++) \ f_pkt_work(pkts[i], arg); \ \ - *pkts_mask = (~0LLU) >> (64 - n_pkts); \ + return 0; \ +} + +#define PIPELINE_PORT_IN_AH_HIJACK_ALL(f_ah, f_pkt_work, f_pkt4_work) \ +static int \ +f_ah( \ + struct rte_pipeline *p, \ + struct rte_mbuf **pkts, \ + uint32_t n_pkts, \ + void *arg) \ +{ \ + uint64_t pkt_mask = RTE_LEN2MASK(n_pkts, uint64_t); \ + uint32_t i; \ + \ + rte_pipeline_ah_packet_hijack(p, pkt_mask); \ + \ + for (i = 0; i < (n_pkts & (~0x3LLU)); i += 4) \ + f_pkt4_work(&pkts[i], arg); \ + \ + for ( ; i < n_pkts; i++) \ + f_pkt_work(pkts[i], arg); \ \ return 0; \ } @@ -57,13 +84,12 @@ f_ah( \ #define PIPELINE_TABLE_AH_HIT(f_ah, f_pkt_work, f_pkt4_work) \ static int \ f_ah( \ + __rte_unused struct rte_pipeline *p, \ struct rte_mbuf **pkts, \ - uint64_t *pkts_mask, \ + uint64_t pkts_in_mask, \ struct rte_pipeline_table_entry **entries, \ void *arg) \ { \ - uint64_t pkts_in_mask = *pkts_mask; \ - \ if ((pkts_in_mask & (pkts_in_mask + 1)) == 0) { \ uint64_t n_pkts = __builtin_popcountll(pkts_in_mask); \ uint32_t i; \ @@ -88,13 +114,12 @@ f_ah( \ #define PIPELINE_TABLE_AH_MISS(f_ah, f_pkt_work, f_pkt4_work) \ static int \ f_ah( \ + __rte_unused struct rte_pipeline *p, \ struct rte_mbuf **pkts, \ - uint64_t *pkts_mask, \ + uint64_t pkts_in_mask, \ struct rte_pipeline_table_entry *entry, \ void *arg) \ { \ - uint64_t pkts_in_mask = *pkts_mask; \ - \ if ((pkts_in_mask & (pkts_in_mask + 1)) == 0) { \ uint64_t n_pkts = __builtin_popcountll(pkts_in_mask); \ uint32_t i; \ @@ -119,13 +144,14 @@ f_ah( \ #define PIPELINE_TABLE_AH_HIT_DROP_TIME(f_ah, f_pkt_work, f_pkt4_work) \ static int \ f_ah( \ + struct rte_pipeline *p, \ struct rte_mbuf **pkts, \ - uint64_t *pkts_mask, \ + uint64_t pkts_mask, \ struct rte_pipeline_table_entry **entries, \ void *arg) \ { \ - uint64_t pkts_in_mask = *pkts_mask; \ - uint64_t pkts_out_mask = *pkts_mask; \ + uint64_t pkts_in_mask = pkts_mask; \ + uint64_t pkts_out_mask = pkts_mask; \ uint64_t time = rte_rdtsc(); \ \ if ((pkts_in_mask & (pkts_in_mask + 1)) == 0) { \ @@ -134,13 +160,13 @@ f_ah( \ \ for (i = 0; i < (n_pkts & (~0x3LLU)); i += 4) { \ uint64_t mask = f_pkt4_work(&pkts[i], \ - &entries[i], arg, time); \ + &entries[i], arg, time); \ pkts_out_mask ^= mask << i; \ } \ \ for ( ; i < n_pkts; i++) { \ uint64_t mask = f_pkt_work(pkts[i], \ - entries[i], arg, time); \ + entries[i], arg, time); \ pkts_out_mask ^= mask << i; \ } \ } else \ @@ -154,20 +180,22 @@ f_ah( \ pkts_out_mask ^= mask << pos; \ } \ \ - *pkts_mask = pkts_out_mask; \ + rte_pipeline_ah_packet_drop(p, pkts_out_mask ^ pkts_mask); \ + \ return 0; \ } #define PIPELINE_TABLE_AH_MISS_DROP_TIME(f_ah, f_pkt_work, f_pkt4_work) \ static int \ f_ah( \ + struct rte_pipeline *p, \ struct rte_mbuf **pkts, \ - uint64_t *pkts_mask, \ + uint64_t pkts_mask, \ struct rte_pipeline_table_entry *entry, \ void *arg) \ { \ - uint64_t pkts_in_mask = *pkts_mask; \ - uint64_t pkts_out_mask = *pkts_mask; \ + uint64_t pkts_in_mask = pkts_mask; \ + uint64_t pkts_out_mask = pkts_mask; \ uint64_t time = rte_rdtsc(); \ \ if ((pkts_in_mask & (pkts_in_mask + 1)) == 0) { \ @@ -195,7 +223,8 @@ f_ah( \ pkts_out_mask ^= mask << pos; \ } \ \ - *pkts_mask = pkts_out_mask; \ + rte_pipeline_ah_packet_drop(p, pkts_out_mask ^ pkts_mask); \ + \ return 0; \ }