Commit 0f56957b authored by Daniel Drake's avatar Daniel Drake Committed by Dan Williams
Browse files

core: allow device subclasses to override DHCP timeout

parent 14bc75ed
...@@ -508,8 +508,7 @@ nm_dhcp_manager_handle_timeout (gpointer user_data) ...@@ -508,8 +508,7 @@ nm_dhcp_manager_handle_timeout (gpointer user_data)
{ {
NMDHCPDevice *device = (NMDHCPDevice *) user_data; NMDHCPDevice *device = (NMDHCPDevice *) user_data;
nm_info ("(%s): DHCP transaction took too long (>%ds), stopping it.", nm_info ("(%s): DHCP transaction took too long, stopping it.", device->iface);
device->iface, NM_DHCP_TIMEOUT);
nm_dhcp_manager_cancel_transaction (device->manager, device->iface); nm_dhcp_manager_cancel_transaction (device->manager, device->iface);
...@@ -625,7 +624,11 @@ nm_dhcp_manager_begin_transaction (NMDHCPManager *manager, ...@@ -625,7 +624,11 @@ nm_dhcp_manager_begin_transaction (NMDHCPManager *manager,
setting = s_ip4 ? g_object_ref (s_ip4) : NULL; setting = s_ip4 ? g_object_ref (s_ip4) : NULL;
} }
nm_info ("Activation (%s) Beginning DHCP transaction.", iface); if (timeout == 0)
timeout = NM_DHCP_TIMEOUT;
nm_info ("Activation (%s) Beginning DHCP transaction (timeout in %d seconds)",
iface, timeout);
device->pid = nm_dhcp_client_start (device, uuid, setting); device->pid = nm_dhcp_client_start (device, uuid, setting);
if (setting) if (setting)
...@@ -634,9 +637,6 @@ nm_dhcp_manager_begin_transaction (NMDHCPManager *manager, ...@@ -634,9 +637,6 @@ nm_dhcp_manager_begin_transaction (NMDHCPManager *manager,
if (device->pid == 0) if (device->pid == 0)
return FALSE; return FALSE;
if (timeout == 0)
timeout = NM_DHCP_TIMEOUT;
/* Set up a timeout on the transaction to kill it after the timeout */ /* Set up a timeout on the transaction to kill it after the timeout */
device->timeout_id = g_timeout_add_seconds (timeout, device->timeout_id = g_timeout_add_seconds (timeout,
nm_dhcp_manager_handle_timeout, nm_dhcp_manager_handle_timeout,
......
...@@ -89,6 +89,7 @@ typedef struct { ...@@ -89,6 +89,7 @@ typedef struct {
/* IP configuration info */ /* IP configuration info */
NMIP4Config * ip4_config; /* Config from DHCP, PPP, or system config files */ NMIP4Config * ip4_config; /* Config from DHCP, PPP, or system config files */
NMDHCPManager * dhcp_manager; NMDHCPManager * dhcp_manager;
guint32 dhcp_timeout;
gulong dhcp_state_sigid; gulong dhcp_state_sigid;
gulong dhcp_timeout_sigid; gulong dhcp_timeout_sigid;
NMDHCP4Config * dhcp4_config; NMDHCP4Config * dhcp4_config;
...@@ -142,6 +143,7 @@ nm_device_init (NMDevice *self) ...@@ -142,6 +143,7 @@ nm_device_init (NMDevice *self)
priv->capabilities = NM_DEVICE_CAP_NONE; priv->capabilities = NM_DEVICE_CAP_NONE;
memset (&priv->ip6_address, 0, sizeof (struct in6_addr)); memset (&priv->ip6_address, 0, sizeof (struct in6_addr));
priv->state = NM_DEVICE_STATE_UNMANAGED; priv->state = NM_DEVICE_STATE_UNMANAGED;
priv->dhcp_timeout = 0;
} }
static GObject* static GObject*
...@@ -899,7 +901,7 @@ real_act_stage3_ip_config_start (NMDevice *self, NMDeviceStateReason *reason) ...@@ -899,7 +901,7 @@ real_act_stage3_ip_config_start (NMDevice *self, NMDeviceStateReason *reason)
/* DHCP manager will cancel any transaction already in progress and we do not /* DHCP manager will cancel any transaction already in progress and we do not
want to cancel this activation if we get "down" state from that. */ want to cancel this activation if we get "down" state from that. */
g_signal_handler_block (priv->dhcp_manager, priv->dhcp_state_sigid); g_signal_handler_block (priv->dhcp_manager, priv->dhcp_state_sigid);
success = nm_dhcp_manager_begin_transaction (priv->dhcp_manager, ip_iface, uuid, s_ip4, 45); success = nm_dhcp_manager_begin_transaction (priv->dhcp_manager, ip_iface, uuid, s_ip4, priv->dhcp_timeout);
g_signal_handler_unblock (priv->dhcp_manager, priv->dhcp_state_sigid); g_signal_handler_unblock (priv->dhcp_manager, priv->dhcp_state_sigid);
if (success) { if (success) {
...@@ -2536,3 +2538,12 @@ nm_device_spec_match_list (NMDeviceInterface *device, const GSList *specs) ...@@ -2536,3 +2538,12 @@ nm_device_spec_match_list (NMDeviceInterface *device, const GSList *specs)
return FALSE; return FALSE;
} }
void
nm_device_set_dhcp_timeout (NMDevice *device,
guint32 timeout)
{
g_return_if_fail (NM_IS_DEVICE (device));
NM_DEVICE_GET_PRIVATE (device)->dhcp_timeout = timeout;
}
...@@ -162,6 +162,8 @@ void nm_device_set_managed (NMDevice *device, ...@@ -162,6 +162,8 @@ void nm_device_set_managed (NMDevice *device,
gboolean managed, gboolean managed,
NMDeviceStateReason reason); NMDeviceStateReason reason);
void nm_device_set_dhcp_timeout (NMDevice *device, guint32 timeout);
G_END_DECLS G_END_DECLS
#endif /* NM_DEVICE_H */ #endif /* NM_DEVICE_H */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment