mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-07-22 10:46:59 +00:00
device: handle carrier changes for master device differently
For master devices, instead of ignoring loss of carrier entirely, handle it. First of all, master devices are now by default ignore-carrier=yes. That means, without explict user configuration in NetworkManager.conf, the previous behavior in carrier_changed() does not change. If the user decides to configure the master device like [device-with-carrier] match-device=type:bond,type:bridge,type:team ignore-carrier=no then, master device will disconnect on carrier loss like regular devices. https://github.com/NetworkManager/NetworkManager/pull/18 Co-authored-by: Thomas Haller <thaller@redhat.com>
This commit is contained in:
parent
b0f6baad90
commit
8c91422954
|
@ -233,7 +233,10 @@ no-auto-default=*
|
|||
if specified (See <xref linkend="ignore-carrier"/>).
|
||||
Otherwise, it is a list of matches to specify for which device
|
||||
carrier should be ignored. See <xref linkend="device-spec"/> for the
|
||||
syntax how to specify a device.
|
||||
syntax how to specify a device. Note that master types like
|
||||
bond, bridge, and team ignore carrier by default. You can however
|
||||
revert that default using the "except:" specifier (or better,
|
||||
use the per-device setting instead of the deprecated setting).
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
@ -839,6 +842,10 @@ unmanaged=1
|
|||
interfaces will still reflect the actual device state; it's just
|
||||
that NetworkManager will not make use of that information.
|
||||
</para>
|
||||
<para>
|
||||
Master types like bond, bridge and team ignore carrier by default,
|
||||
while other device types react on carrier changes by default.
|
||||
</para>
|
||||
<para>
|
||||
This setting overwrites the deprecated <literal>main.ignore-carrier</literal>
|
||||
setting above.
|
||||
|
|
|
@ -2246,25 +2246,20 @@ carrier_changed (NMDevice *self, gboolean carrier)
|
|||
return;
|
||||
|
||||
if (nm_device_is_master (self)) {
|
||||
/* Bridge/bond/team carrier does not affect its own activation,
|
||||
* but when carrier comes on, if there are slaves waiting,
|
||||
* it will restart them.
|
||||
*/
|
||||
if (!carrier)
|
||||
if (carrier) {
|
||||
/* Force master to retry getting ip addresses when carrier
|
||||
* is restored. */
|
||||
if (priv->state == NM_DEVICE_STATE_ACTIVATED)
|
||||
nm_device_update_dynamic_ip_setup (self);
|
||||
else {
|
||||
if (nm_device_activate_ip4_state_in_wait (self))
|
||||
nm_device_activate_stage3_ip4_start (self);
|
||||
if (nm_device_activate_ip6_state_in_wait (self))
|
||||
nm_device_activate_stage3_ip6_start (self);
|
||||
}
|
||||
return;
|
||||
|
||||
/* Force master to retry getting ip addresses when carrier
|
||||
* is restored. */
|
||||
if (priv->state == NM_DEVICE_STATE_ACTIVATED)
|
||||
nm_device_update_dynamic_ip_setup (self);
|
||||
else {
|
||||
if (nm_device_activate_ip4_state_in_wait (self))
|
||||
nm_device_activate_stage3_ip4_start (self);
|
||||
if (nm_device_activate_ip6_state_in_wait (self))
|
||||
nm_device_activate_stage3_ip6_start (self);
|
||||
}
|
||||
|
||||
return;
|
||||
/* fall-through and change state of device */
|
||||
} else if (priv->is_enslaved && !carrier) {
|
||||
/* Slaves don't deactivate when they lose carrier; for
|
||||
* bonds/teams in particular that would be actively
|
||||
|
@ -3843,9 +3838,8 @@ nm_device_is_available (NMDevice *self, NMDeviceCheckDevAvailableFlags flags)
|
|||
gboolean
|
||||
nm_device_ignore_carrier_by_default (NMDevice *self)
|
||||
{
|
||||
g_return_val_if_fail (NM_IS_DEVICE (self), FALSE);
|
||||
|
||||
return FALSE;
|
||||
/* master types ignore-carrier by default. */
|
||||
return nm_device_is_master (self);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
|
Loading…
Reference in a new issue