diff options
Diffstat (limited to 'include/linux/netdevice.h')
-rw-r--r-- | include/linux/netdevice.h | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 3de49aca4519..514045c704a8 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -1143,8 +1143,18 @@ struct net_device { | |||
1143 | struct list_head dev_list; | 1143 | struct list_head dev_list; |
1144 | struct list_head napi_list; | 1144 | struct list_head napi_list; |
1145 | struct list_head unreg_list; | 1145 | struct list_head unreg_list; |
1146 | struct list_head upper_dev_list; /* List of upper devices */ | 1146 | |
1147 | struct list_head lower_dev_list; | 1147 | /* directly linked devices, like slaves for bonding */ |
1148 | struct { | ||
1149 | struct list_head upper; | ||
1150 | struct list_head lower; | ||
1151 | } adj_list; | ||
1152 | |||
1153 | /* all linked devices, *including* neighbours */ | ||
1154 | struct { | ||
1155 | struct list_head upper; | ||
1156 | struct list_head lower; | ||
1157 | } all_adj_list; | ||
1148 | 1158 | ||
1149 | 1159 | ||
1150 | /* currently active device features */ | 1160 | /* currently active device features */ |
@@ -2813,15 +2823,15 @@ extern int bpf_jit_enable; | |||
2813 | extern bool netdev_has_upper_dev(struct net_device *dev, | 2823 | extern bool netdev_has_upper_dev(struct net_device *dev, |
2814 | struct net_device *upper_dev); | 2824 | struct net_device *upper_dev); |
2815 | extern bool netdev_has_any_upper_dev(struct net_device *dev); | 2825 | extern bool netdev_has_any_upper_dev(struct net_device *dev); |
2816 | extern struct net_device *netdev_upper_get_next_dev_rcu(struct net_device *dev, | 2826 | extern struct net_device *netdev_all_upper_get_next_dev_rcu(struct net_device *dev, |
2817 | struct list_head **iter); | 2827 | struct list_head **iter); |
2818 | 2828 | ||
2819 | /* iterate through upper list, must be called under RCU read lock */ | 2829 | /* iterate through upper list, must be called under RCU read lock */ |
2820 | #define netdev_for_each_upper_dev_rcu(dev, upper, iter) \ | 2830 | #define netdev_for_each_all_upper_dev_rcu(dev, updev, iter) \ |
2821 | for (iter = &(dev)->upper_dev_list, \ | 2831 | for (iter = &(dev)->all_adj_list.upper, \ |
2822 | upper = netdev_upper_get_next_dev_rcu(dev, &(iter)); \ | 2832 | updev = netdev_all_upper_get_next_dev_rcu(dev, &(iter)); \ |
2823 | upper; \ | 2833 | updev; \ |
2824 | upper = netdev_upper_get_next_dev_rcu(dev, &(iter))) | 2834 | updev = netdev_all_upper_get_next_dev_rcu(dev, &(iter))) |
2825 | 2835 | ||
2826 | extern struct net_device *netdev_master_upper_dev_get(struct net_device *dev); | 2836 | extern struct net_device *netdev_master_upper_dev_get(struct net_device *dev); |
2827 | extern struct net_device *netdev_master_upper_dev_get_rcu(struct net_device *dev); | 2837 | extern struct net_device *netdev_master_upper_dev_get_rcu(struct net_device *dev); |