bond: let 'reapply()' reapply all supported options
Reapply now handles all the options supported by kernel and NM, meaning that some options are simply not allowed to be set while keeping the bond up, one of those options is the mode for instance. https://bugzilla.redhat.com/show_bug.cgi?id=1847814
This commit is contained in:
@@ -183,7 +183,6 @@ master_update_slave_connection (NMDevice *self,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
set_arp_targets (NMDevice *device,
|
set_arp_targets (NMDevice *device,
|
||||||
NMBondMode mode,
|
|
||||||
const char *cur_arp_ip_target,
|
const char *cur_arp_ip_target,
|
||||||
const char *new_arp_ip_target)
|
const char *new_arp_ip_target)
|
||||||
{
|
{
|
||||||
@@ -296,15 +295,39 @@ set_bond_attr_active_slave (NMDevice *device, NMSettingBond *s_bond)
|
|||||||
_set_bond_attr (device, NM_SETTING_BOND_OPTION_ACTIVE_SLAVE, value);
|
_set_bond_attr (device, NM_SETTING_BOND_OPTION_ACTIVE_SLAVE, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
set_bond_attrs_or_default (NMDevice *device, NMSettingBond *s_bond, const char *const *attr_v)
|
||||||
|
{
|
||||||
|
nm_assert (NM_IS_DEVICE (device));
|
||||||
|
nm_assert (s_bond);
|
||||||
|
nm_assert (attr_v);
|
||||||
|
|
||||||
|
for ( ; *attr_v ; ++attr_v)
|
||||||
|
set_bond_attr_or_default (device, s_bond, *attr_v);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
set_bond_arp_ip_targets (NMDevice *device, NMSettingBond *s_bond)
|
||||||
|
{
|
||||||
|
int ifindex = nm_device_get_ifindex (device);
|
||||||
|
gs_free char *cur_arp_ip_target = NULL;
|
||||||
|
|
||||||
|
/* ARP targets: clear and initialize the list */
|
||||||
|
cur_arp_ip_target = nm_platform_sysctl_master_get_option (nm_device_get_platform (device),
|
||||||
|
ifindex,
|
||||||
|
NM_SETTING_BOND_OPTION_ARP_IP_TARGET);
|
||||||
|
set_arp_targets (device,
|
||||||
|
cur_arp_ip_target,
|
||||||
|
nm_setting_bond_get_option_or_default (s_bond, NM_SETTING_BOND_OPTION_ARP_IP_TARGET));
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
apply_bonding_config (NMDeviceBond *self)
|
apply_bonding_config (NMDeviceBond *self)
|
||||||
{
|
{
|
||||||
NMDevice *device = NM_DEVICE (self);
|
NMDevice *device = NM_DEVICE (self);
|
||||||
int ifindex = nm_device_get_ifindex (device);
|
|
||||||
NMSettingBond *s_bond;
|
NMSettingBond *s_bond;
|
||||||
NMBondMode mode;
|
NMBondMode mode;
|
||||||
const char *mode_str;
|
const char *mode_str;
|
||||||
gs_free char *cur_arp_ip_target = NULL;
|
|
||||||
|
|
||||||
s_bond = nm_device_get_applied_setting (device, NM_TYPE_SETTING_BOND);
|
s_bond = nm_device_get_applied_setting (device, NM_TYPE_SETTING_BOND);
|
||||||
g_return_val_if_fail (s_bond, FALSE);
|
g_return_val_if_fail (s_bond, FALSE);
|
||||||
@@ -318,40 +341,34 @@ apply_bonding_config (NMDeviceBond *self)
|
|||||||
*/
|
*/
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_MODE);
|
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_MODE);
|
||||||
|
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_MIIMON);
|
set_bond_arp_ip_targets (device, s_bond);
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_UPDELAY);
|
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_DOWNDELAY);
|
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_ARP_INTERVAL);
|
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_ARP_VALIDATE);
|
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_PRIMARY);
|
|
||||||
|
|
||||||
/* ARP targets: clear and initialize the list */
|
|
||||||
cur_arp_ip_target = nm_platform_sysctl_master_get_option (nm_device_get_platform (device),
|
|
||||||
ifindex,
|
|
||||||
NM_SETTING_BOND_OPTION_ARP_IP_TARGET);
|
|
||||||
set_arp_targets (device,
|
|
||||||
mode,
|
|
||||||
cur_arp_ip_target,
|
|
||||||
nm_setting_bond_get_option_or_default (s_bond, NM_SETTING_BOND_OPTION_ARP_IP_TARGET));
|
|
||||||
|
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_AD_ACTOR_SYSTEM);
|
|
||||||
set_bond_attr_active_slave (device, s_bond);
|
set_bond_attr_active_slave (device, s_bond);
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_AD_ACTOR_SYS_PRIO);
|
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_AD_SELECT);
|
set_bond_attrs_or_default (device,
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_AD_USER_PORT_KEY);
|
s_bond,
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_ALL_SLAVES_ACTIVE);
|
NM_MAKE_STRV (NM_SETTING_BOND_OPTION_MIIMON,
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_ARP_ALL_TARGETS);
|
NM_SETTING_BOND_OPTION_UPDELAY,
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_FAIL_OVER_MAC);
|
NM_SETTING_BOND_OPTION_DOWNDELAY,
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_LACP_RATE);
|
NM_SETTING_BOND_OPTION_ARP_INTERVAL,
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_LP_INTERVAL);
|
NM_SETTING_BOND_OPTION_ARP_VALIDATE,
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_MIN_LINKS);
|
NM_SETTING_BOND_OPTION_PRIMARY,
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_PACKETS_PER_SLAVE);
|
NM_SETTING_BOND_OPTION_AD_ACTOR_SYSTEM,
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_PRIMARY_RESELECT);
|
NM_SETTING_BOND_OPTION_AD_ACTOR_SYS_PRIO,
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_RESEND_IGMP);
|
NM_SETTING_BOND_OPTION_AD_SELECT,
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_TLB_DYNAMIC_LB);
|
NM_SETTING_BOND_OPTION_AD_USER_PORT_KEY,
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_USE_CARRIER);
|
NM_SETTING_BOND_OPTION_ALL_SLAVES_ACTIVE,
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY);
|
NM_SETTING_BOND_OPTION_ARP_ALL_TARGETS,
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_NUM_GRAT_ARP);
|
NM_SETTING_BOND_OPTION_FAIL_OVER_MAC,
|
||||||
|
NM_SETTING_BOND_OPTION_LACP_RATE,
|
||||||
|
NM_SETTING_BOND_OPTION_LP_INTERVAL,
|
||||||
|
NM_SETTING_BOND_OPTION_MIN_LINKS,
|
||||||
|
NM_SETTING_BOND_OPTION_PACKETS_PER_SLAVE,
|
||||||
|
NM_SETTING_BOND_OPTION_PRIMARY_RESELECT,
|
||||||
|
NM_SETTING_BOND_OPTION_RESEND_IGMP,
|
||||||
|
NM_SETTING_BOND_OPTION_TLB_DYNAMIC_LB,
|
||||||
|
NM_SETTING_BOND_OPTION_USE_CARRIER,
|
||||||
|
NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY,
|
||||||
|
NM_SETTING_BOND_OPTION_NUM_GRAT_ARP));
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -525,8 +542,26 @@ check_changed_options (NMSettingBond *s_a, NMSettingBond *s_b, GError **error)
|
|||||||
|
|
||||||
/* We support changes to these */
|
/* We support changes to these */
|
||||||
if (NM_IN_STRSET (name,
|
if (NM_IN_STRSET (name,
|
||||||
NM_SETTING_BOND_OPTION_ACTIVE_SLAVE,
|
NM_SETTING_BOND_OPTION_PRIMARY,
|
||||||
NM_SETTING_BOND_OPTION_PRIMARY)) {
|
NM_SETTING_BOND_OPTION_MIIMON,
|
||||||
|
NM_SETTING_BOND_OPTION_UPDELAY,
|
||||||
|
NM_SETTING_BOND_OPTION_DOWNDELAY,
|
||||||
|
NM_SETTING_BOND_OPTION_ARP_INTERVAL,
|
||||||
|
NM_SETTING_BOND_OPTION_ARP_VALIDATE,
|
||||||
|
NM_SETTING_BOND_OPTION_PRIMARY,
|
||||||
|
NM_SETTING_BOND_OPTION_AD_ACTOR_SYSTEM,
|
||||||
|
NM_SETTING_BOND_OPTION_AD_ACTOR_SYS_PRIO,
|
||||||
|
NM_SETTING_BOND_OPTION_ALL_SLAVES_ACTIVE,
|
||||||
|
NM_SETTING_BOND_OPTION_ARP_ALL_TARGETS,
|
||||||
|
NM_SETTING_BOND_OPTION_FAIL_OVER_MAC,
|
||||||
|
NM_SETTING_BOND_OPTION_LP_INTERVAL,
|
||||||
|
NM_SETTING_BOND_OPTION_MIN_LINKS,
|
||||||
|
NM_SETTING_BOND_OPTION_PACKETS_PER_SLAVE,
|
||||||
|
NM_SETTING_BOND_OPTION_PRIMARY_RESELECT,
|
||||||
|
NM_SETTING_BOND_OPTION_RESEND_IGMP,
|
||||||
|
NM_SETTING_BOND_OPTION_USE_CARRIER,
|
||||||
|
NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY,
|
||||||
|
NM_SETTING_BOND_OPTION_NUM_GRAT_ARP)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -579,8 +614,8 @@ static void
|
|||||||
reapply_connection (NMDevice *device, NMConnection *con_old, NMConnection *con_new)
|
reapply_connection (NMDevice *device, NMConnection *con_old, NMConnection *con_new)
|
||||||
{
|
{
|
||||||
NMDeviceBond *self = NM_DEVICE_BOND (device);
|
NMDeviceBond *self = NM_DEVICE_BOND (device);
|
||||||
const char *value;
|
|
||||||
NMSettingBond *s_bond;
|
NMSettingBond *s_bond;
|
||||||
|
const char *value;
|
||||||
NMBondMode mode;
|
NMBondMode mode;
|
||||||
|
|
||||||
NM_DEVICE_CLASS (nm_device_bond_parent_class)->reapply_connection (device,
|
NM_DEVICE_CLASS (nm_device_bond_parent_class)->reapply_connection (device,
|
||||||
@@ -595,8 +630,34 @@ reapply_connection (NMDevice *device, NMConnection *con_old, NMConnection *con_n
|
|||||||
mode = _nm_setting_bond_mode_from_string (value);
|
mode = _nm_setting_bond_mode_from_string (value);
|
||||||
g_return_if_fail (mode != NM_BOND_MODE_UNKNOWN);
|
g_return_if_fail (mode != NM_BOND_MODE_UNKNOWN);
|
||||||
|
|
||||||
set_bond_attr_or_default (device, s_bond, NM_SETTING_BOND_OPTION_PRIMARY);
|
/* Below we set only the bond options that kernel allows to modify
|
||||||
|
* while keeping the bond interface up */
|
||||||
|
|
||||||
set_bond_attr_active_slave (device, s_bond);
|
set_bond_attr_active_slave (device, s_bond);
|
||||||
|
set_bond_arp_ip_targets (device, s_bond);
|
||||||
|
|
||||||
|
set_bond_attrs_or_default (device,
|
||||||
|
s_bond,
|
||||||
|
NM_MAKE_STRV (NM_SETTING_BOND_OPTION_PRIMARY,
|
||||||
|
NM_SETTING_BOND_OPTION_MIIMON,
|
||||||
|
NM_SETTING_BOND_OPTION_UPDELAY,
|
||||||
|
NM_SETTING_BOND_OPTION_DOWNDELAY,
|
||||||
|
NM_SETTING_BOND_OPTION_ARP_INTERVAL,
|
||||||
|
NM_SETTING_BOND_OPTION_ARP_VALIDATE,
|
||||||
|
NM_SETTING_BOND_OPTION_PRIMARY,
|
||||||
|
NM_SETTING_BOND_OPTION_AD_ACTOR_SYSTEM,
|
||||||
|
NM_SETTING_BOND_OPTION_AD_ACTOR_SYS_PRIO,
|
||||||
|
NM_SETTING_BOND_OPTION_ALL_SLAVES_ACTIVE,
|
||||||
|
NM_SETTING_BOND_OPTION_ARP_ALL_TARGETS,
|
||||||
|
NM_SETTING_BOND_OPTION_FAIL_OVER_MAC,
|
||||||
|
NM_SETTING_BOND_OPTION_LP_INTERVAL,
|
||||||
|
NM_SETTING_BOND_OPTION_MIN_LINKS,
|
||||||
|
NM_SETTING_BOND_OPTION_PACKETS_PER_SLAVE,
|
||||||
|
NM_SETTING_BOND_OPTION_PRIMARY_RESELECT,
|
||||||
|
NM_SETTING_BOND_OPTION_RESEND_IGMP,
|
||||||
|
NM_SETTING_BOND_OPTION_USE_CARRIER,
|
||||||
|
NM_SETTING_BOND_OPTION_XMIT_HASH_POLICY,
|
||||||
|
NM_SETTING_BOND_OPTION_NUM_GRAT_ARP));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
Reference in New Issue
Block a user