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 D294F559C for ; Sun, 7 Dec 2014 12:46:58 +0100 (CET) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga101.fm.intel.com with ESMTP; 07 Dec 2014 03:46:57 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.07,533,1413270000"; d="scan'208";a="643749662" Received: from irsmsx106.ger.corp.intel.com ([163.33.3.31]) by fmsmga002.fm.intel.com with ESMTP; 07 Dec 2014 03:46:57 -0800 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.144]) by IRSMSX106.ger.corp.intel.com ([169.254.8.18]) with mapi id 14.03.0195.001; Sun, 7 Dec 2014 11:46:56 +0000 From: "Ananyev, Konstantin" To: Thomas Monjalon , "Liu, Jijiang" Thread-Topic: [dpdk-dev] [PATCH v5 0/3] i40e VXLAN TX checksum rework Thread-Index: AQHQDkGo4UzYjf9bTkmwsI+SWY2BlJx8b/FwgAS+rICAAUJMQA== Date: Sun, 7 Dec 2014 11:46:55 +0000 Message-ID: <2601191342CEEE43887BDE71AB977258213BD3C9@IRSMSX105.ger.corp.intel.com> References: <1417532767-1309-1-git-send-email-jijiang.liu@intel.com> <2601191342CEEE43887BDE71AB977258213BC0A5@IRSMSX105.ger.corp.intel.com> <3291312.KsF87lF78O@xps13> In-Reply-To: <3291312.KsF87lF78O@xps13> Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [163.33.239.180] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [PATCH v5 0/3] i40e VXLAN TX checksum rework 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: Sun, 07 Dec 2014 11:46:59 -0000 > -----Original Message----- > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com] > Sent: Friday, December 05, 2014 4:07 PM > To: Liu, Jijiang > Cc: dev@dpdk.org; Ananyev, Konstantin; olivier.matz@6wind.com > Subject: Re: [dpdk-dev] [PATCH v5 0/3] i40e VXLAN TX checksum rework >=20 > > > We have got some feedback about backward compatibility of VXLAN TX ch= ecksum offload API with 1G/10G NIC after the i40e > VXLAN > > > TX checksum codes were applied, so we have to rework the APIs on i40e= , including the changes of mbuf, i40e PMD and csum > forward > > > engine. > > > > > > The main changes in mbuf are as follows, in place of removing PKT_TX_= VXLAN_CKSUM, we introduce 4 new flags: > > > PKT_TX_OUTER_IP_CKSUM, PKT_TX_OUTER_IPV4, PKT_TX_OUTER_IPV6 and PKT_T= X_UDP_TUNNEL_PKT. Replace the > inner_l2_len > > > and the inner_l3_len field with the outer_l2_len and outer_l3_len fie= ld. > > > > > > Let's use a few examples to demonstrate how to use these new flags an= d existing flags in rte_mbuf.h > > > Let say we have a tunnel packet: eth_hdr_out/ipv4_hdr_out/udp_hdr_out= /vxlan_hdr/ehtr_hdr_in/ipv4_hdr_in/tcp_hdr_in. > There > > > could be several scenarios: > > > > > > A) User requests HW offload for ipv4_hdr_out checksum. > > > He doesn't care is it a tunnelled packet or not. So he sets: > > > > > > mb->l2_len =3D eth_hdr_out; > > > mb->l3_len =3D ipv4_hdr_out; > > > mb->ol_flags |=3D PKT_TX_IPV4_CSUM; > > > > > > B) User is aware that it is a tunnelled packet and requests HW offloa= d for ipv4_hdr_in and tcp_hdr_in *only*. > > > He doesn't care about outer IP checksum offload. In that case, for FV= L he has 2 choices: > > > 1. Treat that packet as a 'proper' tunnelled packet, and fill all = the fields: > > > mb->l2_len =3D udp_hdr_out + vxlan_hdr +eth_hdr_in; > > > mb->l3_len =3D ipv4_hdr_in; > > > mb->outer_l2_len =3D eth_hdr_out; > > > mb->outer_l3_len =3D ipv4_hdr_out; > > > mb->ol_flags |=3D PKT_TX_UDP_TUNNEL_PKT | PKT_TX_IP_CKSUM | PKT= _TX_TCP_CKSUM; > > > > > > 2. As user doesn't care about outer IP hdr checksum, he can treat = everything before ipv4_hdr_in as L2 header. > > > So he knows, that it is a tunnelled packet, but makes HW to treat = it as ordinary (non-tunnelled) packet: > > > mb->l2_len =3D eth_hdr_out + ipv4_hdr_out + udp_hdr_out + vxlan_= hdr + ehtr_hdr_in; > > > mb->l3_len =3D ipv4_hdr_in; > > > mb->ol_flags |=3D PKT_TX_IP_CKSUM | PKT_TX_TCP_CKSUM; > > > > > > i40e PMD will support both B.1 and B.2, but ixgbe/igb/em PMD supports= only B.2. > > > if HW supports both - it will be up to user app which method to choos= e. > > > tespmd will support both methods, and it should be configurable by us= er which approach to use (cmdline parameter). > > > So the user can try/test both methods and select an appropriate for h= im. > > > > > > C) User knows that is a tunnelled packet, and wants HW offload for al= l 3 checksums: outer IP hdr checksum, inner IP checksum, > inner > > > TCP checksum. > > > Then he has to setup all TX checksum fields: > > > mb->l2_len =3D udp_hdr_out + vxlan_hdr +eth_hdr_in;; > > > mb->l3_len =3D ipv4_hdr_in; > > > mb->outer_l2_len =3D eth_hdr_out; > > > mb->outer_l3_len =3D ipv4_hdr_out; > > > mb->ol_flags |=3D PKT_TX_OUT_IP_CKSUM | PKT_TX_UDP_TUNNEL_PKT |= PKT_TX_IP_CKSUM | PKT_TX_TCP_CKSUM; > > > > > > Change notes: > > > v2 changes: > > > remove PKT_TX_IP_CKSUM alias. > > > add PKT_TX_OUT_IP_CKSUM and PKT_TX_OUTER_IPV6 in rte_get_tx_ol_f= lag_name. > > > spliting mbuf changes into two patches. > > > fix MACLEN caculation issue in i40e driver > > > fix some issues in csumonly.c > > > change cover letter. > > > v3 changes: > > > fix MACLEN caculation issue in i40e driver when non-tunneling pa= cket > > > v4 changes: > > > reorganize patches to avoid compilation to be broken between pat= ches. > > > remove l4_tun_len from mbuf structure. > > > add PKT_TX_OUTER_IPV4 to indicate no IP checksum offload require= ment for tunneling packet. > > > change i40e PMD and csum engine due to above changes. > > > > > > v5 changes: > > > according to Konstantin's comments, optimize process_outer_cksum= s() in order to avoid setting PKT_TX_OUTER_IPV4 flags for > the > > > case when user didn't enable TESTPMD_TX_OFFLOAD_VXLAN_CKSUM > > > > > > Jijiang Liu (3): > > > Redefine PKT_TX_IPV4, PKT_TX_IPV6 and PKT_TX_VLAN_PKT; > > > Replace PKT_TX_VXLAN_CKSUM with PKT_TX_UDP_TUNNEL_PKT, and add 3 TX= flags, which are PKT_TX_OUTER_IP_CKSUM, > > > PKT_TX_OUTER_IPV4 and PKT_TX_OUTER_IPV6,and rework csum forward engin= e and i40e pmd due to these changes; > > > Replace the inner_l2_len and the inner_l3_len field with the outer_= l2_len and outer_l3_len field, and rework csum forward > engine > > > and i40e pmd due to these changes; > > > > Acked-by: Konstantin Ananyev >=20 > Applied with small comments changes suggested by Olivier. >=20 > Thanks everyone for finding a consensus. > It's not easy to accept different of views but we finally did it! >=20 > Lesson learned: every details of an API must be explicited with clear and > short sentences. >>From my side I would like to thank Olivier for all his tremendous help with= that feature. Konstantin >=20 > Thanks > -- > Thomas