Thread (27 messages) 27 messages, 5 authors, 2016-07-20

Re: [PATCH 01/10] ethdev: add a generic flow and new behavior switch to fdir

From: Wu, Jingjing <hidden>
Date: 2016-02-25 03:26:59

quoted hunk ↗ jump to hunk
-----Original Message-----
From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Rahul Lakkireddy
Sent: Wednesday, February 03, 2016 4:32 PM
To: dev@dpdk.org
Cc: Kumar Sanghvi; Nirranjan Kirubaharan
Subject: [dpdk-dev] [PATCH 01/10] ethdev: add a generic flow and new
behavior switch to fdir

Add a new raw packet flow that allows specifying generic flow input.

Add the ability to provide masks for fields in flow to allow range of values.

Add a new behavior switch.

Add the ability to provide behavior arguments to allow rewriting matched
fields with new values. Ex: allows to provide new ip and port addresses to
rewrite the fields of packets matching a filter rule before NAT'ing.

Signed-off-by: Rahul Lakkireddy <redacted>
Signed-off-by: Kumar Sanghvi <redacted>
---
 doc/guides/rel_notes/release_2_3.rst |  3 +++
 lib/librte_ether/rte_eth_ctrl.h      | 15 ++++++++++++++-
 2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/doc/guides/rel_notes/release_2_3.rst
b/doc/guides/rel_notes/release_2_3.rst
index 99de186..19ce954 100644
--- a/doc/guides/rel_notes/release_2_3.rst
+++ b/doc/guides/rel_notes/release_2_3.rst
@@ -39,6 +39,9 @@ API Changes
 ABI Changes
 -----------

+* New flow type ``RTE_ETH_FLOW_RAW_PKT`` had been introduced and
hence
+  ``RTE_ETH_FLOW_MAX`` had been increased to 19.
+
Great to see a raw_pkt_flow type.
And there is already a flow type "RTE_ETH_FLOW_RAW", it's not necessary to add a new one.
quoted hunk ↗ jump to hunk
 Shared Library Versions
 -----------------------
diff --git a/lib/librte_ether/rte_eth_ctrl.h b/lib/librte_ether/rte_eth_ctrl.h
index ce224ad..1bc0d03 100644
--- a/lib/librte_ether/rte_eth_ctrl.h
+++ b/lib/librte_ether/rte_eth_ctrl.h
@@ -74,7 +74,8 @@ extern "C" {
 #define RTE_ETH_FLOW_IPV6_EX            15
 #define RTE_ETH_FLOW_IPV6_TCP_EX        16
 #define RTE_ETH_FLOW_IPV6_UDP_EX        17
-#define RTE_ETH_FLOW_MAX                18
+#define RTE_ETH_FLOW_RAW_PKT            18
+#define RTE_ETH_FLOW_MAX                19

 /**
  * Feature filter types
@@ -499,6 +500,9 @@ struct rte_eth_tunnel_flow {
 	struct ether_addr mac_addr;                /**< Mac address to match. */
 };

+/**< Max length of raw packet in bytes. */ #define
+RTE_ETH_RAW_PKT_FLOW_MAX_LEN 256
+
 /**
  * An union contains the inputs for all types of flow
  */
@@ -514,6 +518,7 @@ union rte_eth_fdir_flow {
 	struct rte_eth_ipv6_flow   ipv6_flow;
 	struct rte_eth_mac_vlan_flow mac_vlan_flow;
 	struct rte_eth_tunnel_flow   tunnel_flow;
+	uint8_t raw_pkt_flow[RTE_ETH_RAW_PKT_FLOW_MAX_LEN];
 };

 /**
@@ -534,6 +539,8 @@ struct rte_eth_fdir_input {
 	uint16_t flow_type;
 	union rte_eth_fdir_flow flow;
 	/**< Flow fields to match, dependent on flow_type */
+	union rte_eth_fdir_flow flow_mask;
+	/**< Mask for the fields matched, dependent on flow */
 	struct rte_eth_fdir_flow_ext flow_ext;
 	/**< Additional fields to match */
 };
@@ -545,6 +552,7 @@ enum rte_eth_fdir_behavior {
 	RTE_ETH_FDIR_ACCEPT = 0,
 	RTE_ETH_FDIR_REJECT,
 	RTE_ETH_FDIR_PASSTHRU,
+	RTE_ETH_FDIR_SWITCH,
 };

 /**
@@ -558,6 +566,9 @@ enum rte_eth_fdir_status {
 	RTE_ETH_FDIR_REPORT_FLEX_8,        /**< Report 8 flex bytes. */
 };

+/**< Max # of behavior arguments */
+#define RTE_ETH_BEHAVIOR_ARG_MAX_LEN 256
+
 /**
  * A structure used to define an action when match FDIR packet filter.
  */
@@ -569,6 +580,8 @@ struct rte_eth_fdir_action {
 	/**< If report_status is RTE_ETH_FDIR_REPORT_ID_FLEX_4 or
 	     RTE_ETH_FDIR_REPORT_FLEX_8, flex_off specifies where the
reported
 	     flex bytes start from in flexible payload. */
+	uint8_t behavior_arg[RTE_ETH_BEHAVIOR_ARG_MAX_LEN];
+	/**< Extra arguments for behavior taken */
 };

 /**
--
2.5.3
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help