[dpdk-dev] [PATCH] doc: add new tables for rte flow items and actions support

Subsystems: the rest

32 messages, 5 authors, 2021-05-18 · open the first message on its own page

[dpdk-dev] [PATCH] doc: add new tables for rte flow items and actions support

From: Asaf Penso <hidden>
Date: 2021-02-04 17:05:37

In http://doc.dpdk.org/guides/nics/overview.html, table 1.1 lists all
supported features.
It has a single line for "Flow API" that refers to rte_flow support.
rte_flow is composed of many items and actions that are not expressed in
this single line.

The following new tables are suggested:
1. rte_flow items
2. rte_flow actions
3. rte_flow shared actions

Signed-off-by: Asaf Penso <redacted>
---
 doc/guides/conf.py                   |  23 +++++---
 doc/guides/nics/features/default.ini | 109 +++++++++++++++++++++++++++++++++++
 doc/guides/nics/features/mlx4.ini    |  15 +++++
 doc/guides/nics/features/mlx5.ini    |  70 ++++++++++++++++++++++
 doc/guides/nics/overview.rst         |  11 ++++
 5 files changed, 221 insertions(+), 7 deletions(-)
diff --git a/doc/guides/conf.py b/doc/guides/conf.py
index aceeb62..149507a 100644
--- a/doc/guides/conf.py
+++ b/doc/guides/conf.py
@@ -217,14 +217,8 @@ def generate_overview_table(output_filename, table_id, section, table_name, titl
         # Initialize the dict with the default.ini value.
         ini_data[ini_filename] = valid_features.copy()
 
-        # Check for a valid ini section.
+        # Check for a section.
         if not config.has_section(section):
-            print("{}: File '{}' has no [{}] secton".format(warning,
-                                                            ini_filename,
-                                                            section),
-                                                            file=stderr)
-            if stop_on_error:
-                raise Exception('Warning is treated as a failure')
             continue
 
         # Check for valid features names.
@@ -380,6 +374,21 @@ def setup(app):
                             'Features',
                             'Features availability in networking drivers',
                             'Feature')
+    table_file = dirname(__file__) + '/nics/rte_flow_items_table.txt'
+    generate_overview_table(table_file, 2,
+                            'rte_flow items',
+                            'rte_flow items features availability in networking drivers',
+                            'Items')
+    table_file = dirname(__file__) + '/nics/rte_flow_actions_table.txt'
+    generate_overview_table(table_file, 3,
+                            'rte_flow actions',
+                            'rte_flow actions features availability in networking drivers',
+                            'Actions')
+    table_file = dirname(__file__) + '/nics/rte_flow_shared_actions_table.txt'
+    generate_overview_table(table_file, 4,
+                            'rte_flow shared actions',
+                            'rte_flow shared actions features availability in networking drivers',
+                            'Actions')
     table_file = dirname(__file__) + '/cryptodevs/overview_feature_table.txt'
     generate_overview_table(table_file, 1,
                             'Features',
diff --git a/doc/guides/nics/features/default.ini b/doc/guides/nics/features/default.ini
index 8d89278..3f2b8cf 100644
--- a/doc/guides/nics/features/default.ini
+++ b/doc/guides/nics/features/default.ini
@@ -76,3 +76,112 @@ x86-64               =
 Usage doc            =
 Design doc           =
 Perf doc             =
+
+[rte_flow items]
+any                  =
+raw                  =
+eth                  =
+vlan                 =
+ipv4                 =
+ipv6                 =
+icmp                 =
+udp                  =
+tcp                  =
+sctp                 =
+vxlan                =
+e_tag                =
+nvgre                =
+mpls                 =
+gre                  =
+gre_key              =
+fuzzy                =
+gtp                  =
+gtpc                 =
+gtpu                 =
+esp                  =
+geneve               =
+vxlan-gpe            =
+arp_eth_ipv4         =
+ipv6_ext             =
+ipv6_frag_ext        =
+icmp6                =
+icmp6_nd_ns          =
+icmp6_nd_na          =
+icmp6_nd_opt         =
+icmp6_nd_opt_sla_eth =
+icmp6_nd_opt_tla_eth =
+meta                 =
+gtp_psc              =
+pppoes               =
+pppoed               =
+pppoe_proto_id       =
+nsh                  =
+igmp                 =
+ah                   =
+higig2               =
+l2tpv3oip            =
+pfcp                 =
+ecpri                =
+
+[rte_flow actions]
+end                  =
+void                 =
+passthru             =
+jump                 =
+mark                 =
+flag                 =
+queue                =
+drop                 =
+count                =
+rss                  =
+pf                   =
+vf                   =
+phy_port             =
+port_id              =
+meter                =
+security             =
+of_set_mpls_ttl      =
+of_dec_mpls_ttl      =
+of_set_nw_ttl        =
+of_dec_nw_ttl        =
+of_copy_ttl_out      =
+of_copy_ttl_in       =
+of_pop_vlan          =
+of_push_vlan         =
+of_set_vlan_vid      =
+of_set_vlan_pcp      =
+of_pop_mpls          =
+of_push_mpls         =
+vxlan_encap          =
+vxlan_decap          =
+nvgre_encap          =
+nvgre_decap          =
+raw_encap            =
+raw_decap            =
+set_ipv4_src         =
+set_ipv4_dst         =
+set_ipv6_src         =
+set_ipv6_dst         =
+set_tp_src           =
+set_tp_dst           =
+mac_swap             =
+dec_ttl              =
+set_ttl              =
+set_mac_src          =
+set_mac_dst          =
+inc_tcp_seq          =
+dec_tcp_seq          =
+inc_tcp_ack          =
+dec_tcp_ack          =
+set_tag              =
+set_meta             =
+set_ipv4_dscp        =
+set_ipv6_dscp        =
+age                  =
+sample               =
+shared               =
+modify_field         =
+
+[rte_flow shared actions]
+age                  =
+rss                  =
diff --git a/doc/guides/nics/features/mlx4.ini b/doc/guides/nics/features/mlx4.ini
index ebb9ccf..5e352f5 100644
--- a/doc/guides/nics/features/mlx4.ini
+++ b/doc/guides/nics/features/mlx4.ini
@@ -38,3 +38,18 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+vlan                 = Y
+ipv4                 = Y
+ipv6                 = Y
+udp                  = Y
+tcp                  = Y
+
+[rte_flow actions]
+end                  = Y
+void                 = Y
+queue                = Y
+drop                 = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/mlx5.ini b/doc/guides/nics/features/mlx5.ini
index ddd131d..962650f 100644
--- a/doc/guides/nics/features/mlx5.ini
+++ b/doc/guides/nics/features/mlx5.ini
@@ -52,3 +52,73 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+vlan                 = Y
+ipv4                 = Y
+ipv6                 = Y
+icmp                 = Y
+udp                  = Y
+tcp                  = Y
+vxlan                = Y
+nvgre                = Y
+mpls                 = Y
+gre                  = Y
+gre_key              = Y
+gtp                  = Y
+geneve               = Y
+vxlan-gpe            = Y
+ipv6_ext             = Y
+ipv6_frag_ext        = Y
+icmp6                = Y
+meta                 = Y
+gtp_psc              = Y
+ecpri                = Y
+
+[rte_flow actions]
+end                  = Y
+void                 = Y
+jump                 = Y
+mark                 = Y
+flag                 = Y
+queue                = Y
+drop                 = Y
+count                = Y
+rss                  = Y
+port_id              = Y
+meter                = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_vid      = Y
+of_set_vlan_pcp      = Y
+vxlan_encap          = Y
+vxlan_decap          = Y
+raw_encap            = Y
+raw_decap            = Y
+set_ipv4_src         = Y
+set_ipv4_dst         = Y
+set_ipv6_src         = Y
+set_ipv6_dst         = Y
+set_tp_src           = Y
+set_tp_dst           = Y
+dec_ttl              = Y
+set_ttl              = Y
+set_mac_src          = Y
+set_mac_dst          = Y
+inc_tcp_seq          = Y
+dec_tcp_seq          = Y
+inc_tcp_ack          = Y
+dec_tcp_ack          = Y
+set_tag              = Y
+set_meta             = Y
+set_ipv4_dscp        = Y
+set_ipv6_dscp        = Y
+age                  = Y
+sample               = Y
+shared               = S
+modify_field         = Y
+
+[rte_flow shared actions]
+age                  = Y
+rss                  = Y
diff --git a/doc/guides/nics/overview.rst b/doc/guides/nics/overview.rst
index 20cd52b..cded041 100644
--- a/doc/guides/nics/overview.rst
+++ b/doc/guides/nics/overview.rst
@@ -28,7 +28,18 @@ More details about features can be found in :doc:`features`.
 
 .. include:: overview_table.txt
 
+.. include:: rte_flow_items_table.txt
+
+.. include:: rte_flow_actions_table.txt
+
+.. include:: rte_flow_shared_actions_table.txt
+
 .. Note::
 
    Features marked with "P" are partially supported. Refer to the appropriate
    NIC guide in the following sections for details.
+
+.. Note::
+
+   rte_flow action shared that is marked with "S" means that some or all
+   shared action are supported and more details can be found in table 1.4.
-- 
1.8.3.1

Re: [dpdk-dev] [PATCH] doc: add new tables for rte flow items and actions support

From: Thomas Monjalon <hidden>
Date: 2021-02-04 22:09:30

04/02/2021 18:05, Asaf Penso:
In http://doc.dpdk.org/guides/nics/overview.html, table 1.1 lists all
supported features.
It has a single line for "Flow API" that refers to rte_flow support.
rte_flow is composed of many items and actions that are not expressed in
this single line.

The following new tables are suggested:
1. rte_flow items
2. rte_flow actions
3. rte_flow shared actions

Signed-off-by: Asaf Penso <redacted>
---
 doc/guides/conf.py                   |  23 +++++---
 doc/guides/nics/features/default.ini | 109 +++++++++++++++++++++++++++++++++++
 doc/guides/nics/features/mlx4.ini    |  15 +++++
 doc/guides/nics/features/mlx5.ini    |  70 ++++++++++++++++++++++
 doc/guides/nics/overview.rst         |  11 ++++
 5 files changed, 221 insertions(+), 7 deletions(-)
After running git status I remembered the generated .txt files
must be added in .gitignore.

[...]
+[rte_flow actions]
+end                  = Y
+void                 = Y
+jump                 = Y
+mark                 = Y
+flag                 = Y
+queue                = Y
+drop                 = Y
+count                = Y
+rss                  = Y
+port_id              = Y
+meter                = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_vid      = Y
+of_set_vlan_pcp      = Y
+vxlan_encap          = Y
+vxlan_decap          = Y
+raw_encap            = Y
+raw_decap            = Y
+set_ipv4_src         = Y
+set_ipv4_dst         = Y
+set_ipv6_src         = Y
+set_ipv6_dst         = Y
+set_tp_src           = Y
+set_tp_dst           = Y
+dec_ttl              = Y
+set_ttl              = Y
+set_mac_src          = Y
+set_mac_dst          = Y
+inc_tcp_seq          = Y
+dec_tcp_seq          = Y
+inc_tcp_ack          = Y
+dec_tcp_ack          = Y
+set_tag              = Y
+set_meta             = Y
+set_ipv4_dscp        = Y
+set_ipv6_dscp        = Y
+age                  = Y
+sample               = Y
+shared               = S
+modify_field         = Y
I suggest not having "shared" in above table but marking "age" and "rss"
as shared with "S" in above table.
+[rte_flow shared actions]
+age                  = Y
+rss                  = Y

Re: [dpdk-dev] [PATCH] doc: add new tables for rte flow items and actions support

From: Asaf Penso <hidden>
Date: 2021-02-07 08:46:36

-----Original Message-----
From: Thomas Monjalon <redacted>
Sent: Friday, February 5, 2021 12:09 AM
To: Asaf Penso <redacted>
Cc: dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH] doc: add new tables for rte flow items and
actions support

04/02/2021 18:05, Asaf Penso:
quoted
In http://doc.dpdk.org/guides/nics/overview.html, table 1.1 lists all
supported features.
It has a single line for "Flow API" that refers to rte_flow support.
rte_flow is composed of many items and actions that are not expressed
in this single line.

The following new tables are suggested:
1. rte_flow items
2. rte_flow actions
3. rte_flow shared actions

Signed-off-by: Asaf Penso <redacted>
---
 doc/guides/conf.py                   |  23 +++++---
 doc/guides/nics/features/default.ini | 109
+++++++++++++++++++++++++++++++++++
quoted
 doc/guides/nics/features/mlx4.ini    |  15 +++++
 doc/guides/nics/features/mlx5.ini    |  70 ++++++++++++++++++++++
 doc/guides/nics/overview.rst         |  11 ++++
 5 files changed, 221 insertions(+), 7 deletions(-)
After running git status I remembered the generated .txt files must be added
in .gitignore.
Thanks, will update .gitignore file in v2.
[...]
quoted
+[rte_flow actions]
+end                  = Y
+void                 = Y
+jump                 = Y
+mark                 = Y
+flag                 = Y
+queue                = Y
+drop                 = Y
+count                = Y
+rss                  = Y
+port_id              = Y
+meter                = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_vid      = Y
+of_set_vlan_pcp      = Y
+vxlan_encap          = Y
+vxlan_decap          = Y
+raw_encap            = Y
+raw_decap            = Y
+set_ipv4_src         = Y
+set_ipv4_dst         = Y
+set_ipv6_src         = Y
+set_ipv6_dst         = Y
+set_tp_src           = Y
+set_tp_dst           = Y
+dec_ttl              = Y
+set_ttl              = Y
+set_mac_src          = Y
+set_mac_dst          = Y
+inc_tcp_seq          = Y
+dec_tcp_seq          = Y
+inc_tcp_ack          = Y
+dec_tcp_ack          = Y
+set_tag              = Y
+set_meta             = Y
+set_ipv4_dscp        = Y
+set_ipv6_dscp        = Y
+age                  = Y
+sample               = Y
+shared               = S
+modify_field         = Y
I suggest not having "shared" in above table but marking "age" and "rss"
as shared with "S" in above table.
 
In this case, how would you separate, for example, between support of age and shared age? There are different actions.
quoted
+[rte_flow shared actions]
+age                  = Y
+rss                  = Y

[dpdk-dev] [PATCH v2] doc: add new tables for rte flow items and actions support

From: Asaf Penso <hidden>
Date: 2021-02-07 09:28:03

In http://doc.dpdk.org/guides/nics/overview.html, table 1.1 lists all
supported features.
It has a single line for "Flow API" that refers to rte_flow support.
rte_flow is composed of many items and actions that are not expressed in
this single line.

The following new tables are suggested:
1. rte_flow items
2. rte_flow actions
3. rte_flow shared actions

Also, since each table needs a new section in the pmd ini
file that might not be relevant for all pmds, the print
error message for missing section in conf.py is removed.

Signed-off-by: Asaf Penso <redacted>
---
v2: 
update commit message
add .txt to .gitignore
---
 .gitignore                           |   3 +
 doc/guides/conf.py                   |  23 +++++---
 doc/guides/nics/features/default.ini | 109 +++++++++++++++++++++++++++++++++++
 doc/guides/nics/features/mlx4.ini    |  15 +++++
 doc/guides/nics/features/mlx5.ini    |  70 ++++++++++++++++++++++
 doc/guides/nics/overview.rst         |  11 ++++
 6 files changed, 224 insertions(+), 7 deletions(-)
diff --git a/.gitignore b/.gitignore
index f73d93c..c43fa7b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,9 @@
 
 # ignore generated documentation tables
 doc/guides/nics/overview_table.txt
+doc/guides/nics/rte_flow_actions_table.txt
+doc/guides/nics/rte_flow_items_table.txt
+doc/guides/nics/rte_flow_shared_actions_table.txt
 doc/guides/cryptodevs/overview_feature_table.txt
 doc/guides/cryptodevs/overview_cipher_table.txt
 doc/guides/cryptodevs/overview_auth_table.txt
diff --git a/doc/guides/conf.py b/doc/guides/conf.py
index aceeb62..149507a 100644
--- a/doc/guides/conf.py
+++ b/doc/guides/conf.py
@@ -217,14 +217,8 @@ def generate_overview_table(output_filename, table_id, section, table_name, titl
         # Initialize the dict with the default.ini value.
         ini_data[ini_filename] = valid_features.copy()
 
-        # Check for a valid ini section.
+        # Check for a section.
         if not config.has_section(section):
-            print("{}: File '{}' has no [{}] secton".format(warning,
-                                                            ini_filename,
-                                                            section),
-                                                            file=stderr)
-            if stop_on_error:
-                raise Exception('Warning is treated as a failure')
             continue
 
         # Check for valid features names.
@@ -380,6 +374,21 @@ def setup(app):
                             'Features',
                             'Features availability in networking drivers',
                             'Feature')
+    table_file = dirname(__file__) + '/nics/rte_flow_items_table.txt'
+    generate_overview_table(table_file, 2,
+                            'rte_flow items',
+                            'rte_flow items features availability in networking drivers',
+                            'Items')
+    table_file = dirname(__file__) + '/nics/rte_flow_actions_table.txt'
+    generate_overview_table(table_file, 3,
+                            'rte_flow actions',
+                            'rte_flow actions features availability in networking drivers',
+                            'Actions')
+    table_file = dirname(__file__) + '/nics/rte_flow_shared_actions_table.txt'
+    generate_overview_table(table_file, 4,
+                            'rte_flow shared actions',
+                            'rte_flow shared actions features availability in networking drivers',
+                            'Actions')
     table_file = dirname(__file__) + '/cryptodevs/overview_feature_table.txt'
     generate_overview_table(table_file, 1,
                             'Features',
diff --git a/doc/guides/nics/features/default.ini b/doc/guides/nics/features/default.ini
index 8046bd1..0a948a4 100644
--- a/doc/guides/nics/features/default.ini
+++ b/doc/guides/nics/features/default.ini
@@ -77,3 +77,112 @@ x86-64               =
 Usage doc            =
 Design doc           =
 Perf doc             =
+
+[rte_flow items]
+any                  =
+raw                  =
+eth                  =
+vlan                 =
+ipv4                 =
+ipv6                 =
+icmp                 =
+udp                  =
+tcp                  =
+sctp                 =
+vxlan                =
+e_tag                =
+nvgre                =
+mpls                 =
+gre                  =
+gre_key              =
+fuzzy                =
+gtp                  =
+gtpc                 =
+gtpu                 =
+esp                  =
+geneve               =
+vxlan-gpe            =
+arp_eth_ipv4         =
+ipv6_ext             =
+ipv6_frag_ext        =
+icmp6                =
+icmp6_nd_ns          =
+icmp6_nd_na          =
+icmp6_nd_opt         =
+icmp6_nd_opt_sla_eth =
+icmp6_nd_opt_tla_eth =
+meta                 =
+gtp_psc              =
+pppoes               =
+pppoed               =
+pppoe_proto_id       =
+nsh                  =
+igmp                 =
+ah                   =
+higig2               =
+l2tpv3oip            =
+pfcp                 =
+ecpri                =
+
+[rte_flow actions]
+end                  =
+void                 =
+passthru             =
+jump                 =
+mark                 =
+flag                 =
+queue                =
+drop                 =
+count                =
+rss                  =
+pf                   =
+vf                   =
+phy_port             =
+port_id              =
+meter                =
+security             =
+of_set_mpls_ttl      =
+of_dec_mpls_ttl      =
+of_set_nw_ttl        =
+of_dec_nw_ttl        =
+of_copy_ttl_out      =
+of_copy_ttl_in       =
+of_pop_vlan          =
+of_push_vlan         =
+of_set_vlan_vid      =
+of_set_vlan_pcp      =
+of_pop_mpls          =
+of_push_mpls         =
+vxlan_encap          =
+vxlan_decap          =
+nvgre_encap          =
+nvgre_decap          =
+raw_encap            =
+raw_decap            =
+set_ipv4_src         =
+set_ipv4_dst         =
+set_ipv6_src         =
+set_ipv6_dst         =
+set_tp_src           =
+set_tp_dst           =
+mac_swap             =
+dec_ttl              =
+set_ttl              =
+set_mac_src          =
+set_mac_dst          =
+inc_tcp_seq          =
+dec_tcp_seq          =
+inc_tcp_ack          =
+dec_tcp_ack          =
+set_tag              =
+set_meta             =
+set_ipv4_dscp        =
+set_ipv6_dscp        =
+age                  =
+sample               =
+shared               =
+modify_field         =
+
+[rte_flow shared actions]
+age                  =
+rss                  =
diff --git a/doc/guides/nics/features/mlx4.ini b/doc/guides/nics/features/mlx4.ini
index ebb9ccf..5e352f5 100644
--- a/doc/guides/nics/features/mlx4.ini
+++ b/doc/guides/nics/features/mlx4.ini
@@ -38,3 +38,18 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+vlan                 = Y
+ipv4                 = Y
+ipv6                 = Y
+udp                  = Y
+tcp                  = Y
+
+[rte_flow actions]
+end                  = Y
+void                 = Y
+queue                = Y
+drop                 = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/mlx5.ini b/doc/guides/nics/features/mlx5.ini
index ddd131d..962650f 100644
--- a/doc/guides/nics/features/mlx5.ini
+++ b/doc/guides/nics/features/mlx5.ini
@@ -52,3 +52,73 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+vlan                 = Y
+ipv4                 = Y
+ipv6                 = Y
+icmp                 = Y
+udp                  = Y
+tcp                  = Y
+vxlan                = Y
+nvgre                = Y
+mpls                 = Y
+gre                  = Y
+gre_key              = Y
+gtp                  = Y
+geneve               = Y
+vxlan-gpe            = Y
+ipv6_ext             = Y
+ipv6_frag_ext        = Y
+icmp6                = Y
+meta                 = Y
+gtp_psc              = Y
+ecpri                = Y
+
+[rte_flow actions]
+end                  = Y
+void                 = Y
+jump                 = Y
+mark                 = Y
+flag                 = Y
+queue                = Y
+drop                 = Y
+count                = Y
+rss                  = Y
+port_id              = Y
+meter                = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_vid      = Y
+of_set_vlan_pcp      = Y
+vxlan_encap          = Y
+vxlan_decap          = Y
+raw_encap            = Y
+raw_decap            = Y
+set_ipv4_src         = Y
+set_ipv4_dst         = Y
+set_ipv6_src         = Y
+set_ipv6_dst         = Y
+set_tp_src           = Y
+set_tp_dst           = Y
+dec_ttl              = Y
+set_ttl              = Y
+set_mac_src          = Y
+set_mac_dst          = Y
+inc_tcp_seq          = Y
+dec_tcp_seq          = Y
+inc_tcp_ack          = Y
+dec_tcp_ack          = Y
+set_tag              = Y
+set_meta             = Y
+set_ipv4_dscp        = Y
+set_ipv6_dscp        = Y
+age                  = Y
+sample               = Y
+shared               = S
+modify_field         = Y
+
+[rte_flow shared actions]
+age                  = Y
+rss                  = Y
diff --git a/doc/guides/nics/overview.rst b/doc/guides/nics/overview.rst
index 20cd52b..cded041 100644
--- a/doc/guides/nics/overview.rst
+++ b/doc/guides/nics/overview.rst
@@ -28,7 +28,18 @@ More details about features can be found in :doc:`features`.
 
 .. include:: overview_table.txt
 
+.. include:: rte_flow_items_table.txt
+
+.. include:: rte_flow_actions_table.txt
+
+.. include:: rte_flow_shared_actions_table.txt
+
 .. Note::
 
    Features marked with "P" are partially supported. Refer to the appropriate
    NIC guide in the following sections for details.
+
+.. Note::
+
+   rte_flow action shared that is marked with "S" means that some or all
+   shared action are supported and more details can be found in table 1.4.
-- 
1.8.3.1

Re: [dpdk-dev] [PATCH] doc: add new tables for rte flow items and actions support

From: Thomas Monjalon <hidden>
Date: 2021-02-07 09:44:58

07/02/2021 09:46, Asaf Penso:
From: Thomas Monjalon <redacted>
quoted
04/02/2021 18:05, Asaf Penso:
quoted
+age                  = Y
+sample               = Y
+shared               = S
+modify_field         = Y
I suggest not having "shared" in above table but marking "age" and "rss"
as shared with "S" in above table.
 
In this case, how would you separate, for example, between support of age and shared age? There are different actions.
If aged is supported, but not shared age, then "age = Y".
If shared age is supported, then "age = S".
I assume simple age is supported if shared age is.

[dpdk-dev] [PATCH v3] doc: add new tables for rte flow items and actions support

From: Asaf Penso <hidden>
Date: 2021-02-07 10:46:29

In http://doc.dpdk.org/guides/nics/overview.html, table 1.1 lists all
supported features.
It has a single line for "Flow API" that refers to rte_flow support.
rte_flow is composed of many items and actions that are not expressed in
this single line.

The following new tables are suggested:
1. rte_flow items
2. rte_flow actions
3. rte_flow shared actions

Also, since each table needs a new section in the pmd ini
file that might not be relevant for all pmds, the print
error message for missing section in conf.py is removed.

Signed-off-by: Asaf Penso <redacted>
---
v3:
remove the shared action table
update the note for "S" notation

v2: 
update commit message
add .txt to .gitignore
---
 .gitignore                           |   2 +
 doc/guides/conf.py                   |  18 +++---
 doc/guides/nics/features/default.ini | 104 +++++++++++++++++++++++++++++++++++
 doc/guides/nics/features/mlx4.ini    |  15 +++++
 doc/guides/nics/features/mlx5.ini    |  66 ++++++++++++++++++++++
 doc/guides/nics/overview.rst         |  10 ++++
 6 files changed, 208 insertions(+), 7 deletions(-)
diff --git a/.gitignore b/.gitignore
index f73d93c..b19c071 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,8 @@
 
 # ignore generated documentation tables
 doc/guides/nics/overview_table.txt
+doc/guides/nics/rte_flow_actions_table.txt
+doc/guides/nics/rte_flow_items_table.txt
 doc/guides/cryptodevs/overview_feature_table.txt
 doc/guides/cryptodevs/overview_cipher_table.txt
 doc/guides/cryptodevs/overview_auth_table.txt
diff --git a/doc/guides/conf.py b/doc/guides/conf.py
index aceeb62..4eea58f 100644
--- a/doc/guides/conf.py
+++ b/doc/guides/conf.py
@@ -217,14 +217,8 @@ def generate_overview_table(output_filename, table_id, section, table_name, titl
         # Initialize the dict with the default.ini value.
         ini_data[ini_filename] = valid_features.copy()
 
-        # Check for a valid ini section.
+        # Check for a section.
         if not config.has_section(section):
-            print("{}: File '{}' has no [{}] secton".format(warning,
-                                                            ini_filename,
-                                                            section),
-                                                            file=stderr)
-            if stop_on_error:
-                raise Exception('Warning is treated as a failure')
             continue
 
         # Check for valid features names.
@@ -380,6 +374,16 @@ def setup(app):
                             'Features',
                             'Features availability in networking drivers',
                             'Feature')
+    table_file = dirname(__file__) + '/nics/rte_flow_items_table.txt'
+    generate_overview_table(table_file, 2,
+                            'rte_flow items',
+                            'rte_flow items features availability in networking drivers',
+                            'Items')
+    table_file = dirname(__file__) + '/nics/rte_flow_actions_table.txt'
+    generate_overview_table(table_file, 3,
+                            'rte_flow actions',
+                            'rte_flow actions features availability in networking drivers',
+                            'Actions')
     table_file = dirname(__file__) + '/cryptodevs/overview_feature_table.txt'
     generate_overview_table(table_file, 1,
                             'Features',
diff --git a/doc/guides/nics/features/default.ini b/doc/guides/nics/features/default.ini
index 8046bd1..968aee3 100644
--- a/doc/guides/nics/features/default.ini
+++ b/doc/guides/nics/features/default.ini
@@ -77,3 +77,107 @@ x86-64               =
 Usage doc            =
 Design doc           =
 Perf doc             =
+
+[rte_flow items]
+any                  =
+raw                  =
+eth                  =
+vlan                 =
+ipv4                 =
+ipv6                 =
+icmp                 =
+udp                  =
+tcp                  =
+sctp                 =
+vxlan                =
+e_tag                =
+nvgre                =
+mpls                 =
+gre                  =
+gre_key              =
+fuzzy                =
+gtp                  =
+gtpc                 =
+gtpu                 =
+esp                  =
+geneve               =
+vxlan-gpe            =
+arp_eth_ipv4         =
+ipv6_ext             =
+ipv6_frag_ext        =
+icmp6                =
+icmp6_nd_ns          =
+icmp6_nd_na          =
+icmp6_nd_opt         =
+icmp6_nd_opt_sla_eth =
+icmp6_nd_opt_tla_eth =
+meta                 =
+gtp_psc              =
+pppoes               =
+pppoed               =
+pppoe_proto_id       =
+nsh                  =
+igmp                 =
+ah                   =
+higig2               =
+l2tpv3oip            =
+pfcp                 =
+ecpri                =
+
+[rte_flow actions]
+end                  =
+void                 =
+passthru             =
+jump                 =
+mark                 =
+flag                 =
+queue                =
+drop                 =
+count                =
+rss                  =
+pf                   =
+vf                   =
+phy_port             =
+port_id              =
+meter                =
+security             =
+of_set_mpls_ttl      =
+of_dec_mpls_ttl      =
+of_set_nw_ttl        =
+of_dec_nw_ttl        =
+of_copy_ttl_out      =
+of_copy_ttl_in       =
+of_pop_vlan          =
+of_push_vlan         =
+of_set_vlan_vid      =
+of_set_vlan_pcp      =
+of_pop_mpls          =
+of_push_mpls         =
+vxlan_encap          =
+vxlan_decap          =
+nvgre_encap          =
+nvgre_decap          =
+raw_encap            =
+raw_decap            =
+set_ipv4_src         =
+set_ipv4_dst         =
+set_ipv6_src         =
+set_ipv6_dst         =
+set_tp_src           =
+set_tp_dst           =
+mac_swap             =
+dec_ttl              =
+set_ttl              =
+set_mac_src          =
+set_mac_dst          =
+inc_tcp_seq          =
+dec_tcp_seq          =
+inc_tcp_ack          =
+dec_tcp_ack          =
+set_tag              =
+set_meta             =
+set_ipv4_dscp        =
+set_ipv6_dscp        =
+age                  =
+sample               =
+modify_field         =
diff --git a/doc/guides/nics/features/mlx4.ini b/doc/guides/nics/features/mlx4.ini
index ebb9ccf..5e352f5 100644
--- a/doc/guides/nics/features/mlx4.ini
+++ b/doc/guides/nics/features/mlx4.ini
@@ -38,3 +38,18 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+vlan                 = Y
+ipv4                 = Y
+ipv6                 = Y
+udp                  = Y
+tcp                  = Y
+
+[rte_flow actions]
+end                  = Y
+void                 = Y
+queue                = Y
+drop                 = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/mlx5.ini b/doc/guides/nics/features/mlx5.ini
index ddd131d..fcf934b 100644
--- a/doc/guides/nics/features/mlx5.ini
+++ b/doc/guides/nics/features/mlx5.ini
@@ -52,3 +52,69 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+vlan                 = Y
+ipv4                 = Y
+ipv6                 = Y
+icmp                 = Y
+udp                  = Y
+tcp                  = Y
+vxlan                = Y
+nvgre                = Y
+mpls                 = Y
+gre                  = Y
+gre_key              = Y
+gtp                  = Y
+geneve               = Y
+vxlan-gpe            = Y
+ipv6_ext             = Y
+ipv6_frag_ext        = Y
+icmp6                = Y
+meta                 = Y
+gtp_psc              = Y
+ecpri                = Y
+
+[rte_flow actions]
+end                  = Y
+void                 = Y
+jump                 = Y
+mark                 = Y
+flag                 = Y
+queue                = Y
+drop                 = Y
+count                = Y
+rss                  = S
+port_id              = Y
+meter                = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_vid      = Y
+of_set_vlan_pcp      = Y
+vxlan_encap          = Y
+vxlan_decap          = Y
+raw_encap            = Y
+raw_decap            = Y
+set_ipv4_src         = Y
+set_ipv4_dst         = Y
+set_ipv6_src         = Y
+set_ipv6_dst         = Y
+set_tp_src           = Y
+set_tp_dst           = Y
+dec_ttl              = Y
+set_ttl              = Y
+set_mac_src          = Y
+set_mac_dst          = Y
+inc_tcp_seq          = Y
+dec_tcp_seq          = Y
+inc_tcp_ack          = Y
+dec_tcp_ack          = Y
+set_tag              = Y
+set_meta             = Y
+set_ipv4_dscp        = Y
+set_ipv6_dscp        = Y
+age                  = S
+sample               = Y
+modify_field         = Y
+
diff --git a/doc/guides/nics/overview.rst b/doc/guides/nics/overview.rst
index 20cd52b..86b5718 100644
--- a/doc/guides/nics/overview.rst
+++ b/doc/guides/nics/overview.rst
@@ -28,7 +28,17 @@ More details about features can be found in :doc:`features`.
 
 .. include:: overview_table.txt
 
+.. include:: rte_flow_items_table.txt
+
+.. include:: rte_flow_actions_table.txt
+
 .. Note::
 
    Features marked with "P" are partially supported. Refer to the appropriate
    NIC guide in the following sections for details.
+
+.. Note::
+
+   rte_flow action that is marked with "S" means it is supported as shared
+   and non-shared action.
+
-- 
1.8.3.1

[dpdk-dev] [PATCH v4] doc: add new tables for rte flow items and actions support

From: Asaf Penso <hidden>
Date: 2021-02-07 10:52:16

In http://doc.dpdk.org/guides/nics/overview.html, table 1.1 lists all
supported features.
It has a single line for "Flow API" that refers to rte_flow support.
rte_flow is composed of many items and actions that are not expressed in
this single line.

The following new tables are suggested:
1. rte_flow items
2. rte_flow actions

Also, since each table needs a new section in the pmd ini
file that might not be relevant for all pmds, the print
error message for missing section in conf.py is removed.

Signed-off-by: Asaf Penso <redacted>
---
v4:
update commit message and remove the note about shared table

v3:
remove the shared action table
update the note for "S" notation

v2: 
update commit message
add .txt to .gitignore
---
 .gitignore                           |   2 +
 doc/guides/conf.py                   |  18 +++---
 doc/guides/nics/features/default.ini | 104 +++++++++++++++++++++++++++++++++++
 doc/guides/nics/features/mlx4.ini    |  15 +++++
 doc/guides/nics/features/mlx5.ini    |  66 ++++++++++++++++++++++
 doc/guides/nics/overview.rst         |  10 ++++
 6 files changed, 208 insertions(+), 7 deletions(-)
diff --git a/.gitignore b/.gitignore
index f73d93c..b19c071 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,8 @@
 
 # ignore generated documentation tables
 doc/guides/nics/overview_table.txt
+doc/guides/nics/rte_flow_actions_table.txt
+doc/guides/nics/rte_flow_items_table.txt
 doc/guides/cryptodevs/overview_feature_table.txt
 doc/guides/cryptodevs/overview_cipher_table.txt
 doc/guides/cryptodevs/overview_auth_table.txt
diff --git a/doc/guides/conf.py b/doc/guides/conf.py
index aceeb62..4eea58f 100644
--- a/doc/guides/conf.py
+++ b/doc/guides/conf.py
@@ -217,14 +217,8 @@ def generate_overview_table(output_filename, table_id, section, table_name, titl
         # Initialize the dict with the default.ini value.
         ini_data[ini_filename] = valid_features.copy()
 
-        # Check for a valid ini section.
+        # Check for a section.
         if not config.has_section(section):
-            print("{}: File '{}' has no [{}] secton".format(warning,
-                                                            ini_filename,
-                                                            section),
-                                                            file=stderr)
-            if stop_on_error:
-                raise Exception('Warning is treated as a failure')
             continue
 
         # Check for valid features names.
@@ -380,6 +374,16 @@ def setup(app):
                             'Features',
                             'Features availability in networking drivers',
                             'Feature')
+    table_file = dirname(__file__) + '/nics/rte_flow_items_table.txt'
+    generate_overview_table(table_file, 2,
+                            'rte_flow items',
+                            'rte_flow items features availability in networking drivers',
+                            'Items')
+    table_file = dirname(__file__) + '/nics/rte_flow_actions_table.txt'
+    generate_overview_table(table_file, 3,
+                            'rte_flow actions',
+                            'rte_flow actions features availability in networking drivers',
+                            'Actions')
     table_file = dirname(__file__) + '/cryptodevs/overview_feature_table.txt'
     generate_overview_table(table_file, 1,
                             'Features',
diff --git a/doc/guides/nics/features/default.ini b/doc/guides/nics/features/default.ini
index 8046bd1..968aee3 100644
--- a/doc/guides/nics/features/default.ini
+++ b/doc/guides/nics/features/default.ini
@@ -77,3 +77,107 @@ x86-64               =
 Usage doc            =
 Design doc           =
 Perf doc             =
+
+[rte_flow items]
+any                  =
+raw                  =
+eth                  =
+vlan                 =
+ipv4                 =
+ipv6                 =
+icmp                 =
+udp                  =
+tcp                  =
+sctp                 =
+vxlan                =
+e_tag                =
+nvgre                =
+mpls                 =
+gre                  =
+gre_key              =
+fuzzy                =
+gtp                  =
+gtpc                 =
+gtpu                 =
+esp                  =
+geneve               =
+vxlan-gpe            =
+arp_eth_ipv4         =
+ipv6_ext             =
+ipv6_frag_ext        =
+icmp6                =
+icmp6_nd_ns          =
+icmp6_nd_na          =
+icmp6_nd_opt         =
+icmp6_nd_opt_sla_eth =
+icmp6_nd_opt_tla_eth =
+meta                 =
+gtp_psc              =
+pppoes               =
+pppoed               =
+pppoe_proto_id       =
+nsh                  =
+igmp                 =
+ah                   =
+higig2               =
+l2tpv3oip            =
+pfcp                 =
+ecpri                =
+
+[rte_flow actions]
+end                  =
+void                 =
+passthru             =
+jump                 =
+mark                 =
+flag                 =
+queue                =
+drop                 =
+count                =
+rss                  =
+pf                   =
+vf                   =
+phy_port             =
+port_id              =
+meter                =
+security             =
+of_set_mpls_ttl      =
+of_dec_mpls_ttl      =
+of_set_nw_ttl        =
+of_dec_nw_ttl        =
+of_copy_ttl_out      =
+of_copy_ttl_in       =
+of_pop_vlan          =
+of_push_vlan         =
+of_set_vlan_vid      =
+of_set_vlan_pcp      =
+of_pop_mpls          =
+of_push_mpls         =
+vxlan_encap          =
+vxlan_decap          =
+nvgre_encap          =
+nvgre_decap          =
+raw_encap            =
+raw_decap            =
+set_ipv4_src         =
+set_ipv4_dst         =
+set_ipv6_src         =
+set_ipv6_dst         =
+set_tp_src           =
+set_tp_dst           =
+mac_swap             =
+dec_ttl              =
+set_ttl              =
+set_mac_src          =
+set_mac_dst          =
+inc_tcp_seq          =
+dec_tcp_seq          =
+inc_tcp_ack          =
+dec_tcp_ack          =
+set_tag              =
+set_meta             =
+set_ipv4_dscp        =
+set_ipv6_dscp        =
+age                  =
+sample               =
+modify_field         =
diff --git a/doc/guides/nics/features/mlx4.ini b/doc/guides/nics/features/mlx4.ini
index ebb9ccf..5e352f5 100644
--- a/doc/guides/nics/features/mlx4.ini
+++ b/doc/guides/nics/features/mlx4.ini
@@ -38,3 +38,18 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+vlan                 = Y
+ipv4                 = Y
+ipv6                 = Y
+udp                  = Y
+tcp                  = Y
+
+[rte_flow actions]
+end                  = Y
+void                 = Y
+queue                = Y
+drop                 = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/mlx5.ini b/doc/guides/nics/features/mlx5.ini
index ddd131d..fcf934b 100644
--- a/doc/guides/nics/features/mlx5.ini
+++ b/doc/guides/nics/features/mlx5.ini
@@ -52,3 +52,69 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+vlan                 = Y
+ipv4                 = Y
+ipv6                 = Y
+icmp                 = Y
+udp                  = Y
+tcp                  = Y
+vxlan                = Y
+nvgre                = Y
+mpls                 = Y
+gre                  = Y
+gre_key              = Y
+gtp                  = Y
+geneve               = Y
+vxlan-gpe            = Y
+ipv6_ext             = Y
+ipv6_frag_ext        = Y
+icmp6                = Y
+meta                 = Y
+gtp_psc              = Y
+ecpri                = Y
+
+[rte_flow actions]
+end                  = Y
+void                 = Y
+jump                 = Y
+mark                 = Y
+flag                 = Y
+queue                = Y
+drop                 = Y
+count                = Y
+rss                  = S
+port_id              = Y
+meter                = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_vid      = Y
+of_set_vlan_pcp      = Y
+vxlan_encap          = Y
+vxlan_decap          = Y
+raw_encap            = Y
+raw_decap            = Y
+set_ipv4_src         = Y
+set_ipv4_dst         = Y
+set_ipv6_src         = Y
+set_ipv6_dst         = Y
+set_tp_src           = Y
+set_tp_dst           = Y
+dec_ttl              = Y
+set_ttl              = Y
+set_mac_src          = Y
+set_mac_dst          = Y
+inc_tcp_seq          = Y
+dec_tcp_seq          = Y
+inc_tcp_ack          = Y
+dec_tcp_ack          = Y
+set_tag              = Y
+set_meta             = Y
+set_ipv4_dscp        = Y
+set_ipv6_dscp        = Y
+age                  = S
+sample               = Y
+modify_field         = Y
+
diff --git a/doc/guides/nics/overview.rst b/doc/guides/nics/overview.rst
index 20cd52b..86b5718 100644
--- a/doc/guides/nics/overview.rst
+++ b/doc/guides/nics/overview.rst
@@ -28,7 +28,17 @@ More details about features can be found in :doc:`features`.
 
 .. include:: overview_table.txt
 
+.. include:: rte_flow_items_table.txt
+
+.. include:: rte_flow_actions_table.txt
+
 .. Note::
 
    Features marked with "P" are partially supported. Refer to the appropriate
    NIC guide in the following sections for details.
+
+.. Note::
+
+   rte_flow action that is marked with "S" means it is supported as shared
+   and non-shared action.
+
-- 
1.8.3.1

Re: [dpdk-dev] [PATCH v4] doc: add new tables for rte flow items and actions support

From: Thomas Monjalon <hidden>
Date: 2021-02-08 12:58:51

07/02/2021 11:52, Asaf Penso:
In http://doc.dpdk.org/guides/nics/overview.html, table 1.1 lists all
supported features.
It has a single line for "Flow API" that refers to rte_flow support.
rte_flow is composed of many items and actions that are not expressed in
this single line.
One comment to add to this commit message if you agree:
When the new rte_flow tables are filled for all relevant PMDs,
we could remove the row "Flow API" from the main table.
The following new tables are suggested:
1. rte_flow items
2. rte_flow actions
[...]
+vlan                 =
+ipv4                 =
+ipv6                 =
+icmp                 =
+udp                  =
+tcp                  =
+sctp                 =
+vxlan                =
[...]
+set_ipv4_src         =
+set_ipv4_dst         =
In items and actions above (and others) I understand the names are taken
directly from the enums or structs.
However I could imagine a slight different natural naming,
using some upper cases and spaces. Example:
	set_ipv4_dst -> set IPv4 dst
I see pros and cons. What are other opinions?

Re: [dpdk-dev] [PATCH v4] doc: add new tables for rte flow items and actions support

From: Ferruh Yigit <hidden>
Date: 2021-02-16 13:14:09

On 2/7/2021 10:52 AM, Asaf Penso wrote:
In http://doc.dpdk.org/guides/nics/overview.html, table 1.1 lists all
supported features.
It has a single line for "Flow API" that refers to rte_flow support.
rte_flow is composed of many items and actions that are not expressed in
this single line.

The following new tables are suggested:
1. rte_flow items
2. rte_flow actions
Hi Asaf,

I understand the intention, but I am not sure about this.

The Flow API does not provide a capability or feature list in the API level, by 
design, because it is very hard to do it correct, but this patch tries to do it 
in the documentation level.

This will be missing lots of details, the flow items and actions documented as 
supported may and may not be supported based on the details.

It will be very hard to read this table (when it becomes full), also will be 
very hard to maintain.


Let me start with a question, who do you think will be your consumer?
Who will benefit from this table and how?

Also, since each table needs a new section in the pmd ini
file that might not be relevant for all pmds, the print
error message for missing section in conf.py is removed.

Signed-off-by: Asaf Penso <redacted>
<...>

Re: [dpdk-dev] [PATCH v4] doc: add new tables for rte flow items and actions support

From: Asaf Penso <hidden>
Date: 2021-02-17 05:58:09

Hello Ferruh, thanks for the reply and please see my below comments.

Regards,
Asaf Penso
-----Original Message-----
From: Ferruh Yigit <redacted>
Sent: Tuesday, February 16, 2021 3:14 PM
To: Asaf Penso <redacted>; dev@dpdk.org
Cc: NBU-Contact-Thomas Monjalon <redacted>; Andrew
Rybchenko [off-list ref]
Subject: Re: [dpdk-dev] [PATCH v4] doc: add new tables for rte flow items and
actions support

On 2/7/2021 10:52 AM, Asaf Penso wrote:
quoted
In http://doc.dpdk.org/guides/nics/overview.html, table 1.1 lists all
supported features.
It has a single line for "Flow API" that refers to rte_flow support.
rte_flow is composed of many items and actions that are not expressed
in this single line.

The following new tables are suggested:
1. rte_flow items
2. rte_flow actions
Hi Asaf,

I understand the intention, but I am not sure about this.

The Flow API does not provide a capability or feature list in the API level, by
design, because it is very hard to do it correct, but this patch tries to do it in the
documentation level.

This will be missing lots of details, the flow items and actions documented as
supported may and may not be supported based on the details.
Which missing details are you referring to? All flow items and all actions are listed.
It will be very hard to read this table (when it becomes full), also will be very hard
to maintain.
As part of any documentation change in rte_flow the developer would also need to update this table.
Why would it be very hard to maintain?

Let me start with a question, who do you think will be your consumer?
Who will benefit from this table and how?
We get a lot of questions from users regarding rte_flow support and we do not have a single place with proper documentation.
I can ask the same about the overall feature table, right? There is a value to document the support.
quoted
Also, since each table needs a new section in the pmd ini
file that might not be relevant for all pmds, the print
error message for missing section in conf.py is removed.

Signed-off-by: Asaf Penso <redacted>
<...>

Re: [dpdk-dev] [PATCH v4] doc: add new tables for rte flow items and actions support

From: Ferruh Yigit <hidden>
Date: 2021-02-17 10:38:04

On 2/17/2021 5:57 AM, Asaf Penso wrote:
Hello Ferruh, thanks for the reply and please see my below comments.

Regards,
Asaf Penso
quoted
-----Original Message-----
From: Ferruh Yigit <redacted>
Sent: Tuesday, February 16, 2021 3:14 PM
To: Asaf Penso <redacted>; dev@dpdk.org
Cc: NBU-Contact-Thomas Monjalon <redacted>; Andrew
Rybchenko [off-list ref]
Subject: Re: [dpdk-dev] [PATCH v4] doc: add new tables for rte flow items and
actions support

On 2/7/2021 10:52 AM, Asaf Penso wrote:
quoted
In http://doc.dpdk.org/guides/nics/overview.html, table 1.1 lists all
supported features.
It has a single line for "Flow API" that refers to rte_flow support.
rte_flow is composed of many items and actions that are not expressed
in this single line.

The following new tables are suggested:
1. rte_flow items
2. rte_flow actions
Hi Asaf,

I understand the intention, but I am not sure about this.

The Flow API does not provide a capability or feature list in the API level, by
design, because it is very hard to do it correct, but this patch tries to do it in the
documentation level.

This will be missing lots of details, the flow items and actions documented as
supported may and may not be supported based on the details.
Which missing details are you referring to? All flow items and all actions are listed.
Patterns are complex, any rule can be valid or invalid based on provided pattern 
values (details), also any rule can be valid or invalid based on previous rules 
or configuration.

In practice this information is much more useful if it is provided by API, but 
we are not able to do it because of its complex nature, it should be same level 
of complexity to provide this information by documentation.
quoted
It will be very hard to read this table (when it becomes full), also will be very hard
to maintain.
As part of any documentation change in rte_flow the developer would also need to update this table.
Why would it be very hard to maintain?
 >

Ahh, that sound so simple when you say like this :) In practice even keeping 
feature list requiring lots of effort, developers are 
missing/neglecting/ignoring updating documentation when updating the code.

And for this case is partially correct table a useful information? If this is 
not completely correct people won't rely on it and it will become just useless.
So this feature should come with an automated way to detect if a rule supported 
but not documented, or even better this table should be generated from code 
automatically.
quoted

Let me start with a question, who do you think will be your consumer?
Who will benefit from this table and how?
We get a lot of questions from users regarding rte_flow support and we do not have a single place with proper documentation.
I can ask the same about the overall feature table, right? There is a value to document the support.
Let's discuss the feature table separately, I think that is a valid question.

For the rte_flow, who is asking questions? End user, or application developer? 
So is this intended to be a marketing documentation or technical documentation?

And what is the nature of the questions, if it is related to the rte_flow, there 
is already a proper documentation for it:
https://doc.dpdk.org/guides/prog_guide/rte_flow.html

If this question is if any specific rule supported by a specific PMD, right now 
only valid way to say this that I am aware of is, run 'rte_flow_validate()' and see.
Not sure if we can document this properly.
quoted
quoted
Also, since each table needs a new section in the pmd ini
file that might not be relevant for all pmds, the print
error message for missing section in conf.py is removed.

Signed-off-by: Asaf Penso <redacted>
<...>

Re: [dpdk-dev] [PATCH v4] doc: add new tables for rte flow items and actions support

From: Thomas Monjalon <hidden>
Date: 2021-02-17 10:49:15

17/02/2021 11:37, Ferruh Yigit:
On 2/17/2021 5:57 AM, Asaf Penso wrote:
quoted
From: Ferruh Yigit <redacted>
quoted
On 2/7/2021 10:52 AM, Asaf Penso wrote:
quoted
In http://doc.dpdk.org/guides/nics/overview.html, table 1.1 lists all
supported features.
It has a single line for "Flow API" that refers to rte_flow support.
rte_flow is composed of many items and actions that are not expressed
in this single line.

The following new tables are suggested:
1. rte_flow items
2. rte_flow actions
Hi Asaf,

I understand the intention, but I am not sure about this.

The Flow API does not provide a capability or feature list in the API level, by
design, because it is very hard to do it correct, but this patch tries to do it in the
documentation level.

This will be missing lots of details, the flow items and actions documented as
supported may and may not be supported based on the details.
Which missing details are you referring to? All flow items and all actions are listed.
Patterns are complex, any rule can be valid or invalid based on provided pattern 
values (details), also any rule can be valid or invalid based on previous rules 
or configuration.

In practice this information is much more useful if it is provided by API, but 
we are not able to do it because of its complex nature, it should be same level 
of complexity to provide this information by documentation.
quoted
quoted
It will be very hard to read this table (when it becomes full), also will be very hard
to maintain.
As part of any documentation change in rte_flow the developer would also need to update this table.
Why would it be very hard to maintain?
 >

Ahh, that sound so simple when you say like this :) In practice even keeping 
feature list requiring lots of effort, developers are 
missing/neglecting/ignoring updating documentation when updating the code.

And for this case is partially correct table a useful information? If this is 
not completely correct people won't rely on it and it will become just useless.
So this feature should come with an automated way to detect if a rule supported 
but not documented, or even better this table should be generated from code 
automatically.
quoted
quoted

Let me start with a question, who do you think will be your consumer?
Who will benefit from this table and how?
We get a lot of questions from users regarding rte_flow support and we do not have a single place with proper documentation.
I can ask the same about the overall feature table, right? There is a value to document the support.
Let's discuss the feature table separately, I think that is a valid question.

For the rte_flow, who is asking questions? End user, or application developer? 
So is this intended to be a marketing documentation or technical documentation?

And what is the nature of the questions, if it is related to the rte_flow, there 
is already a proper documentation for it:
https://doc.dpdk.org/guides/prog_guide/rte_flow.html

If this question is if any specific rule supported by a specific PMD, right now 
only valid way to say this that I am aware of is, run 'rte_flow_validate()' and see.
Not sure if we can document this properly.
I think in general we are missing a big disclaimer
on top of this overview page:
	Each feature may have some hardware limitations.

Then there is a need, both for application developers and end-users,
to know which feature can be supported by a PMD,
or which PMD can support a feature.
Yes there are complex limitations with hardware offloads in general.
Yes it would be nice to report some tested capabilities with a CI.
But it does not mean we should not try to document it in my opinion.

Re: [dpdk-dev] [PATCH v4] doc: add new tables for rte flow items and actions support

From: Asaf Penso <hidden>
Date: 2021-02-18 16:13:04

-----Original Message-----
From: Thomas Monjalon <redacted>
Sent: Wednesday, February 17, 2021 12:49 PM
To: Ferruh Yigit <redacted>
Cc: Asaf Penso <redacted>; dev@dpdk.org; Gal Cohen (ProdM)
[off-list ref]; Andrew Rybchenko [off-list ref];
ajit.khaparde@broadcom.com; jerinj@marvell.com
Subject: Re: [dpdk-dev] [PATCH v4] doc: add new tables for rte flow items and
actions support

17/02/2021 11:37, Ferruh Yigit:
quoted
On 2/17/2021 5:57 AM, Asaf Penso wrote:
quoted
From: Ferruh Yigit <redacted>
quoted
On 2/7/2021 10:52 AM, Asaf Penso wrote:
quoted
In http://doc.dpdk.org/guides/nics/overview.html, table 1.1 lists
all supported features.
It has a single line for "Flow API" that refers to rte_flow support.
rte_flow is composed of many items and actions that are not
expressed in this single line.

The following new tables are suggested:
1. rte_flow items
2. rte_flow actions
Hi Asaf,

I understand the intention, but I am not sure about this.

The Flow API does not provide a capability or feature list in the
API level, by design, because it is very hard to do it correct, but
this patch tries to do it in the documentation level.

This will be missing lots of details, the flow items and actions
documented as supported may and may not be supported based on the
details.
quoted
quoted
quoted
Which missing details are you referring to? All flow items and all actions are
listed.
quoted
quoted
Patterns are complex, any rule can be valid or invalid based on
provided pattern values (details), also any rule can be valid or
invalid based on previous rules or configuration.

In practice this information is much more useful if it is provided by
API, but we are not able to do it because of its complex nature, it
should be same level of complexity to provide this information by
documentation.
quoted
quoted
quoted
It will be very hard to read this table (when it becomes full),
also will be very hard to maintain.
As part of any documentation change in rte_flow the developer would
also need to update this table.
quoted
quoted
Why would it be very hard to maintain?
 >

Ahh, that sound so simple when you say like this :) In practice even
keeping feature list requiring lots of effort, developers are
missing/neglecting/ignoring updating documentation when updating the
code.
quoted
And for this case is partially correct table a useful information? If
this is not completely correct people won't rely on it and it will become just
useless.
quoted
So this feature should come with an automated way to detect if a rule
supported but not documented, or even better this table should be
generated from code automatically.
quoted
quoted

Let me start with a question, who do you think will be your consumer?
Who will benefit from this table and how?
We get a lot of questions from users regarding rte_flow support and we
do not have a single place with proper documentation.
quoted
quoted
I can ask the same about the overall feature table, right? There is a value
to document the support.
quoted
quoted
Let's discuss the feature table separately, I think that is a valid question.

For the rte_flow, who is asking questions? End user, or application
developer?
quoted
So is this intended to be a marketing documentation or technical
documentation?
quoted
And what is the nature of the questions, if it is related to the
rte_flow, there is already a proper documentation for it:
https://doc.dpdk.org/guides/prog_guide/rte_flow.html

If this question is if any specific rule supported by a specific PMD,
right now only valid way to say this that I am aware of is, run
'rte_flow_validate()' and see.
quoted
Not sure if we can document this properly.
I think in general we are missing a big disclaimer on top of this overview page:
Each feature may have some hardware limitations.
Also, the combination of several items and actions is not feasible to be documented. Ferruh, I believe you are referring to this case.
I wanted to have some documentation of the supported items/actions.
The questions come from all users, I didn't bisect to see if they are application engineers or developers or users.
For sure, they can take testpmd and confirm, but before even going there and if they want to evaluate DPDK, they prefer to see a place with this documentation.
We cannot document everything, I know. Also, believe me, that I know how challenging is to track the relevancy of document 😊
Still, it's better to have this, than not at all.
Then there is a need, both for application developers and end-users, to know
which feature can be supported by a PMD, or which PMD can support a
feature.
Yes there are complex limitations with hardware offloads in general.
Yes it would be nice to report some tested capabilities with a CI.
But it does not mean we should not try to document it in my opinion.

Re: [dpdk-dev] [PATCH v4] doc: add new tables for rte flow items and actions support

From: Ajit Khaparde <ajit.khaparde@broadcom.com>
Date: 2021-02-18 17:58:49

On Wed, Feb 17, 2021 at 2:49 AM Thomas Monjalon [off-list ref] wrote:
17/02/2021 11:37, Ferruh Yigit:
quoted
On 2/17/2021 5:57 AM, Asaf Penso wrote:
quoted
From: Ferruh Yigit <redacted>
quoted
On 2/7/2021 10:52 AM, Asaf Penso wrote:
quoted
In http://doc.dpdk.org/guides/nics/overview.html, table 1.1 lists
all
quoted
quoted
quoted
quoted
supported features.
It has a single line for "Flow API" that refers to rte_flow support.
rte_flow is composed of many items and actions that are not expressed
in this single line.

The following new tables are suggested:
1. rte_flow items
2. rte_flow actions
Hi Asaf,

I understand the intention, but I am not sure about this.

The Flow API does not provide a capability or feature list in the API
level, by
quoted
quoted
quoted
design, because it is very hard to do it correct, but this patch
tries to do it in the
quoted
quoted
quoted
documentation level.

This will be missing lots of details, the flow items and actions
documented as
quoted
quoted
quoted
supported may and may not be supported based on the details.
Which missing details are you referring to? All flow items and all
actions are listed.
quoted
quoted
Patterns are complex, any rule can be valid or invalid based on provided
pattern
quoted
values (details), also any rule can be valid or invalid based on
previous rules
quoted
or configuration.

In practice this information is much more useful if it is provided by
API, but
quoted
we are not able to do it because of its complex nature, it should be
same level
quoted
of complexity to provide this information by documentation.
quoted
quoted
It will be very hard to read this table (when it becomes full), also
will be very hard
quoted
quoted
quoted
to maintain.
As part of any documentation change in rte_flow the developer would
also need to update this table.
quoted
quoted
Why would it be very hard to maintain?
 >

Ahh, that sound so simple when you say like this :) In practice even
keeping
quoted
feature list requiring lots of effort, developers are
missing/neglecting/ignoring updating documentation when updating the
code.
quoted
And for this case is partially correct table a useful information? If
this is
quoted
not completely correct people won't rely on it and it will become just
useless.
quoted
So this feature should come with an automated way to detect if a rule
supported
quoted
but not documented, or even better this table should be generated from
code
quoted
automatically.
quoted
quoted

Let me start with a question, who do you think will be your consumer?
Who will benefit from this table and how?
We get a lot of questions from users regarding rte_flow support and we
do not have a single place with proper documentation.
quoted
quoted
I can ask the same about the overall feature table, right? There is a
value to document the support.
quoted
quoted
Let's discuss the feature table separately, I think that is a valid
question.
quoted
For the rte_flow, who is asking questions? End user, or application
developer?
quoted
So is this intended to be a marketing documentation or technical
documentation?
quoted
And what is the nature of the questions, if it is related to the
rte_flow, there
quoted
is already a proper documentation for it:
https://doc.dpdk.org/guides/prog_guide/rte_flow.html

If this question is if any specific rule supported by a specific PMD,
right now
quoted
only valid way to say this that I am aware of is, run
'rte_flow_validate()' and see.
quoted
Not sure if we can document this properly.
I think in general we are missing a big disclaimer
on top of this overview page:
        Each feature may have some hardware limitations.

Then there is a need, both for application developers and end-users,
to know which feature can be supported by a PMD,
or which PMD can support a feature.
Yes there are complex limitations with hardware offloads in general.
Yes it would be nice to report some tested capabilities with a CI.
But it does not mean we should not try to document it in my opinion.
+1 to all of these.
A document like this will help give an idea on what is possible with the
PMD without looking at the code. Beyond that, the user can check with
the vendor/developer for specific details if needed.

Re: [dpdk-dev] [PATCH v4] doc: add new tables for rte flow items and actions support

From: Ferruh Yigit <hidden>
Date: 2021-02-18 18:46:13

On 2/18/2021 5:58 PM, Ajit Khaparde wrote:
On Wed, Feb 17, 2021 at 2:49 AM Thomas Monjalon [off-list ref] wrote:
quoted
17/02/2021 11:37, Ferruh Yigit:
quoted
On 2/17/2021 5:57 AM, Asaf Penso wrote:
quoted
From: Ferruh Yigit <redacted>
quoted
On 2/7/2021 10:52 AM, Asaf Penso wrote:
quoted
In http://doc.dpdk.org/guides/nics/overview.html, table 1.1 lists
all
quoted
quoted
quoted
quoted
supported features.
It has a single line for "Flow API" that refers to rte_flow support.
rte_flow is composed of many items and actions that are not expressed
in this single line.

The following new tables are suggested:
1. rte_flow items
2. rte_flow actions
Hi Asaf,

I understand the intention, but I am not sure about this.

The Flow API does not provide a capability or feature list in the API
level, by
quoted
quoted
quoted
design, because it is very hard to do it correct, but this patch
tries to do it in the
quoted
quoted
quoted
documentation level.

This will be missing lots of details, the flow items and actions
documented as
quoted
quoted
quoted
supported may and may not be supported based on the details.
Which missing details are you referring to? All flow items and all
actions are listed.
quoted
quoted
Patterns are complex, any rule can be valid or invalid based on provided
pattern
quoted
values (details), also any rule can be valid or invalid based on
previous rules
quoted
or configuration.

In practice this information is much more useful if it is provided by
API, but
quoted
we are not able to do it because of its complex nature, it should be
same level
quoted
of complexity to provide this information by documentation.
quoted
quoted
It will be very hard to read this table (when it becomes full), also
will be very hard
quoted
quoted
quoted
to maintain.
As part of any documentation change in rte_flow the developer would
also need to update this table.
quoted
quoted
Why would it be very hard to maintain?
  >

Ahh, that sound so simple when you say like this :) In practice even
keeping
quoted
feature list requiring lots of effort, developers are
missing/neglecting/ignoring updating documentation when updating the
code.
quoted
And for this case is partially correct table a useful information? If
this is
quoted
not completely correct people won't rely on it and it will become just
useless.
quoted
So this feature should come with an automated way to detect if a rule
supported
quoted
but not documented, or even better this table should be generated from
code
quoted
automatically.
quoted
quoted

Let me start with a question, who do you think will be your consumer?
Who will benefit from this table and how?
We get a lot of questions from users regarding rte_flow support and we
do not have a single place with proper documentation.
quoted
quoted
I can ask the same about the overall feature table, right? There is a
value to document the support.
quoted
quoted
Let's discuss the feature table separately, I think that is a valid
question.
quoted
For the rte_flow, who is asking questions? End user, or application
developer?
quoted
So is this intended to be a marketing documentation or technical
documentation?
quoted
And what is the nature of the questions, if it is related to the
rte_flow, there
quoted
is already a proper documentation for it:
https://doc.dpdk.org/guides/prog_guide/rte_flow.html

If this question is if any specific rule supported by a specific PMD,
right now
quoted
only valid way to say this that I am aware of is, run
'rte_flow_validate()' and see.
quoted
Not sure if we can document this properly.
I think in general we are missing a big disclaimer
on top of this overview page:
         Each feature may have some hardware limitations.

Then there is a need, both for application developers and end-users,
to know which feature can be supported by a PMD,
or which PMD can support a feature.
Yes there are complex limitations with hardware offloads in general.
Yes it would be nice to report some tested capabilities with a CI.
But it does not mean we should not try to document it in my opinion.
+1 to all of these.
A document like this will help give an idea on what is possible with the
PMD without looking at the code. Beyond that, the user can check with
the vendor/developer for specific details if needed.
I am still feeling we are trying to workaround flow API design constrain with 
documentation, although we know it won't be complete.
And not really clear who will benefit from this in what way.

Anyway, as mentioned above I am concerned the maintenance cost, can this series 
investigate:
1) A way to automatically fill the table from source code
2) A way to check if a patch is adding a new flow support but not documenting it

Also can you please propose a maintainer for it (can be documented in MAINTAINER 
file) who will be responsible of the correctness of the table, which means:
- Will verify a claimed support by a PMD is really supported
- All flow API features are documented for a PMD
- Changes in the code are reflected to the documentation
- Trace PMD maintainers for missing data

Re: [dpdk-dev] [PATCH v4] doc: add new tables for rte flow items and actions support

From: Thomas Monjalon <hidden>
Date: 2021-04-06 15:07:16

18/02/2021 19:45, Ferruh Yigit:
On 2/18/2021 5:58 PM, Ajit Khaparde wrote:
quoted
On Wed, Feb 17, 2021 at 2:49 AM Thomas Monjalon [off-list ref] wrote:
quoted
17/02/2021 11:37, Ferruh Yigit:
quoted
On 2/17/2021 5:57 AM, Asaf Penso wrote:
quoted
From: Ferruh Yigit <redacted>
quoted
On 2/7/2021 10:52 AM, Asaf Penso wrote:
quoted
The following new tables are suggested:
1. rte_flow items
2. rte_flow actions
Hi Asaf,

I understand the intention, but I am not sure about this.

The Flow API does not provide a capability or feature list in the API
level, by
design, because it is very hard to do it correct, but this patch
tries to do it in the
documentation level.

This will be missing lots of details, the flow items and actions
documented as
supported may and may not be supported based on the details.
Which missing details are you referring to? All flow items and all
actions are listed.
Patterns are complex, any rule can be valid or invalid based on provided
pattern
values (details), also any rule can be valid or invalid based on
previous rules
or configuration.

In practice this information is much more useful if it is provided by
API, but
we are not able to do it because of its complex nature, it should be
same level
of complexity to provide this information by documentation.
quoted
quoted
It will be very hard to read this table (when it becomes full), also
will be very hard to maintain.
As part of any documentation change in rte_flow the developer would
also need to update this table.
Why would it be very hard to maintain?
Ahh, that sound so simple when you say like this :) In practice even
keeping
feature list requiring lots of effort, developers are
missing/neglecting/ignoring updating documentation when updating the
code.

And for this case is partially correct table a useful information? If
this is
not completely correct people won't rely on it and it will become just
useless.
So this feature should come with an automated way to detect if a rule
supported
but not documented, or even better this table should be generated from
code automatically.
quoted
quoted
Let me start with a question, who do you think will be your consumer?
Who will benefit from this table and how?
We get a lot of questions from users regarding rte_flow support and we
do not have a single place with proper documentation.
I can ask the same about the overall feature table, right? There is a
value to document the support.
Let's discuss the feature table separately, I think that is a valid
question.

For the rte_flow, who is asking questions? End user, or application
developer?
So is this intended to be a marketing documentation or technical
documentation?

And what is the nature of the questions, if it is related to the
rte_flow, there
is already a proper documentation for it:
https://doc.dpdk.org/guides/prog_guide/rte_flow.html

If this question is if any specific rule supported by a specific PMD,
right now
only valid way to say this that I am aware of is, run
'rte_flow_validate()' and see.
Not sure if we can document this properly.
I think in general we are missing a big disclaimer
on top of this overview page:
         Each feature may have some hardware limitations.

Then there is a need, both for application developers and end-users,
to know which feature can be supported by a PMD,
or which PMD can support a feature.
Yes there are complex limitations with hardware offloads in general.
Yes it would be nice to report some tested capabilities with a CI.
But it does not mean we should not try to document it in my opinion.
+1 to all of these.
A document like this will help give an idea on what is possible with the
PMD without looking at the code. Beyond that, the user can check with
the vendor/developer for specific details if needed.
I am still feeling we are trying to workaround flow API design constrain with 
documentation, although we know it won't be complete.
I disagree, it is not a workaround.
API is for application to work with any hardware.
Doc is for users to imagine which feature they could use
in which config (HW, DPDK version, etc).
And not really clear who will benefit from this in what way.
End users will be the main users of this doc,
but it will help a lot more people to track what is implemented.
Anyway, as mentioned above I am concerned the maintenance cost, can this series 
investigate:
1) A way to automatically fill the table from source code
I am looking at it.
2) A way to check if a patch is adding a new flow support but not documenting it
Looking into it as well.
Also can you please propose a maintainer for it (can be documented in MAINTAINER 
file) who will be responsible of the correctness of the table, which means:
- Will verify a claimed support by a PMD is really supported
- All flow API features are documented for a PMD
- Changes in the code are reflected to the documentation
- Trace PMD maintainers for missing data
I'm not sure we should have a maintainer for this single file.
With the help of checkpatch script, the responsibility can be shared
in the next-net trees, isn't it?



[dpdk-dev] [PATCH v5 0/3] rte_flow doc matrix

From: Thomas Monjalon <hidden>
Date: 2021-04-07 22:33:31

This is an improvement of the rte_flow documentation:
it makes possible to quickly read which items and actions
may be accepted by the drivers in a DPDK release.

A script is provided for CI to make sure the matrix is updated,
while allowing some manual tuning.

Thomas Monjalon (3):
  doc: rename sfc features file
  doc: add flow API features tables
  devtools: check flow API doc tables

 .gitignore                                    |   2 +
 devtools/check-doc-vs-code.sh                 |  79 ++++++++++++
 devtools/parse-flow-support.sh                |  76 ++++++++++++
 doc/guides/conf.py                            |  18 +--
 doc/guides/nics/features.rst                  |  11 --
 doc/guides/nics/features/bnxt.ini             |  26 +++-
 doc/guides/nics/features/cxgbe.ini            |  31 ++++-
 doc/guides/nics/features/default.ini          | 116 +++++++++++++++++-
 doc/guides/nics/features/dpaa2.ini            |  19 ++-
 doc/guides/nics/features/e1000.ini            |  14 +++
 doc/guides/nics/features/enic.ini             |  29 ++++-
 doc/guides/nics/features/failsafe.ini         |   1 -
 doc/guides/nics/features/hinic.ini            |  16 ++-
 doc/guides/nics/features/hns3.ini             |  23 +++-
 doc/guides/nics/features/hns3_vf.ini          |   1 -
 doc/guides/nics/features/i40e.ini             |  31 ++++-
 doc/guides/nics/features/iavf.ini             |  29 ++++-
 doc/guides/nics/features/ice.ini              |  33 ++++-
 doc/guides/nics/features/ice_dcf.ini          |   1 -
 doc/guides/nics/features/igb.ini              |   1 -
 doc/guides/nics/features/igc.ini              |  12 +-
 doc/guides/nics/features/ipn3ke.ini           |  15 ++-
 doc/guides/nics/features/ixgbe.ini            |  24 +++-
 doc/guides/nics/features/mlx4.ini             |  13 +-
 doc/guides/nics/features/mlx5.ini             |  71 ++++++++++-
 doc/guides/nics/features/mvpp2.ini            |  14 +++
 doc/guides/nics/features/octeontx2.ini        |  42 ++++++-
 doc/guides/nics/features/octeontx2_vec.ini    |   1 -
 doc/guides/nics/features/octeontx2_vf.ini     |   1 -
 doc/guides/nics/features/qede.ini             |  11 +-
 .../nics/features/{sfc_efx.ini => sfc.ini}    |  35 +++++-
 doc/guides/nics/features/tap.ini              |  15 ++-
 doc/guides/nics/features/txgbe.ini            |  24 +++-
 doc/guides/nics/overview.rst                  |   8 ++
 34 files changed, 799 insertions(+), 44 deletions(-)
 create mode 100755 devtools/check-doc-vs-code.sh
 create mode 100755 devtools/parse-flow-support.sh
 rename doc/guides/nics/features/{sfc_efx.ini => sfc.ini} (57%)

-- 
2.31.1

[dpdk-dev] [PATCH v5 1/3] doc: rename sfc features file

From: Thomas Monjalon <hidden>
Date: 2021-04-07 22:33:36

The driver directory is drivers/net/sfc
but the features file was doc/guides/nics/features/sfc_efx.ini.

sfc_efx.ini is renamed sfc.ini to match the driver directory name.
It will help automatic checks of this file.

Signed-off-by: Thomas Monjalon <redacted>
---
 doc/guides/nics/features/{sfc_efx.ini => sfc.ini} | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename doc/guides/nics/features/{sfc_efx.ini => sfc.ini} (100%)
diff --git a/doc/guides/nics/features/sfc_efx.ini b/doc/guides/nics/features/sfc.ini
similarity index 100%
rename from doc/guides/nics/features/sfc_efx.ini
rename to doc/guides/nics/features/sfc.ini
-- 
2.31.1

[dpdk-dev] [PATCH v5 2/3] doc: add flow API features tables

From: Thomas Monjalon <hidden>
Date: 2021-04-07 22:33:44

The NICs overview table lists all supported features per driver.
There was a single row for "Flow API",
although rte_flow is composed of many items and actions.

The row "Flow API" is replaced with two new tables for items and actions.

Also, since rte_flow is not implemented in all drivers,
it would be ugly to add empty sections in some files.
That's why the error message for missing INI section is removed.

The lists are sorted alphabetically.
The extra files for some VF and vectorized data paths are not filled.

Signed-off-by: Asaf Penso <redacted>
Signed-off-by: Thomas Monjalon <redacted>
---
 .gitignore                                 |   2 +
 doc/guides/conf.py                         |  18 ++--
 doc/guides/nics/features.rst               |  11 --
 doc/guides/nics/features/bnxt.ini          |  26 ++++-
 doc/guides/nics/features/cxgbe.ini         |  31 +++++-
 doc/guides/nics/features/default.ini       | 116 ++++++++++++++++++++-
 doc/guides/nics/features/dpaa2.ini         |  19 +++-
 doc/guides/nics/features/e1000.ini         |  14 +++
 doc/guides/nics/features/enic.ini          |  29 +++++-
 doc/guides/nics/features/failsafe.ini      |   1 -
 doc/guides/nics/features/hinic.ini         |  16 ++-
 doc/guides/nics/features/hns3.ini          |  23 +++-
 doc/guides/nics/features/hns3_vf.ini       |   1 -
 doc/guides/nics/features/i40e.ini          |  31 +++++-
 doc/guides/nics/features/iavf.ini          |  29 +++++-
 doc/guides/nics/features/ice.ini           |  33 +++++-
 doc/guides/nics/features/ice_dcf.ini       |   1 -
 doc/guides/nics/features/igb.ini           |   1 -
 doc/guides/nics/features/igc.ini           |  12 ++-
 doc/guides/nics/features/ipn3ke.ini        |  15 ++-
 doc/guides/nics/features/ixgbe.ini         |  24 ++++-
 doc/guides/nics/features/mlx4.ini          |  13 ++-
 doc/guides/nics/features/mlx5.ini          |  71 ++++++++++++-
 doc/guides/nics/features/mvpp2.ini         |  14 +++
 doc/guides/nics/features/octeontx2.ini     |  42 +++++++-
 doc/guides/nics/features/octeontx2_vec.ini |   1 -
 doc/guides/nics/features/octeontx2_vf.ini  |   1 -
 doc/guides/nics/features/qede.ini          |  11 +-
 doc/guides/nics/features/sfc.ini           |  35 ++++++-
 doc/guides/nics/features/tap.ini           |  15 ++-
 doc/guides/nics/features/txgbe.ini         |  24 ++++-
 doc/guides/nics/overview.rst               |   8 ++
 32 files changed, 644 insertions(+), 44 deletions(-)
diff --git a/.gitignore b/.gitignore
index f73d93ca53..b19c0717e6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,8 @@
 
 # ignore generated documentation tables
 doc/guides/nics/overview_table.txt
+doc/guides/nics/rte_flow_actions_table.txt
+doc/guides/nics/rte_flow_items_table.txt
 doc/guides/cryptodevs/overview_feature_table.txt
 doc/guides/cryptodevs/overview_cipher_table.txt
 doc/guides/cryptodevs/overview_auth_table.txt
diff --git a/doc/guides/conf.py b/doc/guides/conf.py
index ec59aeae7e..70213843c1 100644
--- a/doc/guides/conf.py
+++ b/doc/guides/conf.py
@@ -216,14 +216,8 @@ def generate_overview_table(output_filename, table_id, section, table_name, titl
         # Initialize the dict with the default.ini value.
         ini_data[ini_filename] = valid_features.copy()
 
-        # Check for a valid ini section.
+        # Check for a section.
         if not config.has_section(section):
-            print("{}: File '{}' has no [{}] secton".format(warning,
-                                                            ini_filename,
-                                                            section),
-                                                            file=stderr)
-            if stop_on_error:
-                raise Exception('Warning is treated as a failure')
             continue
 
         # Check for valid features names.
@@ -379,6 +373,16 @@ def setup(app):
                             'Features',
                             'Features availability in networking drivers',
                             'Feature')
+    table_file = dirname(__file__) + '/nics/rte_flow_items_table.txt'
+    generate_overview_table(table_file, 2,
+                            'rte_flow items',
+                            'rte_flow items availability in networking drivers',
+                            'Item')
+    table_file = dirname(__file__) + '/nics/rte_flow_actions_table.txt'
+    generate_overview_table(table_file, 3,
+                            'rte_flow actions',
+                            'rte_flow actions availability in networking drivers',
+                            'Action')
     table_file = dirname(__file__) + '/cryptodevs/overview_feature_table.txt'
     generate_overview_table(table_file, 1,
                             'Features',
diff --git a/doc/guides/nics/features.rst b/doc/guides/nics/features.rst
index f6d30d0af3..403c2b03a3 100644
--- a/doc/guides/nics/features.rst
+++ b/doc/guides/nics/features.rst
@@ -397,17 +397,6 @@ Supports configuring link flow control.
   ``rte_eth_dev_priority_flow_ctrl_set()``.
 
 
-.. _nic_features_flow_api:
-
-Flow API
---------
-
-Supports flow API family.
-
-* **[implements] eth_dev_ops**: ``flow_ops_get``.
-* **[implements] rte_flow_ops**: ``All``.
-
-
 .. _nic_features_rate_limitation:
 
 Rate limitation
diff --git a/doc/guides/nics/features/bnxt.ini b/doc/guides/nics/features/bnxt.ini
index 79335783ec..291faaad05 100644
--- a/doc/guides/nics/features/bnxt.ini
+++ b/doc/guides/nics/features/bnxt.ini
@@ -27,7 +27,6 @@ VMDq                 = Y
 SR-IOV               = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
@@ -52,3 +51,28 @@ x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
 Perf doc             = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+pf                   = Y
+phy_port             = Y
+port_id              = Y
+tcp                  = Y
+udp                  = Y
+vf                   = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+mark                 = Y
+pf                   = Y
+phy_port             = Y
+port_id              = Y
+rss                  = Y
+vf                   = Y
+vxlan_decap          = Y
+vxlan_encap          = Y
diff --git a/doc/guides/nics/features/cxgbe.ini b/doc/guides/nics/features/cxgbe.ini
index 276879ec1a..a3ecf12aad 100644
--- a/doc/guides/nics/features/cxgbe.ini
+++ b/doc/guides/nics/features/cxgbe.ini
@@ -17,7 +17,6 @@ RSS hash             = Y
 RSS key update       = Y
 RSS reta update      = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 FEC                  = Y
@@ -34,3 +33,33 @@ Linux                = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+pf                   = Y
+phy_port             = Y
+tcp                  = Y
+udp                  = Y
+vf                   = Y
+vlan                 = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+mac_swap             = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_pcp      = Y
+of_set_vlan_vid      = Y
+phy_port             = Y
+queue                = Y
+set_ipv4_dst         = Y
+set_ipv4_src         = Y
+set_ipv6_dst         = Y
+set_ipv6_src         = Y
+set_mac_dst          = Y
+set_mac_src          = Y
+set_tp_dst           = Y
+set_tp_src           = Y
diff --git a/doc/guides/nics/features/default.ini b/doc/guides/nics/features/default.ini
index 8046bd121e..f16cbb66e3 100644
--- a/doc/guides/nics/features/default.ini
+++ b/doc/guides/nics/features/default.ini
@@ -38,7 +38,6 @@ SR-IOV               =
 DCB                  =
 VLAN filter          =
 Flow control         =
-Flow API             =
 Rate limitation      =
 Traffic mirroring    =
 Inline crypto        =
@@ -77,3 +76,118 @@ x86-64               =
 Usage doc            =
 Design doc           =
 Perf doc             =
+
+[rte_flow items]
+ah                   =
+any                  =
+arp_eth_ipv4         =
+ecpri                =
+esp                  =
+eth                  =
+e_tag                =
+fuzzy                =
+geneve               =
+geneve_opt           =
+gre                  =
+gre_key              =
+gtp                  =
+gtpc                 =
+gtpu                 =
+gtp_psc              =
+higig2               =
+icmp                 =
+icmp6                =
+icmp6_nd_na          =
+icmp6_nd_ns          =
+icmp6_nd_opt         =
+icmp6_nd_opt_sla_eth =
+icmp6_nd_opt_tla_eth =
+igmp                 =
+invert               =
+ipv4                 =
+ipv6                 =
+ipv6_ext             =
+ipv6_frag_ext        =
+l2tpv3oip            =
+mark                 =
+meta                 =
+mpls                 =
+nsh                  =
+nvgre                =
+pf                   =
+pfcp                 =
+phy_port             =
+port_id              =
+pppoe                =
+pppoed               =
+pppoes               =
+pppoe_proto_id       =
+raw                  =
+sctp                 =
+tag                  =
+tcp                  =
+udp                  =
+vf                   =
+vlan                 =
+void                 =
+vxlan                =
+vxlan_gpe            =
+
+[rte_flow actions]
+age                  =
+count                =
+dec_tcp_ack          =
+dec_tcp_seq          =
+dec_ttl              =
+drop                 =
+flag                 =
+inc_tcp_ack          =
+inc_tcp_seq          =
+jump                 =
+mac_swap             =
+mark                 =
+meter                =
+modify_field         =
+nvgre_decap          =
+nvgre_encap          =
+of_copy_ttl_in       =
+of_copy_ttl_out      =
+of_dec_mpls_ttl      =
+of_dec_nw_ttl        =
+of_pop_mpls          =
+of_pop_vlan          =
+of_push_mpls         =
+of_push_vlan         =
+of_set_mpls_ttl      =
+of_set_nw_ttl        =
+of_set_vlan_pcp      =
+of_set_vlan_vid      =
+passthru             =
+pf                   =
+phy_port             =
+port_id              =
+queue                =
+raw_decap            =
+raw_encap            =
+rss                  =
+sample               =
+security             =
+set_ipv4_dscp        =
+set_ipv4_dst         =
+set_ipv4_src         =
+set_ipv6_dscp        =
+set_ipv6_dst         =
+set_ipv6_src         =
+set_mac              =
+set_mac_dst          =
+set_mac_src          =
+set_meta             =
+set_tag              =
+set_tp_dst           =
+set_tp_src           =
+set_ttl              =
+shared               =
+vf                   =
+void                 =
+vxlan_decap          =
+vxlan_encap          =
diff --git a/doc/guides/nics/features/dpaa2.ini b/doc/guides/nics/features/dpaa2.ini
index 59bd1a2ced..8e3d74cbb5 100644
--- a/doc/guides/nics/features/dpaa2.ini
+++ b/doc/guides/nics/features/dpaa2.ini
@@ -18,7 +18,6 @@ Unicast MAC filter   = Y
 RSS hash             = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 VLAN offload         = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
@@ -31,3 +30,21 @@ FW version           = Y
 Linux                = Y
 ARMv8                = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+gre                  = Y
+icmp                 = Y
+ipv4                 = Y
+ipv6                 = Y
+meta                 = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+
+[rte_flow actions]
+drop                 = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/e1000.ini b/doc/guides/nics/features/e1000.ini
index 7a224cc535..5af6040e37 100644
--- a/doc/guides/nics/features/e1000.ini
+++ b/doc/guides/nics/features/e1000.ini
@@ -29,3 +29,17 @@ FreeBSD              = Y
 Linux                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+
+[rte_flow actions]
+drop                 = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/enic.ini b/doc/guides/nics/features/enic.ini
index 16d6aabe47..a582616c07 100644
--- a/doc/guides/nics/features/enic.ini
+++ b/doc/guides/nics/features/enic.ini
@@ -25,7 +25,6 @@ Inner RSS            = Y
 SR-IOV               = Y
 CRC offload          = Y
 VLAN offload         = Y
-Flow API             = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
 Inner L3 checksum    = Y
@@ -39,3 +38,31 @@ Linux                = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+flag                 = Y
+jump                 = Y
+mark                 = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_pcp      = Y
+of_set_vlan_vid      = Y
+passthru             = Y
+port_id              = Y
+queue                = Y
+rss                  = Y
+vxlan_decap          = Y
+vxlan_encap          = Y
diff --git a/doc/guides/nics/features/failsafe.ini b/doc/guides/nics/features/failsafe.ini
index b6f3dcee61..8a2b92fc9c 100644
--- a/doc/guides/nics/features/failsafe.ini
+++ b/doc/guides/nics/features/failsafe.ini
@@ -19,7 +19,6 @@ Unicast MAC filter   = Y
 Multicast MAC filter = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Packet type parsing  = Y
 Basic stats          = Y
 Stats per queue      = Y
diff --git a/doc/guides/nics/features/hinic.ini b/doc/guides/nics/features/hinic.ini
index 988a0ad574..4ea7368704 100644
--- a/doc/guides/nics/features/hinic.ini
+++ b/doc/guides/nics/features/hinic.ini
@@ -32,10 +32,24 @@ Inner L4 checksum    = Y
 Basic stats          = Y
 Extended stats       = Y
 Stats per queue      = Y
-Flow API             = Y
 Flow control         = Y
 FW version           = Y
 Multiprocess aware   = Y
 Linux                = Y
 x86-64               = Y
 ARMv8                = Y
+
+[rte_flow items]
+any                  = Y
+eth                  = Y
+icmp                 = Y
+icmp6                = Y
+ipv4                 = Y
+ipv6                 = Y
+tcp                  = Y
+udp                  = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+queue                = Y
diff --git a/doc/guides/nics/features/hns3.ini b/doc/guides/nics/features/hns3.ini
index 3988be4fba..ecb3eed5aa 100644
--- a/doc/guides/nics/features/hns3.ini
+++ b/doc/guides/nics/features/hns3.ini
@@ -26,7 +26,6 @@ RSS reta update      = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 FEC                  = Y
@@ -46,3 +45,25 @@ Module EEPROM dump   = Y
 Multiprocess aware   = Y
 Linux                = Y
 ARMv8                = Y
+
+[rte_flow items]
+eth                  = Y
+geneve               = Y
+icmp                 = Y
+ipv4                 = Y
+ipv6                 = Y
+nvgre                = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+vxlan_gpe            = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+flag                 = Y
+mark                 = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/hns3_vf.ini b/doc/guides/nics/features/hns3_vf.ini
index 1640669a98..489963fafd 100644
--- a/doc/guides/nics/features/hns3_vf.ini
+++ b/doc/guides/nics/features/hns3_vf.ini
@@ -24,7 +24,6 @@ RSS hash             = Y
 RSS key update       = Y
 RSS reta update      = Y
 VLAN filter          = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 L3 checksum offload  = Y
diff --git a/doc/guides/nics/features/i40e.ini b/doc/guides/nics/features/i40e.ini
index 542432c41d..1f3f5eb3ff 100644
--- a/doc/guides/nics/features/i40e.ini
+++ b/doc/guides/nics/features/i40e.ini
@@ -27,7 +27,6 @@ SR-IOV               = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Traffic mirroring    = Y
 CRC offload          = Y
 VLAN offload         = Y
@@ -52,3 +51,33 @@ x86-32               = Y
 x86-64               = Y
 ARMv8                = Y
 Power8               = Y
+
+[rte_flow items]
+ah                   = Y
+esp                  = Y
+eth                  = Y
+gre                  = Y
+gtpc                 = Y
+gtpu                 = Y
+ipv4                 = Y
+ipv6                 = Y
+l2tpv3oip            = Y
+mpls                 = Y
+nvgre                = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vf                   = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+flag                 = Y
+mark                 = Y
+passthru             = Y
+pf                   = Y
+queue                = Y
+rss                  = Y
+vf                   = Y
diff --git a/doc/guides/nics/features/iavf.ini b/doc/guides/nics/features/iavf.ini
index 980680e568..4864c19b57 100644
--- a/doc/guides/nics/features/iavf.ini
+++ b/doc/guides/nics/features/iavf.ini
@@ -19,7 +19,6 @@ Multicast MAC filter = Y
 RSS hash             = Y
 RSS key update       = Y
 RSS reta update      = Y
-Flow API             = Y
 VLAN filter          = Y
 CRC offload          = Y
 VLAN offload         = Y
@@ -34,3 +33,31 @@ FreeBSD              = Y
 Linux                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+ah                   = Y
+arp_eth_ipv4         = Y
+ecpri                = Y
+esp                  = Y
+eth                  = Y
+gtpc                 = Y
+gtpu                 = Y
+gtp_psc              = Y
+icmp                 = Y
+icmp6                = Y
+ipv4                 = Y
+ipv6                 = Y
+l2tpv3oip            = Y
+pfcp                 = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+mark                 = Y
+passthru             = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/ice.ini b/doc/guides/nics/features/ice.ini
index e30a7d2e57..c3a8a1b676 100644
--- a/doc/guides/nics/features/ice.ini
+++ b/doc/guides/nics/features/ice.ini
@@ -21,7 +21,6 @@ Unicast MAC filter   = Y
 RSS hash             = Y
 RSS key update       = Y
 RSS reta update      = Y
-Flow API             = Y
 VLAN filter          = Y
 CRC offload          = Y
 VLAN offload         = Y
@@ -42,3 +41,35 @@ FreeBSD              = Y
 Linux                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+ah                   = Y
+arp_eth_ipv4         = Y
+esp                  = Y
+eth                  = Y
+gtpu                 = Y
+gtp_psc              = Y
+icmp                 = Y
+icmp6                = Y
+ipv4                 = Y
+ipv6                 = Y
+l2tpv3oip            = Y
+nvgre                = Y
+pfcp                 = Y
+pppoed               = Y
+pppoes               = Y
+pppoe_proto_id       = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+mark                 = Y
+passthru             = Y
+queue                = Y
+rss                  = Y
+vf                   = Y
diff --git a/doc/guides/nics/features/ice_dcf.ini b/doc/guides/nics/features/ice_dcf.ini
index f4998152df..ae79b6a515 100644
--- a/doc/guides/nics/features/ice_dcf.ini
+++ b/doc/guides/nics/features/ice_dcf.ini
@@ -8,7 +8,6 @@ Queue start/stop     = Y
 Jumbo frame          = Y
 Scattered Rx         = Y
 RSS hash             = P
-Flow API             = Y
 CRC offload          = Y
 L3 checksum offload  = P
 L4 checksum offload  = P
diff --git a/doc/guides/nics/features/igb.ini b/doc/guides/nics/features/igb.ini
index 2925a8031d..f4f6e9a4cb 100644
--- a/doc/guides/nics/features/igb.ini
+++ b/doc/guides/nics/features/igb.ini
@@ -24,7 +24,6 @@ SR-IOV               = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 QinQ offload         = Y
diff --git a/doc/guides/nics/features/igc.ini b/doc/guides/nics/features/igc.ini
index 300d37e81a..f810c2df4e 100644
--- a/doc/guides/nics/features/igc.ini
+++ b/doc/guides/nics/features/igc.ini
@@ -32,6 +32,16 @@ RSS key update       = Y
 RSS reta update      = Y
 VLAN filter          = Y
 VLAN offload         = Y
-Flow API             = P
 Linux                = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+tcp                  = Y
+udp                  = Y
+
+[rte_flow actions]
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/ipn3ke.ini b/doc/guides/nics/features/ipn3ke.ini
index 82de553eb2..5586f7cb33 100644
--- a/doc/guides/nics/features/ipn3ke.ini
+++ b/doc/guides/nics/features/ipn3ke.ini
@@ -26,7 +26,6 @@ SR-IOV               = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Traffic mirroring    = Y
 CRC offload          = Y
 VLAN offload         = Y
@@ -48,3 +47,17 @@ FreeBSD              = Y
 Linux                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+mpls                 = Y
+nvgre                = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+mark                 = Y
diff --git a/doc/guides/nics/features/ixgbe.ini b/doc/guides/nics/features/ixgbe.ini
index c5e6e14aac..93a9cc18ab 100644
--- a/doc/guides/nics/features/ixgbe.ini
+++ b/doc/guides/nics/features/ixgbe.ini
@@ -26,7 +26,6 @@ SR-IOV               = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Rate limitation      = Y
 Traffic mirroring    = Y
 Inline crypto        = Y
@@ -55,3 +54,26 @@ Linux                = Y
 ARMv8                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+e_tag                = Y
+fuzzy                = Y
+ipv4                 = Y
+ipv6                 = Y
+nvgre                = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+mark                 = Y
+pf                   = Y
+queue                = Y
+rss                  = Y
+security             = Y
+vf                   = Y
diff --git a/doc/guides/nics/features/mlx4.ini b/doc/guides/nics/features/mlx4.ini
index ebb9ccf767..c394dfcefe 100644
--- a/doc/guides/nics/features/mlx4.ini
+++ b/doc/guides/nics/features/mlx4.ini
@@ -22,7 +22,6 @@ RSS hash             = Y
 SR-IOV               = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
@@ -38,3 +37,15 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+
+[rte_flow actions]
+drop                 = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/mlx5.ini b/doc/guides/nics/features/mlx5.ini
index ddd131da16..15b1897c21 100644
--- a/doc/guides/nics/features/mlx5.ini
+++ b/doc/guides/nics/features/mlx5.ini
@@ -28,7 +28,6 @@ Inner RSS            = Y
 SR-IOV               = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 L3 checksum offload  = Y
@@ -52,3 +51,73 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+ecpri                = Y
+eth                  = Y
+geneve               = Y
+geneve_opt           = Y
+gre                  = Y
+gre_key              = Y
+gtp                  = Y
+gtp_psc              = Y
+icmp                 = Y
+icmp6                = Y
+ipv4                 = Y
+ipv6                 = Y
+ipv6_frag_ext        = Y
+mark                 = Y
+meta                 = Y
+mpls                 = Y
+nvgre                = Y
+phy_port             = Y
+port_id              = Y
+tag                  = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+vxlan_gpe            = Y
+
+[rte_flow actions]
+age                  = I
+count                = Y
+dec_tcp_ack          = Y
+dec_tcp_seq          = Y
+dec_ttl              = Y
+drop                 = Y
+flag                 = Y
+inc_tcp_ack          = Y
+inc_tcp_seq          = Y
+jump                 = Y
+mark                 = Y
+meter                = Y
+modify_field         = Y
+nvgre_decap          = Y
+nvgre_encap          = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_pcp      = Y
+of_set_vlan_vid      = Y
+port_id              = Y
+queue                = Y
+raw_decap            = Y
+raw_encap            = Y
+rss                  = I
+sample               = Y
+set_ipv4_dscp        = Y
+set_ipv4_dst         = Y
+set_ipv4_src         = Y
+set_ipv6_dscp        = Y
+set_ipv6_dst         = Y
+set_ipv6_src         = Y
+set_mac_dst          = Y
+set_mac_src          = Y
+set_meta             = Y
+set_tag              = Y
+set_tp_dst           = Y
+set_tp_src           = Y
+set_ttl              = Y
+shared               = Y
+vxlan_decap          = Y
+vxlan_encap          = Y
diff --git a/doc/guides/nics/features/mvpp2.ini b/doc/guides/nics/features/mvpp2.ini
index ef47546d1c..2ce0ca817a 100644
--- a/doc/guides/nics/features/mvpp2.ini
+++ b/doc/guides/nics/features/mvpp2.ini
@@ -23,3 +23,17 @@ Basic stats          = Y
 Extended stats       = Y
 ARMv8                = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+raw                  = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+
+[rte_flow actions]
+drop                 = Y
+meter                = Y
+queue                = Y
diff --git a/doc/guides/nics/features/octeontx2.ini b/doc/guides/nics/features/octeontx2.ini
index c0bcb8278e..fa49868cb3 100644
--- a/doc/guides/nics/features/octeontx2.ini
+++ b/doc/guides/nics/features/octeontx2.ini
@@ -30,7 +30,6 @@ Inner RSS            = Y
 Inline protocol      = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Rate limitation      = Y
 Jumbo frame          = Y
 Scattered Rx         = Y
@@ -54,3 +53,44 @@ Registers dump       = Y
 Linux                = Y
 ARMv8                = Y
 Usage doc            = Y
+
+[rte_flow items]
+any                  = Y
+arp_eth_ipv4         = Y
+esp                  = Y
+eth                  = Y
+e_tag                = Y
+geneve               = Y
+gre                  = Y
+gre_key              = Y
+gtpc                 = Y
+gtpu                 = Y
+higig2               = Y
+icmp                 = Y
+ipv4                 = Y
+ipv6                 = Y
+ipv6_ext             = Y
+mpls                 = Y
+nvgre                = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+vxlan_gpe            = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+flag                 = Y
+mark                 = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_pcp      = Y
+of_set_vlan_vid      = Y
+pf                   = Y
+queue                = Y
+rss                  = Y
+security             = Y
+vf                   = Y
diff --git a/doc/guides/nics/features/octeontx2_vec.ini b/doc/guides/nics/features/octeontx2_vec.ini
index 7025e140ad..376a1d6cc1 100644
--- a/doc/guides/nics/features/octeontx2_vec.ini
+++ b/doc/guides/nics/features/octeontx2_vec.ini
@@ -27,7 +27,6 @@ RSS reta update      = Y
 Inner RSS            = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Rate limitation      = Y
 Jumbo frame          = Y
 VLAN offload         = Y
diff --git a/doc/guides/nics/features/octeontx2_vf.ini b/doc/guides/nics/features/octeontx2_vf.ini
index 7f5e5b8bba..8141aadf85 100644
--- a/doc/guides/nics/features/octeontx2_vf.ini
+++ b/doc/guides/nics/features/octeontx2_vf.ini
@@ -23,7 +23,6 @@ RSS reta update      = Y
 Inner RSS            = Y
 Inline protocol      = Y
 VLAN filter          = Y
-Flow API             = Y
 Rate limitation      = Y
 Jumbo frame          = Y
 Scattered Rx         = Y
diff --git a/doc/guides/nics/features/qede.ini b/doc/guides/nics/features/qede.ini
index 852cecb3d3..e65d5d076e 100644
--- a/doc/guides/nics/features/qede.ini
+++ b/doc/guides/nics/features/qede.ini
@@ -20,7 +20,6 @@ RSS key update       = Y
 RSS reta update      = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 L3 checksum offload  = Y
@@ -39,3 +38,13 @@ ARMv8                = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+ipv4                 = Y
+ipv6                 = Y
+tcp                  = Y
+udp                  = Y
+
+[rte_flow actions]
+drop                 = Y
+queue                = Y
diff --git a/doc/guides/nics/features/sfc.ini b/doc/guides/nics/features/sfc.ini
index 7e29568e5f..9e66ec4293 100644
--- a/doc/guides/nics/features/sfc.ini
+++ b/doc/guides/nics/features/sfc.ini
@@ -24,7 +24,6 @@ RSS key update       = Y
 RSS reta update      = Y
 SR-IOV               = Y
 Flow control         = Y
-Flow API             = Y
 VLAN offload         = P
 L3 checksum offload  = Y
 L4 checksum offload  = Y
@@ -41,3 +40,37 @@ FreeBSD              = Y
 Linux                = Y
 ARMv8                = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+geneve               = Y
+ipv4                 = Y
+ipv6                 = Y
+nvgre                = Y
+pf                   = Y
+phy_port             = Y
+port_id              = Y
+pppoed               = Y
+pppoes               = Y
+tcp                  = Y
+udp                  = Y
+vf                   = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+flag                 = Y
+mark                 = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_pcp      = Y
+of_set_vlan_vid      = Y
+pf                   = Y
+phy_port             = Y
+port_id              = Y
+queue                = Y
+rss                  = Y
+vf                   = Y
+vxlan_decap          = Y
+vxlan_encap          = Y
diff --git a/doc/guides/nics/features/tap.ini b/doc/guides/nics/features/tap.ini
index be5e53dbe9..b4a356e5d5 100644
--- a/doc/guides/nics/features/tap.ini
+++ b/doc/guides/nics/features/tap.ini
@@ -11,7 +11,6 @@ Rx interrupt         = Y
 Promiscuous mode     = Y
 Allmulticast mode    = Y
 Basic stats          = Y
-Flow API             = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
 MTU update           = Y
@@ -26,3 +25,17 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+
+[rte_flow actions]
+drop                 = Y
+passthru             = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/txgbe.ini b/doc/guides/nics/features/txgbe.ini
index a3fdee9f8a..61cb3f6d9f 100644
--- a/doc/guides/nics/features/txgbe.ini
+++ b/doc/guides/nics/features/txgbe.ini
@@ -26,7 +26,6 @@ SR-IOV               = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Rate limitation      = Y
 Inline crypto        = Y
 CRC offload          = P
@@ -52,3 +51,26 @@ Linux                = Y
 ARMv8                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+e_tag                = Y
+fuzzy                = Y
+ipv4                 = Y
+ipv6                 = Y
+nvgre                = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+mark                 = Y
+pf                   = Y
+queue                = Y
+rss                  = Y
+security             = Y
+vf                   = Y
diff --git a/doc/guides/nics/overview.rst b/doc/guides/nics/overview.rst
index 20cd52b097..67575c699c 100644
--- a/doc/guides/nics/overview.rst
+++ b/doc/guides/nics/overview.rst
@@ -32,3 +32,11 @@ More details about features can be found in :doc:`features`.
 
    Features marked with "P" are partially supported. Refer to the appropriate
    NIC guide in the following sections for details.
+
+.. include:: rte_flow_items_table.txt
+
+.. include:: rte_flow_actions_table.txt
+
+.. Note::
+
+   rte_flow actions marked with "I" can be indirect as well.
-- 
2.31.1

[dpdk-dev] [PATCH v5 3/3] devtools: check flow API doc tables

From: Thomas Monjalon <hidden>
Date: 2021-04-07 22:33:51

The script check-doc-vs-code.sh may be used to add
some automatic checks of the doc.

If run without any argument, a complete check is done.
The optional argument is a git history reference point
to check faster only what has changed since this commit.

In this commit, the only check is for rte_flow tables,
achieved through the script parse-flow-support.sh.
If run without a .ini reference, it prints rte_flow tables.
Note: detected features are marked with the value Y,
while the real .ini file could have special values like I.
The script allow parsing exceptions (exclude or include),
like for bnxt code which lists unsupported items and actions.

Signed-off-by: Thomas Monjalon <redacted>
---
 devtools/check-doc-vs-code.sh  | 79 ++++++++++++++++++++++++++++++++++
 devtools/parse-flow-support.sh | 76 ++++++++++++++++++++++++++++++++
 2 files changed, 155 insertions(+)
 create mode 100755 devtools/check-doc-vs-code.sh
 create mode 100755 devtools/parse-flow-support.sh
diff --git a/devtools/check-doc-vs-code.sh b/devtools/check-doc-vs-code.sh
new file mode 100755
index 0000000000..6e53d66899
--- /dev/null
+++ b/devtools/check-doc-vs-code.sh
@@ -0,0 +1,79 @@
+#! /bin/sh -e
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2021 Mellanox Technologies, Ltd
+
+# Check whether doc & code are in sync.
+# Optional argument: check only what changed since a commit.
+trusted_commit=$1 # example: origin/main
+
+selfdir=$(dirname $(readlink -f $0))
+rootdir=$(readlink -f $selfdir/..)
+
+result=0
+
+# speed up by ignoring Unicode details
+export LC_COLLATE=C
+
+changed_files()
+{
+	[ -n "$files" ] ||
+		files=$(git diff-tree --name-only -r $trusted_commit..)
+	echo "$files"
+}
+
+has_code_change() # <pattern>
+{
+	test -n "$(git log --format='%h' -S"$1" $trusted_commit..)"
+}
+
+has_file_change() # <pattern>
+{
+	changed_files | grep -q "$1"
+}
+
+changed_net_drivers()
+{
+	net_paths='drivers/net/|doc/guides/nics/features/'
+	[ -n "$drivers" ] ||
+		drivers=$(changed_files |
+			sed -rn "s,^($net_paths)([^./]*).*,\2,p")
+	echo "$drivers"
+}
+
+all_net_drivers()
+{
+	find $rootdir/drivers/net -mindepth 1 -maxdepth 1 -type d |
+	sed 's,.*/,,' |
+	sort
+}
+
+check_rte_flow() # <driver>
+{
+	code=$rootdir/drivers/net/$1
+	doc=$rootdir/doc/guides/nics/features/$1.ini
+	[ -d $code ] || return 0
+	[ -f $doc ] || return 0
+	report=$($selfdir/parse-flow-support.sh $code $doc)
+	if [ -n "$report" ]; then
+		echo "rte_flow doc out of sync for $1"
+		echo "$report" | sed 's,^,\t,'
+		result=$(($result + 1))
+	fi
+}
+
+if [ -z "$trusted_commit" ]; then
+	# check all
+	for driver in $(all_net_drivers); do
+		check_rte_flow $driver
+	done
+	exit $result
+fi
+
+# find what changed and check
+if has_code_change 'RTE_FLOW_.*_TYPE_' ||
+		has_file_change 'doc/guides/nics/features'; then
+	for driver in $(changed_net_drivers); do
+		check_rte_flow $driver
+	done
+fi
+exit $result
diff --git a/devtools/parse-flow-support.sh b/devtools/parse-flow-support.sh
new file mode 100755
index 0000000000..b397e81b62
--- /dev/null
+++ b/devtools/parse-flow-support.sh
@@ -0,0 +1,76 @@
+#! /bin/sh -e
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2021 Mellanox Technologies, Ltd
+
+# Parse rte_flow support of a driver directory,
+# and optionally show difference with a doc file in .ini format.
+
+dir=$1 # drivers/net/foo
+ref=$2 # doc/guides/nics/features/foo.ini
+
+if [ -z "$dir" ]; then
+	echo "directory argument is required" >&2
+	exit 1
+fi
+
+# sorting order
+export LC_COLLATE=C
+
+# exclude exceptions
+exclude() # <pattern>
+{
+	case $(basename $dir) in
+		bnxt)
+			filter=$(sed -n "/$1/{N;/TYPE_NOT_SUPPORTED/P;}" \
+				$dir/tf_ulp/ulp_template_db{,_tbl}.c |
+				grep -wo "$1[[:alnum:]_]*" | sort -u |
+				tr '\n' '|' | sed 's,.$,\n,')
+			grep -vE "$filter";;
+		*) cat
+	esac
+}
+
+# include exceptions
+include() # <pattern>
+{
+	case $(basename $dir) in
+	esac
+}
+
+# generate INI section
+list() # <title> <pattern>
+{
+	echo "[$1]"
+	git grep -who "$2[[:alnum:]_]*" $dir |
+	(exclude $2; include $2) | sort -u |
+	awk 'sub(/'$2'/, "") {printf "%-20s = Y\n", tolower($0)}'
+}
+
+rte_flow_support() # <category>
+{
+	title="rte_flow $1s"
+	pattern=$(echo "RTE_FLOW_$1_TYPE_" | awk '{print toupper($0)}')
+	list "$title" "$pattern" | grep -vwE 'void|end'
+}
+
+if [ -z "$ref" ]; then
+	rte_flow_support item
+	echo
+	rte_flow_support action
+	exit 0
+fi
+
+rte_flow_compare() # <category>
+{
+	section="rte_flow $1s]"
+	{
+		rte_flow_support $1
+		sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
+	} |
+	sed '/]/d' | # ignore section title
+	sed 's, *=.*,,' | # ignore value (better in doc than generated one)
+	sort | uniq -u # show differences
+}
+
+rte_flow_compare item
+rte_flow_compare action
-- 
2.31.1

Re: [dpdk-dev] [EXT] [PATCH v5 2/3] doc: add flow API features tables

From: Kiran Kumar Kokkilagadda <hidden>
Date: 2021-04-08 08:45:55

-----Original Message-----
From: Thomas Monjalon <redacted>
Sent: Thursday, April 8, 2021 4:03 AM
To: dev@dpdk.org
Cc: ferruh.yigit@intel.com; andrew.rybchenko@oktetlabs.ru; Asaf Penso
[off-list ref]; Ajit Khaparde [off-list ref]; Somnath
Kotur [off-list ref]; Rahul Lakkireddy
[off-list ref]; Hemant Agrawal
[off-list ref]; Sachin Saxena [off-list ref];
Jeff Guo [off-list ref]; Haiyue Wang [off-list ref]; John
Daley [off-list ref]; Hyong Youb Kim [off-list ref]; Gaetan
Rivet [off-list ref]; Ziyang Xuan [off-list ref]; Xiaoyun
Wang [off-list ref]; Guoyang Zhou
[off-list ref]; Min Hu (Connor) [off-list ref];
Yisen Zhuang [off-list ref]; Lijun Ou [off-list ref];
Beilei Xing [off-list ref]; Jingjing Wu [off-list ref];
Qiming Yang [off-list ref]; Qi Zhang [off-list ref];
Rosen Xu [off-list ref]; Matan Azrad [off-list ref]; Shahaf
Shuler [off-list ref]; Viacheslav Ovsiienko [off-list ref];
Liron Himi [off-list ref]; Jerin Jacob Kollanukkaran
[off-list ref]; Nithin Kumar Dabilpuram [off-list ref];
Kiran Kumar Kokkilagadda [off-list ref]; Rasesh Mody
[off-list ref]; Devendra Singh Rawat [off-list ref];
Igor Russkikh [off-list ref]; Keith Wiles [off-list ref];
Jiawen Wu [off-list ref]; Jian Wang
[off-list ref]
Subject: [EXT] [PATCH v5 2/3] doc: add flow API features tables

External Email

----------------------------------------------------------------------
The NICs overview table lists all supported features per driver.
There was a single row for "Flow API",
although rte_flow is composed of many items and actions.

The row "Flow API" is replaced with two new tables for items and actions.

Also, since rte_flow is not implemented in all drivers, it would be ugly to add
empty sections in some files.
That's why the error message for missing INI section is removed.

The lists are sorted alphabetically.
The extra files for some VF and vectorized data paths are not filled.

Signed-off-by: Asaf Penso <redacted>
Signed-off-by: Thomas Monjalon <redacted>
Acked-by: Kiran Kumar Kokkilagadda <redacted>
quoted hunk
---
 .gitignore                                 |   2 +
 doc/guides/conf.py                         |  18 ++--
 doc/guides/nics/features.rst               |  11 --
 doc/guides/nics/features/bnxt.ini          |  26 ++++-
 doc/guides/nics/features/cxgbe.ini         |  31 +++++-
 doc/guides/nics/features/default.ini       | 116 ++++++++++++++++++++-
 doc/guides/nics/features/dpaa2.ini         |  19 +++-
 doc/guides/nics/features/e1000.ini         |  14 +++
 doc/guides/nics/features/enic.ini          |  29 +++++-
 doc/guides/nics/features/failsafe.ini      |   1 -
 doc/guides/nics/features/hinic.ini         |  16 ++-
 doc/guides/nics/features/hns3.ini          |  23 +++-
 doc/guides/nics/features/hns3_vf.ini       |   1 -
 doc/guides/nics/features/i40e.ini          |  31 +++++-
 doc/guides/nics/features/iavf.ini          |  29 +++++-
 doc/guides/nics/features/ice.ini           |  33 +++++-
 doc/guides/nics/features/ice_dcf.ini       |   1 -
 doc/guides/nics/features/igb.ini           |   1 -
 doc/guides/nics/features/igc.ini           |  12 ++-
 doc/guides/nics/features/ipn3ke.ini        |  15 ++-
 doc/guides/nics/features/ixgbe.ini         |  24 ++++-
 doc/guides/nics/features/mlx4.ini          |  13 ++-
 doc/guides/nics/features/mlx5.ini          |  71 ++++++++++++-
 doc/guides/nics/features/mvpp2.ini         |  14 +++
 doc/guides/nics/features/octeontx2.ini     |  42 +++++++-
 doc/guides/nics/features/octeontx2_vec.ini |   1 -
 doc/guides/nics/features/octeontx2_vf.ini  |   1 -
 doc/guides/nics/features/qede.ini          |  11 +-
 doc/guides/nics/features/sfc.ini           |  35 ++++++-
 doc/guides/nics/features/tap.ini           |  15 ++-
 doc/guides/nics/features/txgbe.ini         |  24 ++++-
 doc/guides/nics/overview.rst               |   8 ++
 32 files changed, 644 insertions(+), 44 deletions(-)
diff --git a/.gitignore b/.gitignore
index f73d93ca53..b19c0717e6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,8 @@

 # ignore generated documentation tables  doc/guides/nics/overview_table.txt
+doc/guides/nics/rte_flow_actions_table.txt
+doc/guides/nics/rte_flow_items_table.txt
 doc/guides/cryptodevs/overview_feature_table.txt
 doc/guides/cryptodevs/overview_cipher_table.txt
 doc/guides/cryptodevs/overview_auth_table.txt
diff --git a/doc/guides/conf.py b/doc/guides/conf.py index
ec59aeae7e..70213843c1 100644
--- a/doc/guides/conf.py
+++ b/doc/guides/conf.py
@@ -216,14 +216,8 @@ def generate_overview_table(output_filename,
table_id, section, table_name, titl
         # Initialize the dict with the default.ini value.
         ini_data[ini_filename] = valid_features.copy()

-        # Check for a valid ini section.
+        # Check for a section.
         if not config.has_section(section):
-            print("{}: File '{}' has no [{}] secton".format(warning,
-                                                            ini_filename,
-                                                            section),
-                                                            file=stderr)
-            if stop_on_error:
-                raise Exception('Warning is treated as a failure')
             continue

         # Check for valid features names.
@@ -379,6 +373,16 @@ def setup(app):
                             'Features',
                             'Features availability in networking drivers',
                             'Feature')
+    table_file = dirname(__file__) + '/nics/rte_flow_items_table.txt'
+    generate_overview_table(table_file, 2,
+                            'rte_flow items',
+                            'rte_flow items availability in networking drivers',
+                            'Item')
+    table_file = dirname(__file__) + '/nics/rte_flow_actions_table.txt'
+    generate_overview_table(table_file, 3,
+                            'rte_flow actions',
+                            'rte_flow actions availability in networking drivers',
+                            'Action')
     table_file = dirname(__file__) + '/cryptodevs/overview_feature_table.txt'
     generate_overview_table(table_file, 1,
                             'Features', diff --git a/doc/guides/nics/features.rst
b/doc/guides/nics/features.rst index f6d30d0af3..403c2b03a3 100644
--- a/doc/guides/nics/features.rst
+++ b/doc/guides/nics/features.rst
@@ -397,17 +397,6 @@ Supports configuring link flow control.
   ``rte_eth_dev_priority_flow_ctrl_set()``.


-.. _nic_features_flow_api:
-
-Flow API
---------
-
-Supports flow API family.
-
-* **[implements] eth_dev_ops**: ``flow_ops_get``.
-* **[implements] rte_flow_ops**: ``All``.
-
-
 .. _nic_features_rate_limitation:

 Rate limitation
diff --git a/doc/guides/nics/features/bnxt.ini
b/doc/guides/nics/features/bnxt.ini
index 79335783ec..291faaad05 100644
--- a/doc/guides/nics/features/bnxt.ini
+++ b/doc/guides/nics/features/bnxt.ini
@@ -27,7 +27,6 @@ VMDq                 = Y
 SR-IOV               = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
@@ -52,3 +51,28 @@ x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
 Perf doc             = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+pf                   = Y
+phy_port             = Y
+port_id              = Y
+tcp                  = Y
+udp                  = Y
+vf                   = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+mark                 = Y
+pf                   = Y
+phy_port             = Y
+port_id              = Y
+rss                  = Y
+vf                   = Y
+vxlan_decap          = Y
+vxlan_encap          = Y
diff --git a/doc/guides/nics/features/cxgbe.ini
b/doc/guides/nics/features/cxgbe.ini
index 276879ec1a..a3ecf12aad 100644
--- a/doc/guides/nics/features/cxgbe.ini
+++ b/doc/guides/nics/features/cxgbe.ini
@@ -17,7 +17,6 @@ RSS hash             = Y
 RSS key update       = Y
 RSS reta update      = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 FEC                  = Y
@@ -34,3 +33,33 @@ Linux                = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+pf                   = Y
+phy_port             = Y
+tcp                  = Y
+udp                  = Y
+vf                   = Y
+vlan                 = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+mac_swap             = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_pcp      = Y
+of_set_vlan_vid      = Y
+phy_port             = Y
+queue                = Y
+set_ipv4_dst         = Y
+set_ipv4_src         = Y
+set_ipv6_dst         = Y
+set_ipv6_src         = Y
+set_mac_dst          = Y
+set_mac_src          = Y
+set_tp_dst           = Y
+set_tp_src           = Y
diff --git a/doc/guides/nics/features/default.ini
b/doc/guides/nics/features/default.ini
index 8046bd121e..f16cbb66e3 100644
--- a/doc/guides/nics/features/default.ini
+++ b/doc/guides/nics/features/default.ini
@@ -38,7 +38,6 @@ SR-IOV               =
 DCB                  =
 VLAN filter          =
 Flow control         =
-Flow API             =
 Rate limitation      =
 Traffic mirroring    =
 Inline crypto        =
@@ -77,3 +76,118 @@ x86-64               =
 Usage doc            =
 Design doc           =
 Perf doc             =
+
+[rte_flow items]
+ah                   =
+any                  =
+arp_eth_ipv4         =
+ecpri                =
+esp                  =
+eth                  =
+e_tag                =
+fuzzy                =
+geneve               =
+geneve_opt           =
+gre                  =
+gre_key              =
+gtp                  =
+gtpc                 =
+gtpu                 =
+gtp_psc              =
+higig2               =
+icmp                 =
+icmp6                =
+icmp6_nd_na          =
+icmp6_nd_ns          =
+icmp6_nd_opt         =
+icmp6_nd_opt_sla_eth =
+icmp6_nd_opt_tla_eth =
+igmp                 =
+invert               =
+ipv4                 =
+ipv6                 =
+ipv6_ext             =
+ipv6_frag_ext        =
+l2tpv3oip            =
+mark                 =
+meta                 =
+mpls                 =
+nsh                  =
+nvgre                =
+pf                   =
+pfcp                 =
+phy_port             =
+port_id              =
+pppoe                =
+pppoed               =
+pppoes               =
+pppoe_proto_id       =
+raw                  =
+sctp                 =
+tag                  =
+tcp                  =
+udp                  =
+vf                   =
+vlan                 =
+void                 =
+vxlan                =
+vxlan_gpe            =
+
+[rte_flow actions]
+age                  =
+count                =
+dec_tcp_ack          =
+dec_tcp_seq          =
+dec_ttl              =
+drop                 =
+flag                 =
+inc_tcp_ack          =
+inc_tcp_seq          =
+jump                 =
+mac_swap             =
+mark                 =
+meter                =
+modify_field         =
+nvgre_decap          =
+nvgre_encap          =
+of_copy_ttl_in       =
+of_copy_ttl_out      =
+of_dec_mpls_ttl      =
+of_dec_nw_ttl        =
+of_pop_mpls          =
+of_pop_vlan          =
+of_push_mpls         =
+of_push_vlan         =
+of_set_mpls_ttl      =
+of_set_nw_ttl        =
+of_set_vlan_pcp      =
+of_set_vlan_vid      =
+passthru             =
+pf                   =
+phy_port             =
+port_id              =
+queue                =
+raw_decap            =
+raw_encap            =
+rss                  =
+sample               =
+security             =
+set_ipv4_dscp        =
+set_ipv4_dst         =
+set_ipv4_src         =
+set_ipv6_dscp        =
+set_ipv6_dst         =
+set_ipv6_src         =
+set_mac              =
+set_mac_dst          =
+set_mac_src          =
+set_meta             =
+set_tag              =
+set_tp_dst           =
+set_tp_src           =
+set_ttl              =
+shared               =
+vf                   =
+void                 =
+vxlan_decap          =
+vxlan_encap          =
diff --git a/doc/guides/nics/features/dpaa2.ini
b/doc/guides/nics/features/dpaa2.ini
index 59bd1a2ced..8e3d74cbb5 100644
--- a/doc/guides/nics/features/dpaa2.ini
+++ b/doc/guides/nics/features/dpaa2.ini
@@ -18,7 +18,6 @@ Unicast MAC filter   = Y
 RSS hash             = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 VLAN offload         = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
@@ -31,3 +30,21 @@ FW version           = Y
 Linux                = Y
 ARMv8                = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+gre                  = Y
+icmp                 = Y
+ipv4                 = Y
+ipv6                 = Y
+meta                 = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+
+[rte_flow actions]
+drop                 = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/e1000.ini
b/doc/guides/nics/features/e1000.ini
index 7a224cc535..5af6040e37 100644
--- a/doc/guides/nics/features/e1000.ini
+++ b/doc/guides/nics/features/e1000.ini
@@ -29,3 +29,17 @@ FreeBSD              = Y
 Linux                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+
+[rte_flow actions]
+drop                 = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/enic.ini b/doc/guides/nics/features/enic.ini
index 16d6aabe47..a582616c07 100644
--- a/doc/guides/nics/features/enic.ini
+++ b/doc/guides/nics/features/enic.ini
@@ -25,7 +25,6 @@ Inner RSS            = Y
 SR-IOV               = Y
 CRC offload          = Y
 VLAN offload         = Y
-Flow API             = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
 Inner L3 checksum    = Y
@@ -39,3 +38,31 @@ Linux                = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+flag                 = Y
+jump                 = Y
+mark                 = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_pcp      = Y
+of_set_vlan_vid      = Y
+passthru             = Y
+port_id              = Y
+queue                = Y
+rss                  = Y
+vxlan_decap          = Y
+vxlan_encap          = Y
diff --git a/doc/guides/nics/features/failsafe.ini
b/doc/guides/nics/features/failsafe.ini
index b6f3dcee61..8a2b92fc9c 100644
--- a/doc/guides/nics/features/failsafe.ini
+++ b/doc/guides/nics/features/failsafe.ini
@@ -19,7 +19,6 @@ Unicast MAC filter   = Y
 Multicast MAC filter = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Packet type parsing  = Y
 Basic stats          = Y
 Stats per queue      = Y
diff --git a/doc/guides/nics/features/hinic.ini
b/doc/guides/nics/features/hinic.ini
index 988a0ad574..4ea7368704 100644
--- a/doc/guides/nics/features/hinic.ini
+++ b/doc/guides/nics/features/hinic.ini
@@ -32,10 +32,24 @@ Inner L4 checksum    = Y
 Basic stats          = Y
 Extended stats       = Y
 Stats per queue      = Y
-Flow API             = Y
 Flow control         = Y
 FW version           = Y
 Multiprocess aware   = Y
 Linux                = Y
 x86-64               = Y
 ARMv8                = Y
+
+[rte_flow items]
+any                  = Y
+eth                  = Y
+icmp                 = Y
+icmp6                = Y
+ipv4                 = Y
+ipv6                 = Y
+tcp                  = Y
+udp                  = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+queue                = Y
diff --git a/doc/guides/nics/features/hns3.ini
b/doc/guides/nics/features/hns3.ini
index 3988be4fba..ecb3eed5aa 100644
--- a/doc/guides/nics/features/hns3.ini
+++ b/doc/guides/nics/features/hns3.ini
@@ -26,7 +26,6 @@ RSS reta update      = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 FEC                  = Y
@@ -46,3 +45,25 @@ Module EEPROM dump   = Y
 Multiprocess aware   = Y
 Linux                = Y
 ARMv8                = Y
+
+[rte_flow items]
+eth                  = Y
+geneve               = Y
+icmp                 = Y
+ipv4                 = Y
+ipv6                 = Y
+nvgre                = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+vxlan_gpe            = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+flag                 = Y
+mark                 = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/hns3_vf.ini
b/doc/guides/nics/features/hns3_vf.ini
index 1640669a98..489963fafd 100644
--- a/doc/guides/nics/features/hns3_vf.ini
+++ b/doc/guides/nics/features/hns3_vf.ini
@@ -24,7 +24,6 @@ RSS hash             = Y
 RSS key update       = Y
 RSS reta update      = Y
 VLAN filter          = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 L3 checksum offload  = Y
diff --git a/doc/guides/nics/features/i40e.ini b/doc/guides/nics/features/i40e.ini
index 542432c41d..1f3f5eb3ff 100644
--- a/doc/guides/nics/features/i40e.ini
+++ b/doc/guides/nics/features/i40e.ini
@@ -27,7 +27,6 @@ SR-IOV               = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Traffic mirroring    = Y
 CRC offload          = Y
 VLAN offload         = Y
@@ -52,3 +51,33 @@ x86-32               = Y
 x86-64               = Y
 ARMv8                = Y
 Power8               = Y
+
+[rte_flow items]
+ah                   = Y
+esp                  = Y
+eth                  = Y
+gre                  = Y
+gtpc                 = Y
+gtpu                 = Y
+ipv4                 = Y
+ipv6                 = Y
+l2tpv3oip            = Y
+mpls                 = Y
+nvgre                = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vf                   = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+flag                 = Y
+mark                 = Y
+passthru             = Y
+pf                   = Y
+queue                = Y
+rss                  = Y
+vf                   = Y
diff --git a/doc/guides/nics/features/iavf.ini b/doc/guides/nics/features/iavf.ini
index 980680e568..4864c19b57 100644
--- a/doc/guides/nics/features/iavf.ini
+++ b/doc/guides/nics/features/iavf.ini
@@ -19,7 +19,6 @@ Multicast MAC filter = Y
 RSS hash             = Y
 RSS key update       = Y
 RSS reta update      = Y
-Flow API             = Y
 VLAN filter          = Y
 CRC offload          = Y
 VLAN offload         = Y
@@ -34,3 +33,31 @@ FreeBSD              = Y
 Linux                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+ah                   = Y
+arp_eth_ipv4         = Y
+ecpri                = Y
+esp                  = Y
+eth                  = Y
+gtpc                 = Y
+gtpu                 = Y
+gtp_psc              = Y
+icmp                 = Y
+icmp6                = Y
+ipv4                 = Y
+ipv6                 = Y
+l2tpv3oip            = Y
+pfcp                 = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+mark                 = Y
+passthru             = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/ice.ini b/doc/guides/nics/features/ice.ini
index e30a7d2e57..c3a8a1b676 100644
--- a/doc/guides/nics/features/ice.ini
+++ b/doc/guides/nics/features/ice.ini
@@ -21,7 +21,6 @@ Unicast MAC filter   = Y
 RSS hash             = Y
 RSS key update       = Y
 RSS reta update      = Y
-Flow API             = Y
 VLAN filter          = Y
 CRC offload          = Y
 VLAN offload         = Y
@@ -42,3 +41,35 @@ FreeBSD              = Y
 Linux                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+ah                   = Y
+arp_eth_ipv4         = Y
+esp                  = Y
+eth                  = Y
+gtpu                 = Y
+gtp_psc              = Y
+icmp                 = Y
+icmp6                = Y
+ipv4                 = Y
+ipv6                 = Y
+l2tpv3oip            = Y
+nvgre                = Y
+pfcp                 = Y
+pppoed               = Y
+pppoes               = Y
+pppoe_proto_id       = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+mark                 = Y
+passthru             = Y
+queue                = Y
+rss                  = Y
+vf                   = Y
diff --git a/doc/guides/nics/features/ice_dcf.ini
b/doc/guides/nics/features/ice_dcf.ini
index f4998152df..ae79b6a515 100644
--- a/doc/guides/nics/features/ice_dcf.ini
+++ b/doc/guides/nics/features/ice_dcf.ini
@@ -8,7 +8,6 @@ Queue start/stop     = Y
 Jumbo frame          = Y
 Scattered Rx         = Y
 RSS hash             = P
-Flow API             = Y
 CRC offload          = Y
 L3 checksum offload  = P
 L4 checksum offload  = P
diff --git a/doc/guides/nics/features/igb.ini b/doc/guides/nics/features/igb.ini
index 2925a8031d..f4f6e9a4cb 100644
--- a/doc/guides/nics/features/igb.ini
+++ b/doc/guides/nics/features/igb.ini
@@ -24,7 +24,6 @@ SR-IOV               = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 QinQ offload         = Y
diff --git a/doc/guides/nics/features/igc.ini b/doc/guides/nics/features/igc.ini
index 300d37e81a..f810c2df4e 100644
--- a/doc/guides/nics/features/igc.ini
+++ b/doc/guides/nics/features/igc.ini
@@ -32,6 +32,16 @@ RSS key update       = Y
 RSS reta update      = Y
 VLAN filter          = Y
 VLAN offload         = Y
-Flow API             = P
 Linux                = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+tcp                  = Y
+udp                  = Y
+
+[rte_flow actions]
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/ipn3ke.ini
b/doc/guides/nics/features/ipn3ke.ini
index 82de553eb2..5586f7cb33 100644
--- a/doc/guides/nics/features/ipn3ke.ini
+++ b/doc/guides/nics/features/ipn3ke.ini
@@ -26,7 +26,6 @@ SR-IOV               = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Traffic mirroring    = Y
 CRC offload          = Y
 VLAN offload         = Y
@@ -48,3 +47,17 @@ FreeBSD              = Y
 Linux                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+mpls                 = Y
+nvgre                = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+mark                 = Y
diff --git a/doc/guides/nics/features/ixgbe.ini
b/doc/guides/nics/features/ixgbe.ini
index c5e6e14aac..93a9cc18ab 100644
--- a/doc/guides/nics/features/ixgbe.ini
+++ b/doc/guides/nics/features/ixgbe.ini
@@ -26,7 +26,6 @@ SR-IOV               = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Rate limitation      = Y
 Traffic mirroring    = Y
 Inline crypto        = Y
@@ -55,3 +54,26 @@ Linux                = Y
 ARMv8                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+e_tag                = Y
+fuzzy                = Y
+ipv4                 = Y
+ipv6                 = Y
+nvgre                = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+mark                 = Y
+pf                   = Y
+queue                = Y
+rss                  = Y
+security             = Y
+vf                   = Y
diff --git a/doc/guides/nics/features/mlx4.ini
b/doc/guides/nics/features/mlx4.ini
index ebb9ccf767..c394dfcefe 100644
--- a/doc/guides/nics/features/mlx4.ini
+++ b/doc/guides/nics/features/mlx4.ini
@@ -22,7 +22,6 @@ RSS hash             = Y
 SR-IOV               = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
@@ -38,3 +37,15 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+
+[rte_flow actions]
+drop                 = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/mlx5.ini
b/doc/guides/nics/features/mlx5.ini
index ddd131da16..15b1897c21 100644
--- a/doc/guides/nics/features/mlx5.ini
+++ b/doc/guides/nics/features/mlx5.ini
@@ -28,7 +28,6 @@ Inner RSS            = Y
 SR-IOV               = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 L3 checksum offload  = Y
@@ -52,3 +51,73 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+ecpri                = Y
+eth                  = Y
+geneve               = Y
+geneve_opt           = Y
+gre                  = Y
+gre_key              = Y
+gtp                  = Y
+gtp_psc              = Y
+icmp                 = Y
+icmp6                = Y
+ipv4                 = Y
+ipv6                 = Y
+ipv6_frag_ext        = Y
+mark                 = Y
+meta                 = Y
+mpls                 = Y
+nvgre                = Y
+phy_port             = Y
+port_id              = Y
+tag                  = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+vxlan_gpe            = Y
+
+[rte_flow actions]
+age                  = I
+count                = Y
+dec_tcp_ack          = Y
+dec_tcp_seq          = Y
+dec_ttl              = Y
+drop                 = Y
+flag                 = Y
+inc_tcp_ack          = Y
+inc_tcp_seq          = Y
+jump                 = Y
+mark                 = Y
+meter                = Y
+modify_field         = Y
+nvgre_decap          = Y
+nvgre_encap          = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_pcp      = Y
+of_set_vlan_vid      = Y
+port_id              = Y
+queue                = Y
+raw_decap            = Y
+raw_encap            = Y
+rss                  = I
+sample               = Y
+set_ipv4_dscp        = Y
+set_ipv4_dst         = Y
+set_ipv4_src         = Y
+set_ipv6_dscp        = Y
+set_ipv6_dst         = Y
+set_ipv6_src         = Y
+set_mac_dst          = Y
+set_mac_src          = Y
+set_meta             = Y
+set_tag              = Y
+set_tp_dst           = Y
+set_tp_src           = Y
+set_ttl              = Y
+shared               = Y
+vxlan_decap          = Y
+vxlan_encap          = Y
diff --git a/doc/guides/nics/features/mvpp2.ini
b/doc/guides/nics/features/mvpp2.ini
index ef47546d1c..2ce0ca817a 100644
--- a/doc/guides/nics/features/mvpp2.ini
+++ b/doc/guides/nics/features/mvpp2.ini
@@ -23,3 +23,17 @@ Basic stats          = Y
 Extended stats       = Y
 ARMv8                = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+raw                  = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+
+[rte_flow actions]
+drop                 = Y
+meter                = Y
+queue                = Y
diff --git a/doc/guides/nics/features/octeontx2.ini
b/doc/guides/nics/features/octeontx2.ini
index c0bcb8278e..fa49868cb3 100644
--- a/doc/guides/nics/features/octeontx2.ini
+++ b/doc/guides/nics/features/octeontx2.ini
@@ -30,7 +30,6 @@ Inner RSS            = Y
 Inline protocol      = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Rate limitation      = Y
 Jumbo frame          = Y
 Scattered Rx         = Y
@@ -54,3 +53,44 @@ Registers dump       = Y
 Linux                = Y
 ARMv8                = Y
 Usage doc            = Y
+
+[rte_flow items]
+any                  = Y
+arp_eth_ipv4         = Y
+esp                  = Y
+eth                  = Y
+e_tag                = Y
+geneve               = Y
+gre                  = Y
+gre_key              = Y
+gtpc                 = Y
+gtpu                 = Y
+higig2               = Y
+icmp                 = Y
+ipv4                 = Y
+ipv6                 = Y
+ipv6_ext             = Y
+mpls                 = Y
+nvgre                = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+vxlan_gpe            = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+flag                 = Y
+mark                 = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_pcp      = Y
+of_set_vlan_vid      = Y
+pf                   = Y
+queue                = Y
+rss                  = Y
+security             = Y
+vf                   = Y
diff --git a/doc/guides/nics/features/octeontx2_vec.ini
b/doc/guides/nics/features/octeontx2_vec.ini
index 7025e140ad..376a1d6cc1 100644
--- a/doc/guides/nics/features/octeontx2_vec.ini
+++ b/doc/guides/nics/features/octeontx2_vec.ini
@@ -27,7 +27,6 @@ RSS reta update      = Y
 Inner RSS            = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Rate limitation      = Y
 Jumbo frame          = Y
 VLAN offload         = Y
diff --git a/doc/guides/nics/features/octeontx2_vf.ini
b/doc/guides/nics/features/octeontx2_vf.ini
index 7f5e5b8bba..8141aadf85 100644
--- a/doc/guides/nics/features/octeontx2_vf.ini
+++ b/doc/guides/nics/features/octeontx2_vf.ini
@@ -23,7 +23,6 @@ RSS reta update      = Y
 Inner RSS            = Y
 Inline protocol      = Y
 VLAN filter          = Y
-Flow API             = Y
 Rate limitation      = Y
 Jumbo frame          = Y
 Scattered Rx         = Y
diff --git a/doc/guides/nics/features/qede.ini
b/doc/guides/nics/features/qede.ini
index 852cecb3d3..e65d5d076e 100644
--- a/doc/guides/nics/features/qede.ini
+++ b/doc/guides/nics/features/qede.ini
@@ -20,7 +20,6 @@ RSS key update       = Y
 RSS reta update      = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 L3 checksum offload  = Y
@@ -39,3 +38,13 @@ ARMv8                = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+ipv4                 = Y
+ipv6                 = Y
+tcp                  = Y
+udp                  = Y
+
+[rte_flow actions]
+drop                 = Y
+queue                = Y
diff --git a/doc/guides/nics/features/sfc.ini b/doc/guides/nics/features/sfc.ini
index 7e29568e5f..9e66ec4293 100644
--- a/doc/guides/nics/features/sfc.ini
+++ b/doc/guides/nics/features/sfc.ini
@@ -24,7 +24,6 @@ RSS key update       = Y
 RSS reta update      = Y
 SR-IOV               = Y
 Flow control         = Y
-Flow API             = Y
 VLAN offload         = P
 L3 checksum offload  = Y
 L4 checksum offload  = Y
@@ -41,3 +40,37 @@ FreeBSD              = Y
 Linux                = Y
 ARMv8                = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+geneve               = Y
+ipv4                 = Y
+ipv6                 = Y
+nvgre                = Y
+pf                   = Y
+phy_port             = Y
+port_id              = Y
+pppoed               = Y
+pppoes               = Y
+tcp                  = Y
+udp                  = Y
+vf                   = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+flag                 = Y
+mark                 = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_pcp      = Y
+of_set_vlan_vid      = Y
+pf                   = Y
+phy_port             = Y
+port_id              = Y
+queue                = Y
+rss                  = Y
+vf                   = Y
+vxlan_decap          = Y
+vxlan_encap          = Y
diff --git a/doc/guides/nics/features/tap.ini b/doc/guides/nics/features/tap.ini
index be5e53dbe9..b4a356e5d5 100644
--- a/doc/guides/nics/features/tap.ini
+++ b/doc/guides/nics/features/tap.ini
@@ -11,7 +11,6 @@ Rx interrupt         = Y
 Promiscuous mode     = Y
 Allmulticast mode    = Y
 Basic stats          = Y
-Flow API             = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
 MTU update           = Y
@@ -26,3 +25,17 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+
+[rte_flow actions]
+drop                 = Y
+passthru             = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/txgbe.ini
b/doc/guides/nics/features/txgbe.ini
index a3fdee9f8a..61cb3f6d9f 100644
--- a/doc/guides/nics/features/txgbe.ini
+++ b/doc/guides/nics/features/txgbe.ini
@@ -26,7 +26,6 @@ SR-IOV               = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Rate limitation      = Y
 Inline crypto        = Y
 CRC offload          = P
@@ -52,3 +51,26 @@ Linux                = Y
 ARMv8                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+e_tag                = Y
+fuzzy                = Y
+ipv4                 = Y
+ipv6                 = Y
+nvgre                = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+mark                 = Y
+pf                   = Y
+queue                = Y
+rss                  = Y
+security             = Y
+vf                   = Y
diff --git a/doc/guides/nics/overview.rst b/doc/guides/nics/overview.rst index
20cd52b097..67575c699c 100644
--- a/doc/guides/nics/overview.rst
+++ b/doc/guides/nics/overview.rst
@@ -32,3 +32,11 @@ More details about features can be found in
:doc:`features`.

    Features marked with "P" are partially supported. Refer to the appropriate
    NIC guide in the following sections for details.
+
+.. include:: rte_flow_items_table.txt
+
+.. include:: rte_flow_actions_table.txt
+
+.. Note::
+
+   rte_flow actions marked with "I" can be indirect as well.
--
2.31.1

Re: [dpdk-dev] [PATCH v5 3/3] devtools: check flow API doc tables

From: Ferruh Yigit <hidden>
Date: 2021-05-13 18:40:58

On 4/7/2021 11:33 PM, Thomas Monjalon wrote:
The script check-doc-vs-code.sh may be used to add
some automatic checks of the doc.

If run without any argument, a complete check is done.
The optional argument is a git history reference point
to check faster only what has changed since this commit.

In this commit, the only check is for rte_flow tables,
achieved through the script parse-flow-support.sh.
If run without a .ini reference, it prints rte_flow tables.
Note: detected features are marked with the value Y,
while the real .ini file could have special values like I.
The script allow parsing exceptions (exclude or include),
like for bnxt code which lists unsupported items and actions.
Thanks for the scripts.
quoted hunk
Signed-off-by: Thomas Monjalon <redacted>
---
 devtools/check-doc-vs-code.sh  | 79 ++++++++++++++++++++++++++++++++++
 devtools/parse-flow-support.sh | 76 ++++++++++++++++++++++++++++++++
 2 files changed, 155 insertions(+)
 create mode 100755 devtools/check-doc-vs-code.sh
 create mode 100755 devtools/parse-flow-support.sh
diff --git a/devtools/check-doc-vs-code.sh b/devtools/check-doc-vs-code.sh
new file mode 100755
index 0000000000..6e53d66899
--- /dev/null
+++ b/devtools/check-doc-vs-code.sh
@@ -0,0 +1,79 @@
+#! /bin/sh -e
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2021 Mellanox Technologies, Ltd
+
+# Check whether doc & code are in sync.
+# Optional argument: check only what changed since a commit.
+trusted_commit=$1 # example: origin/main
+
+selfdir=$(dirname $(readlink -f $0))
+rootdir=$(readlink -f $selfdir/..)
+
+result=0
+
+# speed up by ignoring Unicode details
+export LC_COLLATE=C
+
+changed_files()
+{
+	[ -n "$files" ] ||
+		files=$(git diff-tree --name-only -r $trusted_commit..)
+	echo "$files"
+}
+
+has_code_change() # <pattern>
+{
+	test -n "$(git log --format='%h' -S"$1" $trusted_commit..)"
+}
+
+has_file_change() # <pattern>
+{
+	changed_files | grep -q "$1"
+}
+
+changed_net_drivers()
+{
+	net_paths='drivers/net/|doc/guides/nics/features/'
+	[ -n "$drivers" ] ||
+		drivers=$(changed_files |
+			sed -rn "s,^($net_paths)([^./]*).*,\2,p")
+	echo "$drivers"
+}
I will not reviewed in details yet, but first observation,
when 'trusted_commit' argument is used, the drivers list has many duplicated
entries which makes the output redundant and makes script take too much time.
Getting only unique list may help on it.

Re: [dpdk-dev] [PATCH v5 2/3] doc: add flow API features tables

From: Ferruh Yigit <hidden>
Date: 2021-05-14 10:42:54

On 4/7/2021 11:33 PM, Thomas Monjalon wrote:
The NICs overview table lists all supported features per driver.
There was a single row for "Flow API",
although rte_flow is composed of many items and actions.

The row "Flow API" is replaced with two new tables for items and actions.

Also, since rte_flow is not implemented in all drivers,
it would be ugly to add empty sections in some files.
That's why the error message for missing INI section is removed.

The lists are sorted alphabetically.
The extra files for some VF and vectorized data paths are not filled.

Signed-off-by: Asaf Penso <redacted>
Signed-off-by: Thomas Monjalon <redacted>
<...>
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+pf                   = Y
+phy_port             = Y
+port_id              = Y
+tcp                  = Y
+udp                  = Y
+vf                   = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+mark                 = Y
+pf                   = Y
+phy_port             = Y
+port_id              = Y
+rss                  = Y
+vf                   = Y
+vxlan_decap          = Y
+vxlan_encap          = Y
Indeed this is a matrix, isn't it, not all flow items support all flow actions,
but not sure if it is possible to figure out that matrix.

Re: [dpdk-dev] [PATCH v5 3/3] devtools: check flow API doc tables

From: Ferruh Yigit <hidden>
Date: 2021-05-14 10:51:53

On 4/7/2021 11:33 PM, Thomas Monjalon wrote:
The script check-doc-vs-code.sh may be used to add
some automatic checks of the doc.

If run without any argument, a complete check is done.
The optional argument is a git history reference point
to check faster only what has changed since this commit.

In this commit, the only check is for rte_flow tables,
achieved through the script parse-flow-support.sh.
If run without a .ini reference, it prints rte_flow tables.
Note: detected features are marked with the value Y,
while the real .ini file could have special values like I.
The script allow parsing exceptions (exclude or include),
like for bnxt code which lists unsupported items and actions.
Overall great to be able to generate and check document against code, also good
to have this by relatively small/simple scripts, thanks for the work.
This helps to remove the maintenance concerns I had.
Signed-off-by: Thomas Monjalon <redacted>
---
 devtools/check-doc-vs-code.sh  | 79 ++++++++++++++++++++++++++++++++++
 devtools/parse-flow-support.sh | 76 ++++++++++++++++++++++++++++++++
Will there be automated checks as part of the build system? Presumably in
'developer_mode'?


btw, scripts points out some new features not documented in .ini files, those
are the recently added ones, patch requires a rebase on top of latest code.
+rte_flow_support() # <category>
+{
+	title="rte_flow $1s"
+	pattern=$(echo "RTE_FLOW_$1_TYPE_" | awk '{print toupper($0)}')
+	list "$title" "$pattern" | grep -vwE 'void|end'
Should 'RTE_FLOW_ITEM_TYPE_ANY' also excluded, does it have benefit to have it
as listed?

Re: [dpdk-dev] [PATCH v5 2/3] doc: add flow API features tables

From: Thomas Monjalon <hidden>
Date: 2021-05-14 11:53:12

14/05/2021 12:42, Ferruh Yigit:
On 4/7/2021 11:33 PM, Thomas Monjalon wrote:
quoted
The NICs overview table lists all supported features per driver.
There was a single row for "Flow API",
although rte_flow is composed of many items and actions.

The row "Flow API" is replaced with two new tables for items and actions.

Also, since rte_flow is not implemented in all drivers,
it would be ugly to add empty sections in some files.
That's why the error message for missing INI section is removed.

The lists are sorted alphabetically.
The extra files for some VF and vectorized data paths are not filled.

Signed-off-by: Asaf Penso <redacted>
Signed-off-by: Thomas Monjalon <redacted>
<...>
quoted
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+pf                   = Y
+phy_port             = Y
+port_id              = Y
+tcp                  = Y
+udp                  = Y
+vf                   = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+mark                 = Y
+pf                   = Y
+phy_port             = Y
+port_id              = Y
+rss                  = Y
+vf                   = Y
+vxlan_decap          = Y
+vxlan_encap          = Y
Indeed this is a matrix, isn't it, not all flow items support all flow actions,
but not sure if it is possible to figure out that matrix.
We cannot express combinations and limitations here.
It is just showing some basic capabilities without limitations.
For more complete description, it must be noted in the guide.

Re: [dpdk-dev] [PATCH v5 3/3] devtools: check flow API doc tables

From: Thomas Monjalon <hidden>
Date: 2021-05-18 10:33:50

14/05/2021 12:51, Ferruh Yigit:
On 4/7/2021 11:33 PM, Thomas Monjalon wrote:
quoted
The script check-doc-vs-code.sh may be used to add
some automatic checks of the doc.

If run without any argument, a complete check is done.
The optional argument is a git history reference point
to check faster only what has changed since this commit.

In this commit, the only check is for rte_flow tables,
achieved through the script parse-flow-support.sh.
If run without a .ini reference, it prints rte_flow tables.
Note: detected features are marked with the value Y,
while the real .ini file could have special values like I.
The script allow parsing exceptions (exclude or include),
like for bnxt code which lists unsupported items and actions.
Overall great to be able to generate and check document against code, also good
to have this by relatively small/simple scripts, thanks for the work.
This helps to remove the maintenance concerns I had.
quoted
Signed-off-by: Thomas Monjalon <redacted>
---
 devtools/check-doc-vs-code.sh  | 79 ++++++++++++++++++++++++++++++++++
 devtools/parse-flow-support.sh | 76 ++++++++++++++++++++++++++++++++
Will there be automated checks as part of the build system? Presumably in
'developer_mode'?
I think we should discuss what could enter in developer mode or not.
I'm afraid it will become a mini-CI and will make compilation longer for everybody.
btw, scripts points out some new features not documented in .ini files, those
are the recently added ones, patch requires a rebase on top of latest code.
OK I am rebasing.
quoted
+rte_flow_support() # <category>
+{
+	title="rte_flow $1s"
+	pattern=$(echo "RTE_FLOW_$1_TYPE_" | awk '{print toupper($0)}')
+	list "$title" "$pattern" | grep -vwE 'void|end'
Should 'RTE_FLOW_ITEM_TYPE_ANY' also excluded, does it have benefit to have it
as listed?
This item may be unsupported by some PMDs,
so I think we need to report it.


Re: [dpdk-dev] [PATCH v5 3/3] devtools: check flow API doc tables

From: Thomas Monjalon <hidden>
Date: 2021-05-18 12:46:33

13/05/2021 20:40, Ferruh Yigit:
On 4/7/2021 11:33 PM, Thomas Monjalon wrote:
quoted
+changed_files()
+{
+	[ -n "$files" ] ||
+		files=$(git diff-tree --name-only -r $trusted_commit..)
+	echo "$files"
+}
+
+has_code_change() # <pattern>
+{
+	test -n "$(git log --format='%h' -S"$1" $trusted_commit..)"
+}
+
+has_file_change() # <pattern>
+{
+	changed_files | grep -q "$1"
+}
+
+changed_net_drivers()
+{
+	net_paths='drivers/net/|doc/guides/nics/features/'
+	[ -n "$drivers" ] ||
+		drivers=$(changed_files |
+			sed -rn "s,^($net_paths)([^./]*).*,\2,p")
+	echo "$drivers"
+}
I will not reviewed in details yet, but first observation,
when 'trusted_commit' argument is used, the drivers list has many duplicated
entries which makes the output redundant and makes script take too much time.
Getting only unique list may help on it.
Yes good catch, thanks.

[dpdk-dev] [PATCH v6 0/3] rte_flow doc matrix

From: Thomas Monjalon <hidden>
Date: 2021-05-18 13:28:54

This is an improvement of the rte_flow documentation:
it makes possible to quickly read which items and actions
may be accepted by the drivers in a DPDK release.

A script is provided for CI to make sure the matrix is updated,
while allowing some manual tuning.

Thomas Monjalon (3):
  doc: rename sfc features file
  doc: add flow API features tables
  devtools: check flow API doc tables

 .gitignore                                    |   2 +
 devtools/check-doc-vs-code.sh                 |  84 +++++++++++++
 devtools/parse-flow-support.sh                |  78 ++++++++++++
 doc/guides/conf.py                            |  18 +--
 doc/guides/nics/features.rst                  |  11 --
 doc/guides/nics/features/bnxt.ini             |  26 +++-
 doc/guides/nics/features/cxgbe.ini            |  31 ++++-
 doc/guides/nics/features/default.ini          | 118 +++++++++++++++++-
 doc/guides/nics/features/dpaa2.ini            |  19 ++-
 doc/guides/nics/features/e1000.ini            |  14 +++
 doc/guides/nics/features/enic.ini             |  29 ++++-
 doc/guides/nics/features/failsafe.ini         |   1 -
 doc/guides/nics/features/hinic.ini            |  16 ++-
 doc/guides/nics/features/hns3.ini             |  23 +++-
 doc/guides/nics/features/hns3_vf.ini          |   1 -
 doc/guides/nics/features/i40e.ini             |  31 ++++-
 doc/guides/nics/features/iavf.ini             |  30 ++++-
 doc/guides/nics/features/ice.ini              |  34 ++++-
 doc/guides/nics/features/ice_dcf.ini          |   1 -
 doc/guides/nics/features/igb.ini              |   1 -
 doc/guides/nics/features/igc.ini              |  12 +-
 doc/guides/nics/features/ipn3ke.ini           |  15 ++-
 doc/guides/nics/features/ixgbe.ini            |  24 +++-
 doc/guides/nics/features/mlx4.ini             |  13 +-
 doc/guides/nics/features/mlx5.ini             |  73 ++++++++++-
 doc/guides/nics/features/mvpp2.ini            |  14 +++
 doc/guides/nics/features/octeontx2.ini        |  43 ++++++-
 doc/guides/nics/features/octeontx2_vec.ini    |   1 -
 doc/guides/nics/features/octeontx2_vf.ini     |   1 -
 doc/guides/nics/features/qede.ini             |  11 +-
 .../nics/features/{sfc_efx.ini => sfc.ini}    |  35 +++++-
 doc/guides/nics/features/tap.ini              |  15 ++-
 doc/guides/nics/features/txgbe.ini            |  24 +++-
 doc/guides/nics/overview.rst                  |   8 ++
 34 files changed, 813 insertions(+), 44 deletions(-)
 create mode 100755 devtools/check-doc-vs-code.sh
 create mode 100755 devtools/parse-flow-support.sh
 rename doc/guides/nics/features/{sfc_efx.ini => sfc.ini} (57%)

-- 
2.31.1

[dpdk-dev] [PATCH v6 1/3] doc: rename sfc features file

From: Thomas Monjalon <hidden>
Date: 2021-05-18 13:28:58

The driver directory is drivers/net/sfc
but the features file was doc/guides/nics/features/sfc_efx.ini.

sfc_efx.ini is renamed sfc.ini to match the driver directory name.
It will help automatic checks of this file.

Signed-off-by: Thomas Monjalon <redacted>
---
 doc/guides/nics/features/{sfc_efx.ini => sfc.ini} | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename doc/guides/nics/features/{sfc_efx.ini => sfc.ini} (100%)
diff --git a/doc/guides/nics/features/sfc_efx.ini b/doc/guides/nics/features/sfc.ini
similarity index 100%
rename from doc/guides/nics/features/sfc_efx.ini
rename to doc/guides/nics/features/sfc.ini
-- 
2.31.1

[dpdk-dev] [PATCH v6 2/3] doc: add flow API features tables

From: Thomas Monjalon <hidden>
Date: 2021-05-18 13:29:05

The NICs overview table lists all supported features per driver.
There was a single row for "Flow API",
although rte_flow is composed of many items and actions.

The row "Flow API" is replaced with two new tables for items and actions.

Also, since rte_flow is not implemented in all drivers,
it would be ugly to add empty sections in some files.
That's why the error message for missing INI section is removed.

The lists are sorted alphabetically.
The extra files for some VF and vectorized data paths are not filled.

Signed-off-by: Asaf Penso <redacted>
Signed-off-by: Thomas Monjalon <redacted>
Acked-by: Kiran Kumar Kokkilagadda <redacted>
---
v6 changes:
	- rebase/update
	- remove deprecated shared action
---
 .gitignore                                 |   2 +
 doc/guides/conf.py                         |  18 ++--
 doc/guides/nics/features.rst               |  11 --
 doc/guides/nics/features/bnxt.ini          |  26 ++++-
 doc/guides/nics/features/cxgbe.ini         |  31 +++++-
 doc/guides/nics/features/default.ini       | 118 ++++++++++++++++++++-
 doc/guides/nics/features/dpaa2.ini         |  19 +++-
 doc/guides/nics/features/e1000.ini         |  14 +++
 doc/guides/nics/features/enic.ini          |  29 ++++-
 doc/guides/nics/features/failsafe.ini      |   1 -
 doc/guides/nics/features/hinic.ini         |  16 ++-
 doc/guides/nics/features/hns3.ini          |  23 +++-
 doc/guides/nics/features/hns3_vf.ini       |   1 -
 doc/guides/nics/features/i40e.ini          |  31 +++++-
 doc/guides/nics/features/iavf.ini          |  30 +++++-
 doc/guides/nics/features/ice.ini           |  34 +++++-
 doc/guides/nics/features/ice_dcf.ini       |   1 -
 doc/guides/nics/features/igb.ini           |   1 -
 doc/guides/nics/features/igc.ini           |  12 ++-
 doc/guides/nics/features/ipn3ke.ini        |  15 ++-
 doc/guides/nics/features/ixgbe.ini         |  24 ++++-
 doc/guides/nics/features/mlx4.ini          |  13 ++-
 doc/guides/nics/features/mlx5.ini          |  73 ++++++++++++-
 doc/guides/nics/features/mvpp2.ini         |  14 +++
 doc/guides/nics/features/octeontx2.ini     |  43 +++++++-
 doc/guides/nics/features/octeontx2_vec.ini |   1 -
 doc/guides/nics/features/octeontx2_vf.ini  |   1 -
 doc/guides/nics/features/qede.ini          |  11 +-
 doc/guides/nics/features/sfc.ini           |  35 +++++-
 doc/guides/nics/features/tap.ini           |  15 ++-
 doc/guides/nics/features/txgbe.ini         |  24 ++++-
 doc/guides/nics/overview.rst               |   8 ++
 32 files changed, 651 insertions(+), 44 deletions(-)
diff --git a/.gitignore b/.gitignore
index f73d93ca53..b19c0717e6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,8 @@
 
 # ignore generated documentation tables
 doc/guides/nics/overview_table.txt
+doc/guides/nics/rte_flow_actions_table.txt
+doc/guides/nics/rte_flow_items_table.txt
 doc/guides/cryptodevs/overview_feature_table.txt
 doc/guides/cryptodevs/overview_cipher_table.txt
 doc/guides/cryptodevs/overview_auth_table.txt
diff --git a/doc/guides/conf.py b/doc/guides/conf.py
index 894d81ca75..67d2dd62c7 100644
--- a/doc/guides/conf.py
+++ b/doc/guides/conf.py
@@ -176,14 +176,8 @@ def generate_overview_table(output_filename, table_id, section, table_name, titl
         # Initialize the dict with the default.ini value.
         ini_data[ini_filename] = valid_features.copy()
 
-        # Check for a valid ini section.
+        # Check for a section.
         if not config.has_section(section):
-            print("{}: File '{}' has no [{}] secton".format(warning,
-                                                            ini_filename,
-                                                            section),
-                                                            file=stderr)
-            if stop_on_error:
-                raise Exception('Warning is treated as a failure')
             continue
 
         # Check for valid features names.
@@ -339,6 +333,16 @@ def setup(app):
                             'Features',
                             'Features availability in networking drivers',
                             'Feature')
+    table_file = dirname(__file__) + '/nics/rte_flow_items_table.txt'
+    generate_overview_table(table_file, 2,
+                            'rte_flow items',
+                            'rte_flow items availability in networking drivers',
+                            'Item')
+    table_file = dirname(__file__) + '/nics/rte_flow_actions_table.txt'
+    generate_overview_table(table_file, 3,
+                            'rte_flow actions',
+                            'rte_flow actions availability in networking drivers',
+                            'Action')
     table_file = dirname(__file__) + '/cryptodevs/overview_feature_table.txt'
     generate_overview_table(table_file, 1,
                             'Features',
diff --git a/doc/guides/nics/features.rst b/doc/guides/nics/features.rst
index f6d30d0af3..403c2b03a3 100644
--- a/doc/guides/nics/features.rst
+++ b/doc/guides/nics/features.rst
@@ -397,17 +397,6 @@ Supports configuring link flow control.
   ``rte_eth_dev_priority_flow_ctrl_set()``.
 
 
-.. _nic_features_flow_api:
-
-Flow API
---------
-
-Supports flow API family.
-
-* **[implements] eth_dev_ops**: ``flow_ops_get``.
-* **[implements] rte_flow_ops**: ``All``.
-
-
 .. _nic_features_rate_limitation:
 
 Rate limitation
diff --git a/doc/guides/nics/features/bnxt.ini b/doc/guides/nics/features/bnxt.ini
index 79335783ec..291faaad05 100644
--- a/doc/guides/nics/features/bnxt.ini
+++ b/doc/guides/nics/features/bnxt.ini
@@ -27,7 +27,6 @@ VMDq                 = Y
 SR-IOV               = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
@@ -52,3 +51,28 @@ x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
 Perf doc             = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+pf                   = Y
+phy_port             = Y
+port_id              = Y
+tcp                  = Y
+udp                  = Y
+vf                   = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+mark                 = Y
+pf                   = Y
+phy_port             = Y
+port_id              = Y
+rss                  = Y
+vf                   = Y
+vxlan_decap          = Y
+vxlan_encap          = Y
diff --git a/doc/guides/nics/features/cxgbe.ini b/doc/guides/nics/features/cxgbe.ini
index 276879ec1a..a3ecf12aad 100644
--- a/doc/guides/nics/features/cxgbe.ini
+++ b/doc/guides/nics/features/cxgbe.ini
@@ -17,7 +17,6 @@ RSS hash             = Y
 RSS key update       = Y
 RSS reta update      = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 FEC                  = Y
@@ -34,3 +33,33 @@ Linux                = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+pf                   = Y
+phy_port             = Y
+tcp                  = Y
+udp                  = Y
+vf                   = Y
+vlan                 = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+mac_swap             = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_pcp      = Y
+of_set_vlan_vid      = Y
+phy_port             = Y
+queue                = Y
+set_ipv4_dst         = Y
+set_ipv4_src         = Y
+set_ipv6_dst         = Y
+set_ipv6_src         = Y
+set_mac_dst          = Y
+set_mac_src          = Y
+set_tp_dst           = Y
+set_tp_src           = Y
diff --git a/doc/guides/nics/features/default.ini b/doc/guides/nics/features/default.ini
index 8046bd121e..51f0361a80 100644
--- a/doc/guides/nics/features/default.ini
+++ b/doc/guides/nics/features/default.ini
@@ -38,7 +38,6 @@ SR-IOV               =
 DCB                  =
 VLAN filter          =
 Flow control         =
-Flow API             =
 Rate limitation      =
 Traffic mirroring    =
 Inline crypto        =
@@ -77,3 +76,120 @@ x86-64               =
 Usage doc            =
 Design doc           =
 Perf doc             =
+
+[rte_flow items]
+ah                   =
+any                  =
+arp_eth_ipv4         =
+conntrack            =
+ecpri                =
+esp                  =
+eth                  =
+e_tag                =
+fuzzy                =
+geneve               =
+geneve_opt           =
+gre                  =
+gre_key              =
+gtp                  =
+gtpc                 =
+gtpu                 =
+gtp_psc              =
+higig2               =
+icmp                 =
+icmp6                =
+icmp6_nd_na          =
+icmp6_nd_ns          =
+icmp6_nd_opt         =
+icmp6_nd_opt_sla_eth =
+icmp6_nd_opt_tla_eth =
+igmp                 =
+integrity            =
+invert               =
+ipv4                 =
+ipv6                 =
+ipv6_ext             =
+ipv6_frag_ext        =
+l2tpv3oip            =
+mark                 =
+meta                 =
+mpls                 =
+nsh                  =
+nvgre                =
+pf                   =
+pfcp                 =
+phy_port             =
+port_id              =
+pppoe                =
+pppoed               =
+pppoes               =
+pppoe_proto_id       =
+raw                  =
+sctp                 =
+tag                  =
+tcp                  =
+udp                  =
+vf                   =
+vlan                 =
+void                 =
+vxlan                =
+vxlan_gpe            =
+
+[rte_flow actions]
+age                  =
+conntrack            =
+count                =
+dec_tcp_ack          =
+dec_tcp_seq          =
+dec_ttl              =
+drop                 =
+flag                 =
+inc_tcp_ack          =
+inc_tcp_seq          =
+jump                 =
+mac_swap             =
+mark                 =
+meter                =
+modify_field         =
+nvgre_decap          =
+nvgre_encap          =
+of_copy_ttl_in       =
+of_copy_ttl_out      =
+of_dec_mpls_ttl      =
+of_dec_nw_ttl        =
+of_pop_mpls          =
+of_pop_vlan          =
+of_push_mpls         =
+of_push_vlan         =
+of_set_mpls_ttl      =
+of_set_nw_ttl        =
+of_set_vlan_pcp      =
+of_set_vlan_vid      =
+passthru             =
+pf                   =
+phy_port             =
+port_id              =
+queue                =
+raw_decap            =
+raw_encap            =
+rss                  =
+sample               =
+security             =
+set_ipv4_dscp        =
+set_ipv4_dst         =
+set_ipv4_src         =
+set_ipv6_dscp        =
+set_ipv6_dst         =
+set_ipv6_src         =
+set_mac              =
+set_mac_dst          =
+set_mac_src          =
+set_meta             =
+set_tag              =
+set_tp_dst           =
+set_tp_src           =
+set_ttl              =
+vf                   =
+void                 =
+vxlan_decap          =
+vxlan_encap          =
diff --git a/doc/guides/nics/features/dpaa2.ini b/doc/guides/nics/features/dpaa2.ini
index 59bd1a2ced..8e3d74cbb5 100644
--- a/doc/guides/nics/features/dpaa2.ini
+++ b/doc/guides/nics/features/dpaa2.ini
@@ -18,7 +18,6 @@ Unicast MAC filter   = Y
 RSS hash             = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 VLAN offload         = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
@@ -31,3 +30,21 @@ FW version           = Y
 Linux                = Y
 ARMv8                = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+gre                  = Y
+icmp                 = Y
+ipv4                 = Y
+ipv6                 = Y
+meta                 = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+
+[rte_flow actions]
+drop                 = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/e1000.ini b/doc/guides/nics/features/e1000.ini
index 7a224cc535..5af6040e37 100644
--- a/doc/guides/nics/features/e1000.ini
+++ b/doc/guides/nics/features/e1000.ini
@@ -29,3 +29,17 @@ FreeBSD              = Y
 Linux                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+
+[rte_flow actions]
+drop                 = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/enic.ini b/doc/guides/nics/features/enic.ini
index 16d6aabe47..a582616c07 100644
--- a/doc/guides/nics/features/enic.ini
+++ b/doc/guides/nics/features/enic.ini
@@ -25,7 +25,6 @@ Inner RSS            = Y
 SR-IOV               = Y
 CRC offload          = Y
 VLAN offload         = Y
-Flow API             = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
 Inner L3 checksum    = Y
@@ -39,3 +38,31 @@ Linux                = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+flag                 = Y
+jump                 = Y
+mark                 = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_pcp      = Y
+of_set_vlan_vid      = Y
+passthru             = Y
+port_id              = Y
+queue                = Y
+rss                  = Y
+vxlan_decap          = Y
+vxlan_encap          = Y
diff --git a/doc/guides/nics/features/failsafe.ini b/doc/guides/nics/features/failsafe.ini
index b6f3dcee61..8a2b92fc9c 100644
--- a/doc/guides/nics/features/failsafe.ini
+++ b/doc/guides/nics/features/failsafe.ini
@@ -19,7 +19,6 @@ Unicast MAC filter   = Y
 Multicast MAC filter = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Packet type parsing  = Y
 Basic stats          = Y
 Stats per queue      = Y
diff --git a/doc/guides/nics/features/hinic.ini b/doc/guides/nics/features/hinic.ini
index 988a0ad574..4ea7368704 100644
--- a/doc/guides/nics/features/hinic.ini
+++ b/doc/guides/nics/features/hinic.ini
@@ -32,10 +32,24 @@ Inner L4 checksum    = Y
 Basic stats          = Y
 Extended stats       = Y
 Stats per queue      = Y
-Flow API             = Y
 Flow control         = Y
 FW version           = Y
 Multiprocess aware   = Y
 Linux                = Y
 x86-64               = Y
 ARMv8                = Y
+
+[rte_flow items]
+any                  = Y
+eth                  = Y
+icmp                 = Y
+icmp6                = Y
+ipv4                 = Y
+ipv6                 = Y
+tcp                  = Y
+udp                  = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+queue                = Y
diff --git a/doc/guides/nics/features/hns3.ini b/doc/guides/nics/features/hns3.ini
index 0f89c60694..cf8d53d0d6 100644
--- a/doc/guides/nics/features/hns3.ini
+++ b/doc/guides/nics/features/hns3.ini
@@ -28,7 +28,6 @@ RSS reta update      = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 FEC                  = Y
@@ -50,3 +49,25 @@ Timestamp offload    = Y
 Multiprocess aware   = Y
 Linux                = Y
 ARMv8                = Y
+
+[rte_flow items]
+eth                  = Y
+geneve               = Y
+icmp                 = Y
+ipv4                 = Y
+ipv6                 = Y
+nvgre                = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+vxlan_gpe            = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+flag                 = Y
+mark                 = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/hns3_vf.ini b/doc/guides/nics/features/hns3_vf.ini
index 92383506c3..7da994c2dc 100644
--- a/doc/guides/nics/features/hns3_vf.ini
+++ b/doc/guides/nics/features/hns3_vf.ini
@@ -25,7 +25,6 @@ RSS hash             = Y
 RSS key update       = Y
 RSS reta update      = Y
 VLAN filter          = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 L3 checksum offload  = Y
diff --git a/doc/guides/nics/features/i40e.ini b/doc/guides/nics/features/i40e.ini
index 542432c41d..1f3f5eb3ff 100644
--- a/doc/guides/nics/features/i40e.ini
+++ b/doc/guides/nics/features/i40e.ini
@@ -27,7 +27,6 @@ SR-IOV               = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Traffic mirroring    = Y
 CRC offload          = Y
 VLAN offload         = Y
@@ -52,3 +51,33 @@ x86-32               = Y
 x86-64               = Y
 ARMv8                = Y
 Power8               = Y
+
+[rte_flow items]
+ah                   = Y
+esp                  = Y
+eth                  = Y
+gre                  = Y
+gtpc                 = Y
+gtpu                 = Y
+ipv4                 = Y
+ipv6                 = Y
+l2tpv3oip            = Y
+mpls                 = Y
+nvgre                = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vf                   = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+flag                 = Y
+mark                 = Y
+passthru             = Y
+pf                   = Y
+queue                = Y
+rss                  = Y
+vf                   = Y
diff --git a/doc/guides/nics/features/iavf.ini b/doc/guides/nics/features/iavf.ini
index 980680e568..7af62d4ce7 100644
--- a/doc/guides/nics/features/iavf.ini
+++ b/doc/guides/nics/features/iavf.ini
@@ -19,7 +19,6 @@ Multicast MAC filter = Y
 RSS hash             = Y
 RSS key update       = Y
 RSS reta update      = Y
-Flow API             = Y
 VLAN filter          = Y
 CRC offload          = Y
 VLAN offload         = Y
@@ -34,3 +33,32 @@ FreeBSD              = Y
 Linux                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+ah                   = Y
+arp_eth_ipv4         = Y
+ecpri                = Y
+esp                  = Y
+eth                  = Y
+gtpc                 = Y
+gtpu                 = Y
+gtp_psc              = Y
+icmp                 = Y
+icmp6                = Y
+ipv4                 = Y
+ipv6                 = Y
+ipv6_frag_ext        = Y
+l2tpv3oip            = Y
+pfcp                 = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+mark                 = Y
+passthru             = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/ice.ini b/doc/guides/nics/features/ice.ini
index 2b93872b1c..1b9228c678 100644
--- a/doc/guides/nics/features/ice.ini
+++ b/doc/guides/nics/features/ice.ini
@@ -21,7 +21,6 @@ Unicast MAC filter   = Y
 RSS hash             = Y
 RSS key update       = Y
 RSS reta update      = Y
-Flow API             = Y
 VLAN filter          = Y
 CRC offload          = Y
 VLAN offload         = Y
@@ -43,3 +42,36 @@ Linux                = Y
 Windows              = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+ah                   = Y
+arp_eth_ipv4         = Y
+esp                  = Y
+eth                  = Y
+gtpu                 = Y
+gtp_psc              = Y
+icmp                 = Y
+icmp6                = Y
+ipv4                 = Y
+ipv6                 = Y
+ipv6_frag_ext        = Y
+l2tpv3oip            = Y
+nvgre                = Y
+pfcp                 = Y
+pppoed               = Y
+pppoes               = Y
+pppoe_proto_id       = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+mark                 = Y
+passthru             = Y
+queue                = Y
+rss                  = Y
+vf                   = Y
diff --git a/doc/guides/nics/features/ice_dcf.ini b/doc/guides/nics/features/ice_dcf.ini
index f4998152df..ae79b6a515 100644
--- a/doc/guides/nics/features/ice_dcf.ini
+++ b/doc/guides/nics/features/ice_dcf.ini
@@ -8,7 +8,6 @@ Queue start/stop     = Y
 Jumbo frame          = Y
 Scattered Rx         = Y
 RSS hash             = P
-Flow API             = Y
 CRC offload          = Y
 L3 checksum offload  = P
 L4 checksum offload  = P
diff --git a/doc/guides/nics/features/igb.ini b/doc/guides/nics/features/igb.ini
index 2925a8031d..f4f6e9a4cb 100644
--- a/doc/guides/nics/features/igb.ini
+++ b/doc/guides/nics/features/igb.ini
@@ -24,7 +24,6 @@ SR-IOV               = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 QinQ offload         = Y
diff --git a/doc/guides/nics/features/igc.ini b/doc/guides/nics/features/igc.ini
index 300d37e81a..f810c2df4e 100644
--- a/doc/guides/nics/features/igc.ini
+++ b/doc/guides/nics/features/igc.ini
@@ -32,6 +32,16 @@ RSS key update       = Y
 RSS reta update      = Y
 VLAN filter          = Y
 VLAN offload         = Y
-Flow API             = P
 Linux                = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+tcp                  = Y
+udp                  = Y
+
+[rte_flow actions]
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/ipn3ke.ini b/doc/guides/nics/features/ipn3ke.ini
index 82de553eb2..5586f7cb33 100644
--- a/doc/guides/nics/features/ipn3ke.ini
+++ b/doc/guides/nics/features/ipn3ke.ini
@@ -26,7 +26,6 @@ SR-IOV               = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Traffic mirroring    = Y
 CRC offload          = Y
 VLAN offload         = Y
@@ -48,3 +47,17 @@ FreeBSD              = Y
 Linux                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+mpls                 = Y
+nvgre                = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+mark                 = Y
diff --git a/doc/guides/nics/features/ixgbe.ini b/doc/guides/nics/features/ixgbe.ini
index c5e6e14aac..93a9cc18ab 100644
--- a/doc/guides/nics/features/ixgbe.ini
+++ b/doc/guides/nics/features/ixgbe.ini
@@ -26,7 +26,6 @@ SR-IOV               = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Rate limitation      = Y
 Traffic mirroring    = Y
 Inline crypto        = Y
@@ -55,3 +54,26 @@ Linux                = Y
 ARMv8                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+e_tag                = Y
+fuzzy                = Y
+ipv4                 = Y
+ipv6                 = Y
+nvgre                = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+mark                 = Y
+pf                   = Y
+queue                = Y
+rss                  = Y
+security             = Y
+vf                   = Y
diff --git a/doc/guides/nics/features/mlx4.ini b/doc/guides/nics/features/mlx4.ini
index ebb9ccf767..c394dfcefe 100644
--- a/doc/guides/nics/features/mlx4.ini
+++ b/doc/guides/nics/features/mlx4.ini
@@ -22,7 +22,6 @@ RSS hash             = Y
 SR-IOV               = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
@@ -38,3 +37,15 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+
+[rte_flow actions]
+drop                 = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/mlx5.ini b/doc/guides/nics/features/mlx5.ini
index ddd131da16..3b82ce41fd 100644
--- a/doc/guides/nics/features/mlx5.ini
+++ b/doc/guides/nics/features/mlx5.ini
@@ -28,7 +28,6 @@ Inner RSS            = Y
 SR-IOV               = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 L3 checksum offload  = Y
@@ -52,3 +51,75 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+conntrack            = Y
+ecpri                = Y
+eth                  = Y
+geneve               = Y
+geneve_opt           = Y
+gre                  = Y
+gre_key              = Y
+gtp                  = Y
+gtp_psc              = Y
+icmp                 = Y
+icmp6                = Y
+integrity            = Y
+ipv4                 = Y
+ipv6                 = Y
+ipv6_frag_ext        = Y
+mark                 = Y
+meta                 = Y
+mpls                 = Y
+nvgre                = Y
+phy_port             = Y
+port_id              = Y
+tag                  = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+vxlan_gpe            = Y
+
+[rte_flow actions]
+age                  = I
+conntrack            = I
+count                = I
+dec_tcp_ack          = Y
+dec_tcp_seq          = Y
+dec_ttl              = Y
+drop                 = Y
+flag                 = Y
+inc_tcp_ack          = Y
+inc_tcp_seq          = Y
+jump                 = Y
+mark                 = Y
+meter                = Y
+modify_field         = Y
+nvgre_decap          = Y
+nvgre_encap          = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_pcp      = Y
+of_set_vlan_vid      = Y
+port_id              = Y
+queue                = Y
+raw_decap            = Y
+raw_encap            = Y
+rss                  = I
+sample               = Y
+set_ipv4_dscp        = Y
+set_ipv4_dst         = Y
+set_ipv4_src         = Y
+set_ipv6_dscp        = Y
+set_ipv6_dst         = Y
+set_ipv6_src         = Y
+set_mac_dst          = Y
+set_mac_src          = Y
+set_meta             = Y
+set_tag              = Y
+set_tp_dst           = Y
+set_tp_src           = Y
+set_ttl              = Y
+vxlan_decap          = Y
+vxlan_encap          = Y
diff --git a/doc/guides/nics/features/mvpp2.ini b/doc/guides/nics/features/mvpp2.ini
index ef47546d1c..2ce0ca817a 100644
--- a/doc/guides/nics/features/mvpp2.ini
+++ b/doc/guides/nics/features/mvpp2.ini
@@ -23,3 +23,17 @@ Basic stats          = Y
 Extended stats       = Y
 ARMv8                = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+raw                  = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+
+[rte_flow actions]
+drop                 = Y
+meter                = Y
+queue                = Y
diff --git a/doc/guides/nics/features/octeontx2.ini b/doc/guides/nics/features/octeontx2.ini
index c0bcb8278e..fa32bc7890 100644
--- a/doc/guides/nics/features/octeontx2.ini
+++ b/doc/guides/nics/features/octeontx2.ini
@@ -30,7 +30,6 @@ Inner RSS            = Y
 Inline protocol      = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Rate limitation      = Y
 Jumbo frame          = Y
 Scattered Rx         = Y
@@ -54,3 +53,45 @@ Registers dump       = Y
 Linux                = Y
 ARMv8                = Y
 Usage doc            = Y
+
+[rte_flow items]
+any                  = Y
+arp_eth_ipv4         = Y
+esp                  = Y
+eth                  = Y
+e_tag                = Y
+geneve               = Y
+gre                  = Y
+gre_key              = Y
+gtpc                 = Y
+gtpu                 = Y
+higig2               = Y
+icmp                 = Y
+ipv4                 = Y
+ipv6                 = Y
+ipv6_ext             = Y
+mpls                 = Y
+nvgre                = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+vxlan_gpe            = Y
+
+[rte_flow actions]
+count                = Y
+drop                 = Y
+flag                 = Y
+mark                 = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_pcp      = Y
+of_set_vlan_vid      = Y
+pf                   = Y
+port_id              = Y
+queue                = Y
+rss                  = Y
+security             = Y
+vf                   = Y
diff --git a/doc/guides/nics/features/octeontx2_vec.ini b/doc/guides/nics/features/octeontx2_vec.ini
index 7025e140ad..376a1d6cc1 100644
--- a/doc/guides/nics/features/octeontx2_vec.ini
+++ b/doc/guides/nics/features/octeontx2_vec.ini
@@ -27,7 +27,6 @@ RSS reta update      = Y
 Inner RSS            = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Rate limitation      = Y
 Jumbo frame          = Y
 VLAN offload         = Y
diff --git a/doc/guides/nics/features/octeontx2_vf.ini b/doc/guides/nics/features/octeontx2_vf.ini
index 7f5e5b8bba..8141aadf85 100644
--- a/doc/guides/nics/features/octeontx2_vf.ini
+++ b/doc/guides/nics/features/octeontx2_vf.ini
@@ -23,7 +23,6 @@ RSS reta update      = Y
 Inner RSS            = Y
 Inline protocol      = Y
 VLAN filter          = Y
-Flow API             = Y
 Rate limitation      = Y
 Jumbo frame          = Y
 Scattered Rx         = Y
diff --git a/doc/guides/nics/features/qede.ini b/doc/guides/nics/features/qede.ini
index 852cecb3d3..e65d5d076e 100644
--- a/doc/guides/nics/features/qede.ini
+++ b/doc/guides/nics/features/qede.ini
@@ -20,7 +20,6 @@ RSS key update       = Y
 RSS reta update      = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 CRC offload          = Y
 VLAN offload         = Y
 L3 checksum offload  = Y
@@ -39,3 +38,13 @@ ARMv8                = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+ipv4                 = Y
+ipv6                 = Y
+tcp                  = Y
+udp                  = Y
+
+[rte_flow actions]
+drop                 = Y
+queue                = Y
diff --git a/doc/guides/nics/features/sfc.ini b/doc/guides/nics/features/sfc.ini
index 7e29568e5f..9e66ec4293 100644
--- a/doc/guides/nics/features/sfc.ini
+++ b/doc/guides/nics/features/sfc.ini
@@ -24,7 +24,6 @@ RSS key update       = Y
 RSS reta update      = Y
 SR-IOV               = Y
 Flow control         = Y
-Flow API             = Y
 VLAN offload         = P
 L3 checksum offload  = Y
 L4 checksum offload  = Y
@@ -41,3 +40,37 @@ FreeBSD              = Y
 Linux                = Y
 ARMv8                = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+geneve               = Y
+ipv4                 = Y
+ipv6                 = Y
+nvgre                = Y
+pf                   = Y
+phy_port             = Y
+port_id              = Y
+pppoed               = Y
+pppoes               = Y
+tcp                  = Y
+udp                  = Y
+vf                   = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+flag                 = Y
+mark                 = Y
+of_pop_vlan          = Y
+of_push_vlan         = Y
+of_set_vlan_pcp      = Y
+of_set_vlan_vid      = Y
+pf                   = Y
+phy_port             = Y
+port_id              = Y
+queue                = Y
+rss                  = Y
+vf                   = Y
+vxlan_decap          = Y
+vxlan_encap          = Y
diff --git a/doc/guides/nics/features/tap.ini b/doc/guides/nics/features/tap.ini
index be5e53dbe9..b4a356e5d5 100644
--- a/doc/guides/nics/features/tap.ini
+++ b/doc/guides/nics/features/tap.ini
@@ -11,7 +11,6 @@ Rx interrupt         = Y
 Promiscuous mode     = Y
 Allmulticast mode    = Y
 Basic stats          = Y
-Flow API             = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
 MTU update           = Y
@@ -26,3 +25,17 @@ Power8               = Y
 x86-32               = Y
 x86-64               = Y
 Usage doc            = Y
+
+[rte_flow items]
+eth                  = Y
+ipv4                 = Y
+ipv6                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+
+[rte_flow actions]
+drop                 = Y
+passthru             = Y
+queue                = Y
+rss                  = Y
diff --git a/doc/guides/nics/features/txgbe.ini b/doc/guides/nics/features/txgbe.ini
index a3fdee9f8a..61cb3f6d9f 100644
--- a/doc/guides/nics/features/txgbe.ini
+++ b/doc/guides/nics/features/txgbe.ini
@@ -26,7 +26,6 @@ SR-IOV               = Y
 DCB                  = Y
 VLAN filter          = Y
 Flow control         = Y
-Flow API             = Y
 Rate limitation      = Y
 Inline crypto        = Y
 CRC offload          = P
@@ -52,3 +51,26 @@ Linux                = Y
 ARMv8                = Y
 x86-32               = Y
 x86-64               = Y
+
+[rte_flow items]
+eth                  = Y
+e_tag                = Y
+fuzzy                = Y
+ipv4                 = Y
+ipv6                 = Y
+nvgre                = Y
+raw                  = Y
+sctp                 = Y
+tcp                  = Y
+udp                  = Y
+vlan                 = Y
+vxlan                = Y
+
+[rte_flow actions]
+drop                 = Y
+mark                 = Y
+pf                   = Y
+queue                = Y
+rss                  = Y
+security             = Y
+vf                   = Y
diff --git a/doc/guides/nics/overview.rst b/doc/guides/nics/overview.rst
index 20cd52b097..67575c699c 100644
--- a/doc/guides/nics/overview.rst
+++ b/doc/guides/nics/overview.rst
@@ -32,3 +32,11 @@ More details about features can be found in :doc:`features`.
 
    Features marked with "P" are partially supported. Refer to the appropriate
    NIC guide in the following sections for details.
+
+.. include:: rte_flow_items_table.txt
+
+.. include:: rte_flow_actions_table.txt
+
+.. Note::
+
+   rte_flow actions marked with "I" can be indirect as well.
-- 
2.31.1

[dpdk-dev] [PATCH v6 3/3] devtools: check flow API doc tables

From: Thomas Monjalon <hidden>
Date: 2021-05-18 13:29:14

The script check-doc-vs-code.sh may be used to add
some automatic checks of the doc.

If run without any argument, a complete check is done.
The optional argument is a git history reference point
to check faster only what has changed since this commit.

In this commit, the only check is for rte_flow tables,
achieved through the script parse-flow-support.sh.
If run without a .ini reference, it prints rte_flow tables.
Note: detected features are marked with the value Y,
while the real .ini file could have special values like I.
The script allow parsing exceptions (exclude or include),
like for bnxt code which lists unsupported items and actions.

Signed-off-by: Thomas Monjalon <redacted>
---
v6 changes:
	- fix redundant drivers
	- ignore indirect action
	- prefix misses with a category (item or action)
---
 devtools/check-doc-vs-code.sh  | 84 ++++++++++++++++++++++++++++++++++
 devtools/parse-flow-support.sh | 78 +++++++++++++++++++++++++++++++
 2 files changed, 162 insertions(+)
 create mode 100755 devtools/check-doc-vs-code.sh
 create mode 100755 devtools/parse-flow-support.sh
diff --git a/devtools/check-doc-vs-code.sh b/devtools/check-doc-vs-code.sh
new file mode 100755
index 0000000000..c58c239c87
--- /dev/null
+++ b/devtools/check-doc-vs-code.sh
@@ -0,0 +1,84 @@
+#! /bin/sh -e
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2021 Mellanox Technologies, Ltd
+
+# Check whether doc & code are in sync.
+# Optional argument: check only what changed since a commit.
+trusted_commit=$1 # example: origin/main
+
+selfdir=$(dirname $(readlink -f $0))
+rootdir=$(readlink -f $selfdir/..)
+
+# speed up by ignoring Unicode details
+export LC_COLLATE=C
+
+result=0
+error() # <message>
+{
+	echo "$*"
+	result=$(($result + 1))
+}
+
+changed_files()
+{
+	[ -n "$files" ] ||
+		files=$(git diff-tree --name-only -r $trusted_commit..)
+	echo "$files"
+}
+
+has_code_change() # <pattern>
+{
+	test -n "$(git log --format='%h' -S"$1" $trusted_commit..)"
+}
+
+has_file_change() # <pattern>
+{
+	changed_files | grep -q "$1"
+}
+
+changed_net_drivers()
+{
+	net_paths='drivers/net/|doc/guides/nics/features/'
+	[ -n "$drivers" ] ||
+		drivers=$(changed_files |
+			sed -rn "s,^($net_paths)([^./]*).*,\2,p" |
+			sort -u)
+	echo "$drivers"
+}
+
+all_net_drivers()
+{
+	find $rootdir/drivers/net -mindepth 1 -maxdepth 1 -type d |
+	sed 's,.*/,,' |
+	sort
+}
+
+check_rte_flow() # <driver>
+{
+	code=$rootdir/drivers/net/$1
+	doc=$rootdir/doc/guides/nics/features/$1.ini
+	[ -d $code ] || return 0
+	[ -f $doc ] || return 0
+	report=$($selfdir/parse-flow-support.sh $code $doc)
+	if [ -n "$report" ]; then
+		error "rte_flow doc out of sync for $1"
+		echo "$report" | sed 's,^,\t,'
+	fi
+}
+
+if [ -z "$trusted_commit" ]; then
+	# check all
+	for driver in $(all_net_drivers); do
+		check_rte_flow $driver
+	done
+	exit $result
+fi
+
+# find what changed and check
+if has_code_change 'RTE_FLOW_.*_TYPE_' ||
+		has_file_change 'doc/guides/nics/features'; then
+	for driver in $(changed_net_drivers); do
+		check_rte_flow $driver
+	done
+fi
+exit $result
diff --git a/devtools/parse-flow-support.sh b/devtools/parse-flow-support.sh
new file mode 100755
index 0000000000..aeed76e55f
--- /dev/null
+++ b/devtools/parse-flow-support.sh
@@ -0,0 +1,78 @@
+#! /bin/sh -e
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright 2021 Mellanox Technologies, Ltd
+
+# Parse rte_flow support of a driver directory,
+# and optionally show difference with a doc file in .ini format.
+
+dir=$1 # drivers/net/foo
+ref=$2 # doc/guides/nics/features/foo.ini
+
+if [ -z "$dir" ]; then
+	echo "directory argument is required" >&2
+	exit 1
+fi
+
+# sorting order
+export LC_COLLATE=C
+
+# exclude exceptions
+exclude() # <pattern>
+{
+	case $(basename $dir) in
+		bnxt)
+			filter=$(sed -n "/$1/{N;/TYPE_NOT_SUPPORTED/P;}" \
+				$dir/tf_ulp/ulp_template_db{,_tbl}.c |
+				grep -wo "$1[[:alnum:]_]*" | sort -u |
+				tr '\n' '|' | sed 's,.$,\n,')
+			grep -vE "$filter";;
+		*) cat
+	esac
+}
+
+# include exceptions
+include() # <pattern>
+{
+	case $(basename $dir) in
+	esac
+}
+
+# generate INI section
+list() # <title> <pattern>
+{
+	echo "[$1]"
+	git grep -who "$2[[:alnum:]_]*" $dir |
+	(exclude $2; include $2) | sort -u |
+	awk 'sub(/'$2'/, "") {printf "%-20s = Y\n", tolower($0)}'
+}
+
+rte_flow_support() # <category>
+{
+	title="rte_flow $1s"
+	pattern=$(echo "RTE_FLOW_$1_TYPE_" | awk '{print toupper($0)}')
+	list "$title" "$pattern" | grep -vwE 'void|indirect|end'
+}
+
+if [ -z "$ref" ]; then # generate full tables
+	rte_flow_support item
+	echo
+	rte_flow_support action
+	exit 0
+fi
+
+# compare with reference input
+rte_flow_compare() # <category>
+{
+	section="rte_flow $1s]"
+	{
+		rte_flow_support $1
+		sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
+	} |
+	sed '/]/d' | # ignore section title
+	sed 's, *=.*,,' | # ignore value (better in doc than generated one)
+	sort | uniq -u | # show differences
+	sed "s,^,$1 ," # prefix with category name
+}
+
+rte_flow_compare item
+rte_flow_compare action
-- 
2.31.1

Re: [dpdk-dev] [PATCH v6 0/3] rte_flow doc matrix

From: Thomas Monjalon <hidden>
Date: 2021-05-18 16:55:03

18/05/2021 15:28, Thomas Monjalon:
This is an improvement of the rte_flow documentation:
it makes possible to quickly read which items and actions
may be accepted by the drivers in a DPDK release.

A script is provided for CI to make sure the matrix is updated,
while allowing some manual tuning.

Thomas Monjalon (3):
  doc: rename sfc features file
  doc: add flow API features tables
  devtools: check flow API doc tables
Applied


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