From patchwork Tue Jun 30 09:24:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Cohen X-Patchwork-Id: 1319660 X-Patchwork-Delegate: mkubecek@suse.cz Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.a=rsa-sha256 header.s=selector1 header.b=WFQCO358; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 49wzTV1VqJz9s6w for ; Tue, 30 Jun 2020 19:24:46 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731930AbgF3JYp (ORCPT ); Tue, 30 Jun 2020 05:24:45 -0400 Received: from mail-eopbgr80078.outbound.protection.outlook.com ([40.107.8.78]:21154 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731810AbgF3JYo (ORCPT ); Tue, 30 Jun 2020 05:24:44 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VNvMZ7pE5ht/ahTZwSWy9P7xqDcAEZF5cc4BugsytPOJNkKz2QyLya6TXDQxulv56fD97cH4IHsbsWIT3iG5hM4E0s+xxuYT1OdDNzOfb1IfWl+Sxo7+OyAvewF/ZldBxY8nldo+RlqXTINcTEwJdthXt2IXLi/MP2phkvvKU+KJfUwRmuqDbaaGrBebmcFMACxHXL3VOocWfHID0OWH8x8dZ0bfe5VySqZavORmNp2mLl67A/5ScNihUNo4S0gMTfsWmIr2P5PZBxMQt6ejHCGCV8vXGkB7fAm4may8tWH1finUaKTKUqQDg6u8Fw0410+eTko3C1m70GDpn8n9xw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aQ9vqUYGw38BhndmGcL8EODSM579oWPFqa0yxMZbjBE=; b=GHFjgwHQouCuWa3lGt8mDnYxdAQ4nkFJR9iOwHBFzyW5PHvbWYLY/P4qrY5d3L83dvpVPgM1wAh9x9VtuT5qT5EHhaP6F3BzIONK1/rlnvIl0aaW6YTHbYBb0QrQzXbW0RdHcCZ4KsdBeeUGswAJn7IGZg1OJMYBI0LDxinqUtakIoFsC43ecI5etMSXKUwzOghovgouqh5ADunZPvIJhRowbR5TvXGI8S1cX8DmgR30sMEJWSoCpaGhBAgpNNR+G2M8R4ZlBeHLAovY/sQSV7ybBnQHcjS00KoFUJ3BsCc6UkrQ+wptfDKZbocaEfAKGUw+M3ZOcQDdOPDk9N+9lw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none 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:X-MS-Exchange-SenderADCheck; bh=aQ9vqUYGw38BhndmGcL8EODSM579oWPFqa0yxMZbjBE=; b=WFQCO358j3w3eo25ble3Bv//LvNE/8Na7U7UB8HI8wne6MiAdVPNcrlQIBSKlQmH3y2RAIcVvd0FKMsrNEuaQg5HmlhR6kOYv+sf2BLFigs8NfAvvGsQDELDu3emPjEnuSfWkosb/jzyO8YElGZYZ6GikaTqM/I35c5ndonyOE4= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=mellanox.com; Received: from AM0PR0502MB3826.eurprd05.prod.outlook.com (2603:10a6:208:1b::25) by AM0PR05MB4450.eurprd05.prod.outlook.com (2603:10a6:208:61::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3131.23; Tue, 30 Jun 2020 09:24:38 +0000 Received: from AM0PR0502MB3826.eurprd05.prod.outlook.com ([fe80::2534:ddc7:1744:fea9]) by AM0PR0502MB3826.eurprd05.prod.outlook.com ([fe80::2534:ddc7:1744:fea9%7]) with mapi id 15.20.3131.027; Tue, 30 Jun 2020 09:24:38 +0000 From: Amit Cohen To: netdev@vger.kernel.org Cc: mkubecek@suse.cz, davem@davemloft.net, o.rempel@pengutronix.de, andrew@lunn.ch, f.fainelli@gmail.com, jacob.e.keller@intel.com, mlxsw@mellanox.com, Amit Cohen Subject: [PATCH ethtool 1/3] netlink: expand ETHTOOL_LINKSTATE with extended state attributes Date: Tue, 30 Jun 2020 12:24:10 +0300 Message-Id: <20200630092412.11432-2-amitc@mellanox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200630092412.11432-1-amitc@mellanox.com> References: <20200630092412.11432-1-amitc@mellanox.com> X-ClientProxiedBy: AM0PR03CA0044.eurprd03.prod.outlook.com (2603:10a6:208::21) To AM0PR0502MB3826.eurprd05.prod.outlook.com (2603:10a6:208:1b::25) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from dev-r-vrt-155.mtr.labs.mlnx (37.142.13.130) by AM0PR03CA0044.eurprd03.prod.outlook.com (2603:10a6:208::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3131.20 via Frontend Transport; Tue, 30 Jun 2020 09:24:37 +0000 X-Mailer: git-send-email 2.20.1 X-Originating-IP: [37.142.13.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 2ca85aae-9a66-4af2-5470-08d81cd76928 X-MS-TrafficTypeDiagnostic: AM0PR05MB4450: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3383; X-Forefront-PRVS: 0450A714CB X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: OQKyxAjoo9RjDanccKtaivQgdNUszuuPTu0uG6YGbizhAutg458WX6y0SthbYIMOZJvW4axKWPqGObD81AmCEnBJGd6da0sMp59K2ghaA+WztofzQwsIlfd3TUmfBRHf19OeHCWxQQQcJcxRjr7zamdBxKmolY4FO3OSUHbHJO94J7IExsvLiWP+qPuH4KUyCs+cpwnnde5ijjO7UBJlcoVVc0SGi6iPazsVErHohL2DNjWFgypEC8wcCF6smBqlOMUvdvTr91PI5iNdpFNCFd9/tkT7bl1Zd6eStNskrXRfYqjKJZJW95BpPlfuU2SmoaowF2ppA5QrttJUjWgXYA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR0502MB3826.eurprd05.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(366004)(376002)(396003)(346002)(136003)(39860400002)(52116002)(478600001)(2616005)(956004)(4326008)(2906002)(5660300002)(8936002)(316002)(6512007)(6916009)(66476007)(66556008)(8676002)(66946007)(6666004)(107886003)(86362001)(26005)(6506007)(186003)(36756003)(6486002)(1076003)(16526019);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: ccCqQPyCqr4RZrVuxr5Z6mQDjBJdIgy9/SDDo8YYxIGTmyKjDr1+42M6a3V4P7xlIf64jnLAl5rhHhgmVjErIA29Buq+r30a8k0IPcPJlao1IA42pWlOk24a6iZdPMUw/kA3tTJVnEB/QecL7bE8hnVGVd/EcnCa5msNywE3C8AYKBKnhOerWsiZFeV7Sg87yvEnaun5yPEHapjFvb8+4MtDDSz8yW8QIZOLNV0n2dCGqBC0PZXNT0LrjkiDfEPKNp25BhitHzC0VH6wg/8pCfDbY2yh345JJF7Dv1qU4PlsR1lts1sZMIaJ2rGh10i+yP0wnghrHrdJii1MRiagwP2xieYNrUOXvxLjZw1GOMV6CnYXbqtYmFsoBJyXraj3FrOlyS0QtadpTClMUjEotTFZwWbljYntdU3si3Gc+EvyLhqvVl1zy1bKEDFYr3mulvqYWVm6D19mPyd8h8lm3KlUUngyfiBR0ttN31lfKTs= X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2ca85aae-9a66-4af2-5470-08d81cd76928 X-MS-Exchange-CrossTenant-AuthSource: AM0PR0502MB3826.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jun 2020 09:24:38.8078 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: HKtaHcQcMzwSucIdlCzfmj7RH+qP3FMesoIo6BkvQ/RGg2s1mBoDuvnh7L4iV7jyBt8Wj6tlbeWQIYhZkRQx/g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR05MB4450 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add ETHTOOL_A_LINKSTATE_EXT_STATE to expose general extended state. Add ETHTOOL_A_LINKSTATE_EXT_SUBSTATE to expose more information in addition to the extended state. Signed-off-by: Amit Cohen --- netlink/desc-ethtool.c | 2 ++ uapi/linux/ethtool_netlink.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/netlink/desc-ethtool.c b/netlink/desc-ethtool.c index 98b898e..bce22e2 100644 --- a/netlink/desc-ethtool.c +++ b/netlink/desc-ethtool.c @@ -95,6 +95,8 @@ static const struct pretty_nla_desc __linkstate_desc[] = { NLATTR_DESC_BOOL(ETHTOOL_A_LINKSTATE_LINK), NLATTR_DESC_U32(ETHTOOL_A_LINKSTATE_SQI), NLATTR_DESC_U32(ETHTOOL_A_LINKSTATE_SQI_MAX), + NLATTR_DESC_U8(ETHTOOL_A_LINKSTATE_EXT_STATE), + NLATTR_DESC_U8(ETHTOOL_A_LINKSTATE_EXT_SUBSTATE), }; static const struct pretty_nla_desc __debug_desc[] = { diff --git a/uapi/linux/ethtool_netlink.h b/uapi/linux/ethtool_netlink.h index b18e7bc..0922ca6 100644 --- a/uapi/linux/ethtool_netlink.h +++ b/uapi/linux/ethtool_netlink.h @@ -236,6 +236,8 @@ enum { ETHTOOL_A_LINKSTATE_LINK, /* u8 */ ETHTOOL_A_LINKSTATE_SQI, /* u32 */ ETHTOOL_A_LINKSTATE_SQI_MAX, /* u32 */ + ETHTOOL_A_LINKSTATE_EXT_STATE, /* u8 */ + ETHTOOL_A_LINKSTATE_EXT_SUBSTATE, /* u8 */ /* add new constants above here */ __ETHTOOL_A_LINKSTATE_CNT, From patchwork Tue Jun 30 09:24:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Cohen X-Patchwork-Id: 1319661 X-Patchwork-Delegate: mkubecek@suse.cz Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.a=rsa-sha256 header.s=selector1 header.b=OGhFi4Gz; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 49wzTZ6LNRz9s6w for ; Tue, 30 Jun 2020 19:24:50 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731937AbgF3JYt (ORCPT ); Tue, 30 Jun 2020 05:24:49 -0400 Received: from mail-eopbgr80078.outbound.protection.outlook.com ([40.107.8.78]:21154 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727059AbgF3JYs (ORCPT ); Tue, 30 Jun 2020 05:24:48 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=maJH7vj+SJ8IsmAto71Kbib8Xk4N9/wZFV2g84CtPOlI11lMoEQwwoz56Gr1Pp2uxa0smsTz+aXLXvBC+3S4/vyvpTFGJaxhtXUfWRj2mwZ3vWmE/1dfQXhEk16XAbSZhzmesiw98DdygOJuuTdUeK7ktKjtHnsk26jyPpqfHepV/I6+iX6Q5R8zBaw8WSA0ke4EDafzN1ocHCBPiAvIrKgrJJXBIyAzcRgyLp1g5TAeIAZzlgVkX4jEx8ejdUe3utkJHpgYC9E7eeHiU9ptmOXFclE7tcWF1i0+clIbXgsP3k9knVPX34EbRj3huCmgwJACg85w+mNjH7AwFncHyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xQZkl1cM2JTNdxRxXpcNlGaL//AR5O5qmePpU8H+w98=; b=TXwt53IQ01oMHk4cqq8c53Nx/QA27ijE7T5yH1UpTWfGsECIp7mLgptFkszIw44llZwpgC6lJ1RzJ134lX7xRqsemt8IEi5Vj1vrjP9xUv5DlbwtdSPKeE1926Q0AzU02glxHNurMg8LPnWBCjlJguKewevVcWSeIxNeGyeqHdwwAzmYee6litt4YVYEKrItarpsCYZo8B+95cHZ85vAFNHw4HLkCUbwasv1F8C6OfwYbAk0IhsefSx0vZNxKkxGTuIJsSQ/p/eU4//1Ni6PLlyDGyjG1u4v9f+r3/3XRalfRxxJ6IRLC6NIHwL1OUZqyOzERKIafSQtWayAi2jQSA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none 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:X-MS-Exchange-SenderADCheck; bh=xQZkl1cM2JTNdxRxXpcNlGaL//AR5O5qmePpU8H+w98=; b=OGhFi4GzLmsKqcPBeAidoPqqXkHNshUbrgYC6lXgRHby/ybX+XmTYQb3l7G4jUJ+TTjzdnBOHDtbGgctt17G1JNO4z14413/4GNNTG1atn3ex6+iSqg3XQK/U7i54gdj2niw5gbxAJmFT/7i0rhqA27wdNdecvUjGNVeKQznhRQ= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=mellanox.com; Received: from AM0PR0502MB3826.eurprd05.prod.outlook.com (2603:10a6:208:1b::25) by AM0PR05MB4450.eurprd05.prod.outlook.com (2603:10a6:208:61::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3131.23; Tue, 30 Jun 2020 09:24:40 +0000 Received: from AM0PR0502MB3826.eurprd05.prod.outlook.com ([fe80::2534:ddc7:1744:fea9]) by AM0PR0502MB3826.eurprd05.prod.outlook.com ([fe80::2534:ddc7:1744:fea9%7]) with mapi id 15.20.3131.027; Tue, 30 Jun 2020 09:24:40 +0000 From: Amit Cohen To: netdev@vger.kernel.org Cc: mkubecek@suse.cz, davem@davemloft.net, o.rempel@pengutronix.de, andrew@lunn.ch, f.fainelli@gmail.com, jacob.e.keller@intel.com, mlxsw@mellanox.com, Amit Cohen Subject: [PATCH ethtool 2/3] common: add infrastructure to convert kernel values to userspace strings Date: Tue, 30 Jun 2020 12:24:11 +0300 Message-Id: <20200630092412.11432-3-amitc@mellanox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200630092412.11432-1-amitc@mellanox.com> References: <20200630092412.11432-1-amitc@mellanox.com> X-ClientProxiedBy: AM0PR03CA0044.eurprd03.prod.outlook.com (2603:10a6:208::21) To AM0PR0502MB3826.eurprd05.prod.outlook.com (2603:10a6:208:1b::25) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from dev-r-vrt-155.mtr.labs.mlnx (37.142.13.130) by AM0PR03CA0044.eurprd03.prod.outlook.com (2603:10a6:208::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3131.20 via Frontend Transport; Tue, 30 Jun 2020 09:24:39 +0000 X-Mailer: git-send-email 2.20.1 X-Originating-IP: [37.142.13.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 8258003f-db77-4c42-5149-08d81cd76a49 X-MS-TrafficTypeDiagnostic: AM0PR05MB4450: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1186; X-Forefront-PRVS: 0450A714CB X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: a0mvBhusUzTDYZKFOfaZJfpjZ6zPVo3bvKiTKcCm/uuG1YgBHcw+iXl8dreXlfpB5FrKrAoSFM71S426yOGn/+Zy/LlsPmLJ1JfRjVDnOq+9d0rSefkkCmBXgAJjcTejUCa7YdRj/tLcJcL/E543k4JAewCkEgEnha363plhHVnmTmgB2g0UfHk98sbpH09NbKFw4u4Nil2y8egalROUm/wtqVpaPxlaZHZ1Y8LNzqNqjz9gYAJIPyov7MRdw8xqmbUIiXQbEnpumUBADIUfKJlZdQObWcVOe2NM1otywh1eNnsw1590gymE9EF6bCq8PeX89M/NsApXdOBJm2knCQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR0502MB3826.eurprd05.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(366004)(376002)(396003)(346002)(136003)(39860400002)(52116002)(478600001)(2616005)(956004)(4326008)(2906002)(5660300002)(8936002)(316002)(6512007)(6916009)(66476007)(66556008)(8676002)(66946007)(6666004)(107886003)(86362001)(26005)(6506007)(186003)(83380400001)(36756003)(6486002)(1076003)(16526019);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: Hks1sdLo2th/2tGbHDo3BTesxPGATv++XFeFE33hhjEpkr54ZzmyU4oYXpIPApXLNkrwxN5/sg4oeTZExJVjT43a8P8lQBfr1cbnB+YHY5a2eYIBnH7Trcp3ETZMc5qJIP5kwemykDhk65ScEO0ixe4UEzRtjPYfVcqpnnNXNY2OczSwWp2qihrl4C8xThs/ZwheDl/hNgLtebSMLXvXbLuaAWh2B/Z5vzjCcJuZ9hFjFQxgwLPIORPkNcF0cy/vHP5RiIpFMF8Ljk6CtEcTdfA8dhFvWUZbjAAdjMGC1ZRkxknCqJsMvtcABE9ooNHb8bWiCQExF1OjPgbOKbB3hBsaLq679XYBfPvq6hvKdSwSJzFGFn5+/qXyV+Wli+h4cHjt2/VIhQfgkSZJAHCf/8+D2nTqYpZjzH/grFWgQvpqvcEO0AaRM3n4DmFx8iiHwrjlIm2FC/EH5r0gY557rT0caT/X/p1Uvej1I7UKSzU= X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8258003f-db77-4c42-5149-08d81cd76a49 X-MS-Exchange-CrossTenant-AuthSource: AM0PR0502MB3826.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jun 2020 09:24:40.2149 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9wLjnpV40lHzcOttGvi9j5KPhDZD2Ysk8EKk6ays6t9HoxPoR9z7nNFXsXNRIFhSzB3xZD+vM+iuuHXenl7Tqg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR05MB4450 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add enums and functions to covert extended state values sent from kernel to appropriate strings to expose in userspace. Signed-off-by: Amit Cohen --- common.c | 171 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ common.h | 2 + 2 files changed, 173 insertions(+) diff --git a/common.c b/common.c index 2630e73..ac848f7 100644 --- a/common.c +++ b/common.c @@ -127,6 +127,177 @@ static char *unparse_wolopts(int wolopts) return buf; } +enum link_ext_state { + ETHTOOL_LINK_EXT_STATE_AUTONEG, + ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE, + ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH, + ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY, + ETHTOOL_LINK_EXT_STATE_NO_CABLE, + ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE, + ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE, + ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE, + ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED, + ETHTOOL_LINK_EXT_STATE_OVERHEAT, +}; + +enum link_ext_substate_autoneg { + ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 1, + ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED, + ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED, + ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE, + ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE, + ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD, +}; + +enum link_ext_substate_link_training { + ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 1, + ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT, + ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY, + ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT, +}; + +enum link_ext_substate_link_logical_mismatch { + ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 1, + ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK, + ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS, + ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED, + ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED, +}; + +enum link_ext_substate_bad_signal_integrity { + ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 1, + ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE, +}; + +enum ethtool_link_ext_substate_cable_issue { + ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 1, + ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE, +}; + +const char *link_ext_state_get(uint8_t link_ext_state_val) +{ + switch (link_ext_state_val) { + case ETHTOOL_LINK_EXT_STATE_AUTONEG: + return "Autoneg"; + case ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE: + return "Link training failure"; + case ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH: + return "Logical mismatch"; + case ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY: + return "Bad signal integrity"; + case ETHTOOL_LINK_EXT_STATE_NO_CABLE: + return "No cable"; + case ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE: + return "Cable issue"; + case ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE: + return "EEPROM issue"; + case ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE: + return "Calibration failure"; + case ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED: + return "Power budget exceeded"; + case ETHTOOL_LINK_EXT_STATE_OVERHEAT: + return "Overheat"; + default: + return NULL; + } +} + +static const char *autoneg_link_ext_substate_get(uint8_t link_ext_substate_val) +{ + switch (link_ext_substate_val) { + case ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED: + return "No partner detected"; + case ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED: + return "Ack not received"; + case ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED: + return "Next page exchange failed"; + case ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE: + return "No partner detected during force mode"; + case ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE: + return "FEC mismatch during override"; + case ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD: + return "No HCD"; + default: + return NULL; + } +} + +static const char *link_training_link_ext_substate_get(uint8_t link_ext_substate_val) +{ + switch (link_ext_substate_val) { + case ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED: + return "KR frame lock not acquired"; + case ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT: + return "KR link inhibit timeout"; + case ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY: + return "KR Link partner did not set receiver ready"; + case ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT: + return "Remote side is not ready yet"; + default: + return NULL; + } +} + +static const char *link_logical_mismatch_link_ext_substate_get(uint8_t link_ext_substate_val) +{ + switch (link_ext_substate_val) { + case ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK: + return "PCS did not acquire block lock"; + case ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK: + return "PCS did not acquire AM lock"; + case ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS: + return "PCS did not get align_status"; + case ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED: + return "FC FEC is not locked"; + case ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED: + return "RS FEC is not locked"; + default: + return NULL; + } +} + +static const char *bad_signal_integrity_link_ext_substate_get(uint8_t link_ext_substate_val) +{ + switch (link_ext_substate_val) { + case ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS: + return "Large number of physical errors"; + case ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE: + return "Unsupported rate"; + default: + return NULL; + } +} + +static const char *cable_issue_link_ext_substate_get(uint8_t link_ext_substate_val) +{ + switch (link_ext_substate_val) { + case ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE: + return "Unsupported cable"; + case ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE: + return "Cable test failure"; + default: + return NULL; + } +} + +const char *link_ext_substate_get(uint8_t link_ext_state_val, uint8_t link_ext_substate_val) +{ + switch (link_ext_state_val) { + case ETHTOOL_LINK_EXT_STATE_AUTONEG: + return autoneg_link_ext_substate_get(link_ext_substate_val); + case ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE: + return link_training_link_ext_substate_get(link_ext_substate_val); + case ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH: + return link_logical_mismatch_link_ext_substate_get(link_ext_substate_val); + case ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY: + return bad_signal_integrity_link_ext_substate_get(link_ext_substate_val); + case ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE: + return cable_issue_link_ext_substate_get(link_ext_substate_val); + default: + return NULL; + } +} + int dump_wol(struct ethtool_wolinfo *wol) { fprintf(stdout, " Supports Wake-on: %s\n", diff --git a/common.h b/common.h index b74fdfa..26bec2f 100644 --- a/common.h +++ b/common.h @@ -39,6 +39,8 @@ struct off_flag_def { extern const struct off_flag_def off_flag_def[OFF_FLAG_DEF_SIZE]; void print_flags(const struct flag_info *info, unsigned int n_info, u32 value); +const char *link_ext_state_get(uint8_t link_ext_state_val); +const char *link_ext_substate_get(uint8_t link_ext_state_val, uint8_t link_ext_substate_val); int dump_wol(struct ethtool_wolinfo *wol); void dump_mdix(u8 mdix, u8 mdix_ctrl); From patchwork Tue Jun 30 09:24:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Cohen X-Patchwork-Id: 1319662 X-Patchwork-Delegate: mkubecek@suse.cz Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.a=rsa-sha256 header.s=selector1 header.b=af1L5VPz; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 49wzTf1q7zz9s6w for ; Tue, 30 Jun 2020 19:24:54 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731942AbgF3JYx (ORCPT ); Tue, 30 Jun 2020 05:24:53 -0400 Received: from mail-eopbgr80078.outbound.protection.outlook.com ([40.107.8.78]:21154 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731810AbgF3JYw (ORCPT ); Tue, 30 Jun 2020 05:24:52 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=W0q3RNVcwIQ/XU04iwdepf7M5yxoeC8X2ICIB+uw86X+gVglG6wXXRF0nJWSTHXytFUSj6z2Xg90jozSlAkkMcr5PLtuj7LnW+4nRuAVP8W4pI1pNeN7FQTulQhU9BiCISmtWFI1DDB7k4hmci7CmXjXF1RkkEUlPaH20mzx94wM+wKvUvfhrG6lZj+Je4mkGHcMISzkhHyLfvXciDttjFoyJqw75BW0TyU+GiRa3uk6XB1v25s+P+toc4L7kpdbJB6Ci1Zda/4e+AnoxDgIftsMvEzxLIB2sAVXXuEWwoRHtmGuEYGDCL8isCMUYjdoBCqpxn68V213weMmKJPQVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=draxkPE8kLDEA/7Jru9hLV8Rk/y575zkCvmEYpw4yRk=; b=BdSJbkMRJIAF25XkGHntMK1sVow1O7u2BxbD7Udq9OD/jjXOS4gDJkkmsCK3q0CEgvIyiTfZeW+5zxLQldmpjMG5POBRIk8DoDuC1qhQC2bIVjvayUDNHGvn33h09/N0ct/nL9DIKHa228IDEBN07YJqQfsTmeTf6567YVr6g1SyR/Gm0qCu/CY35RzyKk4U9XoJoHp7vpTfXLP1txNKsDcQV1gOCoXtdHZOBQK+n/oXawwTDqC+MO7Deyyfegoh6fSoy/2fJrLwayxToN5Y0twqEKfeer2KA3XNsdi5L2VBXo+/ltp/jtvW8nlZq8ClRQTG4Wr7gCEqhQ2lvFMGpg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none 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:X-MS-Exchange-SenderADCheck; bh=draxkPE8kLDEA/7Jru9hLV8Rk/y575zkCvmEYpw4yRk=; b=af1L5VPzANRygZlc9iV1EljPL1a28aloMpDxh6THekjWXrMCUaV5CoJfSFIZjrLa3M6AJFRLqDygZGG93puQfCMZx5Md1zv5WGAbdFiVx/IVt52RvfuvACZtbANXyIoO1hzhWbugbLq8xGKR/NvcTfAePyM6qtm+6/DBJY67LcQ= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=mellanox.com; Received: from AM0PR0502MB3826.eurprd05.prod.outlook.com (2603:10a6:208:1b::25) by AM0PR05MB4450.eurprd05.prod.outlook.com (2603:10a6:208:61::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3131.23; Tue, 30 Jun 2020 09:24:41 +0000 Received: from AM0PR0502MB3826.eurprd05.prod.outlook.com ([fe80::2534:ddc7:1744:fea9]) by AM0PR0502MB3826.eurprd05.prod.outlook.com ([fe80::2534:ddc7:1744:fea9%7]) with mapi id 15.20.3131.027; Tue, 30 Jun 2020 09:24:41 +0000 From: Amit Cohen To: netdev@vger.kernel.org Cc: mkubecek@suse.cz, davem@davemloft.net, o.rempel@pengutronix.de, andrew@lunn.ch, f.fainelli@gmail.com, jacob.e.keller@intel.com, mlxsw@mellanox.com, Amit Cohen Subject: [PATCH ethtool 3/3] netlink: settings: expand linkstate_reply_cb() to support link extended state Date: Tue, 30 Jun 2020 12:24:12 +0300 Message-Id: <20200630092412.11432-4-amitc@mellanox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200630092412.11432-1-amitc@mellanox.com> References: <20200630092412.11432-1-amitc@mellanox.com> X-ClientProxiedBy: AM0PR03CA0044.eurprd03.prod.outlook.com (2603:10a6:208::21) To AM0PR0502MB3826.eurprd05.prod.outlook.com (2603:10a6:208:1b::25) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from dev-r-vrt-155.mtr.labs.mlnx (37.142.13.130) by AM0PR03CA0044.eurprd03.prod.outlook.com (2603:10a6:208::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3131.20 via Frontend Transport; Tue, 30 Jun 2020 09:24:40 +0000 X-Mailer: git-send-email 2.20.1 X-Originating-IP: [37.142.13.130] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: b9a336ea-509d-4cdc-9484-08d81cd76b1f X-MS-TrafficTypeDiagnostic: AM0PR05MB4450: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:605; X-Forefront-PRVS: 0450A714CB X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 7cOl3uhaF7W42OPfjQsFbcPY/OG9SBnHi9b4pIUAawmUonrXB9R79O41OYqy14gxG5+7k2+qWkfIeojAqfYcws/BEhmL30NLKBz0VjAUTh5X7Ye+Wzm4kPWyM/k6jbayGuR6mT5FnFhdM1W1mdJcQBcSUNHMZgMwbDP2iqeCx2dpaOJgkgDMjeKVupqPa2OIWuT0LBNDDjIjTvKhoCHv8z+SNhSKI0DqGkI7NGd9VC6V9RB2aZvZ/GsCbMti/+IxDVffkAGYXa4K2Vx2GDDtZuyZeSRkOdu0TjItQmi2cvT4ROSFroomAljBXNi1ddkgZaWKuUrbqCUDGVJNnhjpTg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR0502MB3826.eurprd05.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(366004)(376002)(396003)(346002)(136003)(39860400002)(52116002)(478600001)(2616005)(956004)(4326008)(2906002)(5660300002)(8936002)(316002)(6512007)(6916009)(66476007)(66556008)(8676002)(66946007)(6666004)(107886003)(86362001)(26005)(6506007)(186003)(83380400001)(36756003)(6486002)(1076003)(16526019);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: uz39bqdG805el6lknooNRlAvM8LR/6lbmI1Z29ofdq+vFcQSLaq37gDfZolOTrWfQI8/H6fj4Wq/zxqg6VtLf+30SfDuECKvHvRmteiVnbBK5+1X2E86nxHsB4ufwLRABhVOhr3Mt4lWNlIeXKYzFXiQw2+JMMUBPCEsyvnOOjezRuViXjPEG9WesjXh33/6V4GNlSspqRUQTwmQ9oaC1G+tRP4qPv4SL7m5spgPb3dCVsGdaQ6utUdYw+Qfo+y0K8w3UCxmbXLIpaWzjR4cj+TLjqDMDdKucXrniA1zoyeu2gmZ1SWRf+M5w/I+7yLS1OMl9m79M6kOe77zliJNv/GoTsW453cH9A0Nx5wXNCvKlyGfH3SG6wnk187nbJXvs3JpVqascaEPbL2ZxN1WVhWdxlGIri2ydmLcu120kxGZctO0ZHTyI8cLWc1dqoAUHlnpAfx3f3HM3ouWTMJENJohpIec26p3sgBHakcnKAw= X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: b9a336ea-509d-4cdc-9484-08d81cd76b1f X-MS-Exchange-CrossTenant-AuthSource: AM0PR0502MB3826.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jun 2020 09:24:41.6131 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: JU4688LJ0RSD/8F7hgHm/OJGQ9wKaqji1qsygCLGmAkOX48/JufNas0/z+3zG/rRL8xSHyXKsua/lxBPbL5daQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR05MB4450 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Print extended state in addition to link state. In case that extended state is not provided, print state only. If extended substate is provided in addition to the extended state, print it also. Signed-off-by: Amit Cohen --- netlink/settings.c | 59 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 3 deletions(-) diff --git a/netlink/settings.c b/netlink/settings.c index 35ba2f5..a4d1908 100644 --- a/netlink/settings.c +++ b/netlink/settings.c @@ -604,6 +604,57 @@ int linkinfo_reply_cb(const struct nlmsghdr *nlhdr, void *data) return MNL_CB_OK; } +int linkstate_link_ext_substate_print(const struct nlattr *tb[], + struct nl_context *nlctx, uint8_t link_val, + uint8_t link_ext_state_val, + const char *link_ext_state_str) +{ + uint8_t link_ext_substate_val; + const char *link_ext_substate_str; + + if (!tb[ETHTOOL_A_LINKSTATE_EXT_SUBSTATE]) + return -ENODATA; + + link_ext_substate_val = mnl_attr_get_u8(tb[ETHTOOL_A_LINKSTATE_EXT_SUBSTATE]); + + link_ext_substate_str = link_ext_substate_get(link_ext_state_val, link_ext_substate_val); + if (!link_ext_substate_str) + return -ENODATA; + + print_banner(nlctx); + printf("\tLink detected: %s (%s, %s)\n", link_val ? "yes" : "no", + link_ext_state_str, link_ext_substate_str); + + return 0; +} + +int linkstate_link_ext_state_print(const struct nlattr *tb[], + struct nl_context *nlctx, uint8_t link_val) +{ + uint8_t link_ext_state_val; + const char *link_ext_state_str; + int ret; + + if (!tb[ETHTOOL_A_LINKSTATE_EXT_STATE]) + return -ENODATA; + + link_ext_state_val = mnl_attr_get_u8(tb[ETHTOOL_A_LINKSTATE_EXT_STATE]); + + link_ext_state_str = link_ext_state_get(link_ext_state_val); + if (!link_ext_state_str) + return -ENODATA; + + ret = linkstate_link_ext_substate_print(tb, nlctx, link_val, link_ext_state_val, + link_ext_state_str); + if (ret < 0) { + print_banner(nlctx); + printf("\tLink detected: %s (%s)\n", link_val ? "yes" : "no", + link_ext_state_str); + } + + return 0; +} + int linkstate_reply_cb(const struct nlmsghdr *nlhdr, void *data) { const struct nlattr *tb[ETHTOOL_A_LINKSTATE_MAX + 1] = {}; @@ -622,9 +673,11 @@ int linkstate_reply_cb(const struct nlmsghdr *nlhdr, void *data) if (tb[ETHTOOL_A_LINKSTATE_LINK]) { uint8_t val = mnl_attr_get_u8(tb[ETHTOOL_A_LINKSTATE_LINK]); - - print_banner(nlctx); - printf("\tLink detected: %s\n", val ? "yes" : "no"); + ret = linkstate_link_ext_state_print(tb, nlctx, val); + if (ret < 0) { + print_banner(nlctx); + printf("\tLink detected: %s\n", val ? "yes" : "no"); + } } if (tb[ETHTOOL_A_LINKSTATE_SQI]) {