3  *      Linux ethernet bridge
 
   6  *      Lennert Buytenhek               <buytenh@gnu.org>
 
   8  *      $Id: br_if.c,v 1.7 2001/12/24 00:59:55 davem Exp $
 
  10  *      This program is free software; you can redistribute it and/or
 
  11  *      modify it under the terms of the GNU General Public License
 
  12  *      as published by the Free Software Foundation; either version
 
  13  *      2 of the License, or (at your option) any later version.
 
  16 #include <linux/kernel.h>
 
  17 #include <linux/netdevice.h>
 
  18 #include <linux/ethtool.h>
 
  19 #include <linux/if_arp.h>
 
  20 #include <linux/module.h>
 
  21 #include <linux/init.h>
 
  22 #include <linux/rtnetlink.h>
 
  23 #include <linux/if_ether.h>
 
  26 #include "br_private.h"
 
  29  * Determine initial path cost based on speed.
 
  30  * using recommendations from 802.1d standard
 
  32  * Need to simulate user ioctl because not all device's that support
 
  33  * ethtool, use ethtool_ops.  Also, since driver might sleep need to
 
  34  * not be holding any locks.
 
  36 static int port_cost(struct net_device *dev)
 
  38         struct ethtool_cmd ecmd = { ETHTOOL_GSET };
 
  43         strncpy(ifr.ifr_name, dev->name, IFNAMSIZ);
 
  44         ifr.ifr_data = (void __user *) &ecmd;
 
  48         err = dev_ethtool(&ifr);
 
  64         /* Old silly heuristics based on name */
 
  65         if (!strncmp(dev->name, "lec", 3))
 
  68         if (!strncmp(dev->name, "plip", 4))
 
  71         return 100;     /* assume old 10Mbps */
 
  76  * Check for port carrier transistions.
 
  77  * Called from work queue to allow for calling functions that
 
  78  * might sleep (such as speed check), and to debounce.
 
  80 static void port_carrier_check(void *arg)
 
  82         struct net_device *dev = arg;
 
  83         struct net_bridge_port *p;
 
  84         struct net_bridge *br;
 
  92         if (netif_carrier_ok(dev))
 
  93                 p->path_cost = port_cost(dev);
 
  95         if (br->dev->flags & IFF_UP) {
 
  96                 spin_lock_bh(&br->lock);
 
  97                 if (netif_carrier_ok(dev)) {
 
  98                         if (p->state == BR_STATE_DISABLED)
 
  99                                 br_stp_enable_port(p);
 
 101                         if (p->state != BR_STATE_DISABLED)
 
 102                                 br_stp_disable_port(p);
 
 104                 spin_unlock_bh(&br->lock);
 
 110 static void release_nbp(struct kobject *kobj)
 
 112         struct net_bridge_port *p
 
 113                 = container_of(kobj, struct net_bridge_port, kobj);
 
 117 static struct kobj_type brport_ktype = {
 
 119         .sysfs_ops = &brport_sysfs_ops,
 
 121         .release = release_nbp,
 
 124 static void destroy_nbp(struct net_bridge_port *p)
 
 126         struct net_device *dev = p->dev;
 
 132         kobject_put(&p->kobj);
 
 135 static void destroy_nbp_rcu(struct rcu_head *head)
 
 137         struct net_bridge_port *p =
 
 138                         container_of(head, struct net_bridge_port, rcu);
 
 142 /* Delete port(interface) from bridge is done in two steps.
 
 143  * via RCU. First step, marks device as down. That deletes
 
 144  * all the timers and stops new packets from flowing through.
 
 146  * Final cleanup doesn't occur until after all CPU's finished
 
 147  * processing packets.
 
 149  * Protected from multiple admin operations by RTNL mutex
 
 151 static void del_nbp(struct net_bridge_port *p)
 
 153         struct net_bridge *br = p->br;
 
 154         struct net_device *dev = p->dev;
 
 156         sysfs_remove_link(&br->ifobj, dev->name);
 
 158         dev_set_promiscuity(dev, -1);
 
 160         cancel_delayed_work(&p->carrier_check);
 
 162         spin_lock_bh(&br->lock);
 
 163         br_stp_disable_port(p);
 
 164         spin_unlock_bh(&br->lock);
 
 166         br_fdb_delete_by_port(br, p);
 
 168         list_del_rcu(&p->list);
 
 170         rcu_assign_pointer(dev->br_port, NULL);
 
 172         kobject_uevent(&p->kobj, KOBJ_REMOVE);
 
 173         kobject_del(&p->kobj);
 
 175         call_rcu(&p->rcu, destroy_nbp_rcu);
 
 178 /* called with RTNL */
 
 179 static void del_br(struct net_bridge *br)
 
 181         struct net_bridge_port *p, *n;
 
 183         list_for_each_entry_safe(p, n, &br->port_list, list) {
 
 187         del_timer_sync(&br->gc_timer);
 
 189         br_sysfs_delbr(br->dev);
 
 190         unregister_netdevice(br->dev);
 
 193 static struct net_device *new_bridge_dev(const char *name)
 
 195         struct net_bridge *br;
 
 196         struct net_device *dev;
 
 198         dev = alloc_netdev(sizeof(struct net_bridge), name,
 
 204         br = netdev_priv(dev);
 
 207         spin_lock_init(&br->lock);
 
 208         INIT_LIST_HEAD(&br->port_list);
 
 209         spin_lock_init(&br->hash_lock);
 
 211         br->bridge_id.prio[0] = 0x80;
 
 212         br->bridge_id.prio[1] = 0x00;
 
 214         memcpy(br->group_addr, br_group_address, ETH_ALEN);
 
 216         br->feature_mask = dev->features;
 
 218         br->designated_root = br->bridge_id;
 
 219         br->root_path_cost = 0;
 
 221         br->bridge_max_age = br->max_age = 20 * HZ;
 
 222         br->bridge_hello_time = br->hello_time = 2 * HZ;
 
 223         br->bridge_forward_delay = br->forward_delay = 15 * HZ;
 
 224         br->topology_change = 0;
 
 225         br->topology_change_detected = 0;
 
 226         br->ageing_time = 300 * HZ;
 
 227         INIT_LIST_HEAD(&br->age_list);
 
 229         br_stp_timer_init(br);
 
 234 /* find an available port number */
 
 235 static int find_portno(struct net_bridge *br)
 
 238         struct net_bridge_port *p;
 
 239         unsigned long *inuse;
 
 241         inuse = kcalloc(BITS_TO_LONGS(BR_MAX_PORTS), sizeof(unsigned long),
 
 246         set_bit(0, inuse);      /* zero is reserved */
 
 247         list_for_each_entry(p, &br->port_list, list) {
 
 248                 set_bit(p->port_no, inuse);
 
 250         index = find_first_zero_bit(inuse, BR_MAX_PORTS);
 
 253         return (index >= BR_MAX_PORTS) ? -EXFULL : index;
 
 256 /* called with RTNL but without bridge lock */
 
 257 static struct net_bridge_port *new_nbp(struct net_bridge *br, 
 
 258                                        struct net_device *dev)
 
 261         struct net_bridge_port *p;
 
 263         index = find_portno(br);
 
 265                 return ERR_PTR(index);
 
 267         p = kzalloc(sizeof(*p), GFP_KERNEL);
 
 269                 return ERR_PTR(-ENOMEM);
 
 274         p->path_cost = port_cost(dev);
 
 275         p->priority = 0x8000 >> BR_PORT_BITS;
 
 278         p->state = BR_STATE_DISABLED;
 
 279         INIT_WORK(&p->carrier_check, port_carrier_check, dev);
 
 280         br_stp_port_timer_init(p);
 
 282         kobject_init(&p->kobj);
 
 283         kobject_set_name(&p->kobj, SYSFS_BRIDGE_PORT_ATTR);
 
 284         p->kobj.ktype = &brport_ktype;
 
 285         p->kobj.parent = &(dev->class_dev.kobj);
 
 291 int br_add_bridge(const char *name)
 
 293         struct net_device *dev;
 
 296         dev = new_bridge_dev(name);
 
 301         if (strchr(dev->name, '%')) {
 
 302                 ret = dev_alloc_name(dev, dev->name);
 
 307         ret = register_netdevice(dev);
 
 311         /* network device kobject is not setup until
 
 312          * after rtnl_unlock does it's hotplug magic.
 
 313          * so hold reference to avoid race.
 
 318         ret = br_sysfs_addbr(dev);
 
 322                 unregister_netdev(dev);
 
 333 int br_del_bridge(const char *name)
 
 335         struct net_device *dev;
 
 339         dev = __dev_get_by_name(name);
 
 341                 ret =  -ENXIO;  /* Could not find device */
 
 343         else if (!(dev->priv_flags & IFF_EBRIDGE)) {
 
 344                 /* Attempt to delete non bridge device! */
 
 348         else if (dev->flags & IFF_UP) {
 
 349                 /* Not shutdown yet. */
 
 354                 del_br(netdev_priv(dev));
 
 360 /* MTU of the bridge pseudo-device: ETH_DATA_LEN or the minimum of the ports */
 
 361 int br_min_mtu(const struct net_bridge *br)
 
 363         const struct net_bridge_port *p;
 
 368         if (list_empty(&br->port_list))
 
 371                 list_for_each_entry(p, &br->port_list, list) {
 
 372                         if (!mtu  || p->dev->mtu < mtu)
 
 380  * Recomputes features using slave's features
 
 382 void br_features_recompute(struct net_bridge *br)
 
 384         struct net_bridge_port *p;
 
 385         unsigned long features, checksum;
 
 387         features = br->feature_mask &~ NETIF_F_IP_CSUM;
 
 388         checksum = br->feature_mask & NETIF_F_IP_CSUM;
 
 390         list_for_each_entry(p, &br->port_list, list) {
 
 391                 if (!(p->dev->features 
 
 392                       & (NETIF_F_IP_CSUM|NETIF_F_NO_CSUM|NETIF_F_HW_CSUM)))
 
 394                 features &= p->dev->features;
 
 397         br->dev->features = features | checksum | NETIF_F_LLTX;
 
 400 /* called with RTNL */
 
 401 int br_add_if(struct net_bridge *br, struct net_device *dev)
 
 403         struct net_bridge_port *p;
 
 406         if (dev->flags & IFF_LOOPBACK || dev->type != ARPHRD_ETHER)
 
 409         if (dev->hard_start_xmit == br_dev_xmit)
 
 412         if (dev->br_port != NULL)
 
 415         p = new_nbp(br, dev);
 
 419         err = kobject_add(&p->kobj);
 
 423         err = br_fdb_insert(br, p, dev->dev_addr);
 
 427         err = br_sysfs_addif(p);
 
 431         rcu_assign_pointer(dev->br_port, p);
 
 432         dev_set_promiscuity(dev, 1);
 
 434         list_add_rcu(&p->list, &br->port_list);
 
 436         spin_lock_bh(&br->lock);
 
 437         br_stp_recalculate_bridge_id(br);
 
 438         br_features_recompute(br);
 
 439         schedule_delayed_work(&p->carrier_check, BR_PORT_DEBOUNCE);
 
 440         spin_unlock_bh(&br->lock);
 
 442         dev_set_mtu(br->dev, br_min_mtu(br));
 
 443         kobject_uevent(&p->kobj, KOBJ_ADD);
 
 447         br_fdb_delete_by_port(br, p);
 
 449         kobject_del(&p->kobj);
 
 451         kobject_put(&p->kobj);
 
 455 /* called with RTNL */
 
 456 int br_del_if(struct net_bridge *br, struct net_device *dev)
 
 458         struct net_bridge_port *p = dev->br_port;
 
 460         if (!p || p->br != br) 
 
 465         spin_lock_bh(&br->lock);
 
 466         br_stp_recalculate_bridge_id(br);
 
 467         br_features_recompute(br);
 
 468         spin_unlock_bh(&br->lock);
 
 473 void __exit br_cleanup_bridges(void)
 
 475         struct net_device *dev, *nxt;
 
 478         for (dev = dev_base; dev; dev = nxt) {
 
 480                 if (dev->priv_flags & IFF_EBRIDGE)