From patchwork Wed Feb 14 08:55:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arkadi Sharshevsky X-Patchwork-Id: 873280 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="FU14qUvD"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zhCtG2Vtzz9t2x for ; Wed, 14 Feb 2018 19:55:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966475AbeBNIzr (ORCPT ); Wed, 14 Feb 2018 03:55:47 -0500 Received: from mail-db5eur01on0059.outbound.protection.outlook.com ([104.47.2.59]:51587 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934850AbeBNIzo (ORCPT ); Wed, 14 Feb 2018 03:55:44 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=XMT8fk3oTSeSvtCx3y8lGE+qxl7m2jiBrmIzcCsEJkU=; b=FU14qUvDB7L5YpUBP7GvzXWC9FIxEssMpZkGa3EhdYOuPm1urhPeQpfcfMWVdJOywUcvHhER06jJ4hN3dlIqm35/YyBubk4iVVyDQ2mYvnKP8iEYmtviEoeRv7tjYsRXaD4+hvYvS0LUIDC9vMMz895dmIv7JvLx6/n3LQWFJMk= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=arkadis@mellanox.com; Received: from dev-r-vrt-156.mtr.labs.mlnx (37.142.13.130) by VI1PR0501MB2461.eurprd05.prod.outlook.com (2603:10a6:800:68::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.485.10; Wed, 14 Feb 2018 08:55:39 +0000 From: Arkadi Sharshevsky To: netdev@vger.kernel.org Cc: davem@davemloft.net, stephen@networkplumber.org, dsa@cumulusnetworks.com, mlxsw@mellanox.com, Arkadi Sharshevsky Subject: [PATCH iproute2 1/7] devlink: Change empty line indication with indentations Date: Wed, 14 Feb 2018 10:55:16 +0200 Message-Id: <1518598522-27713-2-git-send-email-arkadis@mellanox.com> X-Mailer: git-send-email 2.4.11 In-Reply-To: <1518598522-27713-1-git-send-email-arkadis@mellanox.com> References: <1518598522-27713-1-git-send-email-arkadis@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: HE1PR0102CA0039.eurprd01.prod.exchangelabs.com (2603:10a6:7:7d::16) To VI1PR0501MB2461.eurprd05.prod.outlook.com (2603:10a6:800:68::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 8eb59bdf-51b1-44e6-f633-08d57388b97b X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603307)(7153060)(7193020); SRVR:VI1PR0501MB2461; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 3:/lLyO27fObcr+aUGUG4UfUbhN1Db2Tx+cYkgXevWLNnSTPCqNzUameyFfeLXdzyd+hU3cZJIPTXMa2+ZVXgRifU7d14w91UuaRyOYYciGDbvDSoZ/GwfR+XXVmaFwOY1bexyrq8ISE5BGbda8cEKKJH1+L5l65p/Jhupd4E9Ax6el/qRvXJLcP3zpJipYUu6Nceiloexk67Lig8T3ESHKPX7Ezf5ioPu4eho+ZwRQz9jV2SRBnfsAydsYGZT8EDm; 25:uUd/7p6uzZHqBiIa/hcRUao3yPjqdWUnkvnr3OEs20sejRM4EWKaQs7CqHj2U/CxewbkxHVMMIKirgP3IbOQPfg8deJ/3eNQaLoXKAOuJx4zdXowOg0ObhlH0xtPuuZrrV0IoyhSBPJ2nOtWa1wjp5Lj0CrW+stWBWjC1/SANajzCkHo2r9U3zwImmc04sfK6e8Cvfr+ph2OYyew3OWj2Aim52+7N8uIFDGCUnKyBBXGbvba/LDCrjWtVFe0bd9rkIj5XaI6AW4IVpl6WPU0APJYa+iSOxSVcm2SS80KSNOmWDtmrIWvIj65zXEuLzln3rUTKFYXeoI6JWkP3GV9MQ==; 31:T1OoyWODqvd4/AXYIFHI/HRTDyL+/pi/hMte5P34+pyxMe1kCYrdtRy+pifBOYy0d1EHmJlpj53REBRznYMi1TfzQ4xV4xFKoXjbRgU2uEdaJdK1LvM3NDUXsKTVBo9fXKHR4ACcaqca3l9lUfe7gEo4HbANx/Jw+l/QBrEkr1YLppcCOxExcfxH0ufZDP8irnEKuqP4a+vc5hSPAOc7ZkjkHk7sR/0THtur8JsGDnY= X-MS-TrafficTypeDiagnostic: VI1PR0501MB2461: X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 20:BRT/rP7grq9EQSSuTYIjdEImhN5F2G4a3iuElKRCeJZjPpExTojdL7iqSArhktiKDb3Se9uG7ZcUUmI4unFUIyFXrJNwxYh9oUkohN/6M6pDNJtJ0S91MMLxbc3Z1yIx2DKWwBLS/GPXszZAptlcigapBTS1Vj6Uw2IIg26h/7OEvXyB2NlphLGx8+TF9ykfEI5dV1qCTEOKo+7Zm+7BnWvxycc5NvZqNkGCo2s+LVLeM1hYA4iLKunn+wpJxjaw933bdk0RwzicKnIFcM4VOEPoXZZfPOrLd/+A6g8irKPK9jSo8GgFCOu91RNDjT3/RQjOeHiHTBrc/X+Ao8h3AZaA29My8SCxGeyROZKP2pj6Vt1JuUV/l+aqBOGvEteDLe8mFJSR81qyk4mN8kmz895C91eRNZs3WmsZCRsh1npRiRPOTpjLlX61bnodvOb4LJLOC1eixIZJARQ5kElDkHki8ttpd78XhjOFA5phYKdY9rB/h8NrVTZXF8wIqlK5; 4:SMm6h/x+oL1jjOQa4D0wBbTynxCT/GbbrkHIzZSM/NAtarSkER7i/pSx2YtxqVNNppe+Izw4O8UjUr/bsyiwa3xK/n+uwLgJv73v4nbEWRaJFR7GT+ITOKPuleqONEA+T65iMhyOJpEsfWNgKBTpB4iD9eyIis1xj44+JU3kVHtTp6lvro8RZEDWYsNZK3rdiElSPwrzJb5QDFF2NMfZVijhPi7QJHEjWgiWHFGULjkHvGQLhxdWC4yX43vfeWuJ6CxcLrPBUoAeSHkJaQSYhg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(3231101)(944501161)(10201501046)(3002001)(93006095)(93001095)(6055026)(6041288)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(20161123564045)(20161123562045)(6072148)(201708071742011); SRVR:VI1PR0501MB2461; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0501MB2461; X-Forefront-PRVS: 0583A86C08 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(39380400002)(39860400002)(366004)(396003)(376002)(189003)(199004)(50226002)(81156014)(2361001)(6116002)(6512007)(7736002)(26005)(86362001)(3846002)(81166006)(47776003)(305945005)(107886003)(316002)(6506007)(106356001)(8676002)(16586007)(53936002)(478600001)(386003)(5660300001)(76176011)(25786009)(48376002)(52116002)(4326008)(2950100002)(6916009)(97736004)(6666003)(8936002)(66066001)(2906002)(68736007)(2351001)(36756003)(105586002)(186003)(50466002)(16526019)(6486002)(51416003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0501MB2461; H:dev-r-vrt-156.mtr.labs.mlnx; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 23:1HZRL2nd6z38wpoWI3EAxu/gNMVPDiWWlnJxec45emNBx2HwLKUt1xBGjczHM/NZmRrP3Jqf+mwuMzfb/USnX6fufX8UgExd21xkMJMbO7K811ajVk71dFfziWMKttER/AhTFf2Rb++dhzuuEghtAJowmCAsVpGyPX6VHUScgJGytX4URY80ET/ZPvbQBdzA5v/ycTc7KQDzVwM4X0JmI2zpqtzM0NQ70HFYI2YI73nIco6MHyslqRCETKVGsfS0afrt4rZMcg6VhZ4WUvfHTgXMFUFwAeUG+5FcgQ03USZZ4fyq+EpIbseq2U308ofoIpwvgkitUAIRayNJgfvETlR8/m3EQAKRoVujA8cpvJpI8CoiWpqupe+lVCyAQtE31fkpxt1TYkDabDUvSHeCC/rWDD8LNd2knOZEgs/rhK8VCV3ZbA+WCv2rEK5fjUPLsLUbSI1OmTCuqNQGnNZqW4QTWwx10i9lfxX/y/PiseFHQmMmklPgwQNW3OiCRLn+jrjzeYDOrZ1RAnOrhu2G/1DxhodzH7GFGvu/7kUOzrm+o7uBWuppEjwB1IBcvCczNpyE+GoCxhmw3X1wZEu9uuivJ8Yw3WT9NL30hZoq8pVrx0piPAK23g1WYjM4KRxK85IAOwFL29k1cWrUCwQBmz9LeutHO61TnKAHBY9qxxL179ujcG516R7eqMZ5wdBRQW5/q7TuFv5k/7mX62oGCoKZV7roGpBs8tOPajvCZCE7n5zaML3le3II2qr9dvwMzQvF6Rl1FVW1QstskovWO1EPoRfcb/kiUbubUJq8DE5Y6SnwVSAlFTJrynvEqBF/0u+aAKWFpKFIsqgOo0KFpTYulEV1PTvDZo1XfWzYH0hJ/Uy6PRw00tJAA67MxSG5EtVuATILqDCNM7X905iJmunl7Wgz98teGgCa09N3+zTcGlcwO9fXFWf4OAeK7QeS8ZSzb1rjAFQOl8IuiP27FfjK4UGgj6XY8tabpPLRVJBXW8f9/Nt6Og7NXXfZec2pQNQOZAaOFC6ukCnhijvzsMObNshqAQqE7ebqTkRP8Lz2qvWEQhtfcGtgjiwSuacelxQqVUtq6Z3uhfFeq3r3t0hlXyiV4uBjFk8WoCC8c9mQU06EiGGGD/c2n34P14QfpgSjg+dsXWxXjwWKzT+dPg== X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 6:oP5kv0PgtZwThu7Exzc+68WXj38DtjcfSf9orSvBHAR/Db3FZ0XgfxSer0M7wQOfo7TDnWhU8m3yrDDWBiHTNaJKw1wQT3ZKcydXBcBmZYVlKoiaxXrJ2OdxRAh/FEP5z1JgbkE0NXbkPefwaFTggr3FS8O1HZLFlT7zi06NUGil/Z2goSqUM6eBmJHP+a2Qn6dAV48JzKbXm36sUZpwNrWXwVp+vH9za4/JSZcXqqZlreoRJmZjz/gQG1Gu3W9hbENLabNCiIymPmBmKdQKkEDyUIxUUNiOea5BaM480TEm8gVxqweZrzXvJlB9EmwDSfkqP8Dprpc6EBoFK4y3eSTC/VZ07Ir9SlsktA3bnog=; 5:j/hVB19vyGdusunPMr4RovRC97Tx34cc+UHfQuUD3Fb4/4dkX+1i8CUzaA5sE7K65v9HF36NBqp5PqNOFYy1Fy+FzbDVx3bOOLdq1GQlBwS4FHrSbzdR6ao7TsNzDDgfnWnieJAS5O+k89Ke1UQc9rlwUEgtVIXL6XPZUiT7T28=; 24:P6OzUQxukJB/4kkQ6l8SiRhSZ2FdrrwV5FfqQeLCVFd2o0j47U9cCCwu/Rk5VQU9MZloQuEsr5/YEi8w59GPNzexbNoPw6YT7JBuNTaZ3Sc=; 7:ucXIP9m9BogVVNPN0Ih0hkjpRCeV0Qehm9pOP0Ucgl+tVWIVLaNctLebDGOvd9MdCNCZIFT2yYO7kV5umitMcrfRv2ANq5K73UQi3Za0McDJWzOutcI9yAi5CempuUIwFwI9hMAKXEwauGjfXO5H4HoUrgF84V+MOPZbt1Np2nOIsYfsdDW9jKDKLXW0Vnv/qKDX0BmeAihTf5XpoUIQ3Yon30yv/PsIOYONsco+5CfmU4sbVaQReHCQ1gLmLR6B SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Feb 2018 08:55:39.4323 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8eb59bdf-51b1-44e6-f633-08d57388b97b X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0501MB2461 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Currently multi-line objects are separated by new-lines. This patch changes this behavior by using indentations for separation. Signed-off-by: Arkadi Sharhsevsky Acked-by: Jiri Pirko --- devlink/devlink.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/devlink/devlink.c b/devlink/devlink.c index 57e71ac..8ef6041 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -35,6 +35,8 @@ #define ESWITCH_INLINE_MODE_NETWORK "network" #define ESWITCH_INLINE_MODE_TRANSPORT "transport" +static int g_new_line_count; + #define pr_err(args...) fprintf(stderr, ##args) #define pr_out(args...) \ do { \ @@ -43,6 +45,7 @@ g_indent_newline = false; \ } \ fprintf(stdout, ##args); \ + g_new_line_count = 0; \ } while (0) #define pr_out_sp(num, args...) \ @@ -50,6 +53,7 @@ int ret = fprintf(stdout, ##args); \ if (ret < num) \ fprintf(stdout, "%*s", num - ret, ""); \ + g_new_line_count = 0; \ } while (0) static int g_indent_level; @@ -77,8 +81,11 @@ static void __pr_out_indent_dec(void) static void __pr_out_newline(void) { - pr_out("\n"); - g_indent_newline = true; + if (g_new_line_count < 1) { + pr_out("\n"); + g_indent_newline = true; + } + g_new_line_count++; } static int _mnlg_socket_recv_run(struct mnlg_socket *nlg, @@ -1401,20 +1408,22 @@ static void pr_out_array_start(struct dl *dl, const char *name) jsonw_name(dl->jw, name); jsonw_start_array(dl->jw); } else { - if (!g_indent_newline) - __pr_out_newline(); - pr_out("%s:", name); + __pr_out_indent_inc(); __pr_out_newline(); + pr_out("%s:", name); __pr_out_indent_inc(); + __pr_out_newline(); } } static void pr_out_array_end(struct dl *dl) { - if (dl->json_output) + if (dl->json_output) { jsonw_end_array(dl->jw); - else + } else { + __pr_out_indent_dec(); __pr_out_indent_dec(); + } } static void pr_out_entry_start(struct dl *dl) From patchwork Wed Feb 14 08:55:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arkadi Sharshevsky X-Patchwork-Id: 873286 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="rvagHTF3"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zhCtr5G69z9t2x for ; Wed, 14 Feb 2018 19:56:20 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966589AbeBNI4S (ORCPT ); Wed, 14 Feb 2018 03:56:18 -0500 Received: from mail-db5eur01on0059.outbound.protection.outlook.com ([104.47.2.59]:51587 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934695AbeBNIzq (ORCPT ); Wed, 14 Feb 2018 03:55:46 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=J4bZfD6De9bDROMMtsU2mBp8pj3cxzqCdah3f/1p/5E=; b=rvagHTF3xwDWambd6RRHadd8vHMR9SJDRFZBrO+KCDO1eAiN5vJ6LwWC5M9z3hOMyiw42Qtv+9DrdZIRrpOQfAG6/LVnh/iO/OiDfmgKD2vaLm3Wja5cGz9aGHRY/0hkrZfRBmsGaKd04eXmqrJ/ZckH65gScrZeLjyih5zTReI= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=arkadis@mellanox.com; Received: from dev-r-vrt-156.mtr.labs.mlnx (37.142.13.130) by VI1PR0501MB2461.eurprd05.prod.outlook.com (2603:10a6:800:68::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.485.10; Wed, 14 Feb 2018 08:55:41 +0000 From: Arkadi Sharshevsky To: netdev@vger.kernel.org Cc: davem@davemloft.net, stephen@networkplumber.org, dsa@cumulusnetworks.com, mlxsw@mellanox.com, Arkadi Sharshevsky Subject: [PATCH iproute2 2/7] devlink: mnlg: Add support for extended ack Date: Wed, 14 Feb 2018 10:55:17 +0200 Message-Id: <1518598522-27713-3-git-send-email-arkadis@mellanox.com> X-Mailer: git-send-email 2.4.11 In-Reply-To: <1518598522-27713-1-git-send-email-arkadis@mellanox.com> References: <1518598522-27713-1-git-send-email-arkadis@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: HE1PR0102CA0039.eurprd01.prod.exchangelabs.com (2603:10a6:7:7d::16) To VI1PR0501MB2461.eurprd05.prod.outlook.com (2603:10a6:800:68::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 5309788b-0c7d-48eb-4c25-08d57388ba95 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603307)(7153060)(7193020); SRVR:VI1PR0501MB2461; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 3:Z38T0Yhh196iH3EmRND93g/s64yujmfqSkFvXOq/hAeUqrKMc65Nz6X1DpWu/nASn13q7h1jJsrDleI1I/oGjGeayB/IBbePSxfhhgI18sVtsPPHHVrWMG4woglLsCu9EzxPYmJatjRmvVPUZdOv/AdSVo6pZuB60+J/vsYKmonxWqXXumpKTnHJpoUsfhw5r9ujaAtynpd/3qv84LK1s9rsNEXQnoJT72Cexg5hjYQWFXNj0zm/W+4IL91hWLfK; 25:elBJV2m6RSzxJf5xCOctCGHGiTvJy+2rxi4gvbxkUsuBSKVyc8V3XgWahhWjcIj0o+9e7Y9LgzQvm5tnRZKNkmuxeBNc2vdi+NlnCUk5QtaCcn3k4q4nQUJZRWkw8cGGkSjn1UtXl2rTeJ8lx0Q63jYZhZeh+fxtm4PE0JS1NrD8kinVZsgDZ06MIi54YEndVEVZKGNIlTsq1rL1+TeN6N7v5nfFTcQtLoaNOf9XejrRW7opsriEaw7m4UNFwc1PkmRCENvt1xtta2F4qGMOTQ6In8WoPanhEqVuk5cc+Zvm8lgoJEqsTAuL1aFlPuLn43Vy0EONgsaeSzAaHkWRuw==; 31:gzAy9OuSIPfi6cMR+shngzs8KIrvyzULe2Y691Lqx+g1wsxFMACFGsKS5AOEb5YIUdbyv88LUq424tp0wvVPI2n1o60F3cHHS1v+wd3V/11cLRkPJrhZO8u2aKSPR25SbSTHvoQsatIricH7xSmhQnexYD73H8bzrWfGHPRTTC7d39kRokOlEmmUKY3TfrxKr52GTUWS1fF+dBFIB/+Ls2CG/MCzZSblJh9K2TnUwko= X-MS-TrafficTypeDiagnostic: VI1PR0501MB2461: X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 20:v6YZpcAYbrzLmqvW2ZAJffM72RMdoBdTSEkmou7IVfJZmE/2aUNQ8KRrCwBhYS9/SfZcwtzSGreZoszF/TP3F928yhzxda7217rghzmwNL0FYuyzH4Oij/PgfCLd51plZIrw7NEKdt7ULF9dvqSWoJTlG4jZhj0CXznAjvTHshGLw3+PGIRihy9Z10txQfKKuuL4wqb2AuSrgrCzVo5MGfEwW0oppCHmV6KdHr6NLMIBZPJY2tSpasRNVQ1u+hwkyzeHm9hHbfQdFNyAkWmMF0XJLf6rUY2RCBjgWtf4CvIJkJa4vbaRY/pH8xtcKofaJR3qVtcM/s9OjrJn8oCqyRkt+gTtKaAUG63PKzxRlyCdGH7GXhT2a7sIH6tOU8hmZ93t21UmrCGMUqhT1klzyY4wIXY65A/6jPmzrJjJ5lJgwrEER/hJWO766XcChFNglcOLNKJ0Z27Gvq13StCBipFMBzsuaY9lfpX5XWxft+XWuigMu8Dg0nwtAv/FHuRs; 4:E7kqOBG0TOrwAlPEVYIcgdOom7RLmW67n43HKSETw4ZURiCRLDkXwg8WnhhOmL1m7IYMY1kwpYSUkjzdZ7oLUHonIU2R+fsg4Cdxr/muSpO4bBiC2tzDozrZFZ1qCOiWfS/7bn+pa343ag+NPaT5arvICFMP5RalzngNN0R/LjsU+YzawMBcgJKiUStvYI2WQ5u2W9eREHm2hn4rsFlzcekRmTEiRjIyNFYudpzqMYfM/pQJDkhpBpO3/afBVu4BkF8J32HEgckt3svOTxGetw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(3231101)(944501161)(10201501046)(3002001)(93006095)(93001095)(6055026)(6041288)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(20161123564045)(20161123562045)(6072148)(201708071742011); SRVR:VI1PR0501MB2461; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0501MB2461; X-Forefront-PRVS: 0583A86C08 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(39380400002)(39860400002)(366004)(396003)(376002)(189003)(199004)(50226002)(81156014)(2361001)(6116002)(6512007)(7736002)(26005)(86362001)(3846002)(81166006)(47776003)(305945005)(107886003)(316002)(6506007)(106356001)(8676002)(16586007)(53936002)(478600001)(386003)(5660300001)(76176011)(25786009)(48376002)(52116002)(4326008)(2950100002)(6916009)(97736004)(6666003)(8936002)(66066001)(2906002)(68736007)(2351001)(36756003)(105586002)(186003)(50466002)(16526019)(59450400001)(6486002)(51416003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0501MB2461; H:dev-r-vrt-156.mtr.labs.mlnx; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 23:FubuRxDNEM0i4C0etDglDNbJKwnDhepqp+Qq+RfLd/ggYadyLpprlCCenhZAXcBNk9UmqTDpRw/zMr/1tz+iFBPklj/zEgDX8rsEzTxpMqpIlLVDxafSbW5lHZVEDDQ4E8os4xHxdY7KWYCWN07HIzNq2DXb0/PjLgraS/WMnbTER2+0QCMd+7Nv7SejK1c5c1vdoycIE6ae6fGJGiAF4jI6ktVJqf7MiZKuwXhjKQILj4vPXHW5YL6u8RUmID7W0/8iygV+TkScW4uLDob65awSsc24xGUnrR8yeJICV8kbakFMW1tsB2nBcjOx9yL3w1vZfuApeZT4N2otkUVRBwc0t4V/neOtJW2vc1qydx9Rabp0umX8ua+wCpPD4SWjmG76DSW57yR4/s9drTccKb0ZsAkaCwduS5I7QRwIw9E0NvpFsIDuOp5CaOvgg3ygMjnqsosIrGOT+zlTEs4ZQskd8v8VE/1UNvBehV4zklVNShT8XZ4P6RR+VPD9TmHTEojN/FVGIPWJRaM6sUYJFPMusnOy+M9RwNmPcL3An3PDNJsGGKmTfXCiizcnbLC7hn8Fs1vWVe9BE6qLnVUoOEbgthsaJX/2JTSUvKp7j8+4HwxL9ztCaZk0q260gGSE9cvKZQ8ldC+i1gyc6SB/qyYjgH4azTfDeBcnb1jEtSSjrJunKLF0DbNZOz3rGjdVPSxRAoqAXHRiWThdhVpVEFpiaA7ahdyg4iEq1AgZkr+OBiudbHj+TtIlR8tXJ/2ga62LAzLMaxNsNcKB9EX3tN6B6TfJ8PWdTX1uE7rS7Q7OtuVSkI3E6FSRzX7abO9rKttZNlvMixGrOvn4X3moCJSok9y3SvNmfe9fbXRjyWzyPOowUN7LALVyntPU1Dkf2HMD/AFaJGsaEMbglDnyk8HGRN5thZZdkJuDj7x4PO80Jvz8DONf/BjQHxwyAb2r2bcOfDwEteBJYlMnN28ihsPsX2t+PuGkNJrOpJ51QmWWpbBh+sA7YYRu3RHQZH+kXcIhknEkHibDLRoEqiQWcAYqAV+O1M0oknw3V7QEnru5W7m0HrFROr9vwwTf5RZLRZbLGuCOhAs9uvj+FXDwLsix/JiZlGUkXWJYsHrFQEfuoO1801bFu7frdKnvFJ9ktK8suMN2nIDlVyXYTzaKbdXhXhb8EY3L90qD4PFjLNM= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 6:cVbWd796wSvBYsDEtBVAjpMtKXCJLi0V674IkINUBLMbKoNTPYm+bYPRIa0I4m4kfOthxCWwxeGlK9E71T99EZIkXBc+XvlGhQTz+1sC0Ch/1kK1zZGgcWdbA/OmQZ64kkLBNSlkf4huHHXbwROMUn8fV3Di4FzqBUblbAZvgUya3eBW62L7PW6oKzd1CMdAbxvhnuSzoP//D7VDNm2+WUjyjq7fjsC/q4N8pSn4+uuMaaFom7f/J0EZk0oLvg4bYMVulxx4u/+7wl8kcJQttnph4N/sp533W3t2R2T7BUSztu2J7gbWsXJdISWI0uePaZhZazCxL9iMBXDKXlPOUQsQwRu3+MrrQ5fTjXQKx4I=; 5:8ZipEFwgcIFkNCRb9QQEK//R34ecotr+uDxoSHjRGqJKQ2TLxqFlBGz9eOvk9v4hFOrVZzsAM1K2z2jUhUziqiJHuJK/XdnJ2LpeIZSuWoVWMZXm0vq6B3v1dnZreMNxWQWfQh60YyHH12UibkNrW2FTLoAspGXyCHkFiaVkXEk=; 24:2PpwbVe11N1qElYSCnNxX5Ws7rnRILsrzwzKKAJGzXQQj8cgaEiW5yyJArD97j1ClWuLaqryjnE+j/4Cl1ZsksBMB/hGFATxpoUdhWSBu2g=; 7:a6V4x+7tICA17o/Mxwshw7CiBkZvxz4fUtUplYyAHWnggALbhJ7YP936pPYuMAkpmTVrlfdoX35sHLvZZZG5SBegbLf/F/h1mQZc80UuOpqnUKvF/ZuvwPlrqQJxp+GRF7Q5ePZTsaiMNP44LsE32oNXaOSqOf/4oHjQdr/nGHkyD/fZivfWbVS2MC4MuiEvNwxYC5FX+iJbHzfet/baKQf7nIXpf8LDGn+xt2mGZvMRu9vHeOiSgvBiOvFS3bRo SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Feb 2018 08:55:41.2448 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5309788b-0c7d-48eb-4c25-08d57388ba95 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0501MB2461 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add support for extended ack. Signed-off-by: Arkadi Sharshevsky Acked-by: Jiri Pirko --- devlink/mnlg.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++-- include/libnetlink.h | 1 + lib/libnetlink.c | 4 ++-- 3 files changed, 54 insertions(+), 4 deletions(-) diff --git a/devlink/mnlg.c b/devlink/mnlg.c index 9e27de2..37c5687 100644 --- a/devlink/mnlg.c +++ b/devlink/mnlg.c @@ -18,6 +18,8 @@ #include #include +#include "libnetlink.h" +#include "utils.h" #include "mnlg.h" struct mnlg_socket { @@ -60,6 +62,39 @@ int mnlg_socket_send(struct mnlg_socket *nlg, const struct nlmsghdr *nlh) return mnl_socket_sendto(nlg->nl, nlh, nlh->nlmsg_len); } +static int mnlg_cb_noop(const struct nlmsghdr *nlh, void *data) +{ + return MNL_CB_OK; +} + +static int mnlg_cb_error(const struct nlmsghdr *nlh, void *data) +{ + const struct nlmsgerr *err = mnl_nlmsg_get_payload(nlh); + + if (nl_dump_ext_ack(nlh, NULL)) + return MNL_CB_STOP; + + /* Netlink subsystems returns the errno value with different signess */ + if (err->error < 0) + errno = -err->error; + else + errno = err->error; + + return err->error == 0 ? MNL_CB_STOP : MNL_CB_ERROR; +} + +static int mnlg_cb_stop(const struct nlmsghdr *nlh, void *data) +{ + return MNL_CB_STOP; +} + +static mnl_cb_t mnlg_cb_array[NLMSG_MIN_TYPE] = { + [NLMSG_NOOP] = mnlg_cb_noop, + [NLMSG_ERROR] = mnlg_cb_error, + [NLMSG_DONE] = mnlg_cb_stop, + [NLMSG_OVERRUN] = mnlg_cb_noop, +}; + int mnlg_socket_recv_run(struct mnlg_socket *nlg, mnl_cb_t data_cb, void *data) { int err; @@ -69,8 +104,9 @@ int mnlg_socket_recv_run(struct mnlg_socket *nlg, mnl_cb_t data_cb, void *data) MNL_SOCKET_BUFFER_SIZE); if (err <= 0) break; - err = mnl_cb_run(nlg->buf, err, nlg->seq, nlg->portid, - data_cb, data); + err = mnl_cb_run2(nlg->buf, err, nlg->seq, nlg->portid, + data_cb, data, mnlg_cb_array, + ARRAY_SIZE(mnlg_cb_array)); } while (err > 0); return err; @@ -220,6 +256,7 @@ struct mnlg_socket *mnlg_socket_open(const char *family_name, uint8_t version) { struct mnlg_socket *nlg; struct nlmsghdr *nlh; + int one = 1; int err; nlg = malloc(sizeof(*nlg)); @@ -234,6 +271,16 @@ struct mnlg_socket *mnlg_socket_open(const char *family_name, uint8_t version) if (!nlg->nl) goto err_mnl_socket_open; + err = mnl_socket_setsockopt(nlg->nl, NETLINK_CAP_ACK, &one, + sizeof(one)); + if (err) + goto err_mnl_set_ack; + + err = mnl_socket_setsockopt(nlg->nl, NETLINK_EXT_ACK, &one, + sizeof(one)); + if (err) + goto err_mnl_set_ext_ack; + err = mnl_socket_bind(nlg->nl, 0, MNL_SOCKET_AUTOPID); if (err < 0) goto err_mnl_socket_bind; @@ -258,6 +305,8 @@ struct mnlg_socket *mnlg_socket_open(const char *family_name, uint8_t version) err_mnlg_socket_recv_run: err_mnlg_socket_send: err_mnl_socket_bind: +err_mnl_set_ext_ack: +err_mnl_set_ack: mnl_socket_close(nlg->nl); err_mnl_socket_open: free(nlg->buf); diff --git a/include/libnetlink.h b/include/libnetlink.h index d632219..9d9249e 100644 --- a/include/libnetlink.h +++ b/include/libnetlink.h @@ -109,6 +109,7 @@ int rtnl_send(struct rtnl_handle *rth, const void *buf, int) __attribute__((warn_unused_result)); int rtnl_send_check(struct rtnl_handle *rth, const void *buf, int) __attribute__((warn_unused_result)); +int nl_dump_ext_ack(const struct nlmsghdr *nlh, nl_ext_ack_fn_t errfn); int addattr(struct nlmsghdr *n, int maxlen, int type); int addattr8(struct nlmsghdr *n, int maxlen, int type, __u8 data); diff --git a/lib/libnetlink.c b/lib/libnetlink.c index 7ca47b2..8bb1c8d 100644 --- a/lib/libnetlink.c +++ b/lib/libnetlink.c @@ -65,7 +65,7 @@ static int err_attr_cb(const struct nlattr *attr, void *data) } /* dump netlink extended ack error message */ -static int nl_dump_ext_ack(const struct nlmsghdr *nlh, nl_ext_ack_fn_t errfn) +int nl_dump_ext_ack(const struct nlmsghdr *nlh, nl_ext_ack_fn_t errfn) { struct nlattr *tb[NLMSGERR_ATTR_MAX + 1] = {}; const struct nlmsgerr *err = mnl_nlmsg_get_payload(nlh); @@ -120,7 +120,7 @@ static int nl_dump_ext_ack(const struct nlmsghdr *nlh, nl_ext_ack_fn_t errfn) #warning "libmnl required for error support" /* No extended error ack without libmnl */ -static int nl_dump_ext_ack(const struct nlmsghdr *nlh, nl_ext_ack_fn_t errfn) +int nl_dump_ext_ack(const struct nlmsghdr *nlh, nl_ext_ack_fn_t errfn) { return 0; } From patchwork Wed Feb 14 08:55:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arkadi Sharshevsky X-Patchwork-Id: 873281 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="cOJcG9zX"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zhCtL22Fcz9t2x for ; Wed, 14 Feb 2018 19:55:54 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935056AbeBNIzw (ORCPT ); Wed, 14 Feb 2018 03:55:52 -0500 Received: from mail-db5eur01on0068.outbound.protection.outlook.com ([104.47.2.68]:43664 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934850AbeBNIzs (ORCPT ); Wed, 14 Feb 2018 03:55:48 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=dBeZBphp3XSLbQuJsxaL/rp5iUqGCycQ8jGiemfSV24=; b=cOJcG9zXtjr0wgEBHUAJcbj8wpkskW+Acy8/ljU/K1cbXJ0wlCXXdKvWOapY1wsbb3kOI6Emf+7k5ZQkqJHhXCnx8y4CsWopi/7YrK7KvbXEZHFTmQt6MM69EeopeFjYxf3rHIkEVseSCHBQMHXrEpMqbakny7y2/xlCcvU3af0= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=arkadis@mellanox.com; Received: from dev-r-vrt-156.mtr.labs.mlnx (37.142.13.130) by VI1PR0501MB2461.eurprd05.prod.outlook.com (2603:10a6:800:68::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.485.10; Wed, 14 Feb 2018 08:55:43 +0000 From: Arkadi Sharshevsky To: netdev@vger.kernel.org Cc: davem@davemloft.net, stephen@networkplumber.org, dsa@cumulusnetworks.com, mlxsw@mellanox.com, Arkadi Sharshevsky Subject: [PATCH iproute2 3/7] devlink: Add support for devlink resource abstraction Date: Wed, 14 Feb 2018 10:55:18 +0200 Message-Id: <1518598522-27713-4-git-send-email-arkadis@mellanox.com> X-Mailer: git-send-email 2.4.11 In-Reply-To: <1518598522-27713-1-git-send-email-arkadis@mellanox.com> References: <1518598522-27713-1-git-send-email-arkadis@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: HE1PR0102CA0039.eurprd01.prod.exchangelabs.com (2603:10a6:7:7d::16) To VI1PR0501MB2461.eurprd05.prod.outlook.com (2603:10a6:800:68::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 188ff025-b730-41ff-8dd6-08d57388bbba X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603307)(7153060)(7193020); SRVR:VI1PR0501MB2461; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 3:8YIUQn1tDL58VuaDiG6ZF0Vz5pq+Nr/b6GJCB3Pv7Kxgqaynz492FfG2faO/vheUfaCPzl5cX7iIPtAD688OKT6AnoL2MAnhUeGudNd9ETj+7sXRGZKh4XNKoPVjYL1XXlIdcWbMOgrmPfCgpgyuhIuQA+M1flo4HZLEPFqM5H0uFLbii9paPlb0NnhhDkA5N9jxXUSXqjt31UFUNZZsxSit/xSmFBs4zXXly50ThZrHUb4mSo9TOJMcF78YVGI3; 25:871Ilb5BilV6wW5jNa9KbN/T6sCoVLJRr4AdjoF6iSD6prLNy8libVxE3HJ7PhL0I3qcu9cDxywozufdD7xFAUqyQwyvdVHtx3DiCOqnFOxRTBT4hWx5j5NQQ4aDwxHuxRNInyyXU0hf0XBR7+4L7TxphCtJjEyp/iE+EyxtY+HLP0iLeROFZGHSGWEYWnKgrVMthEwr2c/DWLVWXM8M3F0cD+v2LqHpLDtLj+Q9uSy6qPt75HWh+EarVw1zcvS7JVy5LtK9dJC/5ZKsSnk4DjexguZQFATdU6lfLh0rJSMxcvtd6EkLVuyF4kc56HI7u3FE8o5ft3uh295QuWjlXA==; 31:h1zwdKM70ixA54okI5VBBaGvsEDC7MnxDZVQF9QShlFcJDRoF4PyGgFiT5nwYtqRj+tjD22Yq3Vov2Npy4qF/iVxRbYmiXYVCrM1XOBQ4gKSN8evg0Zaqg2wVpsq4ZPozz2/T0HFp/pcqgLO1WCdwrTRjB5MiEb1Zpu8B4YIjyH35B8tSY/V+zZsH0VhFk22nyZ5V/fn3hnBFJ3zAuGYlkOeIuqy+eqbaT1MHG0bo7w= X-MS-TrafficTypeDiagnostic: VI1PR0501MB2461: X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 20:0DZs56hLrcNojBkheVB2ZDcGBmVVqSnnqFy+66P46nf2XfYRw4TvanLd41cvuCcm+akxTDybUPrd0GMJ2TFncKwMO8H+bBg3e4/LeVrLqTxo8m/A0d/koLMEBebrCGTo0/6gK7RwxM6n1xCAzR8M2i53id/6/a98KEMVRNjIC/lewsVcadsm8iL5LeUVP84wmanXx6fX4TmqW45rl26j/u2IusL7dEGKAgTsNqnEAcypvUiVuXxDWK3hGlewbTAHTycsAJOWxW2GgtSiru3fDugfRUBxst0O8j6W+g+tmWiTNoXjYLnUUBpE51lmnVd/WBZaxvjYC0uDjJCfsf7aUsgQMZk56fIj9oEU3pn780AvEaUCYq9ECZ5l9IHaXCpky9GGPCFWhnAFNxnvF7tntm1fAyYeXPCmgrabDxwkxxxn0SR9RDGP+ycvlEKZsl9u8WOVYE4zLo3nOojqWhfxk2bJow1Q8o1IP6jimtFulo0lUUam3D87LsFBrvROwyKR; 4:/ngQ+l/Snf8/Fnoi1Kt5juSPdXiuGsFW/MXLCpJQYCAtCu7/tKlJsBhJCnDPYqoOpha4BVUI5McgOe0PZVipltV+1OS461ThnGbuZF4zCN3Pyp+LTlzgLjf9+vR4BfXq61q5EBlHxjs5+zkoGSiCebSvTkZuCQI79jyLgbgdTgbbGOAhrmoJCjg+WCf/jUr/XzPdSoHr4n1lhJwrk8ljH+HpHpN2RI1A79gS62OLK4qAEh2M5Sy+391ygjV2fQKnScbuxA/FIkPt9rmPOrenrw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(3231101)(944501161)(10201501046)(3002001)(93006095)(93001095)(6055026)(6041288)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(20161123564045)(20161123562045)(6072148)(201708071742011); SRVR:VI1PR0501MB2461; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0501MB2461; X-Forefront-PRVS: 0583A86C08 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(39380400002)(39860400002)(366004)(396003)(376002)(189003)(199004)(50226002)(81156014)(2361001)(6116002)(6512007)(7736002)(26005)(86362001)(3846002)(81166006)(47776003)(305945005)(107886003)(316002)(6506007)(106356001)(8676002)(16586007)(53936002)(478600001)(386003)(5660300001)(76176011)(25786009)(48376002)(52116002)(4326008)(2950100002)(6916009)(97736004)(6666003)(8936002)(66066001)(2906002)(68736007)(2351001)(36756003)(105586002)(186003)(50466002)(16526019)(59450400001)(6486002)(51416003)(309714004); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0501MB2461; H:dev-r-vrt-156.mtr.labs.mlnx; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 23:j7jqAOY2w7+EC22nCSvQpmFob5hu++4qu2RT/5j2v09SZdOCg2l67gjwme9F0RVm07KOsCy+HUiSZ2S8mg+39kZGbd7/zZUjYpa49ojqVnZhmAu82EGSjygbpmsx48/bUcIXlUNsCoEQ/W7powcwHabE6EaC63TJ2Y0P9xTqnYi/hQFpHAx+Y7OkHNF13I4JpwusGQOSxyvO8thQgeNrHVeia0YZob+gi4pgSRI2MOWOQlxyxwWjcS6vxB9HU4pIVIs/q3Z4213V7G91oBY2d9tmmz+IvBzyzqe292jUp38Bd0filx3cM4d/7K8vdjqdKbgoWjDCq4qYx2v0pOmRJYlbOFBiOnnQPCtBBmAoqmUcNvR8x6vGb2EZ1serhTR6vY4pQBsk44Qb+etn8Srml4vWaFs4v8UgbVkA2JvcLzbnYZrQsNsl9f2gBeGIoSdM/MvHtRI9Jyq9wzpSewa5XtPipp2EXis/xTvKt0t92srImVhArmkexcxiNvMR+fUF/N7xDjk8T5GSANrpVufZfXD1dFLEuLxKeCyK3kK+zvVElwwYlcv8+xuyG2Ubxx0X2Q0zXO7/n1j31lKL38fsXBQTCVkjRdXMsVv7Uxyqzncib/wLc42n5nCs2XfaFczAOB0yNPB4TkZ96ysMKDRs4iuOiafg0szynODg4rdJEnp6c58MHRXKG9szZHOnwTIkTEVU5gC9j+vGxD/fzh/g8Fua8LWz7mXGrAFenuzjZbp4GikCJvPqJ3H+WToQ9UBoJxUbqX5tOZBURf5rXJpqoVITRMBYpl7jX4mf1pVqkiFNzRxCWupq/YBXGFbVgf6EL7AdS+7cxR1h3PlGQ2+syjh/QZ2KNy7p3uOhPJK1eH+UJx6RL+1+G9/zausowPnhU+QozzpIhrYLfczODHlln4qO1uABiPRl1sx9gATJv1LlqBGAI75wicYa0M+06WbdKhUkKfT770FygdtP+uoW3N9igkznl6VTQb3ppqmihVVAjiyowZeAhvcUQu2+hwobbBahdIqLW2Wq+HBMJdjydu9pNXyRRRybGtoPwKDhSpHl7NBFa08aBLpNrY1hXd7UA/QEGGVZ7WT0NLG5iMdYDcIPqZ5HcAAfc8xL0HFJkkNTVHwUUw7PNU6qYjU6VmH/7vAReK4d1BTHNjP0+GJrKZMOIVN4w13aZuXVId0ObbG0DSd9AqpZaakx6BYdtHZZ X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 6:LtJuxJJQ2MKv31Afqgt1pwFuYB8s12jK1yIzJ+3VuHE/vhWB3uN5aTmBlhP8XqLJiITi+uHiJ0XRvO9DKSOOLAPYljiiL5IXJr48cbw3OmuozF1Tmmn0PY1JY6nAz8934817UYTMRwgMGqwobb7fBj2P99oCB5BN2HkXVU9o0OZu+66xWt24x+fQg/I9V763QJ2BksFDpzVgGOsBAVQTVcBpb4qNQbHCgLU1mS7JR9ro6BYpuhViHfZTjEKOHRWQTTuvQVNNBDs+No9gNE9Zfb7z1tiu2e4xMopLWoaBko1DAEI9zR64cBXO3e5GG7dX/NKUqezS17P9mfGUjLQNJjEeV2wxN7hY6s4mi9uqpcM=; 5:zQJl44KkvkYGUtIEjUDpP44wWRUPtnoBo8K6EIEeqQcLrDcT3tVDHBJulMMaP4xWFrZ9hvI0uvS5n6KWogahNLGr+0DtUwIQi+xrmw4BE1OzxRCOCVXa20+ngdDZkGSO5kUaDFcep93SzMbvge4KNESqTTrg23VU/1M6DHOJW/k=; 24:HrSPq6h7Mb8kd1FmLL3vT4VWxtdLgK/7EuuSfo9mE9Y4qJ1mnGc1nAIWLMtw8csRWEBXajywDG803qhN7GJbTDucIz1JFk3/aweNOTH1LXA=; 7:lzOU7s5ZnGM6mNoA8ss+nXC7tHfU941vDXqa278VAGIYbApr5BqMNQLxPyTfM+QrM3R3WZ+mTa+56TH/iIRTGY5tgTU32mhsvUBKmKWbxJcX0iBKqVlofIRcGDq7qPGNOTwmXsH4fTUnrOx1wqkp4+s5jjDd/DkQO11woHZL5eCqMIZfvveWyk1vfJ2/HhorJ4TgECvF9NbXGlgeOUuSaqChYRamgdfPb9ixRaVmrMmyubN8NDKHB7uXt9YZe2MA SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Feb 2018 08:55:43.0730 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 188ff025-b730-41ff-8dd6-08d57388bbba X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0501MB2461 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add support for devlink resource abstraction. The resources are represented by a tree based structure and are identified by a name and a size. Some resources can present their real time occupancy. First the resources exposed by the driver can be observed, for example: $devlink resource show pci/0000:03:00.0 pci/0000:03:00.0: name kvd size 245760 unit entry resources: name linear size 98304 occ 0 unit entry size_min 0 size_max 147456 size_gran 128 name hash_double size 60416 unit entry size_min 32768 size_max 180224 size_gran 128 name hash_single size 87040 unit entry size_min 65536 size_max 212992 size_gran 128 Some resource's size can be changed. Examples: $devlink resource set pci/0000:03:00.0 path /kvd/hash_single size 73088 $devlink resource set pci/0000:03:00.0 path /kvd/hash_double size 74368 The changes do not apply immediately, this can be validate by the 'size_new' attribute, which represents the pending changed size. For example $devlink resource show pci/0000:03:00.0 pci/0000:03:00.0: name kvd size 245760 unit entry size_valid false resources: name linear size 98304 size_new 147456 occ 0 unit entry size_min 0 size_max 147456 size_gran 128 name hash_double size 60416 unit entry size_min 32768 size_max 180224 size_gran 128 name hash_single size 87040 unit entry size_min 65536 size_max 212992 size_gran 128 In case of a pending change the nested resources present an indication for a valid configuration of its children (sum of its children sizes doesn't exceed the parent's size). In order for the changes to take place hot reload is needed. The hot reload through devlink will be introduced in the following patch. Signed-off-by: Arkadi Sharshevsky Acked-by: Jiri Pirko --- devlink/devlink.c | 490 +++++++++++++++++++++++++++++++++++++++++++++++++++++- include/list.h | 5 + 2 files changed, 494 insertions(+), 1 deletion(-) diff --git a/devlink/devlink.c b/devlink/devlink.c index 8ef6041..4c392a7 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -185,6 +185,8 @@ static void ifname_map_free(struct ifname_map *ifname_map) #define DL_OPT_DPIPE_TABLE_NAME BIT(13) #define DL_OPT_DPIPE_TABLE_COUNTERS BIT(14) #define DL_OPT_ESWITCH_ENCAP_MODE BIT(15) +#define DL_OPT_RESOURCE_PATH BIT(16) +#define DL_OPT_RESOURCE_SIZE BIT(17) struct dl_opts { uint32_t present; /* flags of present items */ @@ -205,6 +207,10 @@ struct dl_opts { const char *dpipe_table_name; bool dpipe_counters_enable; bool eswitch_encap_mode; + const char *resource_path; + uint32_t resource_size; + uint32_t resource_id; + bool resource_id_valid; }; struct dl { @@ -953,6 +959,20 @@ static int dl_argv_parse(struct dl *dl, uint32_t o_required, if (err) return err; o_found |= DL_OPT_ESWITCH_ENCAP_MODE; + } else if (dl_argv_match(dl, "path") && + (o_all & DL_OPT_RESOURCE_PATH)) { + dl_arg_inc(dl); + err = dl_argv_str(dl, &opts->resource_path); + if (err) + return err; + o_found |= DL_OPT_RESOURCE_PATH; + } else if (dl_argv_match(dl, "size") && + (o_all & DL_OPT_RESOURCE_SIZE)) { + dl_arg_inc(dl); + err = dl_argv_uint32_t(dl, &opts->resource_size); + if (err) + return err; + o_found |= DL_OPT_RESOURCE_SIZE; } else { pr_err("Unknown option \"%s\"\n", dl_argv(dl)); return -EINVAL; @@ -1095,6 +1115,12 @@ static void dl_opts_put(struct nlmsghdr *nlh, struct dl *dl) if (opts->present & DL_OPT_ESWITCH_ENCAP_MODE) mnl_attr_put_u8(nlh, DEVLINK_ATTR_ESWITCH_ENCAP_MODE, opts->eswitch_encap_mode); + if ((opts->present & DL_OPT_RESOURCE_PATH) && opts->resource_id_valid) + mnl_attr_put_u64(nlh, DEVLINK_ATTR_RESOURCE_ID, + opts->resource_id); + if (opts->present & DL_OPT_RESOURCE_SIZE) + mnl_attr_put_u64(nlh, DEVLINK_ATTR_RESOURCE_SIZE, + opts->resource_size); } static int dl_argv_parse_put(struct nlmsghdr *nlh, struct dl *dl, @@ -2684,6 +2710,91 @@ struct dpipe_header { unsigned int fields_count; }; +struct resource { + char *name; + uint64_t size; + uint64_t size_new; + uint64_t size_min; + uint64_t size_max; + uint64_t size_gran; + enum devlink_resource_unit unit; + bool size_valid; + uint64_t size_occ; + bool occ_valid; + uint64_t id; + struct list_head list; + struct list_head resource_list; + struct resource *parent; +}; + +struct resources { + struct list_head resource_list; +}; + +struct resource_ctx { + struct dl *dl; + int err; + struct resources *resources; + bool print_resources; + bool pending_change; +}; + +static struct resource *resource_alloc(void) +{ + struct resource *resource; + + resource = calloc(1, sizeof(struct resource)); + if (!resource) + return NULL; + INIT_LIST_HEAD(&resource->resource_list); + return resource; +} + +static void resource_free(struct resource *resource) +{ + struct resource *child_resource, *tmp; + + list_for_each_entry_safe(child_resource, tmp, &resource->resource_list, + list) { + free(child_resource->name); + resource_free(child_resource); + } + free(resource); +} + +static struct resources *resources_alloc(void) +{ + struct resources *resources; + + resources = calloc(1, sizeof(struct resources)); + if (!resources) + return NULL; + INIT_LIST_HEAD(&resources->resource_list); + return resources; +} + +static void resources_free(struct resources *resources) +{ + struct resource *resource, *tmp; + + list_for_each_entry_safe(resource, tmp, &resources->resource_list, list) + resource_free(resource); +} + +static int resource_ctx_init(struct resource_ctx *ctx, struct dl *dl) +{ + ctx->resources = resources_alloc(); + if (!ctx->resources) + return -ENOMEM; + ctx->dl = dl; + return 0; +} + +static void resource_ctx_fini(struct resource_ctx *ctx) +{ + resources_free(ctx->resources); +} + struct dpipe_ctx { struct dl *dl; int err; @@ -3248,6 +3359,66 @@ err_match_parse: return -EINVAL; } +static struct resource * +resource_find(struct resources *resources, struct resource *resource, + uint64_t resource_id) +{ + struct list_head *list_head; + + if (!resource) + list_head = &resources->resource_list; + else + list_head = &resource->resource_list; + + list_for_each_entry(resource, list_head, list) { + struct resource *child_resource; + + if (resource->id == resource_id) + return resource; + + child_resource = resource_find(resources, resource, + resource_id); + if (child_resource) + return child_resource; + } + return NULL; +} + +static void +resource_path_print(struct dl *dl, struct resources *resources, + uint64_t resource_id) +{ + struct resource *resource, *parent_resource; + const char del[] = "/"; + int path_len = 0; + char *path; + + resource = resource_find(resources, NULL, resource_id); + if (!resource) + return; + + for (parent_resource = resource; parent_resource; + parent_resource = parent_resource->parent) + path_len += strlen(parent_resource->name) + 1; + + path_len++; + path = calloc(1, path_len); + if (!path) + return; + + path += path_len - 1; + for (parent_resource = resource; parent_resource; + parent_resource = parent_resource->parent) { + path -= strlen(parent_resource->name); + memcpy(path, parent_resource->name, + strlen(parent_resource->name)); + path -= strlen(del); + memcpy(path, del, strlen(del)); + } + pr_out_str(dl, "resource_path", path); + free(path); +} + static int dpipe_table_show(struct dpipe_ctx *ctx, struct nlattr *nl) { struct nlattr *nla_table[DEVLINK_ATTR_MAX + 1] = {}; @@ -3810,11 +3981,325 @@ static int cmd_dpipe(struct dl *dl) return -ENOENT; } +static int +resource_parse(struct resource_ctx *ctx, struct resource *resource, + struct nlattr **nla_resource) +{ + if (!nla_resource[DEVLINK_ATTR_RESOURCE_NAME] || + !nla_resource[DEVLINK_ATTR_RESOURCE_SIZE] || + !nla_resource[DEVLINK_ATTR_RESOURCE_ID] || + !nla_resource[DEVLINK_ATTR_RESOURCE_UNIT] || + !nla_resource[DEVLINK_ATTR_RESOURCE_SIZE_MIN] || + !nla_resource[DEVLINK_ATTR_RESOURCE_SIZE_MAX] || + !nla_resource[DEVLINK_ATTR_RESOURCE_SIZE_GRAN]) { + return -EINVAL; + } + + resource->name = strdup(mnl_attr_get_str(nla_resource[DEVLINK_ATTR_RESOURCE_NAME])); + resource->size = mnl_attr_get_u64(nla_resource[DEVLINK_ATTR_RESOURCE_SIZE]); + resource->id = mnl_attr_get_u64(nla_resource[DEVLINK_ATTR_RESOURCE_ID]); + resource->unit = mnl_attr_get_u8(nla_resource[DEVLINK_ATTR_RESOURCE_UNIT]); + resource->size_min = mnl_attr_get_u64(nla_resource[DEVLINK_ATTR_RESOURCE_SIZE_MIN]); + resource->size_max = mnl_attr_get_u64(nla_resource[DEVLINK_ATTR_RESOURCE_SIZE_MAX]); + resource->size_gran = mnl_attr_get_u64(nla_resource[DEVLINK_ATTR_RESOURCE_SIZE_GRAN]); + + if (nla_resource[DEVLINK_ATTR_RESOURCE_SIZE_NEW]) + resource->size_new = mnl_attr_get_u64(nla_resource[DEVLINK_ATTR_RESOURCE_SIZE_NEW]); + else + resource->size_new = resource->size; + + if (nla_resource[DEVLINK_ATTR_RESOURCE_OCC]) { + resource->size_occ = mnl_attr_get_u64(nla_resource[DEVLINK_ATTR_RESOURCE_OCC]); + resource->occ_valid = true; + } + + if (resource->size_new != resource->size) + ctx->pending_change = true; + + return 0; +} + +static int +resource_get(struct resource_ctx *ctx, struct resource *resource, + struct resource *parent_resource, struct nlattr *nl) +{ + struct nlattr *nla_resource[DEVLINK_ATTR_MAX + 1] = {}; + struct nlattr *nla_child_resource; + struct nlattr *nla_resources; + bool top = false; + int err; + + if (!resource) { + nla_resources = nl; + top = true; + goto out; + } + + err = mnl_attr_parse_nested(nl, attr_cb, nla_resource); + if (err != MNL_CB_OK) + return -EINVAL; + + err = resource_parse(ctx, resource, nla_resource); + if (err) + return err; + + resource->parent = parent_resource; + if (!nla_resource[DEVLINK_ATTR_RESOURCE_LIST]) + return 0; + + resource->size_valid = !!mnl_attr_get_u8(nla_resource[DEVLINK_ATTR_RESOURCE_SIZE_VALID]); + nla_resources = nla_resource[DEVLINK_ATTR_RESOURCE_LIST]; +out: + mnl_attr_for_each_nested(nla_child_resource, nla_resources) { + struct resource *child_resource; + struct list_head *list; + + child_resource = resource_alloc(); + if (!child_resource) + return -ENOMEM; + + if (top) + list = &ctx->resources->resource_list; + else + list = &resource->resource_list; + + list_add_tail(&child_resource->list, list); + err = resource_get(ctx, child_resource, resource, + nla_child_resource); + if (err) + return err; + } + + return 0; +} + +static const char *resource_unit_str_get(enum devlink_resource_unit unit) +{ + switch (unit) { + case DEVLINK_RESOURCE_UNIT_ENTRY: return "entry"; + default: return ""; + } +} + +static void resource_show(struct resource *resource, + struct resource_ctx *ctx) +{ + struct resource *child_resource; + struct dl *dl = ctx->dl; + + pr_out_str(dl, "name", resource->name); + if (dl->verbose) + resource_path_print(dl, ctx->resources, resource->id); + pr_out_uint(dl, "size", resource->size); + if (resource->size != resource->size_new) + pr_out_uint(dl, "size_new", resource->size_new); + if (resource->occ_valid) + pr_out_uint(dl, "occ", resource->size_occ); + pr_out_str(dl, "unit", resource_unit_str_get(resource->unit)); + + if (resource->size_min != resource->size_max) { + pr_out_uint(dl, "size_min", resource->size_min); + pr_out_uint(dl, "size_max", resource->size_max); + pr_out_uint(dl, "size_gran", resource->size_gran); + } + + if (list_empty(&resource->resource_list)) + return; + + if (ctx->pending_change) + pr_out_str(dl, "size_valid", resource->size_valid ? + "true" : "false"); + pr_out_array_start(dl, "resources"); + list_for_each_entry(child_resource, &resource->resource_list, list) { + pr_out_entry_start(dl); + resource_show(child_resource, ctx); + pr_out_entry_end(dl); + } + pr_out_array_end(dl); +} + +static void +resources_show(struct resource_ctx *ctx, struct nlattr **tb) +{ + struct resources *resources = ctx->resources; + struct resource *resource; + + list_for_each_entry(resource, &resources->resource_list, list) { + pr_out_handle_start_arr(ctx->dl, tb); + resource_show(resource, ctx); + pr_out_handle_end(ctx->dl); + } +} + +static int resources_get(struct resource_ctx *ctx, struct nlattr **tb) +{ + return resource_get(ctx, NULL, NULL, tb[DEVLINK_ATTR_RESOURCE_LIST]); +} + +static int cmd_resource_dump_cb(const struct nlmsghdr *nlh, void *data) +{ + struct resource_ctx *ctx = data; + struct nlattr *tb[DEVLINK_ATTR_MAX + 1] = {}; + struct genlmsghdr *genl = mnl_nlmsg_get_payload(nlh); + int err; + + mnl_attr_parse(nlh, sizeof(*genl), attr_cb, tb); + if (!tb[DEVLINK_ATTR_BUS_NAME] || !tb[DEVLINK_ATTR_DEV_NAME] || + !tb[DEVLINK_ATTR_RESOURCE_LIST]) + return MNL_CB_ERROR; + + err = resources_get(ctx, tb); + if (err) { + ctx->err = err; + return MNL_CB_ERROR; + } + + if (ctx->print_resources) + resources_show(ctx, tb); + + return MNL_CB_OK; +} + +static int cmd_resource_show(struct dl *dl) +{ + struct nlmsghdr *nlh; + struct resource_ctx ctx = {}; + int err; + + nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_RESOURCE_DUMP, + NLM_F_REQUEST | NLM_F_ACK); + + err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE, 0); + if (err) + return err; + + err = resource_ctx_init(&ctx, dl); + if (err) + return err; + + ctx.print_resources = true; + pr_out_section_start(dl, "resources"); + err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_resource_dump_cb, &ctx); + pr_out_section_end(dl); + resource_ctx_fini(&ctx); + return err; +} + +static void cmd_resource_help(void) +{ + pr_err("Usage: devlink resource show DEV\n" + " devlink resource set DEV path PATH size SIZE\n"); +} + +static struct resource * +resource_find_by_name(struct list_head *list, char *name) +{ + struct resource *resource; + + list_for_each_entry(resource, list, list) { + if (!strcmp(resource->name, name)) + return resource; + } + return NULL; +} + +static int +resource_path_parse(struct resource_ctx *ctx, const char *resource_path, + uint32_t *p_resource_id, bool *p_resource_valid) +{ + struct resource *resource; + uint32_t resource_id = 0; + char *resource_path_dup; + struct list_head *list; + const char del[] = "/"; + char *resource_name; + + resource_path_dup = strdup(resource_path); + list = &ctx->resources->resource_list; + resource_name = strtok(resource_path_dup, del); + while (resource_name != NULL) { + resource = resource_find_by_name(list, resource_name); + if (!resource) + goto err_resource_lookup; + + list = &resource->resource_list; + resource_name = strtok(NULL, del); + resource_id = resource->id; + } + free(resource_path_dup); + *p_resource_valid = true; + *p_resource_id = resource_id; + return 0; + +err_resource_lookup: + free(resource_path_dup); + return -EINVAL; +} + +static int cmd_resource_set(struct dl *dl) +{ + struct nlmsghdr *nlh; + struct resource_ctx ctx = {}; + int err; + + err = resource_ctx_init(&ctx, dl); + if (err) + return err; + + ctx.print_resources = false; + err = dl_argv_parse(dl, DL_OPT_HANDLE | DL_OPT_RESOURCE_PATH | + DL_OPT_RESOURCE_SIZE, 0); + if (err) + goto out; + + nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_RESOURCE_DUMP, + NLM_F_REQUEST); + dl_opts_put(nlh, dl); + err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_resource_dump_cb, &ctx); + if (err) { + pr_err("error getting resources %s\n", strerror(ctx.err)); + goto out; + } + + err = resource_path_parse(&ctx, dl->opts.resource_path, + &dl->opts.resource_id, + &dl->opts.resource_id_valid); + if (err) { + pr_err("error parsing resource path %s\n", strerror(err)); + goto out; + } + + nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_RESOURCE_SET, + NLM_F_REQUEST | NLM_F_ACK); + + dl_opts_put(nlh, dl); + err = _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL); +out: + resource_ctx_fini(&ctx); + return err; +} + +static int cmd_resource(struct dl *dl) +{ + if (dl_argv_match(dl, "help") || dl_no_arg(dl)) { + cmd_resource_help(); + return 0; + } else if (dl_argv_match(dl, "show")) { + dl_arg_inc(dl); + return cmd_resource_show(dl); + } else if (dl_argv_match(dl, "set")) { + dl_arg_inc(dl); + return cmd_resource_set(dl); + } + pr_err("Command \"%s\" not found\n", dl_argv(dl)); + return -ENOENT; +} + static void help(void) { pr_err("Usage: devlink [ OPTIONS ] OBJECT { COMMAND | help }\n" " devlink [ -f[orce] ] -b[atch] filename\n" - "where OBJECT := { dev | port | sb | monitor | dpipe }\n" + "where OBJECT := { dev | port | sb | monitor | dpipe | resource }\n" " OPTIONS := { -V[ersion] | -n[no-nice-names] | -j[json] | -p[pretty] | -v[verbose] }\n"); } @@ -3841,6 +4326,9 @@ static int dl_cmd(struct dl *dl, int argc, char **argv) } else if (dl_argv_match(dl, "dpipe")) { dl_arg_inc(dl); return cmd_dpipe(dl); + } else if (dl_argv_match(dl, "resource")) { + dl_arg_inc(dl); + return cmd_resource(dl); } pr_err("Object \"%s\" not found\n", dl_argv(dl)); return -ENOENT; diff --git a/include/list.h b/include/list.h index 5af737c..5d86b13 100644 --- a/include/list.h +++ b/include/list.h @@ -108,6 +108,11 @@ static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h) n->pprev = &h->first; } +static inline int list_empty(const struct list_head *head) +{ + return head->next == head; +} + #define hlist_for_each(pos, head) \ for (pos = (head)->first; pos ; pos = pos->next) From patchwork Wed Feb 14 08:55:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arkadi Sharshevsky X-Patchwork-Id: 873285 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="oMqsFSE6"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zhCtl0ylQz9t2x for ; Wed, 14 Feb 2018 19:56:15 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966555AbeBNI4M (ORCPT ); Wed, 14 Feb 2018 03:56:12 -0500 Received: from mail-db5eur01on0068.outbound.protection.outlook.com ([104.47.2.68]:43664 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S935004AbeBNIzu (ORCPT ); Wed, 14 Feb 2018 03:55:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=YuE2zScvJkTRO0mk2c+/LIMolIr4Wr912CMXi+SqDro=; b=oMqsFSE6/OD3wUaQQWFDm1R9f4dv0tkuGsbw283ac1uciekMBWaod499r2LHWowKu94jyshfj9YoMBqcUow2l+uVddupuOyrucZQVfdVI6OO31bO8fegNJ+nSYcOFUJsK/avQub7T13GUtWF1YYcjfo1QiOZzaUQ75uibvyg9/U= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=arkadis@mellanox.com; Received: from dev-r-vrt-156.mtr.labs.mlnx (37.142.13.130) by VI1PR0501MB2461.eurprd05.prod.outlook.com (2603:10a6:800:68::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.485.10; Wed, 14 Feb 2018 08:55:44 +0000 From: Arkadi Sharshevsky To: netdev@vger.kernel.org Cc: davem@davemloft.net, stephen@networkplumber.org, dsa@cumulusnetworks.com, mlxsw@mellanox.com, Arkadi Sharshevsky Subject: [PATCH iproute2 4/7] devlink: Add support for hot reload Date: Wed, 14 Feb 2018 10:55:19 +0200 Message-Id: <1518598522-27713-5-git-send-email-arkadis@mellanox.com> X-Mailer: git-send-email 2.4.11 In-Reply-To: <1518598522-27713-1-git-send-email-arkadis@mellanox.com> References: <1518598522-27713-1-git-send-email-arkadis@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: HE1PR0102CA0039.eurprd01.prod.exchangelabs.com (2603:10a6:7:7d::16) To VI1PR0501MB2461.eurprd05.prod.outlook.com (2603:10a6:800:68::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 99b68791-0e50-4302-95aa-08d57388bcc5 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603307)(7153060)(7193020); SRVR:VI1PR0501MB2461; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 3:foeq2wMku9ANyQUXlUb0d64WnzasZljKd39NrJ0t4pNvY973iimwBlW/c+z3AwdYPLKfWvsDy4nvlUOO5yOLEOap5xC2Xvt/kKmbhsJqFtncNHSRR2OzIcb2Vg5AkKt4qxeCE1CHyBwAg2jb9MrTfeaEGBMK4PFCKCnmoMDJwaHgaqn/LydKptLN9nM1sA6TV8E1IEtRMeeRuH7h/Zt5W6Ckv3JGR0ntks1oWPdcOPaG/be9SDbTRswR7vLE+dKD; 25:k16VD2NpomEsj2mU2HM1BzNxrFpAYUgNDMhQtk1xxIi5DFfu1DFqAitxNnkmqZ59THtxLU4lmxTrqSvbCQc78YresRKvc62zskqxCPeXd2GPRGHf8tgyyb65pnTsL/SiXh7jTA4teZJr/lCcduaSQxFDNN8YILUGhg09XZoMwYR8hiG4kzg4gfdk84YHD+VtuMhnrBL9rpCwXfXs913WrD/ur1TpdfLZkeST89SNH3pgOzsEO1oF5Ic0NbqE+0dCzENstaOaAsYqehRK+92USlMknJHs8+mybnAxVgCNiMVwEOBRuf5Qb9qgeueg/sLrzramyaAtYqv9hkqBiKolng==; 31:X/i5WQn23YIRA5nVHX0MM9tuRMR+kwhMk1vaCKaqDzLJgK9hZRmU6Dc5tg/AlLlQdQRtwZuWpb0ahZTqbs+b/y2td2c+uDPl6dBGbQxVV6x3ego3keoY8BUsBx3fqzS/3wpwV73u4e8CulD7IgQTN5jhUzJo6uOrcDaxf+YEimL5OGQKnvyTNHvgAXnPXcR8E6CCKPcI3OnP6FOEbuNzezNutcLHweM3XCGISpx5UAw= X-MS-TrafficTypeDiagnostic: VI1PR0501MB2461: X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 20:b3tfSBV0DQDSz4fySFboTEUATUFrtQfU21AXakcH1gUIz/JayLSkFG8GwbwevVofq+P99rIgPwa8rSkSIoByKIx/VsUYC4wIQxkvCm3BrWJI0b03kcLeqj6jy3sFhRUPcTT0jqQys24gzeUXwgujJVLq8+kRWyLX1sz+tKF8VxHbD6KBphVMLUCgKuoZiqO1KSA8e1wRbJfnpb4byOrfmF9fy4YuPNU5sO0jLdrADBW5ec5JJ61P/BmFZA8Fw6H3anj+UAIVp8qBeN3+ACwf+ZpKjkcW30POuIzVErjReqgrD4c2o03U2cIiG56S3bWueMBNYu9igZYZcnCBSkix396Tz/uZps7k1IR1SBUNR3hwWHUJNd9y1bWSztqcRHzASaGFAKOviE+dxqEaQXsZxMybRvt2o8TfoZiZ7Dfqyc8nysxNd68YyRghzVOkk/Z5oX24YPbdPba2Q9Zzot7BxpS9sF0+PCWSL8EhWSMWrwnzgGG+M066ooSO6Sq/Xp8A; 4:SiJLSOJjn7YJA0a249p7Jh/fYV53dKztf0zyMDOIdcA/LOz6uUVDsQvUyOcLR0GDPYvqGAxw4VaHBKe/hTi6sU3OP+KG275tXhO8I8QCUhz9KxTKwGR2zz8RgS3H/TtH1BX0b7vz3gw3FnB+b+0Y6xr/gFq/VxBoZdV9T1fnOgJiDG3Rt5T5RL5iyhGc5OuIDzlp/0+Dug4WndiI2Psj3s4KQmpnz53yBERWM61pbMwkCp9eoAHBvXuc8ErWTfgkHnfjFU1yfDYs7E/D5eHG/Q== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(3231101)(944501161)(10201501046)(3002001)(93006095)(93001095)(6055026)(6041288)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(20161123564045)(20161123562045)(6072148)(201708071742011); SRVR:VI1PR0501MB2461; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0501MB2461; X-Forefront-PRVS: 0583A86C08 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(39380400002)(39860400002)(366004)(396003)(376002)(189003)(199004)(50226002)(81156014)(2361001)(6116002)(6512007)(7736002)(26005)(86362001)(3846002)(81166006)(47776003)(305945005)(107886003)(316002)(6506007)(106356001)(8676002)(16586007)(53936002)(478600001)(386003)(5660300001)(76176011)(25786009)(48376002)(52116002)(4326008)(2950100002)(6916009)(97736004)(6666003)(8936002)(66066001)(2906002)(68736007)(2351001)(36756003)(105586002)(186003)(50466002)(16526019)(59450400001)(6486002)(51416003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0501MB2461; H:dev-r-vrt-156.mtr.labs.mlnx; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 23:ze4kQMjJJ78fJa55JpxfLBUMtg4+yJ21T5REtsA7G/K2eH024vdLQI7+uAG7fCzH87BJ0TP3I5HZIXpEWzWhLKy1HUwdx7egVeMB3D9C6u/1/0cSGNQk/99VxY9XijOplPzm9+g9b6IgqUvpdgo65+L5cDbTemrKfWpjITFShztJcwXHf/udZxLCz8wQm9aTXHStKDuZ38AgkXiug3N+Y13zFTolOOb6CEqgTpO3fxnlRUMyMfKUcPI7E3cvhG5JUBDodzpB82BZj42xd7tEtBCpNzJ3y2xDZDgP4CrRspcL9feWtZkyLR8TfEU4W1LKAGEo7zqSkXdwms/k3zqdpj6kY1OKUqvMIieGpSTnX/9nLkmTsArSW/uBZrgLrnzyc/gg4tvl+DCfPsIqT74AiKBiOCoqhPEW0QsWnmqGS3HFaXcIaqvqh1aekLEa4hJLYVgst9rzey0dzqGRhqUVKAF5v8LDeYVMTIlCUGDzn4fJEILIG7bJaFjO8Jrv3cTZK5L3INyYtb2lvwmakDPkxyakjoto69zEj17yfJs038qngqpErwWnPwGW4Lzav/bf/ap16PyJwegXVWzLdJLWq5t3sw8hoK57WVP3cpJE+a4wLdOWdztIpvVQXPaMrcx+MuGciMreqhdw29sMyFn/mNfIixNNAmJ96Pn2i666F5ogXiceDC+0bAF5QMiIq99xTmJyXFZUVsKdqBy5qMjg1lLGJmt5tbW2pZ17akK8tBB1oLeJ/iONfQ9x8sildwzFXPCJm4L2WZOWwhxveTigNC0ankQcCoGHLQWHmysYBnO86zusTEYopsQzqMviuu0c8O79z0IeM2lfIuYapZ0BL3ml+1NkorRf9d++Yk5UMT172M6259QvIoReOHbQG7LYh8i+0ntPezZJcx58p6zjl3J3/GU8ojs3lotg7/9y7S/P1PmUsaxMX5heMBGMnUga9/2MJS/PAL5kB9sxvAQpL3O2IDfXZal5a9vgMyF34oyAiDINAj16MNOIaHzttqUC2aPHMGTQqMx5EwLi3MKjklo/Z5uEa6c29cCc4Q4ioru2RtiTbyGY6UTllrLLdmZZB/JM4NnwI6Onh7Vr0b933ByRn51Yow/jiNDULXsJJHBFpXjs1jz7JVDfiSUp97VmK9YFfKjOMkYhHz1ynO5S5ib+z5/GPqVLad7rwh+88J4= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 6:qCmDs995XGTaNxge/PNNWskQgx60T9KItR8WvcBy/IemSarQOKTVu4OBJzXeMOtBWDEx8x0m58I1tRpZOOBEqIcEjIXtEv5ALvg/b9uUlYupQgVyuHKqvFkcIRnWIox0SO4GBpSCkCMM3jIKcoChh4sm+eoCiLKYTYrI6T2JaEOuEDIZzy3V5d1lEynAsW7fS6lnCuvJA6x51tJUbwFSBVZezDS0N0uAFFwOxwJNcdh5SgithxUQTIIHx2B+Yt7TmI/PSVWwgaWQTWilTEKbopOsv36EjMqwVqEa0EZNsja/jnjF8blNNzIg3WZGVkmuemEhPwOFN4W+9GReG5L8PBUey1H0N/N/3piNv3t5+RM=; 5:2EghlT/dNFTCOgA4QH6DEXd3sdjZ80L5ZxBrjfh+T3ObkeKKC+lg7IDRJtQQ5eSolRlnZtRxEKpUvHCYALqhpMI9xAd4WY3kGWoO/gG2YGcKeO+A1X5eIlu7JIkpt6kHLtYMNMciuE41iBEI6C5heak50XhNaeU0MA6gT+xM2Vw=; 24:lUVUfcGbMmw1nm8DsAU5Lqshqr+DSK8bAmmJ0Ko+zgCxOP3IG3Mlfiz65igIKLBW+ohO//FeDYkGrSZtA2nAAqU+iQ+Md92vEQMs6yzM7jE=; 7:nTiFpOIKY1zmejr+MvDpDMoeieOJNghotqmpq2l2VMDyIGxPZeoXkwUuWKaaWlswi1AIg+pGerCdxwhLHUUy6kcJb611QThJygoavIH1xFYZaN4/7GQsKgNevt17ygCnJMDlyxOa+mK1ph38ewBvuGSIgAS0YhDudGjd01dsYhzhbyTKDF+DF/k+Dh6ID+XbTGNg4Pv6jFJ7oZObc5jGzd3288uewwnEqN3ic8PJVQH2KXDojamVOjHfR2XsUeLr SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Feb 2018 08:55:44.9323 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 99b68791-0e50-4302-95aa-08d57388bcc5 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0501MB2461 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add support for hot reload. It should be used in order for resource updates to take place. Signed-off-by: Arkadi Sharshevsky Acked-by: Jiri Pirko --- devlink/devlink.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/devlink/devlink.c b/devlink/devlink.c index 4c392a7..21835d9 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -1179,6 +1179,7 @@ static void cmd_dev_help(void) pr_err(" [ inline-mode { none | link | network | transport } ]\n"); pr_err(" [ encap { disable | enable } ]\n"); pr_err(" devlink dev eswitch show DEV\n"); + pr_err(" devlink dev reload DEV\n"); } static bool cmp_arr_last_handle(struct dl *dl, const char *bus_name, @@ -1620,6 +1621,31 @@ static int cmd_dev_show(struct dl *dl) return err; } +static void cmd_dev_reload_help(void) +{ + pr_err("Usage: devlink dev reload [ DEV ]\n"); +} + +static int cmd_dev_reload(struct dl *dl) +{ + struct nlmsghdr *nlh; + int err; + + if (dl_argv_match(dl, "help") || dl_no_arg(dl)) { + cmd_dev_reload_help(); + return 0; + } + + nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_RELOAD, + NLM_F_REQUEST | NLM_F_ACK); + + err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE, 0); + if (err) + return err; + + return _mnlg_socket_sndrcv(dl->nlg, nlh, NULL, NULL); +} + static int cmd_dev(struct dl *dl) { if (dl_argv_match(dl, "help")) { @@ -1632,6 +1658,9 @@ static int cmd_dev(struct dl *dl) } else if (dl_argv_match(dl, "eswitch")) { dl_arg_inc(dl); return cmd_dev_eswitch(dl); + } else if (dl_argv_match(dl, "reload")) { + dl_arg_inc(dl); + return cmd_dev_reload(dl); } pr_err("Command \"%s\" not found\n", dl_argv(dl)); return -ENOENT; From patchwork Wed Feb 14 08:55:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arkadi Sharshevsky X-Patchwork-Id: 873282 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="IZh4KpQK"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zhCtR0y1Fz9t2x for ; Wed, 14 Feb 2018 19:55:58 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935110AbeBNIz4 (ORCPT ); Wed, 14 Feb 2018 03:55:56 -0500 Received: from mail-db5eur01on0068.outbound.protection.outlook.com ([104.47.2.68]:43664 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934850AbeBNIzx (ORCPT ); Wed, 14 Feb 2018 03:55:53 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=+nEwZCFkSJ9qEsQ84fLZBiLzZTBRMYZaUCPuP6FAsxQ=; b=IZh4KpQKuxEFVCjHu3WaK0zJ+7xAvgclKRgmUop6WJ+/tGomWosfbYA2NRAATNk2IbJ05z5LRIQ3fgWthY7ubTsOOHvvA1CYsveFgW2Wh7FSkSe0OmhjZAF7zusprg4sMMLb+eeXn52V5/u8H+xK2qGxkIQnZIJKRmkD5rgOR2I= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=arkadis@mellanox.com; Received: from dev-r-vrt-156.mtr.labs.mlnx (37.142.13.130) by VI1PR0501MB2461.eurprd05.prod.outlook.com (2603:10a6:800:68::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.485.10; Wed, 14 Feb 2018 08:55:46 +0000 From: Arkadi Sharshevsky To: netdev@vger.kernel.org Cc: davem@davemloft.net, stephen@networkplumber.org, dsa@cumulusnetworks.com, mlxsw@mellanox.com, Arkadi Sharshevsky Subject: [PATCH iproute2 5/7] devlink: Move dpipe context from heap to stack Date: Wed, 14 Feb 2018 10:55:20 +0200 Message-Id: <1518598522-27713-6-git-send-email-arkadis@mellanox.com> X-Mailer: git-send-email 2.4.11 In-Reply-To: <1518598522-27713-1-git-send-email-arkadis@mellanox.com> References: <1518598522-27713-1-git-send-email-arkadis@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: HE1PR0102CA0039.eurprd01.prod.exchangelabs.com (2603:10a6:7:7d::16) To VI1PR0501MB2461.eurprd05.prod.outlook.com (2603:10a6:800:68::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: f8ad185b-bf92-4df5-c490-08d57388bdd7 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603307)(7153060)(7193020); SRVR:VI1PR0501MB2461; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 3:0hlnH7I1YC9K4T1hjN5lwCJ6RXyEQT1M0ZxBuwUhen3KBt71hFFRRh0NtMTyjIqwoJqCAOhCDYXdhWthOiZ+7etONyJg7rS3jjiTRtVE9sqw7f/it6FLW359c/qFqvkSb8D05O+p+0jNRb4POkDWQNw+E+ZZIa7iqaHI2hHgUpQjRptOk54Gvnw+qRj/dFKtLYSrS8AV3d3G4MPv0ijqBWN+4/em8Ujze3jqpbBirzApRG4RxOuVL89GZ0lHICJu; 25:L99/IFoCjrwUH5h8+cF15DmqL2p26s16zGRRV3fAohQwCYhrMFlOEVZtRgcZl4skzzXEumfcHp4H/WCsS5FoILbSwy9RBQguIXY8lvRw8QEaM7Pn2RDW/flm9M+k8wDKZ7Qh9C3kyvBy84LEJy9suHvawcThUWtidkEjD13FDgKmhAFRDbQFHU4yTvSyQ8w3uiQ1rZjjRympOWpFvYMIeP8Bp4EBaefHxhVn9xu60BdpwvEQfbGhtKDnK8axELrHcq7CbWfd8TiZBs06n0761MYNStPVAzoZ4AVU3SE0Y10qc3EmQibFEeBLLlVGSBupUlrr/0m6ZyV6eHAGLwyIWA==; 31:xfMLc65zHaDVPrfbY7xr6ITXc/zyk13OXWBwexVj1VrATDgGoWvt5sxepWgxTmFf7t3GFldgAd1TFXDg2H/tZFqjzWV/jD2ni+VlwtDwFGzI3KMBdx0v4pJTKj0IHeaD6YRP0iB99zd/api5ly+45SHHq2f8KQZvwYvNW2MbqPSyv1wkyDR7If0jvaU1xJv9n9VxLZF8jakyqsDbMbjs9g890ep5HLvYZv93QIgiZAI= X-MS-TrafficTypeDiagnostic: VI1PR0501MB2461: X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 20:6UG1NXa141oG8FeKUyM7RmtWxgluDOmIxTTxvDiEt8Bz1xJgWhzAMvBI8qo2KFIxRkx1ts+ljqnGX55qWd2HhnV+mI8YjVtR/VnAnD9Qq890/e1LFmt4AkEjqwpyUBmtCdOb94amHMOlFGfvz78DeEa7paYVd+Ea0bQ6MJCH5iK9tWEzRi4qjOU4X31Ta3Z+42xHS30ORKTnUI6it46BZGuEqpgWAInBdwPz9JzmMlrxJR8icAp4R9E/wnSiRRkNieqSseiiYZCASjfhflGmw1V5t0D8lZlcKKMP0sIgkrJwhWYSfqp9Q5PAHUOoIvRjXj+8gn3hIvgVqx7srWtzcbrjdt1ZE5x6Fny77zF+1rX5gTa4JjV/2tjJb17dUn2aRmRYD9iyGAm2n+Ow/cwmAhP6XmlHE8EMoBTlog6m/7H5FzhsLPIgawQE8o4yhdtBDMx6R/MK/e6CKiVHssJjhlA7aBh+aKV3G+PUfoyCYJoO4yaOABMiiQHjoJPcPl9i; 4:f7hJ0y0UW89jkUqGo5DtYnwEIK8Su9HF4jumOk98yWMLtbN5YjRIp+zq8Hh/q0xGZbmAcvq72n56pJUGngikH8qXCeEsjchrea0Ku+ueXHOkMkYaPOY4EaoDNOn+/Ca/EgmunALrwulmoA0ARw/QDFVG6ZtlW3Ved+ZQk1b3SNnh5DQRKVb6M+mY+o+O+ADGy3mW8fdjP9g2c8P2oEkZsDrwMmNLGaEMLfbDpg+KEuWfu0kAEuwzSSJETu8GTNQj/ifRH1/ks5gh7J//clQt5g== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(3231101)(944501161)(10201501046)(3002001)(93006095)(93001095)(6055026)(6041288)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(20161123564045)(20161123562045)(6072148)(201708071742011); SRVR:VI1PR0501MB2461; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0501MB2461; X-Forefront-PRVS: 0583A86C08 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(39380400002)(39860400002)(366004)(396003)(376002)(189003)(199004)(50226002)(81156014)(2361001)(6116002)(6512007)(7736002)(26005)(86362001)(3846002)(81166006)(47776003)(305945005)(107886003)(316002)(6506007)(106356001)(8676002)(16586007)(53936002)(478600001)(386003)(5660300001)(76176011)(25786009)(48376002)(52116002)(4326008)(2950100002)(6916009)(97736004)(6666003)(8936002)(66066001)(2906002)(68736007)(2351001)(36756003)(105586002)(186003)(50466002)(16526019)(59450400001)(6486002)(51416003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0501MB2461; H:dev-r-vrt-156.mtr.labs.mlnx; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 23:9RFUEwz3qSZjWGCsOMn+r8wkJoK7sgly/+jGIoYbFAapSLE+F8Q+Jzx7QSZvRIuLOCTr7YDn4jifU90ORRkmEk0RvEEH2wcBH47bxjHzR/EnW2/AeiiXBnXARYQRM5TAbJf6dQH4Rm3b+NOLazMVGV3DFP2GrMqaMrk9PkjLj22pi/jyCNJKwYB+nGxG5JddCw+w1OP++vzKvqL+1HScCHkdpq/uxdIX09/iCO3/qfc90dEPZYKPhtcNrKOo2bz1JYAkBY9RBmIQzFjhy6GpmZU/bCRCBNownxQtP/6HyytowwfXVV+a2jU2mVBDNtHPDWyvpJ1TEsG6/KxQ2pQgkHtbw0c10jAjlzhCg9HkWmaww71suxVmytglve3pvHwGi95vKDB/86St7+siwwfRl9j+jJv3EIW7lC3r0sPbWh6uR0HB0ZCTyEfnllHkwonB5oIXWLmDHRn+lIWoIMzxq35kXNIF7/HBOguvkoejH1HOlWlZY+2eTP0xtNsr1cqTVVhFbFMoxYAkOFn+u7ZiJTVua+d33iftJaGInMf/Y5OMuGOoafOdhUXGOz7cqr1joT5Bb0lDqmwEOU6geek/H3KkS2LFiVb/P5CgNciSPnLhp2rTAlz99EDY0nPZtAXO9PEjD6qZzkvCHllYylOiLlZNsHxr1ld4oiaNV8kgqtpITHT4BYYgyC/e+QTgI6lpyKk/460HPUS5LdYvB2s2tT7fWGh7REEbsbRKTZryxdqmszsEouMcekitmxN1eyb0toaedrT7iJ/WA42NUoAcAWjWvq6PNrc8dG+Rx+YOxcwaM/U4y68HwqzfTobNXqLI7SNDn4CRAMgI6W/dmO9S9M8x9gwC59B72RutSP02NXMxANr66un50khFaL8hjN9KPiJGuhPERxtk/qyNLrTmCa36vyPs/01xHNF6hd5hOZvFf7qWzADG7v9QfWmNKAe2OkVXRJD9XeFmnQm65UFtkfcztmYnVeVr8eBvbF5Ltxqsvhf1Vx+51LchOB9U0zec86CKOlYmoBrF8h3vxPVW4PPPbIgi/dxgprq5djhlRPSDCc3VK/pPpqJLtH3sfXMx98IeDsxmvHzYaVJnnWQI+NBuHftXLBFavrE2IkPns4ca4DlDZhEpMNCh4CjxK4chNKLXBzn2nWGJvUGXuQr1WsR6K4laoxiBltS01/BHhc8= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 6:ttLnuVbutD9GTZrmYnHppMc1X/Rml2WkCqfdvNcSWJUfgLoBUsYAQfGBLUYOkS6uhsETeNdXyRX9ahA3HvAPO/mX/XcR761Im5XlYyTWlVlHKwlUKzdlAaMZsU/ITkNRIFNhJ575IKalDs4dwainVYSZ4g01jUpG4Vrzdaf8aD0ju10UH83JtrcyOuQnIiEW4vK55QvVjcsAYmJOC3p9Blxez3/U25kALvxiBkS+rqKoH9V5aj9EcerYC9WqIAWfn962Ot3h3eC9sCWzyVKKvEoTF5W+cUXdyAGtVooUxE6DVNF3ZEtGpwhoIRoSAGVYC+ybWn5NQTOIvVyQ3jxn7WNbLorEYzhW+mqOWjMaXDg=; 5:6AmvHJF/IJpZ3DAFpb4fe1XHuZAb2AFJgvJjZoDiUnhBTjXqzwFHvtCJzKYPvHGXOl2J25INrUOIMP2loelyCONb7TcQu80waDfPPGSzH3HLIz2lGITtr2or+xkNJK9djlMoDT4mtObxO10PtdMuXQjbHU3PsJmdDfl8fh3EQo4=; 24:+Kdw0wGOvZdV6gojqqU4WjYzLx4IhlEnSNHAzh334bs2i9S/2zSRxI5W5Tq2qqzmCbaV4XTBW9YryOXJvYkQ67MYHaD8INUfA9wP+vZJoms=; 7:yQleI4N7GnmQuT0lj6kF0ygUXctab7p6VwBWqr/JvjXBmIgafswYnYz37apLuVWou55F16DpmZpgJ/WReMfR4gVmjUFC9imgyXC5IfDNmxR3NslNPp1yKkmL+KoA/PkllF/BCUzACVyHK/dN08U+szpghyRiIWkrfvPqjuNkJa2iLY1x6kUZV1ZkaXxJrDfVAbtv2WCQfVuDs5dKhlhLYyDn5qBL9mmPlGkKn8PEA0kGJgzHvMpclT407krIhHBo SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Feb 2018 08:55:46.7292 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f8ad185b-bf92-4df5-c490-08d57388bdd7 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0501MB2461 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Move dpipe context to stack instead of dynamically. Signed-off-by: Arkadi Sharshevsky Acked-by: Jiri Pirko --- devlink/devlink.c | 67 ++++++++++++++++++++++--------------------------------- 1 file changed, 27 insertions(+), 40 deletions(-) diff --git a/devlink/devlink.c b/devlink/devlink.c index 21835d9..aec36ff 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -2882,25 +2882,15 @@ static void dpipe_header_del(struct dpipe_header *header) list_del(&header->list); } -static struct dpipe_ctx *dpipe_ctx_alloc(struct dl *dl) +static int dpipe_ctx_init(struct dpipe_ctx *ctx, struct dl *dl) { - struct dpipe_ctx *ctx; - - ctx = calloc(1, sizeof(struct dpipe_ctx)); - if (!ctx) - return NULL; ctx->dl = dl; INIT_LIST_HEAD(&ctx->global_headers); INIT_LIST_HEAD(&ctx->local_headers); - return ctx; -} - -static void dpipe_ctx_free(struct dpipe_ctx *ctx) -{ - free(ctx); + return 0; } -static void dpipe_ctx_clear(struct dpipe_ctx *ctx) +static void dpipe_ctx_fini(struct dpipe_ctx *ctx) { struct dpipe_header *header, *tmp; @@ -3171,7 +3161,7 @@ static int cmd_dpipe_header_cb(const struct nlmsghdr *nlh, void *data) static int cmd_dpipe_headers_show(struct dl *dl) { struct nlmsghdr *nlh; - struct dpipe_ctx *ctx; + struct dpipe_ctx ctx = {}; uint16_t flags = NLM_F_REQUEST | NLM_F_ACK; int err; @@ -3181,20 +3171,19 @@ static int cmd_dpipe_headers_show(struct dl *dl) if (err) return err; - ctx = dpipe_ctx_alloc(dl); - if (!ctx) - return -ENOMEM; + err = dpipe_ctx_init(&ctx, dl); + if (err) + return err; - ctx->print_headers = true; + ctx.print_headers = true; pr_out_section_start(dl, "header"); - err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_header_cb, ctx); + err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_header_cb, &ctx); if (err) - pr_err("error get headers %s\n", strerror(ctx->err)); + pr_err("error get headers %s\n", strerror(ctx.err)); pr_out_section_end(dl); - dpipe_ctx_clear(ctx); - dpipe_ctx_free(ctx); + dpipe_ctx_fini(&ctx); return err; } @@ -3532,13 +3521,13 @@ static int cmd_dpipe_table_show_cb(const struct nlmsghdr *nlh, void *data) static int cmd_dpipe_table_show(struct dl *dl) { struct nlmsghdr *nlh; - struct dpipe_ctx *ctx; + struct dpipe_ctx ctx = {}; uint16_t flags = NLM_F_REQUEST; int err; - ctx = dpipe_ctx_alloc(dl); - if (!ctx) - return -ENOMEM; + err = dpipe_ctx_init(&ctx, dl); + if (err) + return err; err = dl_argv_parse(dl, DL_OPT_HANDLE, DL_OPT_DPIPE_TABLE_NAME); if (err) @@ -3546,9 +3535,9 @@ static int cmd_dpipe_table_show(struct dl *dl) nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_DPIPE_HEADERS_GET, flags); dl_opts_put(nlh, dl); - err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_header_cb, ctx); + err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_header_cb, &ctx); if (err) { - pr_err("error get headers %s\n", strerror(ctx->err)); + pr_err("error get headers %s\n", strerror(ctx.err)); goto out; } @@ -3557,11 +3546,10 @@ static int cmd_dpipe_table_show(struct dl *dl) dl_opts_put(nlh, dl); pr_out_section_start(dl, "table"); - _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_table_show_cb, ctx); + _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_table_show_cb, &ctx); pr_out_section_end(dl); out: - dpipe_ctx_clear(ctx); - dpipe_ctx_free(ctx); + dpipe_ctx_fini(&ctx); return err; } @@ -3930,13 +3918,13 @@ static int cmd_dpipe_table_entry_dump_cb(const struct nlmsghdr *nlh, void *data) static int cmd_dpipe_table_dump(struct dl *dl) { struct nlmsghdr *nlh; - struct dpipe_ctx *ctx; + struct dpipe_ctx ctx = {}; uint16_t flags = NLM_F_REQUEST; int err; - ctx = dpipe_ctx_alloc(dl); - if (!ctx) - return -ENOMEM; + err = dpipe_ctx_init(&ctx, dl); + if (err) + return err; err = dl_argv_parse(dl, DL_OPT_HANDLE | DL_OPT_DPIPE_TABLE_NAME, 0); if (err) @@ -3944,9 +3932,9 @@ static int cmd_dpipe_table_dump(struct dl *dl) nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_DPIPE_HEADERS_GET, flags); dl_opts_put(nlh, dl); - err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_header_cb, ctx); + err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_header_cb, &ctx); if (err) { - pr_err("error get headers %s\n", strerror(ctx->err)); + pr_err("error get headers %s\n", strerror(ctx.err)); goto out; } @@ -3955,11 +3943,10 @@ static int cmd_dpipe_table_dump(struct dl *dl) dl_opts_put(nlh, dl); pr_out_section_start(dl, "table_entry"); - _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_table_entry_dump_cb, ctx); + _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_table_entry_dump_cb, &ctx); pr_out_section_end(dl); out: - dpipe_ctx_clear(ctx); - dpipe_ctx_free(ctx); + dpipe_ctx_fini(&ctx); return err; } From patchwork Wed Feb 14 08:55:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arkadi Sharshevsky X-Patchwork-Id: 873284 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="ISbEJvYW"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zhCtc6hmvz9t2x for ; Wed, 14 Feb 2018 19:56:08 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966526AbeBNI4G (ORCPT ); Wed, 14 Feb 2018 03:56:06 -0500 Received: from mail-db5eur01on0068.outbound.protection.outlook.com ([104.47.2.68]:43664 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S935058AbeBNIzy (ORCPT ); Wed, 14 Feb 2018 03:55:54 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=mLhhf0vB1DF+2qbK7pExDpIABIo1G2YLIjLQif0dM7U=; b=ISbEJvYWm11yGsRDOzu0GO4OatyIv++8WyEZb1M7CIQu4V6+Mu2qTH1tkeDoXXXl3UvNLJ3THDKZ+r1q/NS3cE1W7XB3+p2l+RT1mXGSxz0cKezX9KniHuLNYj6iLMe0CnTh06mqZAyJ/I3cLKs7+odMfHDWze2ZIg+UOqfl9xM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=arkadis@mellanox.com; Received: from dev-r-vrt-156.mtr.labs.mlnx (37.142.13.130) by VI1PR0501MB2461.eurprd05.prod.outlook.com (2603:10a6:800:68::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.485.10; Wed, 14 Feb 2018 08:55:48 +0000 From: Arkadi Sharshevsky To: netdev@vger.kernel.org Cc: davem@davemloft.net, stephen@networkplumber.org, dsa@cumulusnetworks.com, mlxsw@mellanox.com, Arkadi Sharshevsky Subject: [PATCH iproute2 6/7] devlink: Add support for resource/dpipe relation Date: Wed, 14 Feb 2018 10:55:21 +0200 Message-Id: <1518598522-27713-7-git-send-email-arkadis@mellanox.com> X-Mailer: git-send-email 2.4.11 In-Reply-To: <1518598522-27713-1-git-send-email-arkadis@mellanox.com> References: <1518598522-27713-1-git-send-email-arkadis@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: HE1PR0102CA0039.eurprd01.prod.exchangelabs.com (2603:10a6:7:7d::16) To VI1PR0501MB2461.eurprd05.prod.outlook.com (2603:10a6:800:68::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: e5e7dee9-84b6-4cd5-55c7-08d57388beec X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603307)(7153060)(7193020); SRVR:VI1PR0501MB2461; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 3:RGVUHPkg3h8Q814CKyKbUXQcTz19omFBNocMfGBdhpdNMfoGJVGX9dOnNINTybJSGp20B17nTndXW1FVhrTLlyPsfNw5BykWqiAEf3GuyKOV+hs4P4+xqErun0Nrk9+Z+kZZRf4RssRXweH2WXxc+lR5r/ZLmOx+17A+DIUPaHa/kuVUsf29XZcPY1OqBe0TQvmCjXBzcFrm21vXIzWXbCHNH9yyW9EM/gffjNkzfIguhhCjR4nuxHyURxmk9/0w; 25:7ItYGjLnDasPum2VelSMUn2h9RVQEeM7rvz7Rtz86RdA2y0qxcgtIKI56Br0Rf14X9wqoKE6ZJDm8+PITkhWfx53GxXISdfeH4CgU000i5J4HRxGm6dWZoixg9nSmh72cDrSrK6cVCyFDiHfMZSKibojDK1RJ0Zr02gIJhvHJ6oRYf9znj61zD+RLRTBgzkaczoFFx2BiODn+8pYFXoxxeU9lAf4gpZ35dBcKSlRsFcygG62l9Whu8oSZ3L7B6UEw6dOkFqQqz+Xa86AXUFlspKtKfuBeaM7O+dpCHXSxwinsDzfm0YmB1ADR5mkM0itPjh2bfalVOcaREd5CdewNg==; 31:RMqiafry0I0JBPvP2qLcoryFo1RrhVt8sMpdmWcN8gGY8Tb07/wpmCB9vFyt3eTl08POVfsJ8Itz5fHRSQoIEQ70L6LezzIy436U0aiswIEUc4Zbj8ynLLG0omL2XTmBek1pKGmXSKc1p1oA8KGD6D9hGn6oWYb7clGg04KW31WCnk9StpnPVY6qdYcyAc0IJWTdertICuKh0lcrLbV+LhMvT9W4JOOW8kmyfwLfmag= X-MS-TrafficTypeDiagnostic: VI1PR0501MB2461: X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 20:WMsAb5nVtuLksj3d1GtCu2QJMm4QsiJ7tO4X6YZWjTROf6ZCslG/2+JNm5WivDHHjApVVqNk3AXYvjcpSe/Xhvz5Dzksxy9/vyvoZpzDn6o+2D2dYC4cCKDBQzWT6gEFXeouNFopiM6k3TtnjdJw2ot1RQvnGwX/RFgC5gbTsbFFm6KRS9gxT7BsUMP6KHaMo/431akELnPAfQcluAGmYKnBXJJd0ZwONrJXsMro05I86NeHS6V4gTsxv6dxYn0kUw1KdWikdRM6AuyPrSoAtr69kbUR0jtt2h/QmjXME2dTOyun2a3o15MS7Q5o6hTbz3i1IMFJYZnc8H+W6ipM4HDQVknEdKe7wQG9KD9ZBB9EmFo4iuxPxpoh/GuTdjYJyyQQhqb/nVxXpbioM4wShyHMXjkxRyj9YGCrxMOR/zIbw17X139ap9MbNsf5vKv6ikvjxadfq6GEaYcA249sR0Sb+Q8WV+4SLIKQ5OWYoLzyogzGDUf85hcMJOLebUyv; 4:wHZo6EEqVTkMk9+BP1kiuCxcLJjkgQ5NAveEUfeKRUae6sfDLFP4oJWmdHoPWF9X0THPuFIb3y0xOrH571umqD0GpqFatkAvN8b1/IwEca7Qs2dVfojaYbIFcOMXKTF1PqkvjBEabW5PJT6QCWz1kvbSazarqf0hh6h22IKhtEBXYAfO8Sfk/70/iYzwYp3Qo50CCRoy2itQVVnp3cZT5eM3qNPLLXqFn4U6I6rWsOa8IUUzgDtSQWpxL7aWvWCG6e72WjfZU5AgZb3qD1KkMA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(3231101)(944501161)(10201501046)(3002001)(93006095)(93001095)(6055026)(6041288)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(20161123564045)(20161123562045)(6072148)(201708071742011); SRVR:VI1PR0501MB2461; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0501MB2461; X-Forefront-PRVS: 0583A86C08 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(39380400002)(39860400002)(366004)(396003)(376002)(189003)(199004)(50226002)(81156014)(2361001)(6116002)(6512007)(7736002)(26005)(86362001)(3846002)(81166006)(47776003)(305945005)(107886003)(316002)(6506007)(106356001)(8676002)(16586007)(53936002)(478600001)(386003)(5660300001)(76176011)(25786009)(48376002)(52116002)(4326008)(2950100002)(6916009)(97736004)(6666003)(8936002)(66066001)(2906002)(68736007)(2351001)(36756003)(105586002)(186003)(50466002)(16526019)(59450400001)(6486002)(51416003)(309714004); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0501MB2461; H:dev-r-vrt-156.mtr.labs.mlnx; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 23:7sD20msokAgOM2V6B/0rOy2DslzszZevNBEQD1FCZdNYBEj2FvqZWE25NEg1RsmS+WL5LC95ZrFNR570blZ2SZT0I9X+aq/h/1mXeFOS0qgBwQVN4T7DcVGqYv6yMOnvsu9fMae9N+ozXigdiHs/hyCqxgVML+P6dUINpXJ6ntBwA3nS2JPZHcSqXElAjoR/p5A8ijROx/nQB7PXmZyCmFCrq4QQjNCe2lBmuc3C/h5A06gsb9+5Hp0VZf7Iqt3BUpHcKrzbQ91WMS/BR2Mly0IKKc8kN7rDFHLPwkePpXeOSBeZqlz4Y1QeJsSy5W9bxm615ZYeLMwegSk/uqPaCBbOyQQaSPlm4/ri+VPHjvIjjRCRLDQhU64m2PCMkiu7we9tiryilt7hFMiHv2AGrayaYCI909zXIAKUTof5L4xcv127DtwX5k1KnsuGP2NRmIYxBTVH7eqgJnI9TV/EC//bspu+iEQDVQDagcd+C/ri1q1ejGmv9KyGscQEbDuhUzAiUUnintJte4j7K+r4MCMIcKvqB0zLBz7Bc28mI6TVcT5WP6ufs++7SD0GKU28opYJR9RkisxoaRFUEhQYVeKQRIlO737EhPTfVmyTkLq82yaWGIORP4652W5wQvvdUorGOdPjJql0r+P307TejZGV8NfRNesYb0YePgioOt6wh1cKoQo+Q7NGJWTKqT67lXd9K9JCwLRJiIefRpWx+aVZ2IQmRKnXfto9xE+hKNLg4NmenK1DjQBuk7UqObqBebGdu5iENOHILlFX7KoU9/bNMrUeCXgnmzXzkfAs6bzRO1MfIlNzOlOmAD8qzUopUUef5006MzEqlWqPO2vB8yY9/QTaFLPBbsIV+3XQYfj6hrghpicKJd0rw31fHgIQzIwAKrr4pQFmvzbpj72sDfRsaE/41nWnyMrvz470OctnSPxz9nIMFtt2xj9H2mRv0zAywDHRK0A32dijKkXCIJsfwvoIe1Rfg0UaLUS0brVH2ypI7CVysYxrDZ5hCEap7rQIhvbztyncT63kErQKEtKpA7V0BehFcjHlEdXZr3d4mmZ/yuV0YkWd2/Z/B81KrGpW0hSDWInYWEHRbuOQU0cAnSL5gAVWn4tUudByU+GRaYWcSwOiwhvHdq4x+Nwr4IXzj9CaJ2kNXavpeCbCT6CT2TCBku0DhgHV/QA9TMUaPxuKdcV7kZEu3302EW9+ X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 6:4DCieGmVM6qXQP3QLkMG59KLt6CD5529qdEOE0LGEtrQlYhpobdiEEEYHtx5ic/+nhaoM8HTM0re7Lw9T0bzQDwUG8KJXj8qYxjEiQB7cP089kxSeMfGXvlhUyTja+bMh8e5cbXt3YaVWBn2vw6On/Vb4QkK1vv53IG/yGmgk21hQFsp5JEqU1rObpcy1jthNwcW+pAzIBJUiNKHwmG7FL8s1UN+ZDmKKSnuOXrYffT6n5l4StaV9jxt7NRyeBZGsLl/mOEn2TVuXxwF8XD5CTCOwkbG6Eg7ybIWPRr21T1sKrFvZ6+Wy4+jYOlAckc2DtsFM3fbSlLJ0Vl6G50S9Fz+3MEo03RUW56vHs2nwFU=; 5:5Cyv/XbOIMd0EO9Uv7aIGy3+BrnDCeylzKaNKH2vnn0wIVoIxcAhl7YHZXH3SEHKi05KZRncnjbN709tspbag/YgfN+TLzpJD4ENTIIYttEttj1hUsZgNh6zy8loO8Zlxghv/0VyUxzVs5E68L54oLvjuPeJq752TtSZxbKcTEc=; 24:Hbn6K/Xd4ZFk/kc3MQdQtRlYVGcTLmhrSdOedP+3O4V3WBsB/ytwg/2Qm+a9ZCfC9pTWcLfb0X+JthZgu/lDzS6okiXNL6S2vEP1zbwq20M=; 7:nez3auaA2op8O/F2WQNW0r2XBjO/oWmGkLFN58EEBWaeigGCZ6tMkZQBMMIFzR2q+id4peSKuthXjhiJCrWU25TdVg2WxfOvQmAdlOA1wf0m1FyPWEiD8xlvO/8NYdYbpjaDLuwXvqOb97ciUh7g6A2PjonGhs+KMVI/NLJ9RfuyA6J5FYmmWCynrS1613dI5778XWREnx7Jv37hQgleSOcyPVf0tPWP94WB+Byqm/4B+K4gu4hWynmI1CcmQ4WU SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Feb 2018 08:55:48.5574 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e5e7dee9-84b6-4cd5-55c7-08d57388beec X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0501MB2461 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Dpipe - Each dpipe table can have one resource which is mapped to it. The resource is presented via its full path. Furthermore, the number of units consumed by single table entry is presented. Resource - Each resource presents the dpipe tables that use it. Signed-off-by: Arkadi Sharshevsky Acked-by: Jiri Pirko --- devlink/devlink.c | 201 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 175 insertions(+), 26 deletions(-) diff --git a/devlink/devlink.c b/devlink/devlink.c index aec36ff..47120ce 100644 --- a/devlink/devlink.c +++ b/devlink/devlink.c @@ -2739,6 +2739,17 @@ struct dpipe_header { unsigned int fields_count; }; +struct dpipe_table { + struct list_head list; + char *name; + unsigned int resource_id; + bool resource_valid; +}; + +struct dpipe_tables { + struct list_head table_list; +}; + struct resource { char *name; uint64_t size; @@ -2764,6 +2775,7 @@ struct resource_ctx { struct dl *dl; int err; struct resources *resources; + struct dpipe_tables *tables; bool print_resources; bool pending_change; }; @@ -2829,7 +2841,10 @@ struct dpipe_ctx { int err; struct list_head global_headers; struct list_head local_headers; + struct dpipe_tables *tables; + struct resources *resources; bool print_headers; + bool print_tables; }; static struct dpipe_header *dpipe_header_alloc(unsigned int fields_count) @@ -2882,8 +2897,42 @@ static void dpipe_header_del(struct dpipe_header *header) list_del(&header->list); } +static struct dpipe_table *dpipe_table_alloc(void) +{ + return calloc(1, sizeof(struct dpipe_table)); +} + +static void dpipe_table_free(struct dpipe_table *table) +{ + free(table); +} + +static struct dpipe_tables *dpipe_tables_alloc(void) +{ + struct dpipe_tables *tables; + + tables = calloc(1, sizeof(struct dpipe_tables)); + if (!tables) + return NULL; + INIT_LIST_HEAD(&tables->table_list); + return tables; +} + +static void dpipe_tables_free(struct dpipe_tables *tables) +{ + struct dpipe_table *table, *tmp; + + list_for_each_entry_safe(table, tmp, &tables->table_list, list) + dpipe_table_free(table); + free(tables); +} + static int dpipe_ctx_init(struct dpipe_ctx *ctx, struct dl *dl) { + ctx->tables = dpipe_tables_alloc(); + if (!ctx->tables) + return -ENOMEM; + ctx->dl = dl; INIT_LIST_HEAD(&ctx->global_headers); INIT_LIST_HEAD(&ctx->local_headers); @@ -2906,6 +2955,7 @@ static void dpipe_ctx_fini(struct dpipe_ctx *ctx) dpipe_header_clear(header); dpipe_header_free(header); } + dpipe_tables_free(ctx->tables); } static const char *dpipe_header_id2s(struct dpipe_ctx *ctx, @@ -3440,8 +3490,10 @@ resource_path_print(struct dl *dl, struct resources *resources, static int dpipe_table_show(struct dpipe_ctx *ctx, struct nlattr *nl) { struct nlattr *nla_table[DEVLINK_ATTR_MAX + 1] = {}; + struct dpipe_table *table; + uint32_t resource_units; bool counters_enabled; - const char *name; + bool resource_valid; uint32_t size; int err; @@ -3457,15 +3509,36 @@ static int dpipe_table_show(struct dpipe_ctx *ctx, struct nlattr *nl) return -EINVAL; } - name = mnl_attr_get_str(nla_table[DEVLINK_ATTR_DPIPE_TABLE_NAME]); + table = dpipe_table_alloc(); + if (!table) + return -ENOMEM; + + table->name = strdup(mnl_attr_get_str(nla_table[DEVLINK_ATTR_DPIPE_TABLE_NAME])); size = mnl_attr_get_u32(nla_table[DEVLINK_ATTR_DPIPE_TABLE_SIZE]); counters_enabled = !!mnl_attr_get_u8(nla_table[DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED]); - pr_out_str(ctx->dl, "name", name); + resource_valid = !!nla_table[DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID]; + if (resource_valid) { + table->resource_id = mnl_attr_get_u64(nla_table[DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID]); + table->resource_valid = true; + } + + list_add_tail(&table->list, &ctx->tables->table_list); + if (!ctx->print_tables) + return 0; + + pr_out_str(ctx->dl, "name", table->name); pr_out_uint(ctx->dl, "size", size); pr_out_str(ctx->dl, "counters_enabled", counters_enabled ? "true" : "false"); + if (resource_valid) { + resource_units = mnl_attr_get_u32(nla_table[DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS]); + resource_path_print(ctx->dl, ctx->resources, + table->resource_id); + pr_out_uint(ctx->dl, "resource_units", resource_units); + } + pr_out_array_start(ctx->dl, "match"); if (dpipe_table_matches_show(ctx, nla_table[DEVLINK_ATTR_DPIPE_TABLE_MATCHES])) goto err_matches_show; @@ -3490,15 +3563,18 @@ static int dpipe_tables_show(struct dpipe_ctx *ctx, struct nlattr **tb) struct nlattr *nla_table; mnl_attr_for_each_nested(nla_table, nla_tables) { - pr_out_handle_start_arr(ctx->dl, tb); + if (ctx->print_tables) + pr_out_handle_start_arr(ctx->dl, tb); if (dpipe_table_show(ctx, nla_table)) goto err_table_show; - pr_out_handle_end(ctx->dl); + if (ctx->print_tables) + pr_out_handle_end(ctx->dl); } return 0; err_table_show: - pr_out_handle_end(ctx->dl); + if (ctx->print_tables) + pr_out_handle_end(ctx->dl); return -EINVAL; } @@ -3518,38 +3594,68 @@ static int cmd_dpipe_table_show_cb(const struct nlmsghdr *nlh, void *data) return MNL_CB_OK; } +static int cmd_resource_dump_cb(const struct nlmsghdr *nlh, void *data); + static int cmd_dpipe_table_show(struct dl *dl) { struct nlmsghdr *nlh; - struct dpipe_ctx ctx = {}; + struct dpipe_ctx dpipe_ctx = {}; + struct resource_ctx resource_ctx = {}; uint16_t flags = NLM_F_REQUEST; int err; - err = dpipe_ctx_init(&ctx, dl); + err = dl_argv_parse(dl, DL_OPT_HANDLE, DL_OPT_DPIPE_TABLE_NAME); if (err) return err; - err = dl_argv_parse(dl, DL_OPT_HANDLE, DL_OPT_DPIPE_TABLE_NAME); + nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_DPIPE_HEADERS_GET, flags); + + err = dpipe_ctx_init(&dpipe_ctx, dl); if (err) - goto out; + return err; + + dpipe_ctx.print_tables = true; - nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_DPIPE_HEADERS_GET, flags); dl_opts_put(nlh, dl); - err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_header_cb, &ctx); + err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_header_cb, + &dpipe_ctx); if (err) { - pr_err("error get headers %s\n", strerror(ctx.err)); - goto out; + pr_err("error get headers %s\n", strerror(dpipe_ctx.err)); + goto err_headers_get; + } + + err = resource_ctx_init(&resource_ctx, dl); + if (err) + goto err_resource_ctx_init; + + resource_ctx.print_resources = false; + nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_RESOURCE_DUMP, flags); + dl_opts_put(nlh, dl); + err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_resource_dump_cb, + &resource_ctx); + if (err) { + pr_err("error get resources %s\n", strerror(resource_ctx.err)); + goto err_resource_dump; } + dpipe_ctx.resources = resource_ctx.resources; flags = NLM_F_REQUEST | NLM_F_ACK; nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_DPIPE_TABLE_GET, flags); dl_opts_put(nlh, dl); pr_out_section_start(dl, "table"); - _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_table_show_cb, &ctx); + _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_table_show_cb, &dpipe_ctx); pr_out_section_end(dl); -out: - dpipe_ctx_fini(&ctx); + + resource_ctx_fini(&resource_ctx); + dpipe_ctx_fini(&dpipe_ctx); + return 0; + +err_resource_dump: + resource_ctx_fini(&resource_ctx); +err_resource_ctx_init: +err_headers_get: + dpipe_ctx_fini(&dpipe_ctx); return err; } @@ -4101,7 +4207,9 @@ static void resource_show(struct resource *resource, struct resource_ctx *ctx) { struct resource *child_resource; + struct dpipe_table *table; struct dl *dl = ctx->dl; + bool array = false; pr_out_str(dl, "name", resource->name); if (dl->verbose) @@ -4119,6 +4227,27 @@ static void resource_show(struct resource *resource, pr_out_uint(dl, "size_gran", resource->size_gran); } + list_for_each_entry(table, &ctx->tables->table_list, list) + if (table->resource_id == resource->id && + table->resource_valid) + array = true; + + if (array) + pr_out_array_start(dl, "dpipe_tables"); + else + pr_out_str(dl, "dpipe_tables", "none"); + + list_for_each_entry(table, &ctx->tables->table_list, list) { + if (table->resource_id != resource->id || + !table->resource_valid) + continue; + pr_out_entry_start(dl); + pr_out_str(dl, "table_name", table->name); + pr_out_entry_end(dl); + } + if (array) + pr_out_array_end(dl); + if (list_empty(&resource->resource_list)) return; @@ -4179,25 +4308,45 @@ static int cmd_resource_dump_cb(const struct nlmsghdr *nlh, void *data) static int cmd_resource_show(struct dl *dl) { struct nlmsghdr *nlh; - struct resource_ctx ctx = {}; + struct dpipe_ctx dpipe_ctx = {}; + struct resource_ctx resource_ctx = {}; int err; - nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_RESOURCE_DUMP, - NLM_F_REQUEST | NLM_F_ACK); - - err = dl_argv_parse_put(nlh, dl, DL_OPT_HANDLE, 0); + err = dl_argv_parse(dl, DL_OPT_HANDLE, 0); if (err) return err; - err = resource_ctx_init(&ctx, dl); + nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_DPIPE_TABLE_GET, + NLM_F_REQUEST); + dl_opts_put(nlh, dl); + + err = dpipe_ctx_init(&dpipe_ctx, dl); if (err) return err; - ctx.print_resources = true; + err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_dpipe_table_show_cb, + &dpipe_ctx); + if (err) { + pr_err("error get tables %s\n", strerror(dpipe_ctx.err)); + goto out; + } + + err = resource_ctx_init(&resource_ctx, dl); + if (err) + goto out; + + resource_ctx.print_resources = true; + resource_ctx.tables = dpipe_ctx.tables; + nlh = mnlg_msg_prepare(dl->nlg, DEVLINK_CMD_RESOURCE_DUMP, + NLM_F_REQUEST | NLM_F_ACK); + dl_opts_put(nlh, dl); pr_out_section_start(dl, "resources"); - err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_resource_dump_cb, &ctx); + err = _mnlg_socket_sndrcv(dl->nlg, nlh, cmd_resource_dump_cb, + &resource_ctx); pr_out_section_end(dl); - resource_ctx_fini(&ctx); + resource_ctx_fini(&resource_ctx); +out: + dpipe_ctx_fini(&dpipe_ctx); return err; } From patchwork Wed Feb 14 08:55:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arkadi Sharshevsky X-Patchwork-Id: 873283 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="gkDjtUS4"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zhCtV4Pfyz9t2x for ; Wed, 14 Feb 2018 19:56:02 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966484AbeBNIz7 (ORCPT ); Wed, 14 Feb 2018 03:55:59 -0500 Received: from mail-db5eur01on0068.outbound.protection.outlook.com ([104.47.2.68]:43664 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S935085AbeBNIz4 (ORCPT ); Wed, 14 Feb 2018 03:55:56 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Kbj8F/ADdiXByvsbkHI0ObfguuPDhHmRT2aN+iDRffk=; b=gkDjtUS4Sg9Rk6kNnIDKBfBPo09i9r28QlKNx81h9ZImB1cEo6TOCfs5sbaGp6QF43xrIX+3C8qcgcEOzdb/TAxNhzf+VwEvw3lUzLmo2n+8bzYeOuAs3EhWiLuQCyAN2Yy8TkagRAxVG2LLzoORlve5QA10Sy1ocTKNm20hZdc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=arkadis@mellanox.com; Received: from dev-r-vrt-156.mtr.labs.mlnx (37.142.13.130) by VI1PR0501MB2461.eurprd05.prod.outlook.com (2603:10a6:800:68::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.485.10; Wed, 14 Feb 2018 08:55:50 +0000 From: Arkadi Sharshevsky To: netdev@vger.kernel.org Cc: davem@davemloft.net, stephen@networkplumber.org, dsa@cumulusnetworks.com, mlxsw@mellanox.com, Arkadi Sharshevsky Subject: [PATCH iproute2 7/7] devlink: Update man pages and add resource man Date: Wed, 14 Feb 2018 10:55:22 +0200 Message-Id: <1518598522-27713-8-git-send-email-arkadis@mellanox.com> X-Mailer: git-send-email 2.4.11 In-Reply-To: <1518598522-27713-1-git-send-email-arkadis@mellanox.com> References: <1518598522-27713-1-git-send-email-arkadis@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: HE1PR0102CA0039.eurprd01.prod.exchangelabs.com (2603:10a6:7:7d::16) To VI1PR0501MB2461.eurprd05.prod.outlook.com (2603:10a6:800:68::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 29dbc464-5ce2-4fad-5d93-08d57388bff7 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603307)(7153060)(7193020); SRVR:VI1PR0501MB2461; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 3:aY3cIE/LC+fg7lvnnZ0jgH3Re3nRn7VKAhdPJPKna2i6lN5z3mQ3FZ9rZIJTNK/4zlbCAkjW6r0C/cfoFXf9uG2Nio2imx4F+nm+jc1+e1UYb8IX0NMrin+vg2w5dpwa2kZ3VNRTBjTnEt2nIbaYcULn5s0ARVR2/tJfFS9kvWCRO25xngWkFnNqaCL9Frq9PY99I/DkEUSZKw7MKZ6SWE7AA4JGOMuaCvZqmD3U5kVjGccSjx7LWOvFzMGVEgQT; 25:ibSB5zo17GNJlKh513f/gsOOK7l0V95/TDY9z3qiWCEKVRm9/2FxBGQf+zJxmt7IUNZJ8faOJNf0+6A32STMJlmvXPRYq02j6pARBg9IlIj7V09KQEq/eZdWHLMuyv7gCRXF24H04h8ZUTrAg0pqlvGUNoE36QFxNRlgTW+URIfOKX5vFXWYidEPFNNN7fAAR3FpVi2KL6btusD8145JVbJTOBZWqZGNkJWOujd/HzAhZ1xug4Vt7MMS6oLLh2cNokwKkuDmlegIInMKBA849kTMZTEd9uVBWX2+Cy7mrD7EGlbvySczKXLgNgn7pXl7TpHHcRm/99TvQEv4pKnVlw==; 31:XIUIrCE+71Pjo2DlgQcpUiqY8g15HNiA9zCupdj76D2YDQwoRZcunvW1Po5XZqMe/JYxgvQTx55WkTPOCW4Wj2JaVlAZJTl5HGHSMt3vocjtKG2vG3RsDuqyIaspU97y3k3cB3kgBqtWdEPx0+gXmLwLzAY0r9nvUwQmFdSd7s0OIr+glcmWgMmkgs0GHO1Ld2355TtdLRovZwJ7bAYMk7E8IsMo9MnEtymRiX/Exkk= X-MS-TrafficTypeDiagnostic: VI1PR0501MB2461: X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 20:pTp0hcH6L+XtKSysfPmAiR+Nfme2Q5QZ6TYwiuCS9S2R8IBYsUstnVeyDX2AYHHm/kRQqZg+B4znY5+RfwI7iaeWy6tSugGy+fS3cmxalxNR4JRT9BXfwICyqKBebvVgqVYYEaR4Y47R8uz3UPbkOUP3oqWCecH0Vb/bU83IawLv4JUaDje4nXmOvcWIIrKw74htEe3+bK97htKJ7K6yBa2WwuZhiECd9VmJvZrHILJs8yHq8vM1BNkuEYRcyp8ntbsY2WZKt1cEJMBGuqNCFE08wp+hqtVlK9dFfh35YCzniXO/ADoH+fFKHMcF5BwNp2MyZzKB7vat+pGDBrwNYsIUYk4sB+vjvubgjc3y0VREx4QsAgNm8oCRcjZTC2D2vntkAXgQK/XwUEH4s3bu4H8V+F+ZpOota1V/3q1KxOqxjk4+ZxAeLgNmI5txnz65jvSCFdGxXEXzMXUQoSp9LXyoymUK85CWioigXU79pZFpRyD0eMoTeKWLbLR6snJA; 4:dWgorNI9R0dOGuyLvI3PCJuDATmJY5G+sKVstqI3V0b0ydsrILMC2frHJe1lKtm76sfltIugCXHpVzBnUgQhq9yFPqN88FbOOdyTIvKjqfSrrQS5NgAlF81iZFh6OKGFO+Aut/koo1H4uTWK8bBZNMmD1HOAD9LlKEiN4kpt1alUub31CmP2lJKKbRHWC/tJgu04nZG8yRo4Gg7Y2MMr+ES8q5aWM3OvMp6mD6gNUt/cK+W8IXRrvdaTI0d9Cp/9r1kdwNGNVAXBBtR75lzOTgHkvLCLfgDq9+7PVKGwfk+unIp5+ZhUcwDYlcCkBA7Y X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(211171220733660); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(3231101)(944501161)(10201501046)(3002001)(93006095)(93001095)(6055026)(6041288)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(20161123564045)(20161123562045)(6072148)(201708071742011); SRVR:VI1PR0501MB2461; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0501MB2461; X-Forefront-PRVS: 0583A86C08 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(39380400002)(39860400002)(366004)(396003)(376002)(189003)(199004)(50226002)(81156014)(2361001)(6116002)(6512007)(7736002)(26005)(86362001)(3846002)(81166006)(47776003)(305945005)(107886003)(316002)(15650500001)(6506007)(106356001)(8676002)(16586007)(53936002)(478600001)(386003)(5660300001)(76176011)(25786009)(48376002)(52116002)(4326008)(2950100002)(6916009)(97736004)(6666003)(8936002)(66066001)(2906002)(68736007)(2351001)(36756003)(105586002)(186003)(50466002)(16526019)(59450400001)(6486002)(51416003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0501MB2461; H:dev-r-vrt-156.mtr.labs.mlnx; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 23:iM9d4rgieHiOAfBPDl1SOjuhkhB/9fe933zGsEHdQ2HKwXknA5iT91Y5sUX7qM65Lvkt0pHfARK1K/OIP05k9tWmXtO4xm5OM+BrWUBazw9nj3z34K6eA/ZxkeOBFxB4iUhPuqjQnY8swkemKi7fu2ZEXUTfIXXvRmjzKmgg+lZcSPed2v8sA6bD1OyPoh9R7MAhpaAMfTDeiXxpTuThGzesghIvtLk1n0hgOZfODvM5QtZetByUsQusRMF0ABGYnILalxQ9Tp0U1HlQdfshJ+IlMkVAebjan05VrVwpqenmOajJ87WE9LRk8mqLo2rG9Qqf8xgaA6acA2QTgOHggdFdEmZpvHufweklWrYvi67K2Y2z89LwDhDLIfQlajkvbiMvyutXsWhD8i48FKPx+ZNp5EPVbrQ537a8Po+RMEpmY8+bswL7eRbFRKEVt36zz84Rg9mY3kRZghfyOQ3/3b/O2YyQ1oR+hqxDDhcQdwdHpb4aGLzNU0ZBd8eAtmnIK/LxlSGwhMmKFbdJKuZcIQJD1sU+mRO0BRgZZYDPWtp9l/rx0G1NOLk1SL/u29cRm3/jijWipppP5jSf+i6HlIXUZe7EtlL8wJmpgJvmq/vRn5MNAHf21VrFYZ9mN0TLNwaJKPYFc2ZVvpwa1Omrl4GF42QxPL0ZKkUL6IaElQrgtx2z4bDWmjqBg4qaFDLL0OyANSJnVR6KwaEJQZJAqmo6Rvih3DhigYwcU+FS5pJcJDtcSqUdWxQb2rH40ptbMwU75j3Lh+6K+TOKNHtriFSGm0N3SS0GmwXuGxV8J9fUyPS6etMNAwTcQqCgQr2J/dM7zHso8oCcXU8wbI7LqiLPppgaNDm0gxxnxssr3wcnuaRvB7OaDGWmx9tPw975ve1I8wfE3kkVMg+fsZ+NCsK285SsrDKPO3yqaTnzsCQ1gtaoFZAwFTVtfp5TVMeu/phJO4Z6aHvlD33luSMAZkB4XmsMn+aNEZebW2gbBC9ZEqyQoabL4Y1CwS1ONZOqRk5smtNeOLAJh8dFXwUeMLMBEycSS6oTYdCtf3HHWQGP8Xa1cu2TNvL6gvaY6m61IvDIjno/VZkVMwD+GlPtT/GUtyydh55mO6DX0VTb4VQL9hdhxQx9X4GwEXbQO60wrULAH4g1GcySdTR950FTzdwmTTiHidkh0+kUpoCks2LMJ09e9MG/kZkS654YXhhZ X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2461; 6:uHbFbL9XPjcWfgrLpEKT9ZaHqOPQ7KAi3c09eBfIke388EP3Zn8Wd1Wiu/qwEichd7qdQZ4K8RgQfydNtEIbYBKLwmynRUlBSROaMLasLFWQERFz4DawJ1vwvOpY7Qp1a9ybFhF3wtF4ZaRDlmMU8//xiJk0Tcwiddsx1G3nZDWoCq34swTS1NIjDJ2UFj/km72C8LzYvpU1e4UQy7Wh2i8UGTqrz9h+eImx8W/yZ55QYIJIqgbSY00MMWVhop/vhhDljUPq4ivv9ncDKxOT3tTuTqW6ZgoKmCkO+1p4ex2yHA37UdVJy1A7M1Vd/V9NYUjt4Pwheb3XcqmAj/SOVV6Dv+dcNmyfhB/ralbpNMo=; 5:XUl2e83fGBPSoc13Kmh9waMx5RIEO8KF4DgvQZpmhIAVYtd0fhO5UmdYJiCeK2NOB3R4ahJbfLRLspLCnkH0XdfmAyB5cr99a99mv9da9eqmqEHKrLPrBj9LjGmvtYToDP7R1UlnFOGKrftBUJeT9QMZE81s8T2rUqFa/tWJzHc=; 24:/bBcBSIDXWuXCvf21XvIySJG2+S9zyxCRQghAjoaP36W5kQYT/UYf7Uhtz3b8JZ17eBXROnZkMi48BzlzxEWPsOPG4nCTSau9KtMAUO/fo0=; 7:+BzIieB0uw9ssTcw64b6ouMpvJPSxvZoywn9EJYkpB7FYhvxHjqRf4iclT5Vd45yXxXJR5d1f/wRtpaYOqrETpBsXJ75HOov4zqcFfIUUR8byKSg7kkhpOnVLKbJ2nw4japuedSig0CnQaiDg2a43aVzScQhhWX/sNgCUS8bGZEnP4yGmLD2grUgqWQEtfBPlatiEP01CRqRsoSo0M38Q3gN6kz9UflS1xxR/PJIf+cK6Pa/EGOv+kyuWdAcQYxQ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Feb 2018 08:55:50.2917 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 29dbc464-5ce2-4fad-5d93-08d57388bff7 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0501MB2461 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add resource man, and update dev manual for reload command. Signed-off-by: Arkadi Sharshevsky Acked-by: Jiri Pirko --- man/man8/devlink-dev.8 | 15 +++++++++ man/man8/devlink-resource.8 | 78 +++++++++++++++++++++++++++++++++++++++++++++ man/man8/devlink.8 | 1 + 3 files changed, 94 insertions(+) create mode 100644 man/man8/devlink-resource.8 diff --git a/man/man8/devlink-dev.8 b/man/man8/devlink-dev.8 index b074d57..7c749dd 100644 --- a/man/man8/devlink-dev.8 +++ b/man/man8/devlink-dev.8 @@ -42,6 +42,10 @@ devlink-dev \- devlink device configuration .BR "devlink dev eswitch show" .IR DEV +.ti -8 +.BR "devlink dev reload" +.IR DEV + .SH "DESCRIPTION" .SS devlink dev show - display devlink device attributes @@ -94,6 +98,12 @@ Set eswitch encapsulation support .I enable - Enable encapsulation support +.SS devlink dev reload - perform hot reload of the driver. + +.PP +.I "DEV" +- Specifies the devlink device to reload. + .SH "EXAMPLES" .PP devlink dev show @@ -114,6 +124,11 @@ Shows the eswitch mode of specified devlink device. devlink dev eswitch set pci/0000:01:00.0 mode switchdev .RS 4 Sets the eswitch mode of specified devlink device to switchdev. +.RE +.PP +devlink dev reload pci/0000:01:00.0 +.RS 4 +Performs hot reload of specified devlink device. .SH SEE ALSO .BR devlink (8), diff --git a/man/man8/devlink-resource.8 b/man/man8/devlink-resource.8 new file mode 100644 index 0000000..b8f7880 --- /dev/null +++ b/man/man8/devlink-resource.8 @@ -0,0 +1,78 @@ +.TH DEVLINK\-RESOURCE 8 "11 Feb 2018" "iproute2" "Linux" +.SH NAME +devlink-resource \- devlink device resource configuration +.SH SYNOPSIS +.sp +.ad l +.in +8 +.ti -8 +.B devlink +.RI "[ " OPTIONS " ]" +.B resource +.RI " { " COMMAND " | " +.BR help " }" +.sp + +.ti -8 +.IR OPTIONS " := { " +\fB\-v\fR[\fIerbose\fR] } + +.ti -8 +.B devlink resource show +.IR DEV + +.ti -8 +.B devlink resource help + +.ti -8 +.BR "devlink resource set" +.IR DEV +.BI path " RESOURCE_PATH" +.BI size " RESOURCE_SIZE" + +.SH "DESCRIPTION" +.SS devlink resource show - display devlink device's resosources + +.PP +.I "DEV" +- specifies the devlink device to show. + +.in +4 +Format is: +.in +2 +BUS_NAME/BUS_ADDRESS + +.SS devlink resource set - sets resource size of specific resource + +.PP +.I "DEV" +- specifies the devlink device. + +.TP +.BI path " RESOURCE_PATH" +Resource's path. + +.TP +.BI size " RESOURCE_SIZE" +The new resource's size. + +.SH "EXAMPLES" +.PP +devlink resource show pci/0000:01:00.0 +.RS 4 +Shows the resources of the specified devlink device. +.RE +.PP +devlink resource set pci/0000:01:00.0 /kvd/linear 98304 +.RS 4 +Sets the size of the specified resource for the specified devlink device. + +.SH SEE ALSO +.BR devlink (8), +.BR devlink-port (8), +.BR devlink-sb (8), +.BR devlink-monitor (8), +.br + +.SH AUTHOR +Arkadi Sharshevsky diff --git a/man/man8/devlink.8 b/man/man8/devlink.8 index a975ef3..b83909d 100644 --- a/man/man8/devlink.8 +++ b/man/man8/devlink.8 @@ -103,6 +103,7 @@ Exit status is 0 if command was successful or a positive integer upon failure. .BR devlink-port (8), .BR devlink-monitor (8), .BR devlink-sb (8), +.BR devlink-resource (8), .br .SH REPORTING BUGS