From patchwork Tue Apr 25 08:30:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrien Mazarguil X-Patchwork-Id: 23865 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 50691CFBC; Tue, 25 Apr 2017 10:31:05 +0200 (CEST) Received: from mail-wr0-f174.google.com (mail-wr0-f174.google.com [209.85.128.174]) by dpdk.org (Postfix) with ESMTP id 6E7C1298F for ; Tue, 25 Apr 2017 10:30:35 +0200 (CEST) Received: by mail-wr0-f174.google.com with SMTP id w50so81154828wrc.0 for ; Tue, 25 Apr 2017 01:30:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=T5Y6ramvQRtKTYIHL6IHWrAE2kTAAFOINuJAKkRigvk=; b=gOCUJeRmWZJC/mZidhbmbksBPO2PBRlQRIHfWM6Bqm98DZsFmikwo5B8bQJeKMXuu1 jqSzKjhbAArus1jOhQMCUYj7HNmY7Gfgu/hhvNlEqHbZfRjCAW4dCnF3dt8CxBQ1OMlg sRHsycugnMhkLLu00tr2Fv6+62NN+gzhXGnZ0lSFHmte7JV4YRPKKEvQQfSrEqqDEjji /TjTnj+7d7n4eobKI5Gdhu4ch49MZTbYH8WybVZaFsl6D5P7g2avYOuWgMHDQ5QwZkE5 e2ERxOHd5tCc02pHeiD5UDVhu4q9tfrnjf1v/a9Wbe8vp6X34SHr4ksoHonre+QsqonZ Hgcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=T5Y6ramvQRtKTYIHL6IHWrAE2kTAAFOINuJAKkRigvk=; b=NzM8BHmzMVcLHJfufbJn2Yk5stkuMwjEfw5/F1QQm3DpSM17tXfwS+Go8PZux2Z/j3 av3q/gcLs3kLo6lcvqrtdprDlY5sfaASZ/L5JaQ1r/eu5wBwClO9Sr3aqQen+NO1gMFh RqdnVRhdPanskHG1fXijUZ7hcgF+B+1JLQ1jUACBmzaM550nBsZGyV4RbyedAjjOEDKX 3pkS6xYEUxpZcqj6n74ckDgFcEloIADQmeELMl61BXGsQDQ2P90kLVLJAFCbgeRUYolk bxrU0riqdVUMiOSSXnnpudA2aSlp+QbO4vJqEbp2SrO43P+kX+fH/OkUDUnTMhZn71VA MLTQ== X-Gm-Message-State: AN3rC/6IyGXKQPpZOKxJ0S/ZVhxhDvjwdjdBcJ6pPvOAB+0pUBqs2k4l 6/K39ivTn3N664VO X-Received: by 10.223.165.94 with SMTP id j30mr1566903wrb.111.1493109035229; Tue, 25 Apr 2017 01:30:35 -0700 (PDT) Received: from 6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id n99sm20170631wrb.62.2017.04.25.01.30.33 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Tue, 25 Apr 2017 01:30:34 -0700 (PDT) From: Adrien Mazarguil To: dev@dpdk.org Cc: stable@dpdk.org, Wei Zhao , Wenzhuo Lu Date: Tue, 25 Apr 2017 10:30:07 +0200 Message-Id: <7945d99c0dafa334ed0e29be0f709160846748d3.1493108423.git.adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v2 13/13] ethdev: fix incomplete items in flow API X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" E-Tag and NVGRE pattern items have been added hastily without updating documentation nor testpmd. This commit also adds default masks for these items based on the ixgbe implementation. Fixes: 99e7003831c3 ("net/ixgbe: parse L2 tunnel filter") Cc: stable@dpdk.org Cc: Wei Zhao Cc: Wenzhuo Lu Signed-off-by: Adrien Mazarguil --- app/test-pmd/cmdline_flow.c | 46 ++++++++++++++++++++++++ doc/guides/prog_guide/rte_flow.rst | 26 ++++++++++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 8 +++++ lib/librte_ether/rte_flow.h | 21 +++++++++++ 4 files changed, 101 insertions(+) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 4e99f0f..0a40005 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -159,6 +159,10 @@ enum index { ITEM_SCTP_CKSUM, ITEM_VXLAN, ITEM_VXLAN_VNI, + ITEM_E_TAG, + ITEM_E_TAG_GRP_ECID_B, + ITEM_NVGRE, + ITEM_NVGRE_TNI, ITEM_MPLS, ITEM_MPLS_LABEL, ITEM_GRE, @@ -436,6 +440,8 @@ static const enum index next_item[] = { ITEM_TCP, ITEM_SCTP, ITEM_VXLAN, + ITEM_E_TAG, + ITEM_NVGRE, ITEM_MPLS, ITEM_GRE, ZERO, @@ -544,6 +550,18 @@ static const enum index item_vxlan[] = { ZERO, }; +static const enum index item_e_tag[] = { + ITEM_E_TAG_GRP_ECID_B, + ITEM_NEXT, + ZERO, +}; + +static const enum index item_nvgre[] = { + ITEM_NVGRE_TNI, + ITEM_NEXT, + ZERO, +}; + static const enum index item_mpls[] = { ITEM_MPLS_LABEL, ITEM_NEXT, @@ -1297,6 +1315,34 @@ static const struct token token_list[] = { .next = NEXT(item_vxlan, NEXT_ENTRY(UNSIGNED), item_param), .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_vxlan, vni)), }, + [ITEM_E_TAG] = { + .name = "e_tag", + .help = "match E-Tag header", + .priv = PRIV_ITEM(E_TAG, sizeof(struct rte_flow_item_e_tag)), + .next = NEXT(item_e_tag), + .call = parse_vc, + }, + [ITEM_E_TAG_GRP_ECID_B] = { + .name = "grp_ecid_b", + .help = "GRP and E-CID base", + .next = NEXT(item_e_tag, NEXT_ENTRY(UNSIGNED), item_param), + .args = ARGS(ARGS_ENTRY_MASK_HTON(struct rte_flow_item_e_tag, + rsvd_grp_ecid_b, + "\x3f\xff")), + }, + [ITEM_NVGRE] = { + .name = "nvgre", + .help = "match NVGRE header", + .priv = PRIV_ITEM(NVGRE, sizeof(struct rte_flow_item_nvgre)), + .next = NEXT(item_nvgre), + .call = parse_vc, + }, + [ITEM_NVGRE_TNI] = { + .name = "tni", + .help = "virtual subnet ID", + .next = NEXT(item_nvgre, NEXT_ENTRY(UNSIGNED), item_param), + .args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_nvgre, tni)), + }, [ITEM_MPLS] = { .name = "mpls", .help = "match MPLS header", diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst index 9bca9ec..b587ba9 100644 --- a/doc/guides/prog_guide/rte_flow.rst +++ b/doc/guides/prog_guide/rte_flow.rst @@ -863,6 +863,32 @@ Matches a VXLAN header (RFC 7348). - ``rsvd1``: reserved, normally 0x00. - Default ``mask`` matches VNI only. +Item: ``E_TAG`` +^^^^^^^^^^^^^^^ + +Matches an IEEE 802.1BR E-Tag header. + +- ``tpid``: tag protocol identifier (0x893F) +- ``epcp_edei_in_ecid_b``: E-Tag control information (E-TCI), E-PCP (3b), + E-DEI (1b), ingress E-CID base (12b). +- ``rsvd_grp_ecid_b``: reserved (2b), GRP (2b), E-CID base (12b). +- ``in_ecid_e``: ingress E-CID ext. +- ``ecid_e``: E-CID ext. +- Default ``mask`` simultaneously matches GRP and E-CID base. + +Item: ``NVGRE`` +^^^^^^^^^^^^^^^ + +Matches a NVGRE header (RFC 7637). + +- ``c_k_s_rsvd0_ver``: checksum (1b), undefined (1b), key bit (1b), + sequence number (1b), reserved 0 (9b), version (3b). This field must have + value 0x2000 according to RFC 7637. +- ``protocol``: protocol type (0x6558). +- ``tni``: virtual subnet ID. +- ``flow_id``: flow ID. +- Default ``mask`` matches TNI only. + Item: ``MPLS`` ^^^^^^^^^^^^^^ diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index ddd1d92..1aea101 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -2537,6 +2537,14 @@ This section lists supported pattern items and their attributes, if any. - ``vni {unsigned}``: VXLAN identifier. +- ``e_tag``: match IEEE 802.1BR E-Tag header. + + - ``grp_ecid_b {unsigned}``: GRP and E-CID base. + +- ``nvgre``: match NVGRE header. + + - ``tni {unsigned}``: virtual subnet ID. + - ``mpls``: match MPLS header. - ``label {unsigned}``: MPLS label. diff --git a/lib/librte_ether/rte_flow.h b/lib/librte_ether/rte_flow.h index abd4c6a..c47edbc 100644 --- a/lib/librte_ether/rte_flow.h +++ b/lib/librte_ether/rte_flow.h @@ -49,6 +49,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -620,6 +621,19 @@ struct rte_flow_item_e_tag { uint8_t ecid_e; /**< E-CID ext. */ }; +/** Default mask for RTE_FLOW_ITEM_TYPE_E_TAG. */ +#ifndef __cplusplus +static const struct rte_flow_item_e_tag rte_flow_item_e_tag_mask = { +#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN + .rsvd_grp_ecid_b = 0x3fff, +#elif RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN + .rsvd_grp_ecid_b = 0xff3f, +#else +#error Unsupported endianness. +#endif +}; +#endif + /** * RTE_FLOW_ITEM_TYPE_NVGRE. * @@ -638,6 +652,13 @@ struct rte_flow_item_nvgre { uint8_t flow_id; /**< Flow ID. */ }; +/** Default mask for RTE_FLOW_ITEM_TYPE_NVGRE. */ +#ifndef __cplusplus +static const struct rte_flow_item_nvgre rte_flow_item_nvgre_mask = { + .tni = "\xff\xff\xff", +}; +#endif + /** * RTE_FLOW_ITEM_TYPE_MPLS. *