1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * Linux ethernet bridge
7 * Lennert Buytenhek <buytenh@gnu.org>
10 #include <linux/module.h>
11 #include <linux/kernel.h>
12 #include <linux/netdevice.h>
13 #include <linux/etherdevice.h>
14 #include <linux/init.h>
15 #include <linux/llc.h>
18 #include <net/switchdev.h>
20 #include "br_private.h"
23 * Handle changes in state of network devices enslaved to a bridge.
25 * Note: don't care about up/down if bridge itself is down, because
26 * port state is checked when bridge is brought up.
28 static int br_device_event(struct notifier_block
*unused
, unsigned long event
, void *ptr
)
30 struct netlink_ext_ack
*extack
= netdev_notifier_info_to_extack(ptr
);
31 struct netdev_notifier_pre_changeaddr_info
*prechaddr_info
;
32 struct net_device
*dev
= netdev_notifier_info_to_dev(ptr
);
33 struct net_bridge_port
*p
;
34 struct net_bridge
*br
;
35 bool notified
= false;
39 if (netif_is_bridge_master(dev
)) {
40 err
= br_vlan_bridge_event(dev
, event
, ptr
);
42 return notifier_from_errno(err
);
44 if (event
== NETDEV_REGISTER
) {
45 /* register of bridge completed, add sysfs entries */
46 err
= br_sysfs_addbr(dev
);
48 return notifier_from_errno(err
);
54 if (is_vlan_dev(dev
)) {
55 struct net_device
*real_dev
= vlan_dev_real_dev(dev
);
57 if (netif_is_bridge_master(real_dev
))
58 br_vlan_vlan_upper_event(real_dev
, dev
, event
);
61 /* not a port of a bridge */
62 p
= br_port_get_rtnl(dev
);
69 case NETDEV_CHANGEMTU
:
70 br_mtu_auto_adjust(br
);
73 case NETDEV_PRE_CHANGEADDR
:
74 if (br
->dev
->addr_assign_type
== NET_ADDR_SET
)
77 err
= dev_pre_changeaddr_notify(br
->dev
,
78 prechaddr_info
->dev_addr
,
81 return notifier_from_errno(err
);
84 case NETDEV_CHANGEADDR
:
85 spin_lock_bh(&br
->lock
);
86 br_fdb_changeaddr(p
, dev
->dev_addr
);
87 changed_addr
= br_stp_recalculate_bridge_id(br
);
88 spin_unlock_bh(&br
->lock
);
91 call_netdevice_notifiers(NETDEV_CHANGEADDR
, br
->dev
);
96 br_port_carrier_check(p
, ¬ified
);
99 case NETDEV_FEAT_CHANGE
:
100 netdev_update_features(br
->dev
);
104 spin_lock_bh(&br
->lock
);
105 if (br
->dev
->flags
& IFF_UP
) {
106 br_stp_disable_port(p
);
109 spin_unlock_bh(&br
->lock
);
113 if (netif_running(br
->dev
) && netif_oper_up(dev
)) {
114 spin_lock_bh(&br
->lock
);
115 br_stp_enable_port(p
);
117 spin_unlock_bh(&br
->lock
);
121 case NETDEV_UNREGISTER
:
125 case NETDEV_CHANGENAME
:
126 err
= br_sysfs_renameif(p
);
128 return notifier_from_errno(err
);
131 case NETDEV_PRE_TYPE_CHANGE
:
132 /* Forbid underlying device to change its type. */
135 case NETDEV_RESEND_IGMP
:
136 /* Propagate to master device */
137 call_netdevice_notifiers(event
, br
->dev
);
141 if (event
!= NETDEV_UNREGISTER
)
142 br_vlan_port_event(p
, event
);
144 /* Events that may cause spanning tree to refresh */
145 if (!notified
&& (event
== NETDEV_CHANGEADDR
|| event
== NETDEV_UP
||
146 event
== NETDEV_CHANGE
|| event
== NETDEV_DOWN
))
147 br_ifinfo_notify(RTM_NEWLINK
, NULL
, p
);
152 static struct notifier_block br_device_notifier
= {
153 .notifier_call
= br_device_event
156 /* called with RTNL or RCU */
157 static int br_switchdev_event(struct notifier_block
*unused
,
158 unsigned long event
, void *ptr
)
160 struct net_device
*dev
= switchdev_notifier_info_to_dev(ptr
);
161 struct net_bridge_port
*p
;
162 struct net_bridge
*br
;
163 struct switchdev_notifier_fdb_info
*fdb_info
;
164 int err
= NOTIFY_DONE
;
166 p
= br_port_get_rtnl_rcu(dev
);
173 case SWITCHDEV_FDB_ADD_TO_BRIDGE
:
175 err
= br_fdb_external_learn_add(br
, p
, fdb_info
->addr
,
177 fdb_info
->locked
, false);
179 err
= notifier_from_errno(err
);
182 br_fdb_offloaded_set(br
, p
, fdb_info
->addr
,
183 fdb_info
->vid
, fdb_info
->offloaded
);
185 case SWITCHDEV_FDB_DEL_TO_BRIDGE
:
187 err
= br_fdb_external_learn_del(br
, p
, fdb_info
->addr
,
188 fdb_info
->vid
, false);
190 err
= notifier_from_errno(err
);
192 case SWITCHDEV_FDB_OFFLOADED
:
194 br_fdb_offloaded_set(br
, p
, fdb_info
->addr
,
195 fdb_info
->vid
, fdb_info
->offloaded
);
197 case SWITCHDEV_FDB_FLUSH_TO_BRIDGE
:
199 /* Don't delete static entries */
200 br_fdb_delete_by_port(br
, p
, fdb_info
->vid
, 0);
208 static struct notifier_block br_switchdev_notifier
= {
209 .notifier_call
= br_switchdev_event
,
212 /* called under rtnl_mutex */
213 static int br_switchdev_blocking_event(struct notifier_block
*nb
,
214 unsigned long event
, void *ptr
)
216 struct netlink_ext_ack
*extack
= netdev_notifier_info_to_extack(ptr
);
217 struct net_device
*dev
= switchdev_notifier_info_to_dev(ptr
);
218 struct switchdev_notifier_brport_info
*brport_info
;
219 const struct switchdev_brport
*b
;
220 struct net_bridge_port
*p
;
221 int err
= NOTIFY_DONE
;
223 p
= br_port_get_rtnl(dev
);
228 case SWITCHDEV_BRPORT_OFFLOADED
:
230 b
= &brport_info
->brport
;
232 err
= br_switchdev_port_offload(p
, b
->dev
, b
->ctx
,
233 b
->atomic_nb
, b
->blocking_nb
,
234 b
->tx_fwd_offload
, extack
);
235 err
= notifier_from_errno(err
);
237 case SWITCHDEV_BRPORT_UNOFFLOADED
:
239 b
= &brport_info
->brport
;
241 br_switchdev_port_unoffload(p
, b
->ctx
, b
->atomic_nb
,
244 case SWITCHDEV_BRPORT_REPLAY
:
246 b
= &brport_info
->brport
;
248 err
= br_switchdev_port_replay(p
, b
->dev
, b
->ctx
, b
->atomic_nb
,
249 b
->blocking_nb
, extack
);
250 err
= notifier_from_errno(err
);
258 static struct notifier_block br_switchdev_blocking_notifier
= {
259 .notifier_call
= br_switchdev_blocking_event
,
262 /* br_boolopt_toggle - change user-controlled boolean option
265 * @opt: id of the option to change
266 * @on: new option value
267 * @extack: extack for error messages
269 * Changes the value of the respective boolean option to @on taking care of
270 * any internal option value mapping and configuration.
272 int br_boolopt_toggle(struct net_bridge
*br
, enum br_boolopt_id opt
, bool on
,
273 struct netlink_ext_ack
*extack
)
278 case BR_BOOLOPT_NO_LL_LEARN
:
279 br_opt_toggle(br
, BROPT_NO_LL_LEARN
, on
);
281 case BR_BOOLOPT_MCAST_VLAN_SNOOPING
:
282 err
= br_multicast_toggle_vlan_snooping(br
, on
, extack
);
284 case BR_BOOLOPT_MST_ENABLE
:
285 err
= br_mst_set_enabled(br
, on
, extack
);
288 /* shouldn't be called with unsupported options */
296 int br_boolopt_get(const struct net_bridge
*br
, enum br_boolopt_id opt
)
299 case BR_BOOLOPT_NO_LL_LEARN
:
300 return br_opt_get(br
, BROPT_NO_LL_LEARN
);
301 case BR_BOOLOPT_MCAST_VLAN_SNOOPING
:
302 return br_opt_get(br
, BROPT_MCAST_VLAN_SNOOPING_ENABLED
);
303 case BR_BOOLOPT_MST_ENABLE
:
304 return br_opt_get(br
, BROPT_MST_ENABLED
);
306 /* shouldn't be called with unsupported options */
314 int br_boolopt_multi_toggle(struct net_bridge
*br
,
315 struct br_boolopt_multi
*bm
,
316 struct netlink_ext_ack
*extack
)
318 unsigned long bitmap
= bm
->optmask
;
322 for_each_set_bit(opt_id
, &bitmap
, BR_BOOLOPT_MAX
) {
323 bool on
= !!(bm
->optval
& BIT(opt_id
));
325 err
= br_boolopt_toggle(br
, opt_id
, on
, extack
);
327 br_debug(br
, "boolopt multi-toggle error: option: %d current: %d new: %d error: %d\n",
328 opt_id
, br_boolopt_get(br
, opt_id
), on
, err
);
336 void br_boolopt_multi_get(const struct net_bridge
*br
,
337 struct br_boolopt_multi
*bm
)
342 for (opt_id
= 0; opt_id
< BR_BOOLOPT_MAX
; opt_id
++)
343 optval
|= (br_boolopt_get(br
, opt_id
) << opt_id
);
346 bm
->optmask
= GENMASK((BR_BOOLOPT_MAX
- 1), 0);
349 /* private bridge options, controlled by the kernel */
350 void br_opt_toggle(struct net_bridge
*br
, enum net_bridge_opts opt
, bool on
)
352 bool cur
= !!br_opt_get(br
, opt
);
354 br_debug(br
, "toggle option: %d state: %d -> %d\n",
361 set_bit(opt
, &br
->options
);
363 clear_bit(opt
, &br
->options
);
366 static void __net_exit
br_net_exit_batch_rtnl(struct list_head
*net_list
,
367 struct list_head
*dev_to_kill
)
369 struct net_device
*dev
;
373 list_for_each_entry(net
, net_list
, exit_list
)
374 for_each_netdev(net
, dev
)
375 if (netif_is_bridge_master(dev
))
376 br_dev_delete(dev
, dev_to_kill
);
379 static struct pernet_operations br_net_ops
= {
380 .exit_batch_rtnl
= br_net_exit_batch_rtnl
,
383 static const struct stp_proto br_stp_proto
= {
387 static int __init
br_init(void)
391 BUILD_BUG_ON(sizeof(struct br_input_skb_cb
) > sizeof_field(struct sk_buff
, cb
));
393 err
= stp_proto_register(&br_stp_proto
);
395 pr_err("bridge: can't register sap for STP\n");
403 err
= register_pernet_subsys(&br_net_ops
);
407 err
= br_nf_core_init();
411 err
= register_netdevice_notifier(&br_device_notifier
);
415 err
= register_switchdev_notifier(&br_switchdev_notifier
);
419 err
= register_switchdev_blocking_notifier(&br_switchdev_blocking_notifier
);
423 err
= br_netlink_init();
427 brioctl_set(br_ioctl_stub
);
429 #if IS_ENABLED(CONFIG_ATM_LANE)
430 br_fdb_test_addr_hook
= br_fdb_test_addr
;
433 #if IS_MODULE(CONFIG_BRIDGE_NETFILTER)
434 pr_info("bridge: filtering via arp/ip/ip6tables is no longer available "
435 "by default. Update your scripts to load br_netfilter if you "
442 unregister_switchdev_blocking_notifier(&br_switchdev_blocking_notifier
);
444 unregister_switchdev_notifier(&br_switchdev_notifier
);
446 unregister_netdevice_notifier(&br_device_notifier
);
450 unregister_pernet_subsys(&br_net_ops
);
454 stp_proto_unregister(&br_stp_proto
);
458 static void __exit
br_deinit(void)
460 stp_proto_unregister(&br_stp_proto
);
462 unregister_switchdev_blocking_notifier(&br_switchdev_blocking_notifier
);
463 unregister_switchdev_notifier(&br_switchdev_notifier
);
464 unregister_netdevice_notifier(&br_device_notifier
);
466 unregister_pernet_subsys(&br_net_ops
);
468 rcu_barrier(); /* Wait for completion of call_rcu()'s */
471 #if IS_ENABLED(CONFIG_ATM_LANE)
472 br_fdb_test_addr_hook
= NULL
;
478 module_exit(br_deinit
)
479 MODULE_LICENSE("GPL");
480 MODULE_VERSION(BR_VERSION
);
481 MODULE_ALIAS_RTNL_LINK("bridge");
482 MODULE_DESCRIPTION("Ethernet bridge driver");