app/testpmd: support IPv6 fragment extension item
authorDekel Peled <dekelp@nvidia.com>
Wed, 14 Oct 2020 16:35:51 +0000 (19:35 +0300)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 16 Oct 2020 17:48:18 +0000 (19:48 +0200)
rte_flow update, following RFC [1], added to ethdev the rte_flow item
ipv6_frag_ext.
This patch updates testpmd CLI to support the new item and its fields.

To match on fragmented IPv6 packets, this item is added to pattern:
... ipv6 / ipv6_frag_ext ...

[1] http://mails.dpdk.org/archives/dev/2020-March/160255.html

Signed-off-by: Dekel Peled <dekelp@nvidia.com>
Acked-by: Ori Kam <orika@nvidia.com>
app/test-pmd/cmdline_flow.c

index 4043eac..84bba0f 100644 (file)
@@ -215,6 +215,9 @@ enum index {
        ITEM_ARP_ETH_IPV4_TPA,
        ITEM_IPV6_EXT,
        ITEM_IPV6_EXT_NEXT_HDR,
+       ITEM_IPV6_FRAG_EXT,
+       ITEM_IPV6_FRAG_EXT_NEXT_HDR,
+       ITEM_IPV6_FRAG_EXT_FRAG_DATA,
        ITEM_ICMP6,
        ITEM_ICMP6_TYPE,
        ITEM_ICMP6_CODE,
@@ -859,6 +862,7 @@ static const enum index next_item[] = {
        ITEM_VXLAN_GPE,
        ITEM_ARP_ETH_IPV4,
        ITEM_IPV6_EXT,
+       ITEM_IPV6_FRAG_EXT,
        ITEM_ICMP6,
        ITEM_ICMP6_ND_NS,
        ITEM_ICMP6_ND_NA,
@@ -1080,6 +1084,13 @@ static const enum index item_ipv6_ext[] = {
        ZERO,
 };
 
+static const enum index item_ipv6_frag_ext[] = {
+       ITEM_IPV6_FRAG_EXT_NEXT_HDR,
+       ITEM_IPV6_FRAG_EXT_FRAG_DATA,
+       ITEM_NEXT,
+       ZERO,
+};
+
 static const enum index item_icmp6[] = {
        ITEM_ICMP6_TYPE,
        ITEM_ICMP6_CODE,
@@ -2738,6 +2749,30 @@ static const struct token token_list[] = {
                .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_ipv6_ext,
                                             next_hdr)),
        },
+       [ITEM_IPV6_FRAG_EXT] = {
+               .name = "ipv6_frag_ext",
+               .help = "match presence of IPv6 fragment extension header",
+               .priv = PRIV_ITEM(IPV6_FRAG_EXT,
+                               sizeof(struct rte_flow_item_ipv6_frag_ext)),
+               .next = NEXT(item_ipv6_frag_ext),
+               .call = parse_vc,
+       },
+       [ITEM_IPV6_FRAG_EXT_NEXT_HDR] = {
+               .name = "next_hdr",
+               .help = "next header",
+               .next = NEXT(item_ipv6_frag_ext, NEXT_ENTRY(UNSIGNED),
+                            item_param),
+               .args = ARGS(ARGS_ENTRY(struct rte_flow_item_ipv6_frag_ext,
+                                       hdr.next_header)),
+       },
+       [ITEM_IPV6_FRAG_EXT_FRAG_DATA] = {
+               .name = "frag_data",
+               .help = "Fragment flags and offset",
+               .next = NEXT(item_ipv6_frag_ext, NEXT_ENTRY(UNSIGNED),
+                            item_param),
+               .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_ipv6_frag_ext,
+                                            hdr.frag_data)),
+       },
        [ITEM_ICMP6] = {
                .name = "icmp6",
                .help = "match any ICMPv6 header",