diff options
| author | Thomas Haller <thaller@redhat.com> | 2017-11-21 15:48:57 +0100 |
|---|---|---|
| committer | Thomas Haller <thaller@redhat.com> | 2017-11-28 10:33:26 +0100 |
| commit | b595a80977193c7dd2a79ab5bd3caaa28bb88252 (patch) | |
| tree | 67c92fcfe618eecfff8b42dee4b1bba86f110327 | |
| parent | 021d797089df3617aa3862bb2c9ff8975b1b02b1 (diff) | |
| download | NetworkManager-b595a80977193c7dd2a79ab5bd3caaa28bb88252.tar.gz | |
device: make carrier-wait-timeout configurable per device
As this depends on the particular host configuration, it's hard to find
a default that suits everybody. At least make it configurable per-device.
https://bugzilla.redhat.com/show_bug.cgi?id=1483343
https://bugzilla.redhat.com/show_bug.cgi?id=1515027
| -rw-r--r-- | man/NetworkManager.conf.xml | 18 | ||||
| -rw-r--r-- | src/devices/nm-device.c | 16 | ||||
| -rw-r--r-- | src/nm-config.h | 1 |
3 files changed, 33 insertions, 2 deletions
diff --git a/man/NetworkManager.conf.xml b/man/NetworkManager.conf.xml index f0c3c5c85b..446540aa1b 100644 --- a/man/NetworkManager.conf.xml +++ b/man/NetworkManager.conf.xml @@ -856,6 +856,24 @@ managed=1 </para> </listitem> </varlistentry> + <varlistentry id="carrier-wait-timeout"> + <term><varname>carrier-wait-timeout</varname></term> + <listitem> + <para> + Specify the timeout for waiting for carrier in milliseconds. + When the device loses carrier, NetworkManager does not react + immediately. Instead, it waits for this timeout before considering + the link lost. Also, on startup, NetworkManager considers the + device as busy for this time, as long as the device has no carrier. + This delays startup-complete signal and NetworkManager-wait-online. + Configuring this too high means to block NetworkManager-wait-online + longer then necessary. Configuring it too low, means that NetworkManager + will declare startup-complete, although carrier is about to come + and auto-activation to kick in. + The default is 5000 milliseconds. + </para> + </listitem> + </varlistentry> <varlistentry id="ignore-carrier"> <term><varname>ignore-carrier</varname></term> <listitem> diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index f1643ea772..012db82cf0 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -328,7 +328,7 @@ typedef struct _NMDevicePrivate { guint32 v4_route_table; guint32 v6_route_table; - /* when carrier goes away, we give a grace period of CARRIER_WAIT_TIME_MS + /* when carrier goes away, we give a grace period of _get_carrier_wait_ms() * until taking action. * * When changing MTU, the device might take longer then that. So, whenever @@ -10698,6 +10698,18 @@ nm_device_is_up (NMDevice *self) return ifindex > 0 ? nm_platform_link_is_up (nm_device_get_platform (self), ifindex) : TRUE; } +static gint64 +_get_carrier_wait_ms (NMDevice *self) +{ + gs_free char *value = NULL; + + value = nm_config_data_get_device_config (NM_CONFIG_GET_DATA, + NM_CONFIG_KEYFILE_KEY_DEVICE_CARRIER_WAIT_TIMEOUT, + self, + NULL); + return _nm_utils_ascii_str_to_int64 (value, 10, 0, G_MAXINT32, CARRIER_WAIT_TIME_MS); +} + gboolean nm_device_bring_up (NMDevice *self, gboolean block, gboolean *no_firmware) { @@ -10772,7 +10784,7 @@ nm_device_bring_up (NMDevice *self, gboolean block, gboolean *no_firmware) nm_device_add_pending_action (self, NM_PENDING_ACTION_CARRIER_WAIT, FALSE); now_ms = nm_utils_get_monotonic_timestamp_ms (); - until_ms = NM_MAX (now_ms + CARRIER_WAIT_TIME_MS, priv->carrier_wait_until_ms); + until_ms = NM_MAX (now_ms + _get_carrier_wait_ms (self), priv->carrier_wait_until_ms); priv->carrier_wait_id = g_timeout_add (until_ms - now_ms, carrier_wait_timeout, self); } diff --git a/src/nm-config.h b/src/nm-config.h index 17912185f7..8bdd5002d2 100644 --- a/src/nm-config.h +++ b/src/nm-config.h @@ -79,6 +79,7 @@ #define NM_CONFIG_KEYFILE_KEY_DEVICE_MANAGED "managed" #define NM_CONFIG_KEYFILE_KEY_DEVICE_IGNORE_CARRIER "ignore-carrier" #define NM_CONFIG_KEYFILE_KEY_DEVICE_SRIOV_NUM_VFS "sriov-num-vfs" +#define NM_CONFIG_KEYFILE_KEY_DEVICE_CARRIER_WAIT_TIMEOUT "carrier-wait-timeout" #define NM_CONFIG_KEYFILE_KEYPREFIX_WAS ".was." #define NM_CONFIG_KEYFILE_KEYPREFIX_SET ".set." |
