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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * Bond several ethernet interfaces into a Cisco, running 'Etherchannel'.
  3.  *
  4.  * 
  5.  * Portions are (c) Copyright 1995 Simon "Guru Aleph-Null" Janes
  6.  * NCM: Network and Communications Management, Inc.
  7.  *
  8.  * BUT, I'm the one who modified it for ethernet, so:
  9.  * (c) Copyright 1999, Thomas Davis, tadavis@lbl.gov
  10.  *
  11.  * This software may be used and distributed according to the terms
  12.  * of the GNU Public License, incorporated herein by reference.
  13.  * 
  14.  */
  15. #ifndef _LINUX_IF_BONDING_H
  16. #define _LINUX_IF_BONDING_H
  17. #ifdef __KERNEL__
  18. #include <linux/timer.h>
  19. #include <linux/if.h>
  20. #include <linux/proc_fs.h>
  21. #endif /* __KERNEL__ */
  22. #include <linux/types.h>
  23. /*
  24.  * We can remove these ioctl definitions in 2.5.  People should use the
  25.  * SIOC*** versions of them instead
  26.  */
  27. #define BOND_ENSLAVE_OLD (SIOCDEVPRIVATE)
  28. #define BOND_RELEASE_OLD (SIOCDEVPRIVATE + 1)
  29. #define BOND_SETHWADDR_OLD (SIOCDEVPRIVATE + 2)
  30. #define BOND_SLAVE_INFO_QUERY_OLD (SIOCDEVPRIVATE + 11)
  31. #define BOND_INFO_QUERY_OLD (SIOCDEVPRIVATE + 12)
  32. #define BOND_CHANGE_ACTIVE_OLD (SIOCDEVPRIVATE + 13)
  33. #define BOND_CHECK_MII_STATUS (SIOCGMIIPHY)
  34. #define BOND_MODE_ROUNDROBIN    0
  35. #define BOND_MODE_ACTIVEBACKUP  1
  36. #define BOND_MODE_XOR           2 
  37. /* each slave's link has 4 states */
  38. #define BOND_LINK_UP    0           /* link is up and running */
  39. #define BOND_LINK_FAIL  1           /* link has just gone down */
  40. #define BOND_LINK_DOWN  2           /* link has been down for too long time */
  41. #define BOND_LINK_BACK  3           /* link is going back */
  42. /* each slave has several states */
  43. #define BOND_STATE_ACTIVE       0   /* link is active */
  44. #define BOND_STATE_BACKUP       1   /* link is backup */
  45. #define MAX_BONDS               1   /* Maximum number of devices to support */
  46. typedef struct ifbond {
  47. __s32 bond_mode;
  48. __s32 num_slaves;
  49. __s32 miimon;
  50. } ifbond;
  51. typedef struct ifslave
  52. {
  53. __s32 slave_id; /* Used as an IN param to the BOND_SLAVE_INFO_QUERY ioctl */
  54. char slave_name[IFNAMSIZ];
  55. char link;
  56. char state;
  57. __u32  link_failure_count;
  58. } ifslave;
  59. #ifdef __KERNEL__
  60. typedef struct slave {
  61. struct slave *next;
  62. struct slave *prev;
  63. struct net_device *dev;
  64. short  delay;
  65. char   link;    /* one of BOND_LINK_XXXX */
  66. char   state;   /* one of BOND_STATE_XXXX */
  67. u32 link_failure_count;
  68. } slave_t;
  69. /*
  70.  * Here are the locking policies for the two bonding locks:
  71.  *
  72.  * 1) Get bond->lock when reading/writing slave list.
  73.  * 2) Get bond->ptrlock when reading/writing bond->current_slave.
  74.  *    (It is unnecessary when the write-lock is put with bond->lock.)
  75.  * 3) When we lock with bond->ptrlock, we must lock with bond->lock
  76.  *    beforehand.
  77.  */
  78. typedef struct bonding {
  79. slave_t *next;
  80. slave_t *prev;
  81. slave_t *current_slave;
  82. __s32 slave_cnt;
  83. rwlock_t lock;
  84. rwlock_t ptrlock;
  85. struct timer_list mii_timer;
  86. struct timer_list arp_timer;
  87. struct net_device_stats *stats;
  88. #ifdef CONFIG_PROC_FS
  89. struct proc_dir_entry *bond_proc_dir;
  90. struct proc_dir_entry *bond_proc_info_file;
  91. #endif /* CONFIG_PROC_FS */
  92. struct bonding *next_bond;
  93. struct net_device *device;
  94. } bonding_t;
  95. #endif /* __KERNEL__ */
  96. #endif /* _LINUX_BOND_H */
  97. /*
  98.  * Local variables:
  99.  *  version-control: t
  100.  *  kept-new-versions: 5
  101.  *  c-indent-level: 8
  102.  *  c-basic-offset: 8
  103.  *  tab-width: 8
  104.  * End:
  105.  */