|
@@ -357,6 +357,14 @@ static u8 __get_duplex(struct port *port)
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
+static void __ad_actor_update_port(struct port *port)
|
|
|
+{
|
|
|
+ const struct bonding *bond = bond_get_bond_by_slave(port->slave);
|
|
|
+
|
|
|
+ port->actor_system = BOND_AD_INFO(bond).system.sys_mac_addr;
|
|
|
+ port->actor_system_priority = BOND_AD_INFO(bond).system.sys_priority;
|
|
|
+}
|
|
|
+
|
|
|
/* Conversions */
|
|
|
|
|
|
/**
|
|
@@ -1963,9 +1971,7 @@ void bond_3ad_bind_slave(struct slave *slave)
|
|
|
port->actor_admin_port_key = bond->params.ad_user_port_key << 6;
|
|
|
ad_update_actor_keys(port, false);
|
|
|
/* actor system is the bond's system */
|
|
|
- port->actor_system = BOND_AD_INFO(bond).system.sys_mac_addr;
|
|
|
- port->actor_system_priority =
|
|
|
- BOND_AD_INFO(bond).system.sys_priority;
|
|
|
+ __ad_actor_update_port(port);
|
|
|
/* tx timer(to verify that no more than MAX_TX_IN_SECOND
|
|
|
* lacpdu's are sent in one second)
|
|
|
*/
|
|
@@ -2147,6 +2153,34 @@ out:
|
|
|
spin_unlock_bh(&bond->mode_lock);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * bond_3ad_update_ad_actor_settings - reflect change of actor settings to ports
|
|
|
+ * @bond: bonding struct to work on
|
|
|
+ *
|
|
|
+ * If an ad_actor setting gets changed we need to update the individual port
|
|
|
+ * settings so the bond device will use the new values when it gets upped.
|
|
|
+ */
|
|
|
+void bond_3ad_update_ad_actor_settings(struct bonding *bond)
|
|
|
+{
|
|
|
+ struct list_head *iter;
|
|
|
+ struct slave *slave;
|
|
|
+
|
|
|
+ ASSERT_RTNL();
|
|
|
+
|
|
|
+ BOND_AD_INFO(bond).system.sys_priority = bond->params.ad_actor_sys_prio;
|
|
|
+ if (is_zero_ether_addr(bond->params.ad_actor_system))
|
|
|
+ BOND_AD_INFO(bond).system.sys_mac_addr =
|
|
|
+ *((struct mac_addr *)bond->dev->dev_addr);
|
|
|
+ else
|
|
|
+ BOND_AD_INFO(bond).system.sys_mac_addr =
|
|
|
+ *((struct mac_addr *)bond->params.ad_actor_system);
|
|
|
+
|
|
|
+ spin_lock_bh(&bond->mode_lock);
|
|
|
+ bond_for_each_slave(bond, slave, iter)
|
|
|
+ __ad_actor_update_port(&(SLAVE_AD_INFO(slave)->port));
|
|
|
+ spin_unlock_bh(&bond->mode_lock);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* bond_3ad_state_machine_handler - handle state machines timeout
|
|
|
* @bond: bonding struct to work on
|