diff options
author | Jiří Klimeš <jklimes@redhat.com> | 2015-09-08 10:55:11 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2016-01-12 14:35:34 +0100 |
commit | 97dbb4e9c8b5708d54755e012d26ac78dd7a0f57 (patch) | |
tree | 1c131e15c4e3f0ac4dc5c4bfb9b8ab16f9c9c490 | |
parent | d466d6e331588a02a217e12aebd5db37aa75cccf (diff) | |
download | NetworkManager-97dbb4e9c8b5708d54755e012d26ac78dd7a0f57.tar.gz |
ifcfg-rh: read/write ipv4.dad-timeout using ARPING_WAIT
ARPING_WAIT is used for DAD by Red Hat initscrips (ifup-eth).
-rw-r--r-- | libnm-core/nm-setting-ip4-config.c | 10 | ||||
-rw-r--r-- | src/settings/plugins/ifcfg-rh/reader.c | 6 | ||||
-rw-r--r-- | src/settings/plugins/ifcfg-rh/writer.c | 16 |
3 files changed, 29 insertions, 3 deletions
diff --git a/libnm-core/nm-setting-ip4-config.c b/libnm-core/nm-setting-ip4-config.c index 7708b6c598..35dbba4939 100644 --- a/libnm-core/nm-setting-ip4-config.c +++ b/libnm-core/nm-setting-ip4-config.c @@ -682,6 +682,16 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *ip4_class) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /* ---ifcfg-rh--- + * property: dad-timeout + * variable: ARPING_WAIT + * default: missing variable means global default (config override or 3) + * description: Timeout (in seconds) for performing DAD before configuring + * IPv4 addresses. 0 turns off the DAD completely, -1 means default value. + * example: ARPING_WAIT=2 + * ---end--- + */ + /** * NMSettingIP4Config:dhcp-timeout: * diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c index bcb726aa74..6f20dc1111 100644 --- a/src/settings/plugins/ifcfg-rh/reader.c +++ b/src/settings/plugins/ifcfg-rh/reader.c @@ -924,6 +924,7 @@ make_ip4_setting (shvarFile *ifcfg, shvarFile *network_ifcfg; shvarFile *route_ifcfg; gboolean never_default = FALSE; + gint64 timeout; s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new (); @@ -1199,6 +1200,11 @@ make_ip4_setting (shvarFile *ifcfg, } } + timeout = svGetValueInt64 (ifcfg, "ARPING_WAIT", 10, -1, + NM_SETTING_IP_CONFIG_DAD_TIMEOUT_MAX / 1000, -1); + g_object_set (s_ip4, NM_SETTING_IP_CONFIG_DAD_TIMEOUT, + (gint) (timeout <= 0 ? timeout : timeout * 1000), NULL); + return NM_SETTING (s_ip4); done: diff --git a/src/settings/plugins/ifcfg-rh/writer.c b/src/settings/plugins/ifcfg-rh/writer.c index 5770d66826..ec174a5987 100644 --- a/src/settings/plugins/ifcfg-rh/writer.c +++ b/src/settings/plugins/ifcfg-rh/writer.c @@ -1947,7 +1947,7 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) gint32 j; guint32 i, n, num; gint64 route_metric; - int dhcp_timeout; + int timeout; GString *searches; gboolean success = FALSE; gboolean fake_ip4 = FALSE; @@ -2156,8 +2156,8 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) if (value) svSetValue (ifcfg, "DHCP_CLIENT_ID", value, FALSE); - dhcp_timeout = nm_setting_ip4_config_get_dhcp_timeout (NM_SETTING_IP4_CONFIG (s_ip4)); - tmp = dhcp_timeout ? g_strdup_printf ("%d", dhcp_timeout) : NULL; + timeout = nm_setting_ip4_config_get_dhcp_timeout (NM_SETTING_IP4_CONFIG (s_ip4)); + tmp = timeout ? g_strdup_printf ("%d", timeout) : NULL; svSetValue (ifcfg, "IPV4_DHCP_TIMEOUT", tmp, FALSE); g_free (tmp); } @@ -2248,6 +2248,16 @@ write_ip4_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) goto out; } + timeout = nm_setting_ip_config_get_dad_timeout (s_ip4); + if (timeout < 0) + svSetValue (ifcfg, "ARPING_WAIT", NULL, FALSE); + else if (timeout == 0) + svSetValue (ifcfg, "ARPING_WAIT", "0", FALSE); + else { + /* Round the value up to next integer */ + svSetValueInt64 (ifcfg, "ARPING_WAIT", (timeout - 1) / 1000 + 1); + } + success = TRUE; out: |