3 * Linux ethernet bridge
6 * Lennert Buytenhek <buytenh@gnu.org>
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version
11 * 2 of the License, or (at your option) any later version.
14 #include <linux/kernel.h>
15 #include <linux/init.h>
16 #include <linux/rculist.h>
17 #include <linux/spinlock.h>
18 #include <linux/times.h>
19 #include <linux/netdevice.h>
20 #include <linux/etherdevice.h>
21 #include <linux/jhash.h>
22 #include <linux/random.h>
23 #include <linux/slab.h>
24 #include <linux/atomic.h>
25 #include <asm/unaligned.h>
26 #include <linux/if_vlan.h>
27 #include "br_private.h"
29 static struct kmem_cache *br_fdb_cache __read_mostly;
30 static struct net_bridge_fdb_entry *fdb_find(struct hlist_head *head,
31 const unsigned char *addr,
33 static int fdb_insert(struct net_bridge *br, struct net_bridge_port *source,
34 const unsigned char *addr, u16 vid);
35 static void fdb_notify(struct net_bridge *br,
36 const struct net_bridge_fdb_entry *, int);
38 static u32 fdb_salt __read_mostly;
40 int __init br_fdb_init(void)
42 br_fdb_cache = kmem_cache_create("bridge_fdb_cache",
43 sizeof(struct net_bridge_fdb_entry),
45 SLAB_HWCACHE_ALIGN, NULL);
49 get_random_bytes(&fdb_salt, sizeof(fdb_salt));
53 void br_fdb_fini(void)
55 kmem_cache_destroy(br_fdb_cache);
59 /* if topology_changing then use forward_delay (default 15 sec)
60 * otherwise keep longer (default 5 minutes)
62 static inline unsigned long hold_time(const struct net_bridge *br)
64 return br->topology_change ? br->forward_delay : br->ageing_time;
67 static inline int has_expired(const struct net_bridge *br,
68 const struct net_bridge_fdb_entry *fdb)
70 return !fdb->is_static &&
71 time_before_eq(fdb->updated + hold_time(br), jiffies);
74 static inline int br_mac_hash(const unsigned char *mac, __u16 vid)
76 /* use 1 byte of OUI and 3 bytes of NIC */
77 u32 key = get_unaligned((u32 *)(mac + 2));
78 return jhash_2words(key, vid, fdb_salt) & (BR_HASH_SIZE - 1);
81 static void fdb_rcu_free(struct rcu_head *head)
83 struct net_bridge_fdb_entry *ent
84 = container_of(head, struct net_bridge_fdb_entry, rcu);
85 kmem_cache_free(br_fdb_cache, ent);
88 static void fdb_delete(struct net_bridge *br, struct net_bridge_fdb_entry *f)
90 hlist_del_rcu(&f->hlist);
91 fdb_notify(br, f, RTM_DELNEIGH);
92 call_rcu(&f->rcu, fdb_rcu_free);
95 /* Delete a local entry if no other port had the same address. */
96 static void fdb_delete_local(struct net_bridge *br,
97 const struct net_bridge_port *p,
98 struct net_bridge_fdb_entry *f)
100 const unsigned char *addr = f->addr.addr;
101 u16 vid = f->vlan_id;
102 struct net_bridge_port *op;
104 /* Maybe another port has same hw addr? */
105 list_for_each_entry(op, &br->port_list, list) {
106 if (op != p && ether_addr_equal(op->dev->dev_addr, addr) &&
107 (!vid || nbp_vlan_find(op, vid))) {
109 f->added_by_user = 0;
114 /* Maybe bridge device has same hw addr? */
115 if (p && ether_addr_equal(br->dev->dev_addr, addr) &&
116 (!vid || br_vlan_find(br, vid))) {
118 f->added_by_user = 0;
125 void br_fdb_find_delete_local(struct net_bridge *br,
126 const struct net_bridge_port *p,
127 const unsigned char *addr, u16 vid)
129 struct hlist_head *head = &br->hash[br_mac_hash(addr, vid)];
130 struct net_bridge_fdb_entry *f;
132 spin_lock_bh(&br->hash_lock);
133 f = fdb_find(head, addr, vid);
134 if (f && f->is_local && !f->added_by_user && f->dst == p)
135 fdb_delete_local(br, p, f);
136 spin_unlock_bh(&br->hash_lock);
139 void br_fdb_changeaddr(struct net_bridge_port *p, const unsigned char *newaddr)
141 struct net_bridge *br = p->br;
142 struct net_port_vlans *pv = nbp_get_vlan_info(p);
147 spin_lock_bh(&br->hash_lock);
149 /* Search all chains since old address/hash is unknown */
150 for (i = 0; i < BR_HASH_SIZE; i++) {
151 struct hlist_node *h;
152 hlist_for_each(h, &br->hash[i]) {
153 struct net_bridge_fdb_entry *f;
155 f = hlist_entry(h, struct net_bridge_fdb_entry, hlist);
156 if (f->dst == p && f->is_local && !f->added_by_user) {
158 fdb_delete_local(br, p, f);
160 /* if this port has no vlan information
161 * configured, we can safely be done at
171 /* insert new address, may fail if invalid address or dup. */
172 fdb_insert(br, p, newaddr, 0);
177 /* Now add entries for every VLAN configured on the port.
178 * This function runs under RTNL so the bitmap will not change
181 for_each_set_bit(vid, pv->vlan_bitmap, VLAN_N_VID)
182 fdb_insert(br, p, newaddr, vid);
185 spin_unlock_bh(&br->hash_lock);
188 void br_fdb_change_mac_address(struct net_bridge *br, const u8 *newaddr)
190 struct net_bridge_fdb_entry *f;
191 struct net_port_vlans *pv;
194 spin_lock_bh(&br->hash_lock);
196 /* If old entry was unassociated with any port, then delete it. */
197 f = __br_fdb_get(br, br->dev->dev_addr, 0);
198 if (f && f->is_local && !f->dst)
199 fdb_delete_local(br, NULL, f);
201 fdb_insert(br, NULL, newaddr, 0);
203 /* Now remove and add entries for every VLAN configured on the
204 * bridge. This function runs under RTNL so the bitmap will not
205 * change from under us.
207 pv = br_get_vlan_info(br);
211 for_each_set_bit_from(vid, pv->vlan_bitmap, VLAN_N_VID) {
212 f = __br_fdb_get(br, br->dev->dev_addr, vid);
213 if (f && f->is_local && !f->dst)
214 fdb_delete_local(br, NULL, f);
215 fdb_insert(br, NULL, newaddr, vid);
218 spin_unlock_bh(&br->hash_lock);
221 void br_fdb_cleanup(unsigned long _data)
223 struct net_bridge *br = (struct net_bridge *)_data;
224 unsigned long delay = hold_time(br);
225 unsigned long next_timer = jiffies + br->ageing_time;
228 spin_lock(&br->hash_lock);
229 for (i = 0; i < BR_HASH_SIZE; i++) {
230 struct net_bridge_fdb_entry *f;
231 struct hlist_node *n;
233 hlist_for_each_entry_safe(f, n, &br->hash[i], hlist) {
234 unsigned long this_timer;
237 this_timer = f->updated + delay;
238 if (time_before_eq(this_timer, jiffies))
240 else if (time_before(this_timer, next_timer))
241 next_timer = this_timer;
244 spin_unlock(&br->hash_lock);
246 mod_timer(&br->gc_timer, round_jiffies_up(next_timer));
249 /* Completely flush all dynamic entries in forwarding database.*/
250 void br_fdb_flush(struct net_bridge *br)
254 spin_lock_bh(&br->hash_lock);
255 for (i = 0; i < BR_HASH_SIZE; i++) {
256 struct net_bridge_fdb_entry *f;
257 struct hlist_node *n;
258 hlist_for_each_entry_safe(f, n, &br->hash[i], hlist) {
263 spin_unlock_bh(&br->hash_lock);
266 /* Flush all entries referring to a specific port.
267 * if do_all is set also flush static entries
269 void br_fdb_delete_by_port(struct net_bridge *br,
270 const struct net_bridge_port *p,
275 spin_lock_bh(&br->hash_lock);
276 for (i = 0; i < BR_HASH_SIZE; i++) {
277 struct hlist_node *h, *g;
279 hlist_for_each_safe(h, g, &br->hash[i]) {
280 struct net_bridge_fdb_entry *f
281 = hlist_entry(h, struct net_bridge_fdb_entry, hlist);
285 if (f->is_static && !do_all)
289 fdb_delete_local(br, p, f);
294 spin_unlock_bh(&br->hash_lock);
297 /* No locking or refcounting, assumes caller has rcu_read_lock */
298 struct net_bridge_fdb_entry *__br_fdb_get(struct net_bridge *br,
299 const unsigned char *addr,
302 struct net_bridge_fdb_entry *fdb;
304 hlist_for_each_entry_rcu(fdb,
305 &br->hash[br_mac_hash(addr, vid)], hlist) {
306 if (ether_addr_equal(fdb->addr.addr, addr) &&
307 fdb->vlan_id == vid) {
308 if (unlikely(has_expired(br, fdb)))
317 #if IS_ENABLED(CONFIG_ATM_LANE)
318 /* Interface used by ATM LANE hook to test
319 * if an addr is on some other bridge port */
320 int br_fdb_test_addr(struct net_device *dev, unsigned char *addr)
322 struct net_bridge_fdb_entry *fdb;
323 struct net_bridge_port *port;
327 port = br_port_get_rcu(dev);
331 fdb = __br_fdb_get(port->br, addr, 0);
332 ret = fdb && fdb->dst && fdb->dst->dev != dev &&
333 fdb->dst->state == BR_STATE_FORWARDING;
339 #endif /* CONFIG_ATM_LANE */
342 * Fill buffer with forwarding table records in
345 int br_fdb_fillbuf(struct net_bridge *br, void *buf,
346 unsigned long maxnum, unsigned long skip)
348 struct __fdb_entry *fe = buf;
350 struct net_bridge_fdb_entry *f;
352 memset(buf, 0, maxnum*sizeof(struct __fdb_entry));
355 for (i = 0; i < BR_HASH_SIZE; i++) {
356 hlist_for_each_entry_rcu(f, &br->hash[i], hlist) {
360 if (has_expired(br, f))
363 /* ignore pseudo entry for local MAC address */
372 /* convert from internal format to API */
373 memcpy(fe->mac_addr, f->addr.addr, ETH_ALEN);
375 /* due to ABI compat need to split into hi/lo */
376 fe->port_no = f->dst->port_no;
377 fe->port_hi = f->dst->port_no >> 8;
379 fe->is_local = f->is_local;
381 fe->ageing_timer_value = jiffies_delta_to_clock_t(jiffies - f->updated);
393 static struct net_bridge_fdb_entry *fdb_find(struct hlist_head *head,
394 const unsigned char *addr,
397 struct net_bridge_fdb_entry *fdb;
399 hlist_for_each_entry(fdb, head, hlist) {
400 if (ether_addr_equal(fdb->addr.addr, addr) &&
407 static struct net_bridge_fdb_entry *fdb_find_rcu(struct hlist_head *head,
408 const unsigned char *addr,
411 struct net_bridge_fdb_entry *fdb;
413 hlist_for_each_entry_rcu(fdb, head, hlist) {
414 if (ether_addr_equal(fdb->addr.addr, addr) &&
421 static struct net_bridge_fdb_entry *fdb_create(struct hlist_head *head,
422 struct net_bridge_port *source,
423 const unsigned char *addr,
426 struct net_bridge_fdb_entry *fdb;
428 fdb = kmem_cache_alloc(br_fdb_cache, GFP_ATOMIC);
430 memcpy(fdb->addr.addr, addr, ETH_ALEN);
435 fdb->added_by_user = 0;
436 fdb->updated = fdb->used = jiffies;
437 hlist_add_head_rcu(&fdb->hlist, head);
442 static int fdb_insert(struct net_bridge *br, struct net_bridge_port *source,
443 const unsigned char *addr, u16 vid)
445 struct hlist_head *head = &br->hash[br_mac_hash(addr, vid)];
446 struct net_bridge_fdb_entry *fdb;
448 if (!is_valid_ether_addr(addr))
451 fdb = fdb_find(head, addr, vid);
453 /* it is okay to have multiple ports with same
454 * address, just use the first one.
458 br_warn(br, "adding interface %s with same address "
459 "as a received packet\n",
460 source ? source->dev->name : br->dev->name);
464 fdb = fdb_create(head, source, addr, vid);
468 fdb->is_local = fdb->is_static = 1;
469 fdb_notify(br, fdb, RTM_NEWNEIGH);
473 /* Add entry for local address of interface */
474 int br_fdb_insert(struct net_bridge *br, struct net_bridge_port *source,
475 const unsigned char *addr, u16 vid)
479 spin_lock_bh(&br->hash_lock);
480 ret = fdb_insert(br, source, addr, vid);
481 spin_unlock_bh(&br->hash_lock);
485 void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source,
486 const unsigned char *addr, u16 vid, bool added_by_user)
488 struct hlist_head *head = &br->hash[br_mac_hash(addr, vid)];
489 struct net_bridge_fdb_entry *fdb;
491 /* some users want to always flood. */
492 if (hold_time(br) == 0)
495 /* ignore packets unless we are using this port */
496 if (!(source->state == BR_STATE_LEARNING ||
497 source->state == BR_STATE_FORWARDING))
500 fdb = fdb_find_rcu(head, addr, vid);
502 /* attempt to update an entry for a local interface */
503 if (unlikely(fdb->is_local)) {
505 br_warn(br, "received packet on %s with "
506 "own address as source address\n",
509 /* fastpath: update of existing entry */
511 fdb->updated = jiffies;
512 if (unlikely(added_by_user))
513 fdb->added_by_user = 1;
516 spin_lock(&br->hash_lock);
517 if (likely(!fdb_find(head, addr, vid))) {
518 fdb = fdb_create(head, source, addr, vid);
520 if (unlikely(added_by_user))
521 fdb->added_by_user = 1;
522 fdb_notify(br, fdb, RTM_NEWNEIGH);
525 /* else we lose race and someone else inserts
526 * it first, don't bother updating
528 spin_unlock(&br->hash_lock);
532 static int fdb_to_nud(const struct net_bridge_fdb_entry *fdb)
535 return NUD_PERMANENT;
536 else if (fdb->is_static)
538 else if (has_expired(fdb->dst->br, fdb))
541 return NUD_REACHABLE;
544 static int fdb_fill_info(struct sk_buff *skb, const struct net_bridge *br,
545 const struct net_bridge_fdb_entry *fdb,
546 u32 portid, u32 seq, int type, unsigned int flags)
548 unsigned long now = jiffies;
549 struct nda_cacheinfo ci;
550 struct nlmsghdr *nlh;
553 nlh = nlmsg_put(skb, portid, seq, type, sizeof(*ndm), flags);
557 ndm = nlmsg_data(nlh);
558 ndm->ndm_family = AF_BRIDGE;
563 ndm->ndm_ifindex = fdb->dst ? fdb->dst->dev->ifindex : br->dev->ifindex;
564 ndm->ndm_state = fdb_to_nud(fdb);
566 if (nla_put(skb, NDA_LLADDR, ETH_ALEN, &fdb->addr))
567 goto nla_put_failure;
568 ci.ndm_used = jiffies_to_clock_t(now - fdb->used);
569 ci.ndm_confirmed = 0;
570 ci.ndm_updated = jiffies_to_clock_t(now - fdb->updated);
572 if (nla_put(skb, NDA_CACHEINFO, sizeof(ci), &ci))
573 goto nla_put_failure;
575 if (nla_put(skb, NDA_VLAN, sizeof(u16), &fdb->vlan_id))
576 goto nla_put_failure;
578 return nlmsg_end(skb, nlh);
581 nlmsg_cancel(skb, nlh);
585 static inline size_t fdb_nlmsg_size(void)
587 return NLMSG_ALIGN(sizeof(struct ndmsg))
588 + nla_total_size(ETH_ALEN) /* NDA_LLADDR */
589 + nla_total_size(sizeof(u16)) /* NDA_VLAN */
590 + nla_total_size(sizeof(struct nda_cacheinfo));
593 static void fdb_notify(struct net_bridge *br,
594 const struct net_bridge_fdb_entry *fdb, int type)
596 struct net *net = dev_net(br->dev);
600 skb = nlmsg_new(fdb_nlmsg_size(), GFP_ATOMIC);
604 err = fdb_fill_info(skb, br, fdb, 0, 0, type, 0);
606 /* -EMSGSIZE implies BUG in fdb_nlmsg_size() */
607 WARN_ON(err == -EMSGSIZE);
611 rtnl_notify(skb, net, 0, RTNLGRP_NEIGH, NULL, GFP_ATOMIC);
614 rtnl_set_sk_err(net, RTNLGRP_NEIGH, err);
617 /* Dump information about entries, in response to GETNEIGH */
618 int br_fdb_dump(struct sk_buff *skb,
619 struct netlink_callback *cb,
620 struct net_device *dev,
623 struct net_bridge *br = netdev_priv(dev);
626 if (!(dev->priv_flags & IFF_EBRIDGE))
629 for (i = 0; i < BR_HASH_SIZE; i++) {
630 struct net_bridge_fdb_entry *f;
632 hlist_for_each_entry_rcu(f, &br->hash[i], hlist) {
633 if (idx < cb->args[0])
636 if (fdb_fill_info(skb, br, f,
637 NETLINK_CB(cb->skb).portid,
651 /* Update (create or replace) forwarding database entry */
652 static int fdb_add_entry(struct net_bridge_port *source, const __u8 *addr,
653 __u16 state, __u16 flags, __u16 vid)
655 struct net_bridge *br = source->br;
656 struct hlist_head *head = &br->hash[br_mac_hash(addr, vid)];
657 struct net_bridge_fdb_entry *fdb;
658 bool modified = false;
660 fdb = fdb_find(head, addr, vid);
662 if (!(flags & NLM_F_CREATE))
665 fdb = fdb_create(head, source, addr, vid);
671 if (flags & NLM_F_EXCL)
674 if (fdb->dst != source) {
680 if (fdb_to_nud(fdb) != state) {
681 if (state & NUD_PERMANENT)
682 fdb->is_local = fdb->is_static = 1;
683 else if (state & NUD_NOARP) {
687 fdb->is_local = fdb->is_static = 0;
691 fdb->added_by_user = 1;
695 fdb->updated = jiffies;
696 fdb_notify(br, fdb, RTM_NEWNEIGH);
702 static int __br_fdb_add(struct ndmsg *ndm, struct net_bridge_port *p,
703 const unsigned char *addr, u16 nlh_flags, u16 vid)
707 if (ndm->ndm_flags & NTF_USE) {
709 br_fdb_update(p->br, p, addr, vid, true);
712 spin_lock_bh(&p->br->hash_lock);
713 err = fdb_add_entry(p, addr, ndm->ndm_state,
715 spin_unlock_bh(&p->br->hash_lock);
721 /* Add new permanent fdb entry with RTM_NEWNEIGH */
722 int br_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
723 struct net_device *dev,
724 const unsigned char *addr, u16 nlh_flags)
726 struct net_bridge_port *p;
728 struct net_port_vlans *pv;
729 unsigned short vid = VLAN_N_VID;
731 if (!(ndm->ndm_state & (NUD_PERMANENT|NUD_NOARP|NUD_REACHABLE))) {
732 pr_info("bridge: RTM_NEWNEIGH with invalid state %#x\n", ndm->ndm_state);
737 if (nla_len(tb[NDA_VLAN]) != sizeof(unsigned short)) {
738 pr_info("bridge: RTM_NEWNEIGH with invalid vlan\n");
742 vid = nla_get_u16(tb[NDA_VLAN]);
744 if (!vid || vid >= VLAN_VID_MASK) {
745 pr_info("bridge: RTM_NEWNEIGH with invalid vlan id %d\n",
751 if (is_zero_ether_addr(addr)) {
752 pr_info("bridge: RTM_NEWNEIGH with invalid ether address\n");
756 p = br_port_get_rtnl(dev);
758 pr_info("bridge: RTM_NEWNEIGH %s not a bridge port\n",
763 pv = nbp_get_vlan_info(p);
764 if (vid != VLAN_N_VID) {
765 if (!pv || !test_bit(vid, pv->vlan_bitmap)) {
766 pr_info("bridge: RTM_NEWNEIGH with unconfigured "
767 "vlan %d on port %s\n", vid, dev->name);
771 /* VID was specified, so use it. */
772 err = __br_fdb_add(ndm, p, addr, nlh_flags, vid);
774 if (!pv || bitmap_empty(pv->vlan_bitmap, VLAN_N_VID)) {
775 err = __br_fdb_add(ndm, p, addr, nlh_flags, 0);
779 /* We have vlans configured on this port and user didn't
780 * specify a VLAN. To be nice, add/update entry for every
783 for_each_set_bit(vid, pv->vlan_bitmap, VLAN_N_VID) {
784 err = __br_fdb_add(ndm, p, addr, nlh_flags, vid);
794 static int fdb_delete_by_addr(struct net_bridge *br, const u8 *addr, u16 vlan)
796 struct hlist_head *head = &br->hash[br_mac_hash(addr, vlan)];
797 struct net_bridge_fdb_entry *fdb;
799 fdb = fdb_find(head, addr, vlan);
807 static int __br_fdb_delete(struct net_bridge_port *p,
808 const unsigned char *addr, u16 vid)
812 spin_lock_bh(&p->br->hash_lock);
813 err = fdb_delete_by_addr(p->br, addr, vid);
814 spin_unlock_bh(&p->br->hash_lock);
819 /* Remove neighbor entry with RTM_DELNEIGH */
820 int br_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[],
821 struct net_device *dev,
822 const unsigned char *addr)
824 struct net_bridge_port *p;
826 struct net_port_vlans *pv;
827 unsigned short vid = VLAN_N_VID;
830 if (nla_len(tb[NDA_VLAN]) != sizeof(unsigned short)) {
831 pr_info("bridge: RTM_NEWNEIGH with invalid vlan\n");
835 vid = nla_get_u16(tb[NDA_VLAN]);
837 if (!vid || vid >= VLAN_VID_MASK) {
838 pr_info("bridge: RTM_NEWNEIGH with invalid vlan id %d\n",
843 p = br_port_get_rtnl(dev);
845 pr_info("bridge: RTM_DELNEIGH %s not a bridge port\n",
850 pv = nbp_get_vlan_info(p);
851 if (vid != VLAN_N_VID) {
852 if (!pv || !test_bit(vid, pv->vlan_bitmap)) {
853 pr_info("bridge: RTM_DELNEIGH with unconfigured "
854 "vlan %d on port %s\n", vid, dev->name);
858 err = __br_fdb_delete(p, addr, vid);
860 if (!pv || bitmap_empty(pv->vlan_bitmap, VLAN_N_VID)) {
861 err = __br_fdb_delete(p, addr, 0);
865 /* We have vlans configured on this port and user didn't
866 * specify a VLAN. To be nice, add/update entry for every
870 for_each_set_bit(vid, pv->vlan_bitmap, VLAN_N_VID) {
871 err &= __br_fdb_delete(p, addr, vid);