[net-next,v2,2/2] net: dsa: Rename IFLA_DSA_MASTER to IFLA_DSA_CONDUIT

Message ID 20231011222026.4181654-3-florian.fainelli@broadcom.com
State New
Headers
Series Switch DSA to inclusive terminology |

Commit Message

Florian Fainelli Oct. 11, 2023, 10:20 p.m. UTC
  This preserves the existing IFLA_DSA_MASTER which is part of the uAPI
and creates an alias named IFLA_DSA_CONDUIT.

Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
---
 Documentation/networking/dsa/configuration.rst |  4 ++--
 include/uapi/linux/if_link.h                   |  4 +++-
 net/dsa/netlink.c                              | 10 +++++-----
 3 files changed, 10 insertions(+), 8 deletions(-)
  

Comments

Stephen Hemminger Oct. 11, 2023, 11:30 p.m. UTC | #1
On Wed, 11 Oct 2023 15:20:26 -0700
Florian Fainelli <florian.fainelli@broadcom.com> wrote:

>  enum {
>  	IFLA_DSA_UNSPEC,
> -	IFLA_DSA_MASTER,
> +	IFLA_DSA_CONDUIT,
> +	/* Deprecated, use IFLA_DSA_CONDUIT insted */
> +	IFLA_DSA_MASTER = IFLA_DSA_CONDUIT,
>  	__IFLA_DSA_MAX,
>  };

minor nit s/insted/instead/

I don't know if it would be acceptable in the kernel UAPI but what
we did in DPDK for similar situation to cause warning on use of deprecated value.



/**
 *  Macro to mark macros and defines scheduled for removal
 */
#if defined(RTE_CC_GCC) || defined(RTE_CC_CLANG)
#define RTE_PRAGMA(x)  _Pragma(#x)
#define RTE_PRAGMA_WARNING(w) RTE_PRAGMA(GCC warning #w)
#define RTE_DEPRECATED(x)  RTE_PRAGMA_WARNING(#x is deprecated)
#else
#define RTE_DEPRECATED(x)
#endif

...
#define RTE_DEV_WHITELISTED \
	RTE_DEPRECATED(RTE_DEV_WHITELISTED) RTE_DEV_ALLOWED
#define RTE_DEV_BLACKLISTED \
	RTE_DEPRECATED(RTE_DEV_BLACKLISTED) RTE_DEV_BLOCKED
  
Vladimir Oltean Oct. 12, 2023, 11:13 p.m. UTC | #2
On Wed, Oct 11, 2023 at 04:30:03PM -0700, Stephen Hemminger wrote:
> I don't know if it would be acceptable in the kernel UAPI but what
> we did in DPDK for similar situation to cause warning on use of deprecated value.
> 
> /**
>  *  Macro to mark macros and defines scheduled for removal
>  */
> #if defined(RTE_CC_GCC) || defined(RTE_CC_CLANG)
> #define RTE_PRAGMA(x)  _Pragma(#x)
> #define RTE_PRAGMA_WARNING(w) RTE_PRAGMA(GCC warning #w)
> #define RTE_DEPRECATED(x)  RTE_PRAGMA_WARNING(#x is deprecated)
> #else
> #define RTE_DEPRECATED(x)
> #endif
> 
> ...
> #define RTE_DEV_WHITELISTED \
> 	RTE_DEPRECATED(RTE_DEV_WHITELISTED) RTE_DEV_ALLOWED
> #define RTE_DEV_BLACKLISTED \
> 	RTE_DEPRECATED(RTE_DEV_BLACKLISTED) RTE_DEV_BLOCKED

What precedent exists in terms of intentionally breaking kernel headers?
If none, would this create one?
  
Stephen Hemminger Oct. 13, 2023, 2:30 a.m. UTC | #3
On Fri, 13 Oct 2023 02:13:45 +0300
Vladimir Oltean <olteanv@gmail.com> wrote:

> > I don't know if it would be acceptable in the kernel UAPI but what
> > we did in DPDK for similar situation to cause warning on use of deprecated value.
> > 
> > /**
> >  *  Macro to mark macros and defines scheduled for removal
> >  */
> > #if defined(RTE_CC_GCC) || defined(RTE_CC_CLANG)
> > #define RTE_PRAGMA(x)  _Pragma(#x)
> > #define RTE_PRAGMA_WARNING(w) RTE_PRAGMA(GCC warning #w)
> > #define RTE_DEPRECATED(x)  RTE_PRAGMA_WARNING(#x is deprecated)
> > #else
> > #define RTE_DEPRECATED(x)
> > #endif
> > 
> > ...
> > #define RTE_DEV_WHITELISTED \
> > 	RTE_DEPRECATED(RTE_DEV_WHITELISTED) RTE_DEV_ALLOWED
> > #define RTE_DEV_BLACKLISTED \
> > 	RTE_DEPRECATED(RTE_DEV_BLACKLISTED) RTE_DEV_BLOCKED  
> 
> What precedent exists in terms of intentionally breaking kernel headers?
> If none, would this create one?

It would cause warning, and most applications builds don't fail because of warning.
Kernel already has __diag_warn macro which is similar, but see no usages of it.
My comment was more of a "what if", probably not practical since it would just
fuel lots of angry user feedback.
  

Patch

diff --git a/Documentation/networking/dsa/configuration.rst b/Documentation/networking/dsa/configuration.rst
index a5a38c31736d..7148fb7c7fe1 100644
--- a/Documentation/networking/dsa/configuration.rst
+++ b/Documentation/networking/dsa/configuration.rst
@@ -393,7 +393,7 @@  description which has an ``ethernet`` property. It is up to the user to
 configure the system for the switch to use other conduits.
 
 DSA uses the ``rtnl_link_ops`` mechanism (with a "dsa" ``kind``) to allow
-changing the DSA conduit of a user port. The ``IFLA_DSA_MASTER`` u32 netlink
+changing the DSA conduit of a user port. The ``IFLA_DSA_CONDUIT`` u32 netlink
 attribute contains the ifindex of the conduit device that handles each user
 device. The DSA conduit must be a valid candidate based on firmware node
 information, or a LAG interface which contains only users which are valid
@@ -435,7 +435,7 @@  Using iproute2, the following manipulations are possible:
         dsa master bond0
 
 Notice that in the case of CPU ports under a LAG, the use of the
-``IFLA_DSA_MASTER`` netlink attribute is not strictly needed, but rather, DSA
+``IFLA_DSA_CONDUIT`` netlink attribute is not strictly needed, but rather, DSA
 reacts to the ``IFLA_MASTER`` attribute change of its present conduit (``eth0``)
 and migrates all user ports to the new upper of ``eth0``, ``bond0``. Similarly,
 when ``bond0`` is destroyed using ``RTM_DELLINK``, DSA migrates the user ports
diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h
index fac351a93aed..30ef80aff033 100644
--- a/include/uapi/linux/if_link.h
+++ b/include/uapi/linux/if_link.h
@@ -1392,7 +1392,9 @@  enum {
 
 enum {
 	IFLA_DSA_UNSPEC,
-	IFLA_DSA_MASTER,
+	IFLA_DSA_CONDUIT,
+	/* Deprecated, use IFLA_DSA_CONDUIT insted */
+	IFLA_DSA_MASTER = IFLA_DSA_CONDUIT,
 	__IFLA_DSA_MAX,
 };
 
diff --git a/net/dsa/netlink.c b/net/dsa/netlink.c
index f56f90a25b99..1332e56349e5 100644
--- a/net/dsa/netlink.c
+++ b/net/dsa/netlink.c
@@ -8,7 +8,7 @@ 
 #include "user.h"
 
 static const struct nla_policy dsa_policy[IFLA_DSA_MAX + 1] = {
-	[IFLA_DSA_MASTER]	= { .type = NLA_U32 },
+	[IFLA_DSA_CONDUIT]	= { .type = NLA_U32 },
 };
 
 static int dsa_changelink(struct net_device *dev, struct nlattr *tb[],
@@ -20,8 +20,8 @@  static int dsa_changelink(struct net_device *dev, struct nlattr *tb[],
 	if (!data)
 		return 0;
 
-	if (data[IFLA_DSA_MASTER]) {
-		u32 ifindex = nla_get_u32(data[IFLA_DSA_MASTER]);
+	if (data[IFLA_DSA_CONDUIT]) {
+		u32 ifindex = nla_get_u32(data[IFLA_DSA_CONDUIT]);
 		struct net_device *conduit;
 
 		conduit = __dev_get_by_index(dev_net(dev), ifindex);
@@ -38,7 +38,7 @@  static int dsa_changelink(struct net_device *dev, struct nlattr *tb[],
 
 static size_t dsa_get_size(const struct net_device *dev)
 {
-	return nla_total_size(sizeof(u32)) +	/* IFLA_DSA_MASTER  */
+	return nla_total_size(sizeof(u32)) +	/* IFLA_DSA_CONDUIT  */
 	       0;
 }
 
@@ -46,7 +46,7 @@  static int dsa_fill_info(struct sk_buff *skb, const struct net_device *dev)
 {
 	struct net_device *conduit = dsa_user_to_conduit(dev);
 
-	if (nla_put_u32(skb, IFLA_DSA_MASTER, conduit->ifindex))
+	if (nla_put_u32(skb, IFLA_DSA_CONDUIT, conduit->ifindex))
 		return -EMSGSIZE;
 
 	return 0;