br_device.c (0898782247ae533d1f4e47a06bc5d4870931b284) | br_device.c (ab92d68fc22f9afab480153bd82a20f6e2533769) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Device handling code 4 * Linux ethernet bridge 5 * 6 * Authors: 7 * Lennert Buytenhek <buytenh@gnu.org> 8 */ --- 10 unchanged lines hidden (view full) --- 19#include "br_private.h" 20 21#define COMMON_FEATURES (NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA | \ 22 NETIF_F_GSO_MASK | NETIF_F_HW_CSUM) 23 24const struct nf_br_ops __rcu *nf_br_ops __read_mostly; 25EXPORT_SYMBOL_GPL(nf_br_ops); 26 | 1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Device handling code 4 * Linux ethernet bridge 5 * 6 * Authors: 7 * Lennert Buytenhek <buytenh@gnu.org> 8 */ --- 10 unchanged lines hidden (view full) --- 19#include "br_private.h" 20 21#define COMMON_FEATURES (NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA | \ 22 NETIF_F_GSO_MASK | NETIF_F_HW_CSUM) 23 24const struct nf_br_ops __rcu *nf_br_ops __read_mostly; 25EXPORT_SYMBOL_GPL(nf_br_ops); 26 |
27static struct lock_class_key bridge_netdev_addr_lock_key; 28 | |
29/* net device transmit always called with BH disabled */ 30netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev) 31{ 32 struct net_bridge *br = netdev_priv(dev); 33 struct net_bridge_fdb_entry *dst; 34 struct net_bridge_mdb_entry *mdst; 35 struct pcpu_sw_netstats *brstats = this_cpu_ptr(br->stats); 36 const struct nf_br_ops *nf_ops; --- 66 unchanged lines hidden (view full) --- 103 } else { 104 br_flood(br, skb, BR_PKT_UNICAST, false, true); 105 } 106out: 107 rcu_read_unlock(); 108 return NETDEV_TX_OK; 109} 110 | 27/* net device transmit always called with BH disabled */ 28netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev) 29{ 30 struct net_bridge *br = netdev_priv(dev); 31 struct net_bridge_fdb_entry *dst; 32 struct net_bridge_mdb_entry *mdst; 33 struct pcpu_sw_netstats *brstats = this_cpu_ptr(br->stats); 34 const struct nf_br_ops *nf_ops; --- 66 unchanged lines hidden (view full) --- 101 } else { 102 br_flood(br, skb, BR_PKT_UNICAST, false, true); 103 } 104out: 105 rcu_read_unlock(); 106 return NETDEV_TX_OK; 107} 108 |
111static void br_set_lockdep_class(struct net_device *dev) 112{ 113 lockdep_set_class(&dev->addr_list_lock, &bridge_netdev_addr_lock_key); 114} 115 | |
116static int br_dev_init(struct net_device *dev) 117{ 118 struct net_bridge *br = netdev_priv(dev); 119 int err; 120 121 br->stats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats); 122 if (!br->stats) 123 return -ENOMEM; --- 21 unchanged lines hidden (view full) --- 145 146 err = br_multicast_init_stats(br); 147 if (err) { 148 free_percpu(br->stats); 149 br_vlan_flush(br); 150 br_mdb_hash_fini(br); 151 br_fdb_hash_fini(br); 152 } | 109static int br_dev_init(struct net_device *dev) 110{ 111 struct net_bridge *br = netdev_priv(dev); 112 int err; 113 114 br->stats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats); 115 if (!br->stats) 116 return -ENOMEM; --- 21 unchanged lines hidden (view full) --- 138 139 err = br_multicast_init_stats(br); 140 if (err) { 141 free_percpu(br->stats); 142 br_vlan_flush(br); 143 br_mdb_hash_fini(br); 144 br_fdb_hash_fini(br); 145 } |
153 br_set_lockdep_class(dev); | |
154 155 return err; 156} 157 158static void br_dev_uninit(struct net_device *dev) 159{ 160 struct net_bridge *br = netdev_priv(dev); 161 --- 298 unchanged lines hidden --- | 146 147 return err; 148} 149 150static void br_dev_uninit(struct net_device *dev) 151{ 152 struct net_bridge *br = netdev_priv(dev); 153 --- 298 unchanged lines hidden --- |