summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2016-01-13 11:46:20 +0100
committerBeniamino Galvani <bgalvani@redhat.com>2016-01-13 13:37:37 +0100
commit6b87ba651aefc26863b8ec3d14ee7ed1bdd92a21 (patch)
tree13e3f8fbea5e41e3fef992e83af04e392ff2aa22
parent5ca527d7992a8c8feb99256c4ac497c699a0d79e (diff)
downloadNetworkManager-6b87ba651aefc26863b8ec3d14ee7ed1bdd92a21.tar.gz
fixup! device: detect duplicate IPv4 addresses when method=manual
-rw-r--r--src/devices/nm-device.c32
1 files changed, 9 insertions, 23 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index 46a27ec7e6..347445ea88 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -3659,7 +3659,7 @@ get_ipv4_dad_timeout (NMDevice *self)
}
static void
-arping_data_destroy (gpointer ptr)
+arping_data_destroy (gpointer ptr, GClosure *closure)
{
ArpingData *data = ptr;
int i;
@@ -3672,16 +3672,6 @@ arping_data_destroy (gpointer ptr)
}
}
-static gboolean
-ipv4_fail_config_in_idle (gpointer user_data)
-{
- nm_device_state_changed (NM_DEVICE (user_data), NM_DEVICE_STATE_FAILED,
- NM_DEVICE_STATE_REASON_CONFIG_FAILED);
- g_object_unref (user_data);
-
- return G_SOURCE_REMOVE;
-}
-
static void
ipv4_manual_method_apply (NMDevice *self, NMIP4Config **configs, gboolean success)
{
@@ -3690,18 +3680,15 @@ ipv4_manual_method_apply (NMDevice *self, NMIP4Config **configs, gboolean succes
if (success) {
empty = nm_ip4_config_new (nm_device_get_ip_ifindex (self));
nm_device_activate_schedule_ip4_config_result (self, empty);
+ g_object_unref (empty);
} else {
- /* This callback can run synchronously, called by ipv4_dad_start() and
- * act_stage3_ip4_config_start(); however the latter returns
- * NM_ACT_STAGE_RETURN_POSTPONE to signal that no change was done yet.
- * Defer the device state change.
- */
- g_idle_add (ipv4_fail_config_in_idle, g_object_ref (self));
+ nm_device_queue_state (self, NM_DEVICE_STATE_FAILED,
+ NM_DEVICE_STATE_REASON_CONFIG_FAILED);
}
}
static void
-arping_manager_probe_terminated (NMArpingManager *arping_manager, ArpingData *data, gpointer unused)
+arping_manager_probe_terminated (NMArpingManager *arping_manager, ArpingData *data)
{
NMDevice *self;
NMDevicePrivate *priv;
@@ -3805,11 +3792,11 @@ ipv4_dad_start (NMDevice *self, NMIP4Config **configs, ArpingCallback cb)
}
}
- g_signal_connect (arping_manager, NM_ARPING_MANAGER_PROBE_TERMINATED,
- G_CALLBACK (arping_manager_probe_terminated), NULL);
+ g_signal_connect_data (arping_manager, NM_ARPING_MANAGER_PROBE_TERMINATED,
+ G_CALLBACK (arping_manager_probe_terminated), data,
+ arping_data_destroy, 0);
- ret = nm_arping_manager_start_probe (arping_manager, timeout,
- data, arping_data_destroy, &error);
+ ret = nm_arping_manager_start_probe (arping_manager, timeout, &error);
if (!ret) {
_LOGW (LOGD_DEVICE, "arping probe failed: %s", error->message);
@@ -3817,7 +3804,6 @@ ipv4_dad_start (NMDevice *self, NMIP4Config **configs, ArpingCallback cb)
/* DAD could not be started, signal success */
cb (self, configs, TRUE);
- arping_data_destroy (data);
priv->arping.dad_list = g_slist_remove (priv->arping.dad_list, arping_manager);
nm_arping_manager_destroy (arping_manager);
}