aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bonding
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/bonding')
-rw-r--r--drivers/net/bonding/bond_3ad.c62
-rw-r--r--drivers/net/bonding/bond_alb.c153
-rw-r--r--drivers/net/bonding/bond_alb.h1
-rw-r--r--drivers/net/bonding/bond_debugfs.c2
-rw-r--r--drivers/net/bonding/bond_main.c218
-rw-r--r--drivers/net/bonding/bond_netlink.c8
-rw-r--r--drivers/net/bonding/bond_options.c66
-rw-r--r--drivers/net/bonding/bond_options.h2
-rw-r--r--drivers/net/bonding/bond_procfs.c16
-rw-r--r--drivers/net/bonding/bond_sysfs.c567
-rw-r--r--drivers/net/bonding/bond_sysfs_slave.c4
-rw-r--r--drivers/net/bonding/bonding.h143
12 files changed, 512 insertions, 730 deletions
diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c
index b667a51ed215..0dfeaf5da3f2 100644
--- a/drivers/net/bonding/bond_3ad.c
+++ b/drivers/net/bonding/bond_3ad.c
@@ -157,7 +157,7 @@ static inline struct aggregator *__get_first_agg(struct port *port)
157 157
158 rcu_read_lock(); 158 rcu_read_lock();
159 first_slave = bond_first_slave_rcu(bond); 159 first_slave = bond_first_slave_rcu(bond);
160 agg = first_slave ? &(SLAVE_AD_INFO(first_slave).aggregator) : NULL; 160 agg = first_slave ? &(SLAVE_AD_INFO(first_slave)->aggregator) : NULL;
161 rcu_read_unlock(); 161 rcu_read_unlock();
162 162
163 return agg; 163 return agg;
@@ -192,7 +192,7 @@ static inline void __enable_port(struct port *port)
192{ 192{
193 struct slave *slave = port->slave; 193 struct slave *slave = port->slave;
194 194
195 if ((slave->link == BOND_LINK_UP) && IS_UP(slave->dev)) 195 if ((slave->link == BOND_LINK_UP) && bond_slave_is_up(slave))
196 bond_set_slave_active_flags(slave, BOND_SLAVE_NOTIFY_LATER); 196 bond_set_slave_active_flags(slave, BOND_SLAVE_NOTIFY_LATER);
197} 197}
198 198
@@ -241,7 +241,7 @@ static inline int __check_agg_selection_timer(struct port *port)
241 */ 241 */
242static inline void __get_state_machine_lock(struct port *port) 242static inline void __get_state_machine_lock(struct port *port)
243{ 243{
244 spin_lock_bh(&(SLAVE_AD_INFO(port->slave).state_machine_lock)); 244 spin_lock_bh(&(SLAVE_AD_INFO(port->slave)->state_machine_lock));
245} 245}
246 246
247/** 247/**
@@ -250,7 +250,7 @@ static inline void __get_state_machine_lock(struct port *port)
250 */ 250 */
251static inline void __release_state_machine_lock(struct port *port) 251static inline void __release_state_machine_lock(struct port *port)
252{ 252{
253 spin_unlock_bh(&(SLAVE_AD_INFO(port->slave).state_machine_lock)); 253 spin_unlock_bh(&(SLAVE_AD_INFO(port->slave)->state_machine_lock));
254} 254}
255 255
256/** 256/**
@@ -350,7 +350,7 @@ static u8 __get_duplex(struct port *port)
350static inline void __initialize_port_locks(struct slave *slave) 350static inline void __initialize_port_locks(struct slave *slave)
351{ 351{
352 /* make sure it isn't called twice */ 352 /* make sure it isn't called twice */
353 spin_lock_init(&(SLAVE_AD_INFO(slave).state_machine_lock)); 353 spin_lock_init(&(SLAVE_AD_INFO(slave)->state_machine_lock));
354} 354}
355 355
356/* Conversions */ 356/* Conversions */
@@ -688,8 +688,8 @@ static struct aggregator *__get_active_agg(struct aggregator *aggregator)
688 struct slave *slave; 688 struct slave *slave;
689 689
690 bond_for_each_slave_rcu(bond, slave, iter) 690 bond_for_each_slave_rcu(bond, slave, iter)
691 if (SLAVE_AD_INFO(slave).aggregator.is_active) 691 if (SLAVE_AD_INFO(slave)->aggregator.is_active)
692 return &(SLAVE_AD_INFO(slave).aggregator); 692 return &(SLAVE_AD_INFO(slave)->aggregator);
693 693
694 return NULL; 694 return NULL;
695} 695}
@@ -1293,7 +1293,7 @@ static void ad_port_selection_logic(struct port *port)
1293 } 1293 }
1294 /* search on all aggregators for a suitable aggregator for this port */ 1294 /* search on all aggregators for a suitable aggregator for this port */
1295 bond_for_each_slave(bond, slave, iter) { 1295 bond_for_each_slave(bond, slave, iter) {
1296 aggregator = &(SLAVE_AD_INFO(slave).aggregator); 1296 aggregator = &(SLAVE_AD_INFO(slave)->aggregator);
1297 1297
1298 /* keep a free aggregator for later use(if needed) */ 1298 /* keep a free aggregator for later use(if needed) */
1299 if (!aggregator->lag_ports) { 1299 if (!aggregator->lag_ports) {
@@ -1504,7 +1504,7 @@ static void ad_agg_selection_logic(struct aggregator *agg)
1504 best = (active && agg_device_up(active)) ? active : NULL; 1504 best = (active && agg_device_up(active)) ? active : NULL;
1505 1505
1506 bond_for_each_slave_rcu(bond, slave, iter) { 1506 bond_for_each_slave_rcu(bond, slave, iter) {
1507 agg = &(SLAVE_AD_INFO(slave).aggregator); 1507 agg = &(SLAVE_AD_INFO(slave)->aggregator);
1508 1508
1509 agg->is_active = 0; 1509 agg->is_active = 0;
1510 1510
@@ -1549,7 +1549,7 @@ static void ad_agg_selection_logic(struct aggregator *agg)
1549 best->slave ? best->slave->dev->name : "NULL"); 1549 best->slave ? best->slave->dev->name : "NULL");
1550 1550
1551 bond_for_each_slave_rcu(bond, slave, iter) { 1551 bond_for_each_slave_rcu(bond, slave, iter) {
1552 agg = &(SLAVE_AD_INFO(slave).aggregator); 1552 agg = &(SLAVE_AD_INFO(slave)->aggregator);
1553 1553
1554 pr_debug("Agg=%d; P=%d; a k=%d; p k=%d; Ind=%d; Act=%d\n", 1554 pr_debug("Agg=%d; P=%d; a k=%d; p k=%d; Ind=%d; Act=%d\n",
1555 agg->aggregator_identifier, agg->num_of_ports, 1555 agg->aggregator_identifier, agg->num_of_ports,
@@ -1840,16 +1840,16 @@ void bond_3ad_bind_slave(struct slave *slave)
1840 struct aggregator *aggregator; 1840 struct aggregator *aggregator;
1841 1841
1842 /* check that the slave has not been initialized yet. */ 1842 /* check that the slave has not been initialized yet. */
1843 if (SLAVE_AD_INFO(slave).port.slave != slave) { 1843 if (SLAVE_AD_INFO(slave)->port.slave != slave) {
1844 1844
1845 /* port initialization */ 1845 /* port initialization */
1846 port = &(SLAVE_AD_INFO(slave).port); 1846 port = &(SLAVE_AD_INFO(slave)->port);
1847 1847
1848 ad_initialize_port(port, bond->params.lacp_fast); 1848 ad_initialize_port(port, bond->params.lacp_fast);
1849 1849
1850 __initialize_port_locks(slave); 1850 __initialize_port_locks(slave);
1851 port->slave = slave; 1851 port->slave = slave;
1852 port->actor_port_number = SLAVE_AD_INFO(slave).id; 1852 port->actor_port_number = SLAVE_AD_INFO(slave)->id;
1853 /* key is determined according to the link speed, duplex and user key(which 1853 /* key is determined according to the link speed, duplex and user key(which
1854 * is yet not supported) 1854 * is yet not supported)
1855 */ 1855 */
@@ -1874,7 +1874,7 @@ void bond_3ad_bind_slave(struct slave *slave)
1874 __disable_port(port); 1874 __disable_port(port);
1875 1875
1876 /* aggregator initialization */ 1876 /* aggregator initialization */
1877 aggregator = &(SLAVE_AD_INFO(slave).aggregator); 1877 aggregator = &(SLAVE_AD_INFO(slave)->aggregator);
1878 1878
1879 ad_initialize_agg(aggregator); 1879 ad_initialize_agg(aggregator);
1880 1880
@@ -1903,8 +1903,8 @@ void bond_3ad_unbind_slave(struct slave *slave)
1903 struct slave *slave_iter; 1903 struct slave *slave_iter;
1904 struct list_head *iter; 1904 struct list_head *iter;
1905 1905
1906 aggregator = &(SLAVE_AD_INFO(slave).aggregator); 1906 aggregator = &(SLAVE_AD_INFO(slave)->aggregator);
1907 port = &(SLAVE_AD_INFO(slave).port); 1907 port = &(SLAVE_AD_INFO(slave)->port);
1908 1908
1909 /* if slave is null, the whole port is not initialized */ 1909 /* if slave is null, the whole port is not initialized */
1910 if (!port->slave) { 1910 if (!port->slave) {
@@ -1932,7 +1932,7 @@ void bond_3ad_unbind_slave(struct slave *slave)
1932 (aggregator->lag_ports->next_port_in_aggregator)) { 1932 (aggregator->lag_ports->next_port_in_aggregator)) {
1933 /* find new aggregator for the related port(s) */ 1933 /* find new aggregator for the related port(s) */
1934 bond_for_each_slave(bond, slave_iter, iter) { 1934 bond_for_each_slave(bond, slave_iter, iter) {
1935 new_aggregator = &(SLAVE_AD_INFO(slave_iter).aggregator); 1935 new_aggregator = &(SLAVE_AD_INFO(slave_iter)->aggregator);
1936 /* if the new aggregator is empty, or it is 1936 /* if the new aggregator is empty, or it is
1937 * connected to our port only 1937 * connected to our port only
1938 */ 1938 */
@@ -2010,7 +2010,7 @@ void bond_3ad_unbind_slave(struct slave *slave)
2010 2010
2011 /* find the aggregator that this port is connected to */ 2011 /* find the aggregator that this port is connected to */
2012 bond_for_each_slave(bond, slave_iter, iter) { 2012 bond_for_each_slave(bond, slave_iter, iter) {
2013 temp_aggregator = &(SLAVE_AD_INFO(slave_iter).aggregator); 2013 temp_aggregator = &(SLAVE_AD_INFO(slave_iter)->aggregator);
2014 prev_port = NULL; 2014 prev_port = NULL;
2015 /* search the port in the aggregator's related ports */ 2015 /* search the port in the aggregator's related ports */
2016 for (temp_port = temp_aggregator->lag_ports; temp_port; 2016 for (temp_port = temp_aggregator->lag_ports; temp_port;
@@ -2076,7 +2076,7 @@ void bond_3ad_state_machine_handler(struct work_struct *work)
2076 if (BOND_AD_INFO(bond).agg_select_timer && 2076 if (BOND_AD_INFO(bond).agg_select_timer &&
2077 !(--BOND_AD_INFO(bond).agg_select_timer)) { 2077 !(--BOND_AD_INFO(bond).agg_select_timer)) {
2078 slave = bond_first_slave_rcu(bond); 2078 slave = bond_first_slave_rcu(bond);
2079 port = slave ? &(SLAVE_AD_INFO(slave).port) : NULL; 2079 port = slave ? &(SLAVE_AD_INFO(slave)->port) : NULL;
2080 2080
2081 /* select the active aggregator for the bond */ 2081 /* select the active aggregator for the bond */
2082 if (port) { 2082 if (port) {
@@ -2094,7 +2094,7 @@ void bond_3ad_state_machine_handler(struct work_struct *work)
2094 2094
2095 /* for each port run the state machines */ 2095 /* for each port run the state machines */
2096 bond_for_each_slave_rcu(bond, slave, iter) { 2096 bond_for_each_slave_rcu(bond, slave, iter) {
2097 port = &(SLAVE_AD_INFO(slave).port); 2097 port = &(SLAVE_AD_INFO(slave)->port);
2098 if (!port->slave) { 2098 if (!port->slave) {
2099 pr_warn_ratelimited("%s: Warning: Found an uninitialized port\n", 2099 pr_warn_ratelimited("%s: Warning: Found an uninitialized port\n",
2100 bond->dev->name); 2100 bond->dev->name);
@@ -2155,7 +2155,7 @@ static int bond_3ad_rx_indication(struct lacpdu *lacpdu, struct slave *slave,
2155 2155
2156 if (length >= sizeof(struct lacpdu)) { 2156 if (length >= sizeof(struct lacpdu)) {
2157 2157
2158 port = &(SLAVE_AD_INFO(slave).port); 2158 port = &(SLAVE_AD_INFO(slave)->port);
2159 2159
2160 if (!port->slave) { 2160 if (!port->slave) {
2161 pr_warn_ratelimited("%s: Warning: port of slave %s is uninitialized\n", 2161 pr_warn_ratelimited("%s: Warning: port of slave %s is uninitialized\n",
@@ -2212,7 +2212,7 @@ void bond_3ad_adapter_speed_changed(struct slave *slave)
2212{ 2212{
2213 struct port *port; 2213 struct port *port;
2214 2214
2215 port = &(SLAVE_AD_INFO(slave).port); 2215 port = &(SLAVE_AD_INFO(slave)->port);
2216 2216
2217 /* if slave is null, the whole port is not initialized */ 2217 /* if slave is null, the whole port is not initialized */
2218 if (!port->slave) { 2218 if (!port->slave) {
@@ -2245,7 +2245,7 @@ void bond_3ad_adapter_duplex_changed(struct slave *slave)
2245{ 2245{
2246 struct port *port; 2246 struct port *port;
2247 2247
2248 port = &(SLAVE_AD_INFO(slave).port); 2248 port = &(SLAVE_AD_INFO(slave)->port);
2249 2249
2250 /* if slave is null, the whole port is not initialized */ 2250 /* if slave is null, the whole port is not initialized */
2251 if (!port->slave) { 2251 if (!port->slave) {
@@ -2279,7 +2279,7 @@ void bond_3ad_handle_link_change(struct slave *slave, char link)
2279{ 2279{
2280 struct port *port; 2280 struct port *port;
2281 2281
2282 port = &(SLAVE_AD_INFO(slave).port); 2282 port = &(SLAVE_AD_INFO(slave)->port);
2283 2283
2284 /* if slave is null, the whole port is not initialized */ 2284 /* if slave is null, the whole port is not initialized */
2285 if (!port->slave) { 2285 if (!port->slave) {
@@ -2347,7 +2347,7 @@ int bond_3ad_set_carrier(struct bonding *bond)
2347 ret = 0; 2347 ret = 0;
2348 goto out; 2348 goto out;
2349 } 2349 }
2350 active = __get_active_agg(&(SLAVE_AD_INFO(first_slave).aggregator)); 2350 active = __get_active_agg(&(SLAVE_AD_INFO(first_slave)->aggregator));
2351 if (active) { 2351 if (active) {
2352 /* are enough slaves available to consider link up? */ 2352 /* are enough slaves available to consider link up? */
2353 if (active->num_of_ports < bond->params.min_links) { 2353 if (active->num_of_ports < bond->params.min_links) {
@@ -2384,7 +2384,7 @@ int __bond_3ad_get_active_agg_info(struct bonding *bond,
2384 struct port *port; 2384 struct port *port;
2385 2385
2386 bond_for_each_slave_rcu(bond, slave, iter) { 2386 bond_for_each_slave_rcu(bond, slave, iter) {
2387 port = &(SLAVE_AD_INFO(slave).port); 2387 port = &(SLAVE_AD_INFO(slave)->port);
2388 if (port->aggregator && port->aggregator->is_active) { 2388 if (port->aggregator && port->aggregator->is_active) {
2389 aggregator = port->aggregator; 2389 aggregator = port->aggregator;
2390 break; 2390 break;
@@ -2440,22 +2440,22 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
2440 goto err_free; 2440 goto err_free;
2441 } 2441 }
2442 2442
2443 slave_agg_no = bond_xmit_hash(bond, skb, slaves_in_agg); 2443 slave_agg_no = bond_xmit_hash(bond, skb) % slaves_in_agg;
2444 first_ok_slave = NULL; 2444 first_ok_slave = NULL;
2445 2445
2446 bond_for_each_slave_rcu(bond, slave, iter) { 2446 bond_for_each_slave_rcu(bond, slave, iter) {
2447 agg = SLAVE_AD_INFO(slave).port.aggregator; 2447 agg = SLAVE_AD_INFO(slave)->port.aggregator;
2448 if (!agg || agg->aggregator_identifier != agg_id) 2448 if (!agg || agg->aggregator_identifier != agg_id)
2449 continue; 2449 continue;
2450 2450
2451 if (slave_agg_no >= 0) { 2451 if (slave_agg_no >= 0) {
2452 if (!first_ok_slave && SLAVE_IS_OK(slave)) 2452 if (!first_ok_slave && bond_slave_can_tx(slave))
2453 first_ok_slave = slave; 2453 first_ok_slave = slave;
2454 slave_agg_no--; 2454 slave_agg_no--;
2455 continue; 2455 continue;
2456 } 2456 }
2457 2457
2458 if (SLAVE_IS_OK(slave)) { 2458 if (bond_slave_can_tx(slave)) {
2459 bond_dev_queue_xmit(bond, skb, slave->dev); 2459 bond_dev_queue_xmit(bond, skb, slave->dev);
2460 goto out; 2460 goto out;
2461 } 2461 }
@@ -2522,7 +2522,7 @@ void bond_3ad_update_lacp_rate(struct bonding *bond)
2522 2522
2523 lacp_fast = bond->params.lacp_fast; 2523 lacp_fast = bond->params.lacp_fast;
2524 bond_for_each_slave(bond, slave, iter) { 2524 bond_for_each_slave(bond, slave, iter) {
2525 port = &(SLAVE_AD_INFO(slave).port); 2525 port = &(SLAVE_AD_INFO(slave)->port);
2526 __get_state_machine_lock(port); 2526 __get_state_machine_lock(port);
2527 if (lacp_fast) 2527 if (lacp_fast)
2528 port->actor_oper_port_state |= AD_STATE_LACP_TIMEOUT; 2528 port->actor_oper_port_state |= AD_STATE_LACP_TIMEOUT;
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
index 93580a47cc54..76c0dade233f 100644
--- a/drivers/net/bonding/bond_alb.c
+++ b/drivers/net/bonding/bond_alb.c
@@ -229,7 +229,7 @@ static struct slave *tlb_get_least_loaded_slave(struct bonding *bond)
229 229
230 /* Find the slave with the largest gap */ 230 /* Find the slave with the largest gap */
231 bond_for_each_slave_rcu(bond, slave, iter) { 231 bond_for_each_slave_rcu(bond, slave, iter) {
232 if (SLAVE_IS_OK(slave)) { 232 if (bond_slave_can_tx(slave)) {
233 long long gap = compute_gap(slave); 233 long long gap = compute_gap(slave);
234 234
235 if (max_gap < gap) { 235 if (max_gap < gap) {
@@ -384,7 +384,7 @@ static struct slave *rlb_next_rx_slave(struct bonding *bond)
384 bool found = false; 384 bool found = false;
385 385
386 bond_for_each_slave(bond, slave, iter) { 386 bond_for_each_slave(bond, slave, iter) {
387 if (!SLAVE_IS_OK(slave)) 387 if (!bond_slave_can_tx(slave))
388 continue; 388 continue;
389 if (!found) { 389 if (!found) {
390 if (!before || before->speed < slave->speed) 390 if (!before || before->speed < slave->speed)
@@ -417,7 +417,7 @@ static struct slave *__rlb_next_rx_slave(struct bonding *bond)
417 bool found = false; 417 bool found = false;
418 418
419 bond_for_each_slave_rcu(bond, slave, iter) { 419 bond_for_each_slave_rcu(bond, slave, iter) {
420 if (!SLAVE_IS_OK(slave)) 420 if (!bond_slave_can_tx(slave))
421 continue; 421 continue;
422 if (!found) { 422 if (!found) {
423 if (!before || before->speed < slave->speed) 423 if (!before || before->speed < slave->speed)
@@ -755,7 +755,7 @@ static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond)
755 /* Don't modify or load balance ARPs that do not originate locally 755 /* Don't modify or load balance ARPs that do not originate locally
756 * (e.g.,arrive via a bridge). 756 * (e.g.,arrive via a bridge).
757 */ 757 */
758 if (!bond_slave_has_mac_rcu(bond, arp->mac_src)) 758 if (!bond_slave_has_mac_rx(bond, arp->mac_src))
759 return NULL; 759 return NULL;
760 760
761 if (arp->op_code == htons(ARPOP_REPLY)) { 761 if (arp->op_code == htons(ARPOP_REPLY)) {
@@ -1039,11 +1039,14 @@ static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[],
1039 struct bonding *bond = bond_get_bond_by_slave(slave); 1039 struct bonding *bond = bond_get_bond_by_slave(slave);
1040 struct net_device *upper; 1040 struct net_device *upper;
1041 struct list_head *iter; 1041 struct list_head *iter;
1042 struct bond_vlan_tag tags[BOND_MAX_VLAN_ENCAP];
1042 1043
1043 /* send untagged */ 1044 /* send untagged */
1044 alb_send_lp_vid(slave, mac_addr, 0, 0); 1045 alb_send_lp_vid(slave, mac_addr, 0, 0);
1045 1046
1046 /* loop through vlans and send one packet for each */ 1047 /* loop through all devices and see if we need to send a packet
1048 * for that device.
1049 */
1047 rcu_read_lock(); 1050 rcu_read_lock();
1048 netdev_for_each_all_upper_dev_rcu(bond->dev, upper, iter) { 1051 netdev_for_each_all_upper_dev_rcu(bond->dev, upper, iter) {
1049 if (is_vlan_dev(upper) && vlan_get_encap_level(upper) == 0) { 1052 if (is_vlan_dev(upper) && vlan_get_encap_level(upper) == 0) {
@@ -1059,6 +1062,16 @@ static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[],
1059 vlan_dev_vlan_id(upper)); 1062 vlan_dev_vlan_id(upper));
1060 } 1063 }
1061 } 1064 }
1065
1066 /* If this is a macvlan device, then only send updates
1067 * when strict_match is turned off.
1068 */
1069 if (netif_is_macvlan(upper) && !strict_match) {
1070 memset(tags, 0, sizeof(tags));
1071 bond_verify_device_path(bond->dev, upper, tags);
1072 alb_send_lp_vid(slave, upper->dev_addr,
1073 tags[0].vlan_proto, tags[0].vlan_id);
1074 }
1062 } 1075 }
1063 rcu_read_unlock(); 1076 rcu_read_unlock();
1064} 1077}
@@ -1068,7 +1081,7 @@ static int alb_set_slave_mac_addr(struct slave *slave, u8 addr[])
1068 struct net_device *dev = slave->dev; 1081 struct net_device *dev = slave->dev;
1069 struct sockaddr s_addr; 1082 struct sockaddr s_addr;
1070 1083
1071 if (slave->bond->params.mode == BOND_MODE_TLB) { 1084 if (BOND_MODE(slave->bond) == BOND_MODE_TLB) {
1072 memcpy(dev->dev_addr, addr, dev->addr_len); 1085 memcpy(dev->dev_addr, addr, dev->addr_len);
1073 return 0; 1086 return 0;
1074 } 1087 }
@@ -1111,13 +1124,13 @@ static void alb_swap_mac_addr(struct slave *slave1, struct slave *slave2)
1111static void alb_fasten_mac_swap(struct bonding *bond, struct slave *slave1, 1124static void alb_fasten_mac_swap(struct bonding *bond, struct slave *slave1,
1112 struct slave *slave2) 1125 struct slave *slave2)
1113{ 1126{
1114 int slaves_state_differ = (SLAVE_IS_OK(slave1) != SLAVE_IS_OK(slave2)); 1127 int slaves_state_differ = (bond_slave_can_tx(slave1) != bond_slave_can_tx(slave2));
1115 struct slave *disabled_slave = NULL; 1128 struct slave *disabled_slave = NULL;
1116 1129
1117 ASSERT_RTNL(); 1130 ASSERT_RTNL();
1118 1131
1119 /* fasten the change in the switch */ 1132 /* fasten the change in the switch */
1120 if (SLAVE_IS_OK(slave1)) { 1133 if (bond_slave_can_tx(slave1)) {
1121 alb_send_learning_packets(slave1, slave1->dev->dev_addr, false); 1134 alb_send_learning_packets(slave1, slave1->dev->dev_addr, false);
1122 if (bond->alb_info.rlb_enabled) { 1135 if (bond->alb_info.rlb_enabled) {
1123 /* inform the clients that the mac address 1136 /* inform the clients that the mac address
@@ -1129,7 +1142,7 @@ static void alb_fasten_mac_swap(struct bonding *bond, struct slave *slave1,
1129 disabled_slave = slave1; 1142 disabled_slave = slave1;
1130 } 1143 }
1131 1144
1132 if (SLAVE_IS_OK(slave2)) { 1145 if (bond_slave_can_tx(slave2)) {
1133 alb_send_learning_packets(slave2, slave2->dev->dev_addr, false); 1146 alb_send_learning_packets(slave2, slave2->dev->dev_addr, false);
1134 if (bond->alb_info.rlb_enabled) { 1147 if (bond->alb_info.rlb_enabled) {
1135 /* inform the clients that the mac address 1148 /* inform the clients that the mac address
@@ -1358,6 +1371,77 @@ void bond_alb_deinitialize(struct bonding *bond)
1358 rlb_deinitialize(bond); 1371 rlb_deinitialize(bond);
1359} 1372}
1360 1373
1374static int bond_do_alb_xmit(struct sk_buff *skb, struct bonding *bond,
1375 struct slave *tx_slave)
1376{
1377 struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond));
1378 struct ethhdr *eth_data = eth_hdr(skb);
1379
1380 if (!tx_slave) {
1381 /* unbalanced or unassigned, send through primary */
1382 tx_slave = rcu_dereference(bond->curr_active_slave);
1383 if (bond->params.tlb_dynamic_lb)
1384 bond_info->unbalanced_load += skb->len;
1385 }
1386
1387 if (tx_slave && bond_slave_can_tx(tx_slave)) {
1388 if (tx_slave != rcu_dereference(bond->curr_active_slave)) {
1389 ether_addr_copy(eth_data->h_source,
1390 tx_slave->dev->dev_addr);
1391 }
1392
1393 bond_dev_queue_xmit(bond, skb, tx_slave->dev);
1394 goto out;
1395 }
1396
1397 if (tx_slave && bond->params.tlb_dynamic_lb) {
1398 _lock_tx_hashtbl(bond);
1399 __tlb_clear_slave(bond, tx_slave, 0);
1400 _unlock_tx_hashtbl(bond);
1401 }
1402
1403 /* no suitable interface, frame not sent */
1404 dev_kfree_skb_any(skb);
1405out:
1406 return NETDEV_TX_OK;
1407}
1408
1409int bond_tlb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
1410{
1411 struct bonding *bond = netdev_priv(bond_dev);
1412 struct ethhdr *eth_data;
1413 struct slave *tx_slave = NULL;
1414 u32 hash_index;
1415
1416 skb_reset_mac_header(skb);
1417 eth_data = eth_hdr(skb);
1418
1419 /* Do not TX balance any multicast or broadcast */
1420 if (!is_multicast_ether_addr(eth_data->h_dest)) {
1421 switch (skb->protocol) {
1422 case htons(ETH_P_IP):
1423 case htons(ETH_P_IPX):
1424 /* In case of IPX, it will falback to L2 hash */
1425 case htons(ETH_P_IPV6):
1426 hash_index = bond_xmit_hash(bond, skb);
1427 if (bond->params.tlb_dynamic_lb) {
1428 tx_slave = tlb_choose_channel(bond,
1429 hash_index & 0xFF,
1430 skb->len);
1431 } else {
1432 struct list_head *iter;
1433 int idx = hash_index % bond->slave_cnt;
1434
1435 bond_for_each_slave_rcu(bond, tx_slave, iter)
1436 if (--idx < 0)
1437 break;
1438 }
1439 break;
1440 }
1441 }
1442 return bond_do_alb_xmit(skb, bond, tx_slave);
1443}
1444
1361int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev) 1445int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
1362{ 1446{
1363 struct bonding *bond = netdev_priv(bond_dev); 1447 struct bonding *bond = netdev_priv(bond_dev);
@@ -1366,7 +1450,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
1366 struct slave *tx_slave = NULL; 1450 struct slave *tx_slave = NULL;
1367 static const __be32 ip_bcast = htonl(0xffffffff); 1451 static const __be32 ip_bcast = htonl(0xffffffff);
1368 int hash_size = 0; 1452 int hash_size = 0;
1369 int do_tx_balance = 1; 1453 bool do_tx_balance = true;
1370 u32 hash_index = 0; 1454 u32 hash_index = 0;
1371 const u8 *hash_start = NULL; 1455 const u8 *hash_start = NULL;
1372 struct ipv6hdr *ip6hdr; 1456 struct ipv6hdr *ip6hdr;
@@ -1381,7 +1465,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
1381 if (ether_addr_equal_64bits(eth_data->h_dest, mac_bcast) || 1465 if (ether_addr_equal_64bits(eth_data->h_dest, mac_bcast) ||
1382 (iph->daddr == ip_bcast) || 1466 (iph->daddr == ip_bcast) ||
1383 (iph->protocol == IPPROTO_IGMP)) { 1467 (iph->protocol == IPPROTO_IGMP)) {
1384 do_tx_balance = 0; 1468 do_tx_balance = false;
1385 break; 1469 break;
1386 } 1470 }
1387 hash_start = (char *)&(iph->daddr); 1471 hash_start = (char *)&(iph->daddr);
@@ -1393,7 +1477,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
1393 * that here just in case. 1477 * that here just in case.
1394 */ 1478 */
1395 if (ether_addr_equal_64bits(eth_data->h_dest, mac_bcast)) { 1479 if (ether_addr_equal_64bits(eth_data->h_dest, mac_bcast)) {
1396 do_tx_balance = 0; 1480 do_tx_balance = false;
1397 break; 1481 break;
1398 } 1482 }
1399 1483
@@ -1401,7 +1485,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
1401 * broadcasts in IPv4. 1485 * broadcasts in IPv4.
1402 */ 1486 */
1403 if (ether_addr_equal_64bits(eth_data->h_dest, mac_v6_allmcast)) { 1487 if (ether_addr_equal_64bits(eth_data->h_dest, mac_v6_allmcast)) {
1404 do_tx_balance = 0; 1488 do_tx_balance = false;
1405 break; 1489 break;
1406 } 1490 }
1407 1491
@@ -1411,7 +1495,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
1411 */ 1495 */
1412 ip6hdr = ipv6_hdr(skb); 1496 ip6hdr = ipv6_hdr(skb);
1413 if (ipv6_addr_any(&ip6hdr->saddr)) { 1497 if (ipv6_addr_any(&ip6hdr->saddr)) {
1414 do_tx_balance = 0; 1498 do_tx_balance = false;
1415 break; 1499 break;
1416 } 1500 }
1417 1501
@@ -1421,7 +1505,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
1421 case ETH_P_IPX: 1505 case ETH_P_IPX:
1422 if (ipx_hdr(skb)->ipx_checksum != IPX_NO_CHECKSUM) { 1506 if (ipx_hdr(skb)->ipx_checksum != IPX_NO_CHECKSUM) {
1423 /* something is wrong with this packet */ 1507 /* something is wrong with this packet */
1424 do_tx_balance = 0; 1508 do_tx_balance = false;
1425 break; 1509 break;
1426 } 1510 }
1427 1511
@@ -1430,7 +1514,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
1430 * this family since it has an "ARP" like 1514 * this family since it has an "ARP" like
1431 * mechanism 1515 * mechanism
1432 */ 1516 */
1433 do_tx_balance = 0; 1517 do_tx_balance = false;
1434 break; 1518 break;
1435 } 1519 }
1436 1520
@@ -1438,12 +1522,12 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
1438 hash_size = ETH_ALEN; 1522 hash_size = ETH_ALEN;
1439 break; 1523 break;
1440 case ETH_P_ARP: 1524 case ETH_P_ARP:
1441 do_tx_balance = 0; 1525 do_tx_balance = false;
1442 if (bond_info->rlb_enabled) 1526 if (bond_info->rlb_enabled)
1443 tx_slave = rlb_arp_xmit(skb, bond); 1527 tx_slave = rlb_arp_xmit(skb, bond);
1444 break; 1528 break;
1445 default: 1529 default:
1446 do_tx_balance = 0; 1530 do_tx_balance = false;
1447 break; 1531 break;
1448 } 1532 }
1449 1533
@@ -1452,32 +1536,7 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
1452 tx_slave = tlb_choose_channel(bond, hash_index, skb->len); 1536 tx_slave = tlb_choose_channel(bond, hash_index, skb->len);
1453 } 1537 }
1454 1538
1455 if (!tx_slave) { 1539 return bond_do_alb_xmit(skb, bond, tx_slave);
1456 /* unbalanced or unassigned, send through primary */
1457 tx_slave = rcu_dereference(bond->curr_active_slave);
1458 bond_info->unbalanced_load += skb->len;
1459 }
1460
1461 if (tx_slave && SLAVE_IS_OK(tx_slave)) {
1462 if (tx_slave != rcu_dereference(bond->curr_active_slave)) {
1463 ether_addr_copy(eth_data->h_source,
1464 tx_slave->dev->dev_addr);
1465 }
1466
1467 bond_dev_queue_xmit(bond, skb, tx_slave->dev);
1468 goto out;
1469 }
1470
1471 if (tx_slave) {
1472 _lock_tx_hashtbl(bond);
1473 __tlb_clear_slave(bond, tx_slave, 0);
1474 _unlock_tx_hashtbl(bond);
1475 }
1476
1477 /* no suitable interface, frame not sent */
1478 dev_kfree_skb_any(skb);
1479out:
1480 return NETDEV_TX_OK;
1481} 1540}
1482 1541
1483void bond_alb_monitor(struct work_struct *work) 1542void bond_alb_monitor(struct work_struct *work)
@@ -1514,8 +1573,10 @@ void bond_alb_monitor(struct work_struct *work)
1514 /* If updating current_active, use all currently 1573 /* If updating current_active, use all currently
1515 * user mac addreses (!strict_match). Otherwise, only 1574 * user mac addreses (!strict_match). Otherwise, only
1516 * use mac of the slave device. 1575 * use mac of the slave device.
1576 * In RLB mode, we always use strict matches.
1517 */ 1577 */
1518 strict_match = (slave != bond->curr_active_slave); 1578 strict_match = (slave != bond->curr_active_slave ||
1579 bond_info->rlb_enabled);
1519 alb_send_learning_packets(slave, slave->dev->dev_addr, 1580 alb_send_learning_packets(slave, slave->dev->dev_addr,
1520 strict_match); 1581 strict_match);
1521 } 1582 }
@@ -1719,7 +1780,7 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave
1719 /* in TLB mode, the slave might flip down/up with the old dev_addr, 1780 /* in TLB mode, the slave might flip down/up with the old dev_addr,
1720 * and thus filter bond->dev_addr's packets, so force bond's mac 1781 * and thus filter bond->dev_addr's packets, so force bond's mac
1721 */ 1782 */
1722 if (bond->params.mode == BOND_MODE_TLB) { 1783 if (BOND_MODE(bond) == BOND_MODE_TLB) {
1723 struct sockaddr sa; 1784 struct sockaddr sa;
1724 u8 tmp_addr[ETH_ALEN]; 1785 u8 tmp_addr[ETH_ALEN];
1725 1786
diff --git a/drivers/net/bonding/bond_alb.h b/drivers/net/bonding/bond_alb.h
index e09dd4bfafff..5fc76c01636c 100644
--- a/drivers/net/bonding/bond_alb.h
+++ b/drivers/net/bonding/bond_alb.h
@@ -175,6 +175,7 @@ void bond_alb_deinit_slave(struct bonding *bond, struct slave *slave);
175void bond_alb_handle_link_change(struct bonding *bond, struct slave *slave, char link); 175void bond_alb_handle_link_change(struct bonding *bond, struct slave *slave, char link);
176void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave); 176void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave);
177int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev); 177int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev);
178int bond_tlb_xmit(struct sk_buff *skb, struct net_device *bond_dev);
178void bond_alb_monitor(struct work_struct *); 179void bond_alb_monitor(struct work_struct *);
179int bond_alb_set_mac_address(struct net_device *bond_dev, void *addr); 180int bond_alb_set_mac_address(struct net_device *bond_dev, void *addr);
180void bond_alb_clear_vlan(struct bonding *bond, unsigned short vlan_id); 181void bond_alb_clear_vlan(struct bonding *bond, unsigned short vlan_id);
diff --git a/drivers/net/bonding/bond_debugfs.c b/drivers/net/bonding/bond_debugfs.c
index 2d3f7fa541ff..658e761c4568 100644
--- a/drivers/net/bonding/bond_debugfs.c
+++ b/drivers/net/bonding/bond_debugfs.c
@@ -23,7 +23,7 @@ static int bond_debug_rlb_hash_show(struct seq_file *m, void *v)
23 struct rlb_client_info *client_info; 23 struct rlb_client_info *client_info;
24 u32 hash_index; 24 u32 hash_index;
25 25
26 if (bond->params.mode != BOND_MODE_ALB) 26 if (BOND_MODE(bond) != BOND_MODE_ALB)
27 return 0; 27 return 0;
28 28
29 seq_printf(m, "SourceIP DestinationIP " 29 seq_printf(m, "SourceIP DestinationIP "
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index d3a67896d435..04f35f960cb8 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -343,7 +343,7 @@ static int bond_set_carrier(struct bonding *bond)
343 if (!bond_has_slaves(bond)) 343 if (!bond_has_slaves(bond))
344 goto down; 344 goto down;
345 345
346 if (bond->params.mode == BOND_MODE_8023AD) 346 if (BOND_MODE(bond) == BOND_MODE_8023AD)
347 return bond_3ad_set_carrier(bond); 347 return bond_3ad_set_carrier(bond);
348 348
349 bond_for_each_slave(bond, slave, iter) { 349 bond_for_each_slave(bond, slave, iter) {
@@ -497,7 +497,7 @@ static int bond_set_promiscuity(struct bonding *bond, int inc)
497 struct list_head *iter; 497 struct list_head *iter;
498 int err = 0; 498 int err = 0;
499 499
500 if (USES_PRIMARY(bond->params.mode)) { 500 if (bond_uses_primary(bond)) {
501 /* write lock already acquired */ 501 /* write lock already acquired */
502 if (bond->curr_active_slave) { 502 if (bond->curr_active_slave) {
503 err = dev_set_promiscuity(bond->curr_active_slave->dev, 503 err = dev_set_promiscuity(bond->curr_active_slave->dev,
@@ -523,7 +523,7 @@ static int bond_set_allmulti(struct bonding *bond, int inc)
523 struct list_head *iter; 523 struct list_head *iter;
524 int err = 0; 524 int err = 0;
525 525
526 if (USES_PRIMARY(bond->params.mode)) { 526 if (bond_uses_primary(bond)) {
527 /* write lock already acquired */ 527 /* write lock already acquired */
528 if (bond->curr_active_slave) { 528 if (bond->curr_active_slave) {
529 err = dev_set_allmulti(bond->curr_active_slave->dev, 529 err = dev_set_allmulti(bond->curr_active_slave->dev,
@@ -574,7 +574,7 @@ static void bond_hw_addr_flush(struct net_device *bond_dev,
574 dev_uc_unsync(slave_dev, bond_dev); 574 dev_uc_unsync(slave_dev, bond_dev);
575 dev_mc_unsync(slave_dev, bond_dev); 575 dev_mc_unsync(slave_dev, bond_dev);
576 576
577 if (bond->params.mode == BOND_MODE_8023AD) { 577 if (BOND_MODE(bond) == BOND_MODE_8023AD) {
578 /* del lacpdu mc addr from mc list */ 578 /* del lacpdu mc addr from mc list */
579 u8 lacpdu_multicast[ETH_ALEN] = MULTICAST_LACPDU_ADDR; 579 u8 lacpdu_multicast[ETH_ALEN] = MULTICAST_LACPDU_ADDR;
580 580
@@ -585,8 +585,8 @@ static void bond_hw_addr_flush(struct net_device *bond_dev,
585/*--------------------------- Active slave change ---------------------------*/ 585/*--------------------------- Active slave change ---------------------------*/
586 586
587/* Update the hardware address list and promisc/allmulti for the new and 587/* Update the hardware address list and promisc/allmulti for the new and
588 * old active slaves (if any). Modes that are !USES_PRIMARY keep all 588 * old active slaves (if any). Modes that are not using primary keep all
589 * slaves up date at all times; only the USES_PRIMARY modes need to call 589 * slaves up date at all times; only the modes that use primary need to call
590 * this function to swap these settings during a failover. 590 * this function to swap these settings during a failover.
591 */ 591 */
592static void bond_hw_addr_swap(struct bonding *bond, struct slave *new_active, 592static void bond_hw_addr_swap(struct bonding *bond, struct slave *new_active,
@@ -747,7 +747,7 @@ static struct slave *bond_find_best_slave(struct bonding *bond)
747 bond_for_each_slave(bond, slave, iter) { 747 bond_for_each_slave(bond, slave, iter) {
748 if (slave->link == BOND_LINK_UP) 748 if (slave->link == BOND_LINK_UP)
749 return slave; 749 return slave;
750 if (slave->link == BOND_LINK_BACK && IS_UP(slave->dev) && 750 if (slave->link == BOND_LINK_BACK && bond_slave_is_up(slave) &&
751 slave->delay < mintime) { 751 slave->delay < mintime) {
752 mintime = slave->delay; 752 mintime = slave->delay;
753 bestslave = slave; 753 bestslave = slave;
@@ -801,7 +801,7 @@ void bond_change_active_slave(struct bonding *bond, struct slave *new_active)
801 new_active->last_link_up = jiffies; 801 new_active->last_link_up = jiffies;
802 802
803 if (new_active->link == BOND_LINK_BACK) { 803 if (new_active->link == BOND_LINK_BACK) {
804 if (USES_PRIMARY(bond->params.mode)) { 804 if (bond_uses_primary(bond)) {
805 pr_info("%s: making interface %s the new active one %d ms earlier\n", 805 pr_info("%s: making interface %s the new active one %d ms earlier\n",
806 bond->dev->name, new_active->dev->name, 806 bond->dev->name, new_active->dev->name,
807 (bond->params.updelay - new_active->delay) * bond->params.miimon); 807 (bond->params.updelay - new_active->delay) * bond->params.miimon);
@@ -810,20 +810,20 @@ void bond_change_active_slave(struct bonding *bond, struct slave *new_active)
810 new_active->delay = 0; 810 new_active->delay = 0;
811 new_active->link = BOND_LINK_UP; 811 new_active->link = BOND_LINK_UP;
812 812
813 if (bond->params.mode == BOND_MODE_8023AD) 813 if (BOND_MODE(bond) == BOND_MODE_8023AD)
814 bond_3ad_handle_link_change(new_active, BOND_LINK_UP); 814 bond_3ad_handle_link_change(new_active, BOND_LINK_UP);
815 815
816 if (bond_is_lb(bond)) 816 if (bond_is_lb(bond))
817 bond_alb_handle_link_change(bond, new_active, BOND_LINK_UP); 817 bond_alb_handle_link_change(bond, new_active, BOND_LINK_UP);
818 } else { 818 } else {
819 if (USES_PRIMARY(bond->params.mode)) { 819 if (bond_uses_primary(bond)) {
820 pr_info("%s: making interface %s the new active one\n", 820 pr_info("%s: making interface %s the new active one\n",
821 bond->dev->name, new_active->dev->name); 821 bond->dev->name, new_active->dev->name);
822 } 822 }
823 } 823 }
824 } 824 }
825 825
826 if (USES_PRIMARY(bond->params.mode)) 826 if (bond_uses_primary(bond))
827 bond_hw_addr_swap(bond, new_active, old_active); 827 bond_hw_addr_swap(bond, new_active, old_active);
828 828
829 if (bond_is_lb(bond)) { 829 if (bond_is_lb(bond)) {
@@ -838,7 +838,7 @@ void bond_change_active_slave(struct bonding *bond, struct slave *new_active)
838 rcu_assign_pointer(bond->curr_active_slave, new_active); 838 rcu_assign_pointer(bond->curr_active_slave, new_active);
839 } 839 }
840 840
841 if (bond->params.mode == BOND_MODE_ACTIVEBACKUP) { 841 if (BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP) {
842 if (old_active) 842 if (old_active)
843 bond_set_slave_inactive_flags(old_active, 843 bond_set_slave_inactive_flags(old_active,
844 BOND_SLAVE_NOTIFY_NOW); 844 BOND_SLAVE_NOTIFY_NOW);
@@ -876,8 +876,8 @@ void bond_change_active_slave(struct bonding *bond, struct slave *new_active)
876 * resend only if bond is brought up with the affected 876 * resend only if bond is brought up with the affected
877 * bonding modes and the retransmission is enabled */ 877 * bonding modes and the retransmission is enabled */
878 if (netif_running(bond->dev) && (bond->params.resend_igmp > 0) && 878 if (netif_running(bond->dev) && (bond->params.resend_igmp > 0) &&
879 ((USES_PRIMARY(bond->params.mode) && new_active) || 879 ((bond_uses_primary(bond) && new_active) ||
880 bond->params.mode == BOND_MODE_ROUNDROBIN)) { 880 BOND_MODE(bond) == BOND_MODE_ROUNDROBIN)) {
881 bond->igmp_retrans = bond->params.resend_igmp; 881 bond->igmp_retrans = bond->params.resend_igmp;
882 queue_delayed_work(bond->wq, &bond->mcast_work, 1); 882 queue_delayed_work(bond->wq, &bond->mcast_work, 1);
883 } 883 }
@@ -958,7 +958,7 @@ static void bond_netpoll_cleanup(struct net_device *bond_dev)
958 struct slave *slave; 958 struct slave *slave;
959 959
960 bond_for_each_slave(bond, slave, iter) 960 bond_for_each_slave(bond, slave, iter)
961 if (IS_UP(slave->dev)) 961 if (bond_slave_is_up(slave))
962 slave_disable_netpoll(slave); 962 slave_disable_netpoll(slave);
963} 963}
964 964
@@ -1038,6 +1038,7 @@ static void bond_compute_features(struct bonding *bond)
1038 1038
1039 if (!bond_has_slaves(bond)) 1039 if (!bond_has_slaves(bond))
1040 goto done; 1040 goto done;
1041 vlan_features &= NETIF_F_ALL_FOR_ALL;
1041 1042
1042 bond_for_each_slave(bond, slave, iter) { 1043 bond_for_each_slave(bond, slave, iter) {
1043 vlan_features = netdev_increment_features(vlan_features, 1044 vlan_features = netdev_increment_features(vlan_features,
@@ -1084,7 +1085,7 @@ static bool bond_should_deliver_exact_match(struct sk_buff *skb,
1084 struct bonding *bond) 1085 struct bonding *bond)
1085{ 1086{
1086 if (bond_is_slave_inactive(slave)) { 1087 if (bond_is_slave_inactive(slave)) {
1087 if (bond->params.mode == BOND_MODE_ALB && 1088 if (BOND_MODE(bond) == BOND_MODE_ALB &&
1088 skb->pkt_type != PACKET_BROADCAST && 1089 skb->pkt_type != PACKET_BROADCAST &&
1089 skb->pkt_type != PACKET_MULTICAST) 1090 skb->pkt_type != PACKET_MULTICAST)
1090 return false; 1091 return false;
@@ -1126,7 +1127,7 @@ static rx_handler_result_t bond_handle_frame(struct sk_buff **pskb)
1126 1127
1127 skb->dev = bond->dev; 1128 skb->dev = bond->dev;
1128 1129
1129 if (bond->params.mode == BOND_MODE_ALB && 1130 if (BOND_MODE(bond) == BOND_MODE_ALB &&
1130 bond->dev->priv_flags & IFF_BRIDGE_PORT && 1131 bond->dev->priv_flags & IFF_BRIDGE_PORT &&
1131 skb->pkt_type == PACKET_HOST) { 1132 skb->pkt_type == PACKET_HOST) {
1132 1133
@@ -1163,6 +1164,35 @@ static void bond_upper_dev_unlink(struct net_device *bond_dev,
1163 rtmsg_ifinfo(RTM_NEWLINK, slave_dev, IFF_SLAVE, GFP_KERNEL); 1164 rtmsg_ifinfo(RTM_NEWLINK, slave_dev, IFF_SLAVE, GFP_KERNEL);
1164} 1165}
1165 1166
1167static struct slave *bond_alloc_slave(struct bonding *bond)
1168{
1169 struct slave *slave = NULL;
1170
1171 slave = kzalloc(sizeof(struct slave), GFP_KERNEL);
1172 if (!slave)
1173 return NULL;
1174
1175 if (BOND_MODE(bond) == BOND_MODE_8023AD) {
1176 SLAVE_AD_INFO(slave) = kzalloc(sizeof(struct ad_slave_info),
1177 GFP_KERNEL);
1178 if (!SLAVE_AD_INFO(slave)) {
1179 kfree(slave);
1180 return NULL;
1181 }
1182 }
1183 return slave;
1184}
1185
1186static void bond_free_slave(struct slave *slave)
1187{
1188 struct bonding *bond = bond_get_bond_by_slave(slave);
1189
1190 if (BOND_MODE(bond) == BOND_MODE_8023AD)
1191 kfree(SLAVE_AD_INFO(slave));
1192
1193 kfree(slave);
1194}
1195
1166/* enslave device <slave> to bond device <master> */ 1196/* enslave device <slave> to bond device <master> */
1167int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) 1197int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
1168{ 1198{
@@ -1269,7 +1299,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
1269 if (!bond_has_slaves(bond)) { 1299 if (!bond_has_slaves(bond)) {
1270 pr_warn("%s: Warning: The first slave device specified does not support setting the MAC address\n", 1300 pr_warn("%s: Warning: The first slave device specified does not support setting the MAC address\n",
1271 bond_dev->name); 1301 bond_dev->name);
1272 if (bond->params.mode == BOND_MODE_ACTIVEBACKUP) { 1302 if (BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP) {
1273 bond->params.fail_over_mac = BOND_FOM_ACTIVE; 1303 bond->params.fail_over_mac = BOND_FOM_ACTIVE;
1274 pr_warn("%s: Setting fail_over_mac to active for active-backup mode\n", 1304 pr_warn("%s: Setting fail_over_mac to active for active-backup mode\n",
1275 bond_dev->name); 1305 bond_dev->name);
@@ -1290,11 +1320,14 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
1290 bond->dev->addr_assign_type == NET_ADDR_RANDOM) 1320 bond->dev->addr_assign_type == NET_ADDR_RANDOM)
1291 bond_set_dev_addr(bond->dev, slave_dev); 1321 bond_set_dev_addr(bond->dev, slave_dev);
1292 1322
1293 new_slave = kzalloc(sizeof(struct slave), GFP_KERNEL); 1323 new_slave = bond_alloc_slave(bond);
1294 if (!new_slave) { 1324 if (!new_slave) {
1295 res = -ENOMEM; 1325 res = -ENOMEM;
1296 goto err_undo_flags; 1326 goto err_undo_flags;
1297 } 1327 }
1328
1329 new_slave->bond = bond;
1330 new_slave->dev = slave_dev;
1298 /* 1331 /*
1299 * Set the new_slave's queue_id to be zero. Queue ID mapping 1332 * Set the new_slave's queue_id to be zero. Queue ID mapping
1300 * is set via sysfs or module option if desired. 1333 * is set via sysfs or module option if desired.
@@ -1317,7 +1350,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
1317 ether_addr_copy(new_slave->perm_hwaddr, slave_dev->dev_addr); 1350 ether_addr_copy(new_slave->perm_hwaddr, slave_dev->dev_addr);
1318 1351
1319 if (!bond->params.fail_over_mac || 1352 if (!bond->params.fail_over_mac ||
1320 bond->params.mode != BOND_MODE_ACTIVEBACKUP) { 1353 BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP) {
1321 /* 1354 /*
1322 * Set slave to master's mac address. The application already 1355 * Set slave to master's mac address. The application already
1323 * set the master's mac address to that of the first slave 1356 * set the master's mac address to that of the first slave
@@ -1338,8 +1371,6 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
1338 goto err_restore_mac; 1371 goto err_restore_mac;
1339 } 1372 }
1340 1373
1341 new_slave->bond = bond;
1342 new_slave->dev = slave_dev;
1343 slave_dev->priv_flags |= IFF_BONDING; 1374 slave_dev->priv_flags |= IFF_BONDING;
1344 1375
1345 if (bond_is_lb(bond)) { 1376 if (bond_is_lb(bond)) {
@@ -1351,10 +1382,10 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
1351 goto err_close; 1382 goto err_close;
1352 } 1383 }
1353 1384
1354 /* If the mode USES_PRIMARY, then the following is handled by 1385 /* If the mode uses primary, then the following is handled by
1355 * bond_change_active_slave(). 1386 * bond_change_active_slave().
1356 */ 1387 */
1357 if (!USES_PRIMARY(bond->params.mode)) { 1388 if (!bond_uses_primary(bond)) {
1358 /* set promiscuity level to new slave */ 1389 /* set promiscuity level to new slave */
1359 if (bond_dev->flags & IFF_PROMISC) { 1390 if (bond_dev->flags & IFF_PROMISC) {
1360 res = dev_set_promiscuity(slave_dev, 1); 1391 res = dev_set_promiscuity(slave_dev, 1);
@@ -1377,7 +1408,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
1377 netif_addr_unlock_bh(bond_dev); 1408 netif_addr_unlock_bh(bond_dev);
1378 } 1409 }
1379 1410
1380 if (bond->params.mode == BOND_MODE_8023AD) { 1411 if (BOND_MODE(bond) == BOND_MODE_8023AD) {
1381 /* add lacpdu mc addr to mc list */ 1412 /* add lacpdu mc addr to mc list */
1382 u8 lacpdu_multicast[ETH_ALEN] = MULTICAST_LACPDU_ADDR; 1413 u8 lacpdu_multicast[ETH_ALEN] = MULTICAST_LACPDU_ADDR;
1383 1414
@@ -1450,7 +1481,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
1450 new_slave->link == BOND_LINK_DOWN ? "DOWN" : 1481 new_slave->link == BOND_LINK_DOWN ? "DOWN" :
1451 (new_slave->link == BOND_LINK_UP ? "UP" : "BACK")); 1482 (new_slave->link == BOND_LINK_UP ? "UP" : "BACK"));
1452 1483
1453 if (USES_PRIMARY(bond->params.mode) && bond->params.primary[0]) { 1484 if (bond_uses_primary(bond) && bond->params.primary[0]) {
1454 /* if there is a primary slave, remember it */ 1485 /* if there is a primary slave, remember it */
1455 if (strcmp(bond->params.primary, new_slave->dev->name) == 0) { 1486 if (strcmp(bond->params.primary, new_slave->dev->name) == 0) {
1456 bond->primary_slave = new_slave; 1487 bond->primary_slave = new_slave;
@@ -1458,7 +1489,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
1458 } 1489 }
1459 } 1490 }
1460 1491
1461 switch (bond->params.mode) { 1492 switch (BOND_MODE(bond)) {
1462 case BOND_MODE_ACTIVEBACKUP: 1493 case BOND_MODE_ACTIVEBACKUP:
1463 bond_set_slave_inactive_flags(new_slave, 1494 bond_set_slave_inactive_flags(new_slave,
1464 BOND_SLAVE_NOTIFY_NOW); 1495 BOND_SLAVE_NOTIFY_NOW);
@@ -1471,14 +1502,14 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
1471 bond_set_slave_inactive_flags(new_slave, BOND_SLAVE_NOTIFY_NOW); 1502 bond_set_slave_inactive_flags(new_slave, BOND_SLAVE_NOTIFY_NOW);
1472 /* if this is the first slave */ 1503 /* if this is the first slave */
1473 if (!prev_slave) { 1504 if (!prev_slave) {
1474 SLAVE_AD_INFO(new_slave).id = 1; 1505 SLAVE_AD_INFO(new_slave)->id = 1;
1475 /* Initialize AD with the number of times that the AD timer is called in 1 second 1506 /* Initialize AD with the number of times that the AD timer is called in 1 second
1476 * can be called only after the mac address of the bond is set 1507 * can be called only after the mac address of the bond is set
1477 */ 1508 */
1478 bond_3ad_initialize(bond, 1000/AD_TIMER_INTERVAL); 1509 bond_3ad_initialize(bond, 1000/AD_TIMER_INTERVAL);
1479 } else { 1510 } else {
1480 SLAVE_AD_INFO(new_slave).id = 1511 SLAVE_AD_INFO(new_slave)->id =
1481 SLAVE_AD_INFO(prev_slave).id + 1; 1512 SLAVE_AD_INFO(prev_slave)->id + 1;
1482 } 1513 }
1483 1514
1484 bond_3ad_bind_slave(new_slave); 1515 bond_3ad_bind_slave(new_slave);
@@ -1539,7 +1570,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
1539 bond_compute_features(bond); 1570 bond_compute_features(bond);
1540 bond_set_carrier(bond); 1571 bond_set_carrier(bond);
1541 1572
1542 if (USES_PRIMARY(bond->params.mode)) { 1573 if (bond_uses_primary(bond)) {
1543 block_netpoll_tx(); 1574 block_netpoll_tx();
1544 write_lock_bh(&bond->curr_slave_lock); 1575 write_lock_bh(&bond->curr_slave_lock);
1545 bond_select_active_slave(bond); 1576 bond_select_active_slave(bond);
@@ -1563,7 +1594,7 @@ err_unregister:
1563 netdev_rx_handler_unregister(slave_dev); 1594 netdev_rx_handler_unregister(slave_dev);
1564 1595
1565err_detach: 1596err_detach:
1566 if (!USES_PRIMARY(bond->params.mode)) 1597 if (!bond_uses_primary(bond))
1567 bond_hw_addr_flush(bond_dev, slave_dev); 1598 bond_hw_addr_flush(bond_dev, slave_dev);
1568 1599
1569 vlan_vids_del_by_dev(slave_dev, bond_dev); 1600 vlan_vids_del_by_dev(slave_dev, bond_dev);
@@ -1585,7 +1616,7 @@ err_close:
1585 1616
1586err_restore_mac: 1617err_restore_mac:
1587 if (!bond->params.fail_over_mac || 1618 if (!bond->params.fail_over_mac ||
1588 bond->params.mode != BOND_MODE_ACTIVEBACKUP) { 1619 BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP) {
1589 /* XXX TODO - fom follow mode needs to change master's 1620 /* XXX TODO - fom follow mode needs to change master's
1590 * MAC if this slave's MAC is in use by the bond, or at 1621 * MAC if this slave's MAC is in use by the bond, or at
1591 * least print a warning. 1622 * least print a warning.
@@ -1599,7 +1630,7 @@ err_restore_mtu:
1599 dev_set_mtu(slave_dev, new_slave->original_mtu); 1630 dev_set_mtu(slave_dev, new_slave->original_mtu);
1600 1631
1601err_free: 1632err_free:
1602 kfree(new_slave); 1633 bond_free_slave(new_slave);
1603 1634
1604err_undo_flags: 1635err_undo_flags:
1605 /* Enslave of first slave has failed and we need to fix master's mac */ 1636 /* Enslave of first slave has failed and we need to fix master's mac */
@@ -1661,7 +1692,7 @@ static int __bond_release_one(struct net_device *bond_dev,
1661 write_lock_bh(&bond->lock); 1692 write_lock_bh(&bond->lock);
1662 1693
1663 /* Inform AD package of unbinding of slave. */ 1694 /* Inform AD package of unbinding of slave. */
1664 if (bond->params.mode == BOND_MODE_8023AD) 1695 if (BOND_MODE(bond) == BOND_MODE_8023AD)
1665 bond_3ad_unbind_slave(slave); 1696 bond_3ad_unbind_slave(slave);
1666 1697
1667 write_unlock_bh(&bond->lock); 1698 write_unlock_bh(&bond->lock);
@@ -1676,7 +1707,7 @@ static int __bond_release_one(struct net_device *bond_dev,
1676 bond->current_arp_slave = NULL; 1707 bond->current_arp_slave = NULL;
1677 1708
1678 if (!all && (!bond->params.fail_over_mac || 1709 if (!all && (!bond->params.fail_over_mac ||
1679 bond->params.mode != BOND_MODE_ACTIVEBACKUP)) { 1710 BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP)) {
1680 if (ether_addr_equal_64bits(bond_dev->dev_addr, slave->perm_hwaddr) && 1711 if (ether_addr_equal_64bits(bond_dev->dev_addr, slave->perm_hwaddr) &&
1681 bond_has_slaves(bond)) 1712 bond_has_slaves(bond))
1682 pr_warn("%s: Warning: the permanent HWaddr of %s - %pM - is still in use by %s - set the HWaddr of %s to a different address to avoid conflicts\n", 1713 pr_warn("%s: Warning: the permanent HWaddr of %s - %pM - is still in use by %s - set the HWaddr of %s to a different address to avoid conflicts\n",
@@ -1748,10 +1779,10 @@ static int __bond_release_one(struct net_device *bond_dev,
1748 /* must do this from outside any spinlocks */ 1779 /* must do this from outside any spinlocks */
1749 vlan_vids_del_by_dev(slave_dev, bond_dev); 1780 vlan_vids_del_by_dev(slave_dev, bond_dev);
1750 1781
1751 /* If the mode USES_PRIMARY, then this cases was handled above by 1782 /* If the mode uses primary, then this cases was handled above by
1752 * bond_change_active_slave(..., NULL) 1783 * bond_change_active_slave(..., NULL)
1753 */ 1784 */
1754 if (!USES_PRIMARY(bond->params.mode)) { 1785 if (!bond_uses_primary(bond)) {
1755 /* unset promiscuity level from slave 1786 /* unset promiscuity level from slave
1756 * NOTE: The NETDEV_CHANGEADDR call above may change the value 1787 * NOTE: The NETDEV_CHANGEADDR call above may change the value
1757 * of the IFF_PROMISC flag in the bond_dev, but we need the 1788 * of the IFF_PROMISC flag in the bond_dev, but we need the
@@ -1775,7 +1806,7 @@ static int __bond_release_one(struct net_device *bond_dev,
1775 dev_close(slave_dev); 1806 dev_close(slave_dev);
1776 1807
1777 if (bond->params.fail_over_mac != BOND_FOM_ACTIVE || 1808 if (bond->params.fail_over_mac != BOND_FOM_ACTIVE ||
1778 bond->params.mode != BOND_MODE_ACTIVEBACKUP) { 1809 BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP) {
1779 /* restore original ("permanent") mac address */ 1810 /* restore original ("permanent") mac address */
1780 ether_addr_copy(addr.sa_data, slave->perm_hwaddr); 1811 ether_addr_copy(addr.sa_data, slave->perm_hwaddr);
1781 addr.sa_family = slave_dev->type; 1812 addr.sa_family = slave_dev->type;
@@ -1786,7 +1817,7 @@ static int __bond_release_one(struct net_device *bond_dev,
1786 1817
1787 slave_dev->priv_flags &= ~IFF_BONDING; 1818 slave_dev->priv_flags &= ~IFF_BONDING;
1788 1819
1789 kfree(slave); 1820 bond_free_slave(slave);
1790 1821
1791 return 0; /* deletion OK */ 1822 return 0; /* deletion OK */
1792} 1823}
@@ -1821,7 +1852,7 @@ static int bond_info_query(struct net_device *bond_dev, struct ifbond *info)
1821{ 1852{
1822 struct bonding *bond = netdev_priv(bond_dev); 1853 struct bonding *bond = netdev_priv(bond_dev);
1823 1854
1824 info->bond_mode = bond->params.mode; 1855 info->bond_mode = BOND_MODE(bond);
1825 info->miimon = bond->params.miimon; 1856 info->miimon = bond->params.miimon;
1826 1857
1827 info->num_slaves = bond->slave_cnt; 1858 info->num_slaves = bond->slave_cnt;
@@ -1877,7 +1908,7 @@ static int bond_miimon_inspect(struct bonding *bond)
1877 if (slave->delay) { 1908 if (slave->delay) {
1878 pr_info("%s: link status down for %sinterface %s, disabling it in %d ms\n", 1909 pr_info("%s: link status down for %sinterface %s, disabling it in %d ms\n",
1879 bond->dev->name, 1910 bond->dev->name,
1880 (bond->params.mode == 1911 (BOND_MODE(bond) ==
1881 BOND_MODE_ACTIVEBACKUP) ? 1912 BOND_MODE_ACTIVEBACKUP) ?
1882 (bond_is_active_slave(slave) ? 1913 (bond_is_active_slave(slave) ?
1883 "active " : "backup ") : "", 1914 "active " : "backup ") : "",
@@ -1968,10 +1999,10 @@ static void bond_miimon_commit(struct bonding *bond)
1968 slave->link = BOND_LINK_UP; 1999 slave->link = BOND_LINK_UP;
1969 slave->last_link_up = jiffies; 2000 slave->last_link_up = jiffies;
1970 2001
1971 if (bond->params.mode == BOND_MODE_8023AD) { 2002 if (BOND_MODE(bond) == BOND_MODE_8023AD) {
1972 /* prevent it from being the active one */ 2003 /* prevent it from being the active one */
1973 bond_set_backup_slave(slave); 2004 bond_set_backup_slave(slave);
1974 } else if (bond->params.mode != BOND_MODE_ACTIVEBACKUP) { 2005 } else if (BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP) {
1975 /* make it immediately active */ 2006 /* make it immediately active */
1976 bond_set_active_slave(slave); 2007 bond_set_active_slave(slave);
1977 } else if (slave != bond->primary_slave) { 2008 } else if (slave != bond->primary_slave) {
@@ -1985,7 +2016,7 @@ static void bond_miimon_commit(struct bonding *bond)
1985 slave->duplex ? "full" : "half"); 2016 slave->duplex ? "full" : "half");
1986 2017
1987 /* notify ad that the link status has changed */ 2018 /* notify ad that the link status has changed */
1988 if (bond->params.mode == BOND_MODE_8023AD) 2019 if (BOND_MODE(bond) == BOND_MODE_8023AD)
1989 bond_3ad_handle_link_change(slave, BOND_LINK_UP); 2020 bond_3ad_handle_link_change(slave, BOND_LINK_UP);
1990 2021
1991 if (bond_is_lb(bond)) 2022 if (bond_is_lb(bond))
@@ -2004,15 +2035,15 @@ static void bond_miimon_commit(struct bonding *bond)
2004 2035
2005 slave->link = BOND_LINK_DOWN; 2036 slave->link = BOND_LINK_DOWN;
2006 2037
2007 if (bond->params.mode == BOND_MODE_ACTIVEBACKUP || 2038 if (BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP ||
2008 bond->params.mode == BOND_MODE_8023AD) 2039 BOND_MODE(bond) == BOND_MODE_8023AD)
2009 bond_set_slave_inactive_flags(slave, 2040 bond_set_slave_inactive_flags(slave,
2010 BOND_SLAVE_NOTIFY_NOW); 2041 BOND_SLAVE_NOTIFY_NOW);
2011 2042
2012 pr_info("%s: link status definitely down for interface %s, disabling it\n", 2043 pr_info("%s: link status definitely down for interface %s, disabling it\n",
2013 bond->dev->name, slave->dev->name); 2044 bond->dev->name, slave->dev->name);
2014 2045
2015 if (bond->params.mode == BOND_MODE_8023AD) 2046 if (BOND_MODE(bond) == BOND_MODE_8023AD)
2016 bond_3ad_handle_link_change(slave, 2047 bond_3ad_handle_link_change(slave,
2017 BOND_LINK_DOWN); 2048 BOND_LINK_DOWN);
2018 2049
@@ -2175,9 +2206,9 @@ static void bond_arp_send(struct net_device *slave_dev, int arp_op,
2175 * When the path is validated, collect any vlan information in the 2206 * When the path is validated, collect any vlan information in the
2176 * path. 2207 * path.
2177 */ 2208 */
2178static bool bond_verify_device_path(struct net_device *start_dev, 2209bool bond_verify_device_path(struct net_device *start_dev,
2179 struct net_device *end_dev, 2210 struct net_device *end_dev,
2180 struct bond_vlan_tag *tags) 2211 struct bond_vlan_tag *tags)
2181{ 2212{
2182 struct net_device *upper; 2213 struct net_device *upper;
2183 struct list_head *iter; 2214 struct list_head *iter;
@@ -2287,8 +2318,8 @@ int bond_arp_rcv(const struct sk_buff *skb, struct bonding *bond,
2287 int alen, is_arp = skb->protocol == __cpu_to_be16(ETH_P_ARP); 2318 int alen, is_arp = skb->protocol == __cpu_to_be16(ETH_P_ARP);
2288 2319
2289 if (!slave_do_arp_validate(bond, slave)) { 2320 if (!slave_do_arp_validate(bond, slave)) {
2290 if ((slave_do_arp_validate_only(bond, slave) && is_arp) || 2321 if ((slave_do_arp_validate_only(bond) && is_arp) ||
2291 !slave_do_arp_validate_only(bond, slave)) 2322 !slave_do_arp_validate_only(bond))
2292 slave->last_rx = jiffies; 2323 slave->last_rx = jiffies;
2293 return RX_HANDLER_ANOTHER; 2324 return RX_HANDLER_ANOTHER;
2294 } else if (!is_arp) { 2325 } else if (!is_arp) {
@@ -2456,7 +2487,7 @@ static void bond_loadbalance_arp_mon(struct work_struct *work)
2456 * do - all replies will be rx'ed on same link causing slaves 2487 * do - all replies will be rx'ed on same link causing slaves
2457 * to be unstable during low/no traffic periods 2488 * to be unstable during low/no traffic periods
2458 */ 2489 */
2459 if (IS_UP(slave->dev)) 2490 if (bond_slave_is_up(slave))
2460 bond_arp_send_all(bond, slave); 2491 bond_arp_send_all(bond, slave);
2461 } 2492 }
2462 2493
@@ -2678,10 +2709,10 @@ static bool bond_ab_arp_probe(struct bonding *bond)
2678 bond_set_slave_inactive_flags(curr_arp_slave, BOND_SLAVE_NOTIFY_LATER); 2709 bond_set_slave_inactive_flags(curr_arp_slave, BOND_SLAVE_NOTIFY_LATER);
2679 2710
2680 bond_for_each_slave_rcu(bond, slave, iter) { 2711 bond_for_each_slave_rcu(bond, slave, iter) {
2681 if (!found && !before && IS_UP(slave->dev)) 2712 if (!found && !before && bond_slave_is_up(slave))
2682 before = slave; 2713 before = slave;
2683 2714
2684 if (found && !new_slave && IS_UP(slave->dev)) 2715 if (found && !new_slave && bond_slave_is_up(slave))
2685 new_slave = slave; 2716 new_slave = slave;
2686 /* if the link state is up at this point, we 2717 /* if the link state is up at this point, we
2687 * mark it down - this can happen if we have 2718 * mark it down - this can happen if we have
@@ -2690,7 +2721,7 @@ static bool bond_ab_arp_probe(struct bonding *bond)
2690 * one the current slave so it is still marked 2721 * one the current slave so it is still marked
2691 * up when it is actually down 2722 * up when it is actually down
2692 */ 2723 */
2693 if (!IS_UP(slave->dev) && slave->link == BOND_LINK_UP) { 2724 if (!bond_slave_is_up(slave) && slave->link == BOND_LINK_UP) {
2694 slave->link = BOND_LINK_DOWN; 2725 slave->link = BOND_LINK_DOWN;
2695 if (slave->link_failure_count < UINT_MAX) 2726 if (slave->link_failure_count < UINT_MAX)
2696 slave->link_failure_count++; 2727 slave->link_failure_count++;
@@ -2853,7 +2884,7 @@ static int bond_slave_netdev_event(unsigned long event,
2853 2884
2854 bond_update_speed_duplex(slave); 2885 bond_update_speed_duplex(slave);
2855 2886
2856 if (bond->params.mode == BOND_MODE_8023AD) { 2887 if (BOND_MODE(bond) == BOND_MODE_8023AD) {
2857 if (old_speed != slave->speed) 2888 if (old_speed != slave->speed)
2858 bond_3ad_adapter_speed_changed(slave); 2889 bond_3ad_adapter_speed_changed(slave);
2859 if (old_duplex != slave->duplex) 2890 if (old_duplex != slave->duplex)
@@ -2881,7 +2912,7 @@ static int bond_slave_netdev_event(unsigned long event,
2881 break; 2912 break;
2882 case NETDEV_CHANGENAME: 2913 case NETDEV_CHANGENAME:
2883 /* we don't care if we don't have primary set */ 2914 /* we don't care if we don't have primary set */
2884 if (!USES_PRIMARY(bond->params.mode) || 2915 if (!bond_uses_primary(bond) ||
2885 !bond->params.primary[0]) 2916 !bond->params.primary[0])
2886 break; 2917 break;
2887 2918
@@ -3011,20 +3042,18 @@ static bool bond_flow_dissect(struct bonding *bond, struct sk_buff *skb,
3011 * bond_xmit_hash - generate a hash value based on the xmit policy 3042 * bond_xmit_hash - generate a hash value based on the xmit policy
3012 * @bond: bonding device 3043 * @bond: bonding device
3013 * @skb: buffer to use for headers 3044 * @skb: buffer to use for headers
3014 * @count: modulo value
3015 * 3045 *
3016 * This function will extract the necessary headers from the skb buffer and use 3046 * This function will extract the necessary headers from the skb buffer and use
3017 * them to generate a hash based on the xmit_policy set in the bonding device 3047 * them to generate a hash based on the xmit_policy set in the bonding device
3018 * which will be reduced modulo count before returning.
3019 */ 3048 */
3020int bond_xmit_hash(struct bonding *bond, struct sk_buff *skb, int count) 3049u32 bond_xmit_hash(struct bonding *bond, struct sk_buff *skb)
3021{ 3050{
3022 struct flow_keys flow; 3051 struct flow_keys flow;
3023 u32 hash; 3052 u32 hash;
3024 3053
3025 if (bond->params.xmit_policy == BOND_XMIT_POLICY_LAYER2 || 3054 if (bond->params.xmit_policy == BOND_XMIT_POLICY_LAYER2 ||
3026 !bond_flow_dissect(bond, skb, &flow)) 3055 !bond_flow_dissect(bond, skb, &flow))
3027 return bond_eth_hash(skb) % count; 3056 return bond_eth_hash(skb);
3028 3057
3029 if (bond->params.xmit_policy == BOND_XMIT_POLICY_LAYER23 || 3058 if (bond->params.xmit_policy == BOND_XMIT_POLICY_LAYER23 ||
3030 bond->params.xmit_policy == BOND_XMIT_POLICY_ENCAP23) 3059 bond->params.xmit_policy == BOND_XMIT_POLICY_ENCAP23)
@@ -3035,7 +3064,7 @@ int bond_xmit_hash(struct bonding *bond, struct sk_buff *skb, int count)
3035 hash ^= (hash >> 16); 3064 hash ^= (hash >> 16);
3036 hash ^= (hash >> 8); 3065 hash ^= (hash >> 8);
3037 3066
3038 return hash % count; 3067 return hash;
3039} 3068}
3040 3069
3041/*-------------------------- Device entry points ----------------------------*/ 3070/*-------------------------- Device entry points ----------------------------*/
@@ -3046,7 +3075,7 @@ static void bond_work_init_all(struct bonding *bond)
3046 bond_resend_igmp_join_requests_delayed); 3075 bond_resend_igmp_join_requests_delayed);
3047 INIT_DELAYED_WORK(&bond->alb_work, bond_alb_monitor); 3076 INIT_DELAYED_WORK(&bond->alb_work, bond_alb_monitor);
3048 INIT_DELAYED_WORK(&bond->mii_work, bond_mii_monitor); 3077 INIT_DELAYED_WORK(&bond->mii_work, bond_mii_monitor);
3049 if (bond->params.mode == BOND_MODE_ACTIVEBACKUP) 3078 if (BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP)
3050 INIT_DELAYED_WORK(&bond->arp_work, bond_activebackup_arp_mon); 3079 INIT_DELAYED_WORK(&bond->arp_work, bond_activebackup_arp_mon);
3051 else 3080 else
3052 INIT_DELAYED_WORK(&bond->arp_work, bond_loadbalance_arp_mon); 3081 INIT_DELAYED_WORK(&bond->arp_work, bond_loadbalance_arp_mon);
@@ -3073,7 +3102,7 @@ static int bond_open(struct net_device *bond_dev)
3073 if (bond_has_slaves(bond)) { 3102 if (bond_has_slaves(bond)) {
3074 read_lock(&bond->curr_slave_lock); 3103 read_lock(&bond->curr_slave_lock);
3075 bond_for_each_slave(bond, slave, iter) { 3104 bond_for_each_slave(bond, slave, iter) {
3076 if (USES_PRIMARY(bond->params.mode) 3105 if (bond_uses_primary(bond)
3077 && (slave != bond->curr_active_slave)) { 3106 && (slave != bond->curr_active_slave)) {
3078 bond_set_slave_inactive_flags(slave, 3107 bond_set_slave_inactive_flags(slave,
3079 BOND_SLAVE_NOTIFY_NOW); 3108 BOND_SLAVE_NOTIFY_NOW);
@@ -3092,9 +3121,10 @@ static int bond_open(struct net_device *bond_dev)
3092 /* bond_alb_initialize must be called before the timer 3121 /* bond_alb_initialize must be called before the timer
3093 * is started. 3122 * is started.
3094 */ 3123 */
3095 if (bond_alb_initialize(bond, (bond->params.mode == BOND_MODE_ALB))) 3124 if (bond_alb_initialize(bond, (BOND_MODE(bond) == BOND_MODE_ALB)))
3096 return -ENOMEM; 3125 return -ENOMEM;
3097 queue_delayed_work(bond->wq, &bond->alb_work, 0); 3126 if (bond->params.tlb_dynamic_lb)
3127 queue_delayed_work(bond->wq, &bond->alb_work, 0);
3098 } 3128 }
3099 3129
3100 if (bond->params.miimon) /* link check interval, in milliseconds. */ 3130 if (bond->params.miimon) /* link check interval, in milliseconds. */
@@ -3105,7 +3135,7 @@ static int bond_open(struct net_device *bond_dev)
3105 bond->recv_probe = bond_arp_rcv; 3135 bond->recv_probe = bond_arp_rcv;
3106 } 3136 }
3107 3137
3108 if (bond->params.mode == BOND_MODE_8023AD) { 3138 if (BOND_MODE(bond) == BOND_MODE_8023AD) {
3109 queue_delayed_work(bond->wq, &bond->ad_work, 0); 3139 queue_delayed_work(bond->wq, &bond->ad_work, 0);
3110 /* register to receive LACPDUs */ 3140 /* register to receive LACPDUs */
3111 bond->recv_probe = bond_3ad_lacpdu_recv; 3141 bond->recv_probe = bond_3ad_lacpdu_recv;
@@ -3310,7 +3340,7 @@ static void bond_set_rx_mode(struct net_device *bond_dev)
3310 3340
3311 3341
3312 rcu_read_lock(); 3342 rcu_read_lock();
3313 if (USES_PRIMARY(bond->params.mode)) { 3343 if (bond_uses_primary(bond)) {
3314 slave = rcu_dereference(bond->curr_active_slave); 3344 slave = rcu_dereference(bond->curr_active_slave);
3315 if (slave) { 3345 if (slave) {
3316 dev_uc_sync(slave->dev, bond_dev); 3346 dev_uc_sync(slave->dev, bond_dev);
@@ -3464,7 +3494,7 @@ static int bond_set_mac_address(struct net_device *bond_dev, void *addr)
3464 struct list_head *iter; 3494 struct list_head *iter;
3465 int res = 0; 3495 int res = 0;
3466 3496
3467 if (bond->params.mode == BOND_MODE_ALB) 3497 if (BOND_MODE(bond) == BOND_MODE_ALB)
3468 return bond_alb_set_mac_address(bond_dev, addr); 3498 return bond_alb_set_mac_address(bond_dev, addr);
3469 3499
3470 3500
@@ -3475,7 +3505,7 @@ static int bond_set_mac_address(struct net_device *bond_dev, void *addr)
3475 * Returning an error causes ifenslave to fail. 3505 * Returning an error causes ifenslave to fail.
3476 */ 3506 */
3477 if (bond->params.fail_over_mac && 3507 if (bond->params.fail_over_mac &&
3478 bond->params.mode == BOND_MODE_ACTIVEBACKUP) 3508 BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP)
3479 return 0; 3509 return 0;
3480 3510
3481 if (!is_valid_ether_addr(sa->sa_data)) 3511 if (!is_valid_ether_addr(sa->sa_data))
@@ -3555,7 +3585,7 @@ static void bond_xmit_slave_id(struct bonding *bond, struct sk_buff *skb, int sl
3555 /* Here we start from the slave with slave_id */ 3585 /* Here we start from the slave with slave_id */
3556 bond_for_each_slave_rcu(bond, slave, iter) { 3586 bond_for_each_slave_rcu(bond, slave, iter) {
3557 if (--i < 0) { 3587 if (--i < 0) {
3558 if (slave_can_tx(slave)) { 3588 if (bond_slave_can_tx(slave)) {
3559 bond_dev_queue_xmit(bond, skb, slave->dev); 3589 bond_dev_queue_xmit(bond, skb, slave->dev);
3560 return; 3590 return;
3561 } 3591 }
@@ -3567,7 +3597,7 @@ static void bond_xmit_slave_id(struct bonding *bond, struct sk_buff *skb, int sl
3567 bond_for_each_slave_rcu(bond, slave, iter) { 3597 bond_for_each_slave_rcu(bond, slave, iter) {
3568 if (--i < 0) 3598 if (--i < 0)
3569 break; 3599 break;
3570 if (slave_can_tx(slave)) { 3600 if (bond_slave_can_tx(slave)) {
3571 bond_dev_queue_xmit(bond, skb, slave->dev); 3601 bond_dev_queue_xmit(bond, skb, slave->dev);
3572 return; 3602 return;
3573 } 3603 }
@@ -3624,7 +3654,7 @@ static int bond_xmit_roundrobin(struct sk_buff *skb, struct net_device *bond_dev
3624 */ 3654 */
3625 if (iph->protocol == IPPROTO_IGMP && skb->protocol == htons(ETH_P_IP)) { 3655 if (iph->protocol == IPPROTO_IGMP && skb->protocol == htons(ETH_P_IP)) {
3626 slave = rcu_dereference(bond->curr_active_slave); 3656 slave = rcu_dereference(bond->curr_active_slave);
3627 if (slave && slave_can_tx(slave)) 3657 if (slave && bond_slave_can_tx(slave))
3628 bond_dev_queue_xmit(bond, skb, slave->dev); 3658 bond_dev_queue_xmit(bond, skb, slave->dev);
3629 else 3659 else
3630 bond_xmit_slave_id(bond, skb, 0); 3660 bond_xmit_slave_id(bond, skb, 0);
@@ -3662,7 +3692,7 @@ static int bond_xmit_xor(struct sk_buff *skb, struct net_device *bond_dev)
3662{ 3692{
3663 struct bonding *bond = netdev_priv(bond_dev); 3693 struct bonding *bond = netdev_priv(bond_dev);
3664 3694
3665 bond_xmit_slave_id(bond, skb, bond_xmit_hash(bond, skb, bond->slave_cnt)); 3695 bond_xmit_slave_id(bond, skb, bond_xmit_hash(bond, skb) % bond->slave_cnt);
3666 3696
3667 return NETDEV_TX_OK; 3697 return NETDEV_TX_OK;
3668} 3698}
@@ -3677,7 +3707,7 @@ static int bond_xmit_broadcast(struct sk_buff *skb, struct net_device *bond_dev)
3677 bond_for_each_slave_rcu(bond, slave, iter) { 3707 bond_for_each_slave_rcu(bond, slave, iter) {
3678 if (bond_is_last_slave(bond, slave)) 3708 if (bond_is_last_slave(bond, slave))
3679 break; 3709 break;
3680 if (IS_UP(slave->dev) && slave->link == BOND_LINK_UP) { 3710 if (bond_slave_is_up(slave) && slave->link == BOND_LINK_UP) {
3681 struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC); 3711 struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC);
3682 3712
3683 if (!skb2) { 3713 if (!skb2) {
@@ -3689,7 +3719,7 @@ static int bond_xmit_broadcast(struct sk_buff *skb, struct net_device *bond_dev)
3689 bond_dev_queue_xmit(bond, skb2, slave->dev); 3719 bond_dev_queue_xmit(bond, skb2, slave->dev);
3690 } 3720 }
3691 } 3721 }
3692 if (slave && IS_UP(slave->dev) && slave->link == BOND_LINK_UP) 3722 if (slave && bond_slave_is_up(slave) && slave->link == BOND_LINK_UP)
3693 bond_dev_queue_xmit(bond, skb, slave->dev); 3723 bond_dev_queue_xmit(bond, skb, slave->dev);
3694 else 3724 else
3695 dev_kfree_skb_any(skb); 3725 dev_kfree_skb_any(skb);
@@ -3714,7 +3744,7 @@ static inline int bond_slave_override(struct bonding *bond,
3714 /* Find out if any slaves have the same mapping as this skb. */ 3744 /* Find out if any slaves have the same mapping as this skb. */
3715 bond_for_each_slave_rcu(bond, slave, iter) { 3745 bond_for_each_slave_rcu(bond, slave, iter) {
3716 if (slave->queue_id == skb->queue_mapping) { 3746 if (slave->queue_id == skb->queue_mapping) {
3717 if (slave_can_tx(slave)) { 3747 if (bond_slave_can_tx(slave)) {
3718 bond_dev_queue_xmit(bond, skb, slave->dev); 3748 bond_dev_queue_xmit(bond, skb, slave->dev);
3719 return 0; 3749 return 0;
3720 } 3750 }
@@ -3755,12 +3785,11 @@ static netdev_tx_t __bond_start_xmit(struct sk_buff *skb, struct net_device *dev
3755{ 3785{
3756 struct bonding *bond = netdev_priv(dev); 3786 struct bonding *bond = netdev_priv(dev);
3757 3787
3758 if (TX_QUEUE_OVERRIDE(bond->params.mode)) { 3788 if (bond_should_override_tx_queue(bond) &&
3759 if (!bond_slave_override(bond, skb)) 3789 !bond_slave_override(bond, skb))
3760 return NETDEV_TX_OK; 3790 return NETDEV_TX_OK;
3761 }
3762 3791
3763 switch (bond->params.mode) { 3792 switch (BOND_MODE(bond)) {
3764 case BOND_MODE_ROUNDROBIN: 3793 case BOND_MODE_ROUNDROBIN:
3765 return bond_xmit_roundrobin(skb, dev); 3794 return bond_xmit_roundrobin(skb, dev);
3766 case BOND_MODE_ACTIVEBACKUP: 3795 case BOND_MODE_ACTIVEBACKUP:
@@ -3772,12 +3801,13 @@ static netdev_tx_t __bond_start_xmit(struct sk_buff *skb, struct net_device *dev
3772 case BOND_MODE_8023AD: 3801 case BOND_MODE_8023AD:
3773 return bond_3ad_xmit_xor(skb, dev); 3802 return bond_3ad_xmit_xor(skb, dev);
3774 case BOND_MODE_ALB: 3803 case BOND_MODE_ALB:
3775 case BOND_MODE_TLB:
3776 return bond_alb_xmit(skb, dev); 3804 return bond_alb_xmit(skb, dev);
3805 case BOND_MODE_TLB:
3806 return bond_tlb_xmit(skb, dev);
3777 default: 3807 default:
3778 /* Should never happen, mode already checked */ 3808 /* Should never happen, mode already checked */
3779 pr_err("%s: Error: Unknown bonding mode %d\n", 3809 pr_err("%s: Error: Unknown bonding mode %d\n",
3780 dev->name, bond->params.mode); 3810 dev->name, BOND_MODE(bond));
3781 WARN_ON_ONCE(1); 3811 WARN_ON_ONCE(1);
3782 dev_kfree_skb_any(skb); 3812 dev_kfree_skb_any(skb);
3783 return NETDEV_TX_OK; 3813 return NETDEV_TX_OK;
@@ -3817,14 +3847,14 @@ static int bond_ethtool_get_settings(struct net_device *bond_dev,
3817 ecmd->duplex = DUPLEX_UNKNOWN; 3847 ecmd->duplex = DUPLEX_UNKNOWN;
3818 ecmd->port = PORT_OTHER; 3848 ecmd->port = PORT_OTHER;
3819 3849
3820 /* Since SLAVE_IS_OK returns false for all inactive or down slaves, we 3850 /* Since bond_slave_can_tx returns false for all inactive or down slaves, we
3821 * do not need to check mode. Though link speed might not represent 3851 * do not need to check mode. Though link speed might not represent
3822 * the true receive or transmit bandwidth (not all modes are symmetric) 3852 * the true receive or transmit bandwidth (not all modes are symmetric)
3823 * this is an accurate maximum. 3853 * this is an accurate maximum.
3824 */ 3854 */
3825 read_lock(&bond->lock); 3855 read_lock(&bond->lock);
3826 bond_for_each_slave(bond, slave, iter) { 3856 bond_for_each_slave(bond, slave, iter) {
3827 if (SLAVE_IS_OK(slave)) { 3857 if (bond_slave_can_tx(slave)) {
3828 if (slave->speed != SPEED_UNKNOWN) 3858 if (slave->speed != SPEED_UNKNOWN)
3829 speed += slave->speed; 3859 speed += slave->speed;
3830 if (ecmd->duplex == DUPLEX_UNKNOWN && 3860 if (ecmd->duplex == DUPLEX_UNKNOWN &&
@@ -3915,7 +3945,7 @@ void bond_setup(struct net_device *bond_dev)
3915 /* Initialize the device options */ 3945 /* Initialize the device options */
3916 bond_dev->tx_queue_len = 0; 3946 bond_dev->tx_queue_len = 0;
3917 bond_dev->flags |= IFF_MASTER|IFF_MULTICAST; 3947 bond_dev->flags |= IFF_MASTER|IFF_MULTICAST;
3918 bond_dev->priv_flags |= IFF_BONDING; 3948 bond_dev->priv_flags |= IFF_BONDING | IFF_UNICAST_FLT;
3919 bond_dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING); 3949 bond_dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING);
3920 3950
3921 /* At first, we block adding VLANs. That's the only way to 3951 /* At first, we block adding VLANs. That's the only way to
@@ -3994,7 +4024,8 @@ static int bond_check_params(struct bond_params *params)
3994 4024
3995 if (xmit_hash_policy) { 4025 if (xmit_hash_policy) {
3996 if ((bond_mode != BOND_MODE_XOR) && 4026 if ((bond_mode != BOND_MODE_XOR) &&
3997 (bond_mode != BOND_MODE_8023AD)) { 4027 (bond_mode != BOND_MODE_8023AD) &&
4028 (bond_mode != BOND_MODE_TLB)) {
3998 pr_info("xmit_hash_policy param is irrelevant in mode %s\n", 4029 pr_info("xmit_hash_policy param is irrelevant in mode %s\n",
3999 bond_mode_name(bond_mode)); 4030 bond_mode_name(bond_mode));
4000 } else { 4031 } else {
@@ -4079,7 +4110,7 @@ static int bond_check_params(struct bond_params *params)
4079 } 4110 }
4080 4111
4081 /* reset values for 802.3ad/TLB/ALB */ 4112 /* reset values for 802.3ad/TLB/ALB */
4082 if (BOND_NO_USES_ARP(bond_mode)) { 4113 if (!bond_mode_uses_arp(bond_mode)) {
4083 if (!miimon) { 4114 if (!miimon) {
4084 pr_warn("Warning: miimon must be specified, otherwise bonding will not detect link failure, speed and duplex which are essential for 802.3ad operation\n"); 4115 pr_warn("Warning: miimon must be specified, otherwise bonding will not detect link failure, speed and duplex which are essential for 802.3ad operation\n");
4085 pr_warn("Forcing miimon to 100msec\n"); 4116 pr_warn("Forcing miimon to 100msec\n");
@@ -4161,7 +4192,7 @@ static int bond_check_params(struct bond_params *params)
4161 catch mistakes */ 4192 catch mistakes */
4162 __be32 ip; 4193 __be32 ip;
4163 if (!in4_pton(arp_ip_target[i], -1, (u8 *)&ip, -1, NULL) || 4194 if (!in4_pton(arp_ip_target[i], -1, (u8 *)&ip, -1, NULL) ||
4164 IS_IP_TARGET_UNUSABLE_ADDRESS(ip)) { 4195 !bond_is_ip_target_ok(ip)) {
4165 pr_warn("Warning: bad arp_ip_target module parameter (%s), ARP monitoring will not be performed\n", 4196 pr_warn("Warning: bad arp_ip_target module parameter (%s), ARP monitoring will not be performed\n",
4166 arp_ip_target[i]); 4197 arp_ip_target[i]);
4167 arp_interval = 0; 4198 arp_interval = 0;
@@ -4234,7 +4265,7 @@ static int bond_check_params(struct bond_params *params)
4234 pr_debug("Warning: either miimon or arp_interval and arp_ip_target module parameters must be specified, otherwise bonding will not detect link failures! see bonding.txt for details\n"); 4265 pr_debug("Warning: either miimon or arp_interval and arp_ip_target module parameters must be specified, otherwise bonding will not detect link failures! see bonding.txt for details\n");
4235 } 4266 }
4236 4267
4237 if (primary && !USES_PRIMARY(bond_mode)) { 4268 if (primary && !bond_mode_uses_primary(bond_mode)) {
4238 /* currently, using a primary only makes sense 4269 /* currently, using a primary only makes sense
4239 * in active backup, TLB or ALB modes 4270 * in active backup, TLB or ALB modes
4240 */ 4271 */
@@ -4300,6 +4331,7 @@ static int bond_check_params(struct bond_params *params)
4300 params->min_links = min_links; 4331 params->min_links = min_links;
4301 params->lp_interval = lp_interval; 4332 params->lp_interval = lp_interval;
4302 params->packets_per_slave = packets_per_slave; 4333 params->packets_per_slave = packets_per_slave;
4334 params->tlb_dynamic_lb = 1; /* Default value */
4303 if (packets_per_slave > 0) { 4335 if (packets_per_slave > 0) {
4304 params->reciprocal_packets_per_slave = 4336 params->reciprocal_packets_per_slave =
4305 reciprocal_value(packets_per_slave); 4337 reciprocal_value(packets_per_slave);
diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c
index f847e165d252..5ab3c1847e67 100644
--- a/drivers/net/bonding/bond_netlink.c
+++ b/drivers/net/bonding/bond_netlink.c
@@ -56,10 +56,10 @@ static int bond_fill_slave_info(struct sk_buff *skb,
56 if (nla_put_u16(skb, IFLA_BOND_SLAVE_QUEUE_ID, slave->queue_id)) 56 if (nla_put_u16(skb, IFLA_BOND_SLAVE_QUEUE_ID, slave->queue_id))
57 goto nla_put_failure; 57 goto nla_put_failure;
58 58
59 if (slave->bond->params.mode == BOND_MODE_8023AD) { 59 if (BOND_MODE(slave->bond) == BOND_MODE_8023AD) {
60 const struct aggregator *agg; 60 const struct aggregator *agg;
61 61
62 agg = SLAVE_AD_INFO(slave).port.aggregator; 62 agg = SLAVE_AD_INFO(slave)->port.aggregator;
63 if (agg) 63 if (agg)
64 if (nla_put_u16(skb, IFLA_BOND_SLAVE_AD_AGGREGATOR_ID, 64 if (nla_put_u16(skb, IFLA_BOND_SLAVE_AD_AGGREGATOR_ID,
65 agg->aggregator_identifier)) 65 agg->aggregator_identifier))
@@ -407,7 +407,7 @@ static int bond_fill_info(struct sk_buff *skb,
407 unsigned int packets_per_slave; 407 unsigned int packets_per_slave;
408 int i, targets_added; 408 int i, targets_added;
409 409
410 if (nla_put_u8(skb, IFLA_BOND_MODE, bond->params.mode)) 410 if (nla_put_u8(skb, IFLA_BOND_MODE, BOND_MODE(bond)))
411 goto nla_put_failure; 411 goto nla_put_failure;
412 412
413 if (slave_dev && 413 if (slave_dev &&
@@ -505,7 +505,7 @@ static int bond_fill_info(struct sk_buff *skb,
505 bond->params.ad_select)) 505 bond->params.ad_select))
506 goto nla_put_failure; 506 goto nla_put_failure;
507 507
508 if (bond->params.mode == BOND_MODE_8023AD) { 508 if (BOND_MODE(bond) == BOND_MODE_8023AD) {
509 struct ad_info info; 509 struct ad_info info;
510 510
511 if (!bond_3ad_get_active_agg_info(bond, &info)) { 511 if (!bond_3ad_get_active_agg_info(bond, &info)) {
diff --git a/drivers/net/bonding/bond_options.c b/drivers/net/bonding/bond_options.c
index 832070298446..540e0167bf24 100644
--- a/drivers/net/bonding/bond_options.c
+++ b/drivers/net/bonding/bond_options.c
@@ -70,6 +70,8 @@ static int bond_option_mode_set(struct bonding *bond,
70 const struct bond_opt_value *newval); 70 const struct bond_opt_value *newval);
71static int bond_option_slaves_set(struct bonding *bond, 71static int bond_option_slaves_set(struct bonding *bond,
72 const struct bond_opt_value *newval); 72 const struct bond_opt_value *newval);
73static int bond_option_tlb_dynamic_lb_set(struct bonding *bond,
74 const struct bond_opt_value *newval);
73 75
74 76
75static const struct bond_opt_value bond_mode_tbl[] = { 77static const struct bond_opt_value bond_mode_tbl[] = {
@@ -180,6 +182,12 @@ static const struct bond_opt_value bond_lp_interval_tbl[] = {
180 { NULL, -1, 0}, 182 { NULL, -1, 0},
181}; 183};
182 184
185static const struct bond_opt_value bond_tlb_dynamic_lb_tbl[] = {
186 { "off", 0, 0},
187 { "on", 1, BOND_VALFLAG_DEFAULT},
188 { NULL, -1, 0}
189};
190
183static const struct bond_option bond_opts[] = { 191static const struct bond_option bond_opts[] = {
184 [BOND_OPT_MODE] = { 192 [BOND_OPT_MODE] = {
185 .id = BOND_OPT_MODE, 193 .id = BOND_OPT_MODE,
@@ -200,7 +208,7 @@ static const struct bond_option bond_opts[] = {
200 [BOND_OPT_XMIT_HASH] = { 208 [BOND_OPT_XMIT_HASH] = {
201 .id = BOND_OPT_XMIT_HASH, 209 .id = BOND_OPT_XMIT_HASH,
202 .name = "xmit_hash_policy", 210 .name = "xmit_hash_policy",
203 .desc = "balance-xor and 802.3ad hashing method", 211 .desc = "balance-xor, 802.3ad, and tlb hashing method",
204 .values = bond_xmit_hashtype_tbl, 212 .values = bond_xmit_hashtype_tbl,
205 .set = bond_option_xmit_hash_policy_set 213 .set = bond_option_xmit_hash_policy_set
206 }, 214 },
@@ -365,9 +373,33 @@ static const struct bond_option bond_opts[] = {
365 .flags = BOND_OPTFLAG_RAWVAL, 373 .flags = BOND_OPTFLAG_RAWVAL,
366 .set = bond_option_slaves_set 374 .set = bond_option_slaves_set
367 }, 375 },
376 [BOND_OPT_TLB_DYNAMIC_LB] = {
377 .id = BOND_OPT_TLB_DYNAMIC_LB,
378 .name = "tlb_dynamic_lb",
379 .desc = "Enable dynamic flow shuffling",
380 .unsuppmodes = BOND_MODE_ALL_EX(BIT(BOND_MODE_TLB)),
381 .values = bond_tlb_dynamic_lb_tbl,
382 .flags = BOND_OPTFLAG_IFDOWN,
383 .set = bond_option_tlb_dynamic_lb_set,
384 },
368 { } 385 { }
369}; 386};
370 387
388/* Searches for an option by name */
389const struct bond_option *bond_opt_get_by_name(const char *name)
390{
391 const struct bond_option *opt;
392 int option;
393
394 for (option = 0; option < BOND_OPT_LAST; option++) {
395 opt = bond_opt_get(option);
396 if (opt && !strcmp(opt->name, name))
397 return opt;
398 }
399
400 return NULL;
401}
402
371/* Searches for a value in opt's values[] table */ 403/* Searches for a value in opt's values[] table */
372const struct bond_opt_value *bond_opt_get_val(unsigned int option, u64 val) 404const struct bond_opt_value *bond_opt_get_val(unsigned int option, u64 val)
373{ 405{
@@ -641,7 +673,7 @@ const struct bond_option *bond_opt_get(unsigned int option)
641 673
642int bond_option_mode_set(struct bonding *bond, const struct bond_opt_value *newval) 674int bond_option_mode_set(struct bonding *bond, const struct bond_opt_value *newval)
643{ 675{
644 if (BOND_NO_USES_ARP(newval->value) && bond->params.arp_interval) { 676 if (!bond_mode_uses_arp(newval->value) && bond->params.arp_interval) {
645 pr_info("%s: %s mode is incompatible with arp monitoring, start mii monitoring\n", 677 pr_info("%s: %s mode is incompatible with arp monitoring, start mii monitoring\n",
646 bond->dev->name, newval->string); 678 bond->dev->name, newval->string);
647 /* disable arp monitoring */ 679 /* disable arp monitoring */
@@ -662,7 +694,7 @@ int bond_option_mode_set(struct bonding *bond, const struct bond_opt_value *newv
662static struct net_device *__bond_option_active_slave_get(struct bonding *bond, 694static struct net_device *__bond_option_active_slave_get(struct bonding *bond,
663 struct slave *slave) 695 struct slave *slave)
664{ 696{
665 return USES_PRIMARY(bond->params.mode) && slave ? slave->dev : NULL; 697 return bond_uses_primary(bond) && slave ? slave->dev : NULL;
666} 698}
667 699
668struct net_device *bond_option_active_slave_get_rcu(struct bonding *bond) 700struct net_device *bond_option_active_slave_get_rcu(struct bonding *bond)
@@ -727,7 +759,7 @@ static int bond_option_active_slave_set(struct bonding *bond,
727 bond->dev->name, new_active->dev->name); 759 bond->dev->name, new_active->dev->name);
728 } else { 760 } else {
729 if (old_active && (new_active->link == BOND_LINK_UP) && 761 if (old_active && (new_active->link == BOND_LINK_UP) &&
730 IS_UP(new_active->dev)) { 762 bond_slave_is_up(new_active)) {
731 pr_info("%s: Setting %s as active slave\n", 763 pr_info("%s: Setting %s as active slave\n",
732 bond->dev->name, new_active->dev->name); 764 bond->dev->name, new_active->dev->name);
733 bond_change_active_slave(bond, new_active); 765 bond_change_active_slave(bond, new_active);
@@ -746,6 +778,10 @@ static int bond_option_active_slave_set(struct bonding *bond,
746 return ret; 778 return ret;
747} 779}
748 780
781/* There are two tricky bits here. First, if MII monitoring is activated, then
782 * we must disable ARP monitoring. Second, if the timer isn't running, we must
783 * start it.
784 */
749static int bond_option_miimon_set(struct bonding *bond, 785static int bond_option_miimon_set(struct bonding *bond,
750 const struct bond_opt_value *newval) 786 const struct bond_opt_value *newval)
751{ 787{
@@ -784,6 +820,10 @@ static int bond_option_miimon_set(struct bonding *bond,
784 return 0; 820 return 0;
785} 821}
786 822
823/* Set up and down delays. These must be multiples of the
824 * MII monitoring value, and are stored internally as the multiplier.
825 * Thus, we must translate to MS for the real world.
826 */
787static int bond_option_updelay_set(struct bonding *bond, 827static int bond_option_updelay_set(struct bonding *bond,
788 const struct bond_opt_value *newval) 828 const struct bond_opt_value *newval)
789{ 829{
@@ -842,6 +882,10 @@ static int bond_option_use_carrier_set(struct bonding *bond,
842 return 0; 882 return 0;
843} 883}
844 884
885/* There are two tricky bits here. First, if ARP monitoring is activated, then
886 * we must disable MII monitoring. Second, if the ARP timer isn't running,
887 * we must start it.
888 */
845static int bond_option_arp_interval_set(struct bonding *bond, 889static int bond_option_arp_interval_set(struct bonding *bond,
846 const struct bond_opt_value *newval) 890 const struct bond_opt_value *newval)
847{ 891{
@@ -899,7 +943,7 @@ static int _bond_option_arp_ip_target_add(struct bonding *bond, __be32 target)
899 __be32 *targets = bond->params.arp_targets; 943 __be32 *targets = bond->params.arp_targets;
900 int ind; 944 int ind;
901 945
902 if (IS_IP_TARGET_UNUSABLE_ADDRESS(target)) { 946 if (!bond_is_ip_target_ok(target)) {
903 pr_err("%s: invalid ARP target %pI4 specified for addition\n", 947 pr_err("%s: invalid ARP target %pI4 specified for addition\n",
904 bond->dev->name, &target); 948 bond->dev->name, &target);
905 return -EINVAL; 949 return -EINVAL;
@@ -944,7 +988,7 @@ static int bond_option_arp_ip_target_rem(struct bonding *bond, __be32 target)
944 unsigned long *targets_rx; 988 unsigned long *targets_rx;
945 int ind, i; 989 int ind, i;
946 990
947 if (IS_IP_TARGET_UNUSABLE_ADDRESS(target)) { 991 if (!bond_is_ip_target_ok(target)) {
948 pr_err("%s: invalid ARP target %pI4 specified for removal\n", 992 pr_err("%s: invalid ARP target %pI4 specified for removal\n",
949 bond->dev->name, &target); 993 bond->dev->name, &target);
950 return -EINVAL; 994 return -EINVAL;
@@ -1338,3 +1382,13 @@ err_no_cmd:
1338 ret = -EPERM; 1382 ret = -EPERM;
1339 goto out; 1383 goto out;
1340} 1384}
1385
1386static int bond_option_tlb_dynamic_lb_set(struct bonding *bond,
1387 const struct bond_opt_value *newval)
1388{
1389 pr_info("%s: Setting dynamic-lb to %s (%llu)\n",
1390 bond->dev->name, newval->string, newval->value);
1391 bond->params.tlb_dynamic_lb = newval->value;
1392
1393 return 0;
1394}
diff --git a/drivers/net/bonding/bond_options.h b/drivers/net/bonding/bond_options.h
index 12be9e1bfb0c..17ded5b29176 100644
--- a/drivers/net/bonding/bond_options.h
+++ b/drivers/net/bonding/bond_options.h
@@ -62,6 +62,7 @@ enum {
62 BOND_OPT_RESEND_IGMP, 62 BOND_OPT_RESEND_IGMP,
63 BOND_OPT_LP_INTERVAL, 63 BOND_OPT_LP_INTERVAL,
64 BOND_OPT_SLAVES, 64 BOND_OPT_SLAVES,
65 BOND_OPT_TLB_DYNAMIC_LB,
65 BOND_OPT_LAST 66 BOND_OPT_LAST
66}; 67};
67 68
@@ -104,6 +105,7 @@ int bond_opt_tryset_rtnl(struct bonding *bond, unsigned int option, char *buf);
104const struct bond_opt_value *bond_opt_parse(const struct bond_option *opt, 105const struct bond_opt_value *bond_opt_parse(const struct bond_option *opt,
105 struct bond_opt_value *val); 106 struct bond_opt_value *val);
106const struct bond_option *bond_opt_get(unsigned int option); 107const struct bond_option *bond_opt_get(unsigned int option);
108const struct bond_option *bond_opt_get_by_name(const char *name);
107const struct bond_opt_value *bond_opt_get_val(unsigned int option, u64 val); 109const struct bond_opt_value *bond_opt_get_val(unsigned int option, u64 val);
108 110
109/* This helper is used to initialize a bond_opt_value structure for parameter 111/* This helper is used to initialize a bond_opt_value structure for parameter
diff --git a/drivers/net/bonding/bond_procfs.c b/drivers/net/bonding/bond_procfs.c
index 013fdd0f45e9..b215b479bb3a 100644
--- a/drivers/net/bonding/bond_procfs.c
+++ b/drivers/net/bonding/bond_procfs.c
@@ -72,9 +72,9 @@ static void bond_info_show_master(struct seq_file *seq)
72 curr = rcu_dereference(bond->curr_active_slave); 72 curr = rcu_dereference(bond->curr_active_slave);
73 73
74 seq_printf(seq, "Bonding Mode: %s", 74 seq_printf(seq, "Bonding Mode: %s",
75 bond_mode_name(bond->params.mode)); 75 bond_mode_name(BOND_MODE(bond)));
76 76
77 if (bond->params.mode == BOND_MODE_ACTIVEBACKUP && 77 if (BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP &&
78 bond->params.fail_over_mac) { 78 bond->params.fail_over_mac) {
79 optval = bond_opt_get_val(BOND_OPT_FAIL_OVER_MAC, 79 optval = bond_opt_get_val(BOND_OPT_FAIL_OVER_MAC,
80 bond->params.fail_over_mac); 80 bond->params.fail_over_mac);
@@ -83,15 +83,15 @@ static void bond_info_show_master(struct seq_file *seq)
83 83
84 seq_printf(seq, "\n"); 84 seq_printf(seq, "\n");
85 85
86 if (bond->params.mode == BOND_MODE_XOR || 86 if (BOND_MODE(bond) == BOND_MODE_XOR ||
87 bond->params.mode == BOND_MODE_8023AD) { 87 BOND_MODE(bond) == BOND_MODE_8023AD) {
88 optval = bond_opt_get_val(BOND_OPT_XMIT_HASH, 88 optval = bond_opt_get_val(BOND_OPT_XMIT_HASH,
89 bond->params.xmit_policy); 89 bond->params.xmit_policy);
90 seq_printf(seq, "Transmit Hash Policy: %s (%d)\n", 90 seq_printf(seq, "Transmit Hash Policy: %s (%d)\n",
91 optval->string, bond->params.xmit_policy); 91 optval->string, bond->params.xmit_policy);
92 } 92 }
93 93
94 if (USES_PRIMARY(bond->params.mode)) { 94 if (bond_uses_primary(bond)) {
95 seq_printf(seq, "Primary Slave: %s", 95 seq_printf(seq, "Primary Slave: %s",
96 (bond->primary_slave) ? 96 (bond->primary_slave) ?
97 bond->primary_slave->dev->name : "None"); 97 bond->primary_slave->dev->name : "None");
@@ -134,7 +134,7 @@ static void bond_info_show_master(struct seq_file *seq)
134 seq_printf(seq, "\n"); 134 seq_printf(seq, "\n");
135 } 135 }
136 136
137 if (bond->params.mode == BOND_MODE_8023AD) { 137 if (BOND_MODE(bond) == BOND_MODE_8023AD) {
138 struct ad_info ad_info; 138 struct ad_info ad_info;
139 139
140 seq_puts(seq, "\n802.3ad info\n"); 140 seq_puts(seq, "\n802.3ad info\n");
@@ -188,9 +188,9 @@ static void bond_info_show_slave(struct seq_file *seq,
188 188
189 seq_printf(seq, "Permanent HW addr: %pM\n", slave->perm_hwaddr); 189 seq_printf(seq, "Permanent HW addr: %pM\n", slave->perm_hwaddr);
190 190
191 if (bond->params.mode == BOND_MODE_8023AD) { 191 if (BOND_MODE(bond) == BOND_MODE_8023AD) {
192 const struct aggregator *agg 192 const struct aggregator *agg
193 = SLAVE_AD_INFO(slave).port.aggregator; 193 = SLAVE_AD_INFO(slave)->port.aggregator;
194 194
195 if (agg) 195 if (agg)
196 seq_printf(seq, "Aggregator ID: %d\n", 196 seq_printf(seq, "Aggregator ID: %d\n",
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c
index 5f6babcfc26e..daed52f68ce1 100644
--- a/drivers/net/bonding/bond_sysfs.c
+++ b/drivers/net/bonding/bond_sysfs.c
@@ -45,8 +45,7 @@
45#define to_dev(obj) container_of(obj, struct device, kobj) 45#define to_dev(obj) container_of(obj, struct device, kobj)
46#define to_bond(cd) ((struct bonding *)(netdev_priv(to_net_dev(cd)))) 46#define to_bond(cd) ((struct bonding *)(netdev_priv(to_net_dev(cd))))
47 47
48/* 48/* "show" function for the bond_masters attribute.
49 * "show" function for the bond_masters attribute.
50 * The class parameter is ignored. 49 * The class parameter is ignored.
51 */ 50 */
52static ssize_t bonding_show_bonds(struct class *cls, 51static ssize_t bonding_show_bonds(struct class *cls,
@@ -88,14 +87,12 @@ static struct net_device *bond_get_by_name(struct bond_net *bn, const char *ifna
88 return NULL; 87 return NULL;
89} 88}
90 89
91/* 90/* "store" function for the bond_masters attribute. This is what
92 * "store" function for the bond_masters attribute. This is what
93 * creates and deletes entire bonds. 91 * creates and deletes entire bonds.
94 * 92 *
95 * The class parameter is ignored. 93 * The class parameter is ignored.
96 * 94 *
97 */ 95 */
98
99static ssize_t bonding_store_bonds(struct class *cls, 96static ssize_t bonding_store_bonds(struct class *cls,
100 struct class_attribute *attr, 97 struct class_attribute *attr,
101 const char *buffer, size_t count) 98 const char *buffer, size_t count)
@@ -158,9 +155,26 @@ static const struct class_attribute class_attr_bonding_masters = {
158 .store = bonding_store_bonds, 155 .store = bonding_store_bonds,
159}; 156};
160 157
161/* 158/* Generic "store" method for bonding sysfs option setting */
162 * Show the slaves in the current bond. 159static ssize_t bonding_sysfs_store_option(struct device *d,
163 */ 160 struct device_attribute *attr,
161 const char *buffer, size_t count)
162{
163 struct bonding *bond = to_bond(d);
164 const struct bond_option *opt;
165 int ret;
166
167 opt = bond_opt_get_by_name(attr->attr.name);
168 if (WARN_ON(!opt))
169 return -ENOENT;
170 ret = bond_opt_tryset_rtnl(bond, opt->id, (char *)buffer);
171 if (!ret)
172 ret = count;
173
174 return ret;
175}
176
177/* Show the slaves in the current bond. */
164static ssize_t bonding_show_slaves(struct device *d, 178static ssize_t bonding_show_slaves(struct device *d,
165 struct device_attribute *attr, char *buf) 179 struct device_attribute *attr, char *buf)
166{ 180{
@@ -190,62 +204,24 @@ static ssize_t bonding_show_slaves(struct device *d,
190 204
191 return res; 205 return res;
192} 206}
193
194/*
195 * Set the slaves in the current bond.
196 * This is supposed to be only thin wrapper for bond_enslave and bond_release.
197 * All hard work should be done there.
198 */
199static ssize_t bonding_store_slaves(struct device *d,
200 struct device_attribute *attr,
201 const char *buffer, size_t count)
202{
203 struct bonding *bond = to_bond(d);
204 int ret;
205
206 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_SLAVES, (char *)buffer);
207 if (!ret)
208 ret = count;
209
210 return ret;
211}
212static DEVICE_ATTR(slaves, S_IRUGO | S_IWUSR, bonding_show_slaves, 207static DEVICE_ATTR(slaves, S_IRUGO | S_IWUSR, bonding_show_slaves,
213 bonding_store_slaves); 208 bonding_sysfs_store_option);
214 209
215/* 210/* Show the bonding mode. */
216 * Show and set the bonding mode. The bond interface must be down to
217 * change the mode.
218 */
219static ssize_t bonding_show_mode(struct device *d, 211static ssize_t bonding_show_mode(struct device *d,
220 struct device_attribute *attr, char *buf) 212 struct device_attribute *attr, char *buf)
221{ 213{
222 struct bonding *bond = to_bond(d); 214 struct bonding *bond = to_bond(d);
223 const struct bond_opt_value *val; 215 const struct bond_opt_value *val;
224 216
225 val = bond_opt_get_val(BOND_OPT_MODE, bond->params.mode); 217 val = bond_opt_get_val(BOND_OPT_MODE, BOND_MODE(bond));
226 218
227 return sprintf(buf, "%s %d\n", val->string, bond->params.mode); 219 return sprintf(buf, "%s %d\n", val->string, BOND_MODE(bond));
228}
229
230static ssize_t bonding_store_mode(struct device *d,
231 struct device_attribute *attr,
232 const char *buf, size_t count)
233{
234 struct bonding *bond = to_bond(d);
235 int ret;
236
237 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_MODE, (char *)buf);
238 if (!ret)
239 ret = count;
240
241 return ret;
242} 220}
243static DEVICE_ATTR(mode, S_IRUGO | S_IWUSR, 221static DEVICE_ATTR(mode, S_IRUGO | S_IWUSR,
244 bonding_show_mode, bonding_store_mode); 222 bonding_show_mode, bonding_sysfs_store_option);
245 223
246/* 224/* Show the bonding transmit hash method. */
247 * Show and set the bonding transmit hash method.
248 */
249static ssize_t bonding_show_xmit_hash(struct device *d, 225static ssize_t bonding_show_xmit_hash(struct device *d,
250 struct device_attribute *attr, 226 struct device_attribute *attr,
251 char *buf) 227 char *buf)
@@ -257,26 +233,10 @@ static ssize_t bonding_show_xmit_hash(struct device *d,
257 233
258 return sprintf(buf, "%s %d\n", val->string, bond->params.xmit_policy); 234 return sprintf(buf, "%s %d\n", val->string, bond->params.xmit_policy);
259} 235}
260
261static ssize_t bonding_store_xmit_hash(struct device *d,
262 struct device_attribute *attr,
263 const char *buf, size_t count)
264{
265 struct bonding *bond = to_bond(d);
266 int ret;
267
268 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_XMIT_HASH, (char *)buf);
269 if (!ret)
270 ret = count;
271
272 return ret;
273}
274static DEVICE_ATTR(xmit_hash_policy, S_IRUGO | S_IWUSR, 236static DEVICE_ATTR(xmit_hash_policy, S_IRUGO | S_IWUSR,
275 bonding_show_xmit_hash, bonding_store_xmit_hash); 237 bonding_show_xmit_hash, bonding_sysfs_store_option);
276 238
277/* 239/* Show arp_validate. */
278 * Show and set arp_validate.
279 */
280static ssize_t bonding_show_arp_validate(struct device *d, 240static ssize_t bonding_show_arp_validate(struct device *d,
281 struct device_attribute *attr, 241 struct device_attribute *attr,
282 char *buf) 242 char *buf)
@@ -289,26 +249,10 @@ static ssize_t bonding_show_arp_validate(struct device *d,
289 249
290 return sprintf(buf, "%s %d\n", val->string, bond->params.arp_validate); 250 return sprintf(buf, "%s %d\n", val->string, bond->params.arp_validate);
291} 251}
292
293static ssize_t bonding_store_arp_validate(struct device *d,
294 struct device_attribute *attr,
295 const char *buf, size_t count)
296{
297 struct bonding *bond = to_bond(d);
298 int ret;
299
300 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_ARP_VALIDATE, (char *)buf);
301 if (!ret)
302 ret = count;
303
304 return ret;
305}
306
307static DEVICE_ATTR(arp_validate, S_IRUGO | S_IWUSR, bonding_show_arp_validate, 252static DEVICE_ATTR(arp_validate, S_IRUGO | S_IWUSR, bonding_show_arp_validate,
308 bonding_store_arp_validate); 253 bonding_sysfs_store_option);
309/* 254
310 * Show and set arp_all_targets. 255/* Show arp_all_targets. */
311 */
312static ssize_t bonding_show_arp_all_targets(struct device *d, 256static ssize_t bonding_show_arp_all_targets(struct device *d,
313 struct device_attribute *attr, 257 struct device_attribute *attr,
314 char *buf) 258 char *buf)
@@ -321,28 +265,10 @@ static ssize_t bonding_show_arp_all_targets(struct device *d,
321 return sprintf(buf, "%s %d\n", 265 return sprintf(buf, "%s %d\n",
322 val->string, bond->params.arp_all_targets); 266 val->string, bond->params.arp_all_targets);
323} 267}
324
325static ssize_t bonding_store_arp_all_targets(struct device *d,
326 struct device_attribute *attr,
327 const char *buf, size_t count)
328{
329 struct bonding *bond = to_bond(d);
330 int ret;
331
332 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_ARP_ALL_TARGETS, (char *)buf);
333 if (!ret)
334 ret = count;
335
336 return ret;
337}
338
339static DEVICE_ATTR(arp_all_targets, S_IRUGO | S_IWUSR, 268static DEVICE_ATTR(arp_all_targets, S_IRUGO | S_IWUSR,
340 bonding_show_arp_all_targets, bonding_store_arp_all_targets); 269 bonding_show_arp_all_targets, bonding_sysfs_store_option);
341 270
342/* 271/* Show fail_over_mac. */
343 * Show and store fail_over_mac. User only allowed to change the
344 * value when there are no slaves.
345 */
346static ssize_t bonding_show_fail_over_mac(struct device *d, 272static ssize_t bonding_show_fail_over_mac(struct device *d,
347 struct device_attribute *attr, 273 struct device_attribute *attr,
348 char *buf) 274 char *buf)
@@ -355,30 +281,10 @@ static ssize_t bonding_show_fail_over_mac(struct device *d,
355 281
356 return sprintf(buf, "%s %d\n", val->string, bond->params.fail_over_mac); 282 return sprintf(buf, "%s %d\n", val->string, bond->params.fail_over_mac);
357} 283}
358
359static ssize_t bonding_store_fail_over_mac(struct device *d,
360 struct device_attribute *attr,
361 const char *buf, size_t count)
362{
363 struct bonding *bond = to_bond(d);
364 int ret;
365
366 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_FAIL_OVER_MAC, (char *)buf);
367 if (!ret)
368 ret = count;
369
370 return ret;
371}
372
373static DEVICE_ATTR(fail_over_mac, S_IRUGO | S_IWUSR, 284static DEVICE_ATTR(fail_over_mac, S_IRUGO | S_IWUSR,
374 bonding_show_fail_over_mac, bonding_store_fail_over_mac); 285 bonding_show_fail_over_mac, bonding_sysfs_store_option);
375 286
376/* 287/* Show the arp timer interval. */
377 * Show and set the arp timer interval. There are two tricky bits
378 * here. First, if ARP monitoring is activated, then we must disable
379 * MII monitoring. Second, if the ARP timer isn't running, we must
380 * start it.
381 */
382static ssize_t bonding_show_arp_interval(struct device *d, 288static ssize_t bonding_show_arp_interval(struct device *d,
383 struct device_attribute *attr, 289 struct device_attribute *attr,
384 char *buf) 290 char *buf)
@@ -387,26 +293,10 @@ static ssize_t bonding_show_arp_interval(struct device *d,
387 293
388 return sprintf(buf, "%d\n", bond->params.arp_interval); 294 return sprintf(buf, "%d\n", bond->params.arp_interval);
389} 295}
390
391static ssize_t bonding_store_arp_interval(struct device *d,
392 struct device_attribute *attr,
393 const char *buf, size_t count)
394{
395 struct bonding *bond = to_bond(d);
396 int ret;
397
398 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_ARP_INTERVAL, (char *)buf);
399 if (!ret)
400 ret = count;
401
402 return ret;
403}
404static DEVICE_ATTR(arp_interval, S_IRUGO | S_IWUSR, 296static DEVICE_ATTR(arp_interval, S_IRUGO | S_IWUSR,
405 bonding_show_arp_interval, bonding_store_arp_interval); 297 bonding_show_arp_interval, bonding_sysfs_store_option);
406 298
407/* 299/* Show the arp targets. */
408 * Show and set the arp targets.
409 */
410static ssize_t bonding_show_arp_targets(struct device *d, 300static ssize_t bonding_show_arp_targets(struct device *d,
411 struct device_attribute *attr, 301 struct device_attribute *attr,
412 char *buf) 302 char *buf)
@@ -424,27 +314,10 @@ static ssize_t bonding_show_arp_targets(struct device *d,
424 314
425 return res; 315 return res;
426} 316}
317static DEVICE_ATTR(arp_ip_target, S_IRUGO | S_IWUSR,
318 bonding_show_arp_targets, bonding_sysfs_store_option);
427 319
428static ssize_t bonding_store_arp_targets(struct device *d, 320/* Show the up and down delays. */
429 struct device_attribute *attr,
430 const char *buf, size_t count)
431{
432 struct bonding *bond = to_bond(d);
433 int ret;
434
435 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_ARP_TARGETS, (char *)buf);
436 if (!ret)
437 ret = count;
438
439 return ret;
440}
441static DEVICE_ATTR(arp_ip_target, S_IRUGO | S_IWUSR , bonding_show_arp_targets, bonding_store_arp_targets);
442
443/*
444 * Show and set the up and down delays. These must be multiples of the
445 * MII monitoring value, and are stored internally as the multiplier.
446 * Thus, we must translate to MS for the real world.
447 */
448static ssize_t bonding_show_downdelay(struct device *d, 321static ssize_t bonding_show_downdelay(struct device *d,
449 struct device_attribute *attr, 322 struct device_attribute *attr,
450 char *buf) 323 char *buf)
@@ -453,22 +326,8 @@ static ssize_t bonding_show_downdelay(struct device *d,
453 326
454 return sprintf(buf, "%d\n", bond->params.downdelay * bond->params.miimon); 327 return sprintf(buf, "%d\n", bond->params.downdelay * bond->params.miimon);
455} 328}
456
457static ssize_t bonding_store_downdelay(struct device *d,
458 struct device_attribute *attr,
459 const char *buf, size_t count)
460{
461 struct bonding *bond = to_bond(d);
462 int ret;
463
464 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_DOWNDELAY, (char *)buf);
465 if (!ret)
466 ret = count;
467
468 return ret;
469}
470static DEVICE_ATTR(downdelay, S_IRUGO | S_IWUSR, 329static DEVICE_ATTR(downdelay, S_IRUGO | S_IWUSR,
471 bonding_show_downdelay, bonding_store_downdelay); 330 bonding_show_downdelay, bonding_sysfs_store_option);
472 331
473static ssize_t bonding_show_updelay(struct device *d, 332static ssize_t bonding_show_updelay(struct device *d,
474 struct device_attribute *attr, 333 struct device_attribute *attr,
@@ -479,27 +338,10 @@ static ssize_t bonding_show_updelay(struct device *d,
479 return sprintf(buf, "%d\n", bond->params.updelay * bond->params.miimon); 338 return sprintf(buf, "%d\n", bond->params.updelay * bond->params.miimon);
480 339
481} 340}
482
483static ssize_t bonding_store_updelay(struct device *d,
484 struct device_attribute *attr,
485 const char *buf, size_t count)
486{
487 struct bonding *bond = to_bond(d);
488 int ret;
489
490 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_UPDELAY, (char *)buf);
491 if (!ret)
492 ret = count;
493
494 return ret;
495}
496static DEVICE_ATTR(updelay, S_IRUGO | S_IWUSR, 341static DEVICE_ATTR(updelay, S_IRUGO | S_IWUSR,
497 bonding_show_updelay, bonding_store_updelay); 342 bonding_show_updelay, bonding_sysfs_store_option);
498 343
499/* 344/* Show the LACP interval. */
500 * Show and set the LACP interval. Interface must be down, and the mode
501 * must be set to 802.3ad mode.
502 */
503static ssize_t bonding_show_lacp(struct device *d, 345static ssize_t bonding_show_lacp(struct device *d,
504 struct device_attribute *attr, 346 struct device_attribute *attr,
505 char *buf) 347 char *buf)
@@ -511,22 +353,8 @@ static ssize_t bonding_show_lacp(struct device *d,
511 353
512 return sprintf(buf, "%s %d\n", val->string, bond->params.lacp_fast); 354 return sprintf(buf, "%s %d\n", val->string, bond->params.lacp_fast);
513} 355}
514
515static ssize_t bonding_store_lacp(struct device *d,
516 struct device_attribute *attr,
517 const char *buf, size_t count)
518{
519 struct bonding *bond = to_bond(d);
520 int ret;
521
522 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_LACP_RATE, (char *)buf);
523 if (!ret)
524 ret = count;
525
526 return ret;
527}
528static DEVICE_ATTR(lacp_rate, S_IRUGO | S_IWUSR, 356static DEVICE_ATTR(lacp_rate, S_IRUGO | S_IWUSR,
529 bonding_show_lacp, bonding_store_lacp); 357 bonding_show_lacp, bonding_sysfs_store_option);
530 358
531static ssize_t bonding_show_min_links(struct device *d, 359static ssize_t bonding_show_min_links(struct device *d,
532 struct device_attribute *attr, 360 struct device_attribute *attr,
@@ -536,22 +364,8 @@ static ssize_t bonding_show_min_links(struct device *d,
536 364
537 return sprintf(buf, "%u\n", bond->params.min_links); 365 return sprintf(buf, "%u\n", bond->params.min_links);
538} 366}
539
540static ssize_t bonding_store_min_links(struct device *d,
541 struct device_attribute *attr,
542 const char *buf, size_t count)
543{
544 struct bonding *bond = to_bond(d);
545 int ret;
546
547 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_MINLINKS, (char *)buf);
548 if (!ret)
549 ret = count;
550
551 return ret;
552}
553static DEVICE_ATTR(min_links, S_IRUGO | S_IWUSR, 367static DEVICE_ATTR(min_links, S_IRUGO | S_IWUSR,
554 bonding_show_min_links, bonding_store_min_links); 368 bonding_show_min_links, bonding_sysfs_store_option);
555 369
556static ssize_t bonding_show_ad_select(struct device *d, 370static ssize_t bonding_show_ad_select(struct device *d,
557 struct device_attribute *attr, 371 struct device_attribute *attr,
@@ -564,27 +378,10 @@ static ssize_t bonding_show_ad_select(struct device *d,
564 378
565 return sprintf(buf, "%s %d\n", val->string, bond->params.ad_select); 379 return sprintf(buf, "%s %d\n", val->string, bond->params.ad_select);
566} 380}
567
568
569static ssize_t bonding_store_ad_select(struct device *d,
570 struct device_attribute *attr,
571 const char *buf, size_t count)
572{
573 struct bonding *bond = to_bond(d);
574 int ret;
575
576 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_AD_SELECT, (char *)buf);
577 if (!ret)
578 ret = count;
579
580 return ret;
581}
582static DEVICE_ATTR(ad_select, S_IRUGO | S_IWUSR, 381static DEVICE_ATTR(ad_select, S_IRUGO | S_IWUSR,
583 bonding_show_ad_select, bonding_store_ad_select); 382 bonding_show_ad_select, bonding_sysfs_store_option);
584 383
585/* 384/* Show and set the number of peer notifications to send after a failover event. */
586 * Show and set the number of peer notifications to send after a failover event.
587 */
588static ssize_t bonding_show_num_peer_notif(struct device *d, 385static ssize_t bonding_show_num_peer_notif(struct device *d,
589 struct device_attribute *attr, 386 struct device_attribute *attr,
590 char *buf) 387 char *buf)
@@ -611,12 +408,7 @@ static DEVICE_ATTR(num_grat_arp, S_IRUGO | S_IWUSR,
611static DEVICE_ATTR(num_unsol_na, S_IRUGO | S_IWUSR, 408static DEVICE_ATTR(num_unsol_na, S_IRUGO | S_IWUSR,
612 bonding_show_num_peer_notif, bonding_store_num_peer_notif); 409 bonding_show_num_peer_notif, bonding_store_num_peer_notif);
613 410
614/* 411/* Show the MII monitor interval. */
615 * Show and set the MII monitor interval. There are two tricky bits
616 * here. First, if MII monitoring is activated, then we must disable
617 * ARP monitoring. Second, if the timer isn't running, we must
618 * start it.
619 */
620static ssize_t bonding_show_miimon(struct device *d, 412static ssize_t bonding_show_miimon(struct device *d,
621 struct device_attribute *attr, 413 struct device_attribute *attr,
622 char *buf) 414 char *buf)
@@ -625,30 +417,10 @@ static ssize_t bonding_show_miimon(struct device *d,
625 417
626 return sprintf(buf, "%d\n", bond->params.miimon); 418 return sprintf(buf, "%d\n", bond->params.miimon);
627} 419}
628
629static ssize_t bonding_store_miimon(struct device *d,
630 struct device_attribute *attr,
631 const char *buf, size_t count)
632{
633 struct bonding *bond = to_bond(d);
634 int ret;
635
636 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_MIIMON, (char *)buf);
637 if (!ret)
638 ret = count;
639
640 return ret;
641}
642static DEVICE_ATTR(miimon, S_IRUGO | S_IWUSR, 420static DEVICE_ATTR(miimon, S_IRUGO | S_IWUSR,
643 bonding_show_miimon, bonding_store_miimon); 421 bonding_show_miimon, bonding_sysfs_store_option);
644 422
645/* 423/* Show the primary slave. */
646 * Show and set the primary slave. The store function is much
647 * simpler than bonding_store_slaves function because it only needs to
648 * handle one interface name.
649 * The bond must be a mode that supports a primary for this be
650 * set.
651 */
652static ssize_t bonding_show_primary(struct device *d, 424static ssize_t bonding_show_primary(struct device *d,
653 struct device_attribute *attr, 425 struct device_attribute *attr,
654 char *buf) 426 char *buf)
@@ -661,26 +433,10 @@ static ssize_t bonding_show_primary(struct device *d,
661 433
662 return count; 434 return count;
663} 435}
664
665static ssize_t bonding_store_primary(struct device *d,
666 struct device_attribute *attr,
667 const char *buf, size_t count)
668{
669 struct bonding *bond = to_bond(d);
670 int ret;
671
672 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_PRIMARY, (char *)buf);
673 if (!ret)
674 ret = count;
675
676 return ret;
677}
678static DEVICE_ATTR(primary, S_IRUGO | S_IWUSR, 436static DEVICE_ATTR(primary, S_IRUGO | S_IWUSR,
679 bonding_show_primary, bonding_store_primary); 437 bonding_show_primary, bonding_sysfs_store_option);
680 438
681/* 439/* Show the primary_reselect flag. */
682 * Show and set the primary_reselect flag.
683 */
684static ssize_t bonding_show_primary_reselect(struct device *d, 440static ssize_t bonding_show_primary_reselect(struct device *d,
685 struct device_attribute *attr, 441 struct device_attribute *attr,
686 char *buf) 442 char *buf)
@@ -694,28 +450,10 @@ static ssize_t bonding_show_primary_reselect(struct device *d,
694 return sprintf(buf, "%s %d\n", 450 return sprintf(buf, "%s %d\n",
695 val->string, bond->params.primary_reselect); 451 val->string, bond->params.primary_reselect);
696} 452}
697
698static ssize_t bonding_store_primary_reselect(struct device *d,
699 struct device_attribute *attr,
700 const char *buf, size_t count)
701{
702 struct bonding *bond = to_bond(d);
703 int ret;
704
705 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_PRIMARY_RESELECT,
706 (char *)buf);
707 if (!ret)
708 ret = count;
709
710 return ret;
711}
712static DEVICE_ATTR(primary_reselect, S_IRUGO | S_IWUSR, 453static DEVICE_ATTR(primary_reselect, S_IRUGO | S_IWUSR,
713 bonding_show_primary_reselect, 454 bonding_show_primary_reselect, bonding_sysfs_store_option);
714 bonding_store_primary_reselect);
715 455
716/* 456/* Show the use_carrier flag. */
717 * Show and set the use_carrier flag.
718 */
719static ssize_t bonding_show_carrier(struct device *d, 457static ssize_t bonding_show_carrier(struct device *d,
720 struct device_attribute *attr, 458 struct device_attribute *attr,
721 char *buf) 459 char *buf)
@@ -724,27 +462,11 @@ static ssize_t bonding_show_carrier(struct device *d,
724 462
725 return sprintf(buf, "%d\n", bond->params.use_carrier); 463 return sprintf(buf, "%d\n", bond->params.use_carrier);
726} 464}
727
728static ssize_t bonding_store_carrier(struct device *d,
729 struct device_attribute *attr,
730 const char *buf, size_t count)
731{
732 struct bonding *bond = to_bond(d);
733 int ret;
734
735 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_USE_CARRIER, (char *)buf);
736 if (!ret)
737 ret = count;
738
739 return ret;
740}
741static DEVICE_ATTR(use_carrier, S_IRUGO | S_IWUSR, 465static DEVICE_ATTR(use_carrier, S_IRUGO | S_IWUSR,
742 bonding_show_carrier, bonding_store_carrier); 466 bonding_show_carrier, bonding_sysfs_store_option);
743 467
744 468
745/* 469/* Show currently active_slave. */
746 * Show and set currently active_slave.
747 */
748static ssize_t bonding_show_active_slave(struct device *d, 470static ssize_t bonding_show_active_slave(struct device *d,
749 struct device_attribute *attr, 471 struct device_attribute *attr,
750 char *buf) 472 char *buf)
@@ -761,27 +483,10 @@ static ssize_t bonding_show_active_slave(struct device *d,
761 483
762 return count; 484 return count;
763} 485}
764
765static ssize_t bonding_store_active_slave(struct device *d,
766 struct device_attribute *attr,
767 const char *buf, size_t count)
768{
769 struct bonding *bond = to_bond(d);
770 int ret;
771
772 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_ACTIVE_SLAVE, (char *)buf);
773 if (!ret)
774 ret = count;
775
776 return ret;
777}
778static DEVICE_ATTR(active_slave, S_IRUGO | S_IWUSR, 486static DEVICE_ATTR(active_slave, S_IRUGO | S_IWUSR,
779 bonding_show_active_slave, bonding_store_active_slave); 487 bonding_show_active_slave, bonding_sysfs_store_option);
780
781 488
782/* 489/* Show link status of the bond interface. */
783 * Show link status of the bond interface.
784 */
785static ssize_t bonding_show_mii_status(struct device *d, 490static ssize_t bonding_show_mii_status(struct device *d,
786 struct device_attribute *attr, 491 struct device_attribute *attr,
787 char *buf) 492 char *buf)
@@ -792,9 +497,7 @@ static ssize_t bonding_show_mii_status(struct device *d,
792} 497}
793static DEVICE_ATTR(mii_status, S_IRUGO, bonding_show_mii_status, NULL); 498static DEVICE_ATTR(mii_status, S_IRUGO, bonding_show_mii_status, NULL);
794 499
795/* 500/* Show current 802.3ad aggregator ID. */
796 * Show current 802.3ad aggregator ID.
797 */
798static ssize_t bonding_show_ad_aggregator(struct device *d, 501static ssize_t bonding_show_ad_aggregator(struct device *d,
799 struct device_attribute *attr, 502 struct device_attribute *attr,
800 char *buf) 503 char *buf)
@@ -802,7 +505,7 @@ static ssize_t bonding_show_ad_aggregator(struct device *d,
802 int count = 0; 505 int count = 0;
803 struct bonding *bond = to_bond(d); 506 struct bonding *bond = to_bond(d);
804 507
805 if (bond->params.mode == BOND_MODE_8023AD) { 508 if (BOND_MODE(bond) == BOND_MODE_8023AD) {
806 struct ad_info ad_info; 509 struct ad_info ad_info;
807 count = sprintf(buf, "%d\n", 510 count = sprintf(buf, "%d\n",
808 bond_3ad_get_active_agg_info(bond, &ad_info) 511 bond_3ad_get_active_agg_info(bond, &ad_info)
@@ -814,9 +517,7 @@ static ssize_t bonding_show_ad_aggregator(struct device *d,
814static DEVICE_ATTR(ad_aggregator, S_IRUGO, bonding_show_ad_aggregator, NULL); 517static DEVICE_ATTR(ad_aggregator, S_IRUGO, bonding_show_ad_aggregator, NULL);
815 518
816 519
817/* 520/* Show number of active 802.3ad ports. */
818 * Show number of active 802.3ad ports.
819 */
820static ssize_t bonding_show_ad_num_ports(struct device *d, 521static ssize_t bonding_show_ad_num_ports(struct device *d,
821 struct device_attribute *attr, 522 struct device_attribute *attr,
822 char *buf) 523 char *buf)
@@ -824,7 +525,7 @@ static ssize_t bonding_show_ad_num_ports(struct device *d,
824 int count = 0; 525 int count = 0;
825 struct bonding *bond = to_bond(d); 526 struct bonding *bond = to_bond(d);
826 527
827 if (bond->params.mode == BOND_MODE_8023AD) { 528 if (BOND_MODE(bond) == BOND_MODE_8023AD) {
828 struct ad_info ad_info; 529 struct ad_info ad_info;
829 count = sprintf(buf, "%d\n", 530 count = sprintf(buf, "%d\n",
830 bond_3ad_get_active_agg_info(bond, &ad_info) 531 bond_3ad_get_active_agg_info(bond, &ad_info)
@@ -836,9 +537,7 @@ static ssize_t bonding_show_ad_num_ports(struct device *d,
836static DEVICE_ATTR(ad_num_ports, S_IRUGO, bonding_show_ad_num_ports, NULL); 537static DEVICE_ATTR(ad_num_ports, S_IRUGO, bonding_show_ad_num_ports, NULL);
837 538
838 539
839/* 540/* Show current 802.3ad actor key. */
840 * Show current 802.3ad actor key.
841 */
842static ssize_t bonding_show_ad_actor_key(struct device *d, 541static ssize_t bonding_show_ad_actor_key(struct device *d,
843 struct device_attribute *attr, 542 struct device_attribute *attr,
844 char *buf) 543 char *buf)
@@ -846,7 +545,7 @@ static ssize_t bonding_show_ad_actor_key(struct device *d,
846 int count = 0; 545 int count = 0;
847 struct bonding *bond = to_bond(d); 546 struct bonding *bond = to_bond(d);
848 547
849 if (bond->params.mode == BOND_MODE_8023AD) { 548 if (BOND_MODE(bond) == BOND_MODE_8023AD) {
850 struct ad_info ad_info; 549 struct ad_info ad_info;
851 count = sprintf(buf, "%d\n", 550 count = sprintf(buf, "%d\n",
852 bond_3ad_get_active_agg_info(bond, &ad_info) 551 bond_3ad_get_active_agg_info(bond, &ad_info)
@@ -858,9 +557,7 @@ static ssize_t bonding_show_ad_actor_key(struct device *d,
858static DEVICE_ATTR(ad_actor_key, S_IRUGO, bonding_show_ad_actor_key, NULL); 557static DEVICE_ATTR(ad_actor_key, S_IRUGO, bonding_show_ad_actor_key, NULL);
859 558
860 559
861/* 560/* Show current 802.3ad partner key. */
862 * Show current 802.3ad partner key.
863 */
864static ssize_t bonding_show_ad_partner_key(struct device *d, 561static ssize_t bonding_show_ad_partner_key(struct device *d,
865 struct device_attribute *attr, 562 struct device_attribute *attr,
866 char *buf) 563 char *buf)
@@ -868,7 +565,7 @@ static ssize_t bonding_show_ad_partner_key(struct device *d,
868 int count = 0; 565 int count = 0;
869 struct bonding *bond = to_bond(d); 566 struct bonding *bond = to_bond(d);
870 567
871 if (bond->params.mode == BOND_MODE_8023AD) { 568 if (BOND_MODE(bond) == BOND_MODE_8023AD) {
872 struct ad_info ad_info; 569 struct ad_info ad_info;
873 count = sprintf(buf, "%d\n", 570 count = sprintf(buf, "%d\n",
874 bond_3ad_get_active_agg_info(bond, &ad_info) 571 bond_3ad_get_active_agg_info(bond, &ad_info)
@@ -880,9 +577,7 @@ static ssize_t bonding_show_ad_partner_key(struct device *d,
880static DEVICE_ATTR(ad_partner_key, S_IRUGO, bonding_show_ad_partner_key, NULL); 577static DEVICE_ATTR(ad_partner_key, S_IRUGO, bonding_show_ad_partner_key, NULL);
881 578
882 579
883/* 580/* Show current 802.3ad partner mac. */
884 * Show current 802.3ad partner mac.
885 */
886static ssize_t bonding_show_ad_partner_mac(struct device *d, 581static ssize_t bonding_show_ad_partner_mac(struct device *d,
887 struct device_attribute *attr, 582 struct device_attribute *attr,
888 char *buf) 583 char *buf)
@@ -890,7 +585,7 @@ static ssize_t bonding_show_ad_partner_mac(struct device *d,
890 int count = 0; 585 int count = 0;
891 struct bonding *bond = to_bond(d); 586 struct bonding *bond = to_bond(d);
892 587
893 if (bond->params.mode == BOND_MODE_8023AD) { 588 if (BOND_MODE(bond) == BOND_MODE_8023AD) {
894 struct ad_info ad_info; 589 struct ad_info ad_info;
895 if (!bond_3ad_get_active_agg_info(bond, &ad_info)) 590 if (!bond_3ad_get_active_agg_info(bond, &ad_info))
896 count = sprintf(buf, "%pM\n", ad_info.partner_system); 591 count = sprintf(buf, "%pM\n", ad_info.partner_system);
@@ -900,9 +595,7 @@ static ssize_t bonding_show_ad_partner_mac(struct device *d,
900} 595}
901static DEVICE_ATTR(ad_partner_mac, S_IRUGO, bonding_show_ad_partner_mac, NULL); 596static DEVICE_ATTR(ad_partner_mac, S_IRUGO, bonding_show_ad_partner_mac, NULL);
902 597
903/* 598/* Show the queue_ids of the slaves in the current bond. */
904 * Show the queue_ids of the slaves in the current bond.
905 */
906static ssize_t bonding_show_queue_id(struct device *d, 599static ssize_t bonding_show_queue_id(struct device *d,
907 struct device_attribute *attr, 600 struct device_attribute *attr,
908 char *buf) 601 char *buf)
@@ -933,31 +626,11 @@ static ssize_t bonding_show_queue_id(struct device *d,
933 626
934 return res; 627 return res;
935} 628}
936
937/*
938 * Set the queue_ids of the slaves in the current bond. The bond
939 * interface must be enslaved for this to work.
940 */
941static ssize_t bonding_store_queue_id(struct device *d,
942 struct device_attribute *attr,
943 const char *buffer, size_t count)
944{
945 struct bonding *bond = to_bond(d);
946 int ret;
947
948 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_QUEUE_ID, (char *)buffer);
949 if (!ret)
950 ret = count;
951
952 return ret;
953}
954static DEVICE_ATTR(queue_id, S_IRUGO | S_IWUSR, bonding_show_queue_id, 629static DEVICE_ATTR(queue_id, S_IRUGO | S_IWUSR, bonding_show_queue_id,
955 bonding_store_queue_id); 630 bonding_sysfs_store_option);
956 631
957 632
958/* 633/* Show the all_slaves_active flag. */
959 * Show and set the all_slaves_active flag.
960 */
961static ssize_t bonding_show_slaves_active(struct device *d, 634static ssize_t bonding_show_slaves_active(struct device *d,
962 struct device_attribute *attr, 635 struct device_attribute *attr,
963 char *buf) 636 char *buf)
@@ -966,27 +639,10 @@ static ssize_t bonding_show_slaves_active(struct device *d,
966 639
967 return sprintf(buf, "%d\n", bond->params.all_slaves_active); 640 return sprintf(buf, "%d\n", bond->params.all_slaves_active);
968} 641}
969
970static ssize_t bonding_store_slaves_active(struct device *d,
971 struct device_attribute *attr,
972 const char *buf, size_t count)
973{
974 struct bonding *bond = to_bond(d);
975 int ret;
976
977 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_ALL_SLAVES_ACTIVE,
978 (char *)buf);
979 if (!ret)
980 ret = count;
981
982 return ret;
983}
984static DEVICE_ATTR(all_slaves_active, S_IRUGO | S_IWUSR, 642static DEVICE_ATTR(all_slaves_active, S_IRUGO | S_IWUSR,
985 bonding_show_slaves_active, bonding_store_slaves_active); 643 bonding_show_slaves_active, bonding_sysfs_store_option);
986 644
987/* 645/* Show the number of IGMP membership reports to send on link failure */
988 * Show and set the number of IGMP membership reports to send on link failure
989 */
990static ssize_t bonding_show_resend_igmp(struct device *d, 646static ssize_t bonding_show_resend_igmp(struct device *d,
991 struct device_attribute *attr, 647 struct device_attribute *attr,
992 char *buf) 648 char *buf)
@@ -995,23 +651,8 @@ static ssize_t bonding_show_resend_igmp(struct device *d,
995 651
996 return sprintf(buf, "%d\n", bond->params.resend_igmp); 652 return sprintf(buf, "%d\n", bond->params.resend_igmp);
997} 653}
998
999static ssize_t bonding_store_resend_igmp(struct device *d,
1000 struct device_attribute *attr,
1001 const char *buf, size_t count)
1002{
1003 struct bonding *bond = to_bond(d);
1004 int ret;
1005
1006 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_RESEND_IGMP, (char *)buf);
1007 if (!ret)
1008 ret = count;
1009
1010 return ret;
1011}
1012
1013static DEVICE_ATTR(resend_igmp, S_IRUGO | S_IWUSR, 654static DEVICE_ATTR(resend_igmp, S_IRUGO | S_IWUSR,
1014 bonding_show_resend_igmp, bonding_store_resend_igmp); 655 bonding_show_resend_igmp, bonding_sysfs_store_option);
1015 656
1016 657
1017static ssize_t bonding_show_lp_interval(struct device *d, 658static ssize_t bonding_show_lp_interval(struct device *d,
@@ -1019,25 +660,21 @@ static ssize_t bonding_show_lp_interval(struct device *d,
1019 char *buf) 660 char *buf)
1020{ 661{
1021 struct bonding *bond = to_bond(d); 662 struct bonding *bond = to_bond(d);
663
1022 return sprintf(buf, "%d\n", bond->params.lp_interval); 664 return sprintf(buf, "%d\n", bond->params.lp_interval);
1023} 665}
666static DEVICE_ATTR(lp_interval, S_IRUGO | S_IWUSR,
667 bonding_show_lp_interval, bonding_sysfs_store_option);
1024 668
1025static ssize_t bonding_store_lp_interval(struct device *d, 669static ssize_t bonding_show_tlb_dynamic_lb(struct device *d,
1026 struct device_attribute *attr, 670 struct device_attribute *attr,
1027 const char *buf, size_t count) 671 char *buf)
1028{ 672{
1029 struct bonding *bond = to_bond(d); 673 struct bonding *bond = to_bond(d);
1030 int ret; 674 return sprintf(buf, "%d\n", bond->params.tlb_dynamic_lb);
1031
1032 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_LP_INTERVAL, (char *)buf);
1033 if (!ret)
1034 ret = count;
1035
1036 return ret;
1037} 675}
1038 676static DEVICE_ATTR(tlb_dynamic_lb, S_IRUGO | S_IWUSR,
1039static DEVICE_ATTR(lp_interval, S_IRUGO | S_IWUSR, 677 bonding_show_tlb_dynamic_lb, bonding_sysfs_store_option);
1040 bonding_show_lp_interval, bonding_store_lp_interval);
1041 678
1042static ssize_t bonding_show_packets_per_slave(struct device *d, 679static ssize_t bonding_show_packets_per_slave(struct device *d,
1043 struct device_attribute *attr, 680 struct device_attribute *attr,
@@ -1045,27 +682,11 @@ static ssize_t bonding_show_packets_per_slave(struct device *d,
1045{ 682{
1046 struct bonding *bond = to_bond(d); 683 struct bonding *bond = to_bond(d);
1047 unsigned int packets_per_slave = bond->params.packets_per_slave; 684 unsigned int packets_per_slave = bond->params.packets_per_slave;
1048 return sprintf(buf, "%u\n", packets_per_slave);
1049}
1050
1051static ssize_t bonding_store_packets_per_slave(struct device *d,
1052 struct device_attribute *attr,
1053 const char *buf, size_t count)
1054{
1055 struct bonding *bond = to_bond(d);
1056 int ret;
1057 685
1058 ret = bond_opt_tryset_rtnl(bond, BOND_OPT_PACKETS_PER_SLAVE, 686 return sprintf(buf, "%u\n", packets_per_slave);
1059 (char *)buf);
1060 if (!ret)
1061 ret = count;
1062
1063 return ret;
1064} 687}
1065
1066static DEVICE_ATTR(packets_per_slave, S_IRUGO | S_IWUSR, 688static DEVICE_ATTR(packets_per_slave, S_IRUGO | S_IWUSR,
1067 bonding_show_packets_per_slave, 689 bonding_show_packets_per_slave, bonding_sysfs_store_option);
1068 bonding_store_packets_per_slave);
1069 690
1070static struct attribute *per_bond_attrs[] = { 691static struct attribute *per_bond_attrs[] = {
1071 &dev_attr_slaves.attr, 692 &dev_attr_slaves.attr,
@@ -1099,6 +720,7 @@ static struct attribute *per_bond_attrs[] = {
1099 &dev_attr_min_links.attr, 720 &dev_attr_min_links.attr,
1100 &dev_attr_lp_interval.attr, 721 &dev_attr_lp_interval.attr,
1101 &dev_attr_packets_per_slave.attr, 722 &dev_attr_packets_per_slave.attr,
723 &dev_attr_tlb_dynamic_lb.attr,
1102 NULL, 724 NULL,
1103}; 725};
1104 726
@@ -1107,8 +729,7 @@ static struct attribute_group bonding_group = {
1107 .attrs = per_bond_attrs, 729 .attrs = per_bond_attrs,
1108}; 730};
1109 731
1110/* 732/* Initialize sysfs. This sets up the bonding_masters file in
1111 * Initialize sysfs. This sets up the bonding_masters file in
1112 * /sys/class/net. 733 * /sys/class/net.
1113 */ 734 */
1114int bond_create_sysfs(struct bond_net *bn) 735int bond_create_sysfs(struct bond_net *bn)
@@ -1120,8 +741,7 @@ int bond_create_sysfs(struct bond_net *bn)
1120 741
1121 ret = netdev_class_create_file_ns(&bn->class_attr_bonding_masters, 742 ret = netdev_class_create_file_ns(&bn->class_attr_bonding_masters,
1122 bn->net); 743 bn->net);
1123 /* 744 /* Permit multiple loads of the module by ignoring failures to
1124 * Permit multiple loads of the module by ignoring failures to
1125 * create the bonding_masters sysfs file. Bonding devices 745 * create the bonding_masters sysfs file. Bonding devices
1126 * created by second or subsequent loads of the module will 746 * created by second or subsequent loads of the module will
1127 * not be listed in, or controllable by, bonding_masters, but 747 * not be listed in, or controllable by, bonding_masters, but
@@ -1144,16 +764,13 @@ int bond_create_sysfs(struct bond_net *bn)
1144 764
1145} 765}
1146 766
1147/* 767/* Remove /sys/class/net/bonding_masters. */
1148 * Remove /sys/class/net/bonding_masters.
1149 */
1150void bond_destroy_sysfs(struct bond_net *bn) 768void bond_destroy_sysfs(struct bond_net *bn)
1151{ 769{
1152 netdev_class_remove_file_ns(&bn->class_attr_bonding_masters, bn->net); 770 netdev_class_remove_file_ns(&bn->class_attr_bonding_masters, bn->net);
1153} 771}
1154 772
1155/* 773/* Initialize sysfs for each bond. This sets up and registers
1156 * Initialize sysfs for each bond. This sets up and registers
1157 * the 'bondctl' directory for each individual bond under /sys/class/net. 774 * the 'bondctl' directory for each individual bond under /sys/class/net.
1158 */ 775 */
1159void bond_prepare_sysfs_group(struct bonding *bond) 776void bond_prepare_sysfs_group(struct bonding *bond)
diff --git a/drivers/net/bonding/bond_sysfs_slave.c b/drivers/net/bonding/bond_sysfs_slave.c
index 2e4eec5450c8..198677f58ce0 100644
--- a/drivers/net/bonding/bond_sysfs_slave.c
+++ b/drivers/net/bonding/bond_sysfs_slave.c
@@ -69,8 +69,8 @@ static ssize_t ad_aggregator_id_show(struct slave *slave, char *buf)
69{ 69{
70 const struct aggregator *agg; 70 const struct aggregator *agg;
71 71
72 if (slave->bond->params.mode == BOND_MODE_8023AD) { 72 if (BOND_MODE(slave->bond) == BOND_MODE_8023AD) {
73 agg = SLAVE_AD_INFO(slave).port.aggregator; 73 agg = SLAVE_AD_INFO(slave)->port.aggregator;
74 if (agg) 74 if (agg)
75 return sprintf(buf, "%d\n", 75 return sprintf(buf, "%d\n",
76 agg->aggregator_identifier); 76 agg->aggregator_identifier);
diff --git a/drivers/net/bonding/bonding.h b/drivers/net/bonding/bonding.h
index 00bea320e3b5..0b4d9cde0b05 100644
--- a/drivers/net/bonding/bonding.h
+++ b/drivers/net/bonding/bonding.h
@@ -41,42 +41,6 @@
41 41
42#define BOND_DEFAULT_MIIMON 100 42#define BOND_DEFAULT_MIIMON 100
43 43
44#define IS_UP(dev) \
45 ((((dev)->flags & IFF_UP) == IFF_UP) && \
46 netif_running(dev) && \
47 netif_carrier_ok(dev))
48
49/*
50 * Checks whether slave is ready for transmit.
51 */
52#define SLAVE_IS_OK(slave) \
53 (((slave)->dev->flags & IFF_UP) && \
54 netif_running((slave)->dev) && \
55 ((slave)->link == BOND_LINK_UP) && \
56 bond_is_active_slave(slave))
57
58
59#define USES_PRIMARY(mode) \
60 (((mode) == BOND_MODE_ACTIVEBACKUP) || \
61 ((mode) == BOND_MODE_TLB) || \
62 ((mode) == BOND_MODE_ALB))
63
64#define BOND_NO_USES_ARP(mode) \
65 (((mode) == BOND_MODE_8023AD) || \
66 ((mode) == BOND_MODE_TLB) || \
67 ((mode) == BOND_MODE_ALB))
68
69#define TX_QUEUE_OVERRIDE(mode) \
70 (((mode) == BOND_MODE_ACTIVEBACKUP) || \
71 ((mode) == BOND_MODE_ROUNDROBIN))
72
73#define BOND_MODE_IS_LB(mode) \
74 (((mode) == BOND_MODE_TLB) || \
75 ((mode) == BOND_MODE_ALB))
76
77#define IS_IP_TARGET_UNUSABLE_ADDRESS(a) \
78 ((htonl(INADDR_BROADCAST) == a) || \
79 ipv4_is_zeronet(a))
80/* 44/*
81 * Less bad way to call ioctl from within the kernel; this needs to be 45 * Less bad way to call ioctl from within the kernel; this needs to be
82 * done some other way to get the call out of interrupt context. 46 * done some other way to get the call out of interrupt context.
@@ -90,6 +54,8 @@
90 set_fs(fs); \ 54 set_fs(fs); \
91 res; }) 55 res; })
92 56
57#define BOND_MODE(bond) ((bond)->params.mode)
58
93/* slave list primitives */ 59/* slave list primitives */
94#define bond_slave_list(bond) (&(bond)->dev->adj_list.lower) 60#define bond_slave_list(bond) (&(bond)->dev->adj_list.lower)
95 61
@@ -175,6 +141,7 @@ struct bond_params {
175 int resend_igmp; 141 int resend_igmp;
176 int lp_interval; 142 int lp_interval;
177 int packets_per_slave; 143 int packets_per_slave;
144 int tlb_dynamic_lb;
178 struct reciprocal_value reciprocal_packets_per_slave; 145 struct reciprocal_value reciprocal_packets_per_slave;
179}; 146};
180 147
@@ -183,8 +150,6 @@ struct bond_parm_tbl {
183 int mode; 150 int mode;
184}; 151};
185 152
186#define BOND_MAX_MODENAME_LEN 20
187
188struct slave { 153struct slave {
189 struct net_device *dev; /* first - useful for panic debug */ 154 struct net_device *dev; /* first - useful for panic debug */
190 struct bonding *bond; /* our master */ 155 struct bonding *bond; /* our master */
@@ -205,7 +170,7 @@ struct slave {
205 u32 speed; 170 u32 speed;
206 u16 queue_id; 171 u16 queue_id;
207 u8 perm_hwaddr[ETH_ALEN]; 172 u8 perm_hwaddr[ETH_ALEN];
208 struct ad_slave_info ad_info; /* HUGE - better to dynamically alloc */ 173 struct ad_slave_info *ad_info;
209 struct tlb_slave_info tlb_info; 174 struct tlb_slave_info tlb_info;
210#ifdef CONFIG_NET_POLL_CONTROLLER 175#ifdef CONFIG_NET_POLL_CONTROLLER
211 struct netpoll *np; 176 struct netpoll *np;
@@ -285,14 +250,41 @@ static inline struct slave *bond_get_slave_by_dev(struct bonding *bond,
285 250
286static inline struct bonding *bond_get_bond_by_slave(struct slave *slave) 251static inline struct bonding *bond_get_bond_by_slave(struct slave *slave)
287{ 252{
288 if (!slave || !slave->bond)
289 return NULL;
290 return slave->bond; 253 return slave->bond;
291} 254}
292 255
256static inline bool bond_should_override_tx_queue(struct bonding *bond)
257{
258 return BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP ||
259 BOND_MODE(bond) == BOND_MODE_ROUNDROBIN;
260}
261
293static inline bool bond_is_lb(const struct bonding *bond) 262static inline bool bond_is_lb(const struct bonding *bond)
294{ 263{
295 return BOND_MODE_IS_LB(bond->params.mode); 264 return BOND_MODE(bond) == BOND_MODE_TLB ||
265 BOND_MODE(bond) == BOND_MODE_ALB;
266}
267
268static inline bool bond_mode_uses_arp(int mode)
269{
270 return mode != BOND_MODE_8023AD && mode != BOND_MODE_TLB &&
271 mode != BOND_MODE_ALB;
272}
273
274static inline bool bond_mode_uses_primary(int mode)
275{
276 return mode == BOND_MODE_ACTIVEBACKUP || mode == BOND_MODE_TLB ||
277 mode == BOND_MODE_ALB;
278}
279
280static inline bool bond_uses_primary(struct bonding *bond)
281{
282 return bond_mode_uses_primary(BOND_MODE(bond));
283}
284
285static inline bool bond_slave_is_up(struct slave *slave)
286{
287 return netif_running(slave->dev) && netif_carrier_ok(slave->dev);
296} 288}
297 289
298static inline void bond_set_active_slave(struct slave *slave) 290static inline void bond_set_active_slave(struct slave *slave)
@@ -365,6 +357,12 @@ static inline bool bond_is_active_slave(struct slave *slave)
365 return !bond_slave_state(slave); 357 return !bond_slave_state(slave);
366} 358}
367 359
360static inline bool bond_slave_can_tx(struct slave *slave)
361{
362 return bond_slave_is_up(slave) && slave->link == BOND_LINK_UP &&
363 bond_is_active_slave(slave);
364}
365
368#define BOND_PRI_RESELECT_ALWAYS 0 366#define BOND_PRI_RESELECT_ALWAYS 0
369#define BOND_PRI_RESELECT_BETTER 1 367#define BOND_PRI_RESELECT_BETTER 1
370#define BOND_PRI_RESELECT_FAILURE 2 368#define BOND_PRI_RESELECT_FAILURE 2
@@ -396,12 +394,16 @@ static inline int slave_do_arp_validate(struct bonding *bond,
396 return bond->params.arp_validate & (1 << bond_slave_state(slave)); 394 return bond->params.arp_validate & (1 << bond_slave_state(slave));
397} 395}
398 396
399static inline int slave_do_arp_validate_only(struct bonding *bond, 397static inline int slave_do_arp_validate_only(struct bonding *bond)
400 struct slave *slave)
401{ 398{
402 return bond->params.arp_validate & BOND_ARP_FILTER; 399 return bond->params.arp_validate & BOND_ARP_FILTER;
403} 400}
404 401
402static inline int bond_is_ip_target_ok(__be32 addr)
403{
404 return !ipv4_is_lbcast(addr) && !ipv4_is_zeronet(addr);
405}
406
405/* Get the oldest arp which we've received on this slave for bond's 407/* Get the oldest arp which we've received on this slave for bond's
406 * arp_targets. 408 * arp_targets.
407 */ 409 */
@@ -479,16 +481,14 @@ static inline __be32 bond_confirm_addr(struct net_device *dev, __be32 dst, __be3
479 return addr; 481 return addr;
480} 482}
481 483
482static inline bool slave_can_tx(struct slave *slave) 484struct bond_net {
483{ 485 struct net *net; /* Associated network namespace */
484 if (IS_UP(slave->dev) && slave->link == BOND_LINK_UP && 486 struct list_head dev_list;
485 bond_is_active_slave(slave)) 487#ifdef CONFIG_PROC_FS
486 return true; 488 struct proc_dir_entry *proc_dir;
487 else 489#endif
488 return false; 490 struct class_attribute class_attr_bonding_masters;
489} 491};
490
491struct bond_net;
492 492
493int bond_arp_rcv(const struct sk_buff *skb, struct bonding *bond, struct slave *slave); 493int bond_arp_rcv(const struct sk_buff *skb, struct bonding *bond, struct slave *slave);
494void bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev); 494void bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev);
@@ -500,7 +500,7 @@ int bond_sysfs_slave_add(struct slave *slave);
500void bond_sysfs_slave_del(struct slave *slave); 500void bond_sysfs_slave_del(struct slave *slave);
501int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev); 501int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev);
502int bond_release(struct net_device *bond_dev, struct net_device *slave_dev); 502int bond_release(struct net_device *bond_dev, struct net_device *slave_dev);
503int bond_xmit_hash(struct bonding *bond, struct sk_buff *skb, int count); 503u32 bond_xmit_hash(struct bonding *bond, struct sk_buff *skb);
504void bond_select_active_slave(struct bonding *bond); 504void bond_select_active_slave(struct bonding *bond);
505void bond_change_active_slave(struct bonding *bond, struct slave *new_active); 505void bond_change_active_slave(struct bonding *bond, struct slave *new_active);
506void bond_create_debugfs(void); 506void bond_create_debugfs(void);
@@ -516,15 +516,9 @@ void bond_netlink_fini(void);
516struct net_device *bond_option_active_slave_get_rcu(struct bonding *bond); 516struct net_device *bond_option_active_slave_get_rcu(struct bonding *bond);
517struct net_device *bond_option_active_slave_get(struct bonding *bond); 517struct net_device *bond_option_active_slave_get(struct bonding *bond);
518const char *bond_slave_link_status(s8 link); 518const char *bond_slave_link_status(s8 link);
519 519bool bond_verify_device_path(struct net_device *start_dev,
520struct bond_net { 520 struct net_device *end_dev,
521 struct net * net; /* Associated network namespace */ 521 struct bond_vlan_tag *tags);
522 struct list_head dev_list;
523#ifdef CONFIG_PROC_FS
524 struct proc_dir_entry * proc_dir;
525#endif
526 struct class_attribute class_attr_bonding_masters;
527};
528 522
529#ifdef CONFIG_PROC_FS 523#ifdef CONFIG_PROC_FS
530void bond_create_proc_entry(struct bonding *bond); 524void bond_create_proc_entry(struct bonding *bond);
@@ -576,6 +570,27 @@ static inline struct slave *bond_slave_has_mac_rcu(struct bonding *bond,
576 return NULL; 570 return NULL;
577} 571}
578 572
573/* Caller must hold rcu_read_lock() for read */
574static inline bool bond_slave_has_mac_rx(struct bonding *bond, const u8 *mac)
575{
576 struct list_head *iter;
577 struct slave *tmp;
578 struct netdev_hw_addr *ha;
579
580 bond_for_each_slave_rcu(bond, tmp, iter)
581 if (ether_addr_equal_64bits(mac, tmp->dev->dev_addr))
582 return true;
583
584 if (netdev_uc_empty(bond->dev))
585 return false;
586
587 netdev_for_each_uc_addr(ha, bond->dev)
588 if (ether_addr_equal_64bits(mac, ha->addr))
589 return true;
590
591 return false;
592}
593
579/* Check if the ip is present in arp ip list, or first free slot if ip == 0 594/* Check if the ip is present in arp ip list, or first free slot if ip == 0
580 * Returns -1 if not found, index if found 595 * Returns -1 if not found, index if found
581 */ 596 */