get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/38828/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 38828,
    "url": "http://patches.dpdk.org/api/patches/38828/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20180424154822.19666-2-adrien.mazarguil@6wind.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20180424154822.19666-2-adrien.mazarguil@6wind.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180424154822.19666-2-adrien.mazarguil@6wind.com",
    "date": "2018-04-24T15:58:58",
    "name": "[dpdk-dev,v5,1/3] ethdev: add neighbor discovery support to flow API",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "4276c1615906e8648a96fd0a873cf548e064bd7b",
    "submitter": {
        "id": 165,
        "url": "http://patches.dpdk.org/api/people/165/?format=api",
        "name": "Adrien Mazarguil",
        "email": "adrien.mazarguil@6wind.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20180424154822.19666-2-adrien.mazarguil@6wind.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/38828/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/38828/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 5F04058C3;\n\tTue, 24 Apr 2018 17:59:15 +0200 (CEST)",
            "from mail-wm0-f65.google.com (mail-wm0-f65.google.com\n\t[74.125.82.65]) by dpdk.org (Postfix) with ESMTP id D4E45559A\n\tfor <dev@dpdk.org>; Tue, 24 Apr 2018 17:59:13 +0200 (CEST)",
            "by mail-wm0-f65.google.com with SMTP id a8so2036815wmg.5\n\tfor <dev@dpdk.org>; Tue, 24 Apr 2018 08:59:13 -0700 (PDT)",
            "from 6wind.com (host.78.145.23.62.rev.coltfrance.com.\n\t[62.23.145.78]) by smtp.gmail.com with ESMTPSA id\n\tg75sm14154866wmc.47.2018.04.24.08.59.12\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tTue, 24 Apr 2018 08:59:12 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=6wind-com.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:in-reply-to;\n\tbh=wlShLzYsMngtXj9u1Hf4oq3ima6214MKT9sM3871n2Y=;\n\tb=JejZ8KnxmHnGvsdCDMaV/Wj+IR/CPjcWCRdZ1tCPhBwSpF9Ert5qHM48qKop56ybl/\n\ts2uNmW1+zbha33qZR6Uq8OrkM6KY4IBvkuL6afwlBWsYlZYDRXvpngQYIEKIJsmNHiLg\n\tTKIIgkvO1iP2e3esxEHYNQnyx7NEivAEIWsVVtT8qRW5D54qR1wlad6BJ8uSHZArP37r\n\tHgN58vOmHaSlsHJXm6JQIJzP90kImI0k4zqRl2Zq4A+IgeN5e3YpK7EKhn+mUoDnXwCy\n\tN37CsiGvb19h8bdXn+rJPaKf8uxYPGPeI7EjXPXa4v7WwxdFqSCjqQ022a+7zMHd2I4J\n\tVCgg==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:in-reply-to;\n\tbh=wlShLzYsMngtXj9u1Hf4oq3ima6214MKT9sM3871n2Y=;\n\tb=fTjcdeMvzA60uDrP5BXXStxZTIZkuk38IPHq99NX8TbzqJ4uIpff8geruR4VsCn0pJ\n\tRHeJ45A5ZEFp3gRg82vBN8kTZEzrFBs4m16ZqUVGfSp3BZ2Ew2bzKuj/qOoOn+SOjgqY\n\tCZWZrIOcr/hPqHHpcsEYoX2f7lXD5CpQMvZrtvl1Ux8iWcDpw9yix2+V2pP5swHl7G54\n\tl+gJxRBmQm5xy22pTkymt3lsChefRuH7eyqGMzVQlLANKThx+EZS+Zh3D39BaNuuJBLb\n\tsKfBvvB0Y2Lz9S9rWEGinFjnFW9xBQG9mfulnq0IZ1SjvJDfu5gFeAq859hpZAYWRtaB\n\t7bgw==",
        "X-Gm-Message-State": "ALQs6tC7Bai44BuUG+LjPv0RL4hhBMIn2s6Owy0UMdO5r3EK/qDmwc0l\n\trPu9OJbWLeY5nzLuucYXQJbm0A==",
        "X-Google-Smtp-Source": "AIpwx4/YSKr+6YcO6elPco4ytjPFxFObu+RtH+jiUlNxqGXoE8jaxbdMo7hqIdLAQ9Yh/2bDFv48gw==",
        "X-Received": "by 10.28.46.14 with SMTP id u14mr12793655wmu.98.1524585552813;\n\tTue, 24 Apr 2018 08:59:12 -0700 (PDT)",
        "Date": "Tue, 24 Apr 2018 17:58:58 +0200",
        "From": "Adrien Mazarguil <adrien.mazarguil@6wind.com>",
        "To": "Ferruh Yigit <ferruh.yigit@intel.com>, Qi Zhang <qi.z.zhang@intel.com>",
        "Cc": "dev@dpdk.org, declan.doherty@intel.com, sugesh.chandran@intel.com,\n\tmichael.j.glynn@intel.com, yu.y.liu@intel.com,\n\tkonstantin.ananyev@intel.com, bruce.richardson@intel.com",
        "Message-ID": "<20180424154822.19666-2-adrien.mazarguil@6wind.com>",
        "References": "<20180423063610.246387-1-qi.z.zhang@intel.com>\n\t<20180424154822.19666-1-adrien.mazarguil@6wind.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=us-ascii",
        "Content-Disposition": "inline",
        "In-Reply-To": "<20180424154822.19666-1-adrien.mazarguil@6wind.com>",
        "X-Mailer": "git-send-email 2.11.0",
        "Subject": "[dpdk-dev] [PATCH v5 1/3] ethdev: add neighbor discovery support to\n\tflow API",
        "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://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Qi Zhang <qi.z.zhang@intel.com>\n\n- RTE_FLOW_ITEM_TYPE_ARP_ETH_IPV4: matches an ARP header for Ethernet/IPv4.\n\n- RTE_FLOW_ITEM_TYPE_IPV6_EXT: matches the presence of any IPv6 extension\n  header.\n\n- RTE_FLOW_ITEM_TYPE_ICMP6: matches any ICMPv6 header.\n\n- RTE_FLOW_ITEM_TYPE_ICMP6_ND_NS: matches an ICMPv6 neighbor discovery\n  solicitation.\n\n- RTE_FLOW_ITEM_TYPE_ICMP6_ND_NA: matches an ICMPv6 neighbor discovery\n  advertisement.\n\n- RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT: matches the presence of any ICMPv6\n  neighbor discovery option.\n\n- RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT_ETH_SLA: matches an ICMPv6 neighbor\n  discovery source Ethernet link-layer address option.\n\n- RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT_ETH_TLA: matches an ICMPv6 neighbor\n  discovery target Ethernet link-layer address option.\n\nSigned-off-by: Qi Zhang <qi.z.zhang@intel.com>\nSigned-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>\n\n--\n\nv5 changes:\n\n- Clarified ITEM_ARP_IPV4 as ITEM_ARP_ETH_IPV4.\n- Expanded abbreviated macros (e.g. ITEM_ICMP6_ND_NS_TGT_ADDR =>\n  ITEM_ICMP6_ND_NS_TARGET_ADDR) to match the name of the underlying\n  structure field.\n- Fixed testpmd flow command issues (lack of ITEM_NEXT, use of UNSIGNED\n  instead of IPV4_ADDR/IPV6_ADDR/MAC_ADDR).\n- Clarified/fixed flow command help strings and matching documentation.\n- Added ITEM_ICMP6_ND_OPT for generic ND options.\n- Modified ITEM_ICMP6_ND_OPT_SLA_ETH and ITEM_ICMP6_ND_OPT_TLA_ETH to not\n  include an ICMPv6 header but instead work like ITEM_ICMP6_ND_OPT as\n  separate items to stack on top of ICMPv6 ND on a needed basis.\n- Updated documentation accordingly.\n- Added these new pattern items to rte_flow_copy().\n- Updated commit log to reflect patch contents.\n---\n app/test-pmd/cmdline_flow.c                 | 241 +++++++++++++++++++++\n app/test-pmd/config.c                       |  10 +\n doc/guides/prog_guide/rte_flow.rst          | 114 +++++++++-\n doc/guides/testpmd_app_ug/testpmd_funcs.rst |  38 ++++\n lib/librte_ether/rte_flow.c                 |  10 +\n lib/librte_ether/rte_flow.h                 | 254 ++++++++++++++++++++++-\n 6 files changed, 665 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c\nindex 32fe6645a..2bb2be101 100644\n--- a/app/test-pmd/cmdline_flow.c\n+++ b/app/test-pmd/cmdline_flow.c\n@@ -154,6 +154,26 @@ enum index {\n \tITEM_GENEVE,\n \tITEM_GENEVE_VNI,\n \tITEM_GENEVE_PROTO,\n+\tITEM_ARP_ETH_IPV4,\n+\tITEM_ARP_ETH_IPV4_SHA,\n+\tITEM_ARP_ETH_IPV4_SPA,\n+\tITEM_ARP_ETH_IPV4_THA,\n+\tITEM_ARP_ETH_IPV4_TPA,\n+\tITEM_IPV6_EXT,\n+\tITEM_IPV6_EXT_NEXT_HDR,\n+\tITEM_ICMP6,\n+\tITEM_ICMP6_TYPE,\n+\tITEM_ICMP6_CODE,\n+\tITEM_ICMP6_ND_NS,\n+\tITEM_ICMP6_ND_NS_TARGET_ADDR,\n+\tITEM_ICMP6_ND_NA,\n+\tITEM_ICMP6_ND_NA_TARGET_ADDR,\n+\tITEM_ICMP6_ND_OPT,\n+\tITEM_ICMP6_ND_OPT_TYPE,\n+\tITEM_ICMP6_ND_OPT_SLA_ETH,\n+\tITEM_ICMP6_ND_OPT_SLA_ETH_SLA,\n+\tITEM_ICMP6_ND_OPT_TLA_ETH,\n+\tITEM_ICMP6_ND_OPT_TLA_ETH_TLA,\n \n \t/* Validate/create actions. */\n \tACTIONS,\n@@ -470,6 +490,14 @@ static const enum index next_item[] = {\n \tITEM_GTPC,\n \tITEM_GTPU,\n \tITEM_GENEVE,\n+\tITEM_ARP_ETH_IPV4,\n+\tITEM_IPV6_EXT,\n+\tITEM_ICMP6,\n+\tITEM_ICMP6_ND_NS,\n+\tITEM_ICMP6_ND_NA,\n+\tITEM_ICMP6_ND_OPT,\n+\tITEM_ICMP6_ND_OPT_SLA_ETH,\n+\tITEM_ICMP6_ND_OPT_TLA_ETH,\n \tZERO,\n };\n \n@@ -626,6 +654,58 @@ static const enum index item_geneve[] = {\n \tZERO,\n };\n \n+static const enum index item_arp_eth_ipv4[] = {\n+\tITEM_ARP_ETH_IPV4_SHA,\n+\tITEM_ARP_ETH_IPV4_SPA,\n+\tITEM_ARP_ETH_IPV4_THA,\n+\tITEM_ARP_ETH_IPV4_TPA,\n+\tITEM_NEXT,\n+\tZERO,\n+};\n+\n+static const enum index item_ipv6_ext[] = {\n+\tITEM_IPV6_EXT_NEXT_HDR,\n+\tITEM_NEXT,\n+\tZERO,\n+};\n+\n+static const enum index item_icmp6[] = {\n+\tITEM_ICMP6_TYPE,\n+\tITEM_ICMP6_CODE,\n+\tITEM_NEXT,\n+\tZERO,\n+};\n+\n+static const enum index item_icmp6_nd_ns[] = {\n+\tITEM_ICMP6_ND_NS_TARGET_ADDR,\n+\tITEM_NEXT,\n+\tZERO,\n+};\n+\n+static const enum index item_icmp6_nd_na[] = {\n+\tITEM_ICMP6_ND_NA_TARGET_ADDR,\n+\tITEM_NEXT,\n+\tZERO,\n+};\n+\n+static const enum index item_icmp6_nd_opt[] = {\n+\tITEM_ICMP6_ND_OPT_TYPE,\n+\tITEM_NEXT,\n+\tZERO,\n+};\n+\n+static const enum index item_icmp6_nd_opt_sla_eth[] = {\n+\tITEM_ICMP6_ND_OPT_SLA_ETH_SLA,\n+\tITEM_NEXT,\n+\tZERO,\n+};\n+\n+static const enum index item_icmp6_nd_opt_tla_eth[] = {\n+\tITEM_ICMP6_ND_OPT_TLA_ETH_TLA,\n+\tITEM_NEXT,\n+\tZERO,\n+};\n+\n static const enum index next_action[] = {\n \tACTION_END,\n \tACTION_VOID,\n@@ -1560,6 +1640,167 @@ static const struct token token_list[] = {\n \t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_geneve,\n \t\t\t\t\t     protocol)),\n \t},\n+\t[ITEM_ARP_ETH_IPV4] = {\n+\t\t.name = \"arp_eth_ipv4\",\n+\t\t.help = \"match ARP header for Ethernet/IPv4\",\n+\t\t.priv = PRIV_ITEM(ARP_ETH_IPV4,\n+\t\t\t\t  sizeof(struct rte_flow_item_arp_eth_ipv4)),\n+\t\t.next = NEXT(item_arp_eth_ipv4),\n+\t\t.call = parse_vc,\n+\t},\n+\t[ITEM_ARP_ETH_IPV4_SHA] = {\n+\t\t.name = \"sha\",\n+\t\t.help = \"sender hardware address\",\n+\t\t.next = NEXT(item_arp_eth_ipv4, NEXT_ENTRY(MAC_ADDR),\n+\t\t\t     item_param),\n+\t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_arp_eth_ipv4,\n+\t\t\t\t\t     sha)),\n+\t},\n+\t[ITEM_ARP_ETH_IPV4_SPA] = {\n+\t\t.name = \"spa\",\n+\t\t.help = \"sender IPv4 address\",\n+\t\t.next = NEXT(item_arp_eth_ipv4, NEXT_ENTRY(IPV4_ADDR),\n+\t\t\t     item_param),\n+\t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_arp_eth_ipv4,\n+\t\t\t\t\t     spa)),\n+\t},\n+\t[ITEM_ARP_ETH_IPV4_THA] = {\n+\t\t.name = \"tha\",\n+\t\t.help = \"target hardware address\",\n+\t\t.next = NEXT(item_arp_eth_ipv4, NEXT_ENTRY(MAC_ADDR),\n+\t\t\t     item_param),\n+\t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_arp_eth_ipv4,\n+\t\t\t\t\t     tha)),\n+\t},\n+\t[ITEM_ARP_ETH_IPV4_TPA] = {\n+\t\t.name = \"tpa\",\n+\t\t.help = \"target IPv4 address\",\n+\t\t.next = NEXT(item_arp_eth_ipv4, NEXT_ENTRY(IPV4_ADDR),\n+\t\t\t     item_param),\n+\t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_arp_eth_ipv4,\n+\t\t\t\t\t     tpa)),\n+\t},\n+\t[ITEM_IPV6_EXT] = {\n+\t\t.name = \"ipv6_ext\",\n+\t\t.help = \"match presence of any IPv6 extension header\",\n+\t\t.priv = PRIV_ITEM(IPV6_EXT,\n+\t\t\t\t  sizeof(struct rte_flow_item_ipv6_ext)),\n+\t\t.next = NEXT(item_ipv6_ext),\n+\t\t.call = parse_vc,\n+\t},\n+\t[ITEM_IPV6_EXT_NEXT_HDR] = {\n+\t\t.name = \"next_hdr\",\n+\t\t.help = \"next header\",\n+\t\t.next = NEXT(item_ipv6_ext, NEXT_ENTRY(UNSIGNED), item_param),\n+\t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_ipv6_ext,\n+\t\t\t\t\t     next_hdr)),\n+\t},\n+\t[ITEM_ICMP6] = {\n+\t\t.name = \"icmp6\",\n+\t\t.help = \"match any ICMPv6 header\",\n+\t\t.priv = PRIV_ITEM(ICMP6, sizeof(struct rte_flow_item_icmp6)),\n+\t\t.next = NEXT(item_icmp6),\n+\t\t.call = parse_vc,\n+\t},\n+\t[ITEM_ICMP6_TYPE] = {\n+\t\t.name = \"type\",\n+\t\t.help = \"ICMPv6 type\",\n+\t\t.next = NEXT(item_icmp6, NEXT_ENTRY(UNSIGNED), item_param),\n+\t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_icmp6,\n+\t\t\t\t\t     type)),\n+\t},\n+\t[ITEM_ICMP6_CODE] = {\n+\t\t.name = \"code\",\n+\t\t.help = \"ICMPv6 code\",\n+\t\t.next = NEXT(item_icmp6, NEXT_ENTRY(UNSIGNED), item_param),\n+\t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_icmp6,\n+\t\t\t\t\t     code)),\n+\t},\n+\t[ITEM_ICMP6_ND_NS] = {\n+\t\t.name = \"icmp6_nd_ns\",\n+\t\t.help = \"match ICMPv6 neighbor discovery solicitation\",\n+\t\t.priv = PRIV_ITEM(ICMP6_ND_NS,\n+\t\t\t\t  sizeof(struct rte_flow_item_icmp6_nd_ns)),\n+\t\t.next = NEXT(item_icmp6_nd_ns),\n+\t\t.call = parse_vc,\n+\t},\n+\t[ITEM_ICMP6_ND_NS_TARGET_ADDR] = {\n+\t\t.name = \"target_addr\",\n+\t\t.help = \"target address\",\n+\t\t.next = NEXT(item_icmp6_nd_ns, NEXT_ENTRY(IPV6_ADDR),\n+\t\t\t     item_param),\n+\t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_icmp6_nd_ns,\n+\t\t\t\t\t     target_addr)),\n+\t},\n+\t[ITEM_ICMP6_ND_NA] = {\n+\t\t.name = \"icmp6_nd_na\",\n+\t\t.help = \"match ICMPv6 neighbor discovery advertisement\",\n+\t\t.priv = PRIV_ITEM(ICMP6_ND_NA,\n+\t\t\t\t  sizeof(struct rte_flow_item_icmp6_nd_na)),\n+\t\t.next = NEXT(item_icmp6_nd_na),\n+\t\t.call = parse_vc,\n+\t},\n+\t[ITEM_ICMP6_ND_NA_TARGET_ADDR] = {\n+\t\t.name = \"target_addr\",\n+\t\t.help = \"target address\",\n+\t\t.next = NEXT(item_icmp6_nd_na, NEXT_ENTRY(IPV6_ADDR),\n+\t\t\t     item_param),\n+\t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_icmp6_nd_na,\n+\t\t\t\t\t     target_addr)),\n+\t},\n+\t[ITEM_ICMP6_ND_OPT] = {\n+\t\t.name = \"icmp6_nd_opt\",\n+\t\t.help = \"match presence of any ICMPv6 neighbor discovery\"\n+\t\t\t\" option\",\n+\t\t.priv = PRIV_ITEM(ICMP6_ND_OPT,\n+\t\t\t\t  sizeof(struct rte_flow_item_icmp6_nd_opt)),\n+\t\t.next = NEXT(item_icmp6_nd_opt),\n+\t\t.call = parse_vc,\n+\t},\n+\t[ITEM_ICMP6_ND_OPT_TYPE] = {\n+\t\t.name = \"type\",\n+\t\t.help = \"ND option type\",\n+\t\t.next = NEXT(item_icmp6_nd_opt, NEXT_ENTRY(UNSIGNED),\n+\t\t\t     item_param),\n+\t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_icmp6_nd_opt,\n+\t\t\t\t\t     type)),\n+\t},\n+\t[ITEM_ICMP6_ND_OPT_SLA_ETH] = {\n+\t\t.name = \"icmp6_nd_opt_sla_eth\",\n+\t\t.help = \"match ICMPv6 neighbor discovery source Ethernet\"\n+\t\t\t\" link-layer address option\",\n+\t\t.priv = PRIV_ITEM\n+\t\t\t(ICMP6_ND_OPT_SLA_ETH,\n+\t\t\t sizeof(struct rte_flow_item_icmp6_nd_opt_sla_eth)),\n+\t\t.next = NEXT(item_icmp6_nd_opt_sla_eth),\n+\t\t.call = parse_vc,\n+\t},\n+\t[ITEM_ICMP6_ND_OPT_SLA_ETH_SLA] = {\n+\t\t.name = \"sla\",\n+\t\t.help = \"source Ethernet LLA\",\n+\t\t.next = NEXT(item_icmp6_nd_opt_sla_eth, NEXT_ENTRY(MAC_ADDR),\n+\t\t\t     item_param),\n+\t\t.args = ARGS(ARGS_ENTRY_HTON\n+\t\t\t     (struct rte_flow_item_icmp6_nd_opt_sla_eth, sla)),\n+\t},\n+\t[ITEM_ICMP6_ND_OPT_TLA_ETH] = {\n+\t\t.name = \"icmp6_nd_opt_tla_eth\",\n+\t\t.help = \"match ICMPv6 neighbor discovery target Ethernet\"\n+\t\t\t\" link-layer address option\",\n+\t\t.priv = PRIV_ITEM\n+\t\t\t(ICMP6_ND_OPT_TLA_ETH,\n+\t\t\t sizeof(struct rte_flow_item_icmp6_nd_opt_tla_eth)),\n+\t\t.next = NEXT(item_icmp6_nd_opt_tla_eth),\n+\t\t.call = parse_vc,\n+\t},\n+\t[ITEM_ICMP6_ND_OPT_TLA_ETH_TLA] = {\n+\t\t.name = \"tla\",\n+\t\t.help = \"target Ethernet LLA\",\n+\t\t.next = NEXT(item_icmp6_nd_opt_tla_eth, NEXT_ENTRY(MAC_ADDR),\n+\t\t\t     item_param),\n+\t\t.args = ARGS(ARGS_ENTRY_HTON\n+\t\t\t     (struct rte_flow_item_icmp6_nd_opt_tla_eth, tla)),\n+\t},\n \n \t/* Validate/create actions. */\n \t[ACTIONS] = {\ndiff --git a/app/test-pmd/config.c b/app/test-pmd/config.c\nindex 104e85ba2..c06b76c31 100644\n--- a/app/test-pmd/config.c\n+++ b/app/test-pmd/config.c\n@@ -1014,6 +1014,16 @@ static const struct {\n \tMK_FLOW_ITEM(GTPC, sizeof(struct rte_flow_item_gtp)),\n \tMK_FLOW_ITEM(GTPU, sizeof(struct rte_flow_item_gtp)),\n \tMK_FLOW_ITEM(GENEVE, sizeof(struct rte_flow_item_geneve)),\n+\tMK_FLOW_ITEM(ARP_ETH_IPV4, sizeof(struct rte_flow_item_arp_eth_ipv4)),\n+\tMK_FLOW_ITEM(IPV6_EXT, sizeof(struct rte_flow_item_ipv6_ext)),\n+\tMK_FLOW_ITEM(ICMP6, sizeof(struct rte_flow_item_icmp6)),\n+\tMK_FLOW_ITEM(ICMP6_ND_NS, sizeof(struct rte_flow_item_icmp6_nd_ns)),\n+\tMK_FLOW_ITEM(ICMP6_ND_NA, sizeof(struct rte_flow_item_icmp6_nd_na)),\n+\tMK_FLOW_ITEM(ICMP6_ND_OPT, sizeof(struct rte_flow_item_icmp6_nd_opt)),\n+\tMK_FLOW_ITEM(ICMP6_ND_OPT_SLA_ETH,\n+\t\t     sizeof(struct rte_flow_item_icmp6_nd_opt_sla_eth)),\n+\tMK_FLOW_ITEM(ICMP6_ND_OPT_TLA_ETH,\n+\t\t     sizeof(struct rte_flow_item_icmp6_nd_opt_tla_eth)),\n };\n \n /** Pattern item specification types. */\ndiff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst\nindex 2fb8e9c3f..644076cb9 100644\n--- a/doc/guides/prog_guide/rte_flow.rst\n+++ b/doc/guides/prog_guide/rte_flow.rst\n@@ -874,7 +874,8 @@ Item: ``IPV6``\n \n Matches an IPv6 header.\n \n-Note: IPv6 options are handled by dedicated pattern items.\n+Note: IPv6 options are handled by dedicated pattern items, see `Item:\n+IPV6_EXT`_.\n \n - ``hdr``: IPv6 header definition (``rte_ip.h``).\n - Default ``mask`` matches source and destination addresses only.\n@@ -1054,6 +1055,117 @@ Matches a GENEVE header.\n - ``rsvd1``: reserved, normally 0x00.\n - Default ``mask`` matches VNI only.\n \n+Item: ``ARP_ETH_IPV4``\n+^^^^^^^^^^^^^^^^^^^^^^\n+\n+Matches an ARP header for Ethernet/IPv4.\n+\n+- ``hdr``: hardware type, normally 1.\n+- ``pro``: protocol type, normally 0x0800.\n+- ``hln``: hardware address length, normally 6.\n+- ``pln``: protocol address length, normally 4.\n+- ``op``: opcode (1 for request, 2 for reply).\n+- ``sha``: sender hardware address.\n+- ``spa``: sender IPv4 address.\n+- ``tha``: target hardware address.\n+- ``tpa``: target IPv4 address.\n+- Default ``mask`` matches SHA, SPA, THA and TPA.\n+\n+Item: ``IPV6_EXT``\n+^^^^^^^^^^^^^^^^^^\n+\n+Matches the presence of any IPv6 extension header.\n+\n+- ``next_hdr``: next header.\n+- Default ``mask`` matches ``next_hdr``.\n+\n+Normally preceded by any of:\n+\n+- `Item: IPV6`_\n+- `Item: IPV6_EXT`_\n+\n+Item: ``ICMP6``\n+^^^^^^^^^^^^^^^\n+\n+Matches any ICMPv6 header.\n+\n+- ``type``: ICMPv6 type.\n+- ``code``: ICMPv6 code.\n+- ``checksum``: ICMPv6 checksum.\n+- Default ``mask`` matches ``type`` and ``code``.\n+\n+Item: ``ICMP6_ND_NS``\n+^^^^^^^^^^^^^^^^^^^^^\n+\n+Matches an ICMPv6 neighbor discovery solicitation.\n+\n+- ``type``: ICMPv6 type, normally 135.\n+- ``code``: ICMPv6 code, normally 0.\n+- ``checksum``: ICMPv6 checksum.\n+- ``reserved``: reserved, normally 0.\n+- ``target_addr``: target address.\n+- Default ``mask`` matches target address only.\n+\n+Item: ``ICMP6_ND_NA``\n+^^^^^^^^^^^^^^^^^^^^^\n+\n+Matches an ICMPv6 neighbor discovery advertisement.\n+\n+- ``type``: ICMPv6 type, normally 136.\n+- ``code``: ICMPv6 code, normally 0.\n+- ``checksum``: ICMPv6 checksum.\n+- ``rso_reserved``: route flag (1b), solicited flag (1b), override flag\n+  (1b), reserved (29b).\n+- ``target_addr``: target address.\n+- Default ``mask`` matches target address only.\n+\n+Item: ``ICMP6_ND_OPT``\n+^^^^^^^^^^^^^^^^^^^^^^\n+\n+Matches the presence of any ICMPv6 neighbor discovery option.\n+\n+- ``type``: ND option type.\n+- ``length``: ND option length.\n+- Default ``mask`` matches type only.\n+\n+Normally preceded by any of:\n+\n+- `Item: ICMP6_ND_NA`_\n+- `Item: ICMP6_ND_NS`_\n+- `Item: ICMP6_ND_OPT`_\n+\n+Item: ``ICMP6_ND_OPT_SLA_ETH``\n+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n+\n+Matches an ICMPv6 neighbor discovery source Ethernet link-layer address\n+option.\n+\n+- ``type``: ND option type, normally 1.\n+- ``length``: ND option length, normally 1.\n+- ``sla``: source Ethernet LLA.\n+- Default ``mask`` matches source link-layer address only.\n+\n+Normally preceded by any of:\n+\n+- `Item: ICMP6_ND_NA`_\n+- `Item: ICMP6_ND_OPT`_\n+\n+Item: ``ICMP6_ND_OPT_TLA_ETH``\n+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n+\n+Matches an ICMPv6 neighbor discovery target Ethernet link-layer address\n+option.\n+\n+- ``type``: ND option type, normally 2.\n+- ``length``: ND option length, normally 1.\n+- ``tla``: target Ethernet LLA.\n+- Default ``mask`` matches target link-layer address only.\n+\n+Normally preceded by any of:\n+\n+- `Item: ICMP6_ND_NS`_\n+- `Item: ICMP6_ND_OPT`_\n+\n Actions\n ~~~~~~~\n \ndiff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst\nindex 829e38428..8e7cae00b 100644\n--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst\n+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst\n@@ -3312,6 +3312,44 @@ This section lists supported pattern items and their attributes, if any.\n   - ``vni {unsigned}``: virtual network identifier.\n   - ``protocol {unsigned}``: protocol type.\n \n+- ``arp_eth_ipv4``: match ARP header for Ethernet/IPv4.\n+\n+  - ``sha {MAC-48}``: sender hardware address.\n+  - ``spa {ipv4 address}``: sender IPv4 address.\n+  - ``tha {MAC-48}``: target hardware address.\n+  - ``tpa {ipv4 address}``: target IPv4 address.\n+\n+- ``ipv6_ext``: match presence of any IPv6 extension header.\n+\n+  - ``next_hdr {unsigned}``: next header.\n+\n+- ``icmp6``: match any ICMPv6 header.\n+\n+  - ``type {unsigned}``: ICMPv6 type.\n+  - ``code {unsigned}``: ICMPv6 code.\n+\n+- ``icmp6_nd_ns``: match ICMPv6 neighbor discovery solicitation.\n+\n+  - ``target_addr {ipv6 address}``: target address.\n+\n+- ``icmp6_nd_na``: match ICMPv6 neighbor discovery advertisement.\n+\n+  - ``target_addr {ipv6 address}``: target address.\n+\n+- ``icmp6_nd_opt``: match presence of any ICMPv6 neighbor discovery option.\n+\n+  - ``type {unsigned}``: ND option type.\n+\n+- ``icmp6_nd_opt_sla_eth``: match ICMPv6 neighbor discovery source Ethernet\n+  link-layer address option.\n+\n+  - ``sla {MAC-48}``: source Ethernet LLA.\n+\n+- ``icmp6_nd_opt_sla_eth``: match ICMPv6 neighbor discovery target Ethernet\n+  link-layer address option.\n+\n+  - ``tla {MAC-48}``: target Ethernet LLA.\n+\n Actions list\n ^^^^^^^^^^^^\n \ndiff --git a/lib/librte_ether/rte_flow.c b/lib/librte_ether/rte_flow.c\nindex cecab59f6..39fa93baa 100644\n--- a/lib/librte_ether/rte_flow.c\n+++ b/lib/librte_ether/rte_flow.c\n@@ -55,6 +55,16 @@ static const struct rte_flow_desc_data rte_flow_desc_item[] = {\n \tMK_FLOW_ITEM(E_TAG, sizeof(struct rte_flow_item_e_tag)),\n \tMK_FLOW_ITEM(NVGRE, sizeof(struct rte_flow_item_nvgre)),\n \tMK_FLOW_ITEM(GENEVE, sizeof(struct rte_flow_item_geneve)),\n+\tMK_FLOW_ITEM(ARP_ETH_IPV4, sizeof(struct rte_flow_item_arp_eth_ipv4)),\n+\tMK_FLOW_ITEM(IPV6_EXT, sizeof(struct rte_flow_item_ipv6_ext)),\n+\tMK_FLOW_ITEM(ICMP6, sizeof(struct rte_flow_item_icmp6)),\n+\tMK_FLOW_ITEM(ICMP6_ND_NS, sizeof(struct rte_flow_item_icmp6_nd_ns)),\n+\tMK_FLOW_ITEM(ICMP6_ND_NA, sizeof(struct rte_flow_item_icmp6_nd_na)),\n+\tMK_FLOW_ITEM(ICMP6_ND_OPT, sizeof(struct rte_flow_item_icmp6_nd_opt)),\n+\tMK_FLOW_ITEM(ICMP6_ND_OPT_SLA_ETH,\n+\t\t     sizeof(struct rte_flow_item_icmp6_nd_opt_sla_eth)),\n+\tMK_FLOW_ITEM(ICMP6_ND_OPT_TLA_ETH,\n+\t\t     sizeof(struct rte_flow_item_icmp6_nd_opt_tla_eth)),\n };\n \n /** Generate flow_action[] entry. */\ndiff --git a/lib/librte_ether/rte_flow.h b/lib/librte_ether/rte_flow.h\nindex 09a21e531..e9b361dda 100644\n--- a/lib/librte_ether/rte_flow.h\n+++ b/lib/librte_ether/rte_flow.h\n@@ -339,6 +339,64 @@ enum rte_flow_item_type {\n \t * See struct rte_flow_item_geneve.\n \t */\n \tRTE_FLOW_ITEM_TYPE_GENEVE,\n+\n+\t/**\n+\t * Matches an ARP header for Ethernet/IPv4.\n+\t *\n+\t * See struct rte_flow_item_arp_eth_ipv4.\n+\t */\n+\tRTE_FLOW_ITEM_TYPE_ARP_ETH_IPV4,\n+\n+\t/**\n+\t * Matches the presence of any IPv6 extension header.\n+\t *\n+\t * See struct rte_flow_item_ipv6_ext.\n+\t */\n+\tRTE_FLOW_ITEM_TYPE_IPV6_EXT,\n+\n+\t/**\n+\t * Matches any ICMPv6 header.\n+\t *\n+\t * See struct rte_flow_item_icmp6.\n+\t */\n+\tRTE_FLOW_ITEM_TYPE_ICMP6,\n+\n+\t/**\n+\t * Matches an ICMPv6 neighbor discovery solicitation.\n+\t *\n+\t * See struct rte_flow_item_icmp6_nd_ns.\n+\t */\n+\tRTE_FLOW_ITEM_TYPE_ICMP6_ND_NS,\n+\n+\t/**\n+\t * Matches an ICMPv6 neighbor discovery advertisement.\n+\t *\n+\t * See struct rte_flow_item_icmp6_nd_na.\n+\t */\n+\tRTE_FLOW_ITEM_TYPE_ICMP6_ND_NA,\n+\n+\t/**\n+\t * Matches the presence of any ICMPv6 neighbor discovery option.\n+\t *\n+\t * See struct rte_flow_item_icmp6_nd_opt.\n+\t */\n+\tRTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT,\n+\n+\t/**\n+\t * Matches an ICMPv6 neighbor discovery source Ethernet link-layer\n+\t * address option.\n+\t *\n+\t * See struct rte_flow_item_icmp6_nd_opt_sla_eth.\n+\t */\n+\tRTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT_SLA_ETH,\n+\n+\t/**\n+\t * Matches an ICMPv6 neighbor discovery target Ethernet link-layer\n+\t * address option.\n+\t *\n+\t * See struct rte_flow_item_icmp6_nd_opt_tla_eth.\n+\t */\n+\tRTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT_TLA_ETH,\n };\n \n /**\n@@ -564,7 +622,8 @@ static const struct rte_flow_item_ipv4 rte_flow_item_ipv4_mask = {\n  *\n  * Matches an IPv6 header.\n  *\n- * Note: IPv6 options are handled by dedicated pattern items.\n+ * Note: IPv6 options are handled by dedicated pattern items, see\n+ * RTE_FLOW_ITEM_TYPE_IPV6_EXT.\n  */\n struct rte_flow_item_ipv6 {\n \tstruct ipv6_hdr hdr; /**< IPv6 header definition. */\n@@ -868,6 +927,199 @@ static const struct rte_flow_item_geneve rte_flow_item_geneve_mask = {\n #endif\n \n /**\n+ * RTE_FLOW_ITEM_TYPE_ARP_ETH_IPV4\n+ *\n+ * Matches an ARP header for Ethernet/IPv4.\n+ */\n+struct rte_flow_item_arp_eth_ipv4 {\n+\trte_be16_t hrd; /**< Hardware type, normally 1. */\n+\trte_be16_t pro; /**< Protocol type, normally 0x0800. */\n+\tuint8_t hln; /**< Hardware address length, normally 6. */\n+\tuint8_t pln; /**< Protocol address length, normally 4. */\n+\trte_be16_t op; /**< Opcode (1 for request, 2 for reply). */\n+\tstruct ether_addr sha; /**< Sender hardware address. */\n+\trte_be32_t spa; /**< Sender IPv4 address. */\n+\tstruct ether_addr tha; /**< Target hardware address. */\n+\trte_be32_t tpa; /**< Target IPv4 address. */\n+};\n+\n+/** Default mask for RTE_FLOW_ITEM_TYPE_ARP_ETH_IPV4. */\n+#ifndef __cplusplus\n+static const struct rte_flow_item_arp_eth_ipv4\n+rte_flow_item_arp_eth_ipv4_mask = {\n+\t.sha.addr_bytes = \"\\xff\\xff\\xff\\xff\\xff\\xff\",\n+\t.spa = RTE_BE32(0xffffffff),\n+\t.tha.addr_bytes = \"\\xff\\xff\\xff\\xff\\xff\\xff\",\n+\t.tpa = RTE_BE32(0xffffffff),\n+};\n+#endif\n+\n+/**\n+ * RTE_FLOW_ITEM_TYPE_IPV6_EXT\n+ *\n+ * Matches the presence of any IPv6 extension header.\n+ *\n+ * Normally preceded by any of:\n+ *\n+ * - RTE_FLOW_ITEM_TYPE_IPV6\n+ * - RTE_FLOW_ITEM_TYPE_IPV6_EXT\n+ */\n+struct rte_flow_item_ipv6_ext {\n+\tuint8_t next_hdr; /**< Next header. */\n+};\n+\n+/** Default mask for RTE_FLOW_ITEM_TYPE_IPV6_EXT. */\n+#ifndef __cplusplus\n+static const\n+struct rte_flow_item_ipv6_ext rte_flow_item_ipv6_ext_mask = {\n+\t.next_hdr = 0xff,\n+};\n+#endif\n+\n+/**\n+ * RTE_FLOW_ITEM_TYPE_ICMP6\n+ *\n+ * Matches any ICMPv6 header.\n+ */\n+struct rte_flow_item_icmp6 {\n+\tuint8_t type; /**< ICMPv6 type. */\n+\tuint8_t code; /**< ICMPv6 code. */\n+\tuint16_t checksum; /**< ICMPv6 checksum. */\n+};\n+\n+/** Default mask for RTE_FLOW_ITEM_TYPE_ICMP6. */\n+#ifndef __cplusplus\n+static const struct rte_flow_item_icmp6 rte_flow_item_icmp6_mask = {\n+\t.type = 0xff,\n+\t.code = 0xff,\n+};\n+#endif\n+\n+/**\n+ * RTE_FLOW_ITEM_TYPE_ICMP6_ND_NS\n+ *\n+ * Matches an ICMPv6 neighbor discovery solicitation.\n+ */\n+struct rte_flow_item_icmp6_nd_ns {\n+\tuint8_t type; /**< ICMPv6 type, normally 135. */\n+\tuint8_t code; /**< ICMPv6 code, normally 0. */\n+\trte_be16_t checksum; /**< ICMPv6 checksum. */\n+\trte_be32_t reserved; /**< Reserved, normally 0. */\n+\tuint8_t target_addr[16]; /**< Target address. */\n+};\n+\n+/** Default mask for RTE_FLOW_ITEM_TYPE_ICMP6_ND_NS. */\n+#ifndef __cplusplus\n+static const\n+struct rte_flow_item_icmp6_nd_ns rte_flow_item_icmp6_nd_ns_mask = {\n+\t.target_addr =\n+\t\t\"\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\"\n+\t\t\"\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\",\n+};\n+#endif\n+\n+/**\n+ * RTE_FLOW_ITEM_TYPE_ICMP6_ND_NA\n+ *\n+ * Matches an ICMPv6 neighbor discovery advertisement.\n+ */\n+struct rte_flow_item_icmp6_nd_na {\n+\tuint8_t type; /**< ICMPv6 type, normally 136. */\n+\tuint8_t code; /**< ICMPv6 code, normally 0. */\n+\trte_be16_t checksum; /**< ICMPv6 checksum. */\n+\t/**\n+\t * Route flag (1b), solicited flag (1b), override flag (1b),\n+\t * reserved (29b).\n+\t */\n+\trte_be32_t rso_reserved;\n+\tuint8_t target_addr[16]; /**< Target address. */\n+};\n+\n+/** Default mask for RTE_FLOW_ITEM_TYPE_ICMP6_ND_NA. */\n+#ifndef __cplusplus\n+static const\n+struct rte_flow_item_icmp6_nd_na rte_flow_item_icmp6_nd_na_mask = {\n+\t.target_addr =\n+\t\t\"\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\"\n+\t\t\"\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\",\n+};\n+#endif\n+\n+/**\n+ * RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT\n+ *\n+ * Matches the presence of any ICMPv6 neighbor discovery option.\n+ *\n+ * Normally preceded by any of:\n+ *\n+ * - RTE_FLOW_ITEM_TYPE_ICMP6_ND_NA\n+ * - RTE_FLOW_ITEM_TYPE_ICMP6_ND_NS\n+ * - RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT\n+ */\n+struct rte_flow_item_icmp6_nd_opt {\n+\tuint8_t type; /**< ND option type. */\n+\tuint8_t length; /**< ND option length. */\n+};\n+\n+/** Default mask for RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT. */\n+#ifndef __cplusplus\n+static const struct rte_flow_item_icmp6_nd_opt\n+rte_flow_item_icmp6_nd_opt_mask = {\n+\t.type = 0xff,\n+};\n+#endif\n+\n+/**\n+ * RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT_SLA_ETH\n+ *\n+ * Matches an ICMPv6 neighbor discovery source Ethernet link-layer address\n+ * option.\n+ *\n+ * Normally preceded by any of:\n+ *\n+ * - RTE_FLOW_ITEM_TYPE_ICMP6_ND_NA\n+ * - RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT\n+ */\n+struct rte_flow_item_icmp6_nd_opt_sla_eth {\n+\tuint8_t type; /**< ND option type, normally 1. */\n+\tuint8_t length; /**< ND option length, normally 1. */\n+\tstruct ether_addr sla; /**< Source Ethernet LLA. */\n+};\n+\n+/** Default mask for RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT_SLA_ETH. */\n+#ifndef __cplusplus\n+static const struct rte_flow_item_icmp6_nd_opt_sla_eth\n+rte_flow_item_icmp6_nd_opt_sla_eth_mask = {\n+\t.sla.addr_bytes = \"\\xff\\xff\\xff\\xff\\xff\\xff\",\n+};\n+#endif\n+\n+/**\n+ * RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT_TLA_ETH\n+ *\n+ * Matches an ICMPv6 neighbor discovery target Ethernet link-layer address\n+ * option.\n+ *\n+ * Normally preceded by any of:\n+ *\n+ * - RTE_FLOW_ITEM_TYPE_ICMP6_ND_NS\n+ * - RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT\n+ */\n+struct rte_flow_item_icmp6_nd_opt_tla_eth {\n+\tuint8_t type; /**< ND option type, normally 2. */\n+\tuint8_t length; /**< ND option length, normally 1. */\n+\tstruct ether_addr tla; /**< Target Ethernet LLA. */\n+};\n+\n+/** Default mask for RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT_TLA_ETH. */\n+#ifndef __cplusplus\n+static const struct rte_flow_item_icmp6_nd_opt_tla_eth\n+rte_flow_item_icmp6_nd_opt_tla_eth_mask = {\n+\t.tla.addr_bytes = \"\\xff\\xff\\xff\\xff\\xff\\xff\",\n+};\n+#endif\n+\n+/**\n  * Matching pattern item definition.\n  *\n  * A pattern is formed by stacking items starting from the lowest protocol\n",
    "prefixes": [
        "dpdk-dev",
        "v5",
        "1/3"
    ]
}