mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-20 03:30:09 +01:00
connectivity: add per-device check-connectivity setting
Adds a new `check-connectivity` setting to the `device` section which can be used to disable the connectivity check for a particular device.
This commit is contained in:
parent
8a9b17071b
commit
a9f2c15663
5 changed files with 50 additions and 3 deletions
2
NEWS
2
NEWS
|
|
@ -12,6 +12,8 @@ USE AT YOUR OWN RISK. NOT RECOMMENDED FOR PRODUCTION USE!
|
||||||
same link. If the link has no DNS servers, the connectivity check will
|
same link. If the link has no DNS servers, the connectivity check will
|
||||||
use any servers available in the system.
|
use any servers available in the system.
|
||||||
* Install the systemd units in the initramfs using a systemd generator.
|
* Install the systemd units in the initramfs using a systemd generator.
|
||||||
|
* A new "check-connectivity" configuration option is available to disable the
|
||||||
|
connectivity check for selected interfaces.
|
||||||
|
|
||||||
=============================================
|
=============================================
|
||||||
NetworkManager-1.56
|
NetworkManager-1.56
|
||||||
|
|
|
||||||
|
|
@ -1329,6 +1329,20 @@ managed=1
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry id="check-connectivity">
|
||||||
|
<term><varname>check-connectivity</varname></term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
A boolean value specifying whether NetworkManager will perform a connectivity check
|
||||||
|
for this device. Defaults to <literal>yes</literal>.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
This setting does nothing if the connectivity check has been
|
||||||
|
disabled globally using the
|
||||||
|
<literal>connectivity.enabled</literal> setting.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry id="keep-configuration">
|
<varlistentry id="keep-configuration">
|
||||||
<term><varname>keep-configuration</varname></term>
|
<term><varname>keep-configuration</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
|
|
||||||
|
|
@ -6331,6 +6331,14 @@ concheck_is_possible(NMDevice *self)
|
||||||
if (priv->state == NM_DEVICE_STATE_UNKNOWN)
|
if (priv->state == NM_DEVICE_STATE_UNKNOWN)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
if (!nm_config_data_get_device_config_boolean_by_device(
|
||||||
|
NM_CONFIG_GET_DATA,
|
||||||
|
NM_CONFIG_KEYFILE_KEY_DEVICE_CHECK_CONNECTIVITY,
|
||||||
|
self,
|
||||||
|
TRUE,
|
||||||
|
TRUE))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -6351,8 +6359,10 @@ concheck_periodic_schedule_do(NMDevice *self, int addr_family, gint64 now_ns)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!concheck_is_possible(self))
|
if (!concheck_is_possible(self)) {
|
||||||
|
concheck_update_state(self, addr_family, NM_CONNECTIVITY_UNKNOWN, FALSE);
|
||||||
goto out;
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
nm_assert(now_ns > 0);
|
nm_assert(now_ns > 0);
|
||||||
nm_assert(priv->concheck_x[IS_IPv4].p_cur_interval > 0);
|
nm_assert(priv->concheck_x[IS_IPv4].p_cur_interval > 0);
|
||||||
|
|
@ -6575,7 +6585,11 @@ concheck_update_interval(NMDevice *self, int addr_family, gboolean check_now)
|
||||||
concheck_periodic_schedule_do(self, addr_family, 0);
|
concheck_periodic_schedule_do(self, addr_family, 0);
|
||||||
|
|
||||||
/* also update the fake connectivity state. */
|
/* also update the fake connectivity state. */
|
||||||
|
if (concheck_is_possible(self))
|
||||||
concheck_update_state(self, addr_family, NM_CONNECTIVITY_FAKE, TRUE);
|
concheck_update_state(self, addr_family, NM_CONNECTIVITY_FAKE, TRUE);
|
||||||
|
else
|
||||||
|
concheck_update_state(self, addr_family, NM_CONNECTIVITY_UNKNOWN, FALSE);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -6604,6 +6618,7 @@ concheck_update_state(NMDevice *self,
|
||||||
/* @state is a result of the connectivity check. We only expect a precise
|
/* @state is a result of the connectivity check. We only expect a precise
|
||||||
* number of possible values. */
|
* number of possible values. */
|
||||||
nm_assert(NM_IN_SET(state,
|
nm_assert(NM_IN_SET(state,
|
||||||
|
NM_CONNECTIVITY_UNKNOWN,
|
||||||
NM_CONNECTIVITY_LIMITED,
|
NM_CONNECTIVITY_LIMITED,
|
||||||
NM_CONNECTIVITY_PORTAL,
|
NM_CONNECTIVITY_PORTAL,
|
||||||
NM_CONNECTIVITY_FULL,
|
NM_CONNECTIVITY_FULL,
|
||||||
|
|
@ -6927,8 +6942,11 @@ nm_device_check_connectivity(NMDevice *self,
|
||||||
NMDeviceConnectivityCallback callback,
|
NMDeviceConnectivityCallback callback,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
if (!concheck_is_possible(self))
|
if (!concheck_is_possible(self)) {
|
||||||
|
concheck_update_state(self, AF_INET, NM_CONNECTIVITY_UNKNOWN, FALSE);
|
||||||
|
concheck_update_state(self, AF_INET6, NM_CONNECTIVITY_UNKNOWN, FALSE);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
concheck_periodic_schedule_set(self, addr_family, CONCHECK_SCHEDULE_CHECK_EXTERNAL);
|
concheck_periodic_schedule_set(self, addr_family, CONCHECK_SCHEDULE_CHECK_EXTERNAL);
|
||||||
return concheck_start(self, addr_family, callback, user_data, FALSE);
|
return concheck_start(self, addr_family, callback, user_data, FALSE);
|
||||||
|
|
@ -8316,6 +8334,17 @@ config_changed(NMConfig *config,
|
||||||
&& !nm_device_get_applied_setting(self, NM_TYPE_SETTING_SRIOV))
|
&& !nm_device_get_applied_setting(self, NM_TYPE_SETTING_SRIOV))
|
||||||
device_init_static_sriov_num_vfs(self);
|
device_init_static_sriov_num_vfs(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (NM_FLAGS_HAS(changes, NM_CONFIG_CHANGE_VALUES) && concheck_is_possible(self)) {
|
||||||
|
/* restart (periodic) connectivity checks if they were previously disabled */
|
||||||
|
if (!nm_config_data_get_device_config_boolean_by_device(
|
||||||
|
old_data,
|
||||||
|
NM_CONFIG_KEYFILE_KEY_DEVICE_CHECK_CONNECTIVITY,
|
||||||
|
self,
|
||||||
|
TRUE,
|
||||||
|
TRUE))
|
||||||
|
nm_device_check_connectivity_update_interval(self);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
||||||
|
|
@ -892,6 +892,7 @@ static const ConfigGroup config_groups[] = {
|
||||||
.is_prefix = TRUE,
|
.is_prefix = TRUE,
|
||||||
.keys = NM_MAKE_STRV(NM_CONFIG_KEYFILE_KEY_DEVICE_CARRIER_WAIT_TIMEOUT,
|
.keys = NM_MAKE_STRV(NM_CONFIG_KEYFILE_KEY_DEVICE_CARRIER_WAIT_TIMEOUT,
|
||||||
NM_CONFIG_KEYFILE_KEY_DEVICE_IGNORE_CARRIER,
|
NM_CONFIG_KEYFILE_KEY_DEVICE_IGNORE_CARRIER,
|
||||||
|
NM_CONFIG_KEYFILE_KEY_DEVICE_CHECK_CONNECTIVITY,
|
||||||
NM_CONFIG_KEYFILE_KEY_DEVICE_MANAGED,
|
NM_CONFIG_KEYFILE_KEY_DEVICE_MANAGED,
|
||||||
NM_CONFIG_KEYFILE_KEY_DEVICE_SRIOV_NUM_VFS,
|
NM_CONFIG_KEYFILE_KEY_DEVICE_SRIOV_NUM_VFS,
|
||||||
NM_CONFIG_KEYFILE_KEY_DEVICE_KEEP_CONFIGURATION,
|
NM_CONFIG_KEYFILE_KEY_DEVICE_KEEP_CONFIGURATION,
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,7 @@
|
||||||
|
|
||||||
#define NM_CONFIG_KEYFILE_KEY_DEVICE_MANAGED "managed"
|
#define NM_CONFIG_KEYFILE_KEY_DEVICE_MANAGED "managed"
|
||||||
#define NM_CONFIG_KEYFILE_KEY_DEVICE_IGNORE_CARRIER "ignore-carrier"
|
#define NM_CONFIG_KEYFILE_KEY_DEVICE_IGNORE_CARRIER "ignore-carrier"
|
||||||
|
#define NM_CONFIG_KEYFILE_KEY_DEVICE_CHECK_CONNECTIVITY "check-connectivity"
|
||||||
#define NM_CONFIG_KEYFILE_KEY_DEVICE_SRIOV_NUM_VFS "sriov-num-vfs"
|
#define NM_CONFIG_KEYFILE_KEY_DEVICE_SRIOV_NUM_VFS "sriov-num-vfs"
|
||||||
#define NM_CONFIG_KEYFILE_KEY_DEVICE_KEEP_CONFIGURATION "keep-configuration"
|
#define NM_CONFIG_KEYFILE_KEY_DEVICE_KEEP_CONFIGURATION "keep-configuration"
|
||||||
#define NM_CONFIG_KEYFILE_KEY_DEVICE_ALLOWED_CONNECTIONS "allowed-connections"
|
#define NM_CONFIG_KEYFILE_KEY_DEVICE_ALLOWED_CONNECTIONS "allowed-connections"
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue