mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-06 03:45:24 -04:00
bridge: Add bridge API to access the bridge slave port
This API is needed by the NSS connection manager modules to enable NSS fast path for bridge flows. The connection manager needs to inspect the netdevice of the bridge slave port that has learned a given MAC address. Currently no such API exists that is exported out of the kernel network stack for this purpose. Change-Id: I3f8848739d820346135b09b93f760122874468fd Signed-off-by: Ravinder konka <rkonka@codeaurora.org> Signed-off-by: Mohammed Javid <mjavid@codeaurora.org>
This commit is contained in:
parent
4fc723f7af
commit
e092c033d3
2 changed files with 38 additions and 0 deletions
|
|
@ -52,6 +52,11 @@ struct br_ip_list {
|
|||
|
||||
extern void brioctl_set(int (*ioctl_hook)(struct net *, unsigned int, void __user *));
|
||||
|
||||
#ifdef CONFIG_ENABLE_SFE
|
||||
extern struct net_device *br_port_dev_get(struct net_device *dev,
|
||||
unsigned char *addr);
|
||||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_BRIDGE) && IS_ENABLED(CONFIG_BRIDGE_IGMP_SNOOPING)
|
||||
int br_multicast_list_adjacent(struct net_device *dev,
|
||||
struct list_head *br_ip_list);
|
||||
|
|
|
|||
|
|
@ -757,3 +757,36 @@ bool br_port_flag_is_set(const struct net_device *dev, unsigned long flag)
|
|||
return p->flags & flag;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(br_port_flag_is_set);
|
||||
|
||||
#ifdef CONFIG_ENABLE_SFE
|
||||
/* br_port_dev_get()
|
||||
* Using the given addr, identify the port to which it is reachable,
|
||||
* returing a reference to the net device associated with that port.
|
||||
*
|
||||
* NOTE: Return NULL if given dev is not a bridge or
|
||||
* the mac has no associated port
|
||||
*/
|
||||
struct net_device *br_port_dev_get(struct net_device *dev, unsigned char *addr)
|
||||
{
|
||||
struct net_bridge_fdb_entry *fdbe;
|
||||
struct net_bridge *br;
|
||||
struct net_device *netdev = NULL;
|
||||
|
||||
/* Is this a bridge? */
|
||||
if (!(dev->priv_flags & IFF_EBRIDGE))
|
||||
return NULL;
|
||||
|
||||
br = netdev_priv(dev);
|
||||
|
||||
/* Lookup the fdb entry and get reference to the port dev */
|
||||
rcu_read_lock();
|
||||
fdbe = br_fdb_find_rcu(br, addr, 0);
|
||||
if (fdbe && fdbe->dst) {
|
||||
netdev = fdbe->dst->dev; /* port device */
|
||||
dev_hold(netdev);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
return netdev;
|
||||
}
|
||||
EXPORT_SYMBOL(br_port_dev_get);
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in a new issue