mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-10 07:10:27 +00:00
vlan: introduce __vlan_find_dev_deep()
Since vlan_group_get_device and vlan_group is not going to be accessible from device drivers, introduce function which substitutes it. Signed-off-by: Jiri Pirko <jpirko@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f605234066
commit
cec9c13363
@ -120,6 +120,8 @@ static inline int is_vlan_dev(struct net_device *dev)
|
|||||||
|
|
||||||
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
|
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
|
||||||
|
|
||||||
|
extern struct net_device *__vlan_find_dev_deep(struct net_device *real_dev,
|
||||||
|
u16 vlan_id);
|
||||||
extern struct net_device *vlan_dev_real_dev(const struct net_device *dev);
|
extern struct net_device *vlan_dev_real_dev(const struct net_device *dev);
|
||||||
extern u16 vlan_dev_vlan_id(const struct net_device *dev);
|
extern u16 vlan_dev_vlan_id(const struct net_device *dev);
|
||||||
|
|
||||||
@ -135,6 +137,12 @@ vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp,
|
|||||||
unsigned int vlan_tci);
|
unsigned int vlan_tci);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
static inline struct net_device *
|
||||||
|
__vlan_find_dev_deep(struct net_device *real_dev, u16 vlan_id)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev)
|
static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev)
|
||||||
{
|
{
|
||||||
BUG();
|
BUG();
|
||||||
|
@ -63,6 +63,27 @@ bool vlan_do_receive(struct sk_buff **skbp)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Must be invoked with rcu_read_lock or with RTNL. */
|
||||||
|
struct net_device *__vlan_find_dev_deep(struct net_device *real_dev,
|
||||||
|
u16 vlan_id)
|
||||||
|
{
|
||||||
|
struct vlan_group *grp = rcu_dereference_rtnl(real_dev->vlgrp);
|
||||||
|
|
||||||
|
if (grp) {
|
||||||
|
return vlan_group_get_device(grp, vlan_id);
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Bonding slaves do not have grp assigned to themselves.
|
||||||
|
* Grp is assigned to bonding master instead.
|
||||||
|
*/
|
||||||
|
if (netif_is_bond_slave(real_dev))
|
||||||
|
return __vlan_find_dev_deep(real_dev->master, vlan_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(__vlan_find_dev_deep);
|
||||||
|
|
||||||
struct net_device *vlan_dev_real_dev(const struct net_device *dev)
|
struct net_device *vlan_dev_real_dev(const struct net_device *dev)
|
||||||
{
|
{
|
||||||
return vlan_dev_info(dev)->real_dev;
|
return vlan_dev_info(dev)->real_dev;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user