[dpdk-dev,v3,01/18] net/ixgbe: store TCP SYN filter

Message ID 1484208838-58734-1-git-send-email-wei.zhao1@intel.com (mailing list archive)
State Superseded, archived
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel compilation fail apply patch file failure

Commit Message

Zhao1, Wei Jan. 12, 2017, 8:13 a.m. UTC
  Add support for storing TCP SYN filter in SW.

Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 18 +++++++++++++-----
 drivers/net/ixgbe/ixgbe_ethdev.h |  2 ++
 2 files changed, 15 insertions(+), 5 deletions(-)
  

Comments

Zhao1, Wei Jan. 12, 2017, 8:40 a.m. UTC | #1
From: zhao wei <wei.zhao1@gmail.com>

The patches mainly finish following functions:
1) Store and restore all kinds of filters.
2) Parse all kinds of filters.
3) Add flow validate function.
4) Add flow create function.
5) Add flow destroy function.
6) Add flow flush function.

v2 changes:
 fix git log error
 Modify some function call relationship
 Change return value type of all parse flow functions
 Update error info for all flow ops
 Add ixgbe_filterlist_flush to flush flows and rules created

v3 change:
 add new file ixgbe_flow.c to store generic API parser related functions
 add more comment about pattern and action rules
 add attr check in parser functions
 change struct name ixgbe_flow to rte_flow
 change SYN to TCP SYN
 change to use memset initizlize struct ixgbe_filter_info
 break down filter uninit process to 3 indepedent functions in eth_ixgbe_dev_uninit()
 change struct rte_flow_item_nvgre definition
 change struct rte_flow_item_e_tag definition
 fix one bug in function ixgbe_dev_filter_ctrl
 add goto in function ixgbe_flow_create
 delete some useless initialization 
 eliminate some git log check warning

v4 change:
 fix some check patch warning

zhao wei (18):
  net/ixgbe: store TCP SYN filter
  net/ixgbe: store flow director filter
  net/ixgbe: store L2 tunnel filter
  net/ixgbe: restore n-tuple filter Add support for restoring n-tuple
    filter in SW.
  net/ixgbe: restore ether type filter
  net/ixgbe: restore TCP SYN filter
  net/ixgbe: restore flow director filter
  net/ixgbe: restore L2 tunnel filter
  net/ixgbe: store and restore L2 tunnel configuration
  net/ixgbe: flush all the filters
  net/ixgbe: parse n-tuple filter
  net/ixgbe: parse ethertype filter
  net/ixgbe: parse TCP SYN filter     check if the rule is a TCP SYN
    rule, and get the SYN info.
  net/ixgbe: parse L2 tunnel filter     check if the rule is a L2 tunnel
    rule, and get the L2 tunnel info.
  net/ixgbe: parse flow director filter
  net/ixgbe: create consistent filter
  net/ixgbe: destroy consistent filter
  net/ixgbe: flush all the filter list

 drivers/net/ixgbe/Makefile       |    2 +
 drivers/net/ixgbe/ixgbe_ethdev.c |  667 +++++++--
 drivers/net/ixgbe/ixgbe_ethdev.h |  203 ++-
 drivers/net/ixgbe/ixgbe_fdir.c   |  407 ++++--
 drivers/net/ixgbe/ixgbe_flow.c   | 2808 ++++++++++++++++++++++++++++++++++++++
 drivers/net/ixgbe/ixgbe_pf.c     |   26 +-
 lib/librte_ether/rte_flow.h      |   48 +
 7 files changed, 3950 insertions(+), 211 deletions(-)
 create mode 100644 drivers/net/ixgbe/ixgbe_flow.c
  
Zhao1, Wei Jan. 12, 2017, 9:17 a.m. UTC | #2
The patches mainly finish following functions:
1) Store and restore all kinds of filters.
2) Parse all kinds of filters.
3) Add flow validate function.
4) Add flow create function.
5) Add flow destroy function.
6) Add flow flush function.

v2 changes:
 fix git log error
 Modify some function call relationship
 Change return value type of all parse flow functions
 Update error info for all flow ops
 Add ixgbe_filterlist_flush to flush flows and rules created

v3 change:
 add new file ixgbe_flow.c to store generic API parser related functions
 add more comment about pattern and action rules
 add attr check in parser functions
 change struct name ixgbe_flow to rte_flow
 change SYN to TCP SYN
 change to use memset initizlize struct ixgbe_filter_info
 break down filter uninit process to 3 indepedent functions in eth_ixgbe_dev_uninit()
 change struct rte_flow_item_nvgre definition
 change struct rte_flow_item_e_tag definition
 fix one bug in function ixgbe_dev_filter_ctrl
 add goto in function ixgbe_flow_create
 delete some useless initialization 
 eliminate some git log check warning

v4 change:
 fix some check patch warning

v5 change:
 fix some git log warning

zhao wei (18):
  net/ixgbe: store TCP SYN filter
  net/ixgbe: store flow director filter
  net/ixgbe: store L2 tunnel filter
  net/ixgbe: restore n-tuple filter
  net/ixgbe: restore ether type filter
  net/ixgbe: restore TCP SYN filter
  net/ixgbe: restore flow director filter
  net/ixgbe: restore L2 tunnel filter
  net/ixgbe: store and restore L2 tunnel configuration
  net/ixgbe: flush all the filters
  net/ixgbe: parse n-tuple filter
  net/ixgbe: parse ethertype filter
  net/ixgbe: parse TCP SYN filter
  net/ixgbe: parse L2 tunnel filter
  net/ixgbe: parse flow director filter
  net/ixgbe: create consistent filter
  net/ixgbe: destroy consistent filter
  net/ixgbe: flush all the filter list

 drivers/net/ixgbe/Makefile       |    2 +
 drivers/net/ixgbe/ixgbe_ethdev.c |  667 +++++++--
 drivers/net/ixgbe/ixgbe_ethdev.h |  203 ++-
 drivers/net/ixgbe/ixgbe_fdir.c   |  407 ++++--
 drivers/net/ixgbe/ixgbe_flow.c   | 2808 ++++++++++++++++++++++++++++++++++++++
 drivers/net/ixgbe/ixgbe_pf.c     |   26 +-
 lib/librte_ether/rte_flow.h      |   48 +
 7 files changed, 3950 insertions(+), 211 deletions(-)
 create mode 100644 drivers/net/ixgbe/ixgbe_flow.c
  
Xing, Beilei Jan. 12, 2017, 11:38 a.m. UTC | #3
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Wei Zhao
> Sent: Thursday, January 12, 2017 5:17 PM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH v5 00/18] net/ixgbe: Consistent filter API
> 
> The patches mainly finish following functions:
> 1) Store and restore all kinds of filters.
> 2) Parse all kinds of filters.
> 3) Add flow validate function.
> 4) Add flow create function.
> 5) Add flow destroy function.
> 6) Add flow flush function.
> 
> v2 changes:
>  fix git log error
>  Modify some function call relationship
>  Change return value type of all parse flow functions  Update error info for all
> flow ops  Add ixgbe_filterlist_flush to flush flows and rules created
> 
> v3 change:
>  add new file ixgbe_flow.c to store generic API parser related functions  add
> more comment about pattern and action rules  add attr check in parser
> functions  change struct name ixgbe_flow to rte_flow  change SYN to TCP
> SYN  change to use memset initizlize struct ixgbe_filter_info  break down
> filter uninit process to 3 indepedent functions in eth_ixgbe_dev_uninit()
> change struct rte_flow_item_nvgre definition  change struct
> rte_flow_item_e_tag definition  fix one bug in function ixgbe_dev_filter_ctrl
> add goto in function ixgbe_flow_create  delete some useless initialization
> eliminate some git log check warning
> 
> v4 change:
>  fix some check patch warning
> 
> v5 change:
>  fix some git log warning
> 
> zhao wei (18):
>   net/ixgbe: store TCP SYN filter
>   net/ixgbe: store flow director filter
>   net/ixgbe: store L2 tunnel filter
>   net/ixgbe: restore n-tuple filter
>   net/ixgbe: restore ether type filter
>   net/ixgbe: restore TCP SYN filter
>   net/ixgbe: restore flow director filter
>   net/ixgbe: restore L2 tunnel filter
>   net/ixgbe: store and restore L2 tunnel configuration
>   net/ixgbe: flush all the filters
>   net/ixgbe: parse n-tuple filter
>   net/ixgbe: parse ethertype filter
>   net/ixgbe: parse TCP SYN filter
>   net/ixgbe: parse L2 tunnel filter
>   net/ixgbe: parse flow director filter
>   net/ixgbe: create consistent filter
>   net/ixgbe: destroy consistent filter
>   net/ixgbe: flush all the filter list
> 
>  drivers/net/ixgbe/Makefile       |    2 +
>  drivers/net/ixgbe/ixgbe_ethdev.c |  667 +++++++--
> drivers/net/ixgbe/ixgbe_ethdev.h |  203 ++-
>  drivers/net/ixgbe/ixgbe_fdir.c   |  407 ++++--
>  drivers/net/ixgbe/ixgbe_flow.c   | 2808
> ++++++++++++++++++++++++++++++++++++++
>  drivers/net/ixgbe/ixgbe_pf.c     |   26 +-
>  lib/librte_ether/rte_flow.h      |   48 +
>  7 files changed, 3950 insertions(+), 211 deletions(-)  create mode 100644
> drivers/net/ixgbe/ixgbe_flow.c
> 
Acked-by: Beilei Xing <beilei.xing@intel.com>
  
Ferruh Yigit Jan. 12, 2017, 3:43 p.m. UTC | #4
Hi Wei,

On 1/12/2017 9:17 AM, Wei Zhao wrote:
> The patches mainly finish following functions:
> 1) Store and restore all kinds of filters.
> 2) Parse all kinds of filters.
> 3) Add flow validate function.
> 4) Add flow create function.
> 5) Add flow destroy function.
> 6) Add flow flush function.

Overall patchset looks good, only major comment is adding more comments
on parse_filter functions for expected/valid rules.

You can keep Beilei's Ack for next version of the patchset.

Thanks,
ferruh
  
Wei Dai Jan. 13, 2017, 6:27 a.m. UTC | #5
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Xing, Beilei
> Sent: Thursday, January 12, 2017 7:39 PM
> To: Zhao1, Wei <wei.zhao1@intel.com>; dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v5 00/18] net/ixgbe: Consistent filter API
> 
> 
> > -----Original Message-----
> > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Wei Zhao
> > Sent: Thursday, January 12, 2017 5:17 PM
> > To: dev@dpdk.org
> > Subject: [dpdk-dev] [PATCH v5 00/18] net/ixgbe: Consistent filter API
> >
> > The patches mainly finish following functions:
> > 1) Store and restore all kinds of filters.
> > 2) Parse all kinds of filters.
> > 3) Add flow validate function.
> > 4) Add flow create function.
> > 5) Add flow destroy function.
> > 6) Add flow flush function.
> >
> > v2 changes:
> >  fix git log error
> >  Modify some function call relationship  Change return value type of
> > all parse flow functions  Update error info for all flow ops  Add
> > ixgbe_filterlist_flush to flush flows and rules created
> >
> > v3 change:
> >  add new file ixgbe_flow.c to store generic API parser related
> > functions  add more comment about pattern and action rules  add attr
> > check in parser functions  change struct name ixgbe_flow to rte_flow
> > change SYN to TCP SYN  change to use memset initizlize struct
> > ixgbe_filter_info  break down filter uninit process to 3 indepedent
> > functions in eth_ixgbe_dev_uninit() change struct rte_flow_item_nvgre
> > definition  change struct rte_flow_item_e_tag definition  fix one bug
> > in function ixgbe_dev_filter_ctrl add goto in function
> > ixgbe_flow_create  delete some useless initialization eliminate some
> > git log check warning
> >
> > v4 change:
> >  fix some check patch warning
> >
> > v5 change:
> >  fix some git log warning
> >
> > zhao wei (18):
> >   net/ixgbe: store TCP SYN filter
> >   net/ixgbe: store flow director filter
> >   net/ixgbe: store L2 tunnel filter
> >   net/ixgbe: restore n-tuple filter
> >   net/ixgbe: restore ether type filter
> >   net/ixgbe: restore TCP SYN filter
> >   net/ixgbe: restore flow director filter
> >   net/ixgbe: restore L2 tunnel filter
> >   net/ixgbe: store and restore L2 tunnel configuration
> >   net/ixgbe: flush all the filters
> >   net/ixgbe: parse n-tuple filter
> >   net/ixgbe: parse ethertype filter
> >   net/ixgbe: parse TCP SYN filter
> >   net/ixgbe: parse L2 tunnel filter
> >   net/ixgbe: parse flow director filter
> >   net/ixgbe: create consistent filter
> >   net/ixgbe: destroy consistent filter
> >   net/ixgbe: flush all the filter list
> >
> >  drivers/net/ixgbe/Makefile       |    2 +
> >  drivers/net/ixgbe/ixgbe_ethdev.c |  667 +++++++--
> > drivers/net/ixgbe/ixgbe_ethdev.h |  203 ++-
> >  drivers/net/ixgbe/ixgbe_fdir.c   |  407 ++++--
> >  drivers/net/ixgbe/ixgbe_flow.c   | 2808
> > ++++++++++++++++++++++++++++++++++++++
> >  drivers/net/ixgbe/ixgbe_pf.c     |   26 +-
> >  lib/librte_ether/rte_flow.h      |   48 +
> >  7 files changed, 3950 insertions(+), 211 deletions(-)  create mode
> > 100644 drivers/net/ixgbe/ixgbe_flow.c
> >
> Acked-by: Beilei Xing <beilei.xing@intel.com>
Acked-by: Wei Dai <wei.dai@intel.com>
  
Zhao1, Wei Jan. 13, 2017, 8:12 a.m. UTC | #6
The patches mainly finish following functions:
1) Store and restore all kinds of filters.
2) Parse all kinds of filters.
3) Add flow validate function.
4) Add flow create function.
5) Add flow destroy function.
6) Add flow flush function.

v2 changes:
 fix git log error
 Modify some function call relationship
 Change return value type of all parse flow functions
 Update error info for all flow ops
 Add ixgbe_filterlist_flush to flush flows and rules created

v3 change:
 add new file ixgbe_flow.c to store generic API parser related functions
 add more comment about pattern and action rules
 add attr check in parser functions
 change struct name ixgbe_flow to rte_flow
 change SYN to TCP SYN
 change to use memset initizlize struct ixgbe_filter_info
 break down filter uninit process to 3 indepedent functions in eth_ixgbe_dev_uninit()
 change struct rte_flow_item_nvgre definition
 change struct rte_flow_item_e_tag definition
 fix one bug in function ixgbe_dev_filter_ctrl
 add goto in function ixgbe_flow_create
 delete some useless initialization 
 eliminate some git log check warning

v4 change:
 fix some check patch warning

v5 change:
 fix some git log warning

v6 change:
 add more comments on pattern rule example, supply the usage of spec
 last and mask

zhao wei (18):
  net/ixgbe: store TCP SYN filter
  net/ixgbe: store flow director filter
  net/ixgbe: store L2 tunnel filter
  net/ixgbe: restore n-tuple filter
  net/ixgbe: restore ether type filter
  net/ixgbe: restore TCP SYN filter
  net/ixgbe: restore flow director filter
  net/ixgbe: restore L2 tunnel filter
  net/ixgbe: store and restore L2 tunnel configuration
  net/ixgbe: flush all the filters
  net/ixgbe: parse n-tuple filter
  net/ixgbe: parse ethertype filter
  net/ixgbe: parse TCP SYN filter
  net/ixgbe: parse L2 tunnel filter
  net/ixgbe: parse flow director filter
  net/ixgbe: create consistent filter
  net/ixgbe: destroy consistent filter
  net/ixgbe: flush all the filter list

 drivers/net/ixgbe/Makefile       |    2 +
 drivers/net/ixgbe/ixgbe_ethdev.c |  667 +++++++--
 drivers/net/ixgbe/ixgbe_ethdev.h |  203 ++-
 drivers/net/ixgbe/ixgbe_fdir.c   |  407 ++++--
 drivers/net/ixgbe/ixgbe_flow.c   | 2878 ++++++++++++++++++++++++++++++++++++++
 drivers/net/ixgbe/ixgbe_pf.c     |   26 +-
 lib/librte_ether/rte_flow.h      |   48 +
 7 files changed, 4020 insertions(+), 211 deletions(-)
 create mode 100644 drivers/net/ixgbe/ixgbe_flow.c

Acked-by: Beilei Xing <beilei.xing@intel.com>
Acked-by: Wei Dai <wei.dai@intel.com>
  
Ferruh Yigit Jan. 13, 2017, 3:54 p.m. UTC | #7
On 1/13/2017 8:12 AM, Wei Zhao wrote:
> The patches mainly finish following functions:
> 1) Store and restore all kinds of filters.
> 2) Parse all kinds of filters.
> 3) Add flow validate function.
> 4) Add flow create function.
> 5) Add flow destroy function.
> 6) Add flow flush function.
> 
<...>
> 
> zhao wei (18):
>   net/ixgbe: store TCP SYN filter
>   net/ixgbe: store flow director filter
>   net/ixgbe: store L2 tunnel filter
>   net/ixgbe: restore n-tuple filter
>   net/ixgbe: restore ether type filter
>   net/ixgbe: restore TCP SYN filter
>   net/ixgbe: restore flow director filter
>   net/ixgbe: restore L2 tunnel filter
>   net/ixgbe: store and restore L2 tunnel configuration
>   net/ixgbe: flush all the filters
>   net/ixgbe: parse n-tuple filter
>   net/ixgbe: parse ethertype filter
>   net/ixgbe: parse TCP SYN filter
>   net/ixgbe: parse L2 tunnel filter
>   net/ixgbe: parse flow director filter
>   net/ixgbe: create consistent filter
>   net/ixgbe: destroy consistent filter
>   net/ixgbe: flush all the filter list
> 
<...>
> 
> Acked-by: Beilei Xing <beilei.xing@intel.com>
> Acked-by: Wei Dai <wei.dai@intel.com>
> 

Series applied to dpdk-next-net/master, thanks.
  
Wenzhuo Lu Jan. 15, 2017, 2:44 a.m. UTC | #8
Hi Ferruh,

> Series applied to dpdk-next-net/master, thanks.
Great, thanks for applying this patch set!
  
Thomas Monjalon Jan. 18, 2017, 11:04 a.m. UTC | #9
2017-01-13 15:54, Ferruh Yigit:
> On 1/13/2017 8:12 AM, Wei Zhao wrote:
> > zhao wei (18):
> >   net/ixgbe: store TCP SYN filter
> >   net/ixgbe: store flow director filter
> >   net/ixgbe: store L2 tunnel filter
> >   net/ixgbe: restore n-tuple filter
> >   net/ixgbe: restore ether type filter
> >   net/ixgbe: restore TCP SYN filter
> >   net/ixgbe: restore flow director filter
> >   net/ixgbe: restore L2 tunnel filter
> >   net/ixgbe: store and restore L2 tunnel configuration
> >   net/ixgbe: flush all the filters
> >   net/ixgbe: parse n-tuple filter
> >   net/ixgbe: parse ethertype filter
> >   net/ixgbe: parse TCP SYN filter
> >   net/ixgbe: parse L2 tunnel filter
> >   net/ixgbe: parse flow director filter
> >   net/ixgbe: create consistent filter
> >   net/ixgbe: destroy consistent filter
> >   net/ixgbe: flush all the filter list
> > 
> <...>
> > 
> > Acked-by: Beilei Xing <beilei.xing@intel.com>
> > Acked-by: Wei Dai <wei.dai@intel.com>
> > 
> 
> Series applied to dpdk-next-net/master, thanks.

There is a build issue:
patch 2/18 uses rte_hash
which is linked to ixgbe only in patch 10/18.

I am fixing it in mainline.
  

Patch

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index b7ddd4f..719eddd 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -1272,10 +1272,12 @@  eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev)
 	/* enable support intr */
 	ixgbe_enable_intr(eth_dev);
 
+	/* initialize filter info */
+	memset(filter_info, 0,
+	       sizeof(struct ixgbe_filter_info));
+
 	/* initialize 5tuple filter list */
 	TAILQ_INIT(&filter_info->fivetuple_list);
-	memset(filter_info->fivetuple_mask, 0,
-	       sizeof(uint32_t) * IXGBE_5TUPLE_ARRAY_SIZE);
 
 	return 0;
 }
@@ -5603,15 +5605,18 @@  ixgbe_syn_filter_set(struct rte_eth_dev *dev,
 			bool add)
 {
 	struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+	struct ixgbe_filter_info *filter_info =
+		IXGBE_DEV_PRIVATE_TO_FILTER_INFO(dev->data->dev_private);
+	uint32_t syn_info;
 	uint32_t synqf;
 
 	if (filter->queue >= IXGBE_MAX_RX_QUEUE_NUM)
 		return -EINVAL;
 
-	synqf = IXGBE_READ_REG(hw, IXGBE_SYNQF);
+	syn_info = filter_info->syn_info;
 
 	if (add) {
-		if (synqf & IXGBE_SYN_FILTER_ENABLE)
+		if (syn_info & IXGBE_SYN_FILTER_ENABLE)
 			return -EINVAL;
 		synqf = (uint32_t)(((filter->queue << IXGBE_SYN_FILTER_QUEUE_SHIFT) &
 			IXGBE_SYN_FILTER_QUEUE) | IXGBE_SYN_FILTER_ENABLE);
@@ -5621,10 +5626,13 @@  ixgbe_syn_filter_set(struct rte_eth_dev *dev,
 		else
 			synqf &= ~IXGBE_SYN_FILTER_SYNQFP;
 	} else {
-		if (!(synqf & IXGBE_SYN_FILTER_ENABLE))
+		synqf = IXGBE_READ_REG(hw, IXGBE_SYNQF);
+		if (!(syn_info & IXGBE_SYN_FILTER_ENABLE))
 			return -ENOENT;
 		synqf &= ~(IXGBE_SYN_FILTER_QUEUE | IXGBE_SYN_FILTER_ENABLE);
 	}
+
+	filter_info->syn_info = synqf;
 	IXGBE_WRITE_REG(hw, IXGBE_SYNQF, synqf);
 	IXGBE_WRITE_FLUSH(hw);
 	return 0;
diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h
index 69b276f..90a89ec 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.h
+++ b/drivers/net/ixgbe/ixgbe_ethdev.h
@@ -262,6 +262,8 @@  struct ixgbe_filter_info {
 	/* Bit mask for every used 5tuple filter */
 	uint32_t fivetuple_mask[IXGBE_5TUPLE_ARRAY_SIZE];
 	struct ixgbe_5tuple_filter_list fivetuple_list;
+	/* store the SYN filter info */
+	uint32_t syn_info;
 };
 
 /*