aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/core/dev.c')
-rw-r--r--net/core/dev.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index bfa4be42afff..8c6d5cf8a308 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -7878,6 +7878,63 @@ int dev_get_phys_port_name(struct net_device *dev,
7878EXPORT_SYMBOL(dev_get_phys_port_name); 7878EXPORT_SYMBOL(dev_get_phys_port_name);
7879 7879
7880/** 7880/**
7881 * dev_get_port_parent_id - Get the device's port parent identifier
7882 * @dev: network device
7883 * @ppid: pointer to a storage for the port's parent identifier
7884 * @recurse: allow/disallow recursion to lower devices
7885 *
7886 * Get the devices's port parent identifier
7887 */
7888int dev_get_port_parent_id(struct net_device *dev,
7889 struct netdev_phys_item_id *ppid,
7890 bool recurse)
7891{
7892 const struct net_device_ops *ops = dev->netdev_ops;
7893 struct netdev_phys_item_id first = { };
7894 struct net_device *lower_dev;
7895 struct list_head *iter;
7896 int err = -EOPNOTSUPP;
7897
7898 if (ops->ndo_get_port_parent_id)
7899 return ops->ndo_get_port_parent_id(dev, ppid);
7900
7901 if (!recurse)
7902 return err;
7903
7904 netdev_for_each_lower_dev(dev, lower_dev, iter) {
7905 err = dev_get_port_parent_id(lower_dev, ppid, recurse);
7906 if (err)
7907 break;
7908 if (!first.id_len)
7909 first = *ppid;
7910 else if (memcmp(&first, ppid, sizeof(*ppid)))
7911 return -ENODATA;
7912 }
7913
7914 return err;
7915}
7916EXPORT_SYMBOL(dev_get_port_parent_id);
7917
7918/**
7919 * netdev_port_same_parent_id - Indicate if two network devices have
7920 * the same port parent identifier
7921 * @a: first network device
7922 * @b: second network device
7923 */
7924bool netdev_port_same_parent_id(struct net_device *a, struct net_device *b)
7925{
7926 struct netdev_phys_item_id a_id = { };
7927 struct netdev_phys_item_id b_id = { };
7928
7929 if (dev_get_port_parent_id(a, &a_id, true) ||
7930 dev_get_port_parent_id(b, &b_id, true))
7931 return false;
7932
7933 return netdev_phys_item_id_same(&a_id, &b_id);
7934}
7935EXPORT_SYMBOL(netdev_port_same_parent_id);
7936
7937/**
7881 * dev_change_proto_down - update protocol port state information 7938 * dev_change_proto_down - update protocol port state information
7882 * @dev: device 7939 * @dev: device
7883 * @proto_down: new value 7940 * @proto_down: new value