device: add get_autoconnect_allowed() virtual function

It allows derived classes to override the autoconnect-allowed
state.

We already have

- NM_DEVICE_AUTOCONNECT property, which is two parts:
  - NMDevicePrivate::autoconnect_user, which is settable via
    D-Bus by the use, to allow the device to autoconnect.
  - NMDevicePrivate::autoconnect_intern, which is set by
    internal decision.
- NM_DEVICE_AUTOCONNECT_ALLOWED signal, where other devices can
  subscribe to block autoconnect. Currently that is only used
  by NMDeviceOlpcMesh.

These two make up for nm_device_autoconnect_allowed().

Add another way to allow derived classes to disable autoconnect
temporarily. This could also be achieved by having the device
subscribe to NM_DEVICE_AUTOCONNECT_ALLOWED of self, or by adding
a signal slot. But a plain function pointer seems easier.
This commit is contained in:
Thomas Haller
2017-02-14 12:45:38 +01:00
parent 2f9166e6b9
commit 6eaded9071
2 changed files with 15 additions and 1 deletions

View File

@@ -3444,6 +3444,12 @@ nm_device_set_autoconnect_both (NMDevice *self, gboolean autoconnect)
nm_device_set_autoconnect_full (self, autoconnect, autoconnect);
}
static gboolean
get_autoconnect_allowed (NMDevice *self)
{
return TRUE;
}
static gboolean
autoconnect_allowed_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
@@ -3466,10 +3472,12 @@ gboolean
nm_device_autoconnect_allowed (NMDevice *self)
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
NMDeviceClass *klass = NM_DEVICE_GET_CLASS (self);
GValue instance = G_VALUE_INIT;
GValue retval = G_VALUE_INIT;
if (!nm_device_get_autoconnect (self))
if ( !nm_device_get_autoconnect (self)
|| !klass->get_autoconnect_allowed (self))
return FALSE;
/* Unrealized devices can always autoconnect. */
@@ -13499,6 +13507,7 @@ nm_device_class_init (NMDeviceClass *klass)
klass->have_any_ready_slaves = have_any_ready_slaves;
klass->get_type_description = get_type_description;
klass->get_autoconnect_allowed = get_autoconnect_allowed;
klass->can_auto_connect = can_auto_connect;
klass->check_connection_compatible = check_connection_compatible;
klass->check_connection_available = check_connection_available;

View File

@@ -243,6 +243,11 @@ typedef struct {
void (* set_enabled) (NMDevice *self, gboolean enabled);
/* allow derived classes to override the result of nm_device_autoconnect_allowed().
* If the value changes, the class should call nm_device_emit_recheck_auto_activate(),
* which emits NM_DEVICE_RECHECK_AUTO_ACTIVATE signal. */
gboolean (* get_autoconnect_allowed) (NMDevice *self);
gboolean (* can_auto_connect) (NMDevice *self,
NMConnection *connection,
char **specific_object);