Changeset 10895
- Timestamp:
- 11/13/08 01:51:20 (5 years ago)
- Location:
- src/linux/pb42/linux-2.6.22
- 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/pb42/linux-2.6.22/drivers/net/bonding/bond_main.c
r10887 r10895 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"; … … 4117 4120 4118 4121 4119 static int bond_xmit_duplex (struct sk_buff *skb, struct net_device *bond_dev)4122 static int bond_xmit_duplex_master(struct sk_buff *skb, struct net_device *bond_dev) 4120 4123 { 4121 4124 struct bonding *bond = bond_dev->priv; … … 4141 4144 bond_for_each_slave_from(bond, slave, i, start_at) { 4142 4145 if ((i % 2) && IS_UP(slave->dev) && 4146 (slave->link == BOND_LINK_UP) && 4147 (slave->state == BOND_STATE_ACTIVE)) { 4148 4149 res = bond_dev_queue_xmit(bond, skb, slave->dev); 4150 write_lock(&bond->curr_slave_lock); 4151 bond->curr_active_slave = slave->next; 4152 write_unlock(&bond->curr_slave_lock); 4153 4154 goto out; 4155 } 4156 } 4157 out: 4158 if (res) { 4159 /* no suitable interface, frame not sent */ 4160 dev_kfree_skb(skb); 4161 } 4162 read_unlock(&bond->lock); 4163 return 0; 4164 } 4165 4166 static int bond_xmit_duplex_slave(struct sk_buff *skb, struct net_device *bond_dev) 4167 { 4168 struct bonding *bond = bond_dev->priv; 4169 struct slave *slave, *start_at; 4170 int i; 4171 int res = 1; 4172 4173 read_lock(&bond->lock); 4174 4175 if (!BOND_IS_OK(bond)) { 4176 goto out; 4177 } 4178 4179 read_lock(&bond->curr_slave_lock); 4180 slave = start_at = bond->curr_active_slave; 4181 read_unlock(&bond->curr_slave_lock); 4182 4183 if (!slave) { 4184 goto out; 4185 } 4186 4187 try_send: 4188 bond_for_each_slave_from(bond, slave, i, start_at) { 4189 if (!(i % 2) && IS_UP(slave->dev) && 4143 4190 (slave->link == BOND_LINK_UP) && 4144 4191 (slave->state == BOND_STATE_ACTIVE)) { … … 4321 4368 break; 4322 4369 case BOND_MODE_DUPLEX: 4323 bond_dev->hard_start_xmit = bond_xmit_duplex; 4370 bond_dev->hard_start_xmit = bond_xmit_duplex_master; 4371 break; 4372 case BOND_MODE_DUPLEX_SLAVE: 4373 bond_dev->hard_start_xmit = bond_xmit_duplex_slave; 4324 4374 break; 4325 4375 case BOND_MODE_ACTIVEBACKUP: -
src/linux/pb42/linux-2.6.22/include/linux/if_bonding.h
r10887 r10895 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.
