blob: c9d7e91717d0bd60206bb270f56d43fe10552f4f [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001// 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 */
9
10#include <linux/kernel.h>
11#include <linux/netdevice.h>
12#include <linux/netpoll.h>
13#include <linux/etherdevice.h>
14#include <linux/ethtool.h>
15#include <linux/list.h>
16#include <linux/netfilter_bridge.h>
17#if IS_ENABLED(CONFIG_NF_FLOW_TABLE)
18#include <linux/netfilter.h>
19#include <net/netfilter/nf_flow_table.h>
20#endif
21
22#include <linux/uaccess.h>
23#include "br_private.h"
24
25#define COMMON_FEATURES (NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA | \
26 NETIF_F_GSO_MASK | NETIF_F_HW_CSUM)
27
28const struct nf_br_ops __rcu *nf_br_ops __read_mostly;
29EXPORT_SYMBOL_GPL(nf_br_ops);
30
31/* net device transmit always called with BH disabled */
32netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
33{
34 struct net_bridge *br = netdev_priv(dev);
35 struct net_bridge_fdb_entry *dst;
36 struct net_bridge_mdb_entry *mdst;
37 struct pcpu_sw_netstats *brstats = this_cpu_ptr(br->stats);
38 const struct nf_br_ops *nf_ops;
39 const unsigned char *dest;
40 u16 vid = 0;
41
42 if (unlikely(!pskb_may_pull(skb, ETH_HLEN))) {
43 kfree_skb(skb);
44 return NETDEV_TX_OK;
45 }
46
47 memset(skb->cb, 0, sizeof(struct br_input_skb_cb));
48
49 rcu_read_lock();
50 nf_ops = rcu_dereference(nf_br_ops);
51 if (nf_ops && nf_ops->br_dev_xmit_hook(skb)) {
52 rcu_read_unlock();
53 return NETDEV_TX_OK;
54 }
55
56 u64_stats_update_begin(&brstats->syncp);
57 brstats->tx_packets++;
58 brstats->tx_bytes += skb->len;
59 u64_stats_update_end(&brstats->syncp);
60
61 br_switchdev_frame_unmark(skb);
62 BR_INPUT_SKB_CB(skb)->brdev = dev;
63 BR_INPUT_SKB_CB(skb)->frag_max_size = 0;
64
65 skb_reset_mac_header(skb);
66 skb_pull(skb, ETH_HLEN);
67
68 if (!br_allowed_ingress(br, br_vlan_group_rcu(br), skb, &vid))
69 goto out;
70
71 if (IS_ENABLED(CONFIG_INET) &&
72 (eth_hdr(skb)->h_proto == htons(ETH_P_ARP) ||
73 eth_hdr(skb)->h_proto == htons(ETH_P_RARP)) &&
74 br_opt_get(br, BROPT_NEIGH_SUPPRESS_ENABLED)) {
75 br_do_proxy_suppress_arp(skb, br, vid, NULL);
76 } else if (IS_ENABLED(CONFIG_IPV6) &&
77 skb->protocol == htons(ETH_P_IPV6) &&
78 br_opt_get(br, BROPT_NEIGH_SUPPRESS_ENABLED) &&
79 pskb_may_pull(skb, sizeof(struct ipv6hdr) +
80 sizeof(struct nd_msg)) &&
81 ipv6_hdr(skb)->nexthdr == IPPROTO_ICMPV6) {
82 struct nd_msg *msg, _msg;
83
84 msg = br_is_nd_neigh_msg(skb, &_msg);
85 if (msg)
86 br_do_suppress_nd(skb, br, vid, NULL, msg);
87 }
88
89 dest = eth_hdr(skb)->h_dest;
90 if (is_broadcast_ether_addr(dest)) {
91 br_flood(br, skb, BR_PKT_BROADCAST, false, true);
92 } else if (is_multicast_ether_addr(dest)) {
93 if (unlikely(netpoll_tx_running(dev))) {
94 br_flood(br, skb, BR_PKT_MULTICAST, false, true);
95 goto out;
96 }
97 if (br_multicast_rcv(br, NULL, skb, vid)) {
98 kfree_skb(skb);
99 goto out;
100 }
101
102 mdst = br_mdb_get(br, skb, vid);
103 if ((mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) &&
104 br_multicast_querier_exists(br, eth_hdr(skb)))
105 br_multicast_flood(mdst, skb, false, true);
106 else
107 br_flood(br, skb, BR_PKT_MULTICAST, false, true);
108 } else if ((dst = br_fdb_find_rcu(br, dest, vid)) != NULL) {
109 br_forward(dst->dst, skb, false, true);
110 } else {
111 br_flood(br, skb, BR_PKT_UNICAST, false, true);
112 }
113out:
114 rcu_read_unlock();
115 return NETDEV_TX_OK;
116}
117
118static int br_dev_init(struct net_device *dev)
119{
120 struct net_bridge *br = netdev_priv(dev);
121 int err;
122
123 br->stats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
124 if (!br->stats)
125 return -ENOMEM;
126
127 err = br_fdb_hash_init(br);
128 if (err) {
129 free_percpu(br->stats);
130 return err;
131 }
132
133 err = br_mdb_hash_init(br);
134 if (err) {
135 free_percpu(br->stats);
136 br_fdb_hash_fini(br);
137 return err;
138 }
139
140 err = br_vlan_init(br);
141 if (err) {
142 free_percpu(br->stats);
143 br_mdb_hash_fini(br);
144 br_fdb_hash_fini(br);
145 return err;
146 }
147
148 err = br_multicast_init_stats(br);
149 if (err) {
150 free_percpu(br->stats);
151 br_vlan_flush(br);
152 br_mdb_hash_fini(br);
153 br_fdb_hash_fini(br);
154 }
155
156 return err;
157}
158
159static void br_dev_uninit(struct net_device *dev)
160{
161 struct net_bridge *br = netdev_priv(dev);
162
163 br_multicast_dev_del(br);
164 br_multicast_uninit_stats(br);
165 br_vlan_flush(br);
166 br_mdb_hash_fini(br);
167 br_fdb_hash_fini(br);
168 free_percpu(br->stats);
169}
170
171static int br_dev_open(struct net_device *dev)
172{
173 struct net_bridge *br = netdev_priv(dev);
174
175 netdev_update_features(dev);
176 netif_start_queue(dev);
177 br_stp_enable_bridge(br);
178 br_multicast_open(br);
179
180 if (br_opt_get(br, BROPT_MULTICAST_ENABLED))
181 br_multicast_join_snoopers(br);
182
183 return 0;
184}
185
186static void br_dev_set_multicast_list(struct net_device *dev)
187{
188}
189
190static void br_dev_change_rx_flags(struct net_device *dev, int change)
191{
192 if (change & IFF_PROMISC)
193 br_manage_promisc(netdev_priv(dev));
194}
195
196static int br_dev_stop(struct net_device *dev)
197{
198 struct net_bridge *br = netdev_priv(dev);
199
200 br_stp_disable_bridge(br);
201 br_multicast_stop(br);
202
203 if (br_opt_get(br, BROPT_MULTICAST_ENABLED))
204 br_multicast_leave_snoopers(br);
205
206 netif_stop_queue(dev);
207
208 return 0;
209}
210
211static void br_get_stats64(struct net_device *dev,
212 struct rtnl_link_stats64 *stats)
213{
214 struct net_bridge *br = netdev_priv(dev);
215 struct pcpu_sw_netstats tmp, sum = { 0 };
216 unsigned int cpu;
217
218 for_each_possible_cpu(cpu) {
219 unsigned int start;
220 const struct pcpu_sw_netstats *bstats
221 = per_cpu_ptr(br->stats, cpu);
222 do {
223 start = u64_stats_fetch_begin_irq(&bstats->syncp);
224 memcpy(&tmp, bstats, sizeof(tmp));
225 } while (u64_stats_fetch_retry_irq(&bstats->syncp, start));
226 sum.tx_bytes += tmp.tx_bytes;
227 sum.tx_packets += tmp.tx_packets;
228 sum.rx_bytes += tmp.rx_bytes;
229 sum.rx_packets += tmp.rx_packets;
230 }
231
232 netdev_stats_to_stats64(stats, &dev->stats);
233 stats->tx_bytes = sum.tx_bytes;
234 stats->tx_packets = sum.tx_packets;
235 stats->rx_bytes = sum.rx_bytes;
236 stats->rx_packets = sum.rx_packets;
237}
238
239static int br_change_mtu(struct net_device *dev, int new_mtu)
240{
241 struct net_bridge *br = netdev_priv(dev);
242
243 dev->mtu = new_mtu;
244
245 /* this flag will be cleared if the MTU was automatically adjusted */
246 br_opt_toggle(br, BROPT_MTU_SET_BY_USER, true);
247#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
248 /* remember the MTU in the rtable for PMTU */
249 dst_metric_set(&br->fake_rtable.dst, RTAX_MTU, new_mtu);
250#endif
251
252 return 0;
253}
254
255/* Allow setting mac address to any valid ethernet address. */
256static int br_set_mac_address(struct net_device *dev, void *p)
257{
258 struct net_bridge *br = netdev_priv(dev);
259 struct sockaddr *addr = p;
260
261 if (!is_valid_ether_addr(addr->sa_data))
262 return -EADDRNOTAVAIL;
263
264 /* dev_set_mac_addr() can be called by a master device on bridge's
265 * NETDEV_UNREGISTER, but since it's being destroyed do nothing
266 */
267 if (dev->reg_state != NETREG_REGISTERED)
268 return -EBUSY;
269
270 spin_lock_bh(&br->lock);
271 if (!ether_addr_equal(dev->dev_addr, addr->sa_data)) {
272 /* Mac address will be changed in br_stp_change_bridge_id(). */
273 br_stp_change_bridge_id(br, addr->sa_data);
274 }
275 spin_unlock_bh(&br->lock);
276
277 return 0;
278}
279
280static void br_getinfo(struct net_device *dev, struct ethtool_drvinfo *info)
281{
282 strlcpy(info->driver, "bridge", sizeof(info->driver));
283 strlcpy(info->version, BR_VERSION, sizeof(info->version));
284 strlcpy(info->fw_version, "N/A", sizeof(info->fw_version));
285 strlcpy(info->bus_info, "N/A", sizeof(info->bus_info));
286}
287
288static netdev_features_t br_fix_features(struct net_device *dev,
289 netdev_features_t features)
290{
291 struct net_bridge *br = netdev_priv(dev);
292
293 return br_features_recompute(br, features);
294}
295
296#ifdef CONFIG_NET_POLL_CONTROLLER
297static void br_poll_controller(struct net_device *br_dev)
298{
299}
300
301static void br_netpoll_cleanup(struct net_device *dev)
302{
303 struct net_bridge *br = netdev_priv(dev);
304 struct net_bridge_port *p;
305
306 list_for_each_entry(p, &br->port_list, list)
307 br_netpoll_disable(p);
308}
309
310static int __br_netpoll_enable(struct net_bridge_port *p)
311{
312 struct netpoll *np;
313 int err;
314
315 np = kzalloc(sizeof(*p->np), GFP_KERNEL);
316 if (!np)
317 return -ENOMEM;
318
319 err = __netpoll_setup(np, p->dev);
320 if (err) {
321 kfree(np);
322 return err;
323 }
324
325 p->np = np;
326 return err;
327}
328
329int br_netpoll_enable(struct net_bridge_port *p)
330{
331 if (!p->br->dev->npinfo)
332 return 0;
333
334 return __br_netpoll_enable(p);
335}
336
337static int br_netpoll_setup(struct net_device *dev, struct netpoll_info *ni)
338{
339 struct net_bridge *br = netdev_priv(dev);
340 struct net_bridge_port *p;
341 int err = 0;
342
343 list_for_each_entry(p, &br->port_list, list) {
344 if (!p->dev)
345 continue;
346 err = __br_netpoll_enable(p);
347 if (err)
348 goto fail;
349 }
350
351out:
352 return err;
353
354fail:
355 br_netpoll_cleanup(dev);
356 goto out;
357}
358
359void br_netpoll_disable(struct net_bridge_port *p)
360{
361 struct netpoll *np = p->np;
362
363 if (!np)
364 return;
365
366 p->np = NULL;
367
368 __netpoll_free(np);
369}
370
371#endif
372
373static int br_add_slave(struct net_device *dev, struct net_device *slave_dev,
374 struct netlink_ext_ack *extack)
375
376{
377 struct net_bridge *br = netdev_priv(dev);
378
379 return br_add_if(br, slave_dev, extack);
380}
381
382static int br_del_slave(struct net_device *dev, struct net_device *slave_dev)
383{
384 struct net_bridge *br = netdev_priv(dev);
385
386 return br_del_if(br, slave_dev);
387}
388
389static const struct ethtool_ops br_ethtool_ops = {
390 .get_drvinfo = br_getinfo,
391 .get_link = ethtool_op_get_link,
392};
393
394#if IS_ENABLED(CONFIG_NF_FLOW_TABLE)
395static int br_flow_offload_check(struct flow_offload_hw_path *path)
396{
397 struct net_device *dev = path->dev;
398 struct net_bridge *br = netdev_priv(dev);
399 struct net_bridge_fdb_entry *dst;
400
401 if (!(path->flags & FLOW_OFFLOAD_PATH_ETHERNET))
402 return -EINVAL;
403
404 dst = br_fdb_find_rcu(br, path->eth_dest, path->vlan_id);
405 if (!dst || !dst->dst)
406 return -ENOENT;
407
408 path->dev = dst->dst->dev;
409 if (path->dev->netdev_ops->ndo_flow_offload_check)
410 return path->dev->netdev_ops->ndo_flow_offload_check(path);
411
412 return 0;
413}
414#endif /* CONFIG_NF_FLOW_TABLE */
415
416static const struct net_device_ops br_netdev_ops = {
417 .ndo_open = br_dev_open,
418 .ndo_stop = br_dev_stop,
419 .ndo_init = br_dev_init,
420 .ndo_uninit = br_dev_uninit,
421 .ndo_start_xmit = br_dev_xmit,
422 .ndo_get_stats64 = br_get_stats64,
423 .ndo_set_mac_address = br_set_mac_address,
424 .ndo_set_rx_mode = br_dev_set_multicast_list,
425 .ndo_change_rx_flags = br_dev_change_rx_flags,
426 .ndo_change_mtu = br_change_mtu,
427 .ndo_do_ioctl = br_dev_ioctl,
428#ifdef CONFIG_NET_POLL_CONTROLLER
429 .ndo_netpoll_setup = br_netpoll_setup,
430 .ndo_netpoll_cleanup = br_netpoll_cleanup,
431 .ndo_poll_controller = br_poll_controller,
432#endif
433 .ndo_add_slave = br_add_slave,
434 .ndo_del_slave = br_del_slave,
435 .ndo_fix_features = br_fix_features,
436 .ndo_fdb_add = br_fdb_add,
437 .ndo_fdb_del = br_fdb_delete,
438 .ndo_fdb_dump = br_fdb_dump,
439 .ndo_fdb_get = br_fdb_get,
440 .ndo_bridge_getlink = br_getlink,
441 .ndo_bridge_setlink = br_setlink,
442 .ndo_bridge_dellink = br_dellink,
443 .ndo_features_check = passthru_features_check,
444#if IS_ENABLED(CONFIG_NF_FLOW_TABLE)
445 .ndo_flow_offload_check = br_flow_offload_check,
446#endif
447};
448
449static struct device_type br_type = {
450 .name = "bridge",
451};
452
453void br_dev_setup(struct net_device *dev)
454{
455 struct net_bridge *br = netdev_priv(dev);
456
457 eth_hw_addr_random(dev);
458 ether_setup(dev);
459
460 dev->netdev_ops = &br_netdev_ops;
461 dev->needs_free_netdev = true;
462 dev->ethtool_ops = &br_ethtool_ops;
463 SET_NETDEV_DEVTYPE(dev, &br_type);
464 dev->priv_flags = IFF_EBRIDGE | IFF_NO_QUEUE;
465
466 dev->features = COMMON_FEATURES | NETIF_F_LLTX | NETIF_F_NETNS_LOCAL |
467 NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX;
468 dev->hw_features = COMMON_FEATURES | NETIF_F_HW_VLAN_CTAG_TX |
469 NETIF_F_HW_VLAN_STAG_TX;
470 dev->vlan_features = COMMON_FEATURES;
471
472 br->dev = dev;
473 spin_lock_init(&br->lock);
474 INIT_LIST_HEAD(&br->port_list);
475 INIT_HLIST_HEAD(&br->fdb_list);
476 spin_lock_init(&br->hash_lock);
477
478 br->bridge_id.prio[0] = 0x80;
479 br->bridge_id.prio[1] = 0x00;
480
481 ether_addr_copy(br->group_addr, eth_stp_addr);
482
483 br->stp_enabled = BR_NO_STP;
484 br->group_fwd_mask = BR_GROUPFWD_DEFAULT;
485 br->group_fwd_mask_required = BR_GROUPFWD_DEFAULT;
486
487 br->designated_root = br->bridge_id;
488 br->bridge_max_age = br->max_age = 20 * HZ;
489 br->bridge_hello_time = br->hello_time = 2 * HZ;
490 br->bridge_forward_delay = br->forward_delay = 15 * HZ;
491 br->bridge_ageing_time = br->ageing_time = BR_DEFAULT_AGEING_TIME;
492 br->offload_cache_size = 128;
493 br->offload_cache_reserved = 8;
494 dev->max_mtu = ETH_MAX_MTU;
495
496 br_netfilter_rtable_init(br);
497 br_stp_timer_init(br);
498 br_multicast_init(br);
499 INIT_DELAYED_WORK(&br->gc_work, br_fdb_cleanup);
500}