summary refs log tree commit diff
path: root/src/nm-device.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nm-device.c')
-rw-r--r--src/nm-device.c50
1 files changed, 32 insertions, 18 deletions
diff --git a/src/nm-device.c b/src/nm-device.c
index 9432204d..cfd3ba56 100644
--- a/src/nm-device.c
+++ b/src/nm-device.c
@@ -365,6 +365,7 @@ device_get_driver_info (const char *iface, char **driver_version, char **firmwar
 	}
 
 	/* Get driver and firmware version info */
+	memset (&drvinfo, 0, sizeof (drvinfo));
 	memset (&req, 0, sizeof (struct ifreq));
 	strncpy (req.ifr_name, iface, IFNAMSIZ);
 	drvinfo.cmd = ETHTOOL_GDRVINFO;
@@ -3023,19 +3024,6 @@ clear_act_request (NMDevice *self)
 }
 
 static void
-queued_state_clear (NMDevice *self)
-{
-	NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
-
-	if (priv->queued_state.id) {
-		nm_log_dbg (LOGD_DEVICE, "(%s): clearing queued state transition (id %d)",
-		            nm_device_get_iface (self), priv->queued_state.id);
-		g_source_remove (priv->queued_state.id);
-	}
-	memset (&priv->queued_state, 0, sizeof (priv->queued_state));
-}
-
-static void
 dhcp4_cleanup (NMDevice *self, gboolean stop, gboolean release)
 {
 	NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
@@ -3203,7 +3191,7 @@ nm_device_deactivate (NMDevice *self, NMDeviceStateReason reason)
 	}
 
 	/* Clear any queued transitions */
-	queued_state_clear (self);
+	nm_device_queued_state_clear (self);
 
 	priv->ip4_state = priv->ip6_state = IP_NONE;
 
@@ -3771,7 +3759,7 @@ dispose (GObject *object)
 	}
 
 	/* Clear any queued transitions */
-	queued_state_clear (self);
+	nm_device_queued_state_clear (self);
 
 	/* Clean up and stop DHCP */
 	dhcp4_cleanup (self, take_down, FALSE);
@@ -4481,7 +4469,7 @@ nm_device_state_changed (NMDevice *device,
 	             reason);
 
 	/* Clear any queued transitions */
-	queued_state_clear (device);
+	nm_device_queued_state_clear (device);
 
 	/* Cache the activation request for the dispatcher */
 	req = priv->act_request ? g_object_ref (priv->act_request) : NULL;
@@ -4593,7 +4581,7 @@ queued_set_state (gpointer user_data)
 		priv->queued_state.id = 0;
 		nm_device_state_changed (self, priv->queued_state.state, priv->queued_state.reason);
 	}
-	queued_state_clear (self);
+	nm_device_queued_state_clear (self);
 	return FALSE;
 }
 
@@ -4612,7 +4600,7 @@ nm_device_queue_state (NMDevice *self,
 	/* We should only ever have one delayed state transition at a time */
 	if (priv->queued_state.id) {
 		g_warn_if_fail (priv->queued_state.id == 0);
-		queued_state_clear (self);
+		nm_device_queued_state_clear (self);
 	}
 
 	priv->queued_state.state = state;
@@ -4625,6 +4613,32 @@ nm_device_queue_state (NMDevice *self,
 }
 
 NMDeviceState
+nm_device_queued_state_peek (NMDevice *self)
+{
+	NMDevicePrivate *priv;
+
+	g_return_val_if_fail (self != NULL, NM_DEVICE_STATE_UNKNOWN);
+	g_return_val_if_fail (NM_IS_DEVICE (self), NM_DEVICE_STATE_UNKNOWN);
+
+	priv = NM_DEVICE_GET_PRIVATE (self);
+
+	return priv->queued_state.id ? priv->queued_state.state : NM_DEVICE_STATE_UNKNOWN;
+}
+
+void
+nm_device_queued_state_clear (NMDevice *self)
+{
+	NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
+
+	if (priv->queued_state.id) {
+		nm_log_dbg (LOGD_DEVICE, "(%s): clearing queued state transition (id %d)",
+		            nm_device_get_iface (self), priv->queued_state.id);
+		g_source_remove (priv->queued_state.id);
+	}
+	memset (&priv->queued_state, 0, sizeof (priv->queued_state));
+}
+
+NMDeviceState
 nm_device_get_state (NMDevice *device)
 {
 	g_return_val_if_fail (NM_IS_DEVICE (device), NM_DEVICE_STATE_UNKNOWN);