From patchwork Thu Sep 27 13:57:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dekel Peled X-Patchwork-Id: 45528 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 84F131B4F8; Thu, 27 Sep 2018 15:59:50 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id 5513A1B4F6 for ; Thu, 27 Sep 2018 15:59:49 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from dekelp@mellanox.com) with ESMTPS (AES256-SHA encrypted); 27 Sep 2018 16:04:17 +0200 Received: from mtl-vdi-280.wap.labs.mlnx. (mtl-vdi-280.wap.labs.mlnx [10.128.130.87]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id w8RDxe6n015805; Thu, 27 Sep 2018 16:59:43 +0300 From: Dekel Peled To: wenzhuo.lu@intel.com, jingjing.wu@intel.com, bernard.iremonger@intel.com, dev@dpdk.org, olivier.matz@6wind.com, adrien.mazarguil@6wind.com, thomas@monjalon.net, ferruh.yigit@intel.com, arybchenko@solarflare.com Cc: shahafs@mellanox.com, orika@mellanox.com Date: Thu, 27 Sep 2018 16:57:55 +0300 Message-Id: <1538056677-33846-2-git-send-email-dekelp@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1537108670-11380-1-git-send-email-dekelp@mellanox.com> References: <1537108670-11380-1-git-send-email-dekelp@mellanox.com> Subject: [dpdk-dev] [PATCH v3 1/3] ethdev: support metadata as flow rule criteria X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" As described in [1], a new rte_flow item is added to support metadata to use as flow rule match pattern. The metadata is an opaque item, fully controlled by the application. The use of metadata is relevant for egress rules only. It can be set in the flow rule using the RTE_FLOW_ITEM_META. In order to avoid change in mbuf API, exisitng field buf.hash.fdir.hi is used to carry the metadata item. This field is used only in ingress packets, so using it for egress metadata will not cause conflicts. Application should set the packet metadata in the mbuf dedicated field, and set the PKT_TX_METADATA flag in the mbuf->ol_flags. The NIC will use the packet metadata as match criteria for relevant flow rules. This patch introduces metadata item type for rte_flow RTE_FLOW_ITEM_META, along with corresponding struct rte_flow_item_meta and ol_flag PKT_TX_METADATA. [1] "[RFC,v2] ethdev: support metadata as flow rule criteria" http://mails.dpdk.org/archives/dev/2018-August/110194.html Signed-off-by: Dekel Peled Signed-off-by: Dekel Peled mailto:dekelp@mellanox.com --- doc/guides/prog_guide/rte_flow.rst | 21 +++++++++++++++++++++ lib/librte_ethdev/rte_ethdev.c | 1 + lib/librte_ethdev/rte_ethdev.h | 5 +++++ lib/librte_ethdev/rte_flow.c | 1 + lib/librte_ethdev/rte_flow.h | 24 ++++++++++++++++++++++++ lib/librte_mbuf/rte_mbuf.c | 2 ++ lib/librte_mbuf/rte_mbuf.h | 16 ++++++++++++++-- 7 files changed, 68 insertions(+), 2 deletions(-) diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index b600b2d..8643722 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -1191,6 +1191,27 @@ Normally preceded by any of: - `Item: ICMP6_ND_NS`_ - `Item: ICMP6_ND_OPT`_ +Item: ``META`` +^^^^^^^^^^^^^^ + +Matches an application specific 32 bit metadata item. + +- Default ``mask`` matches any 32 bit value. + +.. _table_rte_flow_item_meta: + +.. table:: META + + +----------+----------+---------------------------+ + | Field | Subfield | Value | + +==========+==========+===========================+ + | ``spec`` | ``data`` | 32 bit metadata value | + +----------+--------------------------------------+ + | ``last`` | ``data`` | upper range value | + +----------+----------+---------------------------+ + | ``mask`` | ``data`` | zeroed to match any value | + +----------+----------+---------------------------+ + Actions ~~~~~~~ diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index aa7730c..aa77439 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -157,6 +157,7 @@ struct rte_eth_xstats_name_off { RTE_TX_OFFLOAD_BIT2STR(SECURITY), RTE_TX_OFFLOAD_BIT2STR(UDP_TNL_TSO), RTE_TX_OFFLOAD_BIT2STR(IP_TNL_TSO), + RTE_TX_OFFLOAD_BIT2STR(MATCH_METADATA), }; #undef RTE_TX_OFFLOAD_BIT2STR diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h index 44b4fb3..a6ca82f 100644 --- a/lib/librte_ethdev/rte_ethdev.h +++ b/lib/librte_ethdev/rte_ethdev.h @@ -948,6 +948,11 @@ struct rte_eth_conf { * for tunnel TSO. */ #define DEV_TX_OFFLOAD_IP_TNL_TSO 0x00080000 +/** + * Device supports match on metadata Tx offload.. + * Application must set PKT_TX_METADATA and mbuf metadata field. + */ +#define DEV_TX_OFFLOAD_MATCH_METADATA 0x00100000 #define RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP 0x00000001 /**< Device supports Rx queue setup after device started*/ diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c index cff4b52..54e5ef8 100644 --- a/lib/librte_ethdev/rte_flow.c +++ b/lib/librte_ethdev/rte_flow.c @@ -66,6 +66,7 @@ struct rte_flow_desc_data { sizeof(struct rte_flow_item_icmp6_nd_opt_sla_eth)), MK_FLOW_ITEM(ICMP6_ND_OPT_TLA_ETH, sizeof(struct rte_flow_item_icmp6_nd_opt_tla_eth)), + MK_FLOW_ITEM(META, sizeof(struct rte_flow_item_meta)), }; /** Generate flow_action[] entry. */ diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h index 0656e5e..83aa9f4 100644 --- a/lib/librte_ethdev/rte_flow.h +++ b/lib/librte_ethdev/rte_flow.h @@ -413,6 +413,14 @@ enum rte_flow_item_type { * See struct rte_flow_item_mark. */ RTE_FLOW_ITEM_TYPE_MARK, + + /** + * [META] + * + * Matches a metadata value specified in mbuf metadata field. + * See struct rte_flow_item_meta. + */ + RTE_FLOW_ITEM_TYPE_META, }; /** @@ -1156,6 +1164,22 @@ struct rte_flow_item_icmp6_nd_opt_tla_eth { #endif /** + * RTE_FLOW_ITEM_TYPE_META. + * + * Matches a specified metadata value. + */ +struct rte_flow_item_meta { + uint32_t data; +}; + +/** Default mask for RTE_FLOW_ITEM_TYPE_META. */ +#ifndef __cplusplus +static const struct rte_flow_item_meta rte_flow_item_meta_mask = { + .data = RTE_BE32(UINT32_MAX), +}; +#endif + +/** * @warning * @b EXPERIMENTAL: this structure may change without prior notice * diff --git a/lib/librte_mbuf/rte_mbuf.c b/lib/librte_mbuf/rte_mbuf.c index e714c5a..4b25ae8 100644 --- a/lib/librte_mbuf/rte_mbuf.c +++ b/lib/librte_mbuf/rte_mbuf.c @@ -395,6 +395,7 @@ const char *rte_get_tx_ol_flag_name(uint64_t mask) case PKT_TX_TUNNEL_UDP: return "PKT_TX_TUNNEL_UDP"; case PKT_TX_MACSEC: return "PKT_TX_MACSEC"; case PKT_TX_SEC_OFFLOAD: return "PKT_TX_SEC_OFFLOAD"; + case PKT_TX_METADATA: return "PKT_TX_METADATA"; default: return NULL; } } @@ -435,6 +436,7 @@ const char *rte_get_tx_ol_flag_name(uint64_t mask) "PKT_TX_TUNNEL_NONE" }, { PKT_TX_MACSEC, PKT_TX_MACSEC, NULL }, { PKT_TX_SEC_OFFLOAD, PKT_TX_SEC_OFFLOAD, NULL }, + { PKT_TX_METADATA, PKT_TX_METADATA, NULL }, }; const char *name; unsigned int i; diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h index 9ce5d76..ea75ad0 100644 --- a/lib/librte_mbuf/rte_mbuf.h +++ b/lib/librte_mbuf/rte_mbuf.h @@ -182,6 +182,11 @@ /* add new TX flags here */ /** + * Indicate that the metadata field in the mbuf is in use. + */ +#define PKT_TX_METADATA (1ULL << 41) + +/** * UDP Fragmentation Offload flag. This flag is used for enabling UDP * fragmentation in SW or in HW. When use UFO, mbuf->tso_segsz is used * to store the MSS of UDP fragments. @@ -342,8 +347,9 @@ PKT_TX_QINQ_PKT | \ PKT_TX_VLAN_PKT | \ PKT_TX_TUNNEL_MASK | \ - PKT_TX_MACSEC | \ - PKT_TX_SEC_OFFLOAD) + PKT_TX_MACSEC | \ + PKT_TX_SEC_OFFLOAD | \ + PKT_TX_METADATA) /** * Mbuf having an external buffer attached. shinfo in mbuf must be filled. @@ -526,6 +532,12 @@ struct rte_mbuf { uint32_t hi; /**< First 4 flexible bytes or FD ID, dependent on PKT_RX_FDIR_* flag in ol_flags. */ + /** + * Above member has optional use on egress: + * Application specific metadata value + * for flow rule match. + * Valid if PKT_TX_METADATA is set. + */ } fdir; /**< Filter identifier if FDIR enabled */ struct { uint32_t lo; From patchwork Thu Sep 27 13:57:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dekel Peled X-Patchwork-Id: 45529 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6B4D91B4FD; Thu, 27 Sep 2018 15:59:52 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id 645621B4F7 for ; Thu, 27 Sep 2018 15:59:49 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from dekelp@mellanox.com) with ESMTPS (AES256-SHA encrypted); 27 Sep 2018 16:04:19 +0200 Received: from mtl-vdi-280.wap.labs.mlnx. (mtl-vdi-280.wap.labs.mlnx [10.128.130.87]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id w8RDxe6o015805; Thu, 27 Sep 2018 16:59:45 +0300 From: Dekel Peled To: wenzhuo.lu@intel.com, jingjing.wu@intel.com, bernard.iremonger@intel.com, dev@dpdk.org, olivier.matz@6wind.com, adrien.mazarguil@6wind.com, thomas@monjalon.net, ferruh.yigit@intel.com, arybchenko@solarflare.com Cc: shahafs@mellanox.com, orika@mellanox.com Date: Thu, 27 Sep 2018 16:57:56 +0300 Message-Id: <1538056677-33846-3-git-send-email-dekelp@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1537108670-11380-1-git-send-email-dekelp@mellanox.com> References: <1537108670-11380-1-git-send-email-dekelp@mellanox.com> Subject: [dpdk-dev] [PATCH v3 2/3] app/testpmd: support metadata as flow rule criteria X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" As described in [1], this series adds option to set metadata value as match pattern when creating a new flow rule. This patch introduces additional options in testpmd commands. New item type "meta" "data", new offload flag "match_metadata". [1] "ethdev: support metadata as flow rule criteria" Signed-off-by: Dekel Peled --- app/test-pmd/cmdline.c | 14 ++++++++------ app/test-pmd/cmdline_flow.c | 25 +++++++++++++++++++++++++ app/test-pmd/config.c | 1 + app/test-pmd/testpmd.c | 4 ++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 6 +++++- 5 files changed, 43 insertions(+), 7 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 0cbd340..8cfde40 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -17401,7 +17401,8 @@ struct cmd_config_per_port_tx_offload_result { "sctp_cksum#tcp_tso#udp_tso#outer_ipv4_cksum#" "qinq_insert#vxlan_tnl_tso#gre_tnl_tso#" "ipip_tnl_tso#geneve_tnl_tso#macsec_insert#" - "mt_lockfree#multi_segs#mbuf_fast_free#security"); + "mt_lockfree#multi_segs#mbuf_fast_free#security#" + "match_metadata"); cmdline_parse_token_string_t cmd_config_per_port_tx_offload_result_on_off = TOKEN_STRING_INITIALIZER (struct cmd_config_per_port_tx_offload_result, @@ -17482,8 +17483,8 @@ struct cmd_config_per_port_tx_offload_result { "sctp_cksum|tcp_tso|udp_tso|outer_ipv4_cksum|" "qinq_insert|vxlan_tnl_tso|gre_tnl_tso|" "ipip_tnl_tso|geneve_tnl_tso|macsec_insert|" - "mt_lockfree|multi_segs|mbuf_fast_free|security " - "on|off", + "mt_lockfree|multi_segs|mbuf_fast_free|security|" + "match_metadata on|off", .tokens = { (void *)&cmd_config_per_port_tx_offload_result_port, (void *)&cmd_config_per_port_tx_offload_result_config, @@ -17533,7 +17534,8 @@ struct cmd_config_per_queue_tx_offload_result { "sctp_cksum#tcp_tso#udp_tso#outer_ipv4_cksum#" "qinq_insert#vxlan_tnl_tso#gre_tnl_tso#" "ipip_tnl_tso#geneve_tnl_tso#macsec_insert#" - "mt_lockfree#multi_segs#mbuf_fast_free#security"); + "mt_lockfree#multi_segs#mbuf_fast_free#security#" + "match_metadata"); cmdline_parse_token_string_t cmd_config_per_queue_tx_offload_result_on_off = TOKEN_STRING_INITIALIZER (struct cmd_config_per_queue_tx_offload_result, @@ -17586,8 +17588,8 @@ struct cmd_config_per_queue_tx_offload_result { "sctp_cksum|tcp_tso|udp_tso|outer_ipv4_cksum|" "qinq_insert|vxlan_tnl_tso|gre_tnl_tso|" "ipip_tnl_tso|geneve_tnl_tso|macsec_insert|" - "mt_lockfree|multi_segs|mbuf_fast_free|security " - "on|off", + "mt_lockfree|multi_segs|mbuf_fast_free|security|" + "match_metadata on|off", .tokens = { (void *)&cmd_config_per_queue_tx_offload_result_port, (void *)&cmd_config_per_queue_tx_offload_result_port_id, diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 349e822..8f997e4 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -178,6 +178,8 @@ enum index { ITEM_ICMP6_ND_OPT_SLA_ETH_SLA, ITEM_ICMP6_ND_OPT_TLA_ETH, ITEM_ICMP6_ND_OPT_TLA_ETH_TLA, + ITEM_META, + ITEM_META_DATA, /* Validate/create actions. */ ACTIONS, @@ -540,6 +542,7 @@ struct parse_action_priv { ITEM_ICMP6_ND_OPT, ITEM_ICMP6_ND_OPT_SLA_ETH, ITEM_ICMP6_ND_OPT_TLA_ETH, + ITEM_META, ZERO, }; @@ -760,6 +763,12 @@ struct parse_action_priv { ZERO, }; +static const enum index item_meta[] = { + ITEM_META_DATA, + ITEM_NEXT, + ZERO, +}; + static const enum index next_action[] = { ACTION_END, ACTION_VOID, @@ -1961,6 +1970,22 @@ static int comp_vc_action_rss_queue(struct context *, const struct token *, .args = ARGS(ARGS_ENTRY_HTON (struct rte_flow_item_icmp6_nd_opt_tla_eth, tla)), }, + [ITEM_META] = { + .name = "meta", + .help = "match metadata header", + .priv = PRIV_ITEM(META, sizeof(struct rte_flow_item_meta)), + .next = NEXT(item_meta), + .call = parse_vc, + }, + [ITEM_META_DATA] = { + .name = "data", + .help = "metadata value", + .next = NEXT(item_meta, NEXT_ENTRY(UNSIGNED), item_param), + .args = ARGS(ARGS_ENTRY_MASK_HTON(struct rte_flow_item_meta, + data, + "\xff\xff\xff\xff" + "\xff\xff\xff\xff")), + }, /* Validate/create actions. */ [ACTIONS] = { diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 7d384d9..274c392 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -1043,6 +1043,7 @@ void print_valid_ports(void) sizeof(struct rte_flow_item_icmp6_nd_opt_sla_eth)), MK_FLOW_ITEM(ICMP6_ND_OPT_TLA_ETH, sizeof(struct rte_flow_item_icmp6_nd_opt_tla_eth)), + MK_FLOW_ITEM(META, sizeof(struct rte_flow_item_meta)), }; /** Pattern item specification types. */ diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 571ecb4..268a80c 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -742,6 +742,10 @@ static void eth_dev_event_callback(char *device_name, DEV_TX_OFFLOAD_MBUF_FAST_FREE)) port->dev_conf.txmode.offloads &= ~DEV_TX_OFFLOAD_MBUF_FAST_FREE; + if (!(port->dev_info.tx_offload_capa & + DEV_TX_OFFLOAD_MATCH_METADATA)) + port->dev_conf.txmode.offloads &= + ~DEV_TX_OFFLOAD_MATCH_METADATA; if (numa_support) { if (port_numa[pid] != NUMA_NO_CONFIG) port_per_socket[port_numa[pid]]++; diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index dde205a..853ab83 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -3511,11 +3511,15 @@ This section lists supported pattern items and their attributes, if any. - ``sla {MAC-48}``: source Ethernet LLA. -- ``icmp6_nd_opt_sla_eth``: match ICMPv6 neighbor discovery target Ethernet +- ``icmp6_nd_opt_tla_eth``: match ICMPv6 neighbor discovery target Ethernet link-layer address option. - ``tla {MAC-48}``: target Ethernet LLA. +- ``meta``: match application specific metadata. + + - ``data``: metadata value. + Actions list ^^^^^^^^^^^^ From patchwork Thu Sep 27 13:57:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dekel Peled X-Patchwork-Id: 45530 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 528961B4FC; Thu, 27 Sep 2018 15:59:57 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id 593B61B503 for ; Thu, 27 Sep 2018 15:59:54 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from dekelp@mellanox.com) with ESMTPS (AES256-SHA encrypted); 27 Sep 2018 16:04:24 +0200 Received: from mtl-vdi-280.wap.labs.mlnx. (mtl-vdi-280.wap.labs.mlnx [10.128.130.87]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id w8RDxe6p015805; Thu, 27 Sep 2018 16:59:50 +0300 From: Dekel Peled To: wenzhuo.lu@intel.com, jingjing.wu@intel.com, bernard.iremonger@intel.com, dev@dpdk.org, olivier.matz@6wind.com, adrien.mazarguil@6wind.com, thomas@monjalon.net, ferruh.yigit@intel.com, arybchenko@solarflare.com Cc: shahafs@mellanox.com, orika@mellanox.com Date: Thu, 27 Sep 2018 16:57:57 +0300 Message-Id: <1538056677-33846-4-git-send-email-dekelp@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1537108670-11380-1-git-send-email-dekelp@mellanox.com> References: <1537108670-11380-1-git-send-email-dekelp@mellanox.com> Subject: [dpdk-dev] [PATCH v3 3/3] app/testpmd: add debug command Tx metadata set X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" As described in [1],[2] this series adds option to set metadata value as match pattern when creating a new flow rule. This patch introduces code for debug porpuse only. The new debug command takes a 32 bit value and stores it per port. testpmd will add to any Tx packet sent from this port the metadata value, and set ol_flags accordingly. [1] "ethdev: support metadata as flow rule criteria" [2] "app/testpmd: support metadata as flow rule criteria" Signed-off-by: Dekel Peled --- app/test-pmd/cmdline.c | 46 +++++++++++++++++++++++++++++ app/test-pmd/config.c | 6 ++++ app/test-pmd/testpmd.c | 1 + app/test-pmd/testpmd.h | 4 +++ app/test-pmd/txonly.c | 9 ++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 7 +++++ 6 files changed, 73 insertions(+) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 8cfde40..0f0e3ee 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -17602,6 +17602,51 @@ struct cmd_config_per_queue_tx_offload_result { } }; +/* *** ENABLE METADATA INSERTION IN TX PACKETS SENT TO PMD *** */ +struct cmd_tx_metadata_set_result { + cmdline_fixed_string_t tx_metadata; + cmdline_fixed_string_t set; + portid_t port_id; + uint32_t metadata; +}; + +static void +cmd_tx_metadata_set_parsed(void *parsed_result, + __attribute__((unused)) struct cmdline *cl, + __attribute__((unused)) void *data) +{ + struct cmd_tx_metadata_set_result *res = parsed_result; + + tx_metadata_set(res->port_id, res->metadata); +} + +cmdline_parse_token_string_t cmd_tx_metadata_set_tx_metadata = + TOKEN_STRING_INITIALIZER(struct cmd_tx_metadata_set_result, + tx_metadata, "tx_metadata"); +cmdline_parse_token_string_t cmd_tx_metadata_set_set = + TOKEN_STRING_INITIALIZER(struct cmd_tx_metadata_set_result, + set, "set"); +cmdline_parse_token_num_t cmd_tx_metadata_set_portid = + TOKEN_NUM_INITIALIZER(struct cmd_tx_metadata_set_result, + port_id, UINT16); +cmdline_parse_token_num_t cmd_tx_metadata_set_metadata = + TOKEN_NUM_INITIALIZER(struct cmd_tx_metadata_set_result, + metadata, UINT32); + +cmdline_parse_inst_t cmd_tx_metadata_set = { + .f = cmd_tx_metadata_set_parsed, + .data = NULL, + .help_str = "tx_metadata set : " + "Enable metadata insertion in packets sent to PMD", + .tokens = { + (void *)&cmd_tx_metadata_set_tx_metadata, + (void *)&cmd_tx_metadata_set_set, + (void *)&cmd_tx_metadata_set_portid, + (void *)&cmd_tx_metadata_set_metadata, + NULL, + }, +}; + /* ******************************************************************************** */ /* list of instructions */ @@ -17867,6 +17912,7 @@ struct cmd_config_per_queue_tx_offload_result { (cmdline_parse_inst_t *)&cmd_operate_bpf_ld_parse, (cmdline_parse_inst_t *)&cmd_operate_bpf_unld_parse, #endif + (cmdline_parse_inst_t *)&cmd_tx_metadata_set, NULL, }; diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 274c392..7aa40d6 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -3845,3 +3845,9 @@ struct igb_ring_desc_16_bytes { printf("\n\n"); } + +void +tx_metadata_set(portid_t port_id, uint32_t metadata) +{ + ports[port_id].metadata = metadata; +} diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 268a80c..caf26be 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -771,6 +771,7 @@ static void eth_dev_event_callback(char *device_name, /* set flag to initialize port/queue */ port->need_reconfig = 1; port->need_reconfig_queues = 1; + port->metadata = 0; } /* diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index a1f6614..54c7e95 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -183,6 +183,8 @@ struct rte_port { #ifdef SOFTNIC struct softnic_port softport; /**< softnic params */ #endif + /* metadata value to add in tx packets (debug only) */ + uint32_t metadata; }; /** @@ -743,6 +745,8 @@ enum print_warning { queueid_t get_allowed_max_nb_txq(portid_t *pid); int check_nb_txq(queueid_t txq); +void tx_metadata_set(portid_t port_id, uint32_t metadata); + /* * Work-around of a compilation error with ICC on invocations of the * rte_be_to_cpu_16() function. diff --git a/app/test-pmd/txonly.c b/app/test-pmd/txonly.c index 1f08b6e..b5a4b35 100644 --- a/app/test-pmd/txonly.c +++ b/app/test-pmd/txonly.c @@ -253,6 +253,15 @@ pkt->l2_len = sizeof(struct ether_hdr); pkt->l3_len = sizeof(struct ipv4_hdr); pkts_burst[nb_pkt] = pkt; + + /* + * If user configured metadata value add it to packet + * and set ol_flags accordingly + */ + if (ports[fs->tx_port].metadata) { + pkt->hash.fdir.hi = ports[fs->tx_port].metadata; + pkt->ol_flags |= PKT_TX_METADATA; + } } nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst, nb_pkt); /* diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 853ab83..dd843a5 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -851,6 +851,13 @@ Disable hardware insertion of a VLAN header in packets sent on a port:: testpmd> tx_vlan reset (port_id) +tx_metadata set +~~~~~~~~~~~~~~~ + +Set metadata value to insert in packets sent to PMD:: + + testpmd> tx_metadata set (port_id) (value) + csum set ~~~~~~~~