Changeset 10891
- Timestamp:
- 11/13/08 01:49:37 (5 years ago)
- Location:
- src/linux/xscale/linux-2.6.23
- Files:
-
- 2 edited
-
drivers/net/bonding/bond_main.c (modified) (6 diffs)
-
include/linux/if_bonding.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/linux/xscale/linux-2.6.23/drivers/net/bonding/bond_main.c
r10881 r10891 116 116 "1 for active-backup, 2 for balance-xor, " 117 117 "3 for broadcast, 4 for 802.3ad, 5 for balance-tlb, " 118 "6 for balance-alb, 7 for weighted-rr, 8 duplex ");118 "6 for balance-alb, 7 for weighted-rr, 8 duplex-master, 9 duplex-slave"); 119 119 module_param(primary, charp, 0); 120 120 MODULE_PARM_DESC(primary, "Primary network device to use"); … … 166 166 { "balance-alb", BOND_MODE_ALB}, 167 167 { "weighted-rr", BOND_MODE_WEIGHTED_RR}, 168 { "duplex", BOND_MODE_DUPLEX}, 168 { "duplex-master", BOND_MODE_DUPLEX}, 169 { "duplex-slave", BOND_MODE_DUPLEX_SLAVE}, 169 170 { NULL, -1}, 170 171 }; … … 210 211 return "weighted round robin (weighted-rr)"; 211 212 case BOND_MODE_DUPLEX: 212 return "duplex mode"; 213 return "duplex master mode"; 214 case BOND_MODE_DUPLEX_SLAVE: 215 return "duplex slave mode"; 213 216 default: 214 217 return "unknown"; … … 4089 4092 4090 4093 4091 static int bond_xmit_duplex (struct sk_buff *skb, struct net_device *bond_dev)4094 static int bond_xmit_duplex_master(struct sk_buff *skb, struct net_device *bond_dev) 4092 4095 { 4093 4096 struct bonding *bond = bond_dev->priv; … … 4113 4116 bond_for_each_slave_from(bond, slave, i, start_at) { 4114 4117 if ((i % 2) && IS_UP(slave->dev) && 4118 (slave->link == BOND_LINK_UP) && 4119 (slave->state == BOND_STATE_ACTIVE)) { 4120 4121 res = bond_dev_queue_xmit(bond, skb, slave->dev); 4122 write_lock(&bond->curr_slave_lock); 4123 bond->curr_active_slave = slave->next; 4124 write_unlock(&bond->curr_slave_lock); 4125 4126 goto out; 4127 } 4128 } 4129 out: 4130 if (res) { 4131 /* no suitable interface, frame not sent */ 4132 dev_kfree_skb(skb); 4133 } 4134 read_unlock(&bond->lock); 4135 return 0; 4136 } 4137 4138 static int bond_xmit_duplex_slave(struct sk_buff *skb, struct net_device *bond_dev) 4139 { 4140 struct bonding *bond = bond_dev->priv; 4141 struct slave *slave, *start_at; 4142 int i; 4143 int res = 1; 4144 4145 read_lock(&bond->lock); 4146 4147 if (!BOND_IS_OK(bond)) { 4148 goto out; 4149 } 4150 4151 read_lock(&bond->curr_slave_lock); 4152 slave = start_at = bond->curr_active_slave; 4153 read_unlock(&bond->curr_slave_lock); 4154 4155 if (!slave) { 4156 goto out; 4157 } 4158 4159 try_send: 4160 bond_for_each_slave_from(bond, slave, i, start_at) { 4161 if (!(i % 2) && IS_UP(slave->dev) && 4115 4162 (slave->link == BOND_LINK_UP) && 4116 4163 (slave->state == BOND_STATE_ACTIVE)) { … … 4293 4340 break; 4294 4341 case BOND_MODE_DUPLEX: 4295 bond_dev->hard_start_xmit = bond_xmit_duplex; 4342 bond_dev->hard_start_xmit = bond_xmit_duplex_master; 4343 break; 4344 case BOND_MODE_DUPLEX_SLAVE: 4345 bond_dev->hard_start_xmit = bond_xmit_duplex_slave; 4296 4346 break; 4297 4347 case BOND_MODE_ACTIVEBACKUP: -
src/linux/xscale/linux-2.6.23/include/linux/if_bonding.h
r10881 r10891 73 73 #define BOND_MODE_WEIGHTED_RR 7 74 74 #define BOND_MODE_DUPLEX 8 75 #define BOND_MODE_DUPLEX_SLAVE 9 75 76 76 77 /* each slave's link has 4 states */
Note: See TracChangeset
for help on using the changeset viewer.
