extern int (*br_handle_frame_hook)(struct net_bridge_port *p, struct sk_buff **pskb);
extern int (*br_should_route_hook)(struct sk_buff **pskb);
+extern struct net_device *br_locate_physical_device(struct net_device *dev);
+
#endif
#endif
#include <linux/kernel.h>
#include <linux/netdevice.h>
+#include <linux/etherdevice.h>
#include <linux/ethtool.h>
#include <linux/if_arp.h>
#include <linux/module.h>
return p;
}
+struct net_device *br_locate_physical_device(struct net_device *dev)
+{
+ struct net_bridge *br;
+ const struct net_bridge_port *p;
+
+ if (!(dev->priv_flags & IFF_EBRIDGE))
+ return dev;
+
+ br = netdev_priv(dev);
+
+ list_for_each_entry(p, &br->port_list, list) {
+ if (!compare_ether_addr(dev->dev_addr, p->dev->dev_addr))
+ return p->dev;
+ }
+ return dev;
+}
+EXPORT_SYMBOL(br_locate_physical_device);
+
int br_add_bridge(const char *name)
{
struct net_device *dev;