From patchwork Tue Mar 26 12:03:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 1065477 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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; dmarc=none (p=none dis=none) header.from=resnulli.us Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="kyxD6tSU"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44T8sq5CfMz9sSg for ; Tue, 26 Mar 2019 23:03:27 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731519AbfCZMDY (ORCPT ); Tue, 26 Mar 2019 08:03:24 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:51975 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731495AbfCZMDW (ORCPT ); Tue, 26 Mar 2019 08:03:22 -0400 Received: by mail-wm1-f65.google.com with SMTP id 4so12330366wmf.1 for ; Tue, 26 Mar 2019 05:03:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=PBSV3d4fL+4Y7+FZIaaesIE3/LgD0gy9ANNOnsROKVs=; b=kyxD6tSUL3H+aYpYYSDWNB3K8g0SLh64Y8Jf/+cQ4t2KBmDq4d2BLknm1IexhlrafT hX1lcUytro5wXHo70iQkXoQ11XRZbihuuX5TNbTCOAZGTWt0OpKWgjQ0Ktp5DMgxCMoH hl74fy+HZFX7Nt/aZUjm81YsLHDNmxoZ4R9w67HFo3wCrJXrSdfM+5ANScApGXulV8fe oDDuj5cyu/zpftHxD0qXqQTbdoJ7Bc9nuz/gDIyml5gbqCthGci5YzUnU0OvxJAwJDl2 LsG7n9kzzl1ff2D4pVP2jhCBbA+M/bFOP1ybEvMlidQcIATFSBXiBwW2FUDfogigDK14 xZVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=PBSV3d4fL+4Y7+FZIaaesIE3/LgD0gy9ANNOnsROKVs=; b=AbItLjSyYa67JO7v8K69J6UetSIEdtAao62YJ4rdShsCOi+Und06SGrm4qz3qh+pEU 1FmHpUz1dy8Kn5Gmj2M/Txo09hGwDyGCd41JT5D4Px17ezRcxiPksh/lmgNrrgkz4AwV ACNbjL3nMzJUHZihXtHC5xGNcB9a6HwONKdJQUjvcVqQS/KvcY0AcbSFCTZfIo7dnIKT yHrIorsPEYt+QUglLGawgBg0F5ytwDu35HZ3T9/dvzsU/dbbVREh7+QwLGzvgktdi7uD IqEJxo78rV0+u7t/KkaNuC/jrYgfZCKnyZdDgNg4QPfP/LcoxxSpWlaHvFGa/MAHWeiM G+Ag== X-Gm-Message-State: APjAAAXqHb4fXIo1L3Yda+FFy7BFpLkPOuv6ej6aYHOpDxmvlqiaydTy tmyAtEaa+N8n4vUIKQ7ZeLkUGZZWklc= X-Google-Smtp-Source: APXvYqxb4PXf4lA0GhjQhlMIhAfQFvHJweOuqEwzgO3C6/22F8NMzUzyXkxlUEjM9aYuRj8DduROLw== X-Received: by 2002:a1c:7d92:: with SMTP id y140mr8548498wmc.54.1553601800521; Tue, 26 Mar 2019 05:03:20 -0700 (PDT) Received: from localhost (mail.chocen-mesto.cz. [85.163.43.2]) by smtp.gmail.com with ESMTPSA id o15sm17889296wrj.59.2019.03.26.05.03.19 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 26 Mar 2019 05:03:19 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, mlxsw@mellanox.com, idosch@mellanox.com, jakub.kicinski@netronome.com, f.fainelli@gmail.com, andrew@lunn.ch, vivien.didelot@gmail.com, michael.chan@broadcom.com Subject: [patch net-next v2 11/12] net: devlink: expose phys port name Date: Tue, 26 Mar 2019 13:03:06 +0100 Message-Id: <20190326120307.2953-12-jiri@resnulli.us> X-Mailer: git-send-email 2.17.2 In-Reply-To: <20190326120307.2953-1-jiri@resnulli.us> References: <20190326120307.2953-1-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jiri Pirko Currently, it is exposed via rtnetlink. But it is relevant to devlink ports, so expose it here too. Signed-off-by: Jiri Pirko --- v1->v2: - new patch --- include/uapi/linux/devlink.h | 2 + net/core/devlink.c | 86 ++++++++++++++++++++++-------------- 2 files changed, 56 insertions(+), 32 deletions(-) diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h index 5bb4ea67d84f..2d0365e45141 100644 --- a/include/uapi/linux/devlink.h +++ b/include/uapi/linux/devlink.h @@ -332,6 +332,8 @@ enum devlink_attr { DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME, /* string */ DEVLINK_ATTR_FLASH_UPDATE_COMPONENT, /* string */ + DEVLINK_ATTR_PORT_PHYS_NAME, /* string */ + /* add new attributes above here, update the policy in devlink.c */ __DEVLINK_ATTR_MAX, diff --git a/net/core/devlink.c b/net/core/devlink.c index 6bbd07e3861e..356d7ee7c404 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -508,6 +508,57 @@ static void devlink_notify(struct devlink *devlink, enum devlink_command cmd) msg, 0, DEVLINK_MCGRP_CONFIG, GFP_KERNEL); } +static int __devlink_port_phys_port_name_get(struct devlink_port *devlink_port, + char *name, size_t len) +{ + struct devlink_port_attrs *attrs = &devlink_port->attrs; + int n = 0; + + if (!attrs->set) + return -EOPNOTSUPP; + + switch (attrs->flavour) { + case DEVLINK_PORT_FLAVOUR_PHYSICAL: + if (!attrs->split) + n = snprintf(name, len, "p%u", attrs->port_number); + else + n = snprintf(name, len, "p%us%u", attrs->port_number, + attrs->split_subport_number); + break; + case DEVLINK_PORT_FLAVOUR_CPU: + case DEVLINK_PORT_FLAVOUR_DSA: + /* As CPU and DSA ports do not have a netdevice associated + * case should not ever happen. + */ + WARN_ON(1); + return -EINVAL; + } + + if (n >= len) + return -EINVAL; + + return 0; +} + +static int devlink_nl_port_phys_port_name_put(struct sk_buff *msg, + struct devlink_port *devlink_port) +{ + struct devlink_port_attrs *attrs = &devlink_port->attrs; + char phys_name[IFNAMSIZ]; + int err; + + if (attrs->flavour != DEVLINK_PORT_FLAVOUR_PHYSICAL) + return 0; + + err = __devlink_port_phys_port_name_get(devlink_port, + phys_name, sizeof(phys_name)); + if (err) + return err; + if (nla_put_string(msg, DEVLINK_ATTR_PORT_PHYS_NAME, phys_name)) + return -EMSGSIZE; + return 0; +} + static int devlink_nl_port_attrs_put(struct sk_buff *msg, struct devlink_port *devlink_port) { @@ -526,6 +577,9 @@ static int devlink_nl_port_attrs_put(struct sk_buff *msg, if (nla_put_u32(msg, DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER, attrs->split_subport_number)) return -EMSGSIZE; + if (devlink_nl_port_phys_port_name_put(msg, devlink_port)) + return -EMSGSIZE; + return 0; } @@ -5414,38 +5468,6 @@ void devlink_port_attrs_set(struct devlink_port *devlink_port, } EXPORT_SYMBOL_GPL(devlink_port_attrs_set); -static int __devlink_port_phys_port_name_get(struct devlink_port *devlink_port, - char *name, size_t len) -{ - struct devlink_port_attrs *attrs = &devlink_port->attrs; - int n = 0; - - if (!attrs->set) - return -EOPNOTSUPP; - - switch (attrs->flavour) { - case DEVLINK_PORT_FLAVOUR_PHYSICAL: - if (!attrs->split) - n = snprintf(name, len, "p%u", attrs->port_number); - else - n = snprintf(name, len, "p%us%u", attrs->port_number, - attrs->split_subport_number); - break; - case DEVLINK_PORT_FLAVOUR_CPU: - case DEVLINK_PORT_FLAVOUR_DSA: - /* As CPU and DSA ports do not have a netdevice associated - * case should not ever happen. - */ - WARN_ON(1); - return -EINVAL; - } - - if (n >= len) - return -EINVAL; - - return 0; -} - int devlink_sb_register(struct devlink *devlink, unsigned int sb_index, u32 size, u16 ingress_pools_count, u16 egress_pools_count, u16 ingress_tc_count,