summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2014-04-29 16:42:57 -0500
committerDan Williams <dcbw@redhat.com>2014-05-09 15:25:27 -0500
commit11f9855223966c4fd927fe83e2cd9a623a74acad (patch)
tree0f63cd79186f3c81cf247e6f55c0cc633523d0ca
parent8f44bf047f86b9523769aca495a7e22b4e111890 (diff)
core: emit dhcp4/dhcp6-change dispatcher events if other IP completes first (rh #1091296) (bgo #729284)
If IPv6 completes first it would emit the "up" dispatcher event with IPv6 details and move the device to ACTIVATED state. But if DHCPv4 was still running, no dispatcher event would be emitted with the DHCPv4 information until the first lease renew. Thus dispatcher scripts would not receive DHCPv4 information for quite some time. Ensure that if the other IP version completes first, that when the slower method's DHCP completes, that it emits the appropriate dhcp4-change or dhcp6-change event so that dispatcher scripts get the information as soon as it's available. https://bugzilla.gnome.org/show_bug.cgi?id=729284
-rw-r--r--src/devices/nm-device.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index df2a1408cb..893bc9f40e 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -4487,6 +4487,20 @@ nm_device_activate_ip4_config_commit (gpointer user_data)
}
}
+ /* If IPv4 wasn't the first to complete, and DHCP was used, then ensure
+ * dispatcher scripts get the DHCP lease information.
+ */
+ if ( priv->dhcp4_client
+ && nm_device_activate_ip4_state_in_conf (self)
+ && (nm_device_get_state (self) > NM_DEVICE_STATE_IP_CONFIG)) {
+ /* Notify dispatcher scripts of new DHCP4 config */
+ nm_dispatcher_call (DISPATCHER_ACTION_DHCP4_CHANGE,
+ nm_device_get_connection (self),
+ self,
+ NULL,
+ NULL);
+ }
+
arp_announce (self);
/* Enter the IP_CHECK state if this is the first method to complete */
@@ -4567,6 +4581,20 @@ nm_device_activate_ip6_config_commit (gpointer user_data)
NM_DEVICE_GET_CLASS (self)->ip6_config_pre_commit (self);
if (ip6_config_merge_and_apply (self, TRUE, &reason)) {
+ /* If IPv6 wasn't the first IP to complete, and DHCP was used,
+ * then ensure dispatcher scripts get the DHCP lease information.
+ */
+ if ( priv->dhcp6_client
+ && nm_device_activate_ip6_state_in_conf (self)
+ && (nm_device_get_state (self) > NM_DEVICE_STATE_IP_CONFIG)) {
+ /* Notify dispatcher scripts of new DHCP6 config */
+ nm_dispatcher_call (DISPATCHER_ACTION_DHCP6_CHANGE,
+ nm_device_get_connection (self),
+ self,
+ NULL,
+ NULL);
+ }
+
/* Enter the IP_CHECK state if this is the first method to complete */
priv->ip6_state = IP_DONE;