git: kernel - Major bridging functionality completed

Matthew Dillon dillon at
Thu Feb 24 14:18:17 PST 2011

commit 70d9a675bf5441cc854a843ead702d08928c37f3
Author: Matthew Dillon <dillon at>
Date:   Thu Feb 24 00:28:23 2011 -0800

    kernel - Major bridging functionality completed
    * Rewrite the spanning tree algorithm.  Not well tested but both sides
      properly calculate the blocking pairs for the ports whereas before
      they did not.
      Document the code as needed.  The poor documentation created a lot of
      unnecessary headaches.
      Separate out the peer state from the aggregated state.
    * Greatly enhance the 'ifconfig [-v] bridgeN' status output so one
      can see exactly what the state of the sub-interfaces is.
    * The bridge interface's ether address can now be modified.  It is also
      possible to add IP addresses to the bridge interface but this has
      not been tested well and might not work.
    * Nearly all traffic sourced from interfaces attached to the bridge
      now use the bridge's MAC address.  This includes ARP.  Theoretically
      this means that ganged links between bridges (bonding is NOT yet
      supported! Strictly master/backup)... should be able to failover
      without destroying the ARP tables on various systems.
    * Add an experimental LINK2 option to the bridge.  This will eventually
      be channel bonding but doesn't work so hot right now.  At the moment
      it just round-robins output on sub-interfaces with the same MAC (usually
      TAP interfaces).  Ill gets aggregated using the bridge's MAC but the
      comparison is used to create bonding groups.
      This one needs considerably more work on properly adjusting its state
      to DESIGNATED instead of hacking packets over members in the BLOCKING
    * Clean up some of the state transitions used by the LINK1 failover
    * Change the bridge interface to IFT_ETHER to allow IP and MAC assignments
      and for it to be properly handled in the rest of the stack.
    * Aggregate input from all member interfaces into the bridge proper and
      re-output/forward/route as appropriate using the stateful information
      available in the bif lists to handle failover and other features.
    * ARP handles MAC snafus due to bridging a little better.
    * Changeover to TAILQs from LISTs for bifs.
    * Move bif_flags to the bif_info structure so we can use it to hold
      active state.
    * Implement SIOCGIFMEDIA in IF_TAP (still needs some work).  This
      is required by the bridge code to properly be able to use TAP
      interfaces as members.

Summary of changes:
 sbin/ifconfig/ifbridge.c      |   10 +
 sys/net/bridge/bridgestp.c    |  568 +++++++++++++++++++++++------------------
 sys/net/bridge/if_bridge.c    |  560 +++++++++++++++++++++++++++-------------
 sys/net/bridge/if_bridgevar.h |   59 +++--
 sys/net/if_ethersubr.c        |   49 ++++-
 sys/net/if_var.h              |    1 +
 sys/net/tap/if_tap.c          |   36 +++-
 sys/netinet/if_ether.c        |  138 ++++++++--
 8 files changed, 943 insertions(+), 478 deletions(-)

DragonFly BSD source repository

More information about the Commits mailing list