From patchwork Fri Apr 27 12:20:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Scheurich X-Patchwork-Id: 905708 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=ericsson.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ericsson.com header.i=@ericsson.com header.b="Y38UKMgY"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ericsson.com header.i=@ericsson.com header.b="L8gxT26u"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40XY3S3xy1z9s02 for ; Fri, 27 Apr 2018 22:22:28 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 13744941; Fri, 27 Apr 2018 12:21:00 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id B40B08A6 for ; Fri, 27 Apr 2018 12:20:56 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from sessmg22.ericsson.net (sessmg22.ericsson.net [193.180.251.58]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 56F7CF8 for ; Fri, 27 Apr 2018 12:20:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; d=ericsson.com; s=mailgw201801; c=relaxed/simple; q=dns/txt; i=@ericsson.com; t=1524831652; h=From:Sender:Reply-To:Subject:Date:Message-ID:To:CC:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=oeIMv0RkdkTGTn/ajTT3BAxoKi5C3cOrUy1FP5K4ew4=; b=Y38UKMgYOqko/k7Knz6hN6Klg8jbmLJ4W3+VYhihJrMhlKGLCj9IqtAjknVCl+1Q B6SbwtxLtspE/aarx/btkx9DfNIDDoaSH0cGFzKg4613DJGBC2vAvLiSveCkca92 APqpHtFtjGnh/Of5p1NNyuAgejBBmbCuoDOYhcqCVSs=; X-AuditID: c1b4fb3a-112a09c00000729c-68-5ae315a4dce7 Received: from ESESSHC011.ericsson.se (Unknown_Domain [153.88.183.51]) by sessmg22.ericsson.net (Symantec Mail Security) with SMTP id D7.8D.29340.4A513EA5; Fri, 27 Apr 2018 14:20:52 +0200 (CEST) Received: from ESESBMR505.ericsson.se (153.88.183.201) by ESESSHC011.ericsson.se (153.88.183.51) with Microsoft SMTP Server (TLS) id 14.3.382.0; Fri, 27 Apr 2018 14:20:50 +0200 Received: from ESESBMB501.ericsson.se (153.88.183.168) by ESESBMR505.ericsson.se (153.88.183.201) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1466.3; Fri, 27 Apr 2018 14:20:50 +0200 Received: from EUR02-HE1-obe.outbound.protection.outlook.com (153.88.183.157) by ESESBMB501.ericsson.se (153.88.183.168) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1466.3 via Frontend Transport; Fri, 27 Apr 2018 14:20:50 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Df6wQ90Mea1c6NIKgdHUlNJvOw1I7uCXQG3SbqTiph8=; b=L8gxT26ufSe5XpRgAxdN546iOoMI+sS2wHhjTPwd/U8fPo9TNXWR64LNCvBhXUVZ1Uvmos5M54TKGci4bmspZ3h1DMkPYJqyiF2+3hJ8i3MULV9tfS5ZObx1SwStwnoQzWHrLRiuLZymKYQIHSAWGmM2hFYRVaGmC13elHicFV8= Received: from ubuntu.eed.ericsson.se (129.192.10.2) by AM3PR07MB0646.eurprd07.prod.outlook.com (2a01:111:e400:8837::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.735.5; Fri, 27 Apr 2018 12:20:47 +0000 From: Jan Scheurich To: Date: Fri, 27 Apr 2018 14:20:32 +0200 Message-ID: <1524831634-7955-2-git-send-email-jan.scheurich@ericsson.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1524831634-7955-1-git-send-email-jan.scheurich@ericsson.com> References: <1524831634-7955-1-git-send-email-jan.scheurich@ericsson.com> MIME-Version: 1.0 X-Originating-IP: [129.192.10.2] X-ClientProxiedBy: HE1PR02CA0117.eurprd02.prod.outlook.com (2603:10a6:7:29::46) To AM3PR07MB0646.eurprd07.prod.outlook.com (2a01:111:e400:8837::20) X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:AM3PR07MB0646; X-Microsoft-Exchange-Diagnostics: 1; AM3PR07MB0646; 3:YrcEKL5q9qNCPAVKJMknjy/PjuC2Jc3ySyV2rRurLN2+cAzRFWlcHZQv/pqzpQGPhzzP2K370bUWnO6AxDXL6Ibhc9k3bnE/kSgrjCi9DFIZKAi64C156ihulAXkDAy+nFZETgEx+n1O2mlcllaCRM5/cPigDgjDAiyMTseLCeRj6plmDvOdWXntUVF7fFclVF6n1cE6KhDurGCuBBrnxJj7WaBy42JOKXSzdvamUORkBScXoFLIhopHIxHfciMz; 25:0p4E1lgU2RA57i4wamcoUCnvXbKbi/W2e/FtZryZztTqH/3BJ5vNecqeDqUqu8lBQafL5MpOI/IjeLWbUTiSGPiaykq69yF817xXFrxLJlAod5AsaUGyMcxk3oVaZrNdw0daVcSIb1ooBcHRFr3arkNhCWqkjFj2TLlucqVCuA45u5zr7ysLDbDlwAW4AXVko4kUvWfHKPoQbvjgnKXBiOQ+dJAV0PCgKr2ssVw3CdSxMnFchRT92VsHkzP69DL/Ga/s8TvW/FX0iBHZtIjZor/ve4vtraEa4bIfy1O+QKPSEaYibHj1Ynw//Vv2ymhONOFSavNWLcn8PQSRwjvNtvCA8yBAqhEsVMT7uLXq2oQ=; 31:rDCWGOI6ReF4k1b5JKb+KBfagwq8sK86WnWso8i6dL3KbA8NOGMMh+AaBasCgoHEnd4By6G80JUf37AUYVCY76NrKbavGrURoSY5BQ5zCeOYwA1TQA2Sqw+yJ8PhaQAL6TGa0028uJRuZCUD5Hzsi2yc2G/KmDPsW/tkK7ionR6CdRFVXgA1hA0RbfcLw0/RkkmAebZsJR/T0yrlUfpeayD6aWFasICk+TN8SrQgtqc= X-MS-TrafficTypeDiagnostic: AM3PR07MB0646: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jan.scheurich@ericsson.com; X-Microsoft-Exchange-Diagnostics: 1; AM3PR07MB0646; 20:TtsKwqSNXPenyZB3ERgUWjDWtRjiFKrXrKZ5xwRuid0CIUUED2xGwgMszDXMb9Zg2jJ1f3p0DpQ28ZlJyNwcnx3Y4BbdLXbJ3f+n3ug4diPwnZY6sR7nQyVCGHKrIBM3FgX+mZn/qC6/wU35+IXVbT1L2BTXKKjxFlScbLUSWIcC0BPT6W4Bx75YeC6rJhInd1hTlnSKGjS8OxKoDDgLsooJ9qOTHPCFelUUnngABGE5ej485bukgPT/9AenYwovSMFssqCEZIJegzXKQ9kb24A9oHxxYWCxdNwMlSzhz6xCFKd3sztGFQGoGlL7FNJOVy78I1B34xCgqlXakrG1PNy/JgbC8YgE1cms5C0forf8HS0p/dxdVoKA2+lPjNyt9Z5bvNym4QYpSw0ZjOaTutYkr9Suu9eJOccFVMMGpd93RtQ+FEe75HS5kC5yb5OF7RvznPe1l/nSChUbbCESPRShJNa4xx3UpUHrp/bH8icIkVecLJnqwo9TSzNmjmV7; 4:B2WD844SnV4h7Ml/yYdWt1ZYHzrcyuQf2t54iyT4WAgWardpDTm0DzICQmsRz67SZ1waFgpYB73CZKWbs9xTXpHDqblV3urqZipfeOjBMAiFwEPl3ykP4afL8rf7g+5LpCbvDDbYIOEBD3oecp2ZlCpGuYLotXZP7SGEp10wPNRszm9ih241UUaglWf+7IMSlDzY3v/FpRKulgqDzTwj9vMsCN7PyJtyx4gTPrbhYi5J9S2yY/uwmPC18YmwCrP5+PFIdJSekMGMnufUEzKBXQrBKI1WbYT+aqTKw+nJgr5G5BvgaLB0rMSQZU7al/El X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(37575265505322); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(10201501046)(3231232)(944501410)(52105095)(3002001)(93006095)(93001095)(6041310)(20161123562045)(20161123558120)(20161123560045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:AM3PR07MB0646; BCL:0; PCL:0; RULEID:; SRVR:AM3PR07MB0646; X-Forefront-PRVS: 0655F9F006 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(376002)(346002)(39860400002)(366004)(396003)(39380400002)(199004)(189003)(11346002)(16586007)(486006)(44832011)(2616005)(36756003)(476003)(316002)(51416003)(26005)(52116002)(956004)(446003)(76176011)(15760500003)(50466002)(47776003)(48376002)(16526019)(2906002)(105586002)(186003)(2361001)(66066001)(2351001)(25786009)(106356001)(478600001)(3846002)(86362001)(8936002)(68736007)(81166006)(81156014)(50226002)(305945005)(6116002)(97736004)(8676002)(7736002)(107886003)(6666003)(6916009)(386003)(6506007)(4326008)(53936002)(5660300001)(6512007)(6486002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM3PR07MB0646; H:ubuntu.eed.ericsson.se; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM3PR07MB0646; 23:QG7MnNijxFgGTMKtWpKjOcQm5gBnUJkwkuE55ZTOE?= UrL83+oYJnenwEwteMEcpDbgnqoi/ojAfnN3zj4tQtgPZ8SvgyP8E6g41Wr0iJCIenKjJPUN17SCAJYiu33kWb2OW8Wg9E+UzdIJoEZLj3fBFFD6ZPDufcB9EWtkgQFM5WSTScBdiwLfq5EClVyU5bW2JAAsGCNdjkoAYn6SS/SdukP9Zv/hSeIr4eUWTO1dSyDoh5Nb4yhj+Fm5W0s6orxcW9ODafNX8not09Jx8WSmj0xVgAQOiYWFeqrv0PdOq9WpiTp8Hq2eswvlX46na7KLFfKOZFWW4cl//nIoaKGQ/pHuXJm0WQFSj4QENihxSeORPH3/wAsJtkMrnDzjFhL1yEPbJClu5kf8U2aSQCKrD62wfD0SsWmGwyJh89iGnGNE4VaXRC5xB8Sk4Adz7mynVfJ7/jzBfU7Ru4iY5dTMBNKI/THeR59zoNXqmkRI772maU+DU0pIQgngtV+8gnSoUHVKsXzBrVfAdZ5oGjo4KaNPKn2czdo5yoyBFfIsna3gajyFEMKrWCTGGgQrKPhL4eEj6GGEz6YA4WC2HzwF2AuYh9KkBIq8sCtzCbEm81kKCiFxREx1V4UG/Ds420Fb6JobTs9ihzPpzZufOpsAvFKZjjl5TzeU21XnVnQe1X6vCf60LtTALEkuzPRagnSqEBI4orxE3fkJQclDwQwLavd9lyk1OoU13rqxeQGeGYHXbLevmw5aa775pkzlbX+Gs49CTj35pLPx8EGHRz7AH8rQAT+TxmaTNA55cJYEWiYGmm//PUISs816tLAEk4wnpBYlIv2XrQvtT0khZnnIOkZQnT44f97t/UQgdBwvQpQrk1hAE2Pex9dVM0B1PcefIa+84vFv0UeQqLLqeiunx/NQPaayu6fJROEZzDA7i4HtYQduItKw8J4V+u6cFO7hJTs0Yxoirw7Tq4ORU6A/c5T2b19r9xybCHx8oBYHhSgp4I3HjfcervMuC6/NuPrrO4gqgLfl5Szd/G0+x8+NhzsWqoGofGbEQRRfWcrQKCSuekHv3LFGbq7ZuhH8T2f5gwl8W46d6DbKhZy3pogZ4+oFhVu+YqI9tQzuqmRQf/GIV+UrOGlc8P52x+Ykfa7OSiZOk1DUAGQ8h1VsHxxm8jG+/bAI2XIxi4BZe3G28l3JfvC9W1kdGldXBFOJn/XhBduSPxhJShq3wMrDKGcSzsMB/0KqArPrUtipWxx5tNagLmLtkjde4N7PJKeTKyVkPZabHaby9wTqs+GuKh+hA== X-Microsoft-Antispam-Message-Info: r1129LlBnIoziJjh9Q1chaazTyHgN2aWvjqR1CWqhfnga+gBhMqxRSKhxHg+KmUnJEcoVc+/A4pZ+fxhnWbtB+E8jrlji0t847YSFiZRQLp+qpug7/ysLg3lzVvkClZxU248aCkFf+IidJosDuO0XlVB6WUMrGmWaZ0MxJj4oMCiuw/eLXmMsrVUzbFCZ32s X-Microsoft-Exchange-Diagnostics: 1; AM3PR07MB0646; 6:N2Svnexn09jAKuYXuopF+WlN1tvtqe1Y5nevQF05sO3N+vR3iYSHfhvFvLqZeP6T+JuMA3yBsAgZBNiG+XRMSi71IbvWD5BT+TKk0QD42CBntPHLZ+O+YLzoxMD5v3m0YeOA2MY3mSCcJl7ZaNievPbvxjiklzy3pftxVlZFVDJZp5Js2Nz8tn153HLf6tTyYopxuI5lOwS+B/Xq7nLF1Mszl5czUB5KIv7VZ7jIhzkEfNmSF0RMetZz663gXGDi4niMSjkXQYJ7hqixikO5YRddn7FIoPdiOlRQAbleu1QJiZ6dUWgt0gCmXxxGTC8U0n2JAaBRhZbTqIkZ3pQZ0mbW2vLr5k7mU2Q412O7oF+NFz47mJ6ta/72yaSsLao6sWRXrsNAfKib9gY1/9qo92Mx90wOoHwwd5AdZRTL86k82ci/uP7TXrVYiiDBgRqXjJWsCRS28mhsrL7hwhtZkw==; 5:xiP1UlymbQySEub2lgmmcfQl869qr9/tiMUp4q1DROaOww86yd+UYOa/79lFZMXBk8XCFJNlMCD3a8DLf67UzMr43qxB0qT9o9NYnVsQmcHzoTq9+IjP3eBrqDh//SbqpZqotsduFdPAnm52LZyR1UxxJuicIAxm4fC+Eopab80=; 24:N0Jrds7eLGplWeMZuETWaH6X5PHdRQJd/McXx9rFX2hHYA1sv4SmPB40bZke/L4iNrI+ThF6ZaUC8d6FK5LkpJITkMUqjCENb0EAzjYDrKg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM3PR07MB0646; 7:/Ejmb0Y68GlnfMHschrgfLNtzoK6sp+gxUbcrpAQy+Nle64QEJ3BV4kLFL6gAQ+f4xq+jgFyAan1OW+r5PyFzYIjtt2fPtDXRwaEPwnr1LqD0mR21CGifxTZixTpQpqgIQcX3908GPoVIMh886Fj8C+h24UTQEXZE4vyVZe18ZUQ4udtp+ir0h40UKuwH2bZntvf43qmV5iGkORQeYgoLANbNl1H4Upr4v9UKrm3gxSF0rYrih7yzQXAQlowhvQb X-MS-Office365-Filtering-Correlation-Id: 2740f11f-1a94-49b4-c7c3-08d5ac394f29 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2018 12:20:47.8380 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2740f11f-1a94-49b4-c7c3-08d5ac394f29 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR07MB0646 X-OriginatorOrg: ericsson.com X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrDIsWRmVeSWpSXmKPExsUyM2K7se4S0cdRBnN6ZSxeTW5gtDh6eg+z xZddfYwOzB6LV0xh9Xh28z+jx/NrPSwBzFFcNimpOZllqUX6dglcGZP+rGEvOOVfMa3rCXsD 4wGzLkZODgkBE4mjnf9Yuxi5OIQEjjBKXD66iQnC2cIoMfnfYkYI5xujxJnzx6AyS5gknp9r YgZxWAQ+MUnMWrwPqqyLSWLJxw9ADgcHm4CBxOzdDiBLRAQkJf4t3sIGYjMLlEmsOr8HzBYW CJe40nSUCcRmEVCVmLbrPVicV8BTYu60tUwQB8pJnDw2mRXE5hTwkjjzq4sRxBYCqnn1+QZU vaDEyZlPWCDmS0gcfPGCGaJXQWLjlpksILdJCExnlOg49xiqWV3i76GvLBBFshJHz86BKtrG KDF/1192CGcKu8T67gaoM7Qkzr/5zQ5iMwrESrRsncoEUfSDTeLGomWMEEXZEs8bdkHttpJ4 /es7I0TRUmaJu1efsUEkZCRmbV3HBpG4yCrRuXcG2wRGvVlIHpmF5JEFjEyrGEWLU4uLc9ON jPRSizKTi4vz8/TyUks2MQLTxMEtv612MB587niIUYCDUYmH94jw4ygh1sSy4srcQ4wSHMxK Irw7bj+MEuJNSaysSi3Kjy8qzUktPsQozcGiJM7rlGYRJSSQnliSmp2aWpBaBJNl4uCUamDs 1gx5+i4uKpj/49StIYWevVmnft2YYZ3x5/O39jvrUy1sz19PUVnxhfsEs5Hf3dgZdtpL9YIO t7Od0Txj4aq/XJF3uvZqu4A1dcE71LL5wxe/OzqF0+DoWe/ps/grJQyypnmWXeo//WT2vZ1x 8kZ3eg9oM/OLTS47n1dvkVTU9nCPRcsmsRVKLMUZiYZazEXFiQDawPtXDwMAAA== X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: nitin.katiyar@ericsson.com, ychen103103@163.com Subject: [ovs-dev] [PATCH v3 1/3] userspace datapath: Add OVS_HASH_L4_SYMMETRIC dp_hash algorithm X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org This commit implements a new dp_hash algorithm OVS_HASH_L4_SYMMETRIC in the netdev datapath. It will be used as default hash algorithm for the dp_hash-based select groups in a subsequent commit to maintain compatibility with the symmetry property of the current default hash selection method. A new dpif_backer_support field 'max_hash_alg' is introduced to reflect the highest hash algorithm a datapath supports in the dp_hash action. Signed-off-by: Jan Scheurich Signed-off-by: Nitin Katiyar Co-authored-by: Nitin Katiyar Acked-by: Ben Pfaff --- datapath/linux/compat/include/linux/openvswitch.h | 4 ++ lib/flow.c | 43 +++++++++++++++++++++- lib/flow.h | 1 + lib/odp-execute.c | 23 ++++++++++-- ofproto/ofproto-dpif-xlate.c | 7 +++- ofproto/ofproto-dpif.c | 45 +++++++++++++++++++++++ ofproto/ofproto-dpif.h | 5 ++- 7 files changed, 121 insertions(+), 7 deletions(-) diff --git a/datapath/linux/compat/include/linux/openvswitch.h b/datapath/linux/compat/include/linux/openvswitch.h index 84ebcaf..2bb3cb2 100644 --- a/datapath/linux/compat/include/linux/openvswitch.h +++ b/datapath/linux/compat/include/linux/openvswitch.h @@ -720,6 +720,10 @@ struct ovs_action_push_vlan { */ enum ovs_hash_alg { OVS_HASH_ALG_L4, +#ifndef __KERNEL__ + OVS_HASH_ALG_SYM_L4, +#endif + __OVS_HASH_MAX }; /* diff --git a/lib/flow.c b/lib/flow.c index 09b66b8..c65b288 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -2108,6 +2108,45 @@ flow_hash_symmetric_l4(const struct flow *flow, uint32_t basis) return jhash_bytes(&fields, sizeof fields, basis); } +/* Symmetrically Hashes non-IP 'flow' based on its L2 headers. */ +uint32_t +flow_hash_symmetric_l2(const struct flow *flow, uint32_t basis) +{ + union { + struct { + ovs_be16 eth_type; + ovs_be16 vlan_tci; + struct eth_addr eth_addr; + ovs_be16 pad; + }; + uint32_t word[3]; + } fields; + + uint32_t hash = basis; + int i; + + if (flow->packet_type != htonl(PT_ETH)) { + /* Cannot hash non-Ethernet flows */ + return 0; + } + + for (i = 0; i < ARRAY_SIZE(fields.eth_addr.be16); i++) { + fields.eth_addr.be16[i] = + flow->dl_src.be16[i] ^ flow->dl_dst.be16[i]; + } + fields.vlan_tci = 0; + for (i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) { + fields.vlan_tci ^= flow->vlans[i].tci & htons(VLAN_VID_MASK); + } + fields.eth_type = flow->dl_type; + fields.pad = 0; + + hash = hash_add(hash, fields.word[0]); + hash = hash_add(hash, fields.word[1]); + hash = hash_add(hash, fields.word[2]); + return hash_finish(hash, basis); +} + /* Hashes 'flow' based on its L3 through L4 protocol information */ uint32_t flow_hash_symmetric_l3l4(const struct flow *flow, uint32_t basis, @@ -2128,8 +2167,8 @@ flow_hash_symmetric_l3l4(const struct flow *flow, uint32_t basis, hash = hash_add64(hash, a[i] ^ b[i]); } } else { - /* Cannot hash non-IP flows */ - return 0; + /* Revert to hashing L2 headers */ + return flow_hash_symmetric_l2(flow, basis); } hash = hash_add(hash, flow->nw_proto); diff --git a/lib/flow.h b/lib/flow.h index af82931..900e8f8 100644 --- a/lib/flow.h +++ b/lib/flow.h @@ -236,6 +236,7 @@ hash_odp_port(odp_port_t odp_port) uint32_t flow_hash_5tuple(const struct flow *flow, uint32_t basis); uint32_t flow_hash_symmetric_l4(const struct flow *flow, uint32_t basis); +uint32_t flow_hash_symmetric_l2(const struct flow *flow, uint32_t basis); uint32_t flow_hash_symmetric_l3l4(const struct flow *flow, uint32_t basis, bool inc_udp_ports ); diff --git a/lib/odp-execute.c b/lib/odp-execute.c index 1969f02..c716c41 100644 --- a/lib/odp-execute.c +++ b/lib/odp-execute.c @@ -726,14 +726,16 @@ odp_execute_actions(void *dp, struct dp_packet_batch *batch, bool steal, } switch ((enum ovs_action_attr) type) { + case OVS_ACTION_ATTR_HASH: { const struct ovs_action_hash *hash_act = nl_attr_get(a); - /* Calculate a hash value directly. This might not match the + /* Calculate a hash value directly. This might not match the * value computed by the datapath, but it is much less expensive, * and the current use case (bonding) does not require a strict * match to work properly. */ - if (hash_act->hash_alg == OVS_HASH_ALG_L4) { + switch (hash_act->hash_alg) { + case OVS_HASH_ALG_L4: { struct flow flow; uint32_t hash; @@ -749,7 +751,22 @@ odp_execute_actions(void *dp, struct dp_packet_batch *batch, bool steal, } packet->md.dp_hash = hash; } - } else { + break; + } + case OVS_HASH_ALG_SYM_L4: { + struct flow flow; + uint32_t hash; + + DP_PACKET_BATCH_FOR_EACH (i, packet, batch) { + flow_extract(packet, &flow); + hash = flow_hash_symmetric_l3l4(&flow, + hash_act->hash_basis, + false); + packet->md.dp_hash = hash; + } + break; + } + default: /* Assert on unknown hash algorithm. */ OVS_NOT_REACHED(); } diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index 94e3ddb..05db090 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -3968,10 +3968,15 @@ compose_output_action__(struct xlate_ctx *ctx, ofp_port_t ofp_port, struct ovs_action_hash *act_hash; /* Hash action. */ + enum ovs_hash_alg hash_alg = xr->hash_alg; + if (hash_alg > ctx->xbridge->support.max_hash_alg) { + /* Algorithm supported by all datapaths. */ + hash_alg = OVS_HASH_ALG_L4; + } act_hash = nl_msg_put_unspec_uninit(ctx->odp_actions, OVS_ACTION_ATTR_HASH, sizeof *act_hash); - act_hash->hash_alg = xr->hash_alg; + act_hash->hash_alg = hash_alg; act_hash->hash_basis = xr->hash_basis; /* Recirc action. */ diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index 1ed82d0..7162811 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -1291,6 +1291,50 @@ check_ct_clear(struct dpif_backer *backer) return supported; } +/* Probe the highest dp_hash algorithm supported by the datapath. */ +static size_t +check_max_dp_hash_alg(struct dpif_backer *backer) +{ + struct odputil_keybuf keybuf; + struct ofpbuf key; + struct flow flow; + struct ovs_action_hash *hash; + int max_alg = 0; + + struct odp_flow_key_parms odp_parms = { + .flow = &flow, + .probe = true, + }; + + memset(&flow, 0, sizeof flow); + ofpbuf_use_stack(&key, &keybuf, sizeof keybuf); + odp_flow_key_from_flow(&odp_parms, &key); + + /* All datapaths support algortithm 0 (OVS_HASH_ALG_L4). */ + for (int alg = 1; alg < __OVS_HASH_MAX; alg++) { + struct ofpbuf actions; + bool ok; + + ofpbuf_init(&actions, 300); + hash = nl_msg_put_unspec_uninit(&actions, + OVS_ACTION_ATTR_HASH, sizeof *hash); + hash->hash_basis = 0; + hash->hash_alg = alg; + ok = dpif_probe_feature(backer->dpif, "Max dp_hash algorithm", &key, + &actions, NULL); + ofpbuf_uninit(&actions); + if (ok) { + max_alg = alg; + } else { + break; + } + } + + VLOG_INFO("%s: Max dp_hash algorithm probed to be %d", + dpif_name(backer->dpif), max_alg); + return max_alg; +} + #define CHECK_FEATURE__(NAME, SUPPORT, FIELD, VALUE, ETHTYPE) \ static bool \ check_##NAME(struct dpif_backer *backer) \ @@ -1353,6 +1397,7 @@ check_support(struct dpif_backer *backer) backer->rt_support.sample_nesting = check_max_sample_nesting(backer); backer->rt_support.ct_eventmask = check_ct_eventmask(backer); backer->rt_support.ct_clear = check_ct_clear(backer); + backer->rt_support.max_hash_alg = check_max_dp_hash_alg(backer); /* Flow fields. */ backer->rt_support.odp.ct_state = check_ct_state(backer); diff --git a/ofproto/ofproto-dpif.h b/ofproto/ofproto-dpif.h index 47bf7f9..d654947 100644 --- a/ofproto/ofproto-dpif.h +++ b/ofproto/ofproto-dpif.h @@ -175,7 +175,10 @@ struct group_dpif *group_dpif_lookup(struct ofproto_dpif *, DPIF_SUPPORT_FIELD(bool, ct_eventmask, "Conntrack eventmask") \ \ /* True if the datapath supports OVS_ACTION_ATTR_CT_CLEAR action. */ \ - DPIF_SUPPORT_FIELD(bool, ct_clear, "Conntrack clear") + DPIF_SUPPORT_FIELD(bool, ct_clear, "Conntrack clear") \ + \ + /* Highest supported dp_hash algorithm. */ \ + DPIF_SUPPORT_FIELD(size_t, max_hash_alg, "Max dp_hash algorithm") /* Stores the various features which the corresponding backer supports. */ struct dpif_backer_support {