* [PATCH 0/6] ethdev: jump to table support @ 2024-09-19 0:48 Alexander Kozyrev 2024-09-19 0:48 ` [PATCH 1/6] ethdev: add insertion by index with pattern Alexander Kozyrev ` (6 more replies) 0 siblings, 7 replies; 30+ messages in thread From: Alexander Kozyrev @ 2024-09-19 0:48 UTC (permalink / raw) To: dev; +Cc: dsosnowski, orika, thomas, matan, ferruh.yigit, stephen Introduce new Flow API JUMP_TO_TABLE_INDEX action. It allows bypassing a hierarchy of groups and going directly to a specified flow table. That gives a user the flexibility to jump between different priorities in a group and eliminates the need to do a table lookup in the group hierarchy. The JUMP_TO_TABLE_INDEX action forwards a packet to the specified rule index inside the index-based flow table. The current index-based flow table doesn't do any matching on the packet and executes the actions immediately. Add a new index-based flow table with pattern matching. The JUMP_TO_TABLE_INDEX can redirect a packet to another matching criteria at the specified index in this case. RFC: https://patchwork.dpdk.org/project/dpdk/patch/20240822202753.3856703-1-akozyrev@nvidia.com/ Alexander Kozyrev (6): ethdev: add insertion by index with pattern app/testpmd: add index with pattern insertion type ethdev: add flow rule insertion by index with pattern app/testpmd: add insertion by index with pattern option ethdev: add jump to table index action app/testpmd: add jump to table index action app/test-pmd/cmdline_flow.c | 44 +++++++++++++- app/test-pmd/config.c | 22 +++++-- app/test-pmd/testpmd.h | 2 +- doc/guides/prog_guide/rte_flow.rst | 20 +++++++ doc/guides/rel_notes/release_24_11.rst | 13 +++++ lib/ethdev/ethdev_trace.h | 44 ++++++++++++++ lib/ethdev/ethdev_trace_points.c | 6 ++ lib/ethdev/rte_flow.c | 56 ++++++++++++++++++ lib/ethdev/rte_flow.h | 81 ++++++++++++++++++++++++++ lib/ethdev/rte_flow_driver.h | 14 +++++ lib/ethdev/version.map | 3 + 11 files changed, 296 insertions(+), 9 deletions(-) -- 2.18.2 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 1/6] ethdev: add insertion by index with pattern 2024-09-19 0:48 [PATCH 0/6] ethdev: jump to table support Alexander Kozyrev @ 2024-09-19 0:48 ` Alexander Kozyrev 2024-09-25 15:01 ` Dariusz Sosnowski 2024-09-19 0:48 ` [PATCH 2/6] app/testpmd: add index with pattern insertion type Alexander Kozyrev ` (5 subsequent siblings) 6 siblings, 1 reply; 30+ messages in thread From: Alexander Kozyrev @ 2024-09-19 0:48 UTC (permalink / raw) To: dev; +Cc: dsosnowski, orika, thomas, matan, ferruh.yigit, stephen There are two flow table rules insertion type today: pattern-based insertion when packets match on the pattern and index-based insertion when packets always hit at the index. We need another mode that allows to match on the pattern at the index: insertion by index with pattern. Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> --- doc/guides/rel_notes/release_24_11.rst | 4 ++++ lib/ethdev/rte_flow.h | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/doc/guides/rel_notes/release_24_11.rst b/doc/guides/rel_notes/release_24_11.rst index 0ff70d9057..7056f17f3c 100644 --- a/doc/guides/rel_notes/release_24_11.rst +++ b/doc/guides/rel_notes/release_24_11.rst @@ -55,6 +55,10 @@ New Features Also, make sure to start the actual text at the margin. ======================================================= +* **Added a new insertion by index with pattern table insertion type.** + + Extended rte_flow_table_insertion_type enum with new + RTE_FLOW_TABLE_INSERTION_TYPE_INDEX_WITH_PATTERN type. Removed Items ------------- diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index f864578f80..6f30dd7ae9 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -5898,6 +5898,10 @@ enum rte_flow_table_insertion_type { * Index-based insertion. */ RTE_FLOW_TABLE_INSERTION_TYPE_INDEX, + /** + * Index-based insertion with pattern. + */ + RTE_FLOW_TABLE_INSERTION_TYPE_INDEX_WITH_PATTERN, }; /** -- 2.18.2 ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: [PATCH 1/6] ethdev: add insertion by index with pattern 2024-09-19 0:48 ` [PATCH 1/6] ethdev: add insertion by index with pattern Alexander Kozyrev @ 2024-09-25 15:01 ` Dariusz Sosnowski 0 siblings, 0 replies; 30+ messages in thread From: Dariusz Sosnowski @ 2024-09-25 15:01 UTC (permalink / raw) To: Alexander Kozyrev, dev Cc: Ori Kam, NBU-Contact-Thomas Monjalon (EXTERNAL), Matan Azrad, ferruh.yigit, stephen > -----Original Message----- > From: Alexander Kozyrev <akozyrev@nvidia.com> > Sent: Thursday, September 19, 2024 02:48 > To: dev@dpdk.org > Cc: Dariusz Sosnowski <dsosnowski@nvidia.com>; Ori Kam > <orika@nvidia.com>; NBU-Contact-Thomas Monjalon (EXTERNAL) > <thomas@monjalon.net>; Matan Azrad <matan@nvidia.com>; > ferruh.yigit@amd.com; stephen@networkplumber.org > Subject: [PATCH 1/6] ethdev: add insertion by index with pattern > > There are two flow table rules insertion type today: > pattern-based insertion when packets match on the pattern and index-based > insertion when packets always hit at the index. > We need another mode that allows to match on the pattern at the index: > insertion by index with pattern. > > Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com> Best regards, Dariusz Sosnowski ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 2/6] app/testpmd: add index with pattern insertion type 2024-09-19 0:48 [PATCH 0/6] ethdev: jump to table support Alexander Kozyrev 2024-09-19 0:48 ` [PATCH 1/6] ethdev: add insertion by index with pattern Alexander Kozyrev @ 2024-09-19 0:48 ` Alexander Kozyrev 2024-09-25 15:01 ` Dariusz Sosnowski 2024-09-19 0:48 ` [PATCH 3/6] ethdev: add flow rule insertion by index with pattern Alexander Kozyrev ` (4 subsequent siblings) 6 siblings, 1 reply; 30+ messages in thread From: Alexander Kozyrev @ 2024-09-19 0:48 UTC (permalink / raw) To: dev; +Cc: dsosnowski, orika, thomas, matan, ferruh.yigit, stephen Provide index_with_pattern command line option for the template table insertion type. flow template_table 0 create table_id 2 group 13 priority 0 insertion_type index_with_pattern ingress rules_number 64 pattern_template 2 actions_template 2 Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> --- app/test-pmd/cmdline_flow.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index d04280eb3e..a794e5eba5 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -1030,7 +1030,7 @@ static const char *const meter_colors[] = { }; static const char *const table_insertion_types[] = { - "pattern", "index", NULL + "pattern", "index", "index_with_pattern", NULL }; static const char *const table_hash_funcs[] = { -- 2.18.2 ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: [PATCH 2/6] app/testpmd: add index with pattern insertion type 2024-09-19 0:48 ` [PATCH 2/6] app/testpmd: add index with pattern insertion type Alexander Kozyrev @ 2024-09-25 15:01 ` Dariusz Sosnowski 0 siblings, 0 replies; 30+ messages in thread From: Dariusz Sosnowski @ 2024-09-25 15:01 UTC (permalink / raw) To: Alexander Kozyrev, dev Cc: Ori Kam, NBU-Contact-Thomas Monjalon (EXTERNAL), Matan Azrad, ferruh.yigit, stephen > -----Original Message----- > From: Alexander Kozyrev <akozyrev@nvidia.com> > Sent: Thursday, September 19, 2024 02:48 > To: dev@dpdk.org > Cc: Dariusz Sosnowski <dsosnowski@nvidia.com>; Ori Kam > <orika@nvidia.com>; NBU-Contact-Thomas Monjalon (EXTERNAL) > <thomas@monjalon.net>; Matan Azrad <matan@nvidia.com>; > ferruh.yigit@amd.com; stephen@networkplumber.org > Subject: [PATCH 2/6] app/testpmd: add index with pattern insertion type > > Provide index_with_pattern command line option for the template table > insertion type. > > flow template_table 0 create table_id 2 group 13 priority 0 > insertion_type index_with_pattern ingress rules_number 64 > pattern_template 2 actions_template 2 > > Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com> Best regards, Dariusz Sosnowski ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 3/6] ethdev: add flow rule insertion by index with pattern 2024-09-19 0:48 [PATCH 0/6] ethdev: jump to table support Alexander Kozyrev 2024-09-19 0:48 ` [PATCH 1/6] ethdev: add insertion by index with pattern Alexander Kozyrev 2024-09-19 0:48 ` [PATCH 2/6] app/testpmd: add index with pattern insertion type Alexander Kozyrev @ 2024-09-19 0:48 ` Alexander Kozyrev 2024-09-25 15:00 ` Dariusz Sosnowski 2024-09-19 0:48 ` [PATCH 4/6] app/testpmd: add insertion by index with pattern option Alexander Kozyrev ` (3 subsequent siblings) 6 siblings, 1 reply; 30+ messages in thread From: Alexander Kozyrev @ 2024-09-19 0:48 UTC (permalink / raw) To: dev; +Cc: dsosnowski, orika, thomas, matan, ferruh.yigit, stephen Add a new API to enqueue flow rule creation by index with pattern. The new template table rules insertion type, index-based insertion with pattern, requires a new flow rule creation function with both rule index and pattern provided. Packets will match on the provided pattern at the provided index. Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> --- doc/guides/prog_guide/rte_flow.rst | 20 ++++++++++ doc/guides/rel_notes/release_24_11.rst | 5 +++ lib/ethdev/ethdev_trace.h | 44 +++++++++++++++++++++ lib/ethdev/ethdev_trace_points.c | 6 +++ lib/ethdev/rte_flow.c | 55 ++++++++++++++++++++++++++ lib/ethdev/rte_flow.h | 54 +++++++++++++++++++++++++ lib/ethdev/rte_flow_driver.h | 14 +++++++ lib/ethdev/version.map | 3 ++ 8 files changed, 201 insertions(+) diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index dad588763f..adbd9b1c20 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -4156,6 +4156,26 @@ Enqueueing a flow rule creation operation to insert a rule at a table index. A valid handle in case of success is returned. It must be destroyed later by calling ``rte_flow_async_destroy()`` even if the rule is rejected by HW. +Enqueue creation by index with pattern +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enqueueing a flow rule creation operation to insert a rule at a table index with pattern. + +.. code-block:: c + + struct rte_flow * + rte_flow_async_create_by_index_with_pattern(uint16_t port_id, + uint32_t queue_id, + const struct rte_flow_op_attr *op_attr, + struct rte_flow_template_table *template_table, + uint32_t rule_index, + const struct rte_flow_item pattern[], + uint8_t pattern_template_index, + const struct rte_flow_action actions[], + uint8_t actions_template_index, + void *user_data, + struct rte_flow_error *error); + Enqueue destruction operation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/doc/guides/rel_notes/release_24_11.rst b/doc/guides/rel_notes/release_24_11.rst index 7056f17f3c..f71a9ab562 100644 --- a/doc/guides/rel_notes/release_24_11.rst +++ b/doc/guides/rel_notes/release_24_11.rst @@ -60,6 +60,11 @@ New Features Extended rte_flow_table_insertion_type enum with new RTE_FLOW_TABLE_INSERTION_TYPE_INDEX_WITH_PATTERN type. +* **Added flow rule insertion by index with pattern to the Flow API.** + + Added API for inserting the rule by index with pattern. + Introduced rte_flow_async_create_by_index_with_pattern() function. + Removed Items ------------- diff --git a/lib/ethdev/ethdev_trace.h b/lib/ethdev/ethdev_trace.h index 3bec87bfdb..910bedbebd 100644 --- a/lib/ethdev/ethdev_trace.h +++ b/lib/ethdev/ethdev_trace.h @@ -2343,6 +2343,50 @@ RTE_TRACE_POINT_FP( rte_trace_point_emit_ptr(flow); ) +RTE_TRACE_POINT_FP( + rte_flow_trace_async_create_by_index, + RTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id, + const struct rte_flow_op_attr *op_attr, + const struct rte_flow_template_table *template_table, + uint32_t rule_index, + const struct rte_flow_action *actions, + uint8_t actions_template_index, + const void *user_data, const struct rte_flow *flow), + rte_trace_point_emit_u16(port_id); + rte_trace_point_emit_u32(queue_id); + rte_trace_point_emit_ptr(op_attr); + rte_trace_point_emit_ptr(template_table); + rte_trace_point_emit_u32(rule_index); + rte_trace_point_emit_ptr(actions); + rte_trace_point_emit_u8(actions_template_index); + rte_trace_point_emit_ptr(user_data); + rte_trace_point_emit_ptr(flow); +) + +RTE_TRACE_POINT_FP( + rte_flow_trace_async_create_by_index_with_pattern, + RTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id, + const struct rte_flow_op_attr *op_attr, + const struct rte_flow_template_table *template_table, + uint32_t rule_index, + const struct rte_flow_item *pattern, + uint8_t pattern_template_index, + const struct rte_flow_action *actions, + uint8_t actions_template_index, + const void *user_data, const struct rte_flow *flow), + rte_trace_point_emit_u16(port_id); + rte_trace_point_emit_u32(queue_id); + rte_trace_point_emit_ptr(op_attr); + rte_trace_point_emit_ptr(template_table); + rte_trace_point_emit_u32(rule_index); + rte_trace_point_emit_ptr(pattern); + rte_trace_point_emit_u8(pattern_template_index); + rte_trace_point_emit_ptr(actions); + rte_trace_point_emit_u8(actions_template_index); + rte_trace_point_emit_ptr(user_data); + rte_trace_point_emit_ptr(flow); +) + RTE_TRACE_POINT_FP( rte_flow_trace_async_destroy, RTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id, diff --git a/lib/ethdev/ethdev_trace_points.c b/lib/ethdev/ethdev_trace_points.c index 99e04f5893..0563fb1451 100644 --- a/lib/ethdev/ethdev_trace_points.c +++ b/lib/ethdev/ethdev_trace_points.c @@ -583,6 +583,12 @@ RTE_TRACE_POINT_REGISTER(rte_flow_trace_template_table_destroy, RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_create, lib.ethdev.flow.async_create) +RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_create_by_index, + lib.ethdev.flow.async_create_by_index) + +RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_create_by_index_with_pattern, + lib.ethdev.flow.async_create_by_index_with_pattern) + RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_destroy, lib.ethdev.flow.async_destroy) diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c index 4076ae4ee1..f6259343e8 100644 --- a/lib/ethdev/rte_flow.c +++ b/lib/ethdev/rte_flow.c @@ -2109,6 +2109,42 @@ rte_flow_async_create_by_index(uint16_t port_id, user_data, error); } +struct rte_flow * +rte_flow_async_create_by_index_with_pattern(uint16_t port_id, + uint32_t queue_id, + const struct rte_flow_op_attr *op_attr, + struct rte_flow_template_table *template_table, + uint32_t rule_index, + const struct rte_flow_item pattern[], + uint8_t pattern_template_index, + const struct rte_flow_action actions[], + uint8_t actions_template_index, + void *user_data, + struct rte_flow_error *error) +{ + struct rte_eth_dev *dev = &rte_eth_devices[port_id]; + +#ifdef RTE_FLOW_DEBUG + if (!rte_eth_dev_is_valid_port(port_id)) { + rte_flow_error_set(error, ENODEV, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, + rte_strerror(ENODEV)); + return NULL; + } + if (dev->flow_fp_ops == NULL || + dev->flow_fp_ops->async_create_by_index_with_pattern == NULL) { + rte_flow_error_set(error, ENOSYS, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, + rte_strerror(ENOSYS)); + return NULL; + } +#endif + + return dev->flow_fp_ops->async_create_by_index_with_pattern(dev, queue_id, op_attr, + template_table, rule_index, + pattern, pattern_template_index, + actions, actions_template_index, + user_data, error); +} + int rte_flow_async_destroy(uint16_t port_id, uint32_t queue_id, @@ -2733,6 +2769,24 @@ rte_flow_dummy_async_create_by_index(struct rte_eth_dev *dev __rte_unused, return NULL; } +static struct rte_flow * +rte_flow_dummy_async_create_by_index_with_pattern(struct rte_eth_dev *dev __rte_unused, + uint32_t queue __rte_unused, + const struct rte_flow_op_attr *attr __rte_unused, + struct rte_flow_template_table *table __rte_unused, + uint32_t rule_index __rte_unused, + const struct rte_flow_item items[] __rte_unused, + uint8_t pattern_template_index __rte_unused, + const struct rte_flow_action actions[] __rte_unused, + uint8_t action_template_index __rte_unused, + void *user_data __rte_unused, + struct rte_flow_error *error) +{ + rte_flow_error_set(error, ENOSYS, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, + rte_strerror(ENOSYS)); + return NULL; +} + static int rte_flow_dummy_async_actions_update(struct rte_eth_dev *dev __rte_unused, uint32_t queue_id __rte_unused, @@ -2899,6 +2953,7 @@ struct rte_flow_fp_ops rte_flow_fp_default_ops = { .async_create = rte_flow_dummy_async_create, .async_create_by_index = rte_flow_dummy_async_create_by_index, .async_actions_update = rte_flow_dummy_async_actions_update, + .async_create_by_index_with_pattern = rte_flow_dummy_async_create_by_index_with_pattern, .async_destroy = rte_flow_dummy_async_destroy, .push = rte_flow_dummy_push, .pull = rte_flow_dummy_pull, diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index 6f30dd7ae9..84473241fb 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -6187,6 +6187,60 @@ rte_flow_async_create_by_index(uint16_t port_id, void *user_data, struct rte_flow_error *error); +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Enqueue rule creation by index with pattern operation. + * Packets are only matched if there is a rule inserted at the index. + * + * @param port_id + * Port identifier of Ethernet device. + * @param queue_id + * Flow queue used to insert the rule. + * @param[in] op_attr + * Rule creation operation attributes. + * @param[in] template_table + * Template table to select templates from. + * @param[in] rule_index + * Rule index in the table. + * Inserting a rule to already occupied index results in undefined behavior. + * @param[in] pattern + * List of pattern items to be used. + * The list order should match the order in the pattern template. + * The spec is the only relevant member of the item that is being used. + * @param[in] pattern_template_index + * Pattern template index in the table. + * @param[in] actions + * List of actions to be used. + * The list order should match the order in the actions template. + * @param[in] actions_template_index + * Actions template index in the table. + * @param[in] user_data + * The user data that will be returned on the completion events. + * @param[out] error + * Perform verbose error reporting if not NULL. + * PMDs initialize this structure in case of error only. + * + * @return + * Handle on success, NULL otherwise and rte_errno is set. + * The rule handle doesn't mean that the rule has been populated. + * Only completion result indicates that if there was success or failure. + */ +__rte_experimental +struct rte_flow * +rte_flow_async_create_by_index_with_pattern(uint16_t port_id, + uint32_t queue_id, + const struct rte_flow_op_attr *op_attr, + struct rte_flow_template_table *template_table, + uint32_t rule_index, + const struct rte_flow_item pattern[], + uint8_t pattern_template_index, + const struct rte_flow_action actions[], + uint8_t actions_template_index, + void *user_data, + struct rte_flow_error *error); + /** * @warning * @b EXPERIMENTAL: this API may change without prior notice. diff --git a/lib/ethdev/rte_flow_driver.h b/lib/ethdev/rte_flow_driver.h index 506d1262ab..e00a5d7f7e 100644 --- a/lib/ethdev/rte_flow_driver.h +++ b/lib/ethdev/rte_flow_driver.h @@ -319,6 +319,19 @@ typedef struct rte_flow *(*rte_flow_async_create_by_index_t)(struct rte_eth_dev void *user_data, struct rte_flow_error *error); +/** @internal Enqueue rule creation by index with pattern operation. */ +typedef struct rte_flow *(*rte_flow_async_create_by_index_with_pattern_t)(struct rte_eth_dev *dev, + uint32_t queue, + const struct rte_flow_op_attr *attr, + struct rte_flow_template_table *table, + uint32_t rule_index, + const struct rte_flow_item *items, + uint8_t pattern_template_index, + const struct rte_flow_action *actions, + uint8_t action_template_index, + void *user_data, + struct rte_flow_error *error); + /** @internal Enqueue rule update operation. */ typedef int (*rte_flow_async_actions_update_t)(struct rte_eth_dev *dev, uint32_t queue_id, @@ -436,6 +449,7 @@ struct __rte_cache_aligned rte_flow_fp_ops { rte_flow_async_create_t async_create; rte_flow_async_create_by_index_t async_create_by_index; rte_flow_async_actions_update_t async_actions_update; + rte_flow_async_create_by_index_with_pattern_t async_create_by_index_with_pattern; rte_flow_async_destroy_t async_destroy; rte_flow_push_t push; rte_flow_pull_t pull; diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map index 1669055ca5..8e02e1de8f 100644 --- a/lib/ethdev/version.map +++ b/lib/ethdev/version.map @@ -325,6 +325,9 @@ EXPERIMENTAL { rte_flow_template_table_resizable; rte_flow_template_table_resize; rte_flow_template_table_resize_complete; + + # added in 24.11 + rte_flow_async_create_by_index_with_pattern; }; INTERNAL { -- 2.18.2 ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: [PATCH 3/6] ethdev: add flow rule insertion by index with pattern 2024-09-19 0:48 ` [PATCH 3/6] ethdev: add flow rule insertion by index with pattern Alexander Kozyrev @ 2024-09-25 15:00 ` Dariusz Sosnowski 0 siblings, 0 replies; 30+ messages in thread From: Dariusz Sosnowski @ 2024-09-25 15:00 UTC (permalink / raw) To: Alexander Kozyrev, dev Cc: Ori Kam, NBU-Contact-Thomas Monjalon (EXTERNAL), Matan Azrad, ferruh.yigit, stephen > -----Original Message----- > From: Alexander Kozyrev <akozyrev@nvidia.com> > Sent: Thursday, September 19, 2024 02:48 > To: dev@dpdk.org > Cc: Dariusz Sosnowski <dsosnowski@nvidia.com>; Ori Kam > <orika@nvidia.com>; NBU-Contact-Thomas Monjalon (EXTERNAL) > <thomas@monjalon.net>; Matan Azrad <matan@nvidia.com>; > ferruh.yigit@amd.com; stephen@networkplumber.org > Subject: [PATCH 3/6] ethdev: add flow rule insertion by index with pattern > > Add a new API to enqueue flow rule creation by index with pattern. > The new template table rules insertion type, index-based insertion with > pattern, requires a new flow rule creation function with both rule index and > pattern provided. > Packets will match on the provided pattern at the provided index. > > Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> [snip] > +RTE_TRACE_POINT_FP( > + rte_flow_trace_async_create_by_index, > + RTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id, > + const struct rte_flow_op_attr *op_attr, > + const struct rte_flow_template_table *template_table, > + uint32_t rule_index, > + const struct rte_flow_action *actions, > + uint8_t actions_template_index, > + const void *user_data, const struct rte_flow *flow), > + rte_trace_point_emit_u16(port_id); > + rte_trace_point_emit_u32(queue_id); > + rte_trace_point_emit_ptr(op_attr); > + rte_trace_point_emit_ptr(template_table); > + rte_trace_point_emit_u32(rule_index); > + rte_trace_point_emit_ptr(actions); > + rte_trace_point_emit_u8(actions_template_index); > + rte_trace_point_emit_ptr(user_data); > + rte_trace_point_emit_ptr(flow); > +) This tracepoint is not used anywhere and is not related to the addition of rte_flow_trace_async_create_by_index_with_pattern. Maybe this tracepoint should be added in a separate commit? > +RTE_TRACE_POINT_FP( > + rte_flow_trace_async_create_by_index_with_pattern, > + RTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id, > + const struct rte_flow_op_attr *op_attr, > + const struct rte_flow_template_table *template_table, > + uint32_t rule_index, > + const struct rte_flow_item *pattern, > + uint8_t pattern_template_index, > + const struct rte_flow_action *actions, > + uint8_t actions_template_index, > + const void *user_data, const struct rte_flow *flow), > + rte_trace_point_emit_u16(port_id); > + rte_trace_point_emit_u32(queue_id); > + rte_trace_point_emit_ptr(op_attr); > + rte_trace_point_emit_ptr(template_table); > + rte_trace_point_emit_u32(rule_index); > + rte_trace_point_emit_ptr(pattern); > + rte_trace_point_emit_u8(pattern_template_index); > + rte_trace_point_emit_ptr(actions); > + rte_trace_point_emit_u8(actions_template_index); > + rte_trace_point_emit_ptr(user_data); > + rte_trace_point_emit_ptr(flow); > +) This tracepoint is not used in this commit. Could you please add the usage? Best regards, Dariusz Sosnowski ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 4/6] app/testpmd: add insertion by index with pattern option 2024-09-19 0:48 [PATCH 0/6] ethdev: jump to table support Alexander Kozyrev ` (2 preceding siblings ...) 2024-09-19 0:48 ` [PATCH 3/6] ethdev: add flow rule insertion by index with pattern Alexander Kozyrev @ 2024-09-19 0:48 ` Alexander Kozyrev 2024-09-25 15:01 ` Dariusz Sosnowski 2024-09-19 0:48 ` [PATCH 5/6] ethdev: add jump to table index action Alexander Kozyrev ` (2 subsequent siblings) 6 siblings, 1 reply; 30+ messages in thread From: Alexander Kozyrev @ 2024-09-19 0:48 UTC (permalink / raw) To: dev; +Cc: dsosnowski, orika, thomas, matan, ferruh.yigit, stephen Allow to specify both the rule index and the pattern in the flow rule creation command line parameters. Both are needed for rte_flow_async_create_by_index_with_pattern(). flow queue 0 create 0 template_table 2 rule_index 5 pattern_template 0 actions_template 0 postpone no pattern eth / end actions count / queue index 1 / end Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> --- app/test-pmd/cmdline_flow.c | 8 +++++++- app/test-pmd/config.c | 22 ++++++++++++++++------ app/test-pmd/testpmd.h | 2 +- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index a794e5eba5..855273365e 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -1585,6 +1585,12 @@ static const enum index next_async_insert_subcmd[] = { ZERO, }; +static const enum index next_async_pattern_subcmd[] = { + QUEUE_PATTERN_TEMPLATE, + QUEUE_ACTIONS_TEMPLATE, + ZERO, +}; + static const enum index item_param[] = { ITEM_PARAM_IS, ITEM_PARAM_SPEC, @@ -3788,7 +3794,7 @@ static const struct token token_list[] = { [QUEUE_RULE_ID] = { .name = "rule_index", .help = "specify flow rule index", - .next = NEXT(NEXT_ENTRY(QUEUE_ACTIONS_TEMPLATE), + .next = NEXT(next_async_pattern_subcmd, NEXT_ENTRY(COMMON_UNSIGNED)), .args = ARGS(ARGS_ENTRY(struct buffer, args.vc.rule_id)), diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 6f0beafa27..39924d8da9 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -2636,8 +2636,8 @@ port_flow_template_table_create(portid_t port_id, uint32_t id, } pt->nb_pattern_templates = nb_pattern_templates; pt->nb_actions_templates = nb_actions_templates; - rte_memcpy(&pt->flow_attr, &table_attr->flow_attr, - sizeof(struct rte_flow_attr)); + rte_memcpy(&pt->attr, table_attr, + sizeof(struct rte_flow_template_table_attr)); printf("Template table #%u created\n", pt->id); return 0; } @@ -2835,7 +2835,7 @@ port_queue_flow_create(portid_t port_id, queueid_t queue_id, } job->type = QUEUE_JOB_TYPE_FLOW_CREATE; - pf = port_flow_new(&pt->flow_attr, pattern, actions, &error); + pf = port_flow_new(&pt->attr.flow_attr, pattern, actions, &error); if (!pf) { free(job); return port_flow_complain(&error); @@ -2846,12 +2846,22 @@ port_queue_flow_create(portid_t port_id, queueid_t queue_id, } /* Poisoning to make sure PMDs update it in case of error. */ memset(&error, 0x11, sizeof(error)); - if (rule_idx == UINT32_MAX) + if (pt->attr.insertion_type == RTE_FLOW_TABLE_INSERTION_TYPE_PATTERN) flow = rte_flow_async_create(port_id, queue_id, &op_attr, pt->table, pattern, pattern_idx, actions, actions_idx, job, &error); - else + else if (pt->attr.insertion_type == RTE_FLOW_TABLE_INSERTION_TYPE_INDEX) flow = rte_flow_async_create_by_index(port_id, queue_id, &op_attr, pt->table, rule_idx, actions, actions_idx, job, &error); + else if (pt->attr.insertion_type == RTE_FLOW_TABLE_INSERTION_TYPE_INDEX_WITH_PATTERN) + flow = rte_flow_async_create_by_index_with_pattern(port_id, queue_id, &op_attr, + pt->table, rule_idx, pattern, pattern_idx, actions, actions_idx, job, + &error); + else { + free(pf); + free(job); + printf("Insertion type %d is invalid\n", pt->attr.insertion_type); + return -EINVAL; + } if (!flow) { free(pf); free(job); @@ -3060,7 +3070,7 @@ port_queue_flow_update(portid_t port_id, queueid_t queue_id, } job->type = QUEUE_JOB_TYPE_FLOW_UPDATE; - uf = port_flow_new(&pt->flow_attr, pf->rule.pattern_ro, actions, &error); + uf = port_flow_new(&pt->attr.flow_attr, pf->rule.pattern_ro, actions, &error); if (!uf) { free(job); return port_flow_complain(&error); diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 9facd7f281..f9ab88d667 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -220,7 +220,7 @@ struct port_table { uint32_t id; /**< Table ID. */ uint32_t nb_pattern_templates; /**< Number of pattern templates. */ uint32_t nb_actions_templates; /**< Number of actions templates. */ - struct rte_flow_attr flow_attr; /**< Flow attributes. */ + struct rte_flow_template_table_attr attr; /**< Table attributes. */ struct rte_flow_template_table *table; /**< PMD opaque template object */ }; -- 2.18.2 ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: [PATCH 4/6] app/testpmd: add insertion by index with pattern option 2024-09-19 0:48 ` [PATCH 4/6] app/testpmd: add insertion by index with pattern option Alexander Kozyrev @ 2024-09-25 15:01 ` Dariusz Sosnowski 0 siblings, 0 replies; 30+ messages in thread From: Dariusz Sosnowski @ 2024-09-25 15:01 UTC (permalink / raw) To: Alexander Kozyrev, dev Cc: Ori Kam, NBU-Contact-Thomas Monjalon (EXTERNAL), Matan Azrad, ferruh.yigit, stephen > -----Original Message----- > From: Alexander Kozyrev <akozyrev@nvidia.com> > Sent: Thursday, September 19, 2024 02:48 > To: dev@dpdk.org > Cc: Dariusz Sosnowski <dsosnowski@nvidia.com>; Ori Kam > <orika@nvidia.com>; NBU-Contact-Thomas Monjalon (EXTERNAL) > <thomas@monjalon.net>; Matan Azrad <matan@nvidia.com>; > ferruh.yigit@amd.com; stephen@networkplumber.org > Subject: [PATCH 4/6] app/testpmd: add insertion by index with pattern option > > Allow to specify both the rule index and the pattern in the flow rule creation > command line parameters. > Both are needed for rte_flow_async_create_by_index_with_pattern(). > > flow queue 0 create 0 template_table 2 rule_index 5 > pattern_template 0 actions_template 0 postpone no pattern eth / end > actions count / queue index 1 / end > > Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com> Best regards, Dariusz Sosnowski ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 5/6] ethdev: add jump to table index action 2024-09-19 0:48 [PATCH 0/6] ethdev: jump to table support Alexander Kozyrev ` (3 preceding siblings ...) 2024-09-19 0:48 ` [PATCH 4/6] app/testpmd: add insertion by index with pattern option Alexander Kozyrev @ 2024-09-19 0:48 ` Alexander Kozyrev 2024-09-25 15:01 ` Dariusz Sosnowski 2024-09-19 0:48 ` [PATCH 6/6] app/testpmd: " Alexander Kozyrev 2024-09-25 18:05 ` [PATCH v2 0/7] ethdev: jump to table support Alexander Kozyrev 6 siblings, 1 reply; 30+ messages in thread From: Alexander Kozyrev @ 2024-09-19 0:48 UTC (permalink / raw) To: dev; +Cc: dsosnowski, orika, thomas, matan, ferruh.yigit, stephen Introduce the RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX action. It redirects packets to a particular index in a flow table. Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> --- doc/guides/rel_notes/release_24_11.rst | 4 ++++ lib/ethdev/rte_flow.c | 1 + lib/ethdev/rte_flow.h | 23 +++++++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/doc/guides/rel_notes/release_24_11.rst b/doc/guides/rel_notes/release_24_11.rst index f71a9ab562..ccdc44f3d8 100644 --- a/doc/guides/rel_notes/release_24_11.rst +++ b/doc/guides/rel_notes/release_24_11.rst @@ -65,6 +65,10 @@ New Features Added API for inserting the rule by index with pattern. Introduced rte_flow_async_create_by_index_with_pattern() function. +* **Added the action to redirect packets to a particular index in a flow table.** + + Introduced RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX action type. + Removed Items ------------- diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c index f6259343e8..a56391b156 100644 --- a/lib/ethdev/rte_flow.c +++ b/lib/ethdev/rte_flow.c @@ -275,6 +275,7 @@ static const struct rte_flow_desc_data rte_flow_desc_action[] = { MK_FLOW_ACTION(PROG, sizeof(struct rte_flow_action_prog)), MK_FLOW_ACTION(NAT64, sizeof(struct rte_flow_action_nat64)), + MK_FLOW_ACTION(JUMP_TO_TABLE_INDEX, sizeof(struct rte_flow_action_jump_to_table_index)), }; int diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index 84473241fb..a2929438bf 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -3262,6 +3262,15 @@ enum rte_flow_action_type { * @see struct rte_flow_action_nat64 */ RTE_FLOW_ACTION_TYPE_NAT64, + + /** + * RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX, + * + * Redirects packets to a particular index in a flow table. + * + * @see struct rte_flow_action_jump_to_table_index. + */ + RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX, }; /** @@ -4266,6 +4275,20 @@ rte_flow_dynf_metadata_set(struct rte_mbuf *m, uint32_t v) *RTE_FLOW_DYNF_METADATA(m) = v; } +/** + * @warning + * @b EXPERIMENTAL: this structure may change without prior notice + * + * RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX + * + * Redirects packets to a particular index in a flow table. + * + */ +struct rte_flow_action_jump_to_table_index { + struct rte_flow_template_table *table; + uint32_t index; +}; + /** * Definition of a single action. * -- 2.18.2 ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: [PATCH 5/6] ethdev: add jump to table index action 2024-09-19 0:48 ` [PATCH 5/6] ethdev: add jump to table index action Alexander Kozyrev @ 2024-09-25 15:01 ` Dariusz Sosnowski 0 siblings, 0 replies; 30+ messages in thread From: Dariusz Sosnowski @ 2024-09-25 15:01 UTC (permalink / raw) To: Alexander Kozyrev, dev Cc: Ori Kam, NBU-Contact-Thomas Monjalon (EXTERNAL), Matan Azrad, ferruh.yigit, stephen > -----Original Message----- > From: Alexander Kozyrev <akozyrev@nvidia.com> > Sent: Thursday, September 19, 2024 02:48 > To: dev@dpdk.org > Cc: Dariusz Sosnowski <dsosnowski@nvidia.com>; Ori Kam > <orika@nvidia.com>; NBU-Contact-Thomas Monjalon (EXTERNAL) > <thomas@monjalon.net>; Matan Azrad <matan@nvidia.com>; > ferruh.yigit@amd.com; stephen@networkplumber.org > Subject: [PATCH 5/6] ethdev: add jump to table index action > > Introduce the RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX action. > It redirects packets to a particular index in a flow table. > > Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com> Best regards, Dariusz Sosnowski ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 6/6] app/testpmd: add jump to table index action 2024-09-19 0:48 [PATCH 0/6] ethdev: jump to table support Alexander Kozyrev ` (4 preceding siblings ...) 2024-09-19 0:48 ` [PATCH 5/6] ethdev: add jump to table index action Alexander Kozyrev @ 2024-09-19 0:48 ` Alexander Kozyrev 2024-09-25 15:02 ` Dariusz Sosnowski 2024-09-25 18:05 ` [PATCH v2 0/7] ethdev: jump to table support Alexander Kozyrev 6 siblings, 1 reply; 30+ messages in thread From: Alexander Kozyrev @ 2024-09-19 0:48 UTC (permalink / raw) To: dev; +Cc: dsosnowski, orika, thomas, matan, ferruh.yigit, stephen Add a new command line options to create the RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX action from the testpmd command line. flow queue 0 create 0 template_table 0 pattern_template 0 actions_template 0 postpone no pattern eth / end actions jump_to_table_index table 0x166f9ce00 index 5 / end Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> --- app/test-pmd/cmdline_flow.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 855273365e..b7bcf18311 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -785,6 +785,9 @@ enum index { ACTION_IPV6_EXT_PUSH_INDEX_VALUE, ACTION_NAT64, ACTION_NAT64_MODE, + ACTION_JUMP_TO_TABLE_INDEX, + ACTION_JUMP_TO_TABLE_INDEX_TABLE, + ACTION_JUMP_TO_TABLE_INDEX_INDEX, }; /** Maximum size for pattern in struct rte_flow_item_raw. */ @@ -2328,6 +2331,7 @@ static const enum index next_action[] = { ACTION_IPV6_EXT_REMOVE, ACTION_IPV6_EXT_PUSH, ACTION_NAT64, + ACTION_JUMP_TO_TABLE_INDEX, ZERO, }; @@ -2688,6 +2692,13 @@ static const enum index next_hash_encap_dest_subcmd[] = { ZERO, }; +static const enum index action_jump_to_table_index[] = { + ACTION_JUMP_TO_TABLE_INDEX_TABLE, + ACTION_JUMP_TO_TABLE_INDEX_INDEX, + ACTION_NEXT, + ZERO, +}; + static int parse_set_raw_encap_decap(struct context *, const struct token *, const char *, unsigned int, void *, unsigned int); @@ -7608,6 +7619,29 @@ static const struct token token_list[] = { .args = ARGS(ARGS_ENTRY(struct rte_flow_action_nat64, type)), .call = parse_vc_conf, }, + [ACTION_JUMP_TO_TABLE_INDEX] = { + .name = "jump_to_table_index", + .help = "Jump to table index", + .priv = PRIV_ACTION(JUMP_TO_TABLE_INDEX, + sizeof(struct rte_flow_action_jump_to_table_index)), + .next = NEXT(action_jump_to_table_index), + .call = parse_vc, + }, + [ACTION_JUMP_TO_TABLE_INDEX_TABLE] = { + .name = "table", + .help = "table to redirect traffic to", + .next = NEXT(action_jump_to_table_index, NEXT_ENTRY(COMMON_UNSIGNED)), + .args = ARGS(ARGS_ENTRY(struct rte_flow_action_jump_to_table_index, table)), + .call = parse_vc_conf, + }, + [ACTION_JUMP_TO_TABLE_INDEX_INDEX] = { + .name = "index", + .help = "rule index to redirect traffic to", + .next = NEXT(action_jump_to_table_index, NEXT_ENTRY(COMMON_UNSIGNED)), + .args = ARGS(ARGS_ENTRY(struct rte_flow_action_jump_to_table_index, index)), + .call = parse_vc_conf, + }, + /* Top level command. */ [SET] = { .name = "set", -- 2.18.2 ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: [PATCH 6/6] app/testpmd: add jump to table index action 2024-09-19 0:48 ` [PATCH 6/6] app/testpmd: " Alexander Kozyrev @ 2024-09-25 15:02 ` Dariusz Sosnowski 0 siblings, 0 replies; 30+ messages in thread From: Dariusz Sosnowski @ 2024-09-25 15:02 UTC (permalink / raw) To: Alexander Kozyrev, dev Cc: Ori Kam, NBU-Contact-Thomas Monjalon (EXTERNAL), Matan Azrad, ferruh.yigit, stephen > -----Original Message----- > From: Alexander Kozyrev <akozyrev@nvidia.com> > Sent: Thursday, September 19, 2024 02:48 > To: dev@dpdk.org > Cc: Dariusz Sosnowski <dsosnowski@nvidia.com>; Ori Kam > <orika@nvidia.com>; NBU-Contact-Thomas Monjalon (EXTERNAL) > <thomas@monjalon.net>; Matan Azrad <matan@nvidia.com>; > ferruh.yigit@amd.com; stephen@networkplumber.org > Subject: [PATCH 6/6] app/testpmd: add jump to table index action > > Add a new command line options to create the > RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX action from the testpmd > command line. > > flow queue 0 create 0 template_table 0 pattern_template 0 > actions_template 0 postpone no pattern eth / end > actions jump_to_table_index table 0x166f9ce00 index 5 / end > > Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> Acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com> Best regards, Dariusz Sosnowski ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 0/7] ethdev: jump to table support 2024-09-19 0:48 [PATCH 0/6] ethdev: jump to table support Alexander Kozyrev ` (5 preceding siblings ...) 2024-09-19 0:48 ` [PATCH 6/6] app/testpmd: " Alexander Kozyrev @ 2024-09-25 18:05 ` Alexander Kozyrev 2024-09-25 18:05 ` [PATCH v2 1/7] ethdev: add insertion by index with pattern Alexander Kozyrev ` (8 more replies) 6 siblings, 9 replies; 30+ messages in thread From: Alexander Kozyrev @ 2024-09-25 18:05 UTC (permalink / raw) To: dev; +Cc: dsosnowski, orika, thomas, matan, ferruh.yigit, stephen Introduce new Flow API JUMP_TO_TABLE_INDEX action. It allows bypassing a hierarchy of groups and going directly to a specified flow table. That gives a user the flexibility to jump between different priorities in a group and eliminates the need to do a table lookup in the group hierarchy. The JUMP_TO_TABLE_INDEX action forwards a packet to the specified rule index inside the index-based flow table. The current index-based flow table doesn't do any matching on the packet and executes the actions immediately. Add a new index-based flow table with pattern matching. The JUMP_TO_TABLE_INDEX can redirect a packet to another matching criteria at the specified index in this case. RFC: https://patchwork.dpdk.org/project/dpdk/patch/20240822202753.3856703-1-akozyrev@nvidia.com/ v2: added trace point to flow insertion by index functions. Alexander Kozyrev (7): ethdev: add insertion by index with pattern app/testpmd: add index with pattern insertion type ethdev: add flow rule insertion by index with pattern app/testpmd: add insertion by index with pattern option ethdev: add jump to table index action app/testpmd: add jump to table index action ethdev: add trace points to flow insertion by index app/test-pmd/cmdline_flow.c | 44 +++++++++++++- app/test-pmd/config.c | 22 +++++-- app/test-pmd/testpmd.h | 2 +- doc/guides/prog_guide/rte_flow.rst | 20 +++++++ doc/guides/rel_notes/release_24_11.rst | 13 +++++ lib/ethdev/ethdev_trace.h | 44 ++++++++++++++ lib/ethdev/ethdev_trace_points.c | 6 ++ lib/ethdev/rte_flow.c | 72 ++++++++++++++++++++++- lib/ethdev/rte_flow.h | 81 ++++++++++++++++++++++++++ lib/ethdev/rte_flow_driver.h | 14 +++++ lib/ethdev/version.map | 1 + 11 files changed, 309 insertions(+), 10 deletions(-) -- 2.18.2 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 1/7] ethdev: add insertion by index with pattern 2024-09-25 18:05 ` [PATCH v2 0/7] ethdev: jump to table support Alexander Kozyrev @ 2024-09-25 18:05 ` Alexander Kozyrev 2024-09-26 8:23 ` Ori Kam 2024-09-25 18:05 ` [PATCH v2 2/7] app/testpmd: add index with pattern insertion type Alexander Kozyrev ` (7 subsequent siblings) 8 siblings, 1 reply; 30+ messages in thread From: Alexander Kozyrev @ 2024-09-25 18:05 UTC (permalink / raw) To: dev; +Cc: dsosnowski, orika, thomas, matan, ferruh.yigit, stephen There are two flow table rules insertion type today: pattern-based insertion when packets match on the pattern and index-based insertion when packets always hit at the index. We need another mode that allows to match on the pattern at the index: insertion by index with pattern. Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> --- doc/guides/rel_notes/release_24_11.rst | 4 ++++ lib/ethdev/rte_flow.h | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/doc/guides/rel_notes/release_24_11.rst b/doc/guides/rel_notes/release_24_11.rst index ef0124a9e6..8d311aead2 100644 --- a/doc/guides/rel_notes/release_24_11.rst +++ b/doc/guides/rel_notes/release_24_11.rst @@ -55,6 +55,10 @@ New Features Also, make sure to start the actual text at the margin. ======================================================= +* **Added a new insertion by index with pattern table insertion type.** + + Extended rte_flow_table_insertion_type enum with new + RTE_FLOW_TABLE_INSERTION_TYPE_INDEX_WITH_PATTERN type. Removed Items ------------- diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index f864578f80..6f30dd7ae9 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -5898,6 +5898,10 @@ enum rte_flow_table_insertion_type { * Index-based insertion. */ RTE_FLOW_TABLE_INSERTION_TYPE_INDEX, + /** + * Index-based insertion with pattern. + */ + RTE_FLOW_TABLE_INSERTION_TYPE_INDEX_WITH_PATTERN, }; /** -- 2.18.2 ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: [PATCH v2 1/7] ethdev: add insertion by index with pattern 2024-09-25 18:05 ` [PATCH v2 1/7] ethdev: add insertion by index with pattern Alexander Kozyrev @ 2024-09-26 8:23 ` Ori Kam 0 siblings, 0 replies; 30+ messages in thread From: Ori Kam @ 2024-09-26 8:23 UTC (permalink / raw) To: Alexander Kozyrev, dev Cc: Dariusz Sosnowski, NBU-Contact-Thomas Monjalon (EXTERNAL), Matan Azrad, ferruh.yigit, stephen > -----Original Message----- > From: Alexander Kozyrev <akozyrev@nvidia.com> > Sent: Wednesday, September 25, 2024 9:05 PM > > There are two flow table rules insertion type today: > pattern-based insertion when packets match on the pattern and > index-based insertion when packets always hit at the index. > We need another mode that allows to match on the pattern at > the index: insertion by index with pattern. > > Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> > --- Acked-by: Ori Kam <orika@nvidia.com> Best, Ori ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 2/7] app/testpmd: add index with pattern insertion type 2024-09-25 18:05 ` [PATCH v2 0/7] ethdev: jump to table support Alexander Kozyrev 2024-09-25 18:05 ` [PATCH v2 1/7] ethdev: add insertion by index with pattern Alexander Kozyrev @ 2024-09-25 18:05 ` Alexander Kozyrev 2024-09-26 8:24 ` Ori Kam 2024-09-25 18:05 ` [PATCH v2 3/7] ethdev: add flow rule insertion by index with pattern Alexander Kozyrev ` (6 subsequent siblings) 8 siblings, 1 reply; 30+ messages in thread From: Alexander Kozyrev @ 2024-09-25 18:05 UTC (permalink / raw) To: dev; +Cc: dsosnowski, orika, thomas, matan, ferruh.yigit, stephen Provide index_with_pattern command line option for the template table insertion type. flow template_table 0 create table_id 2 group 13 priority 0 insertion_type index_with_pattern ingress rules_number 64 pattern_template 2 actions_template 2 Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> --- app/test-pmd/cmdline_flow.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 858f4077bd..b048821e85 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -1029,7 +1029,7 @@ static const char *const meter_colors[] = { }; static const char *const table_insertion_types[] = { - "pattern", "index", NULL + "pattern", "index", "index_with_pattern", NULL }; static const char *const table_hash_funcs[] = { -- 2.18.2 ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: [PATCH v2 2/7] app/testpmd: add index with pattern insertion type 2024-09-25 18:05 ` [PATCH v2 2/7] app/testpmd: add index with pattern insertion type Alexander Kozyrev @ 2024-09-26 8:24 ` Ori Kam 0 siblings, 0 replies; 30+ messages in thread From: Ori Kam @ 2024-09-26 8:24 UTC (permalink / raw) To: Alexander Kozyrev, dev Cc: Dariusz Sosnowski, NBU-Contact-Thomas Monjalon (EXTERNAL), Matan Azrad, ferruh.yigit, stephen > -----Original Message----- > From: Alexander Kozyrev <akozyrev@nvidia.com> > Sent: Wednesday, September 25, 2024 9:05 PM > > Provide index_with_pattern command line option > for the template table insertion type. > > flow template_table 0 create table_id 2 group 13 priority 0 > insertion_type index_with_pattern ingress rules_number 64 > pattern_template 2 actions_template 2 > > Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> > --- Acked-by: Ori Kam <orika@nvidia.com> Best, Ori ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 3/7] ethdev: add flow rule insertion by index with pattern 2024-09-25 18:05 ` [PATCH v2 0/7] ethdev: jump to table support Alexander Kozyrev 2024-09-25 18:05 ` [PATCH v2 1/7] ethdev: add insertion by index with pattern Alexander Kozyrev 2024-09-25 18:05 ` [PATCH v2 2/7] app/testpmd: add index with pattern insertion type Alexander Kozyrev @ 2024-09-25 18:05 ` Alexander Kozyrev 2024-09-26 8:26 ` Ori Kam 2024-09-25 18:05 ` [PATCH v2 4/7] app/testpmd: add insertion by index with pattern option Alexander Kozyrev ` (5 subsequent siblings) 8 siblings, 1 reply; 30+ messages in thread From: Alexander Kozyrev @ 2024-09-25 18:05 UTC (permalink / raw) To: dev; +Cc: dsosnowski, orika, thomas, matan, ferruh.yigit, stephen Add a new API to enqueue flow rule creation by index with pattern. The new template table rules insertion type, index-based insertion with pattern, requires a new flow rule creation function with both rule index and pattern provided. Packets will match on the provided pattern at the provided index. Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> --- doc/guides/prog_guide/rte_flow.rst | 20 ++++++++++ doc/guides/rel_notes/release_24_11.rst | 5 +++ lib/ethdev/rte_flow.c | 55 ++++++++++++++++++++++++++ lib/ethdev/rte_flow.h | 54 +++++++++++++++++++++++++ lib/ethdev/rte_flow_driver.h | 14 +++++++ lib/ethdev/version.map | 1 + 6 files changed, 149 insertions(+) diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index dad588763f..adbd9b1c20 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -4156,6 +4156,26 @@ Enqueueing a flow rule creation operation to insert a rule at a table index. A valid handle in case of success is returned. It must be destroyed later by calling ``rte_flow_async_destroy()`` even if the rule is rejected by HW. +Enqueue creation by index with pattern +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enqueueing a flow rule creation operation to insert a rule at a table index with pattern. + +.. code-block:: c + + struct rte_flow * + rte_flow_async_create_by_index_with_pattern(uint16_t port_id, + uint32_t queue_id, + const struct rte_flow_op_attr *op_attr, + struct rte_flow_template_table *template_table, + uint32_t rule_index, + const struct rte_flow_item pattern[], + uint8_t pattern_template_index, + const struct rte_flow_action actions[], + uint8_t actions_template_index, + void *user_data, + struct rte_flow_error *error); + Enqueue destruction operation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/doc/guides/rel_notes/release_24_11.rst b/doc/guides/rel_notes/release_24_11.rst index 8d311aead2..fd461128ee 100644 --- a/doc/guides/rel_notes/release_24_11.rst +++ b/doc/guides/rel_notes/release_24_11.rst @@ -60,6 +60,11 @@ New Features Extended rte_flow_table_insertion_type enum with new RTE_FLOW_TABLE_INSERTION_TYPE_INDEX_WITH_PATTERN type. +* **Added flow rule insertion by index with pattern to the Flow API.** + + Added API for inserting the rule by index with pattern. + Introduced rte_flow_async_create_by_index_with_pattern() function. + Removed Items ------------- diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c index 4076ae4ee1..f6259343e8 100644 --- a/lib/ethdev/rte_flow.c +++ b/lib/ethdev/rte_flow.c @@ -2109,6 +2109,42 @@ rte_flow_async_create_by_index(uint16_t port_id, user_data, error); } +struct rte_flow * +rte_flow_async_create_by_index_with_pattern(uint16_t port_id, + uint32_t queue_id, + const struct rte_flow_op_attr *op_attr, + struct rte_flow_template_table *template_table, + uint32_t rule_index, + const struct rte_flow_item pattern[], + uint8_t pattern_template_index, + const struct rte_flow_action actions[], + uint8_t actions_template_index, + void *user_data, + struct rte_flow_error *error) +{ + struct rte_eth_dev *dev = &rte_eth_devices[port_id]; + +#ifdef RTE_FLOW_DEBUG + if (!rte_eth_dev_is_valid_port(port_id)) { + rte_flow_error_set(error, ENODEV, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, + rte_strerror(ENODEV)); + return NULL; + } + if (dev->flow_fp_ops == NULL || + dev->flow_fp_ops->async_create_by_index_with_pattern == NULL) { + rte_flow_error_set(error, ENOSYS, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, + rte_strerror(ENOSYS)); + return NULL; + } +#endif + + return dev->flow_fp_ops->async_create_by_index_with_pattern(dev, queue_id, op_attr, + template_table, rule_index, + pattern, pattern_template_index, + actions, actions_template_index, + user_data, error); +} + int rte_flow_async_destroy(uint16_t port_id, uint32_t queue_id, @@ -2733,6 +2769,24 @@ rte_flow_dummy_async_create_by_index(struct rte_eth_dev *dev __rte_unused, return NULL; } +static struct rte_flow * +rte_flow_dummy_async_create_by_index_with_pattern(struct rte_eth_dev *dev __rte_unused, + uint32_t queue __rte_unused, + const struct rte_flow_op_attr *attr __rte_unused, + struct rte_flow_template_table *table __rte_unused, + uint32_t rule_index __rte_unused, + const struct rte_flow_item items[] __rte_unused, + uint8_t pattern_template_index __rte_unused, + const struct rte_flow_action actions[] __rte_unused, + uint8_t action_template_index __rte_unused, + void *user_data __rte_unused, + struct rte_flow_error *error) +{ + rte_flow_error_set(error, ENOSYS, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, + rte_strerror(ENOSYS)); + return NULL; +} + static int rte_flow_dummy_async_actions_update(struct rte_eth_dev *dev __rte_unused, uint32_t queue_id __rte_unused, @@ -2899,6 +2953,7 @@ struct rte_flow_fp_ops rte_flow_fp_default_ops = { .async_create = rte_flow_dummy_async_create, .async_create_by_index = rte_flow_dummy_async_create_by_index, .async_actions_update = rte_flow_dummy_async_actions_update, + .async_create_by_index_with_pattern = rte_flow_dummy_async_create_by_index_with_pattern, .async_destroy = rte_flow_dummy_async_destroy, .push = rte_flow_dummy_push, .pull = rte_flow_dummy_pull, diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index 6f30dd7ae9..84473241fb 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -6187,6 +6187,60 @@ rte_flow_async_create_by_index(uint16_t port_id, void *user_data, struct rte_flow_error *error); +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Enqueue rule creation by index with pattern operation. + * Packets are only matched if there is a rule inserted at the index. + * + * @param port_id + * Port identifier of Ethernet device. + * @param queue_id + * Flow queue used to insert the rule. + * @param[in] op_attr + * Rule creation operation attributes. + * @param[in] template_table + * Template table to select templates from. + * @param[in] rule_index + * Rule index in the table. + * Inserting a rule to already occupied index results in undefined behavior. + * @param[in] pattern + * List of pattern items to be used. + * The list order should match the order in the pattern template. + * The spec is the only relevant member of the item that is being used. + * @param[in] pattern_template_index + * Pattern template index in the table. + * @param[in] actions + * List of actions to be used. + * The list order should match the order in the actions template. + * @param[in] actions_template_index + * Actions template index in the table. + * @param[in] user_data + * The user data that will be returned on the completion events. + * @param[out] error + * Perform verbose error reporting if not NULL. + * PMDs initialize this structure in case of error only. + * + * @return + * Handle on success, NULL otherwise and rte_errno is set. + * The rule handle doesn't mean that the rule has been populated. + * Only completion result indicates that if there was success or failure. + */ +__rte_experimental +struct rte_flow * +rte_flow_async_create_by_index_with_pattern(uint16_t port_id, + uint32_t queue_id, + const struct rte_flow_op_attr *op_attr, + struct rte_flow_template_table *template_table, + uint32_t rule_index, + const struct rte_flow_item pattern[], + uint8_t pattern_template_index, + const struct rte_flow_action actions[], + uint8_t actions_template_index, + void *user_data, + struct rte_flow_error *error); + /** * @warning * @b EXPERIMENTAL: this API may change without prior notice. diff --git a/lib/ethdev/rte_flow_driver.h b/lib/ethdev/rte_flow_driver.h index 506d1262ab..e00a5d7f7e 100644 --- a/lib/ethdev/rte_flow_driver.h +++ b/lib/ethdev/rte_flow_driver.h @@ -319,6 +319,19 @@ typedef struct rte_flow *(*rte_flow_async_create_by_index_t)(struct rte_eth_dev void *user_data, struct rte_flow_error *error); +/** @internal Enqueue rule creation by index with pattern operation. */ +typedef struct rte_flow *(*rte_flow_async_create_by_index_with_pattern_t)(struct rte_eth_dev *dev, + uint32_t queue, + const struct rte_flow_op_attr *attr, + struct rte_flow_template_table *table, + uint32_t rule_index, + const struct rte_flow_item *items, + uint8_t pattern_template_index, + const struct rte_flow_action *actions, + uint8_t action_template_index, + void *user_data, + struct rte_flow_error *error); + /** @internal Enqueue rule update operation. */ typedef int (*rte_flow_async_actions_update_t)(struct rte_eth_dev *dev, uint32_t queue_id, @@ -436,6 +449,7 @@ struct __rte_cache_aligned rte_flow_fp_ops { rte_flow_async_create_t async_create; rte_flow_async_create_by_index_t async_create_by_index; rte_flow_async_actions_update_t async_actions_update; + rte_flow_async_create_by_index_with_pattern_t async_create_by_index_with_pattern; rte_flow_async_destroy_t async_destroy; rte_flow_push_t push; rte_flow_pull_t pull; diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map index f6aca95069..37cc18c139 100644 --- a/lib/ethdev/version.map +++ b/lib/ethdev/version.map @@ -330,6 +330,7 @@ EXPERIMENTAL { __rte_ethdev_trace_rx_burst_nonempty; __rte_eth_trace_call_rx_callbacks_empty; __rte_eth_trace_call_rx_callbacks_nonempty; + rte_flow_async_create_by_index_with_pattern; }; INTERNAL { -- 2.18.2 ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: [PATCH v2 3/7] ethdev: add flow rule insertion by index with pattern 2024-09-25 18:05 ` [PATCH v2 3/7] ethdev: add flow rule insertion by index with pattern Alexander Kozyrev @ 2024-09-26 8:26 ` Ori Kam 0 siblings, 0 replies; 30+ messages in thread From: Ori Kam @ 2024-09-26 8:26 UTC (permalink / raw) To: Alexander Kozyrev, dev Cc: Dariusz Sosnowski, NBU-Contact-Thomas Monjalon (EXTERNAL), Matan Azrad, ferruh.yigit, stephen > -----Original Message----- > From: Alexander Kozyrev <akozyrev@nvidia.com> > Sent: Wednesday, September 25, 2024 9:05 PM > > Add a new API to enqueue flow rule creation by index with pattern. > The new template table rules insertion type, > index-based insertion with pattern, requires a new flow rule creation > function with both rule index and pattern provided. > Packets will match on the provided pattern at the provided index. > > Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> > --- Acked-by: Ori Kam <orika@nvidia.com> Best, Ori ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 4/7] app/testpmd: add insertion by index with pattern option 2024-09-25 18:05 ` [PATCH v2 0/7] ethdev: jump to table support Alexander Kozyrev ` (2 preceding siblings ...) 2024-09-25 18:05 ` [PATCH v2 3/7] ethdev: add flow rule insertion by index with pattern Alexander Kozyrev @ 2024-09-25 18:05 ` Alexander Kozyrev 2024-09-26 8:48 ` Ori Kam 2024-09-25 18:05 ` [PATCH v2 5/7] ethdev: add jump to table index action Alexander Kozyrev ` (4 subsequent siblings) 8 siblings, 1 reply; 30+ messages in thread From: Alexander Kozyrev @ 2024-09-25 18:05 UTC (permalink / raw) To: dev; +Cc: dsosnowski, orika, thomas, matan, ferruh.yigit, stephen Allow to specify both the rule index and the pattern in the flow rule creation command line parameters. Both are needed for rte_flow_async_create_by_index_with_pattern(). flow queue 0 create 0 template_table 2 rule_index 5 pattern_template 0 actions_template 0 postpone no pattern eth / end actions count / queue index 1 / end Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> --- app/test-pmd/cmdline_flow.c | 8 +++++++- app/test-pmd/config.c | 22 ++++++++++++++++------ app/test-pmd/testpmd.h | 2 +- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index b048821e85..65030936d2 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -1583,6 +1583,12 @@ static const enum index next_async_insert_subcmd[] = { ZERO, }; +static const enum index next_async_pattern_subcmd[] = { + QUEUE_PATTERN_TEMPLATE, + QUEUE_ACTIONS_TEMPLATE, + ZERO, +}; + static const enum index item_param[] = { ITEM_PARAM_IS, ITEM_PARAM_SPEC, @@ -3786,7 +3792,7 @@ static const struct token token_list[] = { [QUEUE_RULE_ID] = { .name = "rule_index", .help = "specify flow rule index", - .next = NEXT(NEXT_ENTRY(QUEUE_ACTIONS_TEMPLATE), + .next = NEXT(next_async_pattern_subcmd, NEXT_ENTRY(COMMON_UNSIGNED)), .args = ARGS(ARGS_ENTRY(struct buffer, args.vc.rule_id)), diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 6f0beafa27..39924d8da9 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -2636,8 +2636,8 @@ port_flow_template_table_create(portid_t port_id, uint32_t id, } pt->nb_pattern_templates = nb_pattern_templates; pt->nb_actions_templates = nb_actions_templates; - rte_memcpy(&pt->flow_attr, &table_attr->flow_attr, - sizeof(struct rte_flow_attr)); + rte_memcpy(&pt->attr, table_attr, + sizeof(struct rte_flow_template_table_attr)); printf("Template table #%u created\n", pt->id); return 0; } @@ -2835,7 +2835,7 @@ port_queue_flow_create(portid_t port_id, queueid_t queue_id, } job->type = QUEUE_JOB_TYPE_FLOW_CREATE; - pf = port_flow_new(&pt->flow_attr, pattern, actions, &error); + pf = port_flow_new(&pt->attr.flow_attr, pattern, actions, &error); if (!pf) { free(job); return port_flow_complain(&error); @@ -2846,12 +2846,22 @@ port_queue_flow_create(portid_t port_id, queueid_t queue_id, } /* Poisoning to make sure PMDs update it in case of error. */ memset(&error, 0x11, sizeof(error)); - if (rule_idx == UINT32_MAX) + if (pt->attr.insertion_type == RTE_FLOW_TABLE_INSERTION_TYPE_PATTERN) flow = rte_flow_async_create(port_id, queue_id, &op_attr, pt->table, pattern, pattern_idx, actions, actions_idx, job, &error); - else + else if (pt->attr.insertion_type == RTE_FLOW_TABLE_INSERTION_TYPE_INDEX) flow = rte_flow_async_create_by_index(port_id, queue_id, &op_attr, pt->table, rule_idx, actions, actions_idx, job, &error); + else if (pt->attr.insertion_type == RTE_FLOW_TABLE_INSERTION_TYPE_INDEX_WITH_PATTERN) + flow = rte_flow_async_create_by_index_with_pattern(port_id, queue_id, &op_attr, + pt->table, rule_idx, pattern, pattern_idx, actions, actions_idx, job, + &error); + else { + free(pf); + free(job); + printf("Insertion type %d is invalid\n", pt->attr.insertion_type); + return -EINVAL; + } if (!flow) { free(pf); free(job); @@ -3060,7 +3070,7 @@ port_queue_flow_update(portid_t port_id, queueid_t queue_id, } job->type = QUEUE_JOB_TYPE_FLOW_UPDATE; - uf = port_flow_new(&pt->flow_attr, pf->rule.pattern_ro, actions, &error); + uf = port_flow_new(&pt->attr.flow_attr, pf->rule.pattern_ro, actions, &error); if (!uf) { free(job); return port_flow_complain(&error); diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 9facd7f281..f9ab88d667 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -220,7 +220,7 @@ struct port_table { uint32_t id; /**< Table ID. */ uint32_t nb_pattern_templates; /**< Number of pattern templates. */ uint32_t nb_actions_templates; /**< Number of actions templates. */ - struct rte_flow_attr flow_attr; /**< Flow attributes. */ + struct rte_flow_template_table_attr attr; /**< Table attributes. */ struct rte_flow_template_table *table; /**< PMD opaque template object */ }; -- 2.18.2 ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: [PATCH v2 4/7] app/testpmd: add insertion by index with pattern option 2024-09-25 18:05 ` [PATCH v2 4/7] app/testpmd: add insertion by index with pattern option Alexander Kozyrev @ 2024-09-26 8:48 ` Ori Kam 0 siblings, 0 replies; 30+ messages in thread From: Ori Kam @ 2024-09-26 8:48 UTC (permalink / raw) To: Alexander Kozyrev, dev Cc: Dariusz Sosnowski, NBU-Contact-Thomas Monjalon (EXTERNAL), Matan Azrad, ferruh.yigit, stephen > -----Original Message----- > From: Alexander Kozyrev <akozyrev@nvidia.com> > Sent: Wednesday, September 25, 2024 9:05 PM > > Allow to specify both the rule index and the pattern > in the flow rule creation command line parameters. > Both are needed for rte_flow_async_create_by_index_with_pattern(). > > flow queue 0 create 0 template_table 2 rule_index 5 > pattern_template 0 actions_template 0 postpone no pattern eth / end > actions count / queue index 1 / end > > Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> > --- Acked-by: Ori Kam <orika@nvidia.com> Best, Ori ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 5/7] ethdev: add jump to table index action 2024-09-25 18:05 ` [PATCH v2 0/7] ethdev: jump to table support Alexander Kozyrev ` (3 preceding siblings ...) 2024-09-25 18:05 ` [PATCH v2 4/7] app/testpmd: add insertion by index with pattern option Alexander Kozyrev @ 2024-09-25 18:05 ` Alexander Kozyrev 2024-09-26 8:49 ` Ori Kam 2024-09-25 18:05 ` [PATCH v2 6/7] app/testpmd: " Alexander Kozyrev ` (3 subsequent siblings) 8 siblings, 1 reply; 30+ messages in thread From: Alexander Kozyrev @ 2024-09-25 18:05 UTC (permalink / raw) To: dev; +Cc: dsosnowski, orika, thomas, matan, ferruh.yigit, stephen Introduce the RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX action. It redirects packets to a particular index in a flow table. Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> --- doc/guides/rel_notes/release_24_11.rst | 4 ++++ lib/ethdev/rte_flow.c | 1 + lib/ethdev/rte_flow.h | 23 +++++++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/doc/guides/rel_notes/release_24_11.rst b/doc/guides/rel_notes/release_24_11.rst index fd461128ee..67196c099a 100644 --- a/doc/guides/rel_notes/release_24_11.rst +++ b/doc/guides/rel_notes/release_24_11.rst @@ -65,6 +65,10 @@ New Features Added API for inserting the rule by index with pattern. Introduced rte_flow_async_create_by_index_with_pattern() function. +* **Added the action to redirect packets to a particular index in a flow table.** + + Introduced RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX action type. + Removed Items ------------- diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c index f6259343e8..a56391b156 100644 --- a/lib/ethdev/rte_flow.c +++ b/lib/ethdev/rte_flow.c @@ -275,6 +275,7 @@ static const struct rte_flow_desc_data rte_flow_desc_action[] = { MK_FLOW_ACTION(PROG, sizeof(struct rte_flow_action_prog)), MK_FLOW_ACTION(NAT64, sizeof(struct rte_flow_action_nat64)), + MK_FLOW_ACTION(JUMP_TO_TABLE_INDEX, sizeof(struct rte_flow_action_jump_to_table_index)), }; int diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h index 84473241fb..a2929438bf 100644 --- a/lib/ethdev/rte_flow.h +++ b/lib/ethdev/rte_flow.h @@ -3262,6 +3262,15 @@ enum rte_flow_action_type { * @see struct rte_flow_action_nat64 */ RTE_FLOW_ACTION_TYPE_NAT64, + + /** + * RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX, + * + * Redirects packets to a particular index in a flow table. + * + * @see struct rte_flow_action_jump_to_table_index. + */ + RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX, }; /** @@ -4266,6 +4275,20 @@ rte_flow_dynf_metadata_set(struct rte_mbuf *m, uint32_t v) *RTE_FLOW_DYNF_METADATA(m) = v; } +/** + * @warning + * @b EXPERIMENTAL: this structure may change without prior notice + * + * RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX + * + * Redirects packets to a particular index in a flow table. + * + */ +struct rte_flow_action_jump_to_table_index { + struct rte_flow_template_table *table; + uint32_t index; +}; + /** * Definition of a single action. * -- 2.18.2 ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: [PATCH v2 5/7] ethdev: add jump to table index action 2024-09-25 18:05 ` [PATCH v2 5/7] ethdev: add jump to table index action Alexander Kozyrev @ 2024-09-26 8:49 ` Ori Kam 0 siblings, 0 replies; 30+ messages in thread From: Ori Kam @ 2024-09-26 8:49 UTC (permalink / raw) To: Alexander Kozyrev, dev Cc: Dariusz Sosnowski, NBU-Contact-Thomas Monjalon (EXTERNAL), Matan Azrad, ferruh.yigit, stephen > -----Original Message----- > From: Alexander Kozyrev <akozyrev@nvidia.com> > Sent: Wednesday, September 25, 2024 9:06 PM > > Introduce the RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX action. > It redirects packets to a particular index in a flow table. > > Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> > --- Acked-by: Ori Kam <orika@nvidia.com> Best, Ori ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 6/7] app/testpmd: add jump to table index action 2024-09-25 18:05 ` [PATCH v2 0/7] ethdev: jump to table support Alexander Kozyrev ` (4 preceding siblings ...) 2024-09-25 18:05 ` [PATCH v2 5/7] ethdev: add jump to table index action Alexander Kozyrev @ 2024-09-25 18:05 ` Alexander Kozyrev 2024-09-26 8:49 ` Ori Kam 2024-09-25 18:05 ` [PATCH v2 7/7] ethdev: add trace points to flow insertion by index Alexander Kozyrev ` (2 subsequent siblings) 8 siblings, 1 reply; 30+ messages in thread From: Alexander Kozyrev @ 2024-09-25 18:05 UTC (permalink / raw) To: dev; +Cc: dsosnowski, orika, thomas, matan, ferruh.yigit, stephen Add a new command line options to create the RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX action from the testpmd command line. flow queue 0 create 0 template_table 0 pattern_template 0 actions_template 0 postpone no pattern eth / end actions jump_to_table_index table 0x166f9ce00 index 5 / end Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> --- app/test-pmd/cmdline_flow.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 65030936d2..d150f6cca8 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -784,6 +784,9 @@ enum index { ACTION_IPV6_EXT_PUSH_INDEX_VALUE, ACTION_NAT64, ACTION_NAT64_MODE, + ACTION_JUMP_TO_TABLE_INDEX, + ACTION_JUMP_TO_TABLE_INDEX_TABLE, + ACTION_JUMP_TO_TABLE_INDEX_INDEX, }; /** Maximum size for pattern in struct rte_flow_item_raw. */ @@ -2326,6 +2329,7 @@ static const enum index next_action[] = { ACTION_IPV6_EXT_REMOVE, ACTION_IPV6_EXT_PUSH, ACTION_NAT64, + ACTION_JUMP_TO_TABLE_INDEX, ZERO, }; @@ -2686,6 +2690,13 @@ static const enum index next_hash_encap_dest_subcmd[] = { ZERO, }; +static const enum index action_jump_to_table_index[] = { + ACTION_JUMP_TO_TABLE_INDEX_TABLE, + ACTION_JUMP_TO_TABLE_INDEX_INDEX, + ACTION_NEXT, + ZERO, +}; + static int parse_set_raw_encap_decap(struct context *, const struct token *, const char *, unsigned int, void *, unsigned int); @@ -7597,6 +7608,29 @@ static const struct token token_list[] = { .args = ARGS(ARGS_ENTRY(struct rte_flow_action_nat64, type)), .call = parse_vc_conf, }, + [ACTION_JUMP_TO_TABLE_INDEX] = { + .name = "jump_to_table_index", + .help = "Jump to table index", + .priv = PRIV_ACTION(JUMP_TO_TABLE_INDEX, + sizeof(struct rte_flow_action_jump_to_table_index)), + .next = NEXT(action_jump_to_table_index), + .call = parse_vc, + }, + [ACTION_JUMP_TO_TABLE_INDEX_TABLE] = { + .name = "table", + .help = "table to redirect traffic to", + .next = NEXT(action_jump_to_table_index, NEXT_ENTRY(COMMON_UNSIGNED)), + .args = ARGS(ARGS_ENTRY(struct rte_flow_action_jump_to_table_index, table)), + .call = parse_vc_conf, + }, + [ACTION_JUMP_TO_TABLE_INDEX_INDEX] = { + .name = "index", + .help = "rule index to redirect traffic to", + .next = NEXT(action_jump_to_table_index, NEXT_ENTRY(COMMON_UNSIGNED)), + .args = ARGS(ARGS_ENTRY(struct rte_flow_action_jump_to_table_index, index)), + .call = parse_vc_conf, + }, + /* Top level command. */ [SET] = { .name = "set", -- 2.18.2 ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: [PATCH v2 6/7] app/testpmd: add jump to table index action 2024-09-25 18:05 ` [PATCH v2 6/7] app/testpmd: " Alexander Kozyrev @ 2024-09-26 8:49 ` Ori Kam 0 siblings, 0 replies; 30+ messages in thread From: Ori Kam @ 2024-09-26 8:49 UTC (permalink / raw) To: Alexander Kozyrev, dev Cc: Dariusz Sosnowski, NBU-Contact-Thomas Monjalon (EXTERNAL), Matan Azrad, ferruh.yigit, stephen > -----Original Message----- > From: Alexander Kozyrev <akozyrev@nvidia.com> > Sent: Wednesday, September 25, 2024 9:06 PM > > Add a new command line options to create the > RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX action > from the testpmd command line. > > flow queue 0 create 0 template_table 0 pattern_template 0 > actions_template 0 postpone no pattern eth / end > actions jump_to_table_index table 0x166f9ce00 index 5 / end > > Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> > --- Acked-by: Ori Kam <orika@nvidia.com> Best, Ori ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 7/7] ethdev: add trace points to flow insertion by index 2024-09-25 18:05 ` [PATCH v2 0/7] ethdev: jump to table support Alexander Kozyrev ` (5 preceding siblings ...) 2024-09-25 18:05 ` [PATCH v2 6/7] app/testpmd: " Alexander Kozyrev @ 2024-09-25 18:05 ` Alexander Kozyrev 2024-09-26 8:50 ` Ori Kam 2024-09-25 19:28 ` [PATCH v2 0/7] ethdev: jump to table support Dariusz Sosnowski 2024-09-27 1:51 ` Ferruh Yigit 8 siblings, 1 reply; 30+ messages in thread From: Alexander Kozyrev @ 2024-09-25 18:05 UTC (permalink / raw) To: dev; +Cc: dsosnowski, orika, thomas, matan, ferruh.yigit, stephen Adds trace points for rte_flow rule insertion by index functions: rte_flow_async_create_by_index and rte_flow_async_create_by_index_with_pattern. Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> --- lib/ethdev/ethdev_trace.h | 44 ++++++++++++++++++++++++++++++++ lib/ethdev/ethdev_trace_points.c | 6 +++++ lib/ethdev/rte_flow.c | 18 +++++++++++-- 3 files changed, 66 insertions(+), 2 deletions(-) diff --git a/lib/ethdev/ethdev_trace.h b/lib/ethdev/ethdev_trace.h index 3bec87bfdb..910bedbebd 100644 --- a/lib/ethdev/ethdev_trace.h +++ b/lib/ethdev/ethdev_trace.h @@ -2343,6 +2343,50 @@ RTE_TRACE_POINT_FP( rte_trace_point_emit_ptr(flow); ) +RTE_TRACE_POINT_FP( + rte_flow_trace_async_create_by_index, + RTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id, + const struct rte_flow_op_attr *op_attr, + const struct rte_flow_template_table *template_table, + uint32_t rule_index, + const struct rte_flow_action *actions, + uint8_t actions_template_index, + const void *user_data, const struct rte_flow *flow), + rte_trace_point_emit_u16(port_id); + rte_trace_point_emit_u32(queue_id); + rte_trace_point_emit_ptr(op_attr); + rte_trace_point_emit_ptr(template_table); + rte_trace_point_emit_u32(rule_index); + rte_trace_point_emit_ptr(actions); + rte_trace_point_emit_u8(actions_template_index); + rte_trace_point_emit_ptr(user_data); + rte_trace_point_emit_ptr(flow); +) + +RTE_TRACE_POINT_FP( + rte_flow_trace_async_create_by_index_with_pattern, + RTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id, + const struct rte_flow_op_attr *op_attr, + const struct rte_flow_template_table *template_table, + uint32_t rule_index, + const struct rte_flow_item *pattern, + uint8_t pattern_template_index, + const struct rte_flow_action *actions, + uint8_t actions_template_index, + const void *user_data, const struct rte_flow *flow), + rte_trace_point_emit_u16(port_id); + rte_trace_point_emit_u32(queue_id); + rte_trace_point_emit_ptr(op_attr); + rte_trace_point_emit_ptr(template_table); + rte_trace_point_emit_u32(rule_index); + rte_trace_point_emit_ptr(pattern); + rte_trace_point_emit_u8(pattern_template_index); + rte_trace_point_emit_ptr(actions); + rte_trace_point_emit_u8(actions_template_index); + rte_trace_point_emit_ptr(user_data); + rte_trace_point_emit_ptr(flow); +) + RTE_TRACE_POINT_FP( rte_flow_trace_async_destroy, RTE_TRACE_POINT_ARGS(uint16_t port_id, uint32_t queue_id, diff --git a/lib/ethdev/ethdev_trace_points.c b/lib/ethdev/ethdev_trace_points.c index 6ecbee289b..902e4f7533 100644 --- a/lib/ethdev/ethdev_trace_points.c +++ b/lib/ethdev/ethdev_trace_points.c @@ -589,6 +589,12 @@ RTE_TRACE_POINT_REGISTER(rte_flow_trace_template_table_destroy, RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_create, lib.ethdev.flow.async_create) +RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_create_by_index, + lib.ethdev.flow.async_create_by_index) + +RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_create_by_index_with_pattern, + lib.ethdev.flow.async_create_by_index_with_pattern) + RTE_TRACE_POINT_REGISTER(rte_flow_trace_async_destroy, lib.ethdev.flow.async_destroy) diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c index a56391b156..4a7735b5ab 100644 --- a/lib/ethdev/rte_flow.c +++ b/lib/ethdev/rte_flow.c @@ -2090,6 +2090,7 @@ rte_flow_async_create_by_index(uint16_t port_id, struct rte_flow_error *error) { struct rte_eth_dev *dev = &rte_eth_devices[port_id]; + struct rte_flow *flow; #ifdef RTE_FLOW_DEBUG if (!rte_eth_dev_is_valid_port(port_id)) { @@ -2104,10 +2105,15 @@ rte_flow_async_create_by_index(uint16_t port_id, } #endif - return dev->flow_fp_ops->async_create_by_index(dev, queue_id, + flow = dev->flow_fp_ops->async_create_by_index(dev, queue_id, op_attr, template_table, rule_index, actions, actions_template_index, user_data, error); + + rte_flow_trace_async_create_by_index(port_id, queue_id, op_attr, template_table, rule_index, + actions, actions_template_index, user_data, flow); + + return flow; } struct rte_flow * @@ -2124,6 +2130,7 @@ rte_flow_async_create_by_index_with_pattern(uint16_t port_id, struct rte_flow_error *error) { struct rte_eth_dev *dev = &rte_eth_devices[port_id]; + struct rte_flow *flow; #ifdef RTE_FLOW_DEBUG if (!rte_eth_dev_is_valid_port(port_id)) { @@ -2139,11 +2146,18 @@ rte_flow_async_create_by_index_with_pattern(uint16_t port_id, } #endif - return dev->flow_fp_ops->async_create_by_index_with_pattern(dev, queue_id, op_attr, + flow = dev->flow_fp_ops->async_create_by_index_with_pattern(dev, queue_id, op_attr, template_table, rule_index, pattern, pattern_template_index, actions, actions_template_index, user_data, error); + + rte_flow_trace_async_create_by_index_with_pattern(port_id, queue_id, op_attr, + template_table, rule_index, pattern, + pattern_template_index, actions, + actions_template_index, user_data, flow); + + return flow; } int -- 2.18.2 ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: [PATCH v2 7/7] ethdev: add trace points to flow insertion by index 2024-09-25 18:05 ` [PATCH v2 7/7] ethdev: add trace points to flow insertion by index Alexander Kozyrev @ 2024-09-26 8:50 ` Ori Kam 0 siblings, 0 replies; 30+ messages in thread From: Ori Kam @ 2024-09-26 8:50 UTC (permalink / raw) To: Alexander Kozyrev, dev Cc: Dariusz Sosnowski, NBU-Contact-Thomas Monjalon (EXTERNAL), Matan Azrad, ferruh.yigit, stephen > -----Original Message----- > From: Alexander Kozyrev <akozyrev@nvidia.com> > Sent: Wednesday, September 25, 2024 9:06 PM > > Adds trace points for rte_flow rule insertion by index functions: > rte_flow_async_create_by_index and > rte_flow_async_create_by_index_with_pattern. > > Signed-off-by: Alexander Kozyrev <akozyrev@nvidia.com> > --- Acked-by: Ori Kam <orika@nvidia.com> Best, Ori ^ permalink raw reply [flat|nested] 30+ messages in thread
* RE: [PATCH v2 0/7] ethdev: jump to table support 2024-09-25 18:05 ` [PATCH v2 0/7] ethdev: jump to table support Alexander Kozyrev ` (6 preceding siblings ...) 2024-09-25 18:05 ` [PATCH v2 7/7] ethdev: add trace points to flow insertion by index Alexander Kozyrev @ 2024-09-25 19:28 ` Dariusz Sosnowski 2024-09-27 1:51 ` Ferruh Yigit 8 siblings, 0 replies; 30+ messages in thread From: Dariusz Sosnowski @ 2024-09-25 19:28 UTC (permalink / raw) To: Alexander Kozyrev, dev Cc: Ori Kam, NBU-Contact-Thomas Monjalon (EXTERNAL), Matan Azrad, ferruh.yigit, stephen > -----Original Message----- > From: Alexander Kozyrev <akozyrev@nvidia.com> > Sent: Wednesday, September 25, 2024 20:05 > To: dev@dpdk.org > Cc: Dariusz Sosnowski <dsosnowski@nvidia.com>; Ori Kam > <orika@nvidia.com>; NBU-Contact-Thomas Monjalon (EXTERNAL) > <thomas@monjalon.net>; Matan Azrad <matan@nvidia.com>; > ferruh.yigit@amd.com; stephen@networkplumber.org > Subject: [PATCH v2 0/7] ethdev: jump to table support > > Introduce new Flow API JUMP_TO_TABLE_INDEX action. > It allows bypassing a hierarchy of groups and going directly to a specified flow > table. That gives a user the flexibility to jump between different priorities in a > group and eliminates the need to do a table lookup in the group hierarchy. > The JUMP_TO_TABLE_INDEX action forwards a packet to the specified rule > index inside the index-based flow table. > > The current index-based flow table doesn't do any matching on the packet and > executes the actions immediately. > Add a new index-based flow table with pattern matching. > The JUMP_TO_TABLE_INDEX can redirect a packet to another matching criteria > at the specified index in this case. > > RFC: > https://patchwork.dpdk.org/project/dpdk/patch/20240822202753.3856703- > 1-akozyrev@nvidia.com/ > v2: added trace point to flow insertion by index functions. > > Alexander Kozyrev (7): > ethdev: add insertion by index with pattern > app/testpmd: add index with pattern insertion type > ethdev: add flow rule insertion by index with pattern > app/testpmd: add insertion by index with pattern option > ethdev: add jump to table index action > app/testpmd: add jump to table index action > ethdev: add trace points to flow insertion by index > > app/test-pmd/cmdline_flow.c | 44 +++++++++++++- > app/test-pmd/config.c | 22 +++++-- > app/test-pmd/testpmd.h | 2 +- > doc/guides/prog_guide/rte_flow.rst | 20 +++++++ > doc/guides/rel_notes/release_24_11.rst | 13 +++++ > lib/ethdev/ethdev_trace.h | 44 ++++++++++++++ > lib/ethdev/ethdev_trace_points.c | 6 ++ > lib/ethdev/rte_flow.c | 72 ++++++++++++++++++++++- > lib/ethdev/rte_flow.h | 81 ++++++++++++++++++++++++++ > lib/ethdev/rte_flow_driver.h | 14 +++++ > lib/ethdev/version.map | 1 + > 11 files changed, 309 insertions(+), 10 deletions(-) > > -- > 2.18.2 Series-acked-by: Dariusz Sosnowski <dsosnowski@nvidia.com> Best regards, Dariusz Sosnowski ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH v2 0/7] ethdev: jump to table support 2024-09-25 18:05 ` [PATCH v2 0/7] ethdev: jump to table support Alexander Kozyrev ` (7 preceding siblings ...) 2024-09-25 19:28 ` [PATCH v2 0/7] ethdev: jump to table support Dariusz Sosnowski @ 2024-09-27 1:51 ` Ferruh Yigit 8 siblings, 0 replies; 30+ messages in thread From: Ferruh Yigit @ 2024-09-27 1:51 UTC (permalink / raw) To: Alexander Kozyrev, dev; +Cc: dsosnowski, orika, thomas, matan, stephen On 9/25/2024 7:05 PM, Alexander Kozyrev wrote: > Introduce new Flow API JUMP_TO_TABLE_INDEX action. > It allows bypassing a hierarchy of groups and going directly > to a specified flow table. That gives a user the flexibility > to jump between different priorities in a group and eliminates > the need to do a table lookup in the group hierarchy. > The JUMP_TO_TABLE_INDEX action forwards a packet to the > specified rule index inside the index-based flow table. > > The current index-based flow table doesn't do any matching > on the packet and executes the actions immediately. > Add a new index-based flow table with pattern matching. > The JUMP_TO_TABLE_INDEX can redirect a packet to another > matching criteria at the specified index in this case. > > RFC: https://patchwork.dpdk.org/project/dpdk/patch/20240822202753.3856703-1- > akozyrev@nvidia.com/ > v2: added trace point to flow insertion by index functions. > > Alexander Kozyrev (7): > ethdev: add insertion by index with pattern > app/testpmd: add index with pattern insertion type > ethdev: add flow rule insertion by index with pattern > app/testpmd: add insertion by index with pattern option > ethdev: add jump to table index action > app/testpmd: add jump to table index action > ethdev: add trace points to flow insertion by index > Series applied to dpdk-next-net/main, thanks. ^ permalink raw reply [flat|nested] 30+ messages in thread
end of thread, other threads:[~2024-09-27 1:52 UTC | newest] Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2024-09-19 0:48 [PATCH 0/6] ethdev: jump to table support Alexander Kozyrev 2024-09-19 0:48 ` [PATCH 1/6] ethdev: add insertion by index with pattern Alexander Kozyrev 2024-09-25 15:01 ` Dariusz Sosnowski 2024-09-19 0:48 ` [PATCH 2/6] app/testpmd: add index with pattern insertion type Alexander Kozyrev 2024-09-25 15:01 ` Dariusz Sosnowski 2024-09-19 0:48 ` [PATCH 3/6] ethdev: add flow rule insertion by index with pattern Alexander Kozyrev 2024-09-25 15:00 ` Dariusz Sosnowski 2024-09-19 0:48 ` [PATCH 4/6] app/testpmd: add insertion by index with pattern option Alexander Kozyrev 2024-09-25 15:01 ` Dariusz Sosnowski 2024-09-19 0:48 ` [PATCH 5/6] ethdev: add jump to table index action Alexander Kozyrev 2024-09-25 15:01 ` Dariusz Sosnowski 2024-09-19 0:48 ` [PATCH 6/6] app/testpmd: " Alexander Kozyrev 2024-09-25 15:02 ` Dariusz Sosnowski 2024-09-25 18:05 ` [PATCH v2 0/7] ethdev: jump to table support Alexander Kozyrev 2024-09-25 18:05 ` [PATCH v2 1/7] ethdev: add insertion by index with pattern Alexander Kozyrev 2024-09-26 8:23 ` Ori Kam 2024-09-25 18:05 ` [PATCH v2 2/7] app/testpmd: add index with pattern insertion type Alexander Kozyrev 2024-09-26 8:24 ` Ori Kam 2024-09-25 18:05 ` [PATCH v2 3/7] ethdev: add flow rule insertion by index with pattern Alexander Kozyrev 2024-09-26 8:26 ` Ori Kam 2024-09-25 18:05 ` [PATCH v2 4/7] app/testpmd: add insertion by index with pattern option Alexander Kozyrev 2024-09-26 8:48 ` Ori Kam 2024-09-25 18:05 ` [PATCH v2 5/7] ethdev: add jump to table index action Alexander Kozyrev 2024-09-26 8:49 ` Ori Kam 2024-09-25 18:05 ` [PATCH v2 6/7] app/testpmd: " Alexander Kozyrev 2024-09-26 8:49 ` Ori Kam 2024-09-25 18:05 ` [PATCH v2 7/7] ethdev: add trace points to flow insertion by index Alexander Kozyrev 2024-09-26 8:50 ` Ori Kam 2024-09-25 19:28 ` [PATCH v2 0/7] ethdev: jump to table support Dariusz Sosnowski 2024-09-27 1:51 ` Ferruh Yigit
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).