rte_flow update, following RFC [1], introduced frag_ext_exist field for
IPv6 header item, used to indicate match on fragmented/non-fragmented
packets.
This patch updates testpmd CLI to support the new field.

To match on non-fragmented IPv6 packets, need to use pattern:
... ipv6 frag_ext_exist spec 0 frag_ext_exist mask 1 ...
To match on fragmented IPv6 packets, need to use pattern:
... ipv6 frag_ext_exist spec 1 frag_ext_exist mask 1 ...
To match on any IPv6 packets, the frag_ext_exist field should
not be specified for match.

[1] https://mails.dpdk.org/archives/dev/2020-August/177257.html

Signed-off-by: Dekel Peled <dek...@nvidia.com>
Acked-by: Ori Kam <or...@nvidia.com>
---
 app/test-pmd/cmdline_flow.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index a9bf29f..b078095 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -141,6 +141,7 @@ enum index {
        ITEM_IPV6_HOP,
        ITEM_IPV6_SRC,
        ITEM_IPV6_DST,
+       ITEM_IPV6_FRAG_EXT_EXIST,
        ITEM_ICMP,
        ITEM_ICMP_TYPE,
        ITEM_ICMP_CODE,
@@ -890,6 +891,7 @@ struct parse_action_priv {
        ITEM_IPV6_HOP,
        ITEM_IPV6_SRC,
        ITEM_IPV6_DST,
+       ITEM_IPV6_FRAG_EXT_EXIST,
        ITEM_NEXT,
        ZERO,
 };
@@ -2185,6 +2187,13 @@ static int comp_set_raw_index(struct context *, const 
struct token *,
                .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_ipv6,
                                             hdr.dst_addr)),
        },
+       [ITEM_IPV6_FRAG_EXT_EXIST] = {
+               .name = "frag_ext_exist",
+               .help = "fragment packet attribute",
+               .next = NEXT(item_ipv6, NEXT_ENTRY(UNSIGNED), item_param),
+               .args = ARGS(ARGS_ENTRY_BF(struct rte_flow_item_ipv6,
+                                          frag_ext_exist, 1)),
+       },
        [ITEM_ICMP] = {
                .name = "icmp",
                .help = "match ICMP header",
-- 
1.8.3.1

Reply via email to