Thread (10 messages) flat view 10 messages, 2 authors, 2021-06-11

RE: [PATCH net-next v2 2/3] rtnetlink: add IFLA_PARENT_[DEV|DEV_BUS]_NAME

From: Parav Pandit <hidden>
Date: 2021-06-11 13:01:51

From: Loic Poulain <redacted>
Sent: Thursday, June 10, 2021 11:15 PM

From: Johannes Berg <redacted>

In some cases, for example in the upcoming WWAN framework changes,
there's no natural "parent netdev", so sometimes dummy netdevs are
created or similar. IFLA_PARENT_DEV_NAME is a new attribute intended to
contain a device (sysfs, struct device) name that can be used instead when
creating a new netdev, if the rtnetlink family implements it.

As suggested by Parav Pandit, we also introduce
IFLA_PARENT_DEV_BUS_NAME attribute in order to uniquely identify a
device on the system (with bus/name pair).

ip-link(8) support for the generic parent device attributes will help us avoid
code duplication, so no other link type will require a custom code to handle
the parent name attribute. E.g. the WWAN interface creation command will
looks like this:

$ ip link add wwan0-1 parent-dev wwan0 type wwan channel-id 1

So, some future subsystem (or driver) FOO will have an interface creation
command that looks like this:

$ ip link add foo1-3 parent-dev foo1 type foo bar-id 3 baz-type Y

Below is an example of dumping link info of a random device with these new
attributes:

$ ip --details link show wlp0s20f3
  4: wlp0s20f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc
noqueue
     state UP mode DORMANT group default qlen 1000
     ...
     parent_devname 0000:00:14.3 parent_busname pci
Showing bus first followed device is more preferred approach to see hierarchy.
Please change their sequence.

You should drop "name" suffix.
"parent_bus" and "parent_dev" are just fine.
quoted hunk ↗ jump to hunk
Co-developed-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Co-developed-by: Loic Poulain <redacted>
Signed-off-by: Loic Poulain <redacted>
Suggested-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Signed-off-by: Johannes Berg <redacted>
---
 v2: - Squashed Johannes and Sergey changes
     - Added IFLA_PARENT_DEV_BUS_NAME attribute
     - reworded commit message + introduce Sergey's comment

 include/uapi/linux/if_link.h |  7 +++++++
 net/core/rtnetlink.c         | 12 ++++++++++++
 2 files changed, 19 insertions(+)
diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h index
a5a7f0e..4882e81 100644
--- a/include/uapi/linux/if_link.h
+++ b/include/uapi/linux/if_link.h
@@ -341,6 +341,13 @@ enum {
 	IFLA_ALT_IFNAME, /* Alternative ifname */
 	IFLA_PERM_ADDRESS,
 	IFLA_PROTO_DOWN_REASON,
+
+	/* device (sysfs) name as parent, used instead
+	 * of IFLA_LINK where there's no parent netdev
+	 */
+	IFLA_PARENT_DEV_NAME,
+	IFLA_PARENT_DEV_BUS_NAME,
+
 	__IFLA_MAX
 };
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 92c3e43..32599f3
100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -1821,6 +1821,16 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb,
 	if (rtnl_fill_prop_list(skb, dev))
 		goto nla_put_failure;

+	if (dev->dev.parent &&
+	    nla_put_string(skb, IFLA_PARENT_DEV_NAME,
+			   dev_name(dev->dev.parent)))
+		goto nla_put_failure;
+
+	if (dev->dev.parent && dev->dev.parent->bus &&
+	    nla_put_string(skb, IFLA_PARENT_DEV_BUS_NAME,
+			   dev->dev.parent->bus->name))
+		goto nla_put_failure;
+
 	nlmsg_end(skb, nlh);
 	return 0;
@@ -1880,6 +1890,8 @@ static const struct nla_policy
ifla_policy[IFLA_MAX+1] = {
 	[IFLA_PERM_ADDRESS]	= { .type = NLA_REJECT },
 	[IFLA_PROTO_DOWN_REASON] = { .type = NLA_NESTED },
 	[IFLA_NEW_IFINDEX]	= NLA_POLICY_MIN(NLA_S32, 1),
+	[IFLA_PARENT_DEV_NAME]	= { .type = NLA_NUL_STRING },
+	[IFLA_PARENT_DEV_BUS_NAME] = { .type = NLA_NUL_STRING },
 };
This hunk should go in the patch that enables users to use these fields to specify it for new link creation.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help