• Jiri Pirko's avatar
    net: introduce ethernet teaming device · 3d249d4c
    Jiri Pirko authored
    This patch introduces new network device called team. It supposes to be
    very fast, simple, userspace-driven alternative to existing bonding
    driver.
    
    Userspace library called libteam with couple of demo apps is available
    here:
    https://github.com/jpirko/libteam
    Note it's still in its dipers atm.
    
    team<->libteam use generic netlink for communication. That and rtnl
    suppose to be the only way to configure team device, no sysfs etc.
    
    Python binding of libteam was recently introduced.
    Daemon providing arpmon/miimon active-backup functionality will be
    introduced shortly. All what's necessary is already implemented in
    kernel team driver.
    
    v7->v8:
    	- check ndo_ndo_vlan_rx_[add/kill]_vid functions before calling
    	  them.
    	- use dev_kfree_skb_any() instead of dev_kfree_skb()
    
    v6->v7:
    	- transmit and receive functions are not checked in hot paths.
    	  That also resolves memory leak on transmit when no port is
    	  present
    
    v5->v6:
    	- changed couple of _rcu calls to non _rcu ones in non-readers
    
    v4->v5:
    	- team_change_mtu() uses team->lock while travesing though port
    	  list
    	- mac address changes are moved completely to jurisdiction of
    	  userspace daemon. This way the daemon can do FOM1, FOM2 and
    	  possibly other weird things with mac addresses.
    	  Only round-robin mode sets up all ports to bond's address then
    	  enslaved.
    	- Extended Kconfig text
    
    v3->v4:
    	- remove redundant synchronize_rcu from __team_change_mode()
    	- revert "set and clear of mode_ops happens per pointer, not per
    	  byte"
    	- extend comment of function __team_change_mode()
    
    v2->v3:
    	- team_change_mtu() uses rcu version of list traversal to unwind
    	- set and clear of mode_ops happens per pointer, not per byte
    	- port hashlist changed to be embedded into team structure
    	- error branch in team_port_enter() does cleanup now
    	- fixed rtln->rtnl
    
    v1->v2:
    	- modes are made as modules. Makes team more modular and
    	  extendable.
    	- several commenters' nitpicks found on v1 were fixed
    	- several other bugs were fixed.
    	- note I ignored Eric's comment about roundrobin port selector
    	  as Eric's way may be easily implemented as another mode (mode
    	  "random") in future.
    Signed-off-by: 's avatarJiri Pirko <jpirko@redhat.com>
    Signed-off-by: 's avatarDavid S. Miller <davem@davemloft.net>
    3d249d4c