mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-03-10 03:10:31 +01:00
bond: merge branch 'th/bond-options-reapply-fix' (part 1)
https://bugzilla.redhat.com/show_bug.cgi?id=1876577
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/622
(cherry picked from commit 75ff7a6daf)
This commit is contained in:
commit
fb2788952c
4 changed files with 109 additions and 97 deletions
|
|
@ -255,13 +255,16 @@ mode_widget_changed (GObject *object,
|
|||
_bond_add_option (priv->s_bond, NM_SETTING_BOND_OPTION_MODE, mode);
|
||||
priv->updating = FALSE;
|
||||
|
||||
if (!strcmp (mode, "balance-tlb") || !strcmp (mode, "balance-alb")) {
|
||||
if (NM_IN_STRSET (mode, "balance-tlb",
|
||||
"balance-alb")) {
|
||||
nmt_newt_popup_set_active (priv->monitoring, NMT_PAGE_BOND_MONITORING_MII);
|
||||
nmt_newt_component_set_sensitive (NMT_NEWT_COMPONENT (priv->monitoring), FALSE);
|
||||
} else
|
||||
nmt_newt_component_set_sensitive (NMT_NEWT_COMPONENT (priv->monitoring), TRUE);
|
||||
|
||||
if (!strcmp (mode, "active-backup")) {
|
||||
if (NM_IN_STRSET (mode, "active-backup",
|
||||
"balance-alb",
|
||||
"balance-tlb")) {
|
||||
nmt_newt_widget_set_visible (NMT_NEWT_WIDGET (priv->primary), TRUE);
|
||||
_bond_add_option (priv->s_bond, NM_SETTING_BOND_OPTION_PRIMARY,
|
||||
nmt_newt_entry_get_text (priv->primary));
|
||||
|
|
|
|||
|
|
@ -835,7 +835,9 @@ verify (NMSetting *setting, NMConnection *connection, GError **error)
|
|||
}
|
||||
|
||||
primary = _bond_get_option (self, NM_SETTING_BOND_OPTION_PRIMARY);
|
||||
if (bond_mode == NM_BOND_MODE_ACTIVEBACKUP) {
|
||||
if (NM_IN_SET (bond_mode, NM_BOND_MODE_ACTIVEBACKUP,
|
||||
NM_BOND_MODE_TLB,
|
||||
NM_BOND_MODE_ALB)) {
|
||||
GError *tmp_error = NULL;
|
||||
|
||||
if (primary && !nm_utils_ifname_valid_kernel (primary, &tmp_error)) {
|
||||
|
|
|
|||
|
|
@ -744,6 +744,16 @@ NM_G_ERROR_MSG (GError *error)
|
|||
#define _NM_IN_SET_EVAL_18(op, _x, y, ...) (_x == (y)) op _NM_IN_SET_EVAL_17 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_SET_EVAL_19(op, _x, y, ...) (_x == (y)) op _NM_IN_SET_EVAL_18 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_SET_EVAL_20(op, _x, y, ...) (_x == (y)) op _NM_IN_SET_EVAL_19 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_SET_EVAL_21(op, _x, y, ...) (_x == (y)) op _NM_IN_SET_EVAL_20 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_SET_EVAL_22(op, _x, y, ...) (_x == (y)) op _NM_IN_SET_EVAL_21 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_SET_EVAL_23(op, _x, y, ...) (_x == (y)) op _NM_IN_SET_EVAL_22 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_SET_EVAL_24(op, _x, y, ...) (_x == (y)) op _NM_IN_SET_EVAL_23 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_SET_EVAL_25(op, _x, y, ...) (_x == (y)) op _NM_IN_SET_EVAL_24 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_SET_EVAL_26(op, _x, y, ...) (_x == (y)) op _NM_IN_SET_EVAL_25 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_SET_EVAL_27(op, _x, y, ...) (_x == (y)) op _NM_IN_SET_EVAL_26 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_SET_EVAL_28(op, _x, y, ...) (_x == (y)) op _NM_IN_SET_EVAL_27 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_SET_EVAL_29(op, _x, y, ...) (_x == (y)) op _NM_IN_SET_EVAL_28 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_SET_EVAL_30(op, _x, y, ...) (_x == (y)) op _NM_IN_SET_EVAL_29 (op, _x, __VA_ARGS__)
|
||||
|
||||
#define _NM_IN_SET_EVAL_N2(op, _x, n, ...) (_NM_IN_SET_EVAL_##n(op, _x, __VA_ARGS__))
|
||||
#define _NM_IN_SET_EVAL_N(op, type, x, n, ...) \
|
||||
|
|
@ -814,6 +824,16 @@ _NM_IN_STRSET_streq (const char *x, const char *s)
|
|||
#define _NM_IN_STRSET_EVAL_18(op, _x, y, ...) _NM_IN_STRSET_streq (_x, y) op _NM_IN_STRSET_EVAL_17 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_STRSET_EVAL_19(op, _x, y, ...) _NM_IN_STRSET_streq (_x, y) op _NM_IN_STRSET_EVAL_18 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_STRSET_EVAL_20(op, _x, y, ...) _NM_IN_STRSET_streq (_x, y) op _NM_IN_STRSET_EVAL_19 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_STRSET_EVAL_21(op, _x, y, ...) _NM_IN_STRSET_streq (_x, y) op _NM_IN_STRSET_EVAL_20 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_STRSET_EVAL_22(op, _x, y, ...) _NM_IN_STRSET_streq (_x, y) op _NM_IN_STRSET_EVAL_21 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_STRSET_EVAL_23(op, _x, y, ...) _NM_IN_STRSET_streq (_x, y) op _NM_IN_STRSET_EVAL_22 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_STRSET_EVAL_24(op, _x, y, ...) _NM_IN_STRSET_streq (_x, y) op _NM_IN_STRSET_EVAL_23 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_STRSET_EVAL_25(op, _x, y, ...) _NM_IN_STRSET_streq (_x, y) op _NM_IN_STRSET_EVAL_24 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_STRSET_EVAL_26(op, _x, y, ...) _NM_IN_STRSET_streq (_x, y) op _NM_IN_STRSET_EVAL_25 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_STRSET_EVAL_27(op, _x, y, ...) _NM_IN_STRSET_streq (_x, y) op _NM_IN_STRSET_EVAL_26 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_STRSET_EVAL_28(op, _x, y, ...) _NM_IN_STRSET_streq (_x, y) op _NM_IN_STRSET_EVAL_27 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_STRSET_EVAL_29(op, _x, y, ...) _NM_IN_STRSET_streq (_x, y) op _NM_IN_STRSET_EVAL_28 (op, _x, __VA_ARGS__)
|
||||
#define _NM_IN_STRSET_EVAL_30(op, _x, y, ...) _NM_IN_STRSET_streq (_x, y) op _NM_IN_STRSET_EVAL_29 (op, _x, __VA_ARGS__)
|
||||
|
||||
#define _NM_IN_STRSET_EVAL_N2(op, _x, n, ...) (_NM_IN_STRSET_EVAL_##n(op, _x, __VA_ARGS__))
|
||||
#define _NM_IN_STRSET_EVAL_N(op, x, n, ...) \
|
||||
|
|
|
|||
|
|
@ -22,6 +22,59 @@ _LOG_DECLARE_SELF(NMDeviceBond);
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
#define OPTIONS_APPLY_SUBSET \
|
||||
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_AD_SELECT, \
|
||||
NM_SETTING_BOND_OPTION_AD_USER_PORT_KEY, \
|
||||
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_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
|
||||
|
||||
#define OPTIONS_REAPPLY_SUBSET \
|
||||
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
|
||||
|
||||
#define OPTIONS_REAPPLY_FULL \
|
||||
OPTIONS_REAPPLY_SUBSET, \
|
||||
NM_SETTING_BOND_OPTION_ACTIVE_SLAVE, \
|
||||
NM_SETTING_BOND_OPTION_ARP_IP_TARGET
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
struct _NMDeviceBond {
|
||||
NMDevice parent;
|
||||
};
|
||||
|
|
@ -346,29 +399,7 @@ apply_bonding_config (NMDeviceBond *self)
|
|||
|
||||
set_bond_attrs_or_default (device,
|
||||
s_bond,
|
||||
NM_MAKE_STRV (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_AD_SELECT,
|
||||
NM_SETTING_BOND_OPTION_AD_USER_PORT_KEY,
|
||||
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_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));
|
||||
NM_MAKE_STRV (OPTIONS_APPLY_SUBSET));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -530,56 +561,6 @@ create_and_realize (NMDevice *device,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
check_changed_options (NMSettingBond *s_a, NMSettingBond *s_b, GError **error)
|
||||
{
|
||||
const char **option_list;
|
||||
|
||||
option_list = nm_setting_bond_get_valid_options (NULL);
|
||||
|
||||
for (; *option_list; ++option_list) {
|
||||
const char *name = *option_list;
|
||||
|
||||
/* We support changes to these */
|
||||
if (NM_IN_STRSET (name,
|
||||
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;
|
||||
}
|
||||
|
||||
/* Reject any other changes */
|
||||
if (!nm_streq0 (nm_setting_bond_get_option_normalized (s_a, name),
|
||||
nm_setting_bond_get_option_normalized (s_b, name))) {
|
||||
g_set_error (error,
|
||||
NM_DEVICE_ERROR,
|
||||
NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
|
||||
"Can't reapply '%s' bond option",
|
||||
name);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
can_reapply_change (NMDevice *device,
|
||||
const char *setting_name,
|
||||
|
|
@ -592,13 +573,38 @@ can_reapply_change (NMDevice *device,
|
|||
|
||||
/* Only handle bond setting here, delegate other settings to parent class */
|
||||
if (nm_streq (setting_name, NM_SETTING_BOND_SETTING_NAME)) {
|
||||
NMSettingBond *s_a = NM_SETTING_BOND (s_old);
|
||||
NMSettingBond *s_b = NM_SETTING_BOND (s_new);
|
||||
const char **option_list;
|
||||
|
||||
if (!nm_device_hash_check_invalid_keys (diffs,
|
||||
NM_SETTING_BOND_SETTING_NAME,
|
||||
error,
|
||||
NM_SETTING_BOND_OPTIONS))
|
||||
return FALSE;
|
||||
|
||||
return check_changed_options (NM_SETTING_BOND (s_old), NM_SETTING_BOND (s_new), error);
|
||||
option_list = nm_setting_bond_get_valid_options (NULL);
|
||||
|
||||
for (; *option_list; ++option_list) {
|
||||
const char *name = *option_list;
|
||||
|
||||
/* We support changes to these */
|
||||
if (NM_IN_STRSET (name, OPTIONS_REAPPLY_FULL))
|
||||
continue;
|
||||
|
||||
/* Reject any other changes */
|
||||
if (!nm_streq0 (nm_setting_bond_get_option_normalized (s_a, name),
|
||||
nm_setting_bond_get_option_normalized (s_b, name))) {
|
||||
g_set_error (error,
|
||||
NM_DEVICE_ERROR,
|
||||
NM_DEVICE_ERROR_INCOMPATIBLE_CONNECTION,
|
||||
"Can't reapply '%s' bond option",
|
||||
name);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
device_class = NM_DEVICE_CLASS (nm_device_bond_parent_class);
|
||||
|
|
@ -638,26 +644,7 @@ reapply_connection (NMDevice *device, NMConnection *con_old, NMConnection *con_n
|
|||
|
||||
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));
|
||||
NM_MAKE_STRV (OPTIONS_REAPPLY_SUBSET));
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue