From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by inbox.dpdk.org (Postfix) with ESMTP id F1851A0487
	for <public@inbox.dpdk.org>; Wed,  3 Jul 2019 17:26:24 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 16BED1B995;
	Wed,  3 Jul 2019 17:25:20 +0200 (CEST)
Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com
 [209.85.221.66]) by dpdk.org (Postfix) with ESMTP id 812A41B974
 for <dev@dpdk.org>; Wed,  3 Jul 2019 17:25:18 +0200 (CEST)
Received: by mail-wr1-f66.google.com with SMTP id n9so3329135wru.0
 for <dev@dpdk.org>; Wed, 03 Jul 2019 08:25:18 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google;
 h=date:from:to:cc:subject:message-id:references:mime-version
 :content-disposition:in-reply-to;
 bh=r3wB8WadbnCU7o5FT1pNzlmqrhR/CrCnC1+q75Bhzq8=;
 b=WimSzTxXf4b1pdu2Gt1c0loSBBkEbKS0sp6ED8n2nyVn8FF3XBd6b4TZXqIkGnnqPV
 91hb61/nZv895RYORLAuCipt+xqG4bKzMCFniIa+n/bqeAUs8zpIbFZI33Eek/pukck2
 xxvSVqYRISEMfbN4wY7cB/SG/VXsGMkVkR7oHchjICaAanxECVEtwCiWlS+0wTjiPtH8
 TtDALyCcr7xvk5ePQoGI7BH2J5bmKNPNQ/yJDQUW6zu/12Hx49PlA7CdINacLEsZmMM2
 RwFNrBRig+inndLVgCQhm/RaqJMaOFVVGq4LxhzgY1h5EVSTf75Jtnhxb9cU+LQ8u9Nm
 Io3A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:date:from:to:cc:subject:message-id:references
 :mime-version:content-disposition:in-reply-to;
 bh=r3wB8WadbnCU7o5FT1pNzlmqrhR/CrCnC1+q75Bhzq8=;
 b=rJBdh73Ieje0pbyL9e8LYx6+SKfT0/MwmV1gr959SW9lT0bvl3w82YC/ahiCh+xAvX
 w8nhp4nr4Zpu+CQFyPVvG4/oWIPq3gvnZsmoIBG3s+1MCAH/e4HyPWRuQpAaQmXT+iqa
 cC85HlQF4fvafVSXQGZKFJZBWDHSaEdwViTWnrXGpbKz9Sd5/CJ1RTCRgHSilde5OLh4
 mdmmtcYAdRMKUN/JFKoIweilMBJCo7N/wK5/daxLs7rRVHZnavHcBN9VUUT30RF3Fhgz
 Ue7htmxXNwlDDpNR/Td6guIwzBCM4mHa/ibkelF1pyL7WvTVaPGACekD2dyIlC/H10co
 B38A==
X-Gm-Message-State: APjAAAV4OJACfJbDGZfW7/wkf2AwJnSmM8ys9rKtUmv0XNbdjB2foZI3
 DHFBtVp5hJ4lllsUzBwVHDzONtYKS2SfhQ==
X-Google-Smtp-Source: APXvYqwbS1h4prHNiITezL/t7Na+gFiFpkbkJf1/2bkNWYiLsaxcEmM3WmTwdt1VMitTUBOjf7dm7Q==
X-Received: by 2002:adf:dfc5:: with SMTP id q5mr31313077wrn.142.1562167518312; 
 Wed, 03 Jul 2019 08:25:18 -0700 (PDT)
Received: from 6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78])
 by smtp.gmail.com with ESMTPSA id a81sm2706648wmh.3.2019.07.03.08.25.17
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Wed, 03 Jul 2019 08:25:17 -0700 (PDT)
Date: Wed, 3 Jul 2019 17:25:16 +0200
From: Adrien Mazarguil <adrien.mazarguil@6wind.com>
To: Xiaoyu Min <jackmin@mellanox.com>
Cc: orika@mellanox.com, Wenzhuo Lu <wenzhuo.lu@intel.com>,
 Jingjing Wu <jingjing.wu@intel.com>,
 Bernard Iremonger <bernard.iremonger@intel.com>,
 John McNamara <john.mcnamara@intel.com>,
 Marko Kovacevic <marko.kovacevic@intel.com>, dev@dpdk.org
Message-ID: <20190703152516.GI4512@6wind.com>
References: <20190624154018.128379-1-jackmin@mellanox.com>
 <cover.1562058723.git.jackmin@mellanox.com>
 <5d9e2fcd3a1bf439b0cff354ca5b5bf1f43e090d.1562058723.git.jackmin@mellanox.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <5d9e2fcd3a1bf439b0cff354ca5b5bf1f43e090d.1562058723.git.jackmin@mellanox.com>
Subject: Re: [dpdk-dev] [PATCH v4 4/4] app/testpmd: match GRE's key and
	present bits
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

On Tue, Jul 02, 2019 at 05:45:55PM +0800, Xiaoyu Min wrote:
> support matching on GRE key and present bits (C,K,S)
> 
> example testpmd command could be:
>   testpmd>flow create 0 ingress group 1 pattern eth / ipv4 /
>           gre crksv is 0x2000 crksv mask 0xb000 /
> 	  gre_key key is 0x12345678 / end
> 	  actions rss queues 1 0 end / mark id 196 / end
> 
> Which will match GRE packet with k present bit set and key value is
> 0x12345678.
> 
> Signed-off-by: Xiaoyu Min <jackmin@mellanox.com>

I'm wondering... Is matching the K bit mandatory if one explicitly matches
gre_key already or is this a specific hardware limitation in your case?

Perhaps we could document that the K bit is implicitly matched as "1" in the
default mask when a gre_key pattern item is present. If a user explicitly
spec/mask K as "0" and still provides gre_key, the PMD can safely ignore the
gre_key item.

I'm asking because I think most users won't bother with the K bit when
attempting to match some key and their rules may not behave as expected as a
result.

More below.

> ---
> ** This patch is based on patch [1]
> 
> [1] https://patches.dpdk.org/patch/55773/
> ---
>  app/test-pmd/cmdline_flow.c                 | 32 +++++++++++++++++++++
>  doc/guides/testpmd_app_ug/testpmd_funcs.rst |  4 +++
>  2 files changed, 36 insertions(+)
> 
> diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
> index 201bd9de56..8504cc8bc1 100644
> --- a/app/test-pmd/cmdline_flow.c
> +++ b/app/test-pmd/cmdline_flow.c
> @@ -148,6 +148,9 @@ enum index {
>  	ITEM_MPLS_LABEL,
>  	ITEM_GRE,
>  	ITEM_GRE_PROTO,
> +	ITEM_GRE_CRKSV,
> +	ITEM_GRE_KEY,
> +	ITEM_GRE_KEY_KEY,

Assuming you move the GRE_KEY definition in rte_flow.h, please keep its
location synchronized in this list as well.

>  	ITEM_FUZZY,
>  	ITEM_FUZZY_THRESH,
>  	ITEM_GTP,
> @@ -595,6 +598,7 @@ static const enum index next_item[] = {
>  	ITEM_NVGRE,
>  	ITEM_MPLS,
>  	ITEM_GRE,
> +	ITEM_GRE_KEY,
>  	ITEM_FUZZY,
>  	ITEM_GTP,
>  	ITEM_GTPC,
> @@ -755,6 +759,13 @@ static const enum index item_mpls[] = {
>  
>  static const enum index item_gre[] = {
>  	ITEM_GRE_PROTO,
> +	ITEM_GRE_CRKSV,

CRKSV may be unnecessary in this patch if the K bit is documented and
implemented as described in my previous comment.

> +	ITEM_NEXT,
> +	ZERO,
> +};
> +
> +static const enum index item_gre_key[] = {
> +	ITEM_GRE_KEY_KEY,
>  	ITEM_NEXT,
>  	ZERO,
>  };
> @@ -1898,6 +1909,27 @@ static const struct token token_list[] = {
>  		.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_gre,
>  					     protocol)),
>  	},
> +	[ITEM_GRE_CRKSV] = {
> +		.name = "crksv",
> +		.help = "GRE's first word (bit0 - bit15)",
> +		.next = NEXT(item_gre, NEXT_ENTRY(UNSIGNED), item_param),
> +		.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_gre,
> +					     c_rsvd0_ver)),
> +	},
> +	[ITEM_GRE_KEY] = {
> +		.name = "gre_key",
> +		.help = "match GRE Key",
> +		.priv = PRIV_ITEM(GRE_KEY,
> +				  sizeof(rte_be32_t)),

Could be a single line.

> +		.next = NEXT(item_gre_key),
> +		.call = parse_vc,
> +	},
> +	[ITEM_GRE_KEY_KEY] = {
> +		.name = "key",
> +		.help = "GRE key",
> +		.next = NEXT(item_gre_key, NEXT_ENTRY(UNSIGNED), item_param),
> +		.args = ARGS(ARG_ENTRY_HTON(rte_be32_t)),
> +	},
>  	[ITEM_FUZZY] = {
>  		.name = "fuzzy",
>  		.help = "fuzzy pattern match, expect faster than default",
> diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> index cb83a3ce8a..fc3ba8a009 100644
> --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> @@ -3804,6 +3804,10 @@ This section lists supported pattern items and their attributes, if any.
>  
>    - ``protocol {unsigned}``: protocol type.
>  
> +- ``gre_key``: match GRE optional key field.
> +
> +  - ``key {unsigned}``: key value.
> +

You should have named this field "value" then, i.e.:

 - ``value {unsigned}``: key value.

>  - ``fuzzy``: fuzzy pattern match, expect faster than default.
>  
>    - ``thresh {unsigned}``: accuracy threshold.
> -- 
> 2.21.0
> 

-- 
Adrien Mazarguil
6WIND