From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id B2B77952 for ; Fri, 4 Sep 2015 17:51:19 +0200 (CEST) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga103.jf.intel.com with ESMTP; 04 Sep 2015 08:51:18 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,470,1437462000"; d="scan'208";a="638592726" Received: from irsmsx106.ger.corp.intel.com ([163.33.3.31]) by orsmga003.jf.intel.com with ESMTP; 04 Sep 2015 08:51:17 -0700 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.51]) by IRSMSX106.ger.corp.intel.com ([169.254.8.112]) with mapi id 14.03.0224.002; Fri, 4 Sep 2015 16:51:16 +0100 From: "Ananyev, Konstantin" To: "Azarewicz, PiotrX T" , "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH 1/1] ip_frag: fix creating ipv6 fragment extension header Thread-Index: AQHQ5YlVJiwJJrKVv0mDXHlIv+5wdp4saxBA Date: Fri, 4 Sep 2015 15:51:16 +0000 Message-ID: <2601191342CEEE43887BDE71AB97725836A83591@irsmsx105.ger.corp.intel.com> References: <1441203181-15487-1-git-send-email-piotrx.t.azarewicz@intel.com> In-Reply-To: <1441203181-15487-1-git-send-email-piotrx.t.azarewicz@intel.com> 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 Subject: Re: [dpdk-dev] [PATCH 1/1] ip_frag: fix creating ipv6 fragment extension header 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: Fri, 04 Sep 2015 15:51:20 -0000 Hi Piotr, > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Piotr > Sent: Wednesday, September 02, 2015 3:13 PM > To: dev@dpdk.org > Subject: [dpdk-dev] [PATCH 1/1] ip_frag: fix creating ipv6 fragment exten= sion header >=20 > From: Piotr Azarewicz >=20 > Previous implementation won't work on every environment. The order of > allocation of bit-fields within a unit (high-order to low-order or > low-order to high-order) is implementation-defined. > Solution: used bytes instead of bit fields. Seems like right thing to do to me. Though I think we also should replace: union { struct { uint16_t frag_offset:13; /**< Offset from the start= of the packet */ uint16_t reserved2:2; /**< Reserved */ uint16_t more_frags:1; /**< 1 if more fragments left, 0 if last fragment *= / }; uint16_t frag_data; /**< union of all fragmentation data */ };=20 With just:=20 uint16_t frag_data; and probably provide macros to read/set fragment_offset and more_flags val= ues. Otherwise people might keep using the wrong layout. Konstantin >=20 > Signed-off-by: Piotr Azarewicz > --- > lib/librte_ip_frag/rte_ipv6_fragmentation.c | 6 ++---- > 1 file changed, 2 insertions(+), 4 deletions(-) >=20 > diff --git a/lib/librte_ip_frag/rte_ipv6_fragmentation.c b/lib/librte_ip_= frag/rte_ipv6_fragmentation.c > index 0e32aa8..7342421 100644 > --- a/lib/librte_ip_frag/rte_ipv6_fragmentation.c > +++ b/lib/librte_ip_frag/rte_ipv6_fragmentation.c > @@ -65,10 +65,8 @@ __fill_ipv6hdr_frag(struct ipv6_hdr *dst, >=20 > fh =3D (struct ipv6_extension_fragment *) ++dst; > fh->next_header =3D src->proto; > - fh->reserved1 =3D 0; > - fh->frag_offset =3D rte_cpu_to_be_16(fofs); > - fh->reserved2 =3D 0; > - fh->more_frags =3D rte_cpu_to_be_16(mf); > + fh->reserved1 =3D 0; > + fh->frag_data =3D rte_cpu_to_be_16((fofs & ~IPV6_HDR_FO_MASK) | mf); > fh->id =3D 0; > } >=20 > -- > 1.7.9.5