device: merge branch 'th/master-no-ignore-carrier-pr18'
https://github.com/NetworkManager/NetworkManager/pull/18
This commit is contained in:
@@ -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.
|
||||
|
@@ -57,24 +57,6 @@ get_generic_capabilities (NMDevice *dev)
|
||||
return NM_DEVICE_CAP_CARRIER_DETECT | NM_DEVICE_CAP_IS_SOFTWARE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_available (NMDevice *dev, NMDeviceCheckDevAvailableFlags flags)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
check_connection_available (NMDevice *device,
|
||||
NMConnection *connection,
|
||||
NMDeviceCheckConAvailableFlags flags,
|
||||
const char *specific_object)
|
||||
{
|
||||
/* Connections are always available because the carrier state is determined
|
||||
* by the slave carrier states, not the bonds's state.
|
||||
*/
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
check_connection_compatible (NMDevice *device, NMConnection *connection)
|
||||
{
|
||||
@@ -631,9 +613,7 @@ nm_device_bond_class_init (NMDeviceBondClass *klass)
|
||||
|
||||
parent_class->is_master = TRUE;
|
||||
parent_class->get_generic_capabilities = get_generic_capabilities;
|
||||
parent_class->is_available = is_available;
|
||||
parent_class->check_connection_compatible = check_connection_compatible;
|
||||
parent_class->check_connection_available = check_connection_available;
|
||||
parent_class->complete_connection = complete_connection;
|
||||
|
||||
parent_class->update_connection = update_connection;
|
||||
|
@@ -59,12 +59,6 @@ get_generic_capabilities (NMDevice *dev)
|
||||
return NM_DEVICE_CAP_CARRIER_DETECT | NM_DEVICE_CAP_IS_SOFTWARE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_available (NMDevice *dev, NMDeviceCheckDevAvailableFlags flags)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
check_connection_available (NMDevice *device,
|
||||
NMConnection *connection,
|
||||
@@ -73,6 +67,9 @@ check_connection_available (NMDevice *device,
|
||||
{
|
||||
NMSettingBluetooth *s_bt;
|
||||
|
||||
if (!NM_DEVICE_CLASS (nm_device_bridge_parent_class)->check_connection_available (device, connection, flags, specific_object))
|
||||
return FALSE;
|
||||
|
||||
s_bt = _nm_connection_get_setting_bluetooth_for_nap (connection);
|
||||
if (s_bt) {
|
||||
return nm_bt_vtable_network_server
|
||||
@@ -80,9 +77,6 @@ check_connection_available (NMDevice *device,
|
||||
nm_setting_bluetooth_get_bdaddr (s_bt));
|
||||
}
|
||||
|
||||
/* Connections are always available because the carrier state is determined
|
||||
* by the bridge port carrier states, not the bridge's state.
|
||||
*/
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -490,7 +484,6 @@ nm_device_bridge_class_init (NMDeviceBridgeClass *klass)
|
||||
|
||||
parent_class->is_master = TRUE;
|
||||
parent_class->get_generic_capabilities = get_generic_capabilities;
|
||||
parent_class->is_available = is_available;
|
||||
parent_class->check_connection_compatible = check_connection_compatible;
|
||||
parent_class->check_connection_available = check_connection_available;
|
||||
parent_class->complete_connection = complete_connection;
|
||||
|
@@ -2246,19 +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;
|
||||
|
||||
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
|
||||
@@ -3790,12 +3791,17 @@ is_available (NMDevice *self, NMDeviceCheckDevAvailableFlags flags)
|
||||
{
|
||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
|
||||
if (priv->carrier || priv->ignore_carrier)
|
||||
if ( priv->carrier
|
||||
|| priv->ignore_carrier)
|
||||
return TRUE;
|
||||
|
||||
if (NM_FLAGS_HAS (flags, _NM_DEVICE_CHECK_DEV_AVAILABLE_IGNORE_CARRIER))
|
||||
return TRUE;
|
||||
|
||||
/* master types are always available even without carrier. */
|
||||
if (nm_device_is_master (self))
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -3829,6 +3835,13 @@ nm_device_is_available (NMDevice *self, NMDeviceCheckDevAvailableFlags flags)
|
||||
return NM_DEVICE_GET_CLASS (self)->is_available (self, flags);
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_device_ignore_carrier_by_default (NMDevice *self)
|
||||
{
|
||||
/* master types ignore-carrier by default. */
|
||||
return nm_device_is_master (self);
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_device_get_enabled (NMDevice *self)
|
||||
{
|
||||
@@ -11673,6 +11686,12 @@ check_connection_available (NMDevice *self,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* master types are always available even without carrier.
|
||||
* Making connection non-available would un-enslave slaves which
|
||||
* is not desired. */
|
||||
if (nm_device_is_master (self))
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@@ -493,6 +493,8 @@ NMSetting * nm_device_get_applied_setting (NMDevice *dev, GType setting_ty
|
||||
|
||||
void nm_device_removed (NMDevice *self, gboolean unconfigure_ip_config);
|
||||
|
||||
gboolean nm_device_ignore_carrier_by_default (NMDevice *self);
|
||||
|
||||
gboolean nm_device_is_available (NMDevice *dev, NMDeviceCheckDevAvailableFlags flags);
|
||||
gboolean nm_device_has_carrier (NMDevice *dev);
|
||||
|
||||
|
@@ -83,24 +83,6 @@ get_generic_capabilities (NMDevice *device)
|
||||
return NM_DEVICE_CAP_CARRIER_DETECT | NM_DEVICE_CAP_IS_SOFTWARE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_available (NMDevice *device, NMDeviceCheckDevAvailableFlags flags)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
check_connection_available (NMDevice *device,
|
||||
NMConnection *connection,
|
||||
NMDeviceCheckConAvailableFlags flags,
|
||||
const char *specific_object)
|
||||
{
|
||||
/* Connections are always available because the carrier state is determined
|
||||
* by the team port carrier states, not the team's state.
|
||||
*/
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
check_connection_compatible (NMDevice *device, NMConnection *connection)
|
||||
{
|
||||
@@ -890,9 +872,7 @@ nm_device_team_class_init (NMDeviceTeamClass *klass)
|
||||
parent_class->is_master = TRUE;
|
||||
parent_class->create_and_realize = create_and_realize;
|
||||
parent_class->get_generic_capabilities = get_generic_capabilities;
|
||||
parent_class->is_available = is_available;
|
||||
parent_class->check_connection_compatible = check_connection_compatible;
|
||||
parent_class->check_connection_available = check_connection_available;
|
||||
parent_class->complete_connection = complete_connection;
|
||||
parent_class->update_connection = update_connection;
|
||||
parent_class->master_update_slave_connection = master_update_slave_connection;
|
||||
|
@@ -304,15 +304,22 @@ nm_config_data_get_ignore_carrier (const NMConfigData *self, NMDevice *device)
|
||||
{
|
||||
gs_free char *value = NULL;
|
||||
gboolean has_match;
|
||||
int m;
|
||||
|
||||
g_return_val_if_fail (NM_IS_CONFIG_DATA (self), FALSE);
|
||||
g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
|
||||
|
||||
value = nm_config_data_get_device_config (self, NM_CONFIG_KEYFILE_KEY_DEVICE_IGNORE_CARRIER, device, &has_match);
|
||||
if (has_match)
|
||||
return nm_config_parse_boolean (value, FALSE);
|
||||
m = nm_config_parse_boolean (value, -1);
|
||||
else
|
||||
m = nm_device_spec_match_list_full (device, NM_CONFIG_DATA_GET_PRIVATE (self)->ignore_carrier, -1);
|
||||
|
||||
return nm_device_spec_match_list (device, NM_CONFIG_DATA_GET_PRIVATE (self)->ignore_carrier);
|
||||
if (NM_IN_SET (m, TRUE, FALSE))
|
||||
return m;
|
||||
|
||||
/* if ignore-carrier is not explicitly configed, then it depends on the device (type). */
|
||||
return nm_device_ignore_carrier_by_default (device);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
Reference in New Issue
Block a user