From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id 394BF532C for ; Sun, 16 Sep 2018 16:39:16 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from dekelp@mellanox.com) with ESMTPS (AES256-SHA encrypted); 16 Sep 2018 16:43:32 +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 w8GEd0hK031896; Sun, 16 Sep 2018 17:39:12 +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: Sun, 16 Sep 2018 17:37:49 +0300 Message-Id: <1537108670-11380-3-git-send-email-dekelp@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1537104835-9034-1-git-send-email-dekelp@mellanox.com> References: <1537104835-9034-1-git-send-email-dekelp@mellanox.com> Subject: [dpdk-dev] [PATCH v2 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: , X-List-Received-Date: Sun, 16 Sep 2018 14:39:16 -0000 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 --- V2: * Fix some checkpatch coding style issues (wrongly sent). --- 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 | 5 ++--- 5 files changed, 40 insertions(+), 9 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 589121d..4559d59 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -17403,7 +17403,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, @@ -17484,8 +17485,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, @@ -17535,7 +17536,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, @@ -17588,8 +17590,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 f926060..f6ca6b4 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, @@ -564,6 +566,7 @@ struct parse_action_priv { ITEM_ICMP6_ND_OPT, ITEM_ICMP6_ND_OPT_SLA_ETH, ITEM_ICMP6_ND_OPT_TLA_ETH, + ITEM_META, ZERO, }; @@ -784,6 +787,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, @@ -1985,6 +1994,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 14ccd68..70b2cce 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -1034,6 +1034,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 ee48db2..969eb7c 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -747,6 +747,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..7d86692 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -3511,10 +3511,9 @@ 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 - link-layer address option. +- ``meta``: match application specific metadata. - - ``tla {MAC-48}``: target Ethernet LLA. + - ``data``: metadata value. Actions list ^^^^^^^^^^^^ -- 1.8.3.1