From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 5484F5A6F for ; Tue, 20 Jan 2015 03:29:13 +0100 (CET) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP; 19 Jan 2015 18:29:11 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.09,431,1418112000"; d="scan'208";a="514612270" Received: from kmsmsx153.gar.corp.intel.com ([172.21.73.88]) by orsmga003.jf.intel.com with ESMTP; 19 Jan 2015 18:22:35 -0800 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by KMSMSX153.gar.corp.intel.com (172.21.73.88) with Microsoft SMTP Server (TLS) id 14.3.195.1; Tue, 20 Jan 2015 10:29:06 +0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.231]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.173]) with mapi id 14.03.0195.001; Tue, 20 Jan 2015 10:28:44 +0800 From: "Zhang, Helin" To: Olivier MATZ , Neil Horman Thread-Topic: [dpdk-dev] [RFC 01/17] mbuf: add definitions of unified packet types Thread-Index: AQHQNAXJnLw45FE9nUaowY8D31OX95zHLB4AgAEZDuA= Date: Tue, 20 Jan 2015 02:28:43 +0000 Message-ID: References: <1421637803-17034-1-git-send-email-helin.zhang@intel.com> <1421637803-17034-2-git-send-email-helin.zhang@intel.com> <20150119163306.GD21790@hmsreliant.think-freely.org> <54BD3E66.3040709@6wind.com> In-Reply-To: <54BD3E66.3040709@6wind.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [RFC 01/17] mbuf: add definitions of unified packet types X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Jan 2015 02:29:13 -0000 > -----Original Message----- > From: Olivier MATZ [mailto:olivier.matz@6wind.com] > Sent: Tuesday, January 20, 2015 1:27 AM > To: Neil Horman; Zhang, Helin > Cc: dev@dpdk.org > Subject: Re: [dpdk-dev] [RFC 01/17] mbuf: add definitions of unified pack= et > types >=20 > Hi, >=20 > On 01/19/2015 05:33 PM, Neil Horman wrote: > > On Mon, Jan 19, 2015 at 11:23:07AM +0800, Helin Zhang wrote: > >> As there are only 6 bit flags in ol_flags for indicating packet > >> types, which is not enough to describe all the possible packet types > >> hardware can recognize. For example, i40e hardware can recognize more > >> than 150 packet types. Unified packet type is composed of tunnel > >> type, L3 type, > >> L4 type and inner L3 type fields, and can be stored in 16 bits mbuf > >> field of 'packet_type'. > >> > >> Signed-off-by: Helin Zhang > >> Signed-off-by: Cunming Liang > >> Signed-off-by: Jijiang Liu > >> --- > >> lib/librte_mbuf/rte_mbuf.h | 68 > >> ++++++++++++++++++++++++++++++++++++++++++++++ > >> 1 file changed, 68 insertions(+) > >> > >> diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h > >> index 16059c6..94eb38f 100644 > >> --- a/lib/librte_mbuf/rte_mbuf.h > >> +++ b/lib/librte_mbuf/rte_mbuf.h > >> @@ -165,6 +165,74 @@ extern "C" { > >> /* Use final bit of flags to indicate a control mbuf */ > >> #define CTRL_MBUF_FLAG (1ULL << 63) /**< Mbuf contains > control data */ > >> > >> +/* > >> + * Sixteen bits are divided into several fields to mark packet > >> +types. Note that > >> + * each field is indexical. > >> + * - Bit 3:0 is for tunnel types. > >> + * - Bit 7:4 is for L3 or outer L3 (for tunneling case) types. > >> + * - Bit 10:8 is for L4 types. It can also be used for inner L4 types= for > >> + * tunneling packets. > > This seems a bit sparse, in that the protocol field is 8 bits wide in a= packet. > > There are several common protocls that you don't have listed, and > > you've already exhausted your namespace with the list you have. > > Neil I have reviewed all packet types supported in igb, ixgbe and i40e, and read= the code to get the packet types used in vmxnet3, bond, enic ,etc. Current design can support all packet types used in above PMDs. Yes, we don't have too many space reserved for future, but we can try to ma= ke more bits for packet_type field later, as we can save 6 bits in ol_flags wi= th this patch set. >=20 > Another question I've asked several times[1][2] : what does having > RTE_PTYPE_TUNNEL_IP mean? What fields are checked by the hardware (or > the driver) and what fields should be checked by the application? > Are you sure that all the drivers (ixgbe, i40e, vmxnet3, enic) check the = same > fields? (ethertype, ip version, ip len correct, ip checksum correct, flag= s, ...) RTE_PTYPE_TUNNEL_IP means hardware recognizes the received packet as an IP-in-IP packet. All the fields are filled by PMD which is recognized by hardware. The appli= cation can just use it which can save some cpu cycles to recognize the packet type= by software. Drivers is responsible for filling with correct values according to the pac= ket types recognized by its hardware. Different PMDs may fill with different values b= ased on different capabilities. >=20 > To be clearer: Let's say I have a network stack that parses and validates= an IP > packet. What tests can I remove if I get RTE_PTYPE_TUNNEL_IP? That means it is a IP-in-IP tunnel packet, but not others. Also you can che= ck other fields in packet_type to get more information of the packet (e.g. L4 type). >=20 > This question can be asked for all defined packet type. To be usable by a= n > application, I think a formal definition would be needed. This is also im= portant > to know this for people wanting to develop a new PMD based on a new > hardware. If the hardware does not behave exactly like ixgbe, i40e (I hop= e all > drivers you implemented behave exactly the same), some work has to be don= e > in the driver or the feature cannot be used. The unified packet type defined here is aiming to support all hardwares. I4= 0e has different values from ixgbe. We can add more in the future if needed for fu= ture NICs. >=20 > One na=EFve question: are we sure that at the end, using these complex pa= cket > types is faster than parsing the packet? I guess yes for almost all cases, as hardware reported the packet types, an= d PMD just puts the correct values into packet_type field. Later, we will try to measure the differences. Regards, Helin >=20 > Regards, > Olivier >=20 >=20 > [1] http://dpdk.org/ml/archives/dev/2014-November/008534.html > [2] http://dpdk.org/ml/archives/dev/2014-November/008367.html