bonding.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:57k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * originally based on the dummy device.
  3.  *
  4.  * Copyright 1999, Thomas Davis, tadavis@lbl.gov.  
  5.  * Licensed under the GPL. Based on dummy.c, and eql.c devices.
  6.  *
  7.  * bonding.c: an Ethernet Bonding driver
  8.  *
  9.  * This is useful to talk to a Cisco EtherChannel compatible equipment:
  10.  * Cisco 5500
  11.  * Sun Trunking (Solaris)
  12.  * Alteon AceDirector Trunks
  13.  * Linux Bonding
  14.  * and probably many L2 switches ...
  15.  *
  16.  * How it works:
  17.  *    ifconfig bond0 ipaddress netmask up
  18.  *      will setup a network device, with an ip address.  No mac address 
  19.  * will be assigned at this time.  The hw mac address will come from 
  20.  * the first slave bonded to the channel.  All slaves will then use 
  21.  * this hw mac address.
  22.  *
  23.  *    ifconfig bond0 down
  24.  *         will release all slaves, marking them as down.
  25.  *
  26.  *    ifenslave bond0 eth0
  27.  * will attach eth0 to bond0 as a slave.  eth0 hw mac address will either
  28.  * a: be used as initial mac address
  29.  * b: if a hw mac address already is there, eth0's hw mac address 
  30.  *    will then be set from bond0.
  31.  *
  32.  * v0.1 - first working version.
  33.  * v0.2 - changed stats to be calculated by summing slaves stats.
  34.  *
  35.  * Changes:
  36.  * Arnaldo Carvalho de Melo <acme@conectiva.com.br>
  37.  * - fix leaks on failure at bond_init
  38.  *
  39.  * 2000/09/30 - Willy Tarreau <willy at meta-x.org>
  40.  *     - added trivial code to release a slave device.
  41.  *     - fixed security bug (CAP_NET_ADMIN not checked)
  42.  *     - implemented MII link monitoring to disable dead links :
  43.  *       All MII capable slaves are checked every <miimon> milliseconds
  44.  *       (100 ms seems good). This value can be changed by passing it to
  45.  *       insmod. A value of zero disables the monitoring (default).
  46.  *     - fixed an infinite loop in bond_xmit_roundrobin() when there's no
  47.  *       good slave.
  48.  *     - made the code hopefully SMP safe
  49.  *
  50.  * 2000/10/03 - Willy Tarreau <willy at meta-x.org>
  51.  *     - optimized slave lists based on relevant suggestions from Thomas Davis
  52.  *     - implemented active-backup method to obtain HA with two switches:
  53.  *       stay as long as possible on the same active interface, while we
  54.  *       also monitor the backup one (MII link status) because we want to know
  55.  *       if we are able to switch at any time. ( pass "mode=1" to insmod )
  56.  *     - lots of stress testings because we need it to be more robust than the
  57.  *       wires ! :->
  58.  *
  59.  * 2000/10/09 - Willy Tarreau <willy at meta-x.org>
  60.  *     - added up and down delays after link state change.
  61.  *     - optimized the slaves chaining so that when we run forward, we never
  62.  *       repass through the bond itself, but we can find it by searching
  63.  *       backwards. Renders the deletion more difficult, but accelerates the
  64.  *       scan.
  65.  *     - smarter enslaving and releasing.
  66.  *     - finer and more robust SMP locking
  67.  *
  68.  * 2000/10/17 - Willy Tarreau <willy at meta-x.org>
  69.  *     - fixed two potential SMP race conditions
  70.  *
  71.  * 2000/10/18 - Willy Tarreau <willy at meta-x.org>
  72.  *     - small fixes to the monitoring FSM in case of zero delays
  73.  * 2000/11/01 - Willy Tarreau <willy at meta-x.org>
  74.  *     - fixed first slave not automatically used in trunk mode.
  75.  * 2000/11/10 : spelling of "EtherChannel" corrected.
  76.  * 2000/11/13 : fixed a race condition in case of concurrent accesses to ioctl().
  77.  * 2000/12/16 : fixed improper usage of rtnl_exlock_nowait().
  78.  *
  79.  * 2001/1/3 - Chad N. Tindel <ctindel at ieee dot org>
  80.  *     - The bonding driver now simulates MII status monitoring, just like
  81.  *       a normal network device.  It will show that the link is down iff
  82.  *       every slave in the bond shows that their links are down.  If at least
  83.  *       one slave is up, the bond's MII status will appear as up.
  84.  *
  85.  * 2001/2/7 - Chad N. Tindel <ctindel at ieee dot org>
  86.  *     - Applications can now query the bond from user space to get
  87.  *       information which may be useful.  They do this by calling
  88.  *       the BOND_INFO_QUERY ioctl.  Once the app knows how many slaves
  89.  *       are in the bond, it can call the BOND_SLAVE_INFO_QUERY ioctl to
  90.  *       get slave specific information (# link failures, etc).  See
  91.  *       <linux/if_bonding.h> for more details.  The structs of interest
  92.  *       are ifbond and ifslave.
  93.  *
  94.  * 2001/4/5 - Chad N. Tindel <ctindel at ieee dot org>
  95.  *     - Ported to 2.4 Kernel
  96.  * 
  97.  * 2001/5/2 - Jeffrey E. Mast <jeff at mastfamily dot com>
  98.  *     - When a device is detached from a bond, the slave device is no longer
  99.  *       left thinking that is has a master.
  100.  *
  101.  * 2001/5/16 - Jeffrey E. Mast <jeff at mastfamily dot com>
  102.  *     - memset did not appropriately initialized the bond rw_locks. Used 
  103.  *       rwlock_init to initialize to unlocked state to prevent deadlock when 
  104.  *       first attempting a lock
  105.  *     - Called SET_MODULE_OWNER for bond device
  106.  *
  107.  * 2001/5/17 - Tim Anderson <tsa at mvista.com>
  108.  *     - 2 paths for releasing for slave release; 1 through ioctl
  109.  *       and 2) through close. Both paths need to release the same way.
  110.  *     - the free slave in bond release is changing slave status before
  111.  *       the free. The netdev_set_master() is intended to change slave state
  112.  *       so it should not be done as part of the release process.
  113.  *     - Simple rule for slave state at release: only the active in A/B and
  114.  *       only one in the trunked case.
  115.  *
  116.  * 2001/6/01 - Tim Anderson <tsa at mvista.com>
  117.  *     - Now call dev_close when releasing a slave so it doesn't screw up
  118.  *       out routing table.
  119.  *
  120.  * 2001/6/01 - Chad N. Tindel <ctindel at ieee dot org>
  121.  *     - Added /proc support for getting bond and slave information.
  122.  *       Information is in /proc/net/<bond device>/info. 
  123.  *     - Changed the locking when calling bond_close to prevent deadlock.
  124.  *
  125.  * 2001/8/05 - Janice Girouard <girouard at us.ibm.com>
  126.  *     - correct problem where refcnt of slave is not incremented in bond_ioctl
  127.  *       so the system hangs when halting.
  128.  *     - correct locking problem when unable to malloc in bond_enslave.
  129.  *     - adding bond_xmit_xor logic.
  130.  *     - adding multiple bond device support.
  131.  *
  132.  * 2001/8/13 - Erik Habbinga <erik_habbinga at hp dot com>
  133.  *     - correct locking problem with rtnl_exlock_nowait
  134.  *
  135.  * 2001/8/23 - Janice Girouard <girouard at us.ibm.com>
  136.  *     - bzero initial dev_bonds, to correct oops
  137.  *     - convert SIOCDEVPRIVATE to new MII ioctl calls
  138.  *
  139.  * 2001/9/13 - Takao Indoh <indou dot takao at jp dot fujitsu dot com>
  140.  *     - Add the BOND_CHANGE_ACTIVE ioctl implementation
  141.  *
  142.  * 2001/9/14 - Mark Huth <mhuth at mvista dot com>
  143.  *     - Change MII_LINK_READY to not check for end of auto-negotiation,
  144.  *       but only for an up link.
  145.  *
  146.  * 2001/9/20 - Chad N. Tindel <ctindel at ieee dot org>
  147.  *     - Add the device field to bonding_t.  Previously the net_device 
  148.  *       corresponding to a bond wasn't available from the bonding_t 
  149.  *       structure.
  150.  *
  151.  * 2001/9/25 - Janice Girouard <girouard at us.ibm.com>
  152.  *     - add arp_monitor for active backup mode
  153.  *
  154.  * 2001/10/23 - Takao Indoh <indou dot takao at jp dot fujitsu dot com>
  155.  *     - Various memory leak fixes
  156.  *
  157.  * 2001/11/5 - Mark Huth <mark dot huth at mvista dot com>
  158.  *     - Don't take rtnl lock in bond_mii_monitor as it deadlocks under 
  159.  *       certain hotswap conditions.  
  160.  *       Note:  this same change may be required in bond_arp_monitor ???
  161.  *     - Remove possibility of calling bond_sethwaddr with NULL slave_dev ptr 
  162.  *     - Handle hot swap ethernet interface deregistration events to remove
  163.  *       kernel oops following hot swap of enslaved interface
  164.  */
  165. #include <linux/config.h>
  166. #include <linux/kernel.h>
  167. #include <linux/module.h>
  168. #include <linux/sched.h>
  169. #include <linux/types.h>
  170. #include <linux/fcntl.h>
  171. #include <linux/interrupt.h>
  172. #include <linux/ptrace.h>
  173. #include <linux/ioport.h>
  174. #include <linux/in.h>
  175. #include <linux/slab.h>
  176. #include <linux/string.h>
  177. #include <linux/init.h>
  178. #include <linux/timer.h>
  179. #include <linux/socket.h>
  180. #include <asm/system.h>
  181. #include <asm/bitops.h>
  182. #include <asm/io.h>
  183. #include <asm/dma.h>
  184. #include <asm/uaccess.h>
  185. #include <linux/errno.h>
  186. #include <linux/netdevice.h>
  187. #include <linux/etherdevice.h>
  188. #include <linux/skbuff.h>
  189. #include <net/sock.h>
  190. #include <linux/rtnetlink.h>
  191. #include <linux/if_bonding.h>
  192. #include <linux/smp.h>
  193. #include <linux/if_ether.h>
  194. #include <linux/if_arp.h>
  195. /* monitor all links that often (in milliseconds). <=0 disables monitoring */
  196. #ifndef BOND_LINK_MON_INTERV
  197. #define BOND_LINK_MON_INTERV 0
  198. #endif
  199. #undef  MII_LINK_UP
  200. #define MII_LINK_UP 0x04
  201. #undef  MII_ENDOF_NWAY
  202. #define MII_ENDOF_NWAY 0x20
  203. #undef  MII_LINK_READY
  204. /*#define MII_LINK_READY (MII_LINK_UP | MII_ENDOF_NWAY)*/
  205. #define MII_LINK_READY (MII_LINK_UP)
  206. #define MAX_BOND_ADDR 256
  207. #ifndef BOND_LINK_ARP_INTERV
  208. #define BOND_LINK_ARP_INTERV 0
  209. #endif
  210. static int arp_interval = BOND_LINK_ARP_INTERV;
  211. static char *arp_ip_target = NULL;
  212. static unsigned long arp_target = 0;
  213. static u32 my_ip = 0;
  214. char *arp_target_hw_addr = NULL;
  215. static int max_bonds = MAX_BONDS;
  216. static int miimon = BOND_LINK_MON_INTERV;
  217. static int mode = BOND_MODE_ROUNDROBIN;
  218. static int updelay = 0;
  219. static int downdelay = 0;
  220. static int first_pass = 1;
  221. int bond_cnt;
  222. static struct bonding *these_bonds =  NULL;
  223. static struct net_device *dev_bonds = NULL;
  224. MODULE_PARM(max_bonds, "1-" __MODULE_STRING(INT_MAX) "i");
  225. MODULE_PARM_DESC(max_bonds, "Max number of bonded devices");
  226. MODULE_PARM(miimon, "i");
  227. MODULE_PARM_DESC(miimon, "Link check interval in milliseconds");
  228. MODULE_PARM(mode, "i");
  229. MODULE_PARM(arp_interval, "i");
  230. MODULE_PARM_DESC(arp_interval, "arp interval in milliseconds");
  231. MODULE_PARM(arp_ip_target, "1-12s");
  232. MODULE_PARM_DESC(arp_ip_target, "arp target in n.n.n.n form");
  233. MODULE_PARM_DESC(mode, "Mode of operation : 0 for round robin, 1 for active-backup, 2 for xor");
  234. MODULE_PARM(updelay, "i");
  235. MODULE_PARM_DESC(updelay, "Delay before considering link up, in milliseconds");
  236. MODULE_PARM(downdelay, "i");
  237. MODULE_PARM_DESC(downdelay, "Delay before considering link down, in milliseconds");
  238. extern void arp_send( int type, int ptype, u32 dest_ip, struct net_device *dev,
  239. u32 src_ip, unsigned char *dest_hw, unsigned char *src_hw, 
  240. unsigned char *target_hw);
  241. static int bond_xmit_roundrobin(struct sk_buff *skb, struct net_device *dev);
  242. static int bond_xmit_xor(struct sk_buff *skb, struct net_device *dev);
  243. static int bond_xmit_activebackup(struct sk_buff *skb, struct net_device *dev);
  244. static struct net_device_stats *bond_get_stats(struct net_device *dev);
  245. static void bond_mii_monitor(struct net_device *dev);
  246. static void bond_arp_monitor(struct net_device *dev);
  247. static int bond_event(struct notifier_block *this, unsigned long event, void *ptr);
  248. static void bond_set_slave_inactive_flags(slave_t *slave);
  249. static void bond_set_slave_active_flags(slave_t *slave);
  250. static int bond_enslave(struct net_device *master, struct net_device *slave);
  251. static int bond_release(struct net_device *master, struct net_device *slave);
  252. static int bond_release_all(struct net_device *master);
  253. static int bond_sethwaddr(struct net_device *master, struct net_device *slave);
  254. /*
  255.  * bond_get_info is the interface into the /proc filesystem.  This is
  256.  * a different interface than the BOND_INFO_QUERY ioctl.  That is done
  257.  * through the generic networking ioctl interface, and bond_info_query
  258.  * is the internal function which provides that information.
  259.  */
  260. static int bond_get_info(char *buf, char **start, off_t offset, int length);
  261. /* #define BONDING_DEBUG 1 */
  262. /* several macros */
  263. #define IS_UP(dev) ((((dev)->flags & (IFF_UP)) == (IFF_UP)) && 
  264. (netif_running(dev) && netif_carrier_ok(dev)))
  265. static void bond_set_slave_inactive_flags(slave_t *slave)
  266. {
  267. slave->state = BOND_STATE_BACKUP;
  268. slave->dev->flags |= IFF_NOARP;
  269. }
  270. static void bond_set_slave_active_flags(slave_t *slave)
  271. {
  272. slave->state = BOND_STATE_ACTIVE;
  273. slave->dev->flags &= ~IFF_NOARP;
  274. }
  275. /* 
  276.  * This function detaches the slave <slave> from the list <bond>.
  277.  * WARNING: no check is made to verify if the slave effectively
  278.  * belongs to <bond>. It returns <slave> in case it's needed.
  279.  * Nothing is freed on return, structures are just unchained.
  280.  * If the bond->current_slave pointer was pointing to <slave>,
  281.  * it's replaced with slave->next, or <bond> if not applicable.
  282.  */
  283. static slave_t *bond_detach_slave(bonding_t *bond, slave_t *slave)
  284. {
  285. if ((bond == NULL) || (slave == NULL) ||
  286.    ((void *)bond == (void *)slave)) {
  287. printk(KERN_ERR
  288. "bond_detach_slave(): trying to detach "
  289. "slave %p from bond %pn", bond, slave);
  290. return slave;
  291. }
  292. if (bond->next == slave) {  /* is the slave at the head ? */
  293. if (bond->prev == slave) {  /* is the slave alone ? */
  294. write_lock(&bond->ptrlock);
  295. bond->current_slave = NULL; /* no slave anymore */
  296. write_unlock(&bond->ptrlock);
  297. bond->prev = bond->next = (slave_t *)bond;
  298. } else { /* not alone */
  299. bond->next        = slave->next;
  300. slave->next->prev = (slave_t *)bond;
  301. bond->prev->next  = slave->next;
  302. write_lock(&bond->ptrlock);
  303. if (bond->current_slave == slave) {
  304. bond->current_slave = slave->next;
  305. }
  306. write_unlock(&bond->ptrlock);
  307. }
  308. }
  309. else {
  310. slave->prev->next = slave->next;
  311. if (bond->prev == slave) {  /* is this slave the last one ? */
  312. bond->prev = slave->prev;
  313. } else {
  314. slave->next->prev = slave->prev;
  315. }
  316. write_lock(&bond->ptrlock);
  317. if (bond->current_slave == slave) {
  318. bond->current_slave = slave->next;
  319. }
  320. write_unlock(&bond->ptrlock);
  321. }
  322. return slave;
  323. }
  324. /* 
  325.  * if <dev> supports MII link status reporting, check its link
  326.  * and report it as a bit field in a short int :
  327.  *   - 0x04 means link is up,
  328.  *   - 0x20 means end of autonegociation
  329.  * If the device doesn't support MII, then we only report 0x24,
  330.  * meaning that the link is up and running since we can't check it.
  331.  */
  332. static u16 bond_check_dev_link(struct net_device *dev)
  333. {
  334. static int (* ioctl)(struct net_device *, struct ifreq *, int);
  335. struct ifreq ifr;
  336. u16 *data = (u16 *)&ifr.ifr_data;
  337. /* data[0] automagically filled by the ioctl */
  338. data[1] = 1; /* MII location 1 reports Link Status */
  339. if (((ioctl = dev->do_ioctl) != NULL) &&  /* ioctl to access MII */
  340.     (ioctl(dev, &ifr, SIOCGMIIPHY) == 0)) {
  341. /* now, data[3] contains info about link status :
  342.    - data[3] & 0x04 means link up
  343.    - data[3] & 0x20 means end of auto-negociation
  344. */
  345. return data[3];
  346. } else {
  347. return MII_LINK_READY;  /* spoof link up ( we can't check it) */
  348. }
  349. }
  350. static u16 bond_check_mii_link(bonding_t *bond)
  351. {
  352. int has_active_interface = 0;
  353. unsigned long flags;
  354. read_lock_irqsave(&bond->lock, flags);
  355. read_lock(&bond->ptrlock);
  356. has_active_interface = (bond->current_slave != NULL);
  357. read_unlock(&bond->ptrlock);
  358. read_unlock_irqrestore(&bond->lock, flags);
  359. return (has_active_interface ? MII_LINK_READY : 0);
  360. }
  361. static int bond_open(struct net_device *dev)
  362. {
  363. struct timer_list *timer = &((struct bonding *)(dev->priv))->mii_timer;
  364. struct timer_list *arp_timer = &((struct bonding *)(dev->priv))->arp_timer;
  365. MOD_INC_USE_COUNT;
  366. if (miimon > 0) {  /* link check interval, in milliseconds. */
  367. init_timer(timer);
  368. timer->expires  = jiffies + (miimon * HZ / 1000);
  369. timer->data     = (unsigned long)dev;
  370. timer->function = (void *)&bond_mii_monitor;
  371. add_timer(timer);
  372. }
  373. if (arp_interval> 0) {  /* arp interval, in milliseconds. */
  374. init_timer(arp_timer);
  375. arp_timer->expires  = jiffies + (arp_interval * HZ / 1000);
  376. arp_timer->data     = (unsigned long)dev;
  377. arp_timer->function = (void *)&bond_arp_monitor;
  378. add_timer(arp_timer);
  379. }
  380. return 0;
  381. }
  382. static int bond_close(struct net_device *master)
  383. {
  384. bonding_t *bond = (struct bonding *) master->priv;
  385. unsigned long flags;
  386. write_lock_irqsave(&bond->lock, flags);
  387. if (miimon > 0) {  /* link check interval, in milliseconds. */
  388. del_timer(&bond->mii_timer);
  389. }
  390. if (arp_interval> 0) {  /* arp interval, in milliseconds. */
  391. del_timer(&bond->arp_timer);
  392. }
  393. /* Release the bonded slaves */
  394. bond_release_all(master);
  395. write_unlock_irqrestore(&bond->lock, flags);
  396. MOD_DEC_USE_COUNT;
  397. return 0;
  398. }
  399. static void set_multicast_list(struct net_device *master)
  400. {
  401. /*
  402. bonding_t *bond = master->priv;
  403. slave_t *slave;
  404. for (slave = bond->next; slave != (slave_t*)bond; slave = slave->next) {
  405. slave->dev->mc_list = master->mc_list;
  406. slave->dev->mc_count = master->mc_count;
  407. slave->dev->flags = master->flags;
  408. slave->dev->set_multicast_list(slave->dev);
  409. }
  410.  */
  411. }
  412. /*
  413.  * This function counts the the number of attached 
  414.  * slaves for use by bond_xmit_xor.
  415.  */
  416. static void update_slave_cnt(bonding_t *bond)
  417. {
  418. slave_t *slave = NULL;
  419. bond->slave_cnt = 0;
  420. for (slave = bond->prev; slave != (slave_t*)bond; slave = slave->prev) {
  421. bond->slave_cnt++;
  422. }
  423. }
  424. /* enslave device <slave> to bond device <master> */
  425. static int bond_enslave(struct net_device *master_dev, 
  426.                         struct net_device *slave_dev)
  427. {
  428. bonding_t *bond = NULL;
  429. slave_t *new_slave = NULL;
  430. unsigned long flags = 0;
  431. int ndx = 0;
  432. int err = 0;
  433. if (master_dev == NULL || slave_dev == NULL) {
  434. return -ENODEV;
  435. }
  436. bond = (struct bonding *) master_dev->priv;
  437. if (slave_dev->do_ioctl == NULL) {
  438. printk(KERN_DEBUG
  439. "Warning : no link monitoring support for %sn",
  440. slave_dev->name);
  441. }
  442. write_lock_irqsave(&bond->lock, flags);
  443. /* not running. */
  444. if ((slave_dev->flags & IFF_UP) != IFF_UP) {
  445. #ifdef BONDING_DEBUG
  446. printk(KERN_CRIT "Error, slave_dev is not runningn");
  447. #endif
  448. write_unlock_irqrestore(&bond->lock, flags);
  449. return -EINVAL;
  450. }
  451. /* already enslaved */
  452. if (master_dev->flags & IFF_SLAVE || slave_dev->flags & IFF_SLAVE) {
  453. #ifdef BONDING_DEBUG
  454. printk(KERN_CRIT "Error, Device was already enslavedn");
  455. #endif
  456. write_unlock_irqrestore(&bond->lock, flags);
  457. return -EBUSY;
  458. }
  459.    
  460. if ((new_slave = kmalloc(sizeof(slave_t), GFP_KERNEL)) == NULL) {
  461. write_unlock_irqrestore(&bond->lock, flags);
  462. return -ENOMEM;
  463. }
  464. memset(new_slave, 0, sizeof(slave_t));
  465. err = netdev_set_master(slave_dev, master_dev);
  466. if (err) {
  467. #ifdef BONDING_DEBUG
  468. printk(KERN_CRIT "Error %d calling netdev_set_mastern", err);
  469. #endif
  470. kfree(new_slave);
  471. write_unlock_irqrestore(&bond->lock, flags);
  472. return err;      
  473. }
  474. new_slave->dev = slave_dev;
  475. /* 
  476.  * queue to the end of the slaves list, make the first element its
  477.  * successor, the last one its predecessor, and make it the bond's
  478.  * predecessor. 
  479.  */
  480. new_slave->prev       = bond->prev;
  481. new_slave->prev->next = new_slave;
  482. bond->prev            = new_slave;
  483. new_slave->next       = bond->next;
  484. new_slave->delay = 0;
  485. new_slave->link_failure_count = 0;
  486. /* check for initial state */
  487. if ((miimon <= 0) || ((bond_check_dev_link(slave_dev) & MII_LINK_READY)
  488.  == MII_LINK_READY)) {
  489. #ifdef BONDING_DEBUG
  490. printk(KERN_CRIT "Initial state of slave_dev is BOND_LINK_UPn");
  491. #endif
  492. new_slave->link  = BOND_LINK_UP;
  493. }
  494. else {
  495. #ifdef BONDING_DEBUG
  496. printk(KERN_CRIT "Initial state of slave_dev is BOND_LINK_DOWNn");
  497. #endif
  498. new_slave->link  = BOND_LINK_DOWN;
  499. }
  500. /* if we're in active-backup mode, we need one and only one active
  501.  * interface. The backup interfaces will have their NOARP flag set
  502.  * because we need them to be completely deaf and not to respond to
  503.  * any ARP request on the network to avoid fooling a switch. Thus,
  504.  * since we guarantee that current_slave always point to the last
  505.  * usable interface, we just have to verify this interface's flag.
  506.  */
  507. if (mode == BOND_MODE_ACTIVEBACKUP) {
  508. if (((bond->current_slave == NULL)
  509. || (bond->current_slave->dev->flags & IFF_NOARP))
  510. && (new_slave->link == BOND_LINK_UP)) {
  511. #ifdef BONDING_DEBUG
  512. printk(KERN_CRIT "This is the first active slaven");
  513. #endif
  514. /* first slave or no active slave yet, and this link
  515.    is OK, so make this interface the active one */
  516. bond->current_slave = new_slave;
  517. bond_set_slave_active_flags(new_slave);
  518. }
  519. else {
  520. #ifdef BONDING_DEBUG
  521. printk(KERN_CRIT "This is just a backup slaven");
  522. #endif
  523. bond_set_slave_inactive_flags(new_slave);
  524. }
  525. } else {
  526. #ifdef BONDING_DEBUG
  527. printk(KERN_CRIT "This slave is always active in trunk moden");
  528. #endif
  529. /* always active in trunk mode */
  530. new_slave->state = BOND_STATE_ACTIVE;
  531. if (bond->current_slave == NULL) {
  532. bond->current_slave = new_slave;
  533. }
  534. }
  535. update_slave_cnt(bond);
  536. write_unlock_irqrestore(&bond->lock, flags);
  537. /*
  538.  * !!! This is to support old versions of ifenslave.  We can remove
  539.  * this in 2.5 because our ifenslave takes care of this for us.
  540.  * We check to see if the master has a mac address yet.  If not,
  541.  * we'll give it the mac address of our slave device.
  542.  */
  543. for (ndx = 0; ndx < slave_dev->addr_len; ndx++) {
  544. #ifdef BONDING_DEBUG
  545. printk(KERN_CRIT "Checking ndx=%d of master_dev->dev_addrn",
  546.        ndx);
  547. #endif
  548. if (master_dev->dev_addr[ndx] != 0) {
  549. #ifdef BONDING_DEBUG
  550. printk(KERN_CRIT "Found non-zero byte at ndx=%dn",
  551.        ndx);
  552. #endif
  553. break;
  554. }
  555. }
  556. if (ndx == slave_dev->addr_len) {
  557. /*
  558.  * We got all the way through the address and it was
  559.  * all 0's.
  560.  */
  561. #ifdef BONDING_DEBUG
  562. printk(KERN_CRIT "%s doesn't have a MAC address yet.  ",
  563.        master_dev->name);
  564. printk(KERN_CRIT "Going to give assign it from %s.n",
  565.        slave_dev->name);
  566. #endif
  567. bond_sethwaddr(master_dev, slave_dev);
  568. }
  569. printk (KERN_INFO "%s: enslaving %s as a%s interface with a%s link.n",
  570. master_dev->name, slave_dev->name,
  571. new_slave->state == BOND_STATE_ACTIVE ? "n active" : " backup",
  572. new_slave->link == BOND_LINK_UP ? "n up" : " down");
  573. return 0;
  574. }
  575. /* 
  576.  * This function changes the active slave to slave <slave_dev>.
  577.  * It returns -EINVAL in the following cases.
  578.  *  - <slave_dev> is not found in the list.
  579.  *  - There is not active slave now.
  580.  *  - <slave_dev> is already active.
  581.  *  - The link state of <slave_dev> is not BOND_LINK_UP.
  582.  *  - <slave_dev> is not running.
  583.  * In these cases, this fuction does nothing.
  584.  * In the other cases, currnt_slave pointer is changed and 0 is returned.
  585.  */
  586. static int bond_change_active(struct net_device *master_dev, struct net_device *slave_dev)
  587. {
  588. bonding_t *bond;
  589. slave_t *slave;
  590. slave_t *oldactive = NULL;
  591. slave_t *newactive = NULL;
  592. unsigned long flags;
  593. int ret = 0;
  594. if (master_dev == NULL || slave_dev == NULL) {
  595. return -ENODEV;
  596. }
  597. bond = (struct bonding *) master_dev->priv;
  598. write_lock_irqsave(&bond->lock, flags);
  599. slave = (slave_t *)bond;
  600. oldactive = bond->current_slave;
  601. while ((slave = slave->prev) != (slave_t *)bond) {
  602. if(slave_dev == slave->dev) {
  603. newactive = slave;
  604. break;
  605. }
  606. }
  607. if ((newactive != NULL)&&
  608.     (oldactive != NULL)&&
  609.     (newactive != oldactive)&&
  610.     (newactive->link == BOND_LINK_UP)&&
  611.     IS_UP(newactive->dev)) {
  612. bond_set_slave_inactive_flags(oldactive);
  613. bond_set_slave_active_flags(newactive);
  614. bond->current_slave = newactive;
  615. printk("%s : activate %s(old : %s)n",
  616. master_dev->name, newactive->dev->name, 
  617. oldactive->dev->name);
  618. }
  619. else {
  620. ret = -EINVAL;
  621. }
  622. write_unlock_irqrestore(&bond->lock, flags);
  623. return ret;
  624. }
  625. /* Choose a new valid interface from the pool, set it active
  626.  * and make it the current slave. If no valid interface is
  627.  * found, the oldest slave in BACK state is choosen and
  628.  * activated. If none is found, it's considered as no
  629.  * interfaces left so the current slave is set to NULL.
  630.  * The result is a pointer to the current slave.
  631.  *
  632.  * Since this function sends messages tails through printk, the caller
  633.  * must have started something like `printk(KERN_INFO "xxxx ");'.
  634.  *
  635.  * Warning: must put locks around the call to this function if needed.
  636.  */
  637. slave_t *change_active_interface(bonding_t *bond)
  638. {
  639. slave_t *newslave, *oldslave;
  640. slave_t *bestslave = NULL;
  641. int mintime;
  642. read_lock(&bond->ptrlock);
  643. newslave = oldslave = bond->current_slave;
  644. read_unlock(&bond->ptrlock);
  645. if (newslave == NULL) { /* there were no active slaves left */
  646. if (bond->next != (slave_t *)bond) {  /* found one slave */
  647. write_lock(&bond->ptrlock);
  648. newslave = bond->current_slave = bond->next;
  649. write_unlock(&bond->ptrlock);
  650. } else {
  651. printk (" but could not find any %s interface.n",
  652. (mode == BOND_MODE_ACTIVEBACKUP) ? "backup":"other");
  653. write_lock(&bond->ptrlock);
  654. bond->current_slave = (slave_t *)NULL;
  655. write_unlock(&bond->ptrlock);
  656. return NULL; /* still no slave, return NULL */
  657. }
  658. }
  659. mintime = updelay;
  660. do {
  661. if (IS_UP(newslave->dev)) {
  662. if (newslave->link == BOND_LINK_UP) {
  663. /* this one is immediately usable */
  664. if (mode == BOND_MODE_ACTIVEBACKUP) {
  665. bond_set_slave_active_flags(newslave);
  666. printk (" and making interface %s the active one.n",
  667. newslave->dev->name);
  668. }
  669. else {
  670. printk (" and setting pointer to interface %s.n",
  671. newslave->dev->name);
  672. }
  673. write_lock(&bond->ptrlock);
  674. bond->current_slave = newslave;
  675. write_unlock(&bond->ptrlock);
  676. return newslave;
  677. }
  678. else if (newslave->link == BOND_LINK_BACK) {
  679. /* link up, but waiting for stabilization */
  680. if (newslave->delay < mintime) {
  681. mintime = newslave->delay;
  682. bestslave = newslave;
  683. }
  684. }
  685. }
  686. } while ((newslave = newslave->next) != oldslave);
  687. /* no usable backup found, we'll see if we at least got a link that was
  688.    coming back for a long time, and could possibly already be usable.
  689. */
  690. if (bestslave != NULL) {
  691. /* early take-over. */
  692. printk (" and making interface %s the active one %d ms earlier.n",
  693. bestslave->dev->name,
  694. (updelay - bestslave->delay)*miimon);
  695. bestslave->delay = 0;
  696. bestslave->link = BOND_LINK_UP;
  697. bond_set_slave_active_flags(bestslave);
  698. write_lock(&bond->ptrlock);
  699. bond->current_slave = bestslave;
  700. write_unlock(&bond->ptrlock);
  701. return bestslave;
  702. }
  703. printk (" but could not find any %s interface.n",
  704. (mode == BOND_MODE_ACTIVEBACKUP) ? "backup":"other");
  705. /* absolutely nothing found. let's return NULL */
  706. write_lock(&bond->ptrlock);
  707. bond->current_slave = (slave_t *)NULL;
  708. write_unlock(&bond->ptrlock);
  709. return NULL;
  710. }
  711. /*
  712.  * Try to release the slave device <slave> from the bond device <master>
  713.  * It is legal to access current_slave without a lock because all the function
  714.  * is write-locked.
  715.  *
  716.  * The rules for slave state should be:
  717.  *   for Active/Backup:
  718.  *     Active stays on all backups go down
  719.  *   for Bonded connections:
  720.  *     The first up interface should be left on and all others downed.
  721.  */
  722. static int bond_release(struct net_device *master, struct net_device *slave)
  723. {
  724. bonding_t *bond;
  725. slave_t *our_slave, *old_current;
  726. unsigned long flags;
  727. if (master == NULL || slave == NULL)  {
  728. return -ENODEV;
  729. }
  730. bond = (struct bonding *) master->priv;
  731. write_lock_irqsave(&bond->lock, flags);
  732. /* master already enslaved, or slave not enslaved,
  733.    or no slave for this master */
  734. if ((master->flags & IFF_SLAVE) || !(slave->flags & IFF_SLAVE)) {
  735. printk (KERN_DEBUG "%s: cannot release %s.n", master->name, slave->name);
  736. write_unlock_irqrestore(&bond->lock, flags);
  737. return -EINVAL;
  738. }
  739. our_slave = (slave_t *)bond;
  740. old_current = bond->current_slave;
  741. while ((our_slave = our_slave->prev) != (slave_t *)bond) {
  742. if (our_slave->dev == slave) {
  743. bond_detach_slave(bond, our_slave);
  744. printk (KERN_INFO "%s: releasing %s interface %s",
  745. master->name,
  746. (our_slave->state == BOND_STATE_ACTIVE) ? "active" : "backup",
  747. slave->name);
  748. if (our_slave == old_current) {
  749. /* find a new interface and be verbose */
  750. change_active_interface(bond); 
  751. } else {
  752. printk(".n");
  753. }
  754. kfree(our_slave);
  755. /* release the slave from its bond */
  756.  
  757. netdev_set_master(slave, NULL);
  758. /* only restore its RUNNING flag if monitoring set it down */
  759. if (slave->flags & IFF_UP) {
  760. slave->flags |= IFF_RUNNING;
  761. }
  762. if (slave->flags & IFF_NOARP || 
  763. bond->current_slave != NULL) {
  764. dev_close(slave);
  765. }
  766. if (bond->current_slave == NULL) {
  767. printk(KERN_INFO
  768. "%s: now running without any active interface !n",
  769. master->name);
  770. }
  771. update_slave_cnt(bond);
  772. write_unlock_irqrestore(&bond->lock, flags);
  773. return 0;  /* deletion OK */
  774. }
  775. }
  776. /* if we get here, it's because the device was not found */
  777. write_unlock_irqrestore(&bond->lock, flags);
  778. printk (KERN_INFO "%s: %s not enslavedn", master->name, slave->name);
  779. return -EINVAL;
  780. }
  781. /* 
  782.  * This function releases all slaves.
  783.  * Warning: must put write-locks around the call to this function.
  784.  */
  785. static int bond_release_all(struct net_device *master)
  786. {
  787. bonding_t *bond;
  788. slave_t *our_slave;
  789. struct net_device *slave_dev;
  790. if (master == NULL)  {
  791. return -ENODEV;
  792. }
  793. if (master->flags & IFF_SLAVE) {
  794. return -EINVAL;
  795. }
  796. bond = (struct bonding *) master->priv;
  797. bond->current_slave = NULL;
  798. while ((our_slave = bond->prev) != (slave_t *)bond) {
  799. slave_dev = our_slave->dev;
  800. bond->prev = our_slave->prev;
  801. kfree(our_slave);
  802. netdev_set_master(slave_dev, NULL);
  803. /* only restore its RUNNING flag if monitoring set it down */
  804. if (slave_dev->flags & IFF_UP)
  805. slave_dev->flags |= IFF_RUNNING;
  806. if (slave_dev->flags & IFF_NOARP)
  807. dev_close(slave_dev);
  808. }
  809. bond->next = (slave_t *)bond;
  810. bond->slave_cnt = 0;
  811. printk (KERN_INFO "%s: releases all slavesn", master->name);
  812. return 0;
  813. }
  814. /* this function is called regularly to monitor each slave's link. */
  815. static void bond_mii_monitor(struct net_device *master)
  816. {
  817. bonding_t *bond = (struct bonding *) master->priv;
  818. slave_t *slave, *bestslave, *oldcurrent;
  819. unsigned long flags;
  820. int slave_died = 0;
  821. read_lock_irqsave(&bond->lock, flags);
  822. /* we will try to read the link status of each of our slaves, and
  823.  * set their IFF_RUNNING flag appropriately. For each slave not
  824.  * supporting MII status, we won't do anything so that a user-space
  825.  * program could monitor the link itself if needed.
  826.  */
  827. bestslave = NULL;
  828. slave = (slave_t *)bond;
  829. read_lock(&bond->ptrlock);
  830. oldcurrent = bond->current_slave;
  831. read_unlock(&bond->ptrlock);
  832. while ((slave = slave->prev) != (slave_t *)bond) {
  833. /* use updelay+1 to match an UP slave even when updelay is 0 */
  834. int mindelay = updelay + 1;
  835. struct net_device *dev = slave->dev;
  836. u16 link_state;
  837. link_state = bond_check_dev_link(dev);
  838. switch (slave->link) {
  839. case BOND_LINK_UP: /* the link was up */
  840. if ((link_state & MII_LINK_UP) == MII_LINK_UP) {
  841. /* link stays up, tell that this one
  842.    is immediately available */
  843. if (IS_UP(dev) && (mindelay > -2)) {
  844. /* -2 is the best case :
  845.    this slave was already up */
  846. mindelay = -2;
  847. bestslave = slave;
  848. }
  849. break;
  850. }
  851. else { /* link going down */
  852. slave->link  = BOND_LINK_FAIL;
  853. slave->delay = downdelay;
  854. if (slave->link_failure_count < UINT_MAX) {
  855. slave->link_failure_count++;
  856. }
  857. if (downdelay > 0) {
  858. printk (KERN_INFO
  859. "%s: link status down for %sinterface "
  860. "%s, disabling it in %d ms.n",
  861. master->name,
  862. IS_UP(dev)
  863. ? ((mode == BOND_MODE_ACTIVEBACKUP)
  864.    ? ((slave == oldcurrent)
  865.       ? "active " : "backup ")
  866.    : "")
  867. : "idle ",
  868. dev->name,
  869. downdelay * miimon);
  870. }
  871. }
  872. /* no break ! fall through the BOND_LINK_FAIL test to
  873.    ensure proper action to be taken
  874. */
  875. case BOND_LINK_FAIL: /* the link has just gone down */
  876. if ((link_state & MII_LINK_UP) == 0) {
  877. /* link stays down */
  878. if (slave->delay <= 0) {
  879. /* link down for too long time */
  880. slave->link = BOND_LINK_DOWN;
  881. /* in active/backup mode, we must
  882.    completely disable this interface */
  883. if (mode == BOND_MODE_ACTIVEBACKUP) {
  884. bond_set_slave_inactive_flags(slave);
  885. }
  886. printk(KERN_INFO
  887. "%s: link status definitely down "
  888. "for interface %s, disabling it",
  889. master->name,
  890. dev->name);
  891. read_lock(&bond->ptrlock);
  892. if (slave == bond->current_slave) {
  893. read_unlock(&bond->ptrlock);
  894. /* find a new interface and be verbose */
  895. change_active_interface(bond);
  896. } else {
  897. read_unlock(&bond->ptrlock);
  898. printk(".n");
  899. }
  900. slave_died = 1;
  901. } else {
  902. slave->delay--;
  903. }
  904. } else if ((link_state & MII_LINK_READY) == MII_LINK_READY) {
  905. /* link up again */
  906. slave->link  = BOND_LINK_UP;
  907. printk(KERN_INFO
  908. "%s: link status up again after %d ms "
  909. "for interface %s.n",
  910. master->name,
  911. (downdelay - slave->delay) * miimon,
  912. dev->name);
  913. if (IS_UP(dev) && (mindelay > -1)) {
  914. /* -1 is a good case : this slave went
  915.    down only for a short time */
  916. mindelay = -1;
  917. bestslave = slave;
  918. }
  919. }
  920. break;
  921. case BOND_LINK_DOWN: /* the link was down */
  922. if ((link_state & MII_LINK_READY) != MII_LINK_READY) {
  923. /* the link stays down, nothing more to do */
  924. break;
  925. } else { /* link going up */
  926. slave->link  = BOND_LINK_BACK;
  927. slave->delay = updelay;
  928. if (updelay > 0) {
  929. /* if updelay == 0, no need to
  930.    advertise about a 0 ms delay */
  931. printk (KERN_INFO
  932. "%s: link status up for interface"
  933. " %s, enabling it in %d ms.n",
  934. master->name,
  935. dev->name,
  936. updelay * miimon);
  937. }
  938. }
  939. /* no break ! fall through the BOND_LINK_BACK state in
  940.    case there's something to do.
  941. */
  942. case BOND_LINK_BACK: /* the link has just come back */
  943. if ((link_state & MII_LINK_UP) == 0) {
  944. /* link down again */
  945. slave->link  = BOND_LINK_DOWN;
  946. printk(KERN_INFO
  947. "%s: link status down again after %d ms "
  948. "for interface %s.n",
  949. master->name,
  950. (updelay - slave->delay) * miimon,
  951. dev->name);
  952. }
  953. else if ((link_state & MII_LINK_READY) == MII_LINK_READY) {
  954. /* link stays up */
  955. if (slave->delay == 0) {
  956. /* now the link has been up for long time enough */
  957. slave->link = BOND_LINK_UP;
  958. if (mode == BOND_MODE_ACTIVEBACKUP) {
  959. /* prevent it from being the active one */
  960. slave->state = BOND_STATE_BACKUP;
  961. }
  962. else {
  963. /* make it immediately active */
  964. slave->state = BOND_STATE_ACTIVE;
  965. }
  966. printk(KERN_INFO
  967. "%s: link status definitely up "
  968. "for interface %s.n",
  969. master->name,
  970. dev->name);
  971. }
  972. else
  973. slave->delay--;
  974. /* we'll also look for the mostly eligible slave */
  975. if (IS_UP(dev) && (slave->delay < mindelay)) {
  976. mindelay = slave->delay;
  977. bestslave = slave;
  978. }
  979. break;
  980. } /* end of switch */
  981. } /* end of while */
  982. /* 
  983.  * if there's no active interface and we discovered that one
  984.  * of the slaves could be activated earlier, so we do it.
  985.  */
  986. read_lock(&bond->ptrlock);
  987. oldcurrent = bond->current_slave;
  988. read_unlock(&bond->ptrlock);
  989. if (oldcurrent == NULL) {  /* no active interface at the moment */
  990. if (bestslave != NULL) { /* last chance to find one ? */
  991. if (bestslave->link == BOND_LINK_UP) {
  992. printk (KERN_INFO
  993. "%s: making interface %s the new active one.n",
  994. master->name, bestslave->dev->name);
  995. } else {
  996. printk (KERN_INFO
  997. "%s: making interface %s the new "
  998. "active one %d ms earlier.n",
  999. master->name, bestslave->dev->name,
  1000. (updelay - bestslave->delay) * miimon);
  1001. bestslave->delay= 0;
  1002. bestslave->link = BOND_LINK_UP;
  1003. }
  1004. if (mode == BOND_MODE_ACTIVEBACKUP) {
  1005. bond_set_slave_active_flags(bestslave);
  1006. } else {
  1007. bestslave->state = BOND_STATE_ACTIVE;
  1008. }
  1009. write_lock(&bond->ptrlock);
  1010. bond->current_slave = bestslave;
  1011. write_unlock(&bond->ptrlock);
  1012. } else if (slave_died) {
  1013. /* print this message only once a slave has just died */
  1014. printk(KERN_INFO
  1015. "%s: now running without any active interface !n",
  1016. master->name);
  1017. }
  1018. }
  1019. read_unlock_irqrestore(&bond->lock, flags);
  1020. /* re-arm the timer */
  1021. mod_timer(&bond->mii_timer, jiffies + (miimon * HZ / 1000));
  1022. }
  1023. /* 
  1024.  * this function is called regularly to monitor each slave's link 
  1025.  * insuring that traffic is being sent and received.  If the adapter
  1026.  * has been dormant, then an arp is transmitted to generate traffic 
  1027.  */
  1028. static void bond_arp_monitor(struct net_device *master)
  1029. {
  1030. bonding_t *bond;
  1031. unsigned long flags;
  1032. slave_t *slave;
  1033. int the_delta_in_ticks =  arp_interval * HZ / 1000;
  1034. int next_timer = jiffies + (arp_interval * HZ / 1000);
  1035. bond = (struct bonding *) master->priv; 
  1036. if (master->priv == NULL) {
  1037. mod_timer(&bond->arp_timer, next_timer);
  1038. return;
  1039. }
  1040. read_lock_irqsave(&bond->lock, flags);
  1041. if (!IS_UP(master)) {
  1042. mod_timer(&bond->arp_timer, next_timer);
  1043. goto arp_monitor_out;
  1044. }
  1045. if (rtnl_shlock_nowait()) {
  1046. goto arp_monitor_out;
  1047. }
  1048. if (rtnl_exlock_nowait()) {
  1049. rtnl_shunlock();
  1050. goto arp_monitor_out;
  1051. }
  1052. /* see if any of the previous devices are up now (i.e. they have seen a 
  1053.  * response from an arp request sent by another adapter, since they 
  1054.  * have the same hardware address).
  1055.  */
  1056. slave = (slave_t *)bond;
  1057. while ((slave = slave->prev) != (slave_t *)bond)  {
  1058. read_lock(&bond->ptrlock);
  1059.    if ( (!(slave->link == BOND_LINK_UP))  
  1060. && (slave!= bond->current_slave) ) {
  1061. read_unlock(&bond->ptrlock);
  1062.    if ( ((jiffies - slave->dev->trans_start) <= 
  1063. the_delta_in_ticks) &&  
  1064.      ((jiffies - slave->dev->last_rx) <= 
  1065. the_delta_in_ticks) ) {
  1066. slave->link  = BOND_LINK_UP;
  1067. write_lock(&bond->ptrlock);
  1068. if (bond->current_slave == NULL) {
  1069. slave->state = BOND_STATE_ACTIVE;
  1070. bond->current_slave = slave;
  1071. }
  1072. if (slave!=bond->current_slave) {
  1073. slave->dev->flags |= IFF_NOARP;
  1074. }
  1075. write_unlock(&bond->ptrlock);
  1076. } else {
  1077. if ((jiffies - slave->dev->last_rx) <= 
  1078. the_delta_in_ticks)  {
  1079. arp_send(ARPOP_REQUEST, ETH_P_ARP, 
  1080. arp_target, slave->dev, 
  1081. my_ip, arp_target_hw_addr, 
  1082. slave->dev->dev_addr, 
  1083.    arp_target_hw_addr); 
  1084. }
  1085. }
  1086. } else 
  1087. read_unlock(&bond->ptrlock);
  1088. }
  1089. read_lock(&bond->ptrlock);
  1090. slave = bond->current_slave;
  1091. read_unlock(&bond->ptrlock);
  1092. if (slave != 0) {
  1093.   /* see if you need to take down the current_slave, since
  1094.    * you haven't seen an arp in 2*arp_intervals
  1095.    */
  1096. if ( ((jiffies - slave->dev->trans_start) >= 
  1097.       (2*the_delta_in_ticks)) ||
  1098.      ((jiffies - slave->dev->last_rx) >= 
  1099.       (2*the_delta_in_ticks)) ) {
  1100. if (slave->link == BOND_LINK_UP) {
  1101. slave->link  = BOND_LINK_DOWN;
  1102. slave->state = BOND_STATE_BACKUP;
  1103. /* 
  1104.  * we want to see arps, otherwise we couldn't 
  1105.  * bring the adapter back online...  
  1106.  */
  1107. printk(KERN_INFO "%s: link status definitely "
  1108.  "down for interface %s, "
  1109.  "disabling it",
  1110.        slave->dev->master->name,
  1111.        slave->dev->name);
  1112. /* find a new interface and be verbose */
  1113. change_active_interface(bond);
  1114. read_lock(&bond->ptrlock);
  1115. slave = bond->current_slave;
  1116. read_unlock(&bond->ptrlock);
  1117. }
  1118. /* 
  1119.  * ok, we know up/down, so just send a arp out if there has
  1120.  * been no activity for a while 
  1121.  */
  1122. if (slave != NULL ) {
  1123. if ( ((jiffies - slave->dev->trans_start) >= 
  1124.        the_delta_in_ticks) || 
  1125.      ((jiffies - slave->dev->last_rx) >= 
  1126.        the_delta_in_ticks) ) {
  1127. arp_send(ARPOP_REQUEST, ETH_P_ARP, 
  1128.  arp_target, slave->dev,
  1129.  my_ip, arp_target_hw_addr, 
  1130.  slave->dev->dev_addr, 
  1131.  arp_target_hw_addr); 
  1132. }
  1133. }
  1134. /* if we have no current slave.. try sending 
  1135.  * an arp on all of the interfaces 
  1136.  */
  1137. read_lock(&bond->ptrlock);
  1138. if (bond->current_slave == NULL) { 
  1139. read_unlock(&bond->ptrlock);
  1140. slave = (slave_t *)bond;
  1141. while ((slave = slave->prev) != (slave_t *)bond)   {
  1142. arp_send(ARPOP_REQUEST, ETH_P_ARP, arp_target, 
  1143.  slave->dev, my_ip, arp_target_hw_addr, 
  1144.  slave->dev->dev_addr, arp_target_hw_addr); 
  1145. }
  1146. }
  1147. else {
  1148. read_unlock(&bond->ptrlock);
  1149. }
  1150. rtnl_exunlock();
  1151. rtnl_shunlock();
  1152. arp_monitor_out:
  1153. read_unlock_irqrestore(&bond->lock, flags);
  1154. /* re-arm the timer */
  1155. mod_timer(&bond->arp_timer, next_timer);
  1156. }
  1157. #define isdigit(c) (c >= '0' && c <= '9')
  1158. __inline static int atoi( char **s) 
  1159. {
  1160. int i=0;
  1161. while (isdigit(**s))
  1162.   i = i*20 + *((*s)++) - '0';
  1163. return i;
  1164. }
  1165. #define isascii(c) (((unsigned char)(c))<=0x7f)
  1166. #define LF 0xA
  1167. #define isspace(c) (c==' ' || c==' '|| c==LF)   
  1168. typedef uint32_t in_addr_t;
  1169. int
  1170. my_inet_aton(char *cp, unsigned long *the_addr) {
  1171. static const in_addr_t max[4] = { 0xffffffff, 0xffffff, 0xffff, 0xff };
  1172. in_addr_t val;
  1173. char c;
  1174. union iaddr {
  1175.   uint8_t bytes[4];
  1176.   uint32_t word;
  1177. } res;
  1178. uint8_t *pp = res.bytes;
  1179. int digit,base;
  1180. res.word = 0;
  1181. c = *cp;
  1182. for (;;) {
  1183. /*
  1184.  * Collect number up to ``.''.
  1185.  * Values are specified as for C:
  1186.  * 0x=hex, 0=octal, isdigit=decimal.
  1187.  */
  1188. if (!isdigit(c)) goto ret_0;
  1189. val = 0; base = 10; digit = 0;
  1190. for (;;) {
  1191. if (isdigit(c)) {
  1192. val = (val * base) + (c - '0');
  1193. c = *++cp;
  1194. digit = 1;
  1195. } else {
  1196. break;
  1197. }
  1198. }
  1199. if (c == '.') {
  1200. /*
  1201.  * Internet format:
  1202.  * a.b.c.d
  1203.  * a.b.c (with c treated as 16 bits)
  1204.  * a.b (with b treated as 24 bits)
  1205.  */
  1206. if (pp > res.bytes + 2 || val > 0xff) {
  1207. goto ret_0;
  1208. }
  1209. *pp++ = val;
  1210. c = *++cp;
  1211. } else
  1212. break;
  1213. }
  1214. /*
  1215.  * Check for trailing characters.
  1216.  */
  1217. if (c != '' && (!isascii(c) || !isspace(c))) {
  1218. goto ret_0;
  1219. }
  1220. /*
  1221.  * Did we get a valid digit?
  1222.  */
  1223. if (!digit) {
  1224. goto ret_0;
  1225. }
  1226. /* Check whether the last part is in its limits depending on
  1227.    the number of parts in total.  */
  1228. if (val > max[pp - res.bytes]) {
  1229. goto ret_0;
  1230. }
  1231. if (the_addr!= NULL) {
  1232. *the_addr = res.word | htonl (val);
  1233. }
  1234. return (1);
  1235. ret_0:
  1236. return (0);
  1237. }
  1238. static int bond_sethwaddr(struct net_device *master, struct net_device *slave)
  1239. {
  1240. #ifdef BONDING_DEBUG
  1241. printk(KERN_CRIT "bond_sethwaddr: master=%xn", (unsigned int)master);
  1242. printk(KERN_CRIT "bond_sethwaddr: slave=%xn", (unsigned int)slave);
  1243. printk(KERN_CRIT "bond_sethwaddr: slave->addr_len=%dn", slave->addr_len);
  1244. #endif
  1245. memcpy(master->dev_addr, slave->dev_addr, slave->addr_len);
  1246. return 0;
  1247. }
  1248. static int bond_info_query(struct net_device *master, struct ifbond *info)
  1249. {
  1250. bonding_t *bond = (struct bonding *) master->priv;
  1251. slave_t *slave;
  1252. unsigned long flags;
  1253. info->bond_mode = mode;
  1254. info->num_slaves = 0;
  1255. info->miimon = miimon;
  1256. read_lock_irqsave(&bond->lock, flags);
  1257. for (slave = bond->prev; slave!=(slave_t *)bond; slave = slave->prev) {
  1258. info->num_slaves++;
  1259. }
  1260. read_unlock_irqrestore(&bond->lock, flags);
  1261. return 0;
  1262. }
  1263. static int bond_slave_info_query(struct net_device *master, 
  1264. struct ifslave *info)
  1265. {
  1266. bonding_t *bond = (struct bonding *) master->priv;
  1267. slave_t *slave;
  1268. int cur_ndx = 0;
  1269. unsigned long flags;
  1270. if (info->slave_id < 0) {
  1271. return -ENODEV;
  1272. }
  1273. read_lock_irqsave(&bond->lock, flags);
  1274. for (slave = bond->prev; 
  1275.  slave != (slave_t *)bond && cur_ndx < info->slave_id; 
  1276.  slave = slave->prev) {
  1277. cur_ndx++;
  1278. }
  1279. read_unlock_irqrestore(&bond->lock, flags);
  1280. if (cur_ndx == info->slave_id) {
  1281. strcpy(info->slave_name, slave->dev->name);
  1282. info->link = slave->link;
  1283. info->state = slave->state;
  1284. info->link_failure_count = slave->link_failure_count;
  1285. } else {
  1286. return -ENODEV;
  1287. }
  1288. return 0;
  1289. }
  1290. static int bond_ioctl(struct net_device *master_dev, struct ifreq *ifr, int cmd)
  1291. {
  1292. struct net_device *slave_dev = NULL;
  1293. struct ifbond *u_binfo = NULL, k_binfo;
  1294. struct ifslave *u_sinfo = NULL, k_sinfo;
  1295. u16 *data = NULL;
  1296. int ret = 0;
  1297. #ifdef BONDING_DEBUG
  1298. printk(KERN_INFO "bond_ioctl: master=%s, cmd=%dn", 
  1299. master_dev->name, cmd);
  1300. #endif
  1301. switch (cmd) {
  1302. case SIOCGMIIPHY:
  1303. data = (u16 *)&ifr->ifr_data;
  1304. if (data == NULL) {
  1305. return -EINVAL;
  1306. }
  1307. data[0] = 0;
  1308. /* Fall Through */
  1309. case SIOCGMIIREG:
  1310. /* 
  1311.  * We do this again just in case we were called by SIOCGMIIREG
  1312.  * instead of SIOCGMIIPHY.
  1313.  */
  1314. data = (u16 *)&ifr->ifr_data;
  1315. if (data == NULL) {
  1316. return -EINVAL;
  1317. }
  1318. if (data[1] == 1) {
  1319. data[3] = bond_check_mii_link(
  1320. (struct bonding *)master_dev->priv);
  1321. }
  1322. return 0;
  1323. case BOND_INFO_QUERY_OLD:
  1324. case SIOCBONDINFOQUERY:
  1325. u_binfo = (struct ifbond *)ifr->ifr_data;
  1326. if (copy_from_user(&k_binfo, u_binfo, sizeof(ifbond))) {
  1327. return -EFAULT;
  1328. }
  1329. ret = bond_info_query(master_dev, &k_binfo);
  1330. if (ret == 0) {
  1331. if (copy_to_user(u_binfo, &k_binfo, sizeof(ifbond))) {
  1332. return -EFAULT;
  1333. }
  1334. }
  1335. return ret;
  1336. case BOND_SLAVE_INFO_QUERY_OLD:
  1337. case SIOCBONDSLAVEINFOQUERY:
  1338. u_sinfo = (struct ifslave *)ifr->ifr_data;
  1339. if (copy_from_user(&k_sinfo, u_sinfo, sizeof(ifslave))) {
  1340. return -EFAULT;
  1341. }
  1342. ret = bond_slave_info_query(master_dev, &k_sinfo);
  1343. if (ret == 0) {
  1344. if (copy_to_user(u_sinfo, &k_sinfo, sizeof(ifslave))) {
  1345. return -EFAULT;
  1346. }
  1347. }
  1348. return ret;
  1349. }
  1350. if (!capable(CAP_NET_ADMIN)) {
  1351. return -EPERM;
  1352. }
  1353. slave_dev = dev_get_by_name(ifr->ifr_slave);
  1354. #ifdef BONDING_DEBUG
  1355. printk(KERN_INFO "slave_dev=%x: n", (unsigned int)slave_dev);
  1356. printk(KERN_INFO "slave_dev->name=%s: n", slave_dev->name);
  1357. #endif
  1358. if (slave_dev == NULL) {
  1359. ret = -ENODEV;
  1360. } else {
  1361. switch (cmd) {
  1362. case BOND_ENSLAVE_OLD:
  1363. case SIOCBONDENSLAVE:
  1364. ret = bond_enslave(master_dev, slave_dev);
  1365. break;
  1366. case BOND_RELEASE_OLD:
  1367. case SIOCBONDRELEASE:
  1368. ret = bond_release(master_dev, slave_dev); 
  1369. break;
  1370. case BOND_SETHWADDR_OLD:
  1371. case SIOCBONDSETHWADDR:
  1372. ret = bond_sethwaddr(master_dev, slave_dev);
  1373. break;
  1374. case BOND_CHANGE_ACTIVE_OLD:
  1375. case SIOCBONDCHANGEACTIVE:
  1376. if (mode == BOND_MODE_ACTIVEBACKUP) {
  1377. ret = bond_change_active(master_dev, slave_dev);
  1378. }
  1379. else {
  1380. ret = -EINVAL;
  1381. }
  1382. break;
  1383. default:
  1384. ret = -EOPNOTSUPP;
  1385. }
  1386. dev_put(slave_dev);
  1387. }
  1388. return ret;
  1389. }
  1390. #ifdef CONFIG_NET_FASTROUTE
  1391. static int bond_accept_fastpath(struct net_device *dev, struct dst_entry *dst)
  1392. {
  1393. return -1;
  1394. }
  1395. #endif
  1396. static int bond_xmit_roundrobin(struct sk_buff *skb, struct net_device *dev)
  1397. {
  1398. slave_t *slave, *start_at;
  1399. struct bonding *bond = (struct bonding *) dev->priv;
  1400. unsigned long flags;
  1401. if (!IS_UP(dev)) { /* bond down */
  1402. dev_kfree_skb(skb);
  1403. return 0;
  1404. }
  1405. read_lock_irqsave(&bond->lock, flags);
  1406. read_lock(&bond->ptrlock);
  1407. slave = start_at = bond->current_slave;
  1408. read_unlock(&bond->ptrlock);
  1409. if (slave == NULL) { /* we're at the root, get the first slave */
  1410. /* no suitable interface, frame not sent */
  1411. dev_kfree_skb(skb);
  1412. read_unlock_irqrestore(&bond->lock, flags);
  1413. return 0;
  1414. }
  1415. do {
  1416. if (IS_UP(slave->dev)
  1417.     && (slave->link == BOND_LINK_UP)
  1418.     && (slave->state == BOND_STATE_ACTIVE)) {
  1419. skb->dev = slave->dev;
  1420. skb->priority = 1;
  1421. dev_queue_xmit(skb);
  1422. write_lock(&bond->ptrlock);
  1423. bond->current_slave = slave->next;
  1424. write_unlock(&bond->ptrlock);
  1425. read_unlock_irqrestore(&bond->lock, flags);
  1426. return 0;
  1427. }
  1428. } while ((slave = slave->next) != start_at);
  1429. /* no suitable interface, frame not sent */
  1430. dev_kfree_skb(skb);
  1431. read_unlock_irqrestore(&bond->lock, flags);
  1432. return 0;
  1433. }
  1434. /* 
  1435.  * in XOR mode, we determine the output device by performing xor on
  1436.  * the source and destination hw adresses.  If this device is not 
  1437.  * enabled, find the next slave following this xor slave. 
  1438.  */
  1439. static int bond_xmit_xor(struct sk_buff *skb, struct net_device *dev)
  1440. {
  1441. slave_t *slave, *start_at;
  1442. struct bonding *bond = (struct bonding *) dev->priv;
  1443. unsigned long flags;
  1444. struct ethhdr *data = (struct ethhdr *)skb->data;
  1445. int slave_no;
  1446. if (!IS_UP(dev)) { /* bond down */
  1447. dev_kfree_skb(skb);
  1448. return 0;
  1449. }
  1450. read_lock_irqsave(&bond->lock, flags);
  1451. slave = bond->prev;
  1452. /* we're at the root, get the first slave */
  1453. if ((slave == NULL) || (slave->dev == NULL)) { 
  1454. /* no suitable interface, frame not sent */
  1455. dev_kfree_skb(skb);
  1456. read_unlock_irqrestore(&bond->lock, flags);
  1457. return 0;
  1458. }
  1459. slave_no = (data->h_dest[5]^slave->dev->dev_addr[5]) % bond->slave_cnt;
  1460. while ( (slave_no > 0) && (slave != (slave_t *)bond) ) {
  1461. slave = slave->prev;
  1462. slave_no--;
  1463. start_at = slave;
  1464. do {
  1465. if (IS_UP(slave->dev)
  1466.     && (slave->link == BOND_LINK_UP)
  1467.     && (slave->state == BOND_STATE_ACTIVE)) {
  1468. skb->dev = slave->dev;
  1469. skb->priority = 1;
  1470. dev_queue_xmit(skb);
  1471. read_unlock_irqrestore(&bond->lock, flags);
  1472. return 0;
  1473. }
  1474. } while ((slave = slave->next) != start_at);
  1475. /* no suitable interface, frame not sent */
  1476. dev_kfree_skb(skb);
  1477. read_unlock_irqrestore(&bond->lock, flags);
  1478. return 0;
  1479. }
  1480. /* 
  1481.  * in active-backup mode, we know that bond->current_slave is always valid if
  1482.  * the bond has a usable interface.
  1483.  */
  1484. static int bond_xmit_activebackup(struct sk_buff *skb, struct net_device *dev)
  1485. {
  1486. struct bonding *bond = (struct bonding *) dev->priv;
  1487. unsigned long flags;
  1488. int ret;
  1489. if (!IS_UP(dev)) { /* bond down */
  1490. dev_kfree_skb(skb);
  1491. return 0;
  1492. }
  1493. /* if we are sending arp packets, try to at least 
  1494.    identify our own ip address */
  1495. if ( (arp_interval > 0) && (my_ip==0) &&
  1496. (skb->protocol == __constant_htons(ETH_P_ARP) ) ) {
  1497. char *the_ip = (((char *)skb->data)) 
  1498. + sizeof(struct ethhdr)  
  1499. + sizeof(struct arphdr) + 
  1500. ETH_ALEN;
  1501. memcpy(&my_ip, the_ip, 4);
  1502. }
  1503. /* if we are sending arp packets and don't know 
  1504.    the target hw address, save it so we don't need 
  1505.    to use a broadcast address */
  1506. if ( (arp_interval > 0) && (arp_target_hw_addr==NULL) &&
  1507.      (skb->protocol == __constant_htons(ETH_P_IP) ) ) {
  1508. struct ethhdr *eth_hdr = 
  1509. (struct ethhdr *) (((char *)skb->data));
  1510. arp_target_hw_addr = kmalloc(ETH_ALEN, GFP_KERNEL);
  1511. memcpy(arp_target_hw_addr, eth_hdr->h_dest, ETH_ALEN);
  1512. }
  1513. read_lock_irqsave(&bond->lock, flags);
  1514. read_lock(&bond->ptrlock);
  1515. if (bond->current_slave != NULL) { /* one usable interface */
  1516. skb->dev = bond->current_slave->dev;
  1517. read_unlock(&bond->ptrlock);
  1518. skb->priority = 1;
  1519. ret = dev_queue_xmit(skb);
  1520. read_unlock_irqrestore(&bond->lock, flags);
  1521. return 0;
  1522. }
  1523. else {
  1524. read_unlock(&bond->ptrlock);
  1525. }
  1526. /* no suitable interface, frame not sent */
  1527. #ifdef BONDING_DEBUG
  1528. printk(KERN_INFO "There was no suitable interface, so we don't transmitn");
  1529. #endif
  1530. dev_kfree_skb(skb);
  1531. read_unlock_irqrestore(&bond->lock, flags);
  1532. return 0;
  1533. }
  1534. static struct net_device_stats *bond_get_stats(struct net_device *dev)
  1535. {
  1536. bonding_t *bond = dev->priv;
  1537. struct net_device_stats *stats = bond->stats, *sstats;
  1538. slave_t *slave;
  1539. unsigned long flags;
  1540. memset(bond->stats, 0, sizeof(struct net_device_stats));
  1541. read_lock_irqsave(&bond->lock, flags);
  1542. for (slave = bond->prev; slave!=(slave_t *)bond; slave = slave->prev) {
  1543. sstats = slave->dev->get_stats(slave->dev);
  1544.  
  1545. stats->rx_packets += sstats->rx_packets;
  1546. stats->rx_bytes += sstats->rx_bytes;
  1547. stats->rx_errors += sstats->rx_errors;
  1548. stats->rx_dropped += sstats->rx_dropped;
  1549. stats->tx_packets += sstats->tx_packets;
  1550. stats->tx_bytes += sstats->tx_bytes;
  1551. stats->tx_errors += sstats->tx_errors;
  1552. stats->tx_dropped += sstats->tx_dropped;
  1553. stats->multicast += sstats->multicast;
  1554. stats->collisions += sstats->collisions;
  1555. stats->rx_length_errors += sstats->rx_length_errors;
  1556. stats->rx_over_errors += sstats->rx_over_errors;
  1557. stats->rx_crc_errors += sstats->rx_crc_errors;
  1558. stats->rx_frame_errors += sstats->rx_frame_errors;
  1559. stats->rx_fifo_errors += sstats->rx_fifo_errors;
  1560. stats->rx_missed_errors += sstats->rx_missed_errors;
  1561. stats->tx_aborted_errors += sstats->tx_aborted_errors;
  1562. stats->tx_carrier_errors += sstats->tx_carrier_errors;
  1563. stats->tx_fifo_errors += sstats->tx_fifo_errors;
  1564. stats->tx_heartbeat_errors += sstats->tx_heartbeat_errors;
  1565. stats->tx_window_errors += sstats->tx_window_errors;
  1566. }
  1567. read_unlock_irqrestore(&bond->lock, flags);
  1568. return stats;
  1569. }
  1570. static int bond_get_info(char *buf, char **start, off_t offset, int length)
  1571. {
  1572. bonding_t *bond = these_bonds;
  1573. int len = 0;
  1574. off_t begin = 0;
  1575. u16 link;
  1576. slave_t *slave = NULL;
  1577. unsigned long flags;
  1578. while (bond != NULL) {
  1579. /*
  1580.  * This function locks the mutex, so we can't lock it until 
  1581.  * afterwards
  1582.  */
  1583. link = bond_check_mii_link(bond);
  1584. len += sprintf(buf + len, "Bonding Mode: ");
  1585. len += sprintf(buf + len, "%sn", mode ? "active-backup" : "load balancing");
  1586. if (mode == BOND_MODE_ACTIVEBACKUP) {
  1587. read_lock_irqsave(&bond->lock, flags);
  1588. read_lock(&bond->ptrlock);
  1589. if (bond->current_slave != NULL) {
  1590. len += sprintf(buf + len, 
  1591. "Currently Active Slave: %sn", 
  1592. bond->current_slave->dev->name);
  1593. }
  1594. read_unlock(&bond->ptrlock);
  1595. read_unlock_irqrestore(&bond->lock, flags);
  1596. }
  1597. len += sprintf(buf + len, "MII Status: ");
  1598. len += sprintf(buf + len, 
  1599. link == MII_LINK_READY ? "upn" : "downn");
  1600. len += sprintf(buf + len, "MII Polling Interval (ms): %dn", 
  1601. miimon);
  1602. len += sprintf(buf + len, "Up Delay (ms): %dn", updelay);
  1603. len += sprintf(buf + len, "Down Delay (ms): %dn", downdelay);
  1604. read_lock_irqsave(&bond->lock, flags);
  1605. for (slave = bond->prev; slave != (slave_t *)bond; 
  1606.      slave = slave->prev) {
  1607. len += sprintf(buf + len, "nSlave Interface: %sn", slave->dev->name);
  1608. len += sprintf(buf + len, "MII Status: ");
  1609. len += sprintf(buf + len, 
  1610. slave->link == BOND_LINK_UP ? 
  1611. "upn" : "downn");
  1612. len += sprintf(buf + len, "Link Failure Count: %dn", 
  1613. slave->link_failure_count);
  1614. }
  1615. read_unlock_irqrestore(&bond->lock, flags);
  1616. /*
  1617.  * Figure out the calcs for the /proc/net interface
  1618.  */
  1619. *start = buf + (offset - begin);
  1620. len -= (offset - begin);
  1621. if (len > length) {
  1622. len = length;
  1623. }
  1624. if (len < 0) {
  1625. len = 0;
  1626. }
  1627. bond = bond->next_bond;
  1628. }
  1629. return len;
  1630. }
  1631. static int bond_event(struct notifier_block *this, unsigned long event, 
  1632. void *ptr)
  1633. {
  1634. struct bonding *this_bond=(struct bonding *)these_bonds;
  1635. struct bonding *last_bond;
  1636. struct net_device *event_dev = (struct net_device *)ptr;
  1637. /* while there are bonds configured */
  1638. while (this_bond != NULL) {
  1639. if (this_bond == event_dev->priv ) {
  1640. switch (event) {
  1641. case NETDEV_UNREGISTER:
  1642. /* 
  1643.  * remove this bond from a linked list of 
  1644.  * bonds 
  1645.  */
  1646. if (this_bond == these_bonds) {
  1647. these_bonds = this_bond->next_bond;
  1648. } else {
  1649. for (last_bond = these_bonds; 
  1650.      last_bond != NULL; 
  1651.      last_bond = last_bond->next_bond) {
  1652. if (last_bond->next_bond == 
  1653.     this_bond) {
  1654. last_bond->next_bond = 
  1655. this_bond->next_bond;
  1656. }
  1657. }
  1658. }
  1659. return NOTIFY_DONE;
  1660. default:
  1661. return NOTIFY_DONE;
  1662. }
  1663. } else if (this_bond->device == event_dev->master) {
  1664. switch (event) {
  1665. case NETDEV_UNREGISTER:
  1666. bond_release(this_bond->device, event_dev);
  1667. break;
  1668. }
  1669. return NOTIFY_DONE;
  1670. }
  1671. this_bond = this_bond->next_bond;
  1672. }
  1673. return NOTIFY_DONE;
  1674. }
  1675. static struct notifier_block bond_netdev_notifier={
  1676. bond_event,
  1677. NULL,
  1678. 0
  1679. };
  1680. static int __init bond_init(struct net_device *dev)
  1681. {
  1682. bonding_t *bond, *this_bond, *last_bond;
  1683. #ifdef BONDING_DEBUG
  1684. printk (KERN_INFO "Begin bond_init for %sn", dev->name);
  1685. #endif
  1686. bond = kmalloc(sizeof(struct bonding), GFP_KERNEL);
  1687. if (bond == NULL) {
  1688. return -ENOMEM;
  1689. }
  1690. memset(bond, 0, sizeof(struct bonding));
  1691. /* initialize rwlocks */
  1692. rwlock_init(&bond->lock);
  1693. rwlock_init(&bond->ptrlock);
  1694. bond->stats = kmalloc(sizeof(struct net_device_stats), GFP_KERNEL);
  1695. if (bond->stats == NULL) {
  1696. kfree(bond);
  1697. return -ENOMEM;
  1698. }
  1699. memset(bond->stats, 0, sizeof(struct net_device_stats));
  1700. bond->next = bond->prev = (slave_t *)bond;
  1701. bond->current_slave = NULL;
  1702. bond->device = dev;
  1703. dev->priv = bond;
  1704. /* Initialize the device structure. */
  1705. if (mode == BOND_MODE_ACTIVEBACKUP) {
  1706. dev->hard_start_xmit = bond_xmit_activebackup;
  1707. } else if (mode == BOND_MODE_ROUNDROBIN) {
  1708. dev->hard_start_xmit = bond_xmit_roundrobin;
  1709. } else if (mode == BOND_MODE_XOR) {
  1710. dev->hard_start_xmit = bond_xmit_xor;
  1711. } else {
  1712. printk(KERN_ERR "Unknown bonding mode %dn", mode);
  1713. kfree(bond->stats);
  1714. kfree(bond);
  1715. return -EINVAL;
  1716. }
  1717. dev->get_stats = bond_get_stats;
  1718. dev->open = bond_open;
  1719. dev->stop = bond_close;
  1720. dev->set_multicast_list = set_multicast_list;
  1721. dev->do_ioctl = bond_ioctl;
  1722. /* 
  1723.  * Fill in the fields of the device structure with ethernet-generic 
  1724.  * values. 
  1725.  */
  1726. ether_setup(dev);
  1727. dev->tx_queue_len = 0;
  1728. dev->flags |= IFF_MASTER|IFF_MULTICAST;
  1729. #ifdef CONFIG_NET_FASTROUTE
  1730. dev->accept_fastpath = bond_accept_fastpath;
  1731. #endif
  1732. printk(KERN_INFO "%s registered with", dev->name);
  1733. if (miimon > 0) {
  1734. printk(" MII link monitoring set to %d ms", miimon);
  1735. updelay /= miimon;
  1736. downdelay /= miimon;
  1737. } else {
  1738. printk("out MII link monitoring");
  1739. }
  1740. printk(", in %s mode.n",mode?"active-backup":"bonding");
  1741. #ifdef CONFIG_PROC_FS
  1742. bond->bond_proc_dir = proc_mkdir(dev->name, proc_net);
  1743. if (bond->bond_proc_dir == NULL) {
  1744. printk(KERN_ERR "%s: Cannot init /proc/net/%s/n", 
  1745. dev->name, dev->name);
  1746. kfree(bond->stats);
  1747. kfree(bond);
  1748. return -ENOMEM;
  1749. }
  1750. bond->bond_proc_info_file = 
  1751. create_proc_info_entry("info", 0, bond->bond_proc_dir, 
  1752. bond_get_info);
  1753. if (bond->bond_proc_info_file == NULL) {
  1754. printk(KERN_ERR "%s: Cannot init /proc/net/%s/infon", 
  1755. dev->name, dev->name);
  1756. remove_proc_entry(dev->name, proc_net);
  1757. kfree(bond->stats);
  1758. kfree(bond);
  1759. return -ENOMEM;
  1760. }
  1761. #endif /* CONFIG_PROC_FS */
  1762. if (first_pass == 1) {
  1763. these_bonds = bond;
  1764. register_netdevice_notifier(&bond_netdev_notifier);
  1765. first_pass = 0;
  1766. } else {
  1767. last_bond = these_bonds;
  1768. this_bond = these_bonds->next_bond;
  1769. while (this_bond != NULL) {
  1770. last_bond = this_bond;
  1771. this_bond = this_bond->next_bond;
  1772. }
  1773. last_bond->next_bond = bond;
  1774. return 0;
  1775. }
  1776. /*
  1777. static int __init bond_probe(struct net_device *dev)
  1778. {
  1779. bond_init(dev);
  1780. return 0;
  1781. }
  1782.  */
  1783. static int __init bonding_init(void)
  1784. {
  1785. int no;
  1786. int err;
  1787. /* Find a name for this unit */
  1788. static struct net_device *dev_bond = NULL;
  1789. dev_bond = dev_bonds = kmalloc(max_bonds*sizeof(struct net_device), 
  1790. GFP_KERNEL);
  1791. if (dev_bond == NULL) {
  1792. return -ENOMEM;
  1793. }
  1794. memset(dev_bonds, 0, max_bonds*sizeof(struct net_device));
  1795. if (arp_ip_target) {
  1796. if (my_inet_aton(arp_ip_target, &arp_target) == 0)  {
  1797. arp_interval = 0;
  1798. }
  1799. }
  1800. for (no = 0; no < max_bonds; no++) {
  1801. dev_bond->init = bond_init;
  1802. err = dev_alloc_name(dev_bond,"bond%d");
  1803. if (err < 0) {
  1804. kfree(dev_bonds);
  1805. return err;
  1806. }
  1807. SET_MODULE_OWNER(dev_bond);
  1808. if (register_netdev(dev_bond) != 0) {
  1809. kfree(dev_bonds);
  1810. return -EIO;
  1811. }
  1812. dev_bond++;
  1813. }
  1814. return 0;
  1815. }
  1816. static void __exit bonding_exit(void)
  1817. {
  1818. struct net_device *dev_bond = dev_bonds;
  1819. struct bonding *bond;
  1820. int no;
  1821. unregister_netdevice_notifier(&bond_netdev_notifier);
  1822.  
  1823. for (no = 0; no < max_bonds; no++) {
  1824. #ifdef CONFIG_PROC_FS
  1825. bond = (struct bonding *) dev_bond->priv;
  1826. remove_proc_entry("info", bond->bond_proc_dir);
  1827. remove_proc_entry(dev_bond->name, proc_net);
  1828. #endif
  1829. unregister_netdev(dev_bond);
  1830. kfree(bond->stats);
  1831. kfree(dev_bond->priv);
  1832. dev_bond->priv = NULL;
  1833. dev_bond++;
  1834. }
  1835. kfree(dev_bonds);
  1836. }
  1837. module_init(bonding_init);
  1838. module_exit(bonding_exit);
  1839. MODULE_LICENSE("GPL");
  1840. /*
  1841.  * Local variables:
  1842.  *  c-indent-level: 8
  1843.  *  c-basic-offset: 8
  1844.  *  tab-width: 8
  1845.  * End:
  1846.  */