14 #include <linux/kernel.h>
15 #include <linux/netdevice.h>
18 #include <linux/ethtool.h>
19 #include <linux/list.h>
20 #include <linux/netfilter_bridge.h>
22 #include <asm/uaccess.h>
29 const unsigned char *
dest = skb->
data;
35 #ifdef CONFIG_BRIDGE_NETFILTER
36 if (skb->nf_bridge && (skb->nf_bridge->mask & BRNF_BRIDGED_DNAT)) {
37 br_nf_pre_routing_finish_bridge_slow(skb);
43 u64_stats_update_begin(&brstats->
syncp);
46 u64_stats_update_end(&brstats->
syncp);
50 skb_reset_mac_header(skb);
53 if (is_broadcast_ether_addr(dest))
55 else if (is_multicast_ether_addr(dest)) {
56 if (
unlikely(netpoll_tx_running(dev))) {
67 br_multicast_deliver(mdst, skb);
96 netif_start_queue(dev);
103 static void br_dev_set_multicast_list(
struct net_device *dev)
107 static int br_dev_stop(
struct net_device *dev)
114 netif_stop_queue(dev);
131 start = u64_stats_fetch_begin_bh(&bstats->
syncp);
133 }
while (u64_stats_fetch_retry_bh(&bstats->
syncp, start));
148 static int br_change_mtu(
struct net_device *dev,
int new_mtu)
156 #ifdef CONFIG_BRIDGE_NETFILTER
158 dst_metric_set(&br->fake_rtable.dst,
RTAX_MTU, new_mtu);
165 static int br_set_mac_address(
struct net_device *dev,
void *
p)
170 if (!is_valid_ether_addr(addr->
sa_data))
173 spin_lock_bh(&br->
lock);
181 spin_unlock_bh(&br->
lock);
202 #ifdef CONFIG_NET_POLL_CONTROLLER
203 static void br_poll_controller(
struct net_device *br_dev)
207 static void br_netpoll_cleanup(
struct net_device *dev)
213 br_netpoll_disable(p);
226 err = br_netpoll_enable(p, gfp);
235 br_netpoll_cleanup(dev);
244 np = kzalloc(
sizeof(*p->np), gfp);
291 .get_drvinfo = br_getinfo,
296 .ndo_open = br_dev_open,
297 .ndo_stop = br_dev_stop,
298 .ndo_init = br_dev_init,
300 .ndo_get_stats64 = br_get_stats64,
301 .ndo_set_mac_address = br_set_mac_address,
302 .ndo_set_rx_mode = br_dev_set_multicast_list,
303 .ndo_change_mtu = br_change_mtu,
305 #ifdef CONFIG_NET_POLL_CONTROLLER
306 .ndo_netpoll_setup = br_netpoll_setup,
307 .ndo_netpoll_cleanup = br_netpoll_cleanup,
308 .ndo_poll_controller = br_poll_controller,
310 .ndo_add_slave = br_add_slave,
311 .ndo_del_slave = br_del_slave,
312 .ndo_fix_features = br_fix_features,
318 static void br_dev_free(
struct net_device *dev)
334 eth_hw_addr_random(dev);