Beniamino Galvani 2023-10-27 18:05:13 +02:00
commit b0d606b427
4 changed files with 16 additions and 6 deletions

View file

@ -259,7 +259,8 @@ static void
device_state_changed(NMActiveConnection *active,
NMDevice *device,
NMDeviceState new_state,
NMDeviceState old_state)
NMDeviceState old_state,
NMDeviceStateReason reason)
{
NMActiveConnectionState cur_ac_state = nm_active_connection_get_state(active);
NMActiveConnectionState ac_state = NM_ACTIVE_CONNECTION_STATE_UNKNOWN;
@ -319,14 +320,20 @@ device_state_changed(NMActiveConnection *active,
active);
break;
case NM_DEVICE_STATE_DEACTIVATING:
if (reason == NM_DEVICE_STATE_REASON_USER_REQUESTED)
ac_state_reason = NM_ACTIVE_CONNECTION_STATE_REASON_USER_DISCONNECTED;
ac_state = NM_ACTIVE_CONNECTION_STATE_DEACTIVATING;
break;
case NM_DEVICE_STATE_FAILED:
case NM_DEVICE_STATE_DISCONNECTED:
case NM_DEVICE_STATE_UNMANAGED:
case NM_DEVICE_STATE_UNAVAILABLE:
ac_state = NM_ACTIVE_CONNECTION_STATE_DEACTIVATED;
ac_state_reason = NM_ACTIVE_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED;
ac_state = NM_ACTIVE_CONNECTION_STATE_DEACTIVATED;
if (reason == NM_DEVICE_STATE_REASON_USER_REQUESTED)
ac_state_reason = NM_ACTIVE_CONNECTION_STATE_REASON_USER_DISCONNECTED;
else
ac_state_reason = NM_ACTIVE_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED;
g_signal_handlers_disconnect_by_func(device, G_CALLBACK(device_notify), active);
break;

View file

@ -636,7 +636,8 @@ device_state_changed(NMDevice *device,
NM_ACTIVE_CONNECTION_GET_CLASS(self)->device_state_changed(self,
device,
new_state,
old_state);
old_state,
reason);
}
static void

View file

@ -78,7 +78,8 @@ typedef struct {
void (*device_state_changed)(NMActiveConnection *connection,
NMDevice *device,
NMDeviceState new_state,
NMDeviceState old_state);
NMDeviceState old_state,
NMDeviceStateReason reason);
void (*master_failed)(NMActiveConnection *connection);
void (*device_changed)(NMActiveConnection *connection,

View file

@ -1143,7 +1143,8 @@ static void
device_state_changed(NMActiveConnection *active,
NMDevice *device,
NMDeviceState new_state,
NMDeviceState old_state)
NMDeviceState old_state,
NMDeviceStateReason reason)
{
if (_service_and_connection_can_persist(NM_VPN_CONNECTION(active))) {
if (new_state <= NM_DEVICE_STATE_DISCONNECTED || new_state == NM_DEVICE_STATE_FAILED) {