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