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=-8.5 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED,USER_AGENT_MUTT 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 94BB5C43381 for ; Wed, 27 Mar 2019 07:45:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4DFC420811 for ; Wed, 27 Mar 2019 07:45:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="fOcRhSBN" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726296AbfC0Hpm (ORCPT ); Wed, 27 Mar 2019 03:45:42 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:35880 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725772AbfC0Hpm (ORCPT ); Wed, 27 Mar 2019 03:45:42 -0400 Received: by mail-wr1-f65.google.com with SMTP id y13so17307361wrd.3 for ; Wed, 27 Mar 2019 00:45:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=k5TcVcSAsnUCYXVKpsENmbYmUMbFaiNcsTrEnCUHYKQ=; b=fOcRhSBNu8VX9eXDzXg9rprYtVc5C/U1k+1b/rNWfquan/Qi9jQ2M6vjzKJvZqwp0+ tXokJbqBX366QuoT2miYXfNqKt94xUgkRm2xt3iW0q4cKf2JvBBrSLthQ+/aM7zmAp34 AHi5q017nuoF7ZyE7Z18/bGBkChZHc9lpqrhWQiNLmT2V2auD887mOKsDh0MZRqtlNH7 /JN9h3KUGsr1BRaHbV85shGe72xeasl4IafulVEyVI3OUpXj1w1GzdZKE3PKqj6kGLkp OFWDggYfRRQRmFohG0MIlRS5UUjW3NIIoMsLkFS9oVDBu2EaQnAzFAsnhpqSN4mnQXGJ 8rEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=k5TcVcSAsnUCYXVKpsENmbYmUMbFaiNcsTrEnCUHYKQ=; b=pnvfzG6DdKcgvMzfhhIpCA5MmmXxTqzxjult0QakFP4TNzPRifcSMx8MAQ62CLkFnB pA3tCEugyVwptF9Cp5op0DlbUGrQ/WIM3DjrowYqNkEztxZgV/oF3/sC4XeOmMvAkUTi jXfrG8isdfsSZ+iFMeTxeNH0CNr0Y0zEz7Fg0rhOBlXXRlFaN80toELNaI3AMA/EbLWJ gJhPkPoVVaG4Nt2RztP8dfavuLzLudxeWYVTJ6piK5t0k/XP5ZGZ82ka7gBAra1PQfre v4V+RBxd03ZHpm5zxiW5Y7rOQN3mgrQalyvugpAV4KVrJEFlYMAVY/A79VhvmJUA5CVg y1AA== X-Gm-Message-State: APjAAAXCp17kOUzu7iLqvLnAHmPRlCPSjBmXwo/KkwofxCikWV28w/Hb NehdIhCLgbuzfPv+Sgfv7yKJ5A== X-Google-Smtp-Source: APXvYqzk7G/1OYy+1HOIe2J6JvcrHMXMLDGvP0CQkQCr8G9dcRltBYZekkXA2tmGxOisN1nvWdhRZw== X-Received: by 2002:a05:6000:14a:: with SMTP id r10mr4452692wrx.107.1553672740144; Wed, 27 Mar 2019 00:45:40 -0700 (PDT) Received: from localhost (ip-94-113-223-73.net.upcbroadband.cz. [94.113.223.73]) by smtp.gmail.com with ESMTPSA id r9sm13066414wmh.38.2019.03.27.00.45.39 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 27 Mar 2019 00:45:39 -0700 (PDT) Date: Wed, 27 Mar 2019 08:45:38 +0100 From: Jiri Pirko To: Jakub Kicinski Cc: netdev@vger.kernel.org, davem@davemloft.net, mlxsw@mellanox.com, idosch@mellanox.com, f.fainelli@gmail.com, andrew@lunn.ch, vivien.didelot@gmail.com, michael.chan@broadcom.com Subject: Re: [patch net-next v2 11/12] net: devlink: expose phys port name Message-ID: <20190327074538.GA3111@nanopsycho> References: <20190326120307.2953-1-jiri@resnulli.us> <20190326120307.2953-12-jiri@resnulli.us> <20190326133558.40d5ff0e@cakuba.netronome.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190326133558.40d5ff0e@cakuba.netronome.com> User-Agent: Mutt/1.11.3 (2019-02-01) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Tue, Mar 26, 2019 at 09:35:58PM CET, jakub.kicinski@netronome.com wrote: >On Tue, 26 Mar 2019 13:03:06 +0100, Jiri Pirko wrote: >> 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 > >Why? User space has access to all the components which are used to >generate the name in a typed, structured form. That's strictly Nope. It does has access only to flavour. Not to port number for example. So I thought either expose that or the generated name. >superior to the string netdev string. > >Do you have some use in mind for the new attribute? > >> 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, >