From patchwork Tue Oct 9 14:18:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerin Jacob X-Patchwork-Id: 46385 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id DC5261B540; Tue, 9 Oct 2018 16:18:08 +0200 (CEST) Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0048.outbound.protection.outlook.com [104.47.38.48]) by dpdk.org (Postfix) with ESMTP id 155A31B53C for ; Tue, 9 Oct 2018 16:18:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uA1AT4sPSCyiAHKjVHhpnvVoj0rBJnyhGQdsZLuS5AQ=; b=j6pLFrKpH01EHglMR20jAGx7EYuTmQEZpr8wLWoE+77MAqAm5BXrdEnJVn3FypD61f9NV2SJHMwk55l4OyJPzgxkSGOk5QZUk2s16vZKsCsgqI3BJFimpmIrHowjwjwqbGtJx/tY0YlxVvMaDk5RJYTsI+DWqrCMGuYSjnBsg1A= Received: from BYAPR07MB4997.namprd07.prod.outlook.com (52.135.238.214) by BYAPR07MB5607.namprd07.prod.outlook.com (20.177.231.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.27; Tue, 9 Oct 2018 14:18:05 +0000 Received: from BYAPR07MB4997.namprd07.prod.outlook.com ([fe80::c5c:4d86:b353:175a]) by BYAPR07MB4997.namprd07.prod.outlook.com ([fe80::c5c:4d86:b353:175a%4]) with mapi id 15.20.1207.024; Tue, 9 Oct 2018 14:18:04 +0000 From: Jerin Jacob To: Wenzhuo Lu , Jingjing Wu , Bernard Iremonger , John McNamara , Marko Kovacevic , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko , Olivier Matz CC: "dev@dpdk.org" , "Jacob, Jerin" Thread-Topic: [dpdk-dev] [PATCH v5 1/4] ethdev: add Rx offload outer UDP checksum definition Thread-Index: AQHUX9rkUUtXrgvWGEGf1D4VlOsA8Q== Date: Tue, 9 Oct 2018 14:18:04 +0000 Message-ID: <20181009141741.5162-1-jerin.jacob@caviumnetworks.com> References: <20181008160953.32510-1-jerin.jacob@caviumnetworks.com> In-Reply-To: <20181008160953.32510-1-jerin.jacob@caviumnetworks.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [111.93.218.67] x-clientproxiedby: DM5PR21CA0032.namprd21.prod.outlook.com (2603:10b6:3:ed::18) To BYAPR07MB4997.namprd07.prod.outlook.com (2603:10b6:a03:5b::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Jerin.JacobKollanukkaran@cavium.com; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BYAPR07MB5607; 6:iGMudGWCJn5CS2W9sKf9lkS2l8JLVXD8LjUQGdWlQvB2jQOX4EjVJib4u7PG572tQM/xkU4PQYSDS86xpObbPuMf6VMRHYC6HH2gC0Em83Q2MhE0DTsK1dibH9gZyzFVWhxnWVCF52srlRD+U314KTfhlbKhVFqi8SJZD8bXBvIDXS/al85to3MYxn7okhE4yrS7dv8pt4Aq/jiX8QXnECgG5CzjYN3OkiUKoT3whiQsoENb973HyMIQgd7CdRhnXRgHx3A5mvyPGfrzABy7/J5M9D44Iy4tIQpoFV6uQt9m0f+SPOHsQAxChwzCyV31sO2tA+gSOim0FM2GduW2Qe/eLfaARtenTCwNagaYJZoJnHsKf0FxbbElr4aQ04kE/QRr/O3MARHsI1gxy7mV9h4SSP350XjF6lvTve8Xe9waUOnqX9LCdDbIWRjBoCv05OP3NYUaUI+g2Y63g206gQ==; 5:nMvjgsELjvI8amWDIWiRkPAJVdcDEAZBc+45FY+lIBgx6NT4rfU7kCjh+hol273LE91ote66bFBKcHX3ZE7GxNsWhdRZb9fC27kXv+iPhQhDv2iyGN2VABSyqUrT0IypKkEHkB9oiNGg5En2/wWBisneqBCMZXcQTCiLZn4s5ZM=; 7:tml0DCzEokhPfw55NLSTeCXbRyo5mVzCAALsh3fsH0fakzoJiQyg/F+X9mtpQr8HYfU7GBhwrPW9dMLcfPoS2xgHipc+pqtidlOq/OOlLGa4bxBhSdlFkU7XeiLjZyMPKBAqVX7ndXU8IegNGiYRM0dziquvCZdoZi6aKx26bc3LBVPZp3DN45CmKsYPDrI2oHwjZfkHTZPxibgwoy8v0dA/LDJNUDRXBi4y3SmI35zs6KLRbjEEGFu3PJvbsh6l x-ms-office365-filtering-correlation-id: 41e9c9be-63b2-4ac7-948d-08d62df206ce x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BYAPR07MB5607; x-ms-traffictypediagnostic: BYAPR07MB5607: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231355)(944501410)(4982022)(52105095)(3002001)(10201501046)(93006095)(149066)(150057)(6041310)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(201708071742011)(7699051); SRVR:BYAPR07MB5607; BCL:0; PCL:0; RULEID:; SRVR:BYAPR07MB5607; x-forefront-prvs: 08200063E9 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(376002)(346002)(136003)(366004)(396003)(39850400004)(189003)(199004)(4326008)(26005)(1076002)(66066001)(966005)(186003)(14454004)(2906002)(575784001)(316002)(478600001)(102836004)(25786009)(105586002)(6116002)(3846002)(68736007)(107886003)(1857600001)(106356001)(6512007)(81156014)(81166006)(76176011)(11346002)(71200400001)(71190400001)(99286004)(6486002)(7416002)(110136005)(5660300001)(54906003)(42882007)(6306002)(476003)(97736004)(5250100002)(53936002)(8676002)(36756003)(6436002)(14444005)(305945005)(486006)(52116002)(256004)(72206003)(446003)(7736002)(2616005)(2900100001)(6506007)(386003)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR07MB5607; H:BYAPR07MB4997.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: yvS/m/iavS/7oWbEvLIZsUZGdc3+jnue3X5QFvHA7wreG9d5FPXv1mXsqGDXj494bAb/+NZD6nwdBvfp5lSfumDUrgT9XmxVTDC6gaNrowUAh5R2CWrfnHcX30bsNsErQWRsAcchdUz1/v3NXfG2yxbq9KVMvVuGbxuQ5EK9eMjkeXgSKr7+P6U+0NjgbPszJw9arreMMN/bBjSsdgdfLUIYDgrwR54yndZFxvPa8x0bcDUU0kPqWYHmcDDZqYDNFw0g5WSvKhvRYZ/AhQSlVdjQd7ff8MvFh/ln4y1VaTg13NAN/T0rH8p5S75f9rfVQW55S93zxMrEdyMsY5MA6E5eJc85Z+P1OQgF8odOmws= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-Network-Message-Id: 41e9c9be-63b2-4ac7-948d-08d62df206ce X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Oct 2018 14:18:04.7947 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR07MB5607 Subject: [dpdk-dev] [PATCH v5 1/4] ethdev: add Rx offload outer UDP checksum definition 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" Introduced DEV_RX_OFFLOAD_OUTER_UDP_CKSUM Rx offload flag and PKT_RX_OUTER_L4_CKSUM_* mbuf ol_flags to detect outer UDP checksum status. - To use hardware Rx outer UDP checksum offload, the user needs to configure DEV_RX_OFFLOAD_OUTER_UDP_CKSUM offload flags in slowpath. - Driver updates checksum status in mbuf ol_flag as PKT_RX_OUTER_L4_CKSUM_* flags. Signed-off-by: Jerin Jacob Reviewed-by: Andrew Rybchenko --- This patch series is depended on http://patches.dpdk.org/patch/45840/ v5: - Added Reviewed-by: Andrew Rybchenko v4: - Replaced PKT_RX_EL4_CKSUM_BAD with PKT_RX_OUTER_L4_CKSUM_* flags v3: - Mention in git commit log that PKT_RX_EL4_CKSUM_BAD based one bit scheme selected based on exiting outer L3 PKT_RX_EIP_CKSUM_BAD one bit flag scheme. - Removed extra empty line in features.rst (Andrew Rybchenko) v2: - Removed DEV_RX_OFFLOAD_OUTER_TCP_CKSUM and DEV_RX_OFFLOAD_OUTER_SCTP_CKSUM as there is no realworld use case for it. See: http://patches.dpdk.org/patch/44692/ --- app/test-pmd/config.c | 9 +++++++++ doc/guides/nics/features.rst | 5 +++++ lib/librte_ethdev/rte_ethdev.c | 1 + lib/librte_ethdev/rte_ethdev.h | 1 + lib/librte_mbuf/rte_mbuf.c | 12 ++++++++++++ lib/librte_mbuf/rte_mbuf.h | 19 +++++++++++++++++++ 6 files changed, 47 insertions(+) diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 1adc9b94b..d53c527e5 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -594,6 +594,15 @@ port_offload_cap_display(portid_t port_id) printf("off\n"); } + if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_OUTER_UDP_CKSUM) { + printf("RX Outer UDP checksum: "); + if (ports[port_id].dev_conf.rxmode.offloads & + DEV_RX_OFFLOAD_OUTER_UDP_CKSUM) + printf("on\n"); + else + printf("off\n"); + } + if (dev_info.rx_offload_capa & DEV_RX_OFFLOAD_TCP_LRO) { printf("Large receive offload: "); if (ports[port_id].dev_conf.rxmode.offloads & diff --git a/doc/guides/nics/features.rst b/doc/guides/nics/features.rst index d42489b6d..998f67c8e 100644 --- a/doc/guides/nics/features.rst +++ b/doc/guides/nics/features.rst @@ -639,6 +639,11 @@ Inner L4 checksum Supports inner packet L4 checksum. +* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``. +* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_L4_CKSUM_UNKNOWN`` | + ``PKT_RX_OUTER_L4_CKSUM_BAD`` | ``PKT_RX_OUTER_L4_CKSUM_GOOD`` | ``PKT_RX_OUTER_L4_CKSUM_INVALID``. +* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``, + .. _nic_features_packet_type_parsing: diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index e9a82fe7f..a630c4fda 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -127,6 +127,7 @@ static const struct { RTE_RX_OFFLOAD_BIT2STR(SECURITY), RTE_RX_OFFLOAD_BIT2STR(KEEP_CRC), RTE_RX_OFFLOAD_BIT2STR(SCTP_CKSUM), + RTE_RX_OFFLOAD_BIT2STR(OUTER_UDP_CKSUM), }; #undef RTE_RX_OFFLOAD_BIT2STR diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h index d02db14ad..821d371c3 100644 --- a/lib/librte_ethdev/rte_ethdev.h +++ b/lib/librte_ethdev/rte_ethdev.h @@ -889,6 +889,7 @@ struct rte_eth_conf { #define DEV_RX_OFFLOAD_SECURITY 0x00008000 #define DEV_RX_OFFLOAD_KEEP_CRC 0x00010000 #define DEV_RX_OFFLOAD_SCTP_CKSUM 0x00020000 +#define DEV_RX_OFFLOAD_OUTER_UDP_CKSUM 0x00040000 #define DEV_RX_OFFLOAD_CHECKSUM (DEV_RX_OFFLOAD_IPV4_CKSUM | \ DEV_RX_OFFLOAD_UDP_CKSUM | \ diff --git a/lib/librte_mbuf/rte_mbuf.c b/lib/librte_mbuf/rte_mbuf.c index e714c5a59..c1740ce0c 100644 --- a/lib/librte_mbuf/rte_mbuf.c +++ b/lib/librte_mbuf/rte_mbuf.c @@ -301,6 +301,11 @@ const char *rte_get_rx_ol_flag_name(uint64_t mask) case PKT_RX_TIMESTAMP: return "PKT_RX_TIMESTAMP"; case PKT_RX_SEC_OFFLOAD: return "PKT_RX_SEC_OFFLOAD"; case PKT_RX_SEC_OFFLOAD_FAILED: return "PKT_RX_SEC_OFFLOAD_FAILED"; + case PKT_RX_OUTER_L4_CKSUM_BAD: return "PKT_RX_OUTER_L4_CKSUM_BAD"; + case PKT_RX_OUTER_L4_CKSUM_GOOD: return "PKT_RX_OUTER_L4_CKSUM_GOOD"; + case PKT_RX_OUTER_L4_CKSUM_INVALID: + return "PKT_RX_OUTER_L4_CKSUM_INVALID"; + default: return NULL; } } @@ -339,6 +344,13 @@ rte_get_rx_ol_flag_list(uint64_t mask, char *buf, size_t buflen) { PKT_RX_SEC_OFFLOAD, PKT_RX_SEC_OFFLOAD, NULL }, { PKT_RX_SEC_OFFLOAD_FAILED, PKT_RX_SEC_OFFLOAD_FAILED, NULL }, { PKT_RX_QINQ, PKT_RX_QINQ, NULL }, + { PKT_RX_OUTER_L4_CKSUM_BAD, PKT_RX_OUTER_L4_CKSUM_MASK, NULL }, + { PKT_RX_OUTER_L4_CKSUM_GOOD, PKT_RX_OUTER_L4_CKSUM_MASK, + NULL }, + { PKT_RX_OUTER_L4_CKSUM_INVALID, PKT_RX_OUTER_L4_CKSUM_MASK, + NULL }, + { PKT_RX_OUTER_L4_CKSUM_UNKNOWN, PKT_RX_OUTER_L4_CKSUM_MASK, + "PKT_RX_OUTER_L4_CKSUM_UNKNOWN" }, }; const char *name; unsigned int i; diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h index eb11779e7..a453ec008 100644 --- a/lib/librte_mbuf/rte_mbuf.h +++ b/lib/librte_mbuf/rte_mbuf.h @@ -177,6 +177,25 @@ extern "C" { */ #define PKT_RX_QINQ (1ULL << 20) +/** + * Mask of bits used to determine the status of outer RX L4 checksum. + * - PKT_RX_OUTER_L4_CKSUM_UNKNOWN: no info about the outer RX L4 checksum + * - PKT_RX_OUTER_L4_CKSUM_BAD: the outer L4 checksum in the packet is wrong + * - PKT_RX_OUTER_L4_CKSUM_GOOD: the outer L4 checksum in the packet is valid + * - PKT_RX_OUTER_L4_CKSUM_INVALID: invalid outer L4 checksum state. + * + * The detection of PKT_RX_OUTER_L4_CKSUM_GOOD shall be based on the given + * HW capability, At minimum, the PMD should support + * PKT_RX_OUTER_L4_CKSUM_UNKNOWN and PKT_RX_OUTER_L4_CKSUM_BAD states + * if the DEV_RX_OFFLOAD_OUTER_UDP_CKSUM offload is available. + */ +#define PKT_RX_OUTER_L4_CKSUM_MASK ((1ULL << 21) | (1ULL << 22)) + +#define PKT_RX_OUTER_L4_CKSUM_UNKNOWN 0 +#define PKT_RX_OUTER_L4_CKSUM_BAD (1ULL << 21) +#define PKT_RX_OUTER_L4_CKSUM_GOOD (1ULL << 22) +#define PKT_RX_OUTER_L4_CKSUM_INVALID ((1ULL << 21) | (1ULL << 22)) + /* add new RX flags here */ /* add new TX flags here */ From patchwork Tue Oct 9 14:18:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerin Jacob X-Patchwork-Id: 46386 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 2B1AE1B578; Tue, 9 Oct 2018 16:18:15 +0200 (CEST) Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0055.outbound.protection.outlook.com [104.47.38.55]) by dpdk.org (Postfix) with ESMTP id 583901B573 for ; Tue, 9 Oct 2018 16:18:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UPF/p2HvDR9N0ry0zLaRdTKyHDlVt4qK5zXS7nr6RYk=; b=YIjDku/g31uq5UMhxlLcZG+pzrE+1r+cTsnD09Da5ygwKD45Cg1PCpHLcRsem9KhfNtjyw0DvRqfyknyrnecbTEBjdYMSFwexsaFPp0CJ3F0R92HMU+eJMPdcoS/EFuLjv0IPAktpN2Wxd+XHwtOBuZXVINkCnj77AwlQ8p1J0I= Received: from BYAPR07MB4997.namprd07.prod.outlook.com (52.135.238.214) by BYAPR07MB5607.namprd07.prod.outlook.com (20.177.231.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.27; Tue, 9 Oct 2018 14:18:10 +0000 Received: from BYAPR07MB4997.namprd07.prod.outlook.com ([fe80::c5c:4d86:b353:175a]) by BYAPR07MB4997.namprd07.prod.outlook.com ([fe80::c5c:4d86:b353:175a%4]) with mapi id 15.20.1207.024; Tue, 9 Oct 2018 14:18:10 +0000 From: Jerin Jacob To: Wenzhuo Lu , Jingjing Wu , Bernard Iremonger , John McNamara , Marko Kovacevic , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko , Olivier Matz CC: "dev@dpdk.org" , "Jacob, Jerin" Thread-Topic: [dpdk-dev] [PATCH v5 2/4] ethdev: add Tx offload outer UDP checksum definition Thread-Index: AQHUX9rnXSGUg7y+4UGlS8fadNEeqA== Date: Tue, 9 Oct 2018 14:18:09 +0000 Message-ID: <20181009141741.5162-2-jerin.jacob@caviumnetworks.com> References: <20181008160953.32510-1-jerin.jacob@caviumnetworks.com> <20181009141741.5162-1-jerin.jacob@caviumnetworks.com> In-Reply-To: <20181009141741.5162-1-jerin.jacob@caviumnetworks.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [111.93.218.67] x-clientproxiedby: DM5PR21CA0032.namprd21.prod.outlook.com (2603:10b6:3:ed::18) To BYAPR07MB4997.namprd07.prod.outlook.com (2603:10b6:a03:5b::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Jerin.JacobKollanukkaran@cavium.com; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BYAPR07MB5607; 6:O+U80fFfa62A367EPeW1nv8R3sS2t9xT41xYTsgQB5Ib9YgGjQ6MsNLELbZjwlfDXyxixxVZztG+MboS50sktiNAlf5rywmZ8BToDpPQFQcQK+Pb5ES0nhOx76IxDggrkdkMEt6e8mmR7aAV/063y4cgR8q6AyEomQ0cXA7J2goVujuIkShNAqbeQvF7cY1EVaimhIUuqn4fVDuWPsglVXZj0qsrqQ7lhYZl+rOqgoSYz8MSQ7R1vid90Ma2amA7iXOCLh+F2FQ81zGYLwGCNMC6DsFl0MywiwE8+IVrptGqH5u5JVUkfR0bU+2sU2Yi70IDC3ZzoFsJ5/EXXvy8ANT6zqeHLmngwZChfjzWy/b6eLjABL6fwBU2NMJXit3x4rSSb3Y6KKw9Gd3BOSR30DkvztSWkclI1GAK+qstd1LE7J7XpZceJo51ZCrp5JPyqIhT3bVpMNoQaapFe3WnlA==; 5:eHA684jb3+nmJnCafnI/T3nOZ2BppZL3WD0MCtNi/b8Cedi/LhF68OuLAZETK3idJItxOw3jR2FD8V3NC0QTncRSvTagBypJWuk+nenLSkMtxogfuVwuas7NiSpCyALBvCQIyI55fSX99uduPqbPfwCiJapOHk5iX82PQrJu2BY=; 7:sfFejhuhT5BKFbR7Zj7V8QR8itZIQiHi7ZuzMWK6tn/Aom7MUH9Rd8n45yPb3RZ+FvHmr9wcm2qFp/4CtKwP3vFNLvcwF6vy//5pwC6rP79pP2Hcd4x6zv1+iCSfM6pXjqINpfTcwRLNib+u9DszbqxlDXFhfhl/W8kMBUC95cRNLWryyrAux5CYe7YbXUjx4pZipIjl256FY9WmO2yWUucOHpli1asCKh1PTJ3+qMUHOlXAnuFOIjQQZiRpiK9F x-ms-office365-filtering-correlation-id: 62bcfadd-35a8-401f-ace6-08d62df209ef x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BYAPR07MB5607; x-ms-traffictypediagnostic: BYAPR07MB5607: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231355)(944501410)(4982022)(52105095)(3002001)(10201501046)(93006095)(149066)(150057)(6041310)(20161123564045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(201708071742011)(7699051); SRVR:BYAPR07MB5607; BCL:0; PCL:0; RULEID:; SRVR:BYAPR07MB5607; x-forefront-prvs: 08200063E9 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(376002)(346002)(136003)(366004)(396003)(39850400004)(189003)(199004)(4326008)(26005)(1076002)(66066001)(966005)(186003)(14454004)(2906002)(575784001)(316002)(478600001)(102836004)(25786009)(105586002)(6116002)(3846002)(68736007)(107886003)(1857600001)(106356001)(6512007)(81156014)(81166006)(76176011)(11346002)(71200400001)(71190400001)(99286004)(6486002)(7416002)(110136005)(5660300001)(54906003)(42882007)(6306002)(476003)(97736004)(5250100002)(53936002)(8676002)(36756003)(6436002)(14444005)(5024004)(305945005)(486006)(52116002)(256004)(72206003)(446003)(7736002)(2616005)(2900100001)(6506007)(386003)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR07MB5607; H:BYAPR07MB4997.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: NpU7VFsJZ0Vxe+VbNFo9MtXxUfdrAAK4/Pmo7ukcOsgI3S6sxCLxucPVImIljFKOzEgbsbCw8O44uOodtT551XMJIk9nFxmFcrawQbbXP+zzyuvZx1QlSesBNZ0sO1B3f0Btw6tp7RH2gNjP0i80VXyHtT9/xUH5S1Ms374ijNM26eMu5vyM3oIna2mhGxkWuoyHhIyJwNlqXo8WFm9+U02CaNCdG2jganitmwc8jwqOs2JaszOZFhB1O40hEWSGTJDNBcHlx3dOPVYn2h8kNDVQ/29WzEd8IqGewB6IEKPXSdIoVisgiscnpVjVlPgjthify3HNveIzVaCwGQx6eQJU5eDpdARSsge0QTTcFkU= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-Network-Message-Id: 62bcfadd-35a8-401f-ace6-08d62df209ef X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Oct 2018 14:18:09.8573 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR07MB5607 Subject: [dpdk-dev] [PATCH v5 2/4] ethdev: add Tx offload outer UDP checksum definition 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" Introduced DEV_TX_OFFLOAD_OUTER_UDP_CKSUM offload flags and PKT_TX_OUTER_UDP_CKSUM mbuf ol_flags to enable Tx outer UDP checksum offload. To use hardware Tx outer UDP checksum offload, the user needs to, - enable following in mbuf: a) fill outer_l2_len and outer_l3_len in mbuf b) set the PKT_TX_OUTER_UDP_CKSUM flag c) set the flag PKT_TX_OUTER_IPV4 or PKT_TX_OUTER_IPV6 - configure DEV_TX_OFFLOAD_OUTER_UDP_CKSUM offload flags in slow path Signed-off-by: Jerin Jacob Reviewed-by: Andrew Rybchenko --- v4: - Added Reviewed-by: Andrew Rybchenko - Added more description for PKT_TX_OUTER_UDP_CKSUM flag(Andrew Rybchenko) v3: - Git comment corrections (Andrew Rybchenko) s/PKT_TX_OUTER_TCP_CKSUM/PKT_TX_OUTER_UDP_CKSUM/g s/mbuff/mbuf/g v2: - Removed DEV_TX_OFFLOAD_OUTER_TCP_CKSUM and DEV_TX_OFFLOAD_OUTER_SCTP_CKSUM as there is no realworld use case for it. See: http://patches.dpdk.org/patch/44692/ This patch series is depended on http://patches.dpdk.org/patch/45840/ --- app/test-pmd/config.c | 10 ++++++++++ doc/guides/nics/features.rst | 5 +++++ lib/librte_ethdev/rte_ethdev.c | 1 + lib/librte_ethdev/rte_ethdev.h | 2 ++ lib/librte_mbuf/rte_mbuf.c | 1 + lib/librte_mbuf/rte_mbuf.h | 14 +++++++++++++- 6 files changed, 32 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index d53c527e5..5d9745ae5 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -773,6 +773,16 @@ port_offload_cap_display(portid_t port_id) else printf("off\n"); } + + if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_OUTER_UDP_CKSUM) { + printf("TX Outer UDP checksum: "); + if (ports[port_id].dev_conf.txmode.offloads & + DEV_TX_OFFLOAD_OUTER_UDP_CKSUM) + printf("on\n"); + else + printf("off\n"); + } + } int diff --git a/doc/guides/nics/features.rst b/doc/guides/nics/features.rst index 998f67c8e..bc5fff2c1 100644 --- a/doc/guides/nics/features.rst +++ b/doc/guides/nics/features.rst @@ -642,7 +642,12 @@ Supports inner packet L4 checksum. * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``. * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_L4_CKSUM_UNKNOWN`` | ``PKT_RX_OUTER_L4_CKSUM_BAD`` | ``PKT_RX_OUTER_L4_CKSUM_GOOD`` | ``PKT_RX_OUTER_L4_CKSUM_INVALID``. +* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``. +* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``. + ``mbuf.ol_flags:PKT_TX_OUTER_UDP_CKSUM``. +* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``. * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``, + ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``. .. _nic_features_packet_type_parsing: diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index a630c4fda..bb48b5a0f 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -159,6 +159,7 @@ static const struct { RTE_TX_OFFLOAD_BIT2STR(SECURITY), RTE_TX_OFFLOAD_BIT2STR(UDP_TNL_TSO), RTE_TX_OFFLOAD_BIT2STR(IP_TNL_TSO), + RTE_TX_OFFLOAD_BIT2STR(OUTER_UDP_CKSUM), }; #undef RTE_TX_OFFLOAD_BIT2STR diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h index 821d371c3..79d0bb1ed 100644 --- a/lib/librte_ethdev/rte_ethdev.h +++ b/lib/librte_ethdev/rte_ethdev.h @@ -944,6 +944,8 @@ struct rte_eth_conf { * for tunnel TSO. */ #define DEV_TX_OFFLOAD_IP_TNL_TSO 0x00080000 +/** Device supports outer UDP checksum */ +#define DEV_TX_OFFLOAD_OUTER_UDP_CKSUM 0x00100000 #define RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP 0x00000001 /**< Device supports Rx queue setup after device started*/ diff --git a/lib/librte_mbuf/rte_mbuf.c b/lib/librte_mbuf/rte_mbuf.c index c1740ce0c..c59c5bb0d 100644 --- a/lib/librte_mbuf/rte_mbuf.c +++ b/lib/librte_mbuf/rte_mbuf.c @@ -447,6 +447,7 @@ rte_get_tx_ol_flag_list(uint64_t mask, char *buf, size_t buflen) "PKT_TX_TUNNEL_NONE" }, { PKT_TX_MACSEC, PKT_TX_MACSEC, NULL }, { PKT_TX_SEC_OFFLOAD, PKT_TX_SEC_OFFLOAD, NULL }, + { PKT_TX_OUTER_UDP_CKSUM, PKT_TX_OUTER_UDP_CKSUM, NULL }, }; const char *name; unsigned int i; diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h index a453ec008..ba5d02f3e 100644 --- a/lib/librte_mbuf/rte_mbuf.h +++ b/lib/librte_mbuf/rte_mbuf.h @@ -200,6 +200,17 @@ extern "C" { /* add new TX flags here */ +/** + * Outer UDP checksum offload flag. This flag is used for enabling + * outer UDP checksum in PMD. To use outer UDP checksum, the user needs to + * 1) Enable the following in mbuff, + * a) Fill outer_l2_len and outer_l3_len in mbuf. + * b) Set the PKT_TX_OUTER_UDP_CKSUM flag. + * c) Set the PKT_TX_OUTER_IPV4 or PKT_TX_OUTER_IPV6 flag. + * 2) Configure DEV_TX_OFFLOAD_OUTER_UDP_CKSUM offload flag. + */ +#define PKT_TX_OUTER_UDP_CKSUM (1ULL << 41) + /** * UDP Fragmentation Offload flag. This flag is used for enabling UDP * fragmentation in SW or in HW. When use UFO, mbuf->tso_segsz is used @@ -367,7 +378,8 @@ extern "C" { PKT_TX_TUNNEL_MASK | \ PKT_TX_MACSEC | \ PKT_TX_SEC_OFFLOAD | \ - PKT_TX_UDP_SEG) + PKT_TX_UDP_SEG | \ + PKT_TX_OUTER_UDP_CKSUM) /** * Mbuf having an external buffer attached. shinfo in mbuf must be filled. From patchwork Tue Oct 9 14:18:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerin Jacob X-Patchwork-Id: 46387 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 404161B581; Tue, 9 Oct 2018 16:18:19 +0200 (CEST) Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0071.outbound.protection.outlook.com [104.47.38.71]) by dpdk.org (Postfix) with ESMTP id B35221B580 for ; Tue, 9 Oct 2018 16:18:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IWY7UHUVcxtTMW7b2Zxkke09sRHNbo+fjgwADVAv75U=; b=GyONGyti4ER4M7/aJF5sfEBzyq6ZrEpWtmyTJ4/cJUefDAbvtPKTIissBnilqy8wrX+Z9pyjkejT4LbjTnFTQpzutv9gGzlATzn8H4NAQijxXezSuEMEaKIDCjdpEV5LFDfLvmR8rkq7+6q8UrnmUL3japa4vofVlZ6MSU8luLQ= Received: from BYAPR07MB4997.namprd07.prod.outlook.com (52.135.238.214) by BYAPR07MB5352.namprd07.prod.outlook.com (20.177.125.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.23; Tue, 9 Oct 2018 14:18:14 +0000 Received: from BYAPR07MB4997.namprd07.prod.outlook.com ([fe80::c5c:4d86:b353:175a]) by BYAPR07MB4997.namprd07.prod.outlook.com ([fe80::c5c:4d86:b353:175a%4]) with mapi id 15.20.1207.024; Tue, 9 Oct 2018 14:18:14 +0000 From: Jerin Jacob To: Wenzhuo Lu , Jingjing Wu , Bernard Iremonger , John McNamara , Marko Kovacevic CC: "dev@dpdk.org" , "thomas@monjalon.net" , "ferruh.yigit@intel.com" , "arybchenko@solarflare.com" , "olivier.matz@6wind.com" , "Jacob, Jerin" Thread-Topic: [dpdk-dev] [PATCH v5 3/4] app/testpmd: add outer UDP HW checksum support Thread-Index: AQHUX9rqscTauTncdUySLtoy7oNOiA== Date: Tue, 9 Oct 2018 14:18:14 +0000 Message-ID: <20181009141741.5162-3-jerin.jacob@caviumnetworks.com> References: <20181008160953.32510-1-jerin.jacob@caviumnetworks.com> <20181009141741.5162-1-jerin.jacob@caviumnetworks.com> In-Reply-To: <20181009141741.5162-1-jerin.jacob@caviumnetworks.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [111.93.218.67] x-clientproxiedby: DM5PR21CA0032.namprd21.prod.outlook.com (2603:10b6:3:ed::18) To BYAPR07MB4997.namprd07.prod.outlook.com (2603:10b6:a03:5b::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Jerin.JacobKollanukkaran@cavium.com; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BYAPR07MB5352; 6:o3A0PniwrlqYqeP9IaUwTmZ9EdspZ624oNZxap6zD/mQdbfiYFuDqIbffg7qy/api7Q1DYmOJ5MMl60aangvx1WRpHSgg9LPnH+y4ry9dQ1VHDPHschwFCJUiDzLdXherUBPRVyteHSejidza6Phmu5KZ03Qq2lzSGIYOkL+qBOpl1IJd2Or8rw4rg44jX/6sCiDTGeXltwAsOOWQmyhpC0RXcsdAgw171F+o1ltQGv7WJWnukUHruwX7Z1oUWOvNgDWUNOSw1a75vzgew0BSw240Klx/q4VmvpzcbS2nh825zt3a5yTev954QgL90nfXAqDFIaGwp7jFEQgGYJ4N8ge/j+kJyUEe7jMfUwiVW7Wj+GgrJzWx6cGktYM+HxHlnmkexIo/8kjRYlarFd3whNTKloBnIJttu7tXInObkygK+P5X2+3Mz5IJWqb2SJZy44f0vRApQmFQNMOCOGp8g==; 5:2UEbtkeb1nmp9uunwCNmjoP5gzSclxWlpeYbKPWwnmm6zxqPn3vFLzQrem0x8MrIJfsvEr2viN08AkH9SCFzlKlgShzYo6nK2ftMZHwBNdRXzsPWov7vT7l5jNu8w5CkOhiSAv7TRWghn6/yz1lQft/WS9jogwprnMrjKrBKg0c=; 7:v4zF1XZQcv0b2UDin1UfQ/zYl3+W1IvWKJQJxsr7ISyzpqDvvKUfpI2rYHbN0fJR9QzlqUMFSQVEgHnItrCTaG5Y3N0VMGRM9CQvIGvE5qy3G/7z2LhrsHeb9eHQcbolz57n2yjsuh5mpeRnY2tKcx6AHxPuW+NRNhzIxFlifX/lwrcGSTpttSgvmwTSymgFl4n4GSIPqNMWRYoWEUIBtKaRjes6ILEBxGI+iScMsyefcquna8ee6I2Q4CRbAAFl x-ms-office365-filtering-correlation-id: a456a074-5393-4f62-c881-08d62df20cd2 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BYAPR07MB5352; x-ms-traffictypediagnostic: BYAPR07MB5352: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(228905959029699); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(10201501046)(3002001)(3231355)(944501410)(52105095)(149066)(150057)(6041310)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123558120)(20161123560045)(201708071742011)(7699051); SRVR:BYAPR07MB5352; BCL:0; PCL:0; RULEID:; SRVR:BYAPR07MB5352; x-forefront-prvs: 08200063E9 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(396003)(136003)(39860400002)(376002)(346002)(199004)(189003)(102836004)(14444005)(256004)(5660300001)(6486002)(6512007)(53936002)(26005)(4326008)(107886003)(8936002)(2900100001)(81166006)(71200400001)(71190400001)(81156014)(97736004)(106356001)(105586002)(54906003)(110136005)(36756003)(316002)(68736007)(8676002)(25786009)(76176011)(7736002)(7416002)(5250100002)(6506007)(386003)(42882007)(66066001)(1076002)(72206003)(99286004)(6436002)(478600001)(305945005)(14454004)(52116002)(3846002)(1857600001)(2616005)(486006)(186003)(6116002)(11346002)(2906002)(476003)(446003); DIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR07MB5352; H:BYAPR07MB4997.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 42rvvmcLWDkn90XStKVClDzjSlsBWKmhVsudB9dcusIKsexjuH89MiGxyC0U0OpJyz2vBIRmnW7tSy3gyeAvVjgBx8IG9qdCDCFPadaXvuS8IA052WPlMA+Cka5BFqp4F4bE50eGyn2BfnvRRmMhe7wL/iyOjOaMdSefCB57cL880nrG5wVsAfYvUozqdeMCo/1rtj/anc6Jvq+5uIVN8lpg5zRomg5tuamACb7OYJ61h3ndsGF03bA5VYUCxWRU79/Rmf5DOs0NYbOID9FUQwc6PZs+u9CRXkwHxY9kOE1yCXAMAmTC4mIn06sIAlQ3IjfWKD9VbIS+qn4+4hAz6vMIOjG8L2U565OdMULjKy4= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-Network-Message-Id: a456a074-5393-4f62-c881-08d62df20cd2 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Oct 2018 14:18:14.6542 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR07MB5352 Subject: [dpdk-dev] [PATCH v5 3/4] app/testpmd: add outer UDP HW checksum support 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" Added outer-udp Tx HW checksum support for csum forward engine if device supports DEV_TX_OFFLOAD_OUTER_UDP_CKSUM. Signed-off-by: Jerin Jacob Acked-by: Bernard Iremonger --- app/test-pmd/cmdline.c | 24 ++++++++++++++++++--- app/test-pmd/csumonly.c | 13 +++++++++-- doc/guides/testpmd_app_ug/testpmd_funcs.rst | 8 +++++-- 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 0c5399dc4..2fd007423 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -397,12 +397,13 @@ static void cmd_help_long_parsed(void *parsed_result, " Disable hardware insertion of a VLAN header in" " packets sent on a port.\n\n" - "csum set (ip|udp|tcp|sctp|outer-ip) (hw|sw) (port_id)\n" + "csum set (ip|udp|tcp|sctp|outer-ip|outer-udp) (hw|sw) (port_id)\n" " Select hardware or software calculation of the" " checksum when transmitting a packet using the" " csum forward engine.\n" " ip|udp|tcp|sctp always concern the inner layer.\n" " outer-ip concerns the outer IP layer in" + " outer-udp concerns the outer UDP layer in" " case the packet is recognized as a tunnel packet by" " the forward engine (vxlan, gre and ipip are supported)\n" " Please check the NIC datasheet for HW limits.\n\n" @@ -4177,6 +4178,8 @@ csum_show(int port_id) (tx_offloads & DEV_TX_OFFLOAD_SCTP_CKSUM) ? "hw" : "sw"); printf("Outer-Ip checksum offload is %s\n", (tx_offloads & DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM) ? "hw" : "sw"); + printf("Outer-Udp checksum offload is %s\n", + (tx_offloads & DEV_TX_OFFLOAD_OUTER_UDP_CKSUM) ? "hw" : "sw"); /* display warnings if configuration is not supported by the NIC */ rte_eth_dev_info_get(port_id, &dev_info); @@ -4205,6 +4208,12 @@ csum_show(int port_id) printf("Warning: hardware outer IP checksum enabled but not " "supported by port %d\n", port_id); } + if ((tx_offloads & DEV_TX_OFFLOAD_OUTER_UDP_CKSUM) && + (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_OUTER_UDP_CKSUM) + == 0) { + printf("Warning: hardware outer UDP checksum enabled but not " + "supported by port %d\n", port_id); + } } static void @@ -4273,6 +4282,15 @@ cmd_csum_parsed(void *parsed_result, printf("Outer IP checksum offload is not " "supported by port %u\n", res->port_id); } + } else if (!strcmp(res->proto, "outer-udp")) { + if (hw == 0 || (dev_info.tx_offload_capa & + DEV_TX_OFFLOAD_OUTER_UDP_CKSUM)) { + csum_offloads |= + DEV_TX_OFFLOAD_OUTER_UDP_CKSUM; + } else { + printf("Outer UDP checksum offload is not " + "supported by port %u\n", res->port_id); + } } if (hw) { @@ -4296,7 +4314,7 @@ cmdline_parse_token_string_t cmd_csum_mode = mode, "set"); cmdline_parse_token_string_t cmd_csum_proto = TOKEN_STRING_INITIALIZER(struct cmd_csum_result, - proto, "ip#tcp#udp#sctp#outer-ip"); + proto, "ip#tcp#udp#sctp#outer-ip#outer-udp"); cmdline_parse_token_string_t cmd_csum_hwsw = TOKEN_STRING_INITIALIZER(struct cmd_csum_result, hwsw, "hw#sw"); @@ -4307,7 +4325,7 @@ cmdline_parse_token_num_t cmd_csum_portid = cmdline_parse_inst_t cmd_csum_set = { .f = cmd_csum_parsed, .data = NULL, - .help_str = "csum set ip|tcp|udp|sctp|outer-ip hw|sw : " + .help_str = "csum set ip|tcp|udp|sctp|outer-ip|outer-udp hw|sw : " "Enable/Disable hardware calculation of L3/L4 checksum when " "using csum forward engine", .tokens = { diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c index 494829266..ea5b112d6 100644 --- a/app/test-pmd/csumonly.c +++ b/app/test-pmd/csumonly.c @@ -468,10 +468,15 @@ process_outer_cksums(void *outer_l3_hdr, struct testpmd_offload_info *info, if (info->outer_l4_proto != IPPROTO_UDP) return ol_flags; + /* Skip SW outer UDP checksum generation if HW supports it */ + if (tx_offloads & DEV_TX_OFFLOAD_OUTER_UDP_CKSUM) { + ol_flags |= PKT_TX_OUTER_UDP_CKSUM; + return ol_flags; + } + udp_hdr = (struct udp_hdr *)((char *)outer_l3_hdr + info->outer_l3_len); - /* outer UDP checksum is done in software as we have no hardware - * supporting it today, and no API for it. In the other side, for + /* outer UDP checksum is done in software. In the other side, for * UDP tunneling, like VXLAN or Geneve, outer UDP checksum can be * set to zero. * @@ -826,6 +831,8 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) if (info.tunnel_tso_segsz || (tx_offloads & DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM) || + (tx_offloads & + DEV_TX_OFFLOAD_OUTER_UDP_CKSUM) || (tx_ol_flags & PKT_TX_OUTER_IPV6)) { m->outer_l2_len = info.outer_l2_len; m->outer_l3_len = info.outer_l3_len; @@ -898,6 +905,8 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) if (info.is_tunnel == 1) { if ((tx_offloads & DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM) || + (tx_offloads & + DEV_TX_OFFLOAD_OUTER_UDP_CKSUM) || (tx_ol_flags & PKT_TX_OUTER_IPV6)) printf("tx: m->outer_l2_len=%d " "m->outer_l3_len=%d\n", diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 3a73000a6..cfcabf6f0 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -857,7 +857,7 @@ csum set Select hardware or software calculation of the checksum when transmitting a packet using the ``csum`` forwarding engine:: - testpmd> csum set (ip|udp|tcp|sctp|outer-ip) (hw|sw) (port_id) + testpmd> csum set (ip|udp|tcp|sctp|outer-ip|outer-udp) (hw|sw) (port_id) Where: @@ -867,6 +867,10 @@ Where: as a tunnel packet by the forwarding engine (vxlan, gre and ipip are supported). See also the ``csum parse-tunnel`` command. +* ``outer-udp`` relates to the outer UDP layer in the case where the packet is recognized + as a tunnel packet by the forwarding engine (vxlan, vxlan-gpe are + supported). See also the ``csum parse-tunnel`` command. + .. note:: Check the NIC Datasheet for hardware limits. @@ -940,7 +944,7 @@ Consider a packet in packet like the following:: * If parse-tunnel is enabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set`` command relate to the inner headers (here ``ipv4_in`` and ``tcp_in``), and the - ``outer-ip parameter`` relates to the outer headers (here ``ipv4_out``). + ``outer-ip|outer-udp`` parameter relates to the outer headers (here ``ipv4_out`` and ``udp_out``). * If parse-tunnel is disabled, the ``ip|udp|tcp|sctp`` parameters of ``csum set`` command relate to the outer headers, here ``ipv4_out`` and ``udp_out``. From patchwork Tue Oct 9 14:18:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerin Jacob X-Patchwork-Id: 46388 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 39CB31B589; Tue, 9 Oct 2018 16:18:23 +0200 (CEST) Received: from NAM03-DM3-obe.outbound.protection.outlook.com (mail-dm3nam03on0061.outbound.protection.outlook.com [104.47.41.61]) by dpdk.org (Postfix) with ESMTP id EEBA01B589 for ; Tue, 9 Oct 2018 16:18:21 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZDV6FP1yXYrY3hT8k5OssaeHXoRniyfjKLJeLCHeHWw=; b=d947WJ6+ENALNMrGvItirCdiN9Swl2vqHz1/lPFJdGOcgHvOXpvZHer8T4+qr3NU6Oad2eGZEUwuYZ56E1Q34H78OdavJNNu4YlaIsTXtRpl9jQfYckFvXRkPJRaxybRLHWzasPJCLY7mQKzH7rlbKK+EGWHFuhC6cxUcM7YY2Y= Received: from BYAPR07MB4997.namprd07.prod.outlook.com (52.135.238.214) by BYAPR07MB4182.namprd07.prod.outlook.com (52.135.222.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1207.28; Tue, 9 Oct 2018 14:18:19 +0000 Received: from BYAPR07MB4997.namprd07.prod.outlook.com ([fe80::c5c:4d86:b353:175a]) by BYAPR07MB4997.namprd07.prod.outlook.com ([fe80::c5c:4d86:b353:175a%4]) with mapi id 15.20.1207.024; Tue, 9 Oct 2018 14:18:19 +0000 From: Jerin Jacob To: Wenzhuo Lu , Jingjing Wu , Bernard Iremonger CC: "dev@dpdk.org" , "thomas@monjalon.net" , "ferruh.yigit@intel.com" , "arybchenko@solarflare.com" , "olivier.matz@6wind.com" , "Jacob, Jerin" Thread-Topic: [dpdk-dev] [PATCH v5 4/4] app/testpmd: collect bad outer L4 checksum for csum engine Thread-Index: AQHUX9rtpMFhfgW13UuFfN5J46nyJg== Date: Tue, 9 Oct 2018 14:18:18 +0000 Message-ID: <20181009141741.5162-4-jerin.jacob@caviumnetworks.com> References: <20181008160953.32510-1-jerin.jacob@caviumnetworks.com> <20181009141741.5162-1-jerin.jacob@caviumnetworks.com> In-Reply-To: <20181009141741.5162-1-jerin.jacob@caviumnetworks.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [111.93.218.67] x-clientproxiedby: DM5PR21CA0032.namprd21.prod.outlook.com (2603:10b6:3:ed::18) To BYAPR07MB4997.namprd07.prod.outlook.com (2603:10b6:a03:5b::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Jerin.JacobKollanukkaran@cavium.com; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BYAPR07MB4182; 6:xkNGEyWMnXHBEfXbHuzbvs2aDVEjSOwmQVIqLbWfUBfTrCJRowHRM2nfEYoEvWSkcRaCMomviU86JehLKupm9sBtQpeXt5QaQ3iLAlK1V8xi+0RS3AwGDoBhXeaDu9UdtAl8nvsVe6PbFZGGk429Ncrpep9KzKxjCEaIBiQ/CNDiATi2BvZmnsn8lCczfJx38cD331XLGIHbeR6+5MCTD0F2bhhJ3zCkPdEiHIBPI57g46tJ6W5Fgd0Y4kzXiWfRm3VhsfpoahNVtTaas4kXhyqquX6zgr1tdyPc9z7Ilrx7O8qiiJm+BLN+JDRRts37P69/LzqetVbWxqIMoZ/9plB4cFjg/ley2a75RWtKa+yhwxZ1rj6DOa8Ri1viosr+QszG1MIWmHjZ5Fzv4/vIe8e4xkoXC1wFUIMbdrAQTsP9PNQkY24IYaq7hsTKwRYyrjVIOAhpQN+Df5nctRXJ8Q==; 5:y3O+aVlWOg52S1tZLaKzY8lAsCjW8hn5GYckCc0UTOYdqyyEqdBFNInxZw+A8ngTKkq7xkojsJdpzd/0YAnpGGMK4dfxNdAXj2f+2ERZ0FfsGyOsZ7KeMaLD+u5etC5ntlfbTV60bsDufWFIMdHUPPoF/LauFf1bbGOd04Tt9Gs=; 7:lp9J6xvGAFYonAzVd350o62iUOxEC0aG1akoj4K+jeEUlMKNh2xKi/6+6kn+7NvhPHbe21fHu2/m/PkPUkPEbac+4d6rfAUrvi4AZGHJe1U57CwK3DXCHm3NX7LI/V4Qn3X2D8sPTu6yn5Ld/kmoEDl4XModad+WhxLAxrSQd3Sv7TJ7crPlzF3H3t76ChyBa2HsdnawMFE1o3ZETFa8rMoxEdne3ig/EeGvnrexN3VjkFgNo0Ii8PhLaPWC/8EB x-ms-office365-filtering-correlation-id: 7ea70dcd-4a87-4b47-0e53-08d62df20f60 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BYAPR07MB4182; x-ms-traffictypediagnostic: BYAPR07MB4182: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(228905959029699); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(10201501046)(3231355)(944501410)(52105095)(93006095)(3002001)(149066)(150057)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051)(76991055); SRVR:BYAPR07MB4182; BCL:0; PCL:0; RULEID:; SRVR:BYAPR07MB4182; x-forefront-prvs: 08200063E9 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(136003)(366004)(39850400004)(376002)(346002)(189003)(199004)(106356001)(186003)(6116002)(575784001)(14454004)(6506007)(66066001)(2906002)(52116002)(446003)(26005)(1857600001)(476003)(72206003)(2616005)(99286004)(3846002)(486006)(1076002)(102836004)(386003)(76176011)(478600001)(11346002)(42882007)(5250100002)(81166006)(110136005)(2900100001)(53936002)(81156014)(6486002)(97736004)(8936002)(54906003)(256004)(107886003)(316002)(25786009)(36756003)(68736007)(6512007)(105586002)(305945005)(6436002)(5660300001)(4326008)(7736002)(8676002)(71200400001)(71190400001); DIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR07MB4182; H:BYAPR07MB4997.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 0TOCcvH5SSBXSVJV4S42cMwqynaf/36tRbRbKwIkZAnFA1606xGYR0AmJ3WaetYTxi4Vx4V/HVtacymBOkhXatJmwFXwnxImag6y2sb6YoN3FyP44idlDYt87JH2jOSaypipsQOzWHDucKfSuWCyqPaZVfTmCAe2om54DlaCGOYQ7H7rPCo0qwtjtpQgf7dHJxTRJCIsgb4w5YxxW7sczZ6SjOme0j01eGsqCbXdELYSu4FVjqTgTOPepbMQo5Z39r/lFZmiPtLAIB6ziiKWuWv8/JQfuaWxylCXyCNNkDUi4xOLZyihbeuAAdK7sTrMGfxKQ85dUIcQ1jVOFXxw0b2WZM23+p4t9o83IUksx4E= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7ea70dcd-4a87-4b47-0e53-08d62df20f60 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Oct 2018 14:18:18.8886 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR07MB4182 Subject: [dpdk-dev] [PATCH v5 4/4] app/testpmd: collect bad outer L4 checksum for csum engine 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" Collect and prints the statistics for PKT_RX_EL4_CKSUM_BAD errors. Signed-off-by: Jerin Jacob Reviewed-by: Andrew Rybchenko Acked-by: Bernard Iremonger --- app/test-pmd/csumonly.c | 5 +++++ app/test-pmd/testpmd.c | 18 +++++++++++++----- app/test-pmd/testpmd.h | 4 ++++ 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c index ea5b112d6..dce4b9be7 100644 --- a/app/test-pmd/csumonly.c +++ b/app/test-pmd/csumonly.c @@ -701,6 +701,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) uint32_t retry; uint32_t rx_bad_ip_csum; uint32_t rx_bad_l4_csum; + uint32_t rx_bad_outer_l4_csum; struct testpmd_offload_info info; uint16_t nb_segments = 0; int ret; @@ -726,6 +727,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) fs->rx_packets += nb_rx; rx_bad_ip_csum = 0; rx_bad_l4_csum = 0; + rx_bad_outer_l4_csum = 0; gro_enable = gro_ports[fs->rx_port].enable; txp = &ports[fs->tx_port]; @@ -753,6 +755,8 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) rx_bad_ip_csum += 1; if ((rx_ol_flags & PKT_RX_L4_CKSUM_MASK) == PKT_RX_L4_CKSUM_BAD) rx_bad_l4_csum += 1; + if (rx_ol_flags & PKT_RX_OUTER_L4_CKSUM_BAD) + rx_bad_outer_l4_csum += 1; /* step 1: dissect packet, parsing optional vlan, ip4/ip6, vxlan * and inner headers */ @@ -991,6 +995,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) fs->tx_packets += nb_tx; fs->rx_bad_ip_csum += rx_bad_ip_csum; fs->rx_bad_l4_csum += rx_bad_l4_csum; + fs->rx_bad_outer_l4_csum += rx_bad_outer_l4_csum; #ifdef RTE_TEST_PMD_RECORD_BURST_STATS fs->tx_burst_stats.pkt_burst_spread[nb_tx]++; diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 001f0e552..2a641fcfe 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -1040,8 +1040,9 @@ fwd_port_stats_display(portid_t port_id, struct rte_eth_stats *stats) (uint64_t) (stats->ipackets + stats->imissed)); if (cur_fwd_eng == &csum_fwd_engine) - printf(" Bad-ipcsum: %-14"PRIu64" Bad-l4csum: %-14"PRIu64" \n", - port->rx_bad_ip_csum, port->rx_bad_l4_csum); + printf(" Bad-ipcsum: %-14"PRIu64" Bad-l4csum: %-14"PRIu64"Bad-outer-l4csum: %-14"PRIu64"\n", + port->rx_bad_ip_csum, port->rx_bad_l4_csum, + port->rx_bad_outer_l4_csum); if ((stats->ierrors + stats->rx_nombuf) > 0) { printf(" RX-error: %-"PRIu64"\n", stats->ierrors); printf(" RX-nombufs: %-14"PRIu64"\n", stats->rx_nombuf); @@ -1059,8 +1060,9 @@ fwd_port_stats_display(portid_t port_id, struct rte_eth_stats *stats) (uint64_t) (stats->ipackets + stats->imissed)); if (cur_fwd_eng == &csum_fwd_engine) - printf(" Bad-ipcsum:%14"PRIu64" Bad-l4csum:%14"PRIu64"\n", - port->rx_bad_ip_csum, port->rx_bad_l4_csum); + printf(" Bad-ipcsum:%14"PRIu64" Bad-l4csum:%14"PRIu64" Bad-outer-l4csum: %-14"PRIu64"\n", + port->rx_bad_ip_csum, port->rx_bad_l4_csum, + port->rx_bad_outer_l4_csum); if ((stats->ierrors + stats->rx_nombuf) > 0) { printf(" RX-error:%"PRIu64"\n", stats->ierrors); printf(" RX-nombufs: %14"PRIu64"\n", @@ -1124,7 +1126,9 @@ fwd_stream_stats_display(streamid_t stream_id) /* if checksum mode */ if (cur_fwd_eng == &csum_fwd_engine) { printf(" RX- bad IP checksum: %-14u Rx- bad L4 checksum: " - "%-14u\n", fs->rx_bad_ip_csum, fs->rx_bad_l4_csum); + "%-14u Rx- bad outer L4 checksum: %-14u\n", + fs->rx_bad_ip_csum, fs->rx_bad_l4_csum, + fs->rx_bad_outer_l4_csum); } #ifdef RTE_TEST_PMD_RECORD_BURST_STATS @@ -1378,6 +1382,7 @@ start_packet_forwarding(int with_tx_first) fwd_streams[sm_id]->fwd_dropped = 0; fwd_streams[sm_id]->rx_bad_ip_csum = 0; fwd_streams[sm_id]->rx_bad_l4_csum = 0; + fwd_streams[sm_id]->rx_bad_outer_l4_csum = 0; #ifdef RTE_TEST_PMD_RECORD_BURST_STATS memset(&fwd_streams[sm_id]->rx_burst_stats, 0, @@ -1483,6 +1488,9 @@ stop_packet_forwarding(void) ports[fwd_streams[sm_id]->rx_port].rx_bad_l4_csum = rx_bad_l4_csum; + ports[fwd_streams[sm_id]->rx_port].rx_bad_outer_l4_csum += + fwd_streams[sm_id]->rx_bad_outer_l4_csum; + #ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES fwd_cycles = (uint64_t) (fwd_cycles + fwd_streams[sm_id]->core_cycles); diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index a1f661472..106aeefc2 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -112,6 +112,8 @@ struct fwd_stream { unsigned int fwd_dropped; /**< received packets not forwarded */ unsigned int rx_bad_ip_csum ; /**< received packets has bad ip checksum */ unsigned int rx_bad_l4_csum ; /**< received packets has bad l4 checksum */ + unsigned int rx_bad_outer_l4_csum; + /**< received packets has bad outer l4 checksum */ unsigned int gro_times; /**< GRO operation times */ #ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES uint64_t core_cycles; /**< used for RX and TX processing */ @@ -165,6 +167,8 @@ struct rte_port { void *fwd_ctx; /**< Forwarding mode context */ uint64_t rx_bad_ip_csum; /**< rx pkts with bad ip checksum */ uint64_t rx_bad_l4_csum; /**< rx pkts with bad l4 checksum */ + uint64_t rx_bad_outer_l4_csum; + /**< rx pkts with bad outer l4 checksum */ uint8_t tx_queue_stats_mapping_enabled; uint8_t rx_queue_stats_mapping_enabled; volatile uint16_t port_status; /**< port started or not */