From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 666F5C43381 for ; Mon, 18 Feb 2019 18:22:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 426442146E for ; Mon, 18 Feb 2019 18:22:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2403979AbfBRSWk (ORCPT ); Mon, 18 Feb 2019 13:22:40 -0500 Received: from mx2.suse.de ([195.135.220.15]:46846 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2391476AbfBRSWh (ORCPT ); Mon, 18 Feb 2019 13:22:37 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 4F928AFBF; Mon, 18 Feb 2019 18:22:35 +0000 (UTC) Received: by unicorn.suse.cz (Postfix, from userid 1000) id E01EFE0122; Mon, 18 Feb 2019 19:22:34 +0100 (CET) Message-Id: In-Reply-To: References: From: Michal Kubecek Subject: [RFC PATCH net-next v3 14/21] ethtool: provide link mode names as a string set To: netdev@vger.kernel.org Cc: David Miller , Andrew Lunn , Jakub Kicinski , Jiri Pirko , linux-kernel@vger.kernel.org Date: Mon, 18 Feb 2019 19:22:34 +0100 (CET) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add table of ethernet link mode names and make it available as a string set to userspace GET_STRSET requests. Signed-off-by: Michal Kubecek --- include/uapi/linux/ethtool.h | 2 ++ net/ethtool/netlink.c | 58 ++++++++++++++++++++++++++++++++++++ net/ethtool/netlink.h | 1 + net/ethtool/strset.c | 6 ++++ 4 files changed, 67 insertions(+) diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h index 1b58637d3a4d..ba96a691bfd4 100644 --- a/include/uapi/linux/ethtool.h +++ b/include/uapi/linux/ethtool.h @@ -566,6 +566,7 @@ struct ethtool_pauseparam { * @ETH_SS_TSTAMP_SOF: timestamping flag names * @ETH_SS_TSTAMP_TX_TYPE: timestamping Tx type names * @ETH_SS_TSTAMP_RX_FILTER: timestamping Rx filter names + * @ETH_SS_LINK_MODES: link mode names */ enum ethtool_stringset { ETH_SS_TEST = 0, @@ -580,6 +581,7 @@ enum ethtool_stringset { ETH_SS_TSTAMP_SOF, ETH_SS_TSTAMP_TX_TYPE, ETH_SS_TSTAMP_RX_FILTER, + ETH_SS_LINK_MODES, ETH_SS_COUNT }; diff --git a/net/ethtool/netlink.c b/net/ethtool/netlink.c index e27dec427414..1ff6696ad716 100644 --- a/net/ethtool/netlink.c +++ b/net/ethtool/netlink.c @@ -6,6 +6,61 @@ u32 ethnl_bcast_seq; +const char *const link_mode_names[] = { + [ETHTOOL_LINK_MODE_10baseT_Half_BIT] = "10baseT/Half", + [ETHTOOL_LINK_MODE_10baseT_Full_BIT] = "10baseT/Full", + [ETHTOOL_LINK_MODE_100baseT_Half_BIT] = "100baseT/Half", + [ETHTOOL_LINK_MODE_100baseT_Full_BIT] = "100baseT/Full", + [ETHTOOL_LINK_MODE_1000baseT_Half_BIT] = "1000baseT/Half", + [ETHTOOL_LINK_MODE_1000baseT_Full_BIT] = "1000baseT/Full", + [ETHTOOL_LINK_MODE_Autoneg_BIT] = "Autoneg", + [ETHTOOL_LINK_MODE_TP_BIT] = "TP", + [ETHTOOL_LINK_MODE_AUI_BIT] = "AUI", + [ETHTOOL_LINK_MODE_MII_BIT] = "MII", + [ETHTOOL_LINK_MODE_FIBRE_BIT] = "FIBRE", + [ETHTOOL_LINK_MODE_BNC_BIT] = "BNC", + [ETHTOOL_LINK_MODE_10000baseT_Full_BIT] = "10000baseT/Full", + [ETHTOOL_LINK_MODE_Pause_BIT] = "Pause", + [ETHTOOL_LINK_MODE_Asym_Pause_BIT] = "Asym_Pause", + [ETHTOOL_LINK_MODE_2500baseX_Full_BIT] = "2500baseX/Full", + [ETHTOOL_LINK_MODE_Backplane_BIT] = "Backplane", + [ETHTOOL_LINK_MODE_1000baseKX_Full_BIT] = "1000baseKX/Full", + [ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT] = "10000baseKX4/Full", + [ETHTOOL_LINK_MODE_10000baseKR_Full_BIT] = "10000baseKR/Full", + [ETHTOOL_LINK_MODE_10000baseR_FEC_BIT] = "10000baseR/FEC", + [ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT] = "20000baseMLD2/Full", + [ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT] = "20000baseKR2/Full", + [ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT] = "40000baseKR4/Full", + [ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT] = "40000baseCR4/Full", + [ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT] = "40000baseSR4/Full", + [ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT] = "40000baseLR4/Full", + [ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT] = "56000baseKR4/Full", + [ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT] = "56000baseCR4/Full", + [ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT] = "56000baseSR4/Full", + [ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT] = "56000baseLR4/Full", + [ETHTOOL_LINK_MODE_25000baseCR_Full_BIT] = "25000baseCR/Full", + [ETHTOOL_LINK_MODE_25000baseKR_Full_BIT] = "25000baseKR/Full", + [ETHTOOL_LINK_MODE_25000baseSR_Full_BIT] = "25000baseSR/Full", + [ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT] = "50000baseCR2/Full", + [ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT] = "50000baseKR2/Full", + [ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT] = "100000baseKR4/Full", + [ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT] = "100000baseSR4/Full", + [ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT] = "100000baseCR4/Full", + [ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT] = "100000baseLR4/ER4_Full", + [ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT] = "50000baseSR2/Full", + [ETHTOOL_LINK_MODE_1000baseX_Full_BIT] = "1000baseX/Full", + [ETHTOOL_LINK_MODE_10000baseCR_Full_BIT] = "10000baseCR/Full", + [ETHTOOL_LINK_MODE_10000baseSR_Full_BIT] = "10000baseSR/Full", + [ETHTOOL_LINK_MODE_10000baseLR_Full_BIT] = "10000baseLR/Full", + [ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT] = "10000baseLRM/Full", + [ETHTOOL_LINK_MODE_10000baseER_Full_BIT] = "10000baseER/Full", + [ETHTOOL_LINK_MODE_2500baseT_Full_BIT] = "2500baseT/Full", + [ETHTOOL_LINK_MODE_5000baseT_Full_BIT] = "5000baseT/Full", + [ETHTOOL_LINK_MODE_FEC_NONE_BIT] = "None", + [ETHTOOL_LINK_MODE_FEC_RS_BIT] = "RS", + [ETHTOOL_LINK_MODE_FEC_BASER_BIT] = "BASER", +}; + static const struct nla_policy dev_policy[ETHA_DEV_MAX + 1] = { [ETHA_DEV_UNSPEC] = { .type = NLA_REJECT }, [ETHA_DEV_INDEX] = { .type = NLA_U32 }, @@ -541,6 +596,9 @@ static int __init ethnl_init(void) { int ret; + BUILD_BUG_ON(ARRAY_SIZE(link_mode_names) < + __ETHTOOL_LINK_MODE_MASK_NBITS); + ret = genl_register_family(ðtool_genl_family); if (ret < 0) panic("ethtool: could not register genetlink family\n"); diff --git a/net/ethtool/netlink.h b/net/ethtool/netlink.h index 82a4c1f398d8..800ea57ab0de 100644 --- a/net/ethtool/netlink.h +++ b/net/ethtool/netlink.h @@ -23,6 +23,7 @@ extern struct genl_family ethtool_genl_family; extern const char *const so_timestamping_labels[]; extern const char *const tstamp_tx_type_labels[]; extern const char *const tstamp_rx_filter_labels[]; +extern const char *const link_mode_names[]; struct net_device *ethnl_dev_get(struct genl_info *info, struct nlattr *nest); int ethnl_fill_dev(struct sk_buff *msg, struct net_device *dev, u16 attrtype); diff --git a/net/ethtool/strset.c b/net/ethtool/strset.c index 5c74498d9c72..dd87d7db8b61 100644 --- a/net/ethtool/strset.c +++ b/net/ethtool/strset.c @@ -85,6 +85,12 @@ static const struct strset_info info_template[] = { .count = __HWTSTAMP_FILTER_COUNT, .data = { .simple = tstamp_rx_filter_labels }, }, + [ETH_SS_LINK_MODES] = { + .type = ETH_SS_TYPE_SIMPLE, + .per_dev = false, + .count = __ETHTOOL_LINK_MODE_MASK_NBITS, + .data = { .simple = link_mode_names }, + }, }; struct strset_data { -- 2.20.1