app/flow-perf: add runtime option to use unique data
Current support for unique data is to compile with config.h var FIXED_VALUES as 0, and this is only supported on compilation time, as a result the user may use only single mode for each compilation. Starting with this commit the user will have the ability to use this feature on the fly by using this new option: --unique-data Example of unique data usage: Insert many rules with different encap data for a flows that have encap action in it. Signed-off-by: Wisam Jaddo <wisamm@nvidia.com> Acked-by: Alexander Kozyrev <akozyrev@nvidia.com>
This commit is contained in:
parent
b611605b05
commit
eb4df25f53
@ -30,6 +30,7 @@ struct additional_para {
|
|||||||
uint64_t encap_data;
|
uint64_t encap_data;
|
||||||
uint64_t decap_data;
|
uint64_t decap_data;
|
||||||
uint8_t core_idx;
|
uint8_t core_idx;
|
||||||
|
bool unique_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Storage for struct rte_flow_action_raw_encap including external data. */
|
/* Storage for struct rte_flow_action_raw_encap including external data. */
|
||||||
@ -202,14 +203,14 @@ add_count(struct rte_flow_action *actions,
|
|||||||
static void
|
static void
|
||||||
add_set_src_mac(struct rte_flow_action *actions,
|
add_set_src_mac(struct rte_flow_action *actions,
|
||||||
uint8_t actions_counter,
|
uint8_t actions_counter,
|
||||||
__rte_unused struct additional_para para)
|
struct additional_para para)
|
||||||
{
|
{
|
||||||
static struct rte_flow_action_set_mac set_macs[RTE_MAX_LCORE] __rte_cache_aligned;
|
static struct rte_flow_action_set_mac set_macs[RTE_MAX_LCORE] __rte_cache_aligned;
|
||||||
uint32_t mac = para.counter;
|
uint32_t mac = para.counter;
|
||||||
uint16_t i;
|
uint16_t i;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
mac = 1;
|
mac = 1;
|
||||||
|
|
||||||
/* Mac address to be set is random each time */
|
/* Mac address to be set is random each time */
|
||||||
@ -225,14 +226,14 @@ add_set_src_mac(struct rte_flow_action *actions,
|
|||||||
static void
|
static void
|
||||||
add_set_dst_mac(struct rte_flow_action *actions,
|
add_set_dst_mac(struct rte_flow_action *actions,
|
||||||
uint8_t actions_counter,
|
uint8_t actions_counter,
|
||||||
__rte_unused struct additional_para para)
|
struct additional_para para)
|
||||||
{
|
{
|
||||||
static struct rte_flow_action_set_mac set_macs[RTE_MAX_LCORE] __rte_cache_aligned;
|
static struct rte_flow_action_set_mac set_macs[RTE_MAX_LCORE] __rte_cache_aligned;
|
||||||
uint32_t mac = para.counter;
|
uint32_t mac = para.counter;
|
||||||
uint16_t i;
|
uint16_t i;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
mac = 1;
|
mac = 1;
|
||||||
|
|
||||||
/* Mac address to be set is random each time */
|
/* Mac address to be set is random each time */
|
||||||
@ -248,13 +249,13 @@ add_set_dst_mac(struct rte_flow_action *actions,
|
|||||||
static void
|
static void
|
||||||
add_set_src_ipv4(struct rte_flow_action *actions,
|
add_set_src_ipv4(struct rte_flow_action *actions,
|
||||||
uint8_t actions_counter,
|
uint8_t actions_counter,
|
||||||
__rte_unused struct additional_para para)
|
struct additional_para para)
|
||||||
{
|
{
|
||||||
static struct rte_flow_action_set_ipv4 set_ipv4[RTE_MAX_LCORE] __rte_cache_aligned;
|
static struct rte_flow_action_set_ipv4 set_ipv4[RTE_MAX_LCORE] __rte_cache_aligned;
|
||||||
uint32_t ip = para.counter;
|
uint32_t ip = para.counter;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
ip = 1;
|
ip = 1;
|
||||||
|
|
||||||
/* IPv4 value to be set is random each time */
|
/* IPv4 value to be set is random each time */
|
||||||
@ -267,13 +268,13 @@ add_set_src_ipv4(struct rte_flow_action *actions,
|
|||||||
static void
|
static void
|
||||||
add_set_dst_ipv4(struct rte_flow_action *actions,
|
add_set_dst_ipv4(struct rte_flow_action *actions,
|
||||||
uint8_t actions_counter,
|
uint8_t actions_counter,
|
||||||
__rte_unused struct additional_para para)
|
struct additional_para para)
|
||||||
{
|
{
|
||||||
static struct rte_flow_action_set_ipv4 set_ipv4[RTE_MAX_LCORE] __rte_cache_aligned;
|
static struct rte_flow_action_set_ipv4 set_ipv4[RTE_MAX_LCORE] __rte_cache_aligned;
|
||||||
uint32_t ip = para.counter;
|
uint32_t ip = para.counter;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
ip = 1;
|
ip = 1;
|
||||||
|
|
||||||
/* IPv4 value to be set is random each time */
|
/* IPv4 value to be set is random each time */
|
||||||
@ -286,14 +287,14 @@ add_set_dst_ipv4(struct rte_flow_action *actions,
|
|||||||
static void
|
static void
|
||||||
add_set_src_ipv6(struct rte_flow_action *actions,
|
add_set_src_ipv6(struct rte_flow_action *actions,
|
||||||
uint8_t actions_counter,
|
uint8_t actions_counter,
|
||||||
__rte_unused struct additional_para para)
|
struct additional_para para)
|
||||||
{
|
{
|
||||||
static struct rte_flow_action_set_ipv6 set_ipv6[RTE_MAX_LCORE] __rte_cache_aligned;
|
static struct rte_flow_action_set_ipv6 set_ipv6[RTE_MAX_LCORE] __rte_cache_aligned;
|
||||||
uint32_t ipv6 = para.counter;
|
uint32_t ipv6 = para.counter;
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
ipv6 = 1;
|
ipv6 = 1;
|
||||||
|
|
||||||
/* IPv6 value to set is random each time */
|
/* IPv6 value to set is random each time */
|
||||||
@ -309,14 +310,14 @@ add_set_src_ipv6(struct rte_flow_action *actions,
|
|||||||
static void
|
static void
|
||||||
add_set_dst_ipv6(struct rte_flow_action *actions,
|
add_set_dst_ipv6(struct rte_flow_action *actions,
|
||||||
uint8_t actions_counter,
|
uint8_t actions_counter,
|
||||||
__rte_unused struct additional_para para)
|
struct additional_para para)
|
||||||
{
|
{
|
||||||
static struct rte_flow_action_set_ipv6 set_ipv6[RTE_MAX_LCORE] __rte_cache_aligned;
|
static struct rte_flow_action_set_ipv6 set_ipv6[RTE_MAX_LCORE] __rte_cache_aligned;
|
||||||
uint32_t ipv6 = para.counter;
|
uint32_t ipv6 = para.counter;
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
ipv6 = 1;
|
ipv6 = 1;
|
||||||
|
|
||||||
/* IPv6 value to set is random each time */
|
/* IPv6 value to set is random each time */
|
||||||
@ -332,13 +333,13 @@ add_set_dst_ipv6(struct rte_flow_action *actions,
|
|||||||
static void
|
static void
|
||||||
add_set_src_tp(struct rte_flow_action *actions,
|
add_set_src_tp(struct rte_flow_action *actions,
|
||||||
uint8_t actions_counter,
|
uint8_t actions_counter,
|
||||||
__rte_unused struct additional_para para)
|
struct additional_para para)
|
||||||
{
|
{
|
||||||
static struct rte_flow_action_set_tp set_tp[RTE_MAX_LCORE] __rte_cache_aligned;
|
static struct rte_flow_action_set_tp set_tp[RTE_MAX_LCORE] __rte_cache_aligned;
|
||||||
uint32_t tp = para.counter;
|
uint32_t tp = para.counter;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
tp = 100;
|
tp = 100;
|
||||||
|
|
||||||
/* TP src port is random each time */
|
/* TP src port is random each time */
|
||||||
@ -353,13 +354,13 @@ add_set_src_tp(struct rte_flow_action *actions,
|
|||||||
static void
|
static void
|
||||||
add_set_dst_tp(struct rte_flow_action *actions,
|
add_set_dst_tp(struct rte_flow_action *actions,
|
||||||
uint8_t actions_counter,
|
uint8_t actions_counter,
|
||||||
__rte_unused struct additional_para para)
|
struct additional_para para)
|
||||||
{
|
{
|
||||||
static struct rte_flow_action_set_tp set_tp[RTE_MAX_LCORE] __rte_cache_aligned;
|
static struct rte_flow_action_set_tp set_tp[RTE_MAX_LCORE] __rte_cache_aligned;
|
||||||
uint32_t tp = para.counter;
|
uint32_t tp = para.counter;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
tp = 100;
|
tp = 100;
|
||||||
|
|
||||||
/* TP src port is random each time */
|
/* TP src port is random each time */
|
||||||
@ -375,13 +376,13 @@ add_set_dst_tp(struct rte_flow_action *actions,
|
|||||||
static void
|
static void
|
||||||
add_inc_tcp_ack(struct rte_flow_action *actions,
|
add_inc_tcp_ack(struct rte_flow_action *actions,
|
||||||
uint8_t actions_counter,
|
uint8_t actions_counter,
|
||||||
__rte_unused struct additional_para para)
|
struct additional_para para)
|
||||||
{
|
{
|
||||||
static rte_be32_t value[RTE_MAX_LCORE] __rte_cache_aligned;
|
static rte_be32_t value[RTE_MAX_LCORE] __rte_cache_aligned;
|
||||||
uint32_t ack_value = para.counter;
|
uint32_t ack_value = para.counter;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
ack_value = 1;
|
ack_value = 1;
|
||||||
|
|
||||||
value[para.core_idx] = RTE_BE32(ack_value);
|
value[para.core_idx] = RTE_BE32(ack_value);
|
||||||
@ -393,13 +394,13 @@ add_inc_tcp_ack(struct rte_flow_action *actions,
|
|||||||
static void
|
static void
|
||||||
add_dec_tcp_ack(struct rte_flow_action *actions,
|
add_dec_tcp_ack(struct rte_flow_action *actions,
|
||||||
uint8_t actions_counter,
|
uint8_t actions_counter,
|
||||||
__rte_unused struct additional_para para)
|
struct additional_para para)
|
||||||
{
|
{
|
||||||
static rte_be32_t value[RTE_MAX_LCORE] __rte_cache_aligned;
|
static rte_be32_t value[RTE_MAX_LCORE] __rte_cache_aligned;
|
||||||
uint32_t ack_value = para.counter;
|
uint32_t ack_value = para.counter;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
ack_value = 1;
|
ack_value = 1;
|
||||||
|
|
||||||
value[para.core_idx] = RTE_BE32(ack_value);
|
value[para.core_idx] = RTE_BE32(ack_value);
|
||||||
@ -411,13 +412,13 @@ add_dec_tcp_ack(struct rte_flow_action *actions,
|
|||||||
static void
|
static void
|
||||||
add_inc_tcp_seq(struct rte_flow_action *actions,
|
add_inc_tcp_seq(struct rte_flow_action *actions,
|
||||||
uint8_t actions_counter,
|
uint8_t actions_counter,
|
||||||
__rte_unused struct additional_para para)
|
struct additional_para para)
|
||||||
{
|
{
|
||||||
static rte_be32_t value[RTE_MAX_LCORE] __rte_cache_aligned;
|
static rte_be32_t value[RTE_MAX_LCORE] __rte_cache_aligned;
|
||||||
uint32_t seq_value = para.counter;
|
uint32_t seq_value = para.counter;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
seq_value = 1;
|
seq_value = 1;
|
||||||
|
|
||||||
value[para.core_idx] = RTE_BE32(seq_value);
|
value[para.core_idx] = RTE_BE32(seq_value);
|
||||||
@ -429,13 +430,13 @@ add_inc_tcp_seq(struct rte_flow_action *actions,
|
|||||||
static void
|
static void
|
||||||
add_dec_tcp_seq(struct rte_flow_action *actions,
|
add_dec_tcp_seq(struct rte_flow_action *actions,
|
||||||
uint8_t actions_counter,
|
uint8_t actions_counter,
|
||||||
__rte_unused struct additional_para para)
|
struct additional_para para)
|
||||||
{
|
{
|
||||||
static rte_be32_t value[RTE_MAX_LCORE] __rte_cache_aligned;
|
static rte_be32_t value[RTE_MAX_LCORE] __rte_cache_aligned;
|
||||||
uint32_t seq_value = para.counter;
|
uint32_t seq_value = para.counter;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
seq_value = 1;
|
seq_value = 1;
|
||||||
|
|
||||||
value[para.core_idx] = RTE_BE32(seq_value);
|
value[para.core_idx] = RTE_BE32(seq_value);
|
||||||
@ -447,13 +448,13 @@ add_dec_tcp_seq(struct rte_flow_action *actions,
|
|||||||
static void
|
static void
|
||||||
add_set_ttl(struct rte_flow_action *actions,
|
add_set_ttl(struct rte_flow_action *actions,
|
||||||
uint8_t actions_counter,
|
uint8_t actions_counter,
|
||||||
__rte_unused struct additional_para para)
|
struct additional_para para)
|
||||||
{
|
{
|
||||||
static struct rte_flow_action_set_ttl set_ttl[RTE_MAX_LCORE] __rte_cache_aligned;
|
static struct rte_flow_action_set_ttl set_ttl[RTE_MAX_LCORE] __rte_cache_aligned;
|
||||||
uint32_t ttl_value = para.counter;
|
uint32_t ttl_value = para.counter;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
ttl_value = 1;
|
ttl_value = 1;
|
||||||
|
|
||||||
/* Set ttl to random value each time */
|
/* Set ttl to random value each time */
|
||||||
@ -476,13 +477,13 @@ add_dec_ttl(struct rte_flow_action *actions,
|
|||||||
static void
|
static void
|
||||||
add_set_ipv4_dscp(struct rte_flow_action *actions,
|
add_set_ipv4_dscp(struct rte_flow_action *actions,
|
||||||
uint8_t actions_counter,
|
uint8_t actions_counter,
|
||||||
__rte_unused struct additional_para para)
|
struct additional_para para)
|
||||||
{
|
{
|
||||||
static struct rte_flow_action_set_dscp set_dscp[RTE_MAX_LCORE] __rte_cache_aligned;
|
static struct rte_flow_action_set_dscp set_dscp[RTE_MAX_LCORE] __rte_cache_aligned;
|
||||||
uint32_t dscp_value = para.counter;
|
uint32_t dscp_value = para.counter;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
dscp_value = 1;
|
dscp_value = 1;
|
||||||
|
|
||||||
/* Set dscp to random value each time */
|
/* Set dscp to random value each time */
|
||||||
@ -497,13 +498,13 @@ add_set_ipv4_dscp(struct rte_flow_action *actions,
|
|||||||
static void
|
static void
|
||||||
add_set_ipv6_dscp(struct rte_flow_action *actions,
|
add_set_ipv6_dscp(struct rte_flow_action *actions,
|
||||||
uint8_t actions_counter,
|
uint8_t actions_counter,
|
||||||
__rte_unused struct additional_para para)
|
struct additional_para para)
|
||||||
{
|
{
|
||||||
static struct rte_flow_action_set_dscp set_dscp[RTE_MAX_LCORE] __rte_cache_aligned;
|
static struct rte_flow_action_set_dscp set_dscp[RTE_MAX_LCORE] __rte_cache_aligned;
|
||||||
uint32_t dscp_value = para.counter;
|
uint32_t dscp_value = para.counter;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
dscp_value = 1;
|
dscp_value = 1;
|
||||||
|
|
||||||
/* Set dscp to random value each time */
|
/* Set dscp to random value each time */
|
||||||
@ -577,7 +578,7 @@ add_ipv4_header(uint8_t **header, uint64_t data,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
ip_dst = 1;
|
ip_dst = 1;
|
||||||
|
|
||||||
memset(&ipv4_hdr, 0, sizeof(struct rte_ipv4_hdr));
|
memset(&ipv4_hdr, 0, sizeof(struct rte_ipv4_hdr));
|
||||||
@ -643,7 +644,7 @@ add_vxlan_header(uint8_t **header, uint64_t data,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
vni_value = 1;
|
vni_value = 1;
|
||||||
|
|
||||||
memset(&vxlan_hdr, 0, sizeof(struct rte_vxlan_hdr));
|
memset(&vxlan_hdr, 0, sizeof(struct rte_vxlan_hdr));
|
||||||
@ -666,7 +667,7 @@ add_vxlan_gpe_header(uint8_t **header, uint64_t data,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
vni_value = 1;
|
vni_value = 1;
|
||||||
|
|
||||||
memset(&vxlan_gpe_hdr, 0, sizeof(struct rte_vxlan_gpe_hdr));
|
memset(&vxlan_gpe_hdr, 0, sizeof(struct rte_vxlan_gpe_hdr));
|
||||||
@ -707,7 +708,7 @@ add_geneve_header(uint8_t **header, uint64_t data,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
vni_value = 1;
|
vni_value = 1;
|
||||||
|
|
||||||
memset(&geneve_hdr, 0, sizeof(struct rte_geneve_hdr));
|
memset(&geneve_hdr, 0, sizeof(struct rte_geneve_hdr));
|
||||||
@ -730,7 +731,7 @@ add_gtp_header(uint8_t **header, uint64_t data,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
teid_value = 1;
|
teid_value = 1;
|
||||||
|
|
||||||
memset(>p_hdr, 0, sizeof(struct rte_flow_item_gtp));
|
memset(>p_hdr, 0, sizeof(struct rte_flow_item_gtp));
|
||||||
@ -849,7 +850,7 @@ add_vxlan_encap(struct rte_flow_action *actions,
|
|||||||
uint32_t ip_dst = para.counter;
|
uint32_t ip_dst = para.counter;
|
||||||
|
|
||||||
/* Fixed value */
|
/* Fixed value */
|
||||||
if (FIXED_VALUES)
|
if (!para.unique_data)
|
||||||
ip_dst = 1;
|
ip_dst = 1;
|
||||||
|
|
||||||
items[0].spec = &item_eth;
|
items[0].spec = &item_eth;
|
||||||
@ -907,7 +908,8 @@ add_meter(struct rte_flow_action *actions,
|
|||||||
void
|
void
|
||||||
fill_actions(struct rte_flow_action *actions, uint64_t *flow_actions,
|
fill_actions(struct rte_flow_action *actions, uint64_t *flow_actions,
|
||||||
uint32_t counter, uint16_t next_table, uint16_t hairpinq,
|
uint32_t counter, uint16_t next_table, uint16_t hairpinq,
|
||||||
uint64_t encap_data, uint64_t decap_data, uint8_t core_idx)
|
uint64_t encap_data, uint64_t decap_data, uint8_t core_idx,
|
||||||
|
bool unique_data)
|
||||||
{
|
{
|
||||||
struct additional_para additional_para_data;
|
struct additional_para additional_para_data;
|
||||||
uint8_t actions_counter = 0;
|
uint8_t actions_counter = 0;
|
||||||
@ -930,6 +932,7 @@ fill_actions(struct rte_flow_action *actions, uint64_t *flow_actions,
|
|||||||
.encap_data = encap_data,
|
.encap_data = encap_data,
|
||||||
.decap_data = decap_data,
|
.decap_data = decap_data,
|
||||||
.core_idx = core_idx,
|
.core_idx = core_idx,
|
||||||
|
.unique_data = unique_data,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (hairpinq != 0) {
|
if (hairpinq != 0) {
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
void fill_actions(struct rte_flow_action *actions, uint64_t *flow_actions,
|
void fill_actions(struct rte_flow_action *actions, uint64_t *flow_actions,
|
||||||
uint32_t counter, uint16_t next_table, uint16_t hairpinq,
|
uint32_t counter, uint16_t next_table, uint16_t hairpinq,
|
||||||
uint64_t encap_data, uint64_t decap_data, uint8_t core_idx);
|
uint64_t encap_data, uint64_t decap_data, uint8_t core_idx,
|
||||||
|
bool unique_data);
|
||||||
|
|
||||||
#endif /* FLOW_PERF_ACTION_GEN */
|
#endif /* FLOW_PERF_ACTION_GEN */
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#define FLOW_ITEM_MASK(_x) (UINT64_C(1) << _x)
|
#define FLOW_ITEM_MASK(_x) (UINT64_C(1) << _x)
|
||||||
#define FLOW_ACTION_MASK(_x) (UINT64_C(1) << _x)
|
#define FLOW_ACTION_MASK(_x) (UINT64_C(1) << _x)
|
||||||
#define FLOW_ATTR_MASK(_x) (UINT64_C(1) << _x)
|
#define FLOW_ATTR_MASK(_x) (UINT64_C(1) << _x)
|
||||||
#define GET_RSS_HF() (ETH_RSS_IP | ETH_RSS_TCP)
|
#define GET_RSS_HF() (ETH_RSS_IP)
|
||||||
|
|
||||||
/* Configuration */
|
/* Configuration */
|
||||||
#define RXQ_NUM 4
|
#define RXQ_NUM 4
|
||||||
@ -19,12 +19,6 @@
|
|||||||
#define METER_CIR 1250000
|
#define METER_CIR 1250000
|
||||||
#define DEFAULT_METER_PROF_ID 100
|
#define DEFAULT_METER_PROF_ID 100
|
||||||
|
|
||||||
/* This is used for encap/decap & header modify actions.
|
|
||||||
* When it's 1: it means all actions have fixed values.
|
|
||||||
* When it's 0: it means all actions will have different values.
|
|
||||||
*/
|
|
||||||
#define FIXED_VALUES 1
|
|
||||||
|
|
||||||
/* Items/Actions parameters */
|
/* Items/Actions parameters */
|
||||||
#define JUMP_ACTION_TABLE 2
|
#define JUMP_ACTION_TABLE 2
|
||||||
#define VLAN_VALUE 1
|
#define VLAN_VALUE 1
|
||||||
|
@ -46,6 +46,7 @@ generate_flow(uint16_t port_id,
|
|||||||
uint64_t encap_data,
|
uint64_t encap_data,
|
||||||
uint64_t decap_data,
|
uint64_t decap_data,
|
||||||
uint8_t core_idx,
|
uint8_t core_idx,
|
||||||
|
bool unique_data,
|
||||||
struct rte_flow_error *error)
|
struct rte_flow_error *error)
|
||||||
{
|
{
|
||||||
struct rte_flow_attr attr;
|
struct rte_flow_attr attr;
|
||||||
@ -61,7 +62,8 @@ generate_flow(uint16_t port_id,
|
|||||||
|
|
||||||
fill_actions(actions, flow_actions,
|
fill_actions(actions, flow_actions,
|
||||||
outer_ip_src, next_table, hairpinq,
|
outer_ip_src, next_table, hairpinq,
|
||||||
encap_data, decap_data, core_idx);
|
encap_data, decap_data, core_idx,
|
||||||
|
unique_data);
|
||||||
|
|
||||||
fill_items(items, flow_items, outer_ip_src, core_idx);
|
fill_items(items, flow_items, outer_ip_src, core_idx);
|
||||||
|
|
||||||
|
@ -35,6 +35,7 @@ generate_flow(uint16_t port_id,
|
|||||||
uint64_t encap_data,
|
uint64_t encap_data,
|
||||||
uint64_t decap_data,
|
uint64_t decap_data,
|
||||||
uint8_t core_idx,
|
uint8_t core_idx,
|
||||||
|
bool unique_data,
|
||||||
struct rte_flow_error *error);
|
struct rte_flow_error *error);
|
||||||
|
|
||||||
#endif /* FLOW_PERF_FLOW_GEN */
|
#endif /* FLOW_PERF_FLOW_GEN */
|
||||||
|
@ -61,6 +61,7 @@ static bool dump_iterations;
|
|||||||
static bool delete_flag;
|
static bool delete_flag;
|
||||||
static bool dump_socket_mem_flag;
|
static bool dump_socket_mem_flag;
|
||||||
static bool enable_fwd;
|
static bool enable_fwd;
|
||||||
|
static bool unique_data;
|
||||||
|
|
||||||
static struct rte_mempool *mbuf_mp;
|
static struct rte_mempool *mbuf_mp;
|
||||||
static uint32_t nb_lcores;
|
static uint32_t nb_lcores;
|
||||||
@ -131,6 +132,8 @@ usage(char *progname)
|
|||||||
printf(" --enable-fwd: To enable packets forwarding"
|
printf(" --enable-fwd: To enable packets forwarding"
|
||||||
" after insertion\n");
|
" after insertion\n");
|
||||||
printf(" --portmask=N: hexadecimal bitmask of ports used\n");
|
printf(" --portmask=N: hexadecimal bitmask of ports used\n");
|
||||||
|
printf(" --unique-data: flag to set using unique data for all"
|
||||||
|
" actions that support data, such as header modify and encap actions\n");
|
||||||
|
|
||||||
printf("To set flow attributes:\n");
|
printf("To set flow attributes:\n");
|
||||||
printf(" --ingress: set ingress attribute in flows\n");
|
printf(" --ingress: set ingress attribute in flows\n");
|
||||||
@ -567,6 +570,7 @@ args_parse(int argc, char **argv)
|
|||||||
{ "deletion-rate", 0, 0, 0 },
|
{ "deletion-rate", 0, 0, 0 },
|
||||||
{ "dump-socket-mem", 0, 0, 0 },
|
{ "dump-socket-mem", 0, 0, 0 },
|
||||||
{ "enable-fwd", 0, 0, 0 },
|
{ "enable-fwd", 0, 0, 0 },
|
||||||
|
{ "unique-data", 0, 0, 0 },
|
||||||
{ "portmask", 1, 0, 0 },
|
{ "portmask", 1, 0, 0 },
|
||||||
{ "cores", 1, 0, 0 },
|
{ "cores", 1, 0, 0 },
|
||||||
/* Attributes */
|
/* Attributes */
|
||||||
@ -762,6 +766,9 @@ args_parse(int argc, char **argv)
|
|||||||
if (strcmp(lgopts[opt_idx].name,
|
if (strcmp(lgopts[opt_idx].name,
|
||||||
"dump-iterations") == 0)
|
"dump-iterations") == 0)
|
||||||
dump_iterations = true;
|
dump_iterations = true;
|
||||||
|
if (strcmp(lgopts[opt_idx].name,
|
||||||
|
"unique-data") == 0)
|
||||||
|
unique_data = true;
|
||||||
if (strcmp(lgopts[opt_idx].name,
|
if (strcmp(lgopts[opt_idx].name,
|
||||||
"deletion-rate") == 0)
|
"deletion-rate") == 0)
|
||||||
delete_flag = true;
|
delete_flag = true;
|
||||||
@ -1173,7 +1180,7 @@ insert_flows(int port_id, uint8_t core_id)
|
|||||||
*/
|
*/
|
||||||
flow = generate_flow(port_id, 0, flow_attrs,
|
flow = generate_flow(port_id, 0, flow_attrs,
|
||||||
global_items, global_actions,
|
global_items, global_actions,
|
||||||
flow_group, 0, 0, 0, 0, core_id, &error);
|
flow_group, 0, 0, 0, 0, core_id, unique_data, &error);
|
||||||
|
|
||||||
if (flow == NULL) {
|
if (flow == NULL) {
|
||||||
print_flow_error(error);
|
print_flow_error(error);
|
||||||
@ -1189,7 +1196,7 @@ insert_flows(int port_id, uint8_t core_id)
|
|||||||
JUMP_ACTION_TABLE, counter,
|
JUMP_ACTION_TABLE, counter,
|
||||||
hairpin_queues_num,
|
hairpin_queues_num,
|
||||||
encap_data, decap_data,
|
encap_data, decap_data,
|
||||||
core_id, &error);
|
core_id, unique_data, &error);
|
||||||
|
|
||||||
if (force_quit)
|
if (force_quit)
|
||||||
counter = end_counter;
|
counter = end_counter;
|
||||||
@ -1860,6 +1867,7 @@ main(int argc, char **argv)
|
|||||||
delete_flag = false;
|
delete_flag = false;
|
||||||
dump_socket_mem_flag = false;
|
dump_socket_mem_flag = false;
|
||||||
flow_group = DEFAULT_GROUP;
|
flow_group = DEFAULT_GROUP;
|
||||||
|
unique_data = false;
|
||||||
|
|
||||||
signal(SIGINT, signal_handler);
|
signal(SIGINT, signal_handler);
|
||||||
signal(SIGTERM, signal_handler);
|
signal(SIGTERM, signal_handler);
|
||||||
@ -1875,7 +1883,6 @@ main(int argc, char **argv)
|
|||||||
if (nb_lcores <= 1)
|
if (nb_lcores <= 1)
|
||||||
rte_exit(EXIT_FAILURE, "This app needs at least two cores\n");
|
rte_exit(EXIT_FAILURE, "This app needs at least two cores\n");
|
||||||
|
|
||||||
|
|
||||||
printf(":: Flows Count per port: %d\n\n", rules_count);
|
printf(":: Flows Count per port: %d\n\n", rules_count);
|
||||||
|
|
||||||
if (has_meter())
|
if (has_meter())
|
||||||
|
@ -100,6 +100,11 @@ The command line options are:
|
|||||||
Set the number of needed cores to insert/delete rte_flow rules.
|
Set the number of needed cores to insert/delete rte_flow rules.
|
||||||
Default cores count is 1.
|
Default cores count is 1.
|
||||||
|
|
||||||
|
* ``--unique-data``
|
||||||
|
Flag to set using unique data for all actions that support data,
|
||||||
|
Such as header modify and encap actions. Default is using fixed
|
||||||
|
data for any action that support data for all flows.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
|
|
||||||
* ``--ingress``
|
* ``--ingress``
|
||||||
|
Loading…
x
Reference in New Issue
Block a user