rtnetlink: add IFLA_PARENT_[DEV|DEV_BUS]_NAME
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_bus pci parent_dev 0000:00:14.3
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 <loic.poulain@linaro.org>
Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
Suggested-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
8c713dc93c
commit
00e77ed8e6
@@ -341,6 +341,13 @@ enum {
|
|||||||
IFLA_ALT_IFNAME, /* Alternative ifname */
|
IFLA_ALT_IFNAME, /* Alternative ifname */
|
||||||
IFLA_PERM_ADDRESS,
|
IFLA_PERM_ADDRESS,
|
||||||
IFLA_PROTO_DOWN_REASON,
|
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
|
__IFLA_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1821,6 +1821,16 @@ static int rtnl_fill_ifinfo(struct sk_buff *skb,
|
|||||||
if (rtnl_fill_prop_list(skb, dev))
|
if (rtnl_fill_prop_list(skb, dev))
|
||||||
goto nla_put_failure;
|
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);
|
nlmsg_end(skb, nlh);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user