⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bond_main.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * originally based on the dummy device. * * Copyright 1999, Thomas Davis, tadavis@lbl.gov. * Licensed under the GPL. Based on dummy.c, and eql.c devices. * * bonding.c: an Ethernet Bonding driver * * This is useful to talk to a Cisco EtherChannel compatible equipment: *	Cisco 5500 *	Sun Trunking (Solaris) *	Alteon AceDirector Trunks *	Linux Bonding *	and probably many L2 switches ... * * How it works: *    ifconfig bond0 ipaddress netmask up *      will setup a network device, with an ip address.  No mac address *	will be assigned at this time.  The hw mac address will come from *	the first slave bonded to the channel.  All slaves will then use *	this hw mac address. * *    ifconfig bond0 down *         will release all slaves, marking them as down. * *    ifenslave bond0 eth0 *	will attach eth0 to bond0 as a slave.  eth0 hw mac address will either *	a: be used as initial mac address *	b: if a hw mac address already is there, eth0's hw mac address *	   will then be set from bond0. * * v0.1 - first working version. * v0.2 - changed stats to be calculated by summing slaves stats. * * Changes: * Arnaldo Carvalho de Melo <acme@conectiva.com.br> * - fix leaks on failure at bond_init * * 2000/09/30 - Willy Tarreau <willy at meta-x.org> *     - added trivial code to release a slave device. *     - fixed security bug (CAP_NET_ADMIN not checked) *     - implemented MII link monitoring to disable dead links : *       All MII capable slaves are checked every <miimon> milliseconds *       (100 ms seems good). This value can be changed by passing it to *       insmod. A value of zero disables the monitoring (default). *     - fixed an infinite loop in bond_xmit_roundrobin() when there's no *       good slave. *     - made the code hopefully SMP safe * * 2000/10/03 - Willy Tarreau <willy at meta-x.org> *     - optimized slave lists based on relevant suggestions from Thomas Davis *     - implemented active-backup method to obtain HA with two switches: *       stay as long as possible on the same active interface, while we *       also monitor the backup one (MII link status) because we want to know *       if we are able to switch at any time. ( pass "mode=1" to insmod ) *     - lots of stress testings because we need it to be more robust than the *       wires ! :-> * * 2000/10/09 - Willy Tarreau <willy at meta-x.org> *     - added up and down delays after link state change. *     - optimized the slaves chaining so that when we run forward, we never *       repass through the bond itself, but we can find it by searching *       backwards. Renders the deletion more difficult, but accelerates the *       scan. *     - smarter enslaving and releasing. *     - finer and more robust SMP locking * * 2000/10/17 - Willy Tarreau <willy at meta-x.org> *     - fixed two potential SMP race conditions * * 2000/10/18 - Willy Tarreau <willy at meta-x.org> *     - small fixes to the monitoring FSM in case of zero delays * 2000/11/01 - Willy Tarreau <willy at meta-x.org> *     - fixed first slave not automatically used in trunk mode. * 2000/11/10 : spelling of "EtherChannel" corrected. * 2000/11/13 : fixed a race condition in case of concurrent accesses to ioctl(). * 2000/12/16 : fixed improper usage of rtnl_exlock_nowait(). * * 2001/1/3 - Chad N. Tindel <ctindel at ieee dot org> *     - The bonding driver now simulates MII status monitoring, just like *       a normal network device.  It will show that the link is down iff *       every slave in the bond shows that their links are down.  If at least *       one slave is up, the bond's MII status will appear as up. * * 2001/2/7 - Chad N. Tindel <ctindel at ieee dot org> *     - Applications can now query the bond from user space to get *       information which may be useful.  They do this by calling *       the BOND_INFO_QUERY ioctl.  Once the app knows how many slaves *       are in the bond, it can call the BOND_SLAVE_INFO_QUERY ioctl to *       get slave specific information (# link failures, etc).  See *       <linux/if_bonding.h> for more details.  The structs of interest *       are ifbond and ifslave. * * 2001/4/5 - Chad N. Tindel <ctindel at ieee dot org> *     - Ported to 2.4 Kernel * * 2001/5/2 - Jeffrey E. Mast <jeff at mastfamily dot com> *     - When a device is detached from a bond, the slave device is no longer *       left thinking that is has a master. * * 2001/5/16 - Jeffrey E. Mast <jeff at mastfamily dot com> *     - memset did not appropriately initialized the bond rw_locks. Used *       rwlock_init to initialize to unlocked state to prevent deadlock when *       first attempting a lock *     - Called SET_MODULE_OWNER for bond device * * 2001/5/17 - Tim Anderson <tsa at mvista.com> *     - 2 paths for releasing for slave release; 1 through ioctl *       and 2) through close. Both paths need to release the same way. *     - the free slave in bond release is changing slave status before *       the free. The netdev_set_master() is intended to change slave state *       so it should not be done as part of the release process. *     - Simple rule for slave state at release: only the active in A/B and *       only one in the trunked case. * * 2001/6/01 - Tim Anderson <tsa at mvista.com> *     - Now call dev_close when releasing a slave so it doesn't screw up *       out routing table. * * 2001/6/01 - Chad N. Tindel <ctindel at ieee dot org> *     - Added /proc support for getting bond and slave information. *       Information is in /proc/net/<bond device>/info. *     - Changed the locking when calling bond_close to prevent deadlock. * * 2001/8/05 - Janice Girouard <girouard at us.ibm.com> *     - correct problem where refcnt of slave is not incremented in bond_ioctl *       so the system hangs when halting. *     - correct locking problem when unable to malloc in bond_enslave. *     - adding bond_xmit_xor logic. *     - adding multiple bond device support. * * 2001/8/13 - Erik Habbinga <erik_habbinga at hp dot com> *     - correct locking problem with rtnl_exlock_nowait * * 2001/8/23 - Janice Girouard <girouard at us.ibm.com> *     - bzero initial dev_bonds, to correct oops *     - convert SIOCDEVPRIVATE to new MII ioctl calls * * 2001/9/13 - Takao Indoh <indou dot takao at jp dot fujitsu dot com> *     - Add the BOND_CHANGE_ACTIVE ioctl implementation * * 2001/9/14 - Mark Huth <mhuth at mvista dot com> *     - Change MII_LINK_READY to not check for end of auto-negotiation, *       but only for an up link. * * 2001/9/20 - Chad N. Tindel <ctindel at ieee dot org> *     - Add the device field to bonding_t.  Previously the net_device *       corresponding to a bond wasn't available from the bonding_t *       structure. * * 2001/9/25 - Janice Girouard <girouard at us.ibm.com> *     - add arp_monitor for active backup mode * * 2001/10/23 - Takao Indoh <indou dot takao at jp dot fujitsu dot com> *     - Various memory leak fixes * * 2001/11/5 - Mark Huth <mark dot huth at mvista dot com> *     - Don't take rtnl lock in bond_mii_monitor as it deadlocks under *       certain hotswap conditions. *       Note:  this same change may be required in bond_arp_monitor ??? *     - Remove possibility of calling bond_sethwaddr with NULL slave_dev ptr *     - Handle hot swap ethernet interface deregistration events to remove *       kernel oops following hot swap of enslaved interface * * 2002/1/2 - Chad N. Tindel <ctindel at ieee dot org> *     - Restore original slave flags at release time. * * 2002/02/18 - Erik Habbinga <erik_habbinga at hp dot com> *     - bond_release(): calling kfree on our_slave after call to *       bond_restore_slave_flags, not before *     - bond_enslave(): saving slave flags into original_flags before *       call to netdev_set_master, so the IFF_SLAVE flag doesn't end *       up in original_flags * * 2002/04/05 - Mark Smith <mark.smith at comdev dot cc> and *              Steve Mead <steve.mead at comdev dot cc> *     - Port Gleb Natapov's multicast support patchs from 2.4.12 *       to 2.4.18 adding support for multicast. * * 2002/06/10 - Tony Cureington <tony.cureington * hp_com> *     - corrected uninitialized pointer (ifr.ifr_data) in bond_check_dev_link; *       actually changed function to use MIIPHY, then MIIREG, and finally *       ETHTOOL to determine the link status *     - fixed bad ifr_data pointer assignments in bond_ioctl *     - corrected mode 1 being reported as active-backup in bond_get_info; *       also added text to distinguish type of load balancing (rr or xor) *     - change arp_ip_target module param from "1-12s" (array of 12 ptrs) *       to "s" (a single ptr) * * 2002/08/30 - Jay Vosburgh <fubar at us dot ibm dot com> *     - Removed acquisition of xmit_lock in set_multicast_list; caused *       deadlock on SMP (lock is held by caller). *     - Revamped SIOCGMIIPHY, SIOCGMIIREG portion of bond_check_dev_link(). * * 2002/09/18 - Jay Vosburgh <fubar at us dot ibm dot com> *     - Fixed up bond_check_dev_link() (and callers): removed some magic *	 numbers, banished local MII_ defines, wrapped ioctl calls to *	 prevent EFAULT errors * * 2002/9/30 - Jay Vosburgh <fubar at us dot ibm dot com> *     - make sure the ip target matches the arp_target before saving the *	 hw address. * * 2002/9/30 - Dan Eisner <eisner at 2robots dot com> *     - make sure my_ip is set before taking down the link, since *	 not all switches respond if the source ip is not set. * * 2002/10/8 - Janice Girouard <girouard at us dot ibm dot com> *     - read in the local ip address when enslaving a device *     - add primary support *     - make sure 2*arp_interval has passed when a new device *       is brought on-line before taking it down. * * 2002/09/11 - Philippe De Muyter <phdm at macqel dot be> *     - Added bond_xmit_broadcast logic. *     - Added bond_mode() support function. * * 2002/10/26 - Laurent Deniel <laurent.deniel at free.fr> *     - allow to register multicast addresses only on active slave *       (useful in active-backup mode) *     - add multicast module parameter *     - fix deletion of multicast groups after unloading module * * 2002/11/06 - Kameshwara Rayaprolu <kameshwara.rao * wipro_com> *     - Changes to prevent panic from closing the device twice; if we close *       the device in bond_release, we must set the original_flags to down *       so it won't be closed again by the network layer. * * 2002/11/07 - Tony Cureington <tony.cureington * hp_com> *     - Fix arp_target_hw_addr memory leak *     - Created activebackup_arp_monitor function to handle arp monitoring *       in active backup mode - the bond_arp_monitor had several problems... *       such as allowing slaves to tx arps sequentially without any delay *       for a response *     - Renamed bond_arp_monitor to loadbalance_arp_monitor and re-wrote *       this function to just handle arp monitoring in load-balancing mode; *       it is a lot more compact now *     - Changes to ensure one and only one slave transmits in active-backup *       mode *     - Robustesize parameters; warn users about bad combinations of *       parameters; also if miimon is specified and a network driver does *       not support MII or ETHTOOL, inform the user of this *     - Changes to support link_failure_count when in arp monitoring mode *     - Fix up/down delay reported in /proc *     - Added version; log version; make version available from "modinfo -d" *     - Fixed problem in bond_check_dev_link - if the first IOCTL (SIOCGMIIPH) *	 failed, the ETHTOOL ioctl never got a chance * * 2002/11/16 - Laurent Deniel <laurent.deniel at free.fr> *     - fix multicast handling in activebackup_arp_monitor *     - remove one unnecessary and confusing curr_active_slave == slave test *	 in activebackup_arp_monitor * *  2002/11/17 - Laurent Deniel <laurent.deniel at free.fr> *     - fix bond_slave_info_query when slave_id = num_slaves * *  2002/11/19 - Janice Girouard <girouard at us dot ibm dot com> *     - correct ifr_data reference.  Update ifr_data reference *       to mii_ioctl_data struct values to avoid confusion. * *  2002/11/22 - Bert Barbe <bert.barbe at oracle dot com> *      - Add support for multiple arp_ip_target * *  2002/12/13 - Jay Vosburgh <fubar at us dot ibm dot com> *	- Changed to allow text strings for mode and multicast, e.g., *	  insmod bonding mode=active-backup.  The numbers still work. *	  One change: an invalid choice will cause module load failure, *	  rather than the previous behavior of just picking one. *	- Minor cleanups; got rid of dup ctype stuff, atoi function * * 2003/02/07 - Jay Vosburgh <fubar at us dot ibm dot com> *	- Added use_carrier module parameter that causes miimon to *	  use netif_carrier_ok() test instead of MII/ETHTOOL ioctls. *	- Minor cleanups; consolidated ioctl calls to one function. * * 2003/02/07 - Tony Cureington <tony.cureington * hp_com> *	- Fix bond_mii_monitor() logic error that could result in *	  bonding round-robin mode ignoring links after failover/recovery * * 2003/03/17 - Jay Vosburgh <fubar at us dot ibm dot com> *	- kmalloc fix (GFP_KERNEL to GFP_ATOMIC) reported by *	  Shmulik dot Hen at intel.com. *	- Based on discussion on mailing list, changed use of *	  update_slave_cnt(), created wrapper functions for adding/removing *	  slaves, changed bond_xmit_xor() to check slave_cnt instead of *	  checking slave and slave->dev (which only worked by accident). *	- Misc code cleanup: get arp_send() prototype from header file, *	  add max_bonds to bonding.txt. * * 2003/03/18 - Tsippy Mendelson <tsippy.mendelson at intel dot com> and *		Shmulik Hen <shmulik.hen at intel dot com> *	- Make sure only bond_attach_slave() and bond_detach_slave() can *	  manipulate the slave list, including slave_cnt, even when in *	  bond_release_all(). *	- Fixed hang in bond_release() with traffic running: *	  netdev_set_master() must not be called from within the bond lock. * * 2003/03/18 - Tsippy Mendelson <tsippy.mendelson at intel dot com> and *		Shmulik Hen <shmulik.hen at intel dot com> *	- Fixed hang in bond_enslave() with traffic running: *	  netdev_set_master() must not be called from within the bond lock. * * 2003/03/18 - Amir Noam <amir.noam at intel dot com> *	- Added support for getting slave's speed and duplex via ethtool. *	  Needed for 802.3ad and other future modes. * * 2003/03/18 - Tsippy Mendelson <tsippy.mendelson at intel dot com> and *		Shmulik Hen <shmulik.hen at intel dot com> *	- Enable support of modes that need to use the unique mac address of *	  each slave. *	  * bond_enslave(): Moved setting the slave's mac address, and *	    openning it, from the application to the driver. This breaks *	    backward comaptibility with old versions of ifenslave that open *	     the slave before enalsving it !!!. *	  * bond_release(): The driver also takes care of closing the slave *	    and restoring its original mac address. *	- Removed the code that restores all base driver's flags. *	  Flags are automatically restored once all undo stages are done *	  properly. *	- Block possibility of enslaving before the master is up. This *	  prevents putting the system in an unstable state. * * 2003/03/18 - Amir Noam <amir.noam at intel dot com>, *		Tsippy Mendelson <tsippy.mendelson at intel dot com> and *		Shmulik Hen <shmulik.hen at intel dot com> *	- Added support for IEEE 802.3ad Dynamic link aggregation mode. * * 2003/05/01 - Amir Noam <amir.noam at intel dot com> *	- Added ABI version control to restore compatibility between *	  new/old ifenslave and new/old bonding. * * 2003/05/01 - Shmulik Hen <shmulik.hen at intel dot com> *	- Fixed bug in bond_release_all(): save old value of curr_active_slave *	  before setting it to NULL. *	- Changed driver versioning scheme to include version number instead *	  of release date (that is already in another field). There are 3 *	  fields X.Y.Z where: *		X - Major version - big behavior changes *		Y - Minor version - addition of features *		Z - Extra version - minor changes and bug fixes *	  The current version is 1.0.0 as a base line. * * 2003/05/01 - Tsippy Mendelson <tsippy.mendelson at intel dot com> and *		Amir Noam <amir.noam at intel dot com> *	- Added support for lacp_rate module param. *	- Code beautification and style changes (mainly in comments). *	  new version - 1.0.1 * * 2003/05/01 - Shmulik Hen <shmulik.hen at intel dot com> *	- Based on discussion on mailing list, changed locking scheme *	  to use lock/unlock or lock_bh/unlock_bh appropriately instead *	  of lock_irqsave/unlock_irqrestore. The new scheme helps exposing *	  hidden bugs and solves system hangs that occurred due to the fact *	  that holding lock_irqsave doesn't prevent softirqs from running. *	  This also increases total throughput since interrupts are not *	  blocked on each transmitted packets or monitor timeout. *	  new version - 2.0.0 * * 2003/05/01 - Shmulik Hen <shmulik.hen at intel dot com> *	- Added support for Transmit load balancing mode. *	- Concentrate all assignments of curr_active_slave to a single point *	  so specific modes can take actions when the primary adapter is *	  changed. *	- Take the updelay parameter into consideration during bond_enslave *	  since some adapters loose their link during setting the device. *	- Renamed bond_3ad_link_status_changed() to *	  bond_3ad_handle_link_change() for compatibility with TLB. *	  new version - 2.1.0 * * 2003/05/01 - Tsippy Mendelson <tsippy.mendelson at intel dot com> *	- Added support for Adaptive load balancing mode which is *	  equivalent to Transmit load balancing + Receive load balancing. *	  new version - 2.2.0 * * 2003/05/15 - Jay Vosburgh <fubar at us dot ibm dot com> *	- Applied fix to activebackup_arp_monitor posted to bonding-devel *	  by Tony Cureington <tony.cureington * hp_com>.  Fixes ARP *	  monitor endless failover bug.  Version to 2.2.10 * * 2003/05/20 - Amir Noam <amir.noam at intel dot com> *	- Fixed bug in ABI version control - Don't commit to a specific *	  ABI version if receiving unsupported ioctl commands. * * 2003/05/22 - Jay Vosburgh <fubar at us dot ibm dot com> *	- Fix ifenslave -c causing bond to loose existing routes; *	  added bond_set_mac_address() that doesn't require the *	  bond to be down. *	- In conjunction with fix for ifenslave -c, in *	  bond_change_active(), changing to the already active slave *	  is no longer an error (it successfully does nothing). * * 2003/06/30 - Amir Noam <amir.noam at intel dot com> * 	- Fixed bond_change_active() for ALB/TLB modes. *	  Version to 2.2.14. * * 2003/07/29 - Amir Noam <amir.noam at intel dot com> * 	- Fixed ARP monitoring bug. *	  Version to 2.2.15. * * 2003/07/31 - Willy Tarreau <willy at ods dot org> * 	- Fixed kernel panic when using ARP monitoring without *	  setting bond's IP address.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -