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 <jack...@mellanox.com> --- ** 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, 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, + 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)), + .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. + - ``fuzzy``: fuzzy pattern match, expect faster than default. - ``thresh {unsigned}``: accuracy threshold. -- 2.21.0