DPDK patches and discussions
 help / color / mirror / Atom feed
From: Wisam Jaddo <wisamm@mellanox.com>
To: dev@dpdk.org, thomas@monjalon.net, asafp@mellanox.com,
	akozyrev@nvidia.com, akozyrev@mellanox.com,
	arybchenko@solarflare.com, jackmin@mellanox.com
Subject: [dpdk-dev] [PATCH 04/13] app/flow-perf: add header modify actions support
Date: Sun, 30 Aug 2020 11:15:35 +0000	[thread overview]
Message-ID: <20200830111544.4190-5-wisamm@mellanox.com> (raw)
In-Reply-To: <20200830111544.4190-1-wisamm@mellanox.com>

Introduce headers modify actions in the app.
All header modify actions will add different value
for each flow, to make sure each flow will create
and use it's own actions.

Signed-off-by: Wisam Jaddo <wisamm@mellanox.com>
Acked-by: Alexander Kozyrev <akozyrev@nvidia.com>
---
 app/test-flow-perf/actions_gen.c       | 344 +++++++++++++++++++++++++
 app/test-flow-perf/main.c              | 180 ++++++++++++-
 doc/guides/rel_notes/release_20_08.rst |   2 +
 doc/guides/tools/flow-perf.rst         |  59 +++++
 4 files changed, 583 insertions(+), 2 deletions(-)

diff --git a/app/test-flow-perf/actions_gen.c b/app/test-flow-perf/actions_gen.c
index d115cdd723..7e0637595a 100644
--- a/app/test-flow-perf/actions_gen.c
+++ b/app/test-flow-perf/actions_gen.c
@@ -21,6 +21,7 @@ struct additional_para {
 	uint16_t next_table;
 	uint16_t *queues;
 	uint16_t queues_number;
+	uint32_t counter;
 };
 
 /* Storage for struct rte_flow_action_rss including external data. */
@@ -181,6 +182,252 @@ add_count(struct rte_flow_action *actions,
 	actions[actions_counter].conf = &count_action;
 }
 
+static void
+add_set_src_mac(struct rte_flow_action *actions,
+	uint8_t actions_counter,
+	__rte_unused struct additional_para para)
+{
+	static struct rte_flow_action_set_mac set_mac;
+	uint32_t mac = para.counter;
+	uint16_t i;
+
+	/* Mac address to be set is random each time */
+	for (i = 0; i < RTE_ETHER_ADDR_LEN; i++) {
+		set_mac.mac_addr[i] = mac & 0xff;
+		mac = mac >> 8;
+	}
+
+	actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_MAC_SRC;
+	actions[actions_counter].conf = &set_mac;
+}
+
+static void
+add_set_dst_mac(struct rte_flow_action *actions,
+	uint8_t actions_counter,
+	__rte_unused struct additional_para para)
+{
+	static struct rte_flow_action_set_mac set_mac;
+	uint32_t mac = para.counter;
+	uint16_t i;
+
+	/* Mac address to be set is random each time */
+	for (i = 0; i < RTE_ETHER_ADDR_LEN; i++) {
+		set_mac.mac_addr[i] = mac & 0xff;
+		mac = mac >> 8;
+	}
+
+	actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_MAC_DST;
+	actions[actions_counter].conf = &set_mac;
+}
+
+static void
+add_set_src_ipv4(struct rte_flow_action *actions,
+	uint8_t actions_counter,
+	__rte_unused struct additional_para para)
+{
+	static struct rte_flow_action_set_ipv4 set_ipv4;
+
+	/* IPv4 value to be set is random each time */
+	set_ipv4.ipv4_addr = RTE_BE32(para.counter + 1);
+
+	actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC;
+	actions[actions_counter].conf = &set_ipv4;
+}
+
+static void
+add_set_dst_ipv4(struct rte_flow_action *actions,
+	uint8_t actions_counter,
+	__rte_unused struct additional_para para)
+{
+	static struct rte_flow_action_set_ipv4 set_ipv4;
+
+	/* IPv4 value to be set is random each time */
+	set_ipv4.ipv4_addr = RTE_BE32(para.counter + 1);
+
+	actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_IPV4_DST;
+	actions[actions_counter].conf = &set_ipv4;
+}
+
+static void
+add_set_src_ipv6(struct rte_flow_action *actions,
+	uint8_t actions_counter,
+	__rte_unused struct additional_para para)
+{
+	static struct rte_flow_action_set_ipv6 set_ipv6;
+	uint32_t ipv6 = para.counter;
+	uint8_t i;
+
+	/* IPv6 value to set is random each time */
+	for (i = 0; i < 16; i++) {
+		set_ipv6.ipv6_addr[i] = ipv6 & 0xff;
+		ipv6 = ipv6 >> 8;
+	}
+
+	actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC;
+	actions[actions_counter].conf = &set_ipv6;
+}
+
+static void
+add_set_dst_ipv6(struct rte_flow_action *actions,
+	uint8_t actions_counter,
+	__rte_unused struct additional_para para)
+{
+	static struct rte_flow_action_set_ipv6 set_ipv6;
+	uint32_t ipv6 = para.counter;
+	uint8_t i;
+
+	/* IPv6 value to set is random each time */
+	for (i = 0; i < 16; i++) {
+		set_ipv6.ipv6_addr[i] = ipv6 & 0xff;
+		ipv6 = ipv6 >> 8;
+	}
+
+	actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_IPV6_DST;
+	actions[actions_counter].conf = &set_ipv6;
+}
+
+static void
+add_set_src_tp(struct rte_flow_action *actions,
+	uint8_t actions_counter,
+	__rte_unused struct additional_para para)
+{
+	static struct rte_flow_action_set_tp set_tp;
+	uint32_t tp = para.counter;
+
+	/* TP src port is random each time */
+	if (tp > 0xffff)
+		tp = tp >> 16;
+
+	set_tp.port = RTE_BE16(tp & 0xffff);
+
+	actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_TP_SRC;
+	actions[actions_counter].conf = &set_tp;
+}
+
+static void
+add_set_dst_tp(struct rte_flow_action *actions,
+	uint8_t actions_counter,
+	__rte_unused struct additional_para para)
+{
+	static struct rte_flow_action_set_tp set_tp;
+	uint32_t tp = para.counter;
+
+	/* TP src port is random each time */
+	if (tp > 0xffff)
+		tp = tp >> 16;
+
+	set_tp.port = RTE_BE16(tp & 0xffff);
+
+	actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_TP_DST;
+	actions[actions_counter].conf = &set_tp;
+}
+
+static void
+add_inc_tcp_ack(struct rte_flow_action *actions,
+	uint8_t actions_counter,
+	__rte_unused struct additional_para para)
+{
+	static rte_be32_t value = RTE_BE32(1);
+
+	actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_INC_TCP_ACK;
+	actions[actions_counter].conf = &value;
+}
+
+static void
+add_dec_tcp_ack(struct rte_flow_action *actions,
+	uint8_t actions_counter,
+	__rte_unused struct additional_para para)
+{
+	static rte_be32_t value = RTE_BE32(1);
+
+	actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_DEC_TCP_ACK;
+	actions[actions_counter].conf = &value;
+}
+
+static void
+add_inc_tcp_seq(struct rte_flow_action *actions,
+	uint8_t actions_counter,
+	__rte_unused struct additional_para para)
+{
+	static rte_be32_t value = RTE_BE32(1);
+
+	actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_INC_TCP_SEQ;
+	actions[actions_counter].conf = &value;
+}
+
+static void
+add_dec_tcp_seq(struct rte_flow_action *actions,
+	uint8_t actions_counter,
+	__rte_unused struct additional_para para)
+{
+	static rte_be32_t value = RTE_BE32(1);
+
+	actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_DEC_TCP_SEQ;
+	actions[actions_counter].conf = &value;
+}
+
+static void
+add_set_ttl(struct rte_flow_action *actions,
+	uint8_t actions_counter,
+	__rte_unused struct additional_para para)
+{
+	static struct rte_flow_action_set_ttl set_ttl;
+	uint32_t ttl_value = para.counter;
+
+	/* Set ttl to random value each time */
+	while (ttl_value > 0xff)
+		ttl_value = ttl_value >> 8;
+
+	set_ttl.ttl_value = ttl_value;
+
+	actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_TTL;
+	actions[actions_counter].conf = &set_ttl;
+}
+
+static void
+add_dec_ttl(struct rte_flow_action *actions,
+	uint8_t actions_counter,
+	__rte_unused struct additional_para para)
+{
+	actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_DEC_TTL;
+}
+
+static void
+add_set_ipv4_dscp(struct rte_flow_action *actions,
+	uint8_t actions_counter,
+	__rte_unused struct additional_para para)
+{
+	static struct rte_flow_action_set_dscp set_dscp;
+	uint32_t dscp_value = para.counter;
+
+	/* Set dscp to random value each time */
+	while (dscp_value > 0xff)
+		dscp_value = dscp_value >> 8;
+
+	set_dscp.dscp = dscp_value;
+
+	actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP;
+	actions[actions_counter].conf = &set_dscp;
+}
+
+static void
+add_set_ipv6_dscp(struct rte_flow_action *actions,
+	uint8_t actions_counter,
+	__rte_unused struct additional_para para)
+{
+	static struct rte_flow_action_set_dscp set_dscp;
+	uint32_t dscp_value = para.counter;
+
+	/* Set dscp to random value each time */
+	while (dscp_value > 0xff)
+		dscp_value = dscp_value >> 8;
+
+	set_dscp.dscp = dscp_value;
+
+	actions[actions_counter].type = RTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP;
+	actions[actions_counter].conf = &set_dscp;
+}
+
 void
 fill_actions(struct rte_flow_action *actions, uint64_t *flow_actions,
 	uint32_t counter, uint16_t next_table, uint16_t hairpinq)
@@ -202,6 +449,7 @@ fill_actions(struct rte_flow_action *actions, uint64_t *flow_actions,
 		.next_table = next_table,
 		.queues = queues,
 		.queues_number = RXQ_NUM,
+		.counter = counter,
 	};
 
 	if (hairpinq != 0) {
@@ -234,6 +482,102 @@ fill_actions(struct rte_flow_action *actions, uint64_t *flow_actions,
 			.mask = FLOW_ACTION_MASK(RTE_FLOW_ACTION_TYPE_SET_TAG),
 			.funct = add_set_tag,
 		},
+		{
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_MAC_SRC
+			),
+			.funct = add_set_src_mac,
+		},
+		{
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_MAC_DST
+			),
+			.funct = add_set_dst_mac,
+		},
+		{
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC
+			),
+			.funct = add_set_src_ipv4,
+		},
+		{
+			.mask =	FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_IPV4_DST
+			),
+			.funct = add_set_dst_ipv4,
+		},
+		{
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC
+			),
+			.funct = add_set_src_ipv6,
+		},
+		{
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_IPV6_DST
+			),
+			.funct = add_set_dst_ipv6,
+		},
+		{
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_TP_SRC
+			),
+			.funct = add_set_src_tp,
+		},
+		{
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_TP_DST
+			),
+			.funct = add_set_dst_tp,
+		},
+		{
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_INC_TCP_ACK
+			),
+			.funct = add_inc_tcp_ack,
+		},
+		{
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_DEC_TCP_ACK
+			),
+			.funct = add_dec_tcp_ack,
+		},
+		{
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_INC_TCP_SEQ
+			),
+			.funct = add_inc_tcp_seq,
+		},
+		{
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_DEC_TCP_SEQ
+			),
+			.funct = add_dec_tcp_seq,
+		},
+		{
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_TTL
+			),
+			.funct = add_set_ttl,
+		},
+		{
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_DEC_TTL
+			),
+			.funct = add_dec_ttl,
+		},
+		{
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP
+			),
+			.funct = add_set_ipv4_dscp,
+		},
+		{
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP
+			),
+			.funct = add_set_ipv6_dscp,
+		},
 		{
 			.mask = FLOW_ACTION_MASK(RTE_FLOW_ACTION_TYPE_QUEUE),
 			.funct = add_queue,
diff --git a/app/test-flow-perf/main.c b/app/test-flow-perf/main.c
index 0ff8080aa0..1f693d4ed1 100644
--- a/app/test-flow-perf/main.c
+++ b/app/test-flow-perf/main.c
@@ -138,6 +138,38 @@ usage(char *progname)
 	printf("  --drop: add drop action in flow actions\n");
 	printf("  --hairpin-queue=N: add hairpin-queue action in flow actions\n");
 	printf("  --hairpin-rss=N: add hairpin-rss action in flow actions\n");
+	printf("  --set-src-mac: add set src mac action to flow actions\n"
+		"Src mac to be set is random each flow\n");
+	printf("  --set-dst-mac: add set dst mac action to flow actions\n"
+		 "Dst mac to be set is random each flow\n");
+	printf("  --set-src-ipv4: add set src ipv4 action to flow actions\n"
+		"Src ipv4 to be set is random each flow\n");
+	printf("  --set-dst-ipv4 add set dst ipv4 action to flow actions\n"
+		"Dst ipv4 to be set is random each flow\n");
+	printf("  --set-src-ipv6: add set src ipv6 action to flow actions\n"
+		"Src ipv6 to be set is random each flow\n");
+	printf("  --set-dst-ipv6: add set dst ipv6 action to flow actions\n"
+		"Dst ipv6 to be set is random each flow\n");
+	printf("  --set-src-tp: add set src tp action to flow actions\n"
+		"Src tp to be set is random each flow\n");
+	printf("  --set-dst-tp: add set dst tp action to flow actions\n"
+		"Dst tp to be set is random each flow\n");
+	printf("  --inc-tcp-ack: add inc tcp ack action to flow actions\n"
+		"tcp ack will be increments by 1\n");
+	printf("  --dec-tcp-ack: add dec tcp ack action to flow actions\n"
+		"tcp ack will be decrements by 1\n");
+	printf("  --inc-tcp-seq: add inc tcp seq action to flow actions\n"
+		"tcp seq will be increments by 1\n");
+	printf("  --dec-tcp-seq: add dec tcp seq action to flow actions\n"
+		"tcp seq will be decrements by 1\n");
+	printf("  --set-ttl: add set ttl action to flow actions\n"
+		"L3 ttl to be set is random each flow\n");
+	printf("  --dec-ttl: add dec ttl action to flow actions\n"
+		"L3 ttl will be decrements by 1\n");
+	printf("  --set-ipv4-dscp: add set ipv4 dscp action to flow actions\n"
+		"ipv4 dscp value to be set is random each flow\n");
+	printf("  --set-ipv6-dscp: add set ipv6 dscp action to flow actions\n"
+		"ipv6 dscp value to be set is random each flow\n");
 }
 
 static void
@@ -304,7 +336,135 @@ args_parse(int argc, char **argv)
 			.mask = FLOW_ACTION_MASK(RTE_FLOW_ACTION_TYPE_DROP),
 			.map = &flow_actions[0],
 			.map_idx = &actions_idx
-		}
+		},
+		{
+			.str = "set-src-mac",
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_MAC_SRC
+			),
+			.map = &flow_actions[0],
+			.map_idx = &actions_idx
+		},
+		{
+			.str = "set-dst-mac",
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_MAC_DST
+			),
+			.map = &flow_actions[0],
+			.map_idx = &actions_idx
+		},
+		{
+			.str = "set-src-ipv4",
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC
+			),
+			.map = &flow_actions[0],
+			.map_idx = &actions_idx
+		},
+		{
+			.str = "set-dst-ipv4",
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_IPV4_DST
+			),
+			.map = &flow_actions[0],
+			.map_idx = &actions_idx
+		},
+		{
+			.str = "set-src-ipv6",
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC
+			),
+			.map = &flow_actions[0],
+			.map_idx = &actions_idx
+		},
+		{
+			.str = "set-dst-ipv6",
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_IPV6_DST
+			),
+			.map = &flow_actions[0],
+			.map_idx = &actions_idx
+		},
+		{
+			.str = "set-src-tp",
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_TP_SRC
+			),
+			.map = &flow_actions[0],
+			.map_idx = &actions_idx
+		},
+		{
+			.str = "set-dst-tp",
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_TP_DST
+			),
+			.map = &flow_actions[0],
+			.map_idx = &actions_idx
+		},
+		{
+			.str = "inc-tcp-ack",
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_INC_TCP_ACK
+			),
+			.map = &flow_actions[0],
+			.map_idx = &actions_idx
+		},
+		{
+			.str = "dec-tcp-ack",
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_DEC_TCP_ACK
+			),
+			.map = &flow_actions[0],
+			.map_idx = &actions_idx
+		},
+		{
+			.str = "inc-tcp-seq",
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_INC_TCP_SEQ
+			),
+			.map = &flow_actions[0],
+			.map_idx = &actions_idx
+		},
+		{
+			.str = "dec-tcp-seq",
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_DEC_TCP_SEQ
+			),
+			.map = &flow_actions[0],
+			.map_idx = &actions_idx
+		},
+		{
+			.str = "set-ttl",
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_TTL
+			),
+			.map = &flow_actions[0],
+			.map_idx = &actions_idx
+		},
+		{
+			.str = "dec-ttl",
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_DEC_TTL
+			),
+			.map = &flow_actions[0],
+			.map_idx = &actions_idx
+		},
+		{
+			.str = "set-ipv4-dscp",
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP
+			),
+			.map = &flow_actions[0],
+			.map_idx = &actions_idx
+		},
+		{
+			.str = "set-ipv6-dscp",
+			.mask = FLOW_ACTION_MASK(
+				RTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP
+			),
+			.map = &flow_actions[0],
+			.map_idx = &actions_idx
+		},
 	};
 
 	static const struct option lgopts[] = {
@@ -346,6 +506,22 @@ args_parse(int argc, char **argv)
 		{ "drop",                       0, 0, 0 },
 		{ "hairpin-queue",              1, 0, 0 },
 		{ "hairpin-rss",                1, 0, 0 },
+		{ "set-src-mac",                0, 0, 0 },
+		{ "set-dst-mac",                0, 0, 0 },
+		{ "set-src-ipv4",               0, 0, 0 },
+		{ "set-dst-ipv4",               0, 0, 0 },
+		{ "set-src-ipv6",               0, 0, 0 },
+		{ "set-dst-ipv6",               0, 0, 0 },
+		{ "set-src-tp",                 0, 0, 0 },
+		{ "set-dst-tp",                 0, 0, 0 },
+		{ "inc-tcp-ack",                0, 0, 0 },
+		{ "dec-tcp-ack",                0, 0, 0 },
+		{ "inc-tcp-seq",                0, 0, 0 },
+		{ "dec-tcp-seq",                0, 0, 0 },
+		{ "set-ttl",                    0, 0, 0 },
+		{ "dec-ttl",                    0, 0, 0 },
+		{ "set-ipv4-dscp",              0, 0, 0 },
+		{ "set-ipv6-dscp",              0, 0, 0 },
 	};
 
 	hairpin_queues_num = 0;
@@ -368,7 +544,7 @@ args_parse(int argc, char **argv)
 				else
 					rte_exit(EXIT_SUCCESS,
 						"flow group should be >= 0\n");
-				printf("group %d ", flow_group);
+				printf("group %d / ", flow_group);
 			}
 
 			for (i = 0; i < RTE_DIM(flow_options); i++)
diff --git a/doc/guides/rel_notes/release_20_08.rst b/doc/guides/rel_notes/release_20_08.rst
index d3ba4cd1d0..7c9d508a07 100644
--- a/doc/guides/rel_notes/release_20_08.rst
+++ b/doc/guides/rel_notes/release_20_08.rst
@@ -280,6 +280,8 @@ New Features
     moreover the app also now starts to support inner
     items matching as well.
 
+  * Start supporting header modify actions.
+
 
 Removed Items
 -------------
diff --git a/doc/guides/tools/flow-perf.rst b/doc/guides/tools/flow-perf.rst
index 6941155fee..e225550e40 100644
--- a/doc/guides/tools/flow-perf.rst
+++ b/doc/guides/tools/flow-perf.rst
@@ -244,3 +244,62 @@ Actions:
 	Add hairpin RSS action to all flows actions.
 	The queues in RSS action will be all hairpin queues configured
 	in the app.
+
+*	``--set-src-mac``
+	Add set source mac action to all flows actions.
+	The mac to be set is random each flow.
+
+*	``--set-dst-mac``
+	Add set destination mac action to all flows actions.
+	The mac to be set is random each flow.
+
+*	``-set-src-ipv4``
+	Add set source ipv4 action to all flows actions.
+	The ipv4 header to be set is random each flow.
+
+*	``--set-dst-ipv4``
+	Add set destination ipv4 action to all flows actions.
+	The ipv4 header to be set is random each flow.
+
+*	``--set-src-ipv6``
+	Add set source ipv6 action to all flows actions.
+	The ipv6 header to be set is random each flow.
+
+*	``--set-dst-ipv6``
+	Add set destination ipv6 action to all flows actions.
+	The ipv6 header to be set is random each flow.
+
+*	``--set-src-tp``
+	Add set source tp action to all flows actions.
+	The tp sport header to be set is random each flow.
+
+*	``--set-dst-tp``
+	Add set destination tp action to all flows actions.
+	The tp dport header to be set is random each flow.
+
+*	``--inc-tcp-ack``
+	Add increment TCP acknowledgment by one to all flows actions.
+
+*	``--dec-tcp-ack``
+	Add decrement TCP acknowledgment by one to all flows actions.
+
+*	``--inc-tcp-seq``
+	Add increment TCP sequence by one to all flows actions.
+
+*	``--dec-tcp-seq``
+	Add decrement TCP sequence by one to all flows actions.
+
+*	``--set-ttl``
+	Add set IP ttl action to all flows actions.
+	The ttl value to be set is random each flow.
+
+*	``--dec-ttl``
+	Add decrement IP ttl by one to all flows actions.
+
+*	``--set-ipv4-dscp``
+	Add set IPv4 dscp action to all flows actions.
+	The dscp value to be is random each flow.
+
+*	``--set-ipv6-dscp``
+	Add set IPv6 dscp action to all flows actions.
+	The dscp value to be is random each flow.
-- 
2.17.1


  parent reply	other threads:[~2020-08-30 11:20 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-30 11:15 [dpdk-dev] [PATCH 00/13] app/flow-perf: add support for new items/actions Wisam Jaddo
2020-08-30 11:15 ` [dpdk-dev] [PATCH 01/13] app/flow-perf: fix actions mask macro usage Wisam Jaddo
2020-08-30 11:15 ` [dpdk-dev] [PATCH 02/13] doc/flow-perf: fix app sections Wisam Jaddo
2020-08-30 11:15 ` [dpdk-dev] [PATCH 03/13] app/flow-perf: start supporting user order Wisam Jaddo
2020-08-30 11:15 ` Wisam Jaddo [this message]
2020-08-30 11:15 ` [dpdk-dev] [PATCH 05/13] app/flow-perf: add flag action support Wisam Jaddo
2020-08-30 11:15 ` [dpdk-dev] [PATCH 06/13] app/flow-perf: fix memory leak from RSS action Wisam Jaddo
2020-08-30 11:15 ` [dpdk-dev] [PATCH 07/13] app/flow-perf: add raw encap/decap actions support Wisam Jaddo
2020-08-30 11:15 ` [dpdk-dev] [PATCH 08/13] app/flow-perf: add VXLAN " Wisam Jaddo
2020-08-30 11:15 ` [dpdk-dev] [PATCH 09/13] app/flow-perf: fix source ipv4 matching Wisam Jaddo
2020-08-30 11:15 ` [dpdk-dev] [PATCH 10/13] app/flow-perf: add random mark id values Wisam Jaddo
2020-08-30 11:15 ` [dpdk-dev] [PATCH 11/13] app/flow-perf: add set port mask to options Wisam Jaddo
2020-08-30 11:15 ` [dpdk-dev] [PATCH 12/13] app/flow-perf: add icmp matching support Wisam Jaddo
2020-08-30 11:15 ` [dpdk-dev] [PATCH 13/13] app/flow-perf: allow fixed values for actions Wisam Jaddo
2020-09-14 18:15 ` [dpdk-dev] [PATCH 00/13] app/flow-perf: add support for new items/actions Ferruh Yigit
2020-09-21 21:36 ` Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200830111544.4190-5-wisamm@mellanox.com \
    --to=wisamm@mellanox.com \
    --cc=akozyrev@mellanox.com \
    --cc=akozyrev@nvidia.com \
    --cc=arybchenko@solarflare.com \
    --cc=asafp@mellanox.com \
    --cc=dev@dpdk.org \
    --cc=jackmin@mellanox.com \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).