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 DE3B2A0353; Thu, 30 Apr 2020 20:36:07 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8C7FC1DB98; Thu, 30 Apr 2020 20:36:06 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id C3AA61DB96; Thu, 30 Apr 2020 20:36:04 +0200 (CEST) IronPort-SDR: nP3Gkwmq8E7yLivjCodCXwhGcDiZlZp8AXD8+puhMoOWX0YOsHDdalnSp4ubcBtpva7yCARzus JLLawUkXCMpA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Apr 2020 11:36:03 -0700 IronPort-SDR: P37x3ii8zKITAHIAeWzBlndF2khq491d1zfujTaZWWqDaho2vx51EMZ1ASHevwPcQqEkk0ofWV Anr6J12iuXgA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,336,1583222400"; d="scan'208";a="294607327" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by orsmga008.jf.intel.com with ESMTP; 30 Apr 2020 11:36:03 -0700 Received: from fmsmsx607.amr.corp.intel.com (10.18.126.87) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 30 Apr 2020 11:36:03 -0700 Received: from fmsmsx607.amr.corp.intel.com (10.18.126.87) by fmsmsx607.amr.corp.intel.com (10.18.126.87) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 30 Apr 2020 11:36:02 -0700 Received: from FMSEDG002.ED.cps.intel.com (10.1.192.134) by fmsmsx607.amr.corp.intel.com (10.18.126.87) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Thu, 30 Apr 2020 11:36:02 -0700 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.43) by edgegateway.intel.com (192.55.55.69) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 30 Apr 2020 11:36:01 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KhWZkOdiYpTm3eT0LFpYtOrfjNT7vkbHrDgRlTA85Lhe2X+j+khVvwkHs6UiAAcZ8tqcFHIkpomN5vNTSWFQLOCNrirm33PanInEvwPker93sbvSGr8/80CYZBeHfpHSx3V0/1QH2mRDFPZpun8iNTlIzckqgkmCK+wsxdTHnqvdtI9lai/V55KOUXLuz9eeWT0oftb5xcJBItcIFQsXcCBC0iceJdzN7yGZFhrUM8eBrk7aCDdNUhbPYe2d4dm7yx7t5eFWdMe/8+gBnBrvxpzUr1zg9S9YPhyx2OTJ4jOPoRMJHhe8z9KMysZAgYHL8LCBDaMr2HWvOxNhdKemhw== 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=AH37MmU5GN1ELlCgh5sg735IpwuUO2Do0z+NVzRXK1w=; b=Goeust82tg/6yj9zF19JNuGQmEQhShLCqLt2poySxDlGN02hsNPyYshrhV4IgVLn31OblzcPu7eppzULssXR6+aroCshR2vJh+/ZNWdXQ3JyShokEFWs5Rqzq1fD+ic8W7iqpsVFHfNhyRX975y18pMyCoj8s53ooaMf0Bo2emCT395QkGaYXnMFWbMIh7zS0fz9miWHkZDTJ26bhbdRAufOGrkqsU+Vb0mQGuo/8mqwxf3qhd6ngT29e6g6SJ8R35Bh4yS0AVnYsEnVuSOCpG96eUvN4HRaoTz+WJePCH/N0Z3eFLiVkH4YrwuG0/HC60t4RIIfDg0dTlmz5xvcaQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AH37MmU5GN1ELlCgh5sg735IpwuUO2Do0z+NVzRXK1w=; b=VaHaW9Tj8YUoEvnLh1zhcPk/EokahYw6+HBeIFIxVSkUzv6CRqkyCs7FHnmbxr5of7zTTIUxa9JqwtHbtVXGiuYdyX4Psr2RJq0gljCkRUOV3FmwNdADSaTiqBoo2gYe5HC9rzDTwBKOjAJ11+Oh95Y5v8QLu2sjQhXtioMZmwM= Received: from BYAPR11MB3301.namprd11.prod.outlook.com (2603:10b6:a03:7f::26) by BYAPR11MB2886.namprd11.prod.outlook.com (2603:10b6:a03:8f::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2937.22; Thu, 30 Apr 2020 18:35:58 +0000 Received: from BYAPR11MB3301.namprd11.prod.outlook.com ([fe80::f8cb:58cd:e958:fff4]) by BYAPR11MB3301.namprd11.prod.outlook.com ([fe80::f8cb:58cd:e958:fff4%6]) with mapi id 15.20.2937.028; Thu, 30 Apr 2020 18:35:58 +0000 From: "Ananyev, Konstantin" To: Pu Xu <583493798@qq.com> CC: "dev@dpdk.org" , "Burakov, Anatoly" , "stable@dpdk.org" Thread-Topic: [PATCH] ip_frag: fix fragmenting ipv4 packet with header options Thread-Index: AQHWHpZS8PulcIpHrkGFvjtNl/Ype6iR/r0Q Date: Thu, 30 Apr 2020 18:35:58 +0000 Message-ID: References: <20200430022222.3779-1-583493798@qq.com> In-Reply-To: <20200430022222.3779-1-583493798@qq.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.2.0.6 authentication-results: qq.com; dkim=none (message not signed) header.d=none;qq.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.198.151.189] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 823d641c-e9b1-4f49-91b1-08d7ed35534b x-ms-traffictypediagnostic: BYAPR11MB2886: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7219; x-forefront-prvs: 0389EDA07F x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR11MB3301.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(376002)(136003)(396003)(346002)(366004)(39860400002)(33656002)(76116006)(8936002)(7696005)(186003)(86362001)(66946007)(8676002)(66446008)(64756008)(66556008)(66476007)(316002)(71200400001)(5660300002)(54906003)(55016002)(6506007)(52536014)(9686003)(478600001)(26005)(4326008)(6916009)(2906002); DIR:OUT; SFP:1102; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: /DbJ6B6FUa0daYEit16UqWW1AplVbCCpoUNYo7POJKdb1TRQYVtKXfYb4v3KvwwHsdzOGWbs9+LjjyoTFVOWs8TUWoPChfwqOyie7xdKZ6FCqAW67IppUlFJTNoFpXUDxIsjLYEN4RzGri1oLv6iG0WoKmfKQQ9usMJhyDHvVXv4ho6F08cV7YourA0Xh5HirbpA70LWJ2Gl0cTpU7daUKirDVLLqzcBfw/ZpdubnKn8/3xwYCog2fjPBr+qC4mEO7JTKX3+JcSx8dA44RsLo+UJZE88/SgS3lw1WAba4jQPci9Gmc7mj1S/mmVfsN552NaAaJwUxDujINjoj7Eb4qlGxJwuJnWud+rV3FdF0SJ/829OOO9oG9+5AORWeZmiDZAk4WNnMQf74BV/XpFpPxYhoJUT7PeN4MAr3wgE/1MJpymLtNnQ9KUn/QEmRa7l x-ms-exchange-antispam-messagedata: A9nV6NvhPei/uET/HpBoUE19jG5pdnCoNs1dT9eWyGmg2tHRqQ+JOA0PW4lrstEx/yjiC3rHycQe2o3W5Yh6O0wxUWYM2tvTYPY6n64BOvw+T88+qZgLK5l77322tF0mSdjjyvs7caSn5neM6anIgddqWvNFYjZaZlMOX/9bg8BNFfEnxC+cPoaVrCSUtBhEmic3bkH38cppP7QD35ZYIjB8/PhsYysBYfzPqM5p0ulPpAJQmj1DyAW/Pi+GjCwJKD5zzut8BNCKITgwM+0wHeqzx+UXKPe6cycX3Wh0/tg3RkfmPmoiT89/3SwB2sHVGDjubqwxASzcKRdOwLbcziXGA+x/r5WvTXEAh+puD3Ae7Pbld9vZrLu34elN4zLbhLHl6/O39Vfuf3fgwBH/5Y0i9mG2cqGn+mk8IU25QHymZe6RMf+KggHIU3Acue2DavVTRRgDb8ADs+rxGc4COA72HPDKZJgxQdG8P5I8jxdK0XgvLuXVCzLexjlsPsNQCHcHDQf/FT49Rh6zILUkdBKKmZXBeyYE99XJ6eaxgAtTeBR2zxSFdErqOclFMsU4A3e71HDdOz8OdIZp0Ti+NsH9wbeLgTHRToavdSSKWJBGmhTpfpIUTbnLhFgEcelh+fjPzM8pPwqb4guL4RuEZ9vF+j2bDXAoTdl1CtCecHFmEX35zIziyk6BoA+FEokF9ci+xWgul196HgHTicSClrIuEN5xC9tKDiJ6vrvwHJiTKnFtJEotAvwOA+r/n9f04jlBTQoaI7OiMioIs0FF4Mp+oe2RTlzcw28pT2mXs/b5ywlRGhzIycTNgcfItoNw Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 823d641c-e9b1-4f49-91b1-08d7ed35534b X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Apr 2020 18:35:58.0656 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: IcI5VCJuwzKUJ7nmUIPUZVi00EeumxsIe8/2/d0xuym0SkcYRKrvhnR2THR8Mg3Ulwv2EZyefeIAquXP/nOug9nYMlk0S/MUB6gw/GjyA+Y= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR11MB2886 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH] ip_frag: fix fragmenting ipv4 packet with header options 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" > When fragmenting ipv4 packet, the data offset should be calculated throug= h the ihl field in ip header rather than using sizeof(struct > rte_ipv4_hdr). Seems you missed my comments, except the very first one. Please look at my email and try to address all of them. >=20 > Fixes: 4c38e5532a07 ("ip_frag: refactor IPv4 fragmentation into a proper = library") > Cc: anatoly.burakov@intel.com > Cc: stable@dpdk.org >=20 > Signed-off-by: Pu Xu <583493798@qq.com> > --- > lib/librte_ip_frag/rte_ipv4_fragmentation.c | 20 +++++++++++--------- > 1 file changed, 11 insertions(+), 9 deletions(-) >=20 > diff --git a/lib/librte_ip_frag/rte_ipv4_fragmentation.c b/lib/librte_ip_= frag/rte_ipv4_fragmentation.c > index e9de335ae..156087ca3 100644 > --- a/lib/librte_ip_frag/rte_ipv4_fragmentation.c > +++ b/lib/librte_ip_frag/rte_ipv4_fragmentation.c > @@ -74,7 +74,7 @@ rte_ipv4_fragment_packet(struct rte_mbuf *pkt_in, > struct rte_ipv4_hdr *in_hdr; > uint32_t out_pkt_pos, in_seg_data_pos; > uint32_t more_in_segs; > - uint16_t fragment_offset, flag_offset, frag_size; > + uint16_t fragment_offset, flag_offset, frag_size, header_len; > uint16_t frag_bytes_remaining; >=20 > /* > @@ -86,14 +86,16 @@ rte_ipv4_fragment_packet(struct rte_mbuf *pkt_in, > unlikely(mtu_size < RTE_ETHER_MIN_MTU)) > return -EINVAL; >=20 > + in_hdr =3D rte_pktmbuf_mtod(pkt_in, struct rte_ipv4_hdr *); > + > + header_len =3D (in_hdr->version_ihl & 0xf) * 4; > /* > * Ensure the IP payload length of all fragments is aligned to a > * multiple of 8 bytes as per RFC791 section 2.3. > */ > - frag_size =3D RTE_ALIGN_FLOOR((mtu_size - sizeof(struct rte_ipv4_hdr)), > + frag_size =3D RTE_ALIGN_FLOOR((mtu_size - header_len), > IPV4_HDR_FO_ALIGN); >=20 > - in_hdr =3D rte_pktmbuf_mtod(pkt_in, struct rte_ipv4_hdr *); > flag_offset =3D rte_cpu_to_be_16(in_hdr->fragment_offset); >=20 > /* If Don't Fragment flag is set */ > @@ -102,11 +104,11 @@ rte_ipv4_fragment_packet(struct rte_mbuf *pkt_in, >=20 > /* Check that pkts_out is big enough to hold all fragments */ > if (unlikely(frag_size * nb_pkts_out < > - (uint16_t)(pkt_in->pkt_len - sizeof(struct rte_ipv4_hdr)))) > + (uint16_t)(pkt_in->pkt_len - header_len))) > return -EINVAL; >=20 > in_seg =3D pkt_in; > - in_seg_data_pos =3D sizeof(struct rte_ipv4_hdr); > + in_seg_data_pos =3D header_len; > out_pkt_pos =3D 0; > fragment_offset =3D 0; >=20 > @@ -124,8 +126,8 @@ rte_ipv4_fragment_packet(struct rte_mbuf *pkt_in, > } >=20 > /* Reserve space for the IP header that will be built later */ > - out_pkt->data_len =3D sizeof(struct rte_ipv4_hdr); > - out_pkt->pkt_len =3D sizeof(struct rte_ipv4_hdr); > + out_pkt->data_len =3D header_len; > + out_pkt->pkt_len =3D header_len; > frag_bytes_remaining =3D frag_size; >=20 > out_seg_prev =3D out_pkt; > @@ -181,9 +183,9 @@ rte_ipv4_fragment_packet(struct rte_mbuf *pkt_in, > flag_offset, fragment_offset, more_in_segs); >=20 > fragment_offset =3D (uint16_t)(fragment_offset + > - out_pkt->pkt_len - sizeof(struct rte_ipv4_hdr)); > + out_pkt->pkt_len - header_len); >=20 > - out_pkt->l3_len =3D sizeof(struct rte_ipv4_hdr); > + out_pkt->l3_len =3D header_len; >=20 > /* Write the fragment to the output list */ > pkts_out[out_pkt_pos] =3D out_pkt; > -- > 2.17.1