From patchwork Thu Oct 11 10:49: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: 46592 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 13E751B509; Thu, 11 Oct 2018 13:05:14 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id F39C21B4EC for ; Thu, 11 Oct 2018 13:05:09 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from dekelp@mellanox.com) with ESMTPS (AES256-SHA encrypted); 11 Oct 2018 12:55:21 +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 w9BAoKNH027124; Thu, 11 Oct 2018 13:50:30 +0300 From: Dekel Peled To: wenzhuo.lu@intel.com, jingjing.wu@intel.com, bernard.iremonger@intel.com, olivier.matz@6wind.com, adrien.mazarguil@6wind.com, thomas@monjalon.net, ferruh.yigit@intel.com, arybchenko@solarflare.com Cc: shahafs@mellanox.com, dev@dpdk.org, orika@mellanox.com Date: Thu, 11 Oct 2018 13:49:57 +0300 Message-Id: <1539254998-8555-3-git-send-email-dekelp@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1538056677-33846-1-git-send-email-dekelp@mellanox.com> References: <1538056677-33846-1-git-send-email-dekelp@mellanox.com> Subject: [dpdk-dev] [PATCH v4 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 | 10 +++++----- 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, 40 insertions(+), 6 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 0c5399d..d7409be 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -17491,7 +17491,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, @@ -17572,8 +17573,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, @@ -17676,8 +17677,7 @@ 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 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 29e8a3f..b16ff7a 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -1052,6 +1052,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 001f0e5..a806900 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 3a73000..83635c0 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -3518,11 +3518,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 ^^^^^^^^^^^^