From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 686D2A0524; Thu, 2 Jul 2020 10:06:53 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4FBB11D6E6; Thu, 2 Jul 2020 10:06:53 +0200 (CEST) Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60050.outbound.protection.outlook.com [40.107.6.50]) by dpdk.org (Postfix) with ESMTP id 69D751D6B3 for ; Thu, 2 Jul 2020 10:06:51 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nINgJ4vrUDibg73xq4HCrtLNQJOOQRkSOVrLv3RPRyzor42a+EMzbQ/xlE9jfDYRm7MohpTwUts/ICCALLRfwXcNrG3Jtog+G0fi/Zvcelp+071Mt3doEWt8iksRbxriGKCKnhpaTjwJ6QeGLNuwne7bZi3/WVbqBjn98pceSh++GzMmp83rxmImS6OgtvX6tvTjBS/LblQaMe2MavDlrB9DH5BbWGfSQT7SnFxHm8YzngsH2NlLpI9L7YukWrh0Zorbfs8TCLTisXFvh5gKVVmJsDtTf4Y1FLH+/gCXa3s/NQOsS5ZXI4RIHd46cj4pwqnQqxwSU5FVslKJKBLLEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KUmwLg3pXz1uoqZ/NG7Hq8/sWGPQItf9+Las8E1EiGE=; b=l2lAyvOdVbjtT2EPK8SyElW12udCDDMD+Jz4YBM4uf0tAEY4xawMdum1KEmcoOs8j9Uhn9rPUaPTzxjd8JNHiiOokkEMppYfwOcH3jl6F7hNKSTuQtV6/AHuDLASbucwnPLLRzek+rNqEFCRpP1KTHhin2LN3CNYuwfpf8IZEpkUvPFk3OPRIz8Z72SdhTgYS0jhhGprYDTVLXcLaug8gGjT0dRDzz0kjMt2SFivP0Bp6c0kbeu8mcDAQFMPK2NaMaReYfLMdKCPEkR6f1EZGuMiUu8wDoZYi+LJcnogXHH1OLH4lWOKGMKqCKkEzKx91eh6Pi6NiUMLHJe/WRZ+JQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KUmwLg3pXz1uoqZ/NG7Hq8/sWGPQItf9+Las8E1EiGE=; b=gaiFjE3Kht2i6MVuAVYocpuWu8sYhpU/ZPOF+VKAzUw7GYVSReQzc68Qsldt4wNl2vczKSj8SKg0xqa0oO25jhrMIfXVv1j1JBaSQi0s6iZEkXqj0wSJzczgJE1rr0JhhVks2qJ4TAE19oGjJkC6+ZOBKgq/BRilVzUG/iNfkcw= Received: from AM6PR05MB5176.eurprd05.prod.outlook.com (2603:10a6:20b:63::30) by AM6PR05MB4246.eurprd05.prod.outlook.com (2603:10a6:209:4b::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3131.23; Thu, 2 Jul 2020 08:06:50 +0000 Received: from AM6PR05MB5176.eurprd05.prod.outlook.com ([fe80::9024:accb:4d6b:805f]) by AM6PR05MB5176.eurprd05.prod.outlook.com ([fe80::9024:accb:4d6b:805f%3]) with mapi id 15.20.3131.030; Thu, 2 Jul 2020 08:06:50 +0000 From: Ori Kam To: Bing Zhao , "john.mcnamara@intel.com" , "marko.kovacevic@intel.com" , Thomas Monjalon , "ferruh.yigit@intel.com" , "arybchenko@solarflare.com" , "olivier.matz@6wind.com" CC: "dev@dpdk.org" Thread-Topic: [PATCH v2] rte_flow: add eCPRI key fields to flow API Thread-Index: AQHWUDx8dApo1sIuS0OiaVY8H6+4J6jz7mCA Date: Thu, 2 Jul 2020 08:06:49 +0000 Message-ID: References: <1593361201-424067-1-git-send-email-bingz@mellanox.com> <1593672361-285288-1-git-send-email-bingz@mellanox.com> In-Reply-To: <1593672361-285288-1-git-send-email-bingz@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: mellanox.com; dkim=none (message not signed) header.d=none;mellanox.com; dmarc=none action=none header.from=mellanox.com; x-originating-ip: [147.236.152.129] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: aaf874b4-5f5e-4893-c5d4-08d81e5edfa3 x-ms-traffictypediagnostic: AM6PR05MB4246: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:862; x-forefront-prvs: 0452022BE1 x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: uKKi/I/nba7VrCn68EQyjQqfxe9zOMu77FoRqBOQVG3LE4PPeS7SZTXppuB5woLn2ChaKmHeeK1q35UEjzfk9A/9i08bngpUQUBWbe3BoOI1YlBjlfK3bVVRb59FNtCA1AWtclSoZ7KMjmesDJdhHvsGYCnZpBN0n3Qa9+Pqi8uD7GwCs81fm4o0RK2HaM+eLcYQ/VQIb1sGObgnk0R2kNUBigq48434PKd49uKbelpTUTMvG1lRLWo2CzPz3v4i/0BcDGUjMZThm6m/syK88ZBwG6qISXybE8HaCNfjUr8RREHPhhN3tlRB01MmcQRTBDw2McDraXuFMbUQUADCViwu3JkFqqH66dPsN/ti9AQNylcqPFmV8Fs5Atr5zPfYaglL5VttKtFeD5uk6ZKdxQ== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM6PR05MB5176.eurprd05.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(376002)(346002)(136003)(366004)(39860400002)(71200400001)(66946007)(66556008)(66476007)(45080400002)(52536014)(64756008)(66446008)(30864003)(186003)(33656002)(4326008)(26005)(2906002)(83080400001)(5660300002)(86362001)(966005)(8676002)(55016002)(6506007)(110136005)(53546011)(478600001)(7696005)(76116006)(83380400001)(316002)(8936002)(9686003); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: CvCSgFbG9NuWgCTF3ZfyC34dTgtu9mtIaBt/IlER6DqW13aU7rXOlZEm2QAm/++MibCWlhfa8Op3NJsqXZW4tVVIsfigXrLwVGCG/HHLJA4LfHJtHBcRevML3xHNLhyNhB+VUR9RJai8iREooH79P0ubvjtBcyWM6wLbp6RF6EgjpHl3A9pzbLOzDN5H23koRGPVmOZXmpsnODnW6mRKl5h1MJlsZrxUY7HJE2BOmImklBKpCjaOF2lo96IV6d04QbsHN1jO/tDbxYElwBk4q6Phwh8bgEP8Q9phHj9vxvyjHJ0DGop9chWRXtZZRM2rRYrDxdQEADR2BXFSoP6pvAK3YJzJOsFlCSCAAMzsxzGqD+l4xJMaTSJvhilELzQRSz7dJF9lSc6CGU7HkFuLTVUxPBhuUxoQr0ZztJfZDuvavadqPCaRC0JXXGo6RwUjfe5fgOaq4A5mOwx9NCbJTTQSjtPsdy+/Yn/Kv+tVqmEfslX/MFGnsgAGUwQ9Xqwc Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM6PR05MB5176.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: aaf874b4-5f5e-4893-c5d4-08d81e5edfa3 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jul 2020 08:06:49.9447 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 8b6XpstGtb7yfPhpj4oWNBLUDkKhn7JbZ7GbKnoUAac7rUKu228y1vuK3SMkX07c2q2m4z61Hr+oLyjmLdnXSg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR05MB4246 Subject: Re: [dpdk-dev] [PATCH v2] rte_flow: add eCPRI key fields to 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" Hi Bing, Can you add also testpmd patch? Thanks, Ori > -----Original Message----- > From: Bing Zhao > Sent: Thursday, July 2, 2020 9:46 AM > To: Ori Kam ; john.mcnamara@intel.com; > marko.kovacevic@intel.com; Thomas Monjalon ; > ferruh.yigit@intel.com; arybchenko@solarflare.com; olivier.matz@6wind.com > Cc: dev@dpdk.org > Subject: [PATCH v2] rte_flow: add eCPRI key fields to flow API >=20 > Add a new item "rte_flow_item_ecpri" in order to match eCRPI header. >=20 > eCPRI is a packet based protocol used in the fronthaul interface of > 5G networks. Header format definition could be found in the > specification via the link below: > https://eur03.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fwww.g= iga > light.com%2Fdownloads%2Fstandards%2Fecpri- > specification.pdf&data=3D02%7C01%7Corika%40mellanox.com%7C368410e > 6bc774bf316ff08d81e539e2e%7Ca652971c7d2e4d9ba6a4d149256f461b%7C0% > 7C1%7C637292691769606941&sdata=3DcGZ0vkX%2FD%2FdsPNELatW6LOOs > r0Cm%2Faf%2F8zV35dkof9M%3D&reserved=3D0 >=20 > eCPRI message can be over Ethernet layer (.1Q supported also) or over > UDP layer. Message header formats are the same in these two variants. >=20 > Signed-off-by: Bing Zhao > --- > v2: Add dw0 for the eCPRI common header to switch the endianess, and > use fixed u32 value with big-endian for rte_flow_item_ecpri_mask. > It is due to the fact that global variable only support constant > expression in C when building. > --- > doc/guides/prog_guide/rte_flow.rst | 8 ++ > lib/librte_ethdev/rte_flow.c | 1 + > lib/librte_ethdev/rte_flow.h | 29 +++++++ > lib/librte_net/Makefile | 1 + > lib/librte_net/meson.build | 3 +- > lib/librte_net/rte_ecpri.h | 163 > +++++++++++++++++++++++++++++++++++++ > lib/librte_net/rte_ether.h | 1 + > 7 files changed, 205 insertions(+), 1 deletion(-) > create mode 100644 lib/librte_net/rte_ecpri.h >=20 > diff --git a/doc/guides/prog_guide/rte_flow.rst > b/doc/guides/prog_guide/rte_flow.rst > index d5dd18c..669d519 100644 > --- a/doc/guides/prog_guide/rte_flow.rst > +++ b/doc/guides/prog_guide/rte_flow.rst > @@ -1362,6 +1362,14 @@ Matches a PFCP Header. > - ``seid``: session endpoint identifier. > - Default ``mask`` matches s_field and seid. >=20 > +Item: ``ECPRI`` > +^^^^^^^^^^^^^ > + > +Matches a eCPRI header. > + > +- ``hdr``: eCPRI header definition (``rte_ecpri.h``). > +- Default ``mask`` matches message type of common header only. > + > Actions > ~~~~~~~ >=20 > diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c > index 1685be5..f8fdd68 100644 > --- a/lib/librte_ethdev/rte_flow.c > +++ b/lib/librte_ethdev/rte_flow.c > @@ -95,6 +95,7 @@ struct rte_flow_desc_data { > MK_FLOW_ITEM(HIGIG2, sizeof(struct rte_flow_item_higig2_hdr)), > MK_FLOW_ITEM(L2TPV3OIP, sizeof(struct rte_flow_item_l2tpv3oip)), > MK_FLOW_ITEM(PFCP, sizeof(struct rte_flow_item_pfcp)), > + MK_FLOW_ITEM(ECPRI, sizeof(struct rte_flow_item_ecpri)), > }; >=20 > /** Generate flow_action[] entry. */ > diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h > index b0e4199..216ece7 100644 > --- a/lib/librte_ethdev/rte_flow.h > +++ b/lib/librte_ethdev/rte_flow.h > @@ -28,6 +28,7 @@ > #include > #include > #include > +#include > #include > #include >=20 > @@ -527,6 +528,13 @@ enum rte_flow_item_type { > */ > RTE_FLOW_ITEM_TYPE_PFCP, >=20 > + /** > + * Matches eCPRI Header. > + * See struct rte_flow_item_ecpri. > + * > + */ > + RTE_FLOW_ITEM_TYPE_ECPRI, > + > }; >=20 > /** > @@ -1547,6 +1555,27 @@ struct rte_flow_item_pfcp { > #endif >=20 > /** > + * @warning > + * @b EXPERIMENTAL: this structure may change without prior notice > + * > + * RTE_FLOW_ITEM_TYPE_ECPRI > + * > + * Match eCPRI Header > + */ > +struct rte_flow_item_ecpri { > + struct rte_ecpri_msg_hdr hdr; > +}; > + > +/** Default mask for RTE_FLOW_ITEM_TYPE_ECPRI. */ > +#ifndef __cplusplus > +static const struct rte_flow_item_ecpri rte_flow_item_ecpri_mask =3D { > + .hdr =3D { > + .dw0 =3D RTE_BE32(0x00ff0000), I think this should be all zero as default mask. > + }, > +}; > +#endif > + > +/** > * Matching pattern item definition. > * > * A pattern is formed by stacking items starting from the lowest protoc= ol > diff --git a/lib/librte_net/Makefile b/lib/librte_net/Makefile > index aa1d6fe..9830e77 100644 > --- a/lib/librte_net/Makefile > +++ b/lib/librte_net/Makefile > @@ -20,5 +20,6 @@ SYMLINK-$(CONFIG_RTE_LIBRTE_NET)-include +=3D > rte_sctp.h rte_icmp.h rte_arp.h > SYMLINK-$(CONFIG_RTE_LIBRTE_NET)-include +=3D rte_ether.h rte_gre.h > rte_net.h > SYMLINK-$(CONFIG_RTE_LIBRTE_NET)-include +=3D rte_net_crc.h rte_mpls.h > rte_higig.h > SYMLINK-$(CONFIG_RTE_LIBRTE_NET)-include +=3D rte_gtp.h rte_vxlan.h > +SYMLINK-$(CONFIG_RTE_LIBRTE_NET)-include +=3D rte_ecpri.h >=20 > include $(RTE_SDK)/mk/rte.lib.mk > diff --git a/lib/librte_net/meson.build b/lib/librte_net/meson.build > index f799349..24ed825 100644 > --- a/lib/librte_net/meson.build > +++ b/lib/librte_net/meson.build > @@ -15,7 +15,8 @@ headers =3D files('rte_ip.h', > 'rte_net.h', > 'rte_net_crc.h', > 'rte_mpls.h', > - 'rte_higig.h') > + 'rte_higig.h', > + 'rte_ecpri.h') >=20 > sources =3D files('rte_arp.c', 'rte_ether.c', 'rte_net.c', 'rte_net_crc.= c') > deps +=3D ['mbuf'] > diff --git a/lib/librte_net/rte_ecpri.h b/lib/librte_net/rte_ecpri.h > new file mode 100644 > index 0000000..31974b2 > --- /dev/null > +++ b/lib/librte_net/rte_ecpri.h > @@ -0,0 +1,163 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright 2020 Mellanox Technologies, Ltd > + */ > + > +#ifndef _RTE_ECPRI_H_ > +#define _RTE_ECPRI_H_ > + > +#include > +#include > + > +#ifdef __cplusplus > +extern "C" { > +#endif > + > +/** > + * eCPRI Protocol Revision 1.0, 1.1, 1.2, 2.0: 0001b > + * Other values are reserved for future > + */ > +#define RTE_ECPRI_REV_UPTO_20 1 > + > +/** > + * eCPRI message types in specifications > + * IWF* types will only be supported from rev.2 > + */ > +#define RTE_ECPRI_MSG_TYPE_IQ_DATA 0 > +#define RTE_ECPRI_MSG_TYPE_BIT_SEQ 1 > +#define RTE_ECPRI_MSG_TYPE_RTC_CTRL 2 > +#define RTE_ECPRI_MSG_TYPE_GEN_DATA 3 > +#define RTE_ECPRI_MSG_TYPE_RM_ACC 4 > +#define RTE_ECPRI_MSG_TYPE_DLY_MSR 5 > +#define RTE_ECPRI_MSG_TYPE_RMT_RST 6 > +#define RTE_ECPRI_MSG_TYPE_EVT_IND 7 > +#define RTE_ECPRI_MSG_TYPE_IWF_UP 8 > +#define RTE_ECPRI_MSG_TYPE_IWF_OPT 9 > +#define RTE_ECPRI_MSG_TYPE_IWF_MAP 10 > +#define RTE_ECPRI_MSG_TYPE_IWF_DCTRL 11 > + > +/** > + * eCPRI Common Header > + */ > +RTE_STD_C11 > +struct rte_ecpri_common_hdr { > +#if RTE_BYTE_ORDER =3D=3D RTE_LITTLE_ENDIAN > + uint32_t size:16; /**< Payload Size */ > + uint32_t type:8; /**< Message Type */ > + uint32_t c:1; /**< Concatenation Indicator */ > + uint32_t res:3; /**< Reserved */ > + uint32_t revision:4; /**< Protocol Revision */ > +#elif RTE_BYTE_ORDER =3D=3D RTE_BIG_ENDIAN > + uint32_t revision:4; /**< Protocol Revision */ > + uint32_t res:3; /**< Reserved */ > + uint32_t c:1; /**< Concatenation Indicator */ > + uint32_t type:8; /**< Message Type */ > + uint32_t size:16; /**< Payload Size */ > +#endif > +} __rte_packed; > + > +/** > + * eCPRI Message Header of Type #0: IQ Data > + */ > +struct rte_ecpri_msg_iq_data { > + rte_be16_t pc_id; /**< Physical channel ID */ > + rte_be16_t seq_id; /**< Sequence ID */ > +}; > + > +/** > + * eCPRI Message Header of Type #1: Bit Sequence > + */ > +struct rte_ecpri_msg_bit_seq { > + rte_be16_t pc_id; /**< Physical channel ID */ > + rte_be16_t seq_id; /**< Sequence ID */ > +}; > + > +/** > + * eCPRI Message Header of Type #2: Real-Time Control Data > + */ > +struct rte_ecpri_msg_rtc_ctrl { > + rte_be16_t rtc_id; /**< Real-Time Control Data ID */ > + rte_be16_t seq_id; /**< Sequence ID */ > +}; > + > +/** > + * eCPRI Message Header of Type #3: Generic Data Transfer > + */ > +struct rte_ecpri_msg_gen_data { > + rte_be32_t pc_id; /**< Physical channel ID */ > + rte_be32_t seq_id; /**< Sequence ID */ > +}; > + > +/** > + * eCPRI Message Header of Type #4: Remote Memory Access > + */ > +RTE_STD_C11 > +struct rte_ecpri_msg_rm_access { > +#if RTE_BYTE_ORDER =3D=3D RTE_LITTLE_ENDIAN > + uint32_t ele_id:16; /**< Element ID */ > + uint32_t rr:4; /**< Req/Resp */ > + uint32_t rw:4; /**< Read/Write */ > + uint32_t rma_id:8; /**< Remote Memory Access ID */ > +#elif RTE_BYTE_ORDER =3D=3D RTE_BIG_ENDIAN > + uint32_t rma_id:8; /**< Remote Memory Access ID */ > + uint32_t rw:4; /**< Read/Write */ > + uint32_t rr:4; /**< Req/Resp */ > + uint32_t ele_id:16; /**< Element ID */ > +#endif > + rte_be16_t addr_m; /**< 48-bits address (16 MSB) */ > + rte_be32_t addr_l; /**< 48-bits address (32 LSB) */ > + rte_be16_t length; /**< number of bytes */ > +} __rte_packed; > + > +/** > + * eCPRI Message Header of Type #5: One-Way Delay Measurement > + */ > +struct rte_ecpri_msg_delay_measure { > + uint8_t msr_id; /**< Measurement ID */ > + uint8_t act_type; /**< Action Type */ > +}; > + > +/** > + * eCPRI Message Header of Type #6: Remote Reset > + */ > +struct rte_ecpri_msg_remote_reset { > + uint8_t msr_id; /**< Measurement ID */ > + uint8_t act_type; /**< Action Type */ > +}; > + > +/** > + * eCPRI Message Header of Type #7: Event Indication > + */ > +struct rte_ecpri_msg_event_ind { > + uint8_t evt_id; /**< Event ID */ > + uint8_t evt_type; /**< Event Type */ > + uint8_t seq; /**< Sequence Number */ > + uint8_t number; /**< Number of Faults/Notif > */ > +}; > + > +/** > + * eCPRI Message Header Format: Common Header + Message Types > + */ > +RTE_STD_C11 > +struct rte_ecpri_msg_hdr { > + union { > + struct rte_ecpri_common_hdr common; > + uint32_t dw0; > + }; > + union { > + struct rte_ecpri_msg_iq_data type0; > + struct rte_ecpri_msg_bit_seq type1; > + struct rte_ecpri_msg_rtc_ctrl type2; > + struct rte_ecpri_msg_bit_seq type3; > + struct rte_ecpri_msg_rm_access type4; > + struct rte_ecpri_msg_delay_measure type5; > + struct rte_ecpri_msg_remote_reset type6; > + struct rte_ecpri_msg_event_ind type7; > + uint32_t dummy[3]; > + }; > +}; > + > +#ifdef __cplusplus > +} > +#endif > + > +#endif /* _RTE_ECPRI_H_ */ > diff --git a/lib/librte_net/rte_ether.h b/lib/librte_net/rte_ether.h > index 0ae4e75..184a3f9 100644 > --- a/lib/librte_net/rte_ether.h > +++ b/lib/librte_net/rte_ether.h > @@ -304,6 +304,7 @@ struct rte_vlan_hdr { > #define RTE_ETHER_TYPE_LLDP 0x88CC /**< LLDP Protocol. */ > #define RTE_ETHER_TYPE_MPLS 0x8847 /**< MPLS ethertype. */ > #define RTE_ETHER_TYPE_MPLSM 0x8848 /**< MPLS multicast ethertype. */ > +#define RTE_ETHER_TYPE_ECPRI 0xAEFE /**< eCPRI ethertype (.1Q > supported). */ >=20 > /** > * Extract VLAN tag information into mbuf > -- > 1.8.3.1