> -----Original Message-----
> From: Xiaoyu Min <jack...@mellanox.com>
> Sent: Friday, July 5, 2019 12:54
> To: Adrien Mazarguil <adrien.mazarg...@6wind.com>; Ori Kam
> <or...@mellanox.com>; Slava Ovsiienko <viachesl...@mellanox.com>;
> Wenzhuo Lu <wenzhuo...@intel.com>; Jingjing Wu
> <jingjing...@intel.com>; Bernard Iremonger
> <bernard.iremon...@intel.com>; John McNamara
> <john.mcnam...@intel.com>; Marko Kovacevic
> <marko.kovace...@intel.com>
> Cc: dev@dpdk.org
> Subject: [Suspected-Phishing][PATCH v7 4/4] app/testpmd: match GRE's key
> and present bits
>
> 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 / gre_key value 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.
>
> Acked-by: Ori Kam <or...@mellanox.com>
> Acked-by: Adrien Mazarguil <adrien.mazarg...@6wind.com>
> Signed-off-by: Xiaoyu Min <jack...@mellanox.com>
Acked-by: Viacheslav Ovsiienko <viachesl...@mellanox.com>
> ---
> app/test-pmd/cmdline_flow.c | 64 +++++++++++++++++++++
> doc/guides/testpmd_app_ug/testpmd_funcs.rst | 4 ++
> 2 files changed, 68 insertions(+)
>
> diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
> index 201bd9de56..949a38a0e7 100644
> --- a/app/test-pmd/cmdline_flow.c
> +++ b/app/test-pmd/cmdline_flow.c
> @@ -148,6 +148,10 @@ enum index {
> ITEM_MPLS_LABEL,
> ITEM_GRE,
> ITEM_GRE_PROTO,
> + ITEM_GRE_C_RSVD0_VER,
> + ITEM_GRE_C_BIT,
> + ITEM_GRE_K_BIT,
> + ITEM_GRE_S_BIT,
> ITEM_FUZZY,
> ITEM_FUZZY_THRESH,
> ITEM_GTP,
> @@ -181,6 +185,8 @@ enum index {
> ITEM_ICMP6_ND_OPT_TLA_ETH_TLA,
> ITEM_META,
> ITEM_META_DATA,
> + ITEM_GRE_KEY,
> + ITEM_GRE_KEY_VALUE,
>
> /* Validate/create actions. */
> ACTIONS,
> @@ -610,6 +616,7 @@ static const enum index next_item[] = {
> ITEM_ICMP6_ND_OPT_SLA_ETH,
> ITEM_ICMP6_ND_OPT_TLA_ETH,
> ITEM_META,
> + ITEM_GRE_KEY,
> ZERO,
> };
>
> @@ -755,6 +762,16 @@ static const enum index item_mpls[] = {
>
> static const enum index item_gre[] = {
> ITEM_GRE_PROTO,
> + ITEM_GRE_C_RSVD0_VER,
> + ITEM_GRE_C_BIT,
> + ITEM_GRE_K_BIT,
> + ITEM_GRE_S_BIT,
> + ITEM_NEXT,
> + ZERO,
> +};
> +
> +static const enum index item_gre_key[] = {
> + ITEM_GRE_KEY_VALUE,
> ITEM_NEXT,
> ZERO,
> };
> @@ -1898,6 +1915,40 @@ static const struct token token_list[] = {
> .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_gre,
> protocol)),
> },
> + [ITEM_GRE_C_RSVD0_VER] = {
> + .name = "c_rsvd0_ver",
> + .help =
> + "checksum (1b), undefined (1b), key bit (1b),"
> + " sequence number (1b), reserved 0 (9b),"
> + " version (3b)",
> + .next = NEXT(item_gre, NEXT_ENTRY(UNSIGNED),
> item_param),
> + .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_gre,
> + c_rsvd0_ver)),
> + },
> + [ITEM_GRE_C_BIT] = {
> + .name = "c_bit",
> + .help = "checksum bit (C)",
> + .next = NEXT(item_gre, NEXT_ENTRY(BOOLEAN),
> item_param),
> + .args = ARGS(ARGS_ENTRY_MASK_HTON(struct
> rte_flow_item_gre,
> + c_rsvd0_ver,
> + "\x80\x00\x00\x00")),
> + },
> + [ITEM_GRE_S_BIT] = {
> + .name = "s_bit",
> + .help = "sequence number bit (S)",
> + .next = NEXT(item_gre, NEXT_ENTRY(BOOLEAN),
> item_param),
> + .args = ARGS(ARGS_ENTRY_MASK_HTON(struct
> rte_flow_item_gre,
> + c_rsvd0_ver,
> + "\x10\x00\x00\x00")),
> + },
> + [ITEM_GRE_K_BIT] = {
> + .name = "k_bit",
> + .help = "key bit (K)",
> + .next = NEXT(item_gre, NEXT_ENTRY(BOOLEAN),
> item_param),
> + .args = ARGS(ARGS_ENTRY_MASK_HTON(struct
> rte_flow_item_gre,
> + c_rsvd0_ver,
> + "\x20\x00\x00\x00")),
> + },
> [ITEM_FUZZY] = {
> .name = "fuzzy",
> .help = "fuzzy pattern match, expect faster than default",
> @@ -2150,6 +2201,19 @@ static const struct token token_list[] = {
> .args = ARGS(ARGS_ENTRY_MASK_HTON(struct
> rte_flow_item_meta,
> data, "\xff\xff\xff\xff")),
> },
> + [ITEM_GRE_KEY] = {
> + .name = "gre_key",
> + .help = "match GRE key",
> + .priv = PRIV_ITEM(GRE_KEY, sizeof(rte_be32_t)),
> + .next = NEXT(item_gre_key),
> + .call = parse_vc,
> + },
> + [ITEM_GRE_KEY_VALUE] = {
> + .name = "value",
> + .help = "key value",
> + .next = NEXT(item_gre_key, NEXT_ENTRY(UNSIGNED),
> item_param),
> + .args = ARGS(ARG_ENTRY_HTON(rte_be32_t)),
> + },
>
> /* Validate/create actions. */
> [ACTIONS] = {
> diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> index cb83a3ce8a..9ef1796ee1 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.
> +
> + - ``value {unsigned}``: key value.
> +
> - ``fuzzy``: fuzzy pattern match, expect faster than default.
>
> - ``thresh {unsigned}``: accuracy threshold.
> --
> 2.21.0