NetworkManager/bugfix-NetworkManager-tui-solve-bond-module.patch

95 lines
4.3 KiB
Diff
Raw Normal View History

2020-06-22 21:56:30 +08:00
diff -Nur NetworkManager-1.20.10.org/libnm-core/nm-core-internal.h NetworkManager-1.20.10/libnm-core/nm-core-internal.h
--- NetworkManager-1.20.10.org/libnm-core/nm-core-internal.h 2020-06-12 11:29:24.997178184 +0800
+++ NetworkManager-1.20.10/libnm-core/nm-core-internal.h 2020-06-12 14:14:02.965298351 +0800
@@ -495,6 +495,7 @@
2019-09-30 11:09:43 -04:00
NM_BOND_OPTION_TYPE_IP,
NM_BOND_OPTION_TYPE_MAC,
NM_BOND_OPTION_TYPE_IFNAME,
2020-06-22 21:56:30 +08:00
+ NM_BOND_OPTION_TYPE_PRIMARY_SLAVE,
2019-09-30 11:09:43 -04:00
} NMBondOptionType;
NMBondOptionType
2020-06-22 21:56:30 +08:00
diff -Nur NetworkManager-1.20.10.org/libnm-core/nm-setting-bond.c NetworkManager-1.20.10/libnm-core/nm-setting-bond.c
--- NetworkManager-1.20.10.org/libnm-core/nm-setting-bond.c 2020-06-12 11:29:24.997178184 +0800
+++ NetworkManager-1.20.10/libnm-core/nm-setting-bond.c 2020-06-12 14:19:44.310508536 +0800
@@ -77,7 +77,7 @@
2019-09-30 11:09:43 -04:00
{ NM_SETTING_BOND_OPTION_ARP_IP_TARGET, "", NM_BOND_OPTION_TYPE_IP },
2020-06-22 21:56:30 +08:00
{ NM_SETTING_BOND_OPTION_ARP_VALIDATE, "none", NM_BOND_OPTION_TYPE_BOTH, 0, 6,
{ "none", "active", "backup", "all", "filter", "filter_active", "filter_backup", NULL } },
2019-09-30 11:09:43 -04:00
- { NM_SETTING_BOND_OPTION_PRIMARY, "", NM_BOND_OPTION_TYPE_IFNAME },
+ { NM_SETTING_BOND_OPTION_PRIMARY, "", NM_BOND_OPTION_TYPE_PRIMARY_SLAVE },
2020-06-22 21:56:30 +08:00
{ NM_SETTING_BOND_OPTION_PRIMARY_RESELECT, "always", NM_BOND_OPTION_TYPE_BOTH, 0, 2,
2019-09-30 11:09:43 -04:00
{ "always", "better", "failure", NULL } },
{ NM_SETTING_BOND_OPTION_FAIL_OVER_MAC, "none", NM_BOND_OPTION_TYPE_BOTH, 0, 2,
2020-06-22 21:56:30 +08:00
@@ -232,7 +232,16 @@
2019-09-30 11:09:43 -04:00
}
return TRUE;
}
+static gboolean
+nm_check_primary_slave (const char *value)
+{
2020-06-22 21:56:30 +08:00
+ if (!value || !value[0]){
+ return TRUE;
+ }
2019-09-30 11:09:43 -04:00
2020-06-22 21:56:30 +08:00
+
+ return nm_utils_is_valid_iface_name (value, NULL);
2019-09-30 11:09:43 -04:00
+}
static gboolean
validate_ifname (const char *name, const char *value)
{
2020-06-22 21:56:30 +08:00
@@ -280,6 +289,8 @@
2019-09-30 11:09:43 -04:00
return nm_utils_hwaddr_valid (value, ETH_ALEN);
case NM_BOND_OPTION_TYPE_IFNAME:
return validate_ifname (name, value);
2020-06-22 21:56:30 +08:00
+ case NM_BOND_OPTION_TYPE_PRIMARY_SLAVE:
+ return nm_check_primary_slave (value);
2019-09-30 11:09:43 -04:00
}
return FALSE;
}
2020-06-22 21:56:30 +08:00
@@ -333,6 +344,9 @@
2019-09-30 11:09:43 -04:00
const char *value)
{
NMSettingBondPrivate *priv;
2020-06-22 21:56:30 +08:00
+ const char *init_updelay = "0";
+ const char *init_downdelay = "0";
+ const char *tmp = NULL;
2019-09-30 11:09:43 -04:00
g_return_val_if_fail (NM_IS_SETTING_BOND (setting), FALSE);
2020-06-22 21:56:30 +08:00
@@ -348,11 +362,22 @@
2019-09-30 11:09:43 -04:00
&& strcmp (value, "0") != 0) {
g_hash_table_remove (priv->options, NM_SETTING_BOND_OPTION_ARP_INTERVAL);
g_hash_table_remove (priv->options, NM_SETTING_BOND_OPTION_ARP_IP_TARGET);
+
2020-06-22 21:56:30 +08:00
+ tmp = g_hash_table_lookup (NM_SETTING_BOND_GET_PRIVATE (setting)->options, NM_SETTING_BOND_OPTION_DOWNDELAY);
+ if(!tmp){
+ g_hash_table_insert (priv->options, g_strdup (NM_SETTING_BOND_OPTION_DOWNDELAY), g_strdup (init_downdelay));
+ }
+ tmp = g_hash_table_lookup (NM_SETTING_BOND_GET_PRIVATE (setting)->options,NM_SETTING_BOND_OPTION_UPDELAY);
+ if(!tmp){
+ g_hash_table_insert (priv->options, g_strdup (NM_SETTING_BOND_OPTION_UPDELAY),g_strdup (init_updelay));
+ }
2019-09-30 11:09:43 -04:00
} else if ( !strcmp (name, NM_SETTING_BOND_OPTION_ARP_INTERVAL)
&& strcmp (value, "0") != 0) {
g_hash_table_remove (priv->options, NM_SETTING_BOND_OPTION_MIIMON);
g_hash_table_remove (priv->options, NM_SETTING_BOND_OPTION_DOWNDELAY);
g_hash_table_remove (priv->options, NM_SETTING_BOND_OPTION_UPDELAY);
2020-06-22 21:56:30 +08:00
+ }else if( !strcmp (name, NM_SETTING_BOND_OPTION_PRIMARY) && !strcmp (value, "") ){
+ g_hash_table_remove (priv->options, NM_SETTING_BOND_OPTION_PRIMARY);
2019-09-30 11:09:43 -04:00
}
_notify (setting, PROP_OPTIONS);
2020-06-22 21:56:30 +08:00
diff -Nur NetworkManager-1.20.10.org/libnm-core/tests/test-setting.c NetworkManager-1.20.10/libnm-core/tests/test-setting.c
--- NetworkManager-1.20.10.org/libnm-core/tests/test-setting.c 2020-06-12 11:29:24.993178124 +0800
+++ NetworkManager-1.20.10/libnm-core/tests/test-setting.c 2020-06-12 14:08:36.560383748 +0800
@@ -688,7 +688,7 @@
2019-09-30 11:09:43 -04:00
((const char *[]){ "mode", "802.3ad", "ad_actor_system", "00:02:03:04:05:06", NULL }));
test_bond_normalize_options (
((const char *[]){ "mode", "1", "miimon", "1", NULL }),
- ((const char *[]){ "mode", "active-backup", "miimon", "1", NULL }));
+ ((const char *[]){ "mode", "active-backup", "miimon", "1", NM_SETTING_BOND_OPTION_DOWNDELAY, "0", NM_SETTING_BOND_OPTION_UPDELAY, "0", NULL }));
test_bond_normalize_options (
((const char *[]){ "mode", "balance-alb", "tlb_dynamic_lb", "1", NULL }),
((const char *[]){ "mode", "balance-alb", NULL }));