Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.5:Update
NetworkManager.21340
nm-fix-dhcp-client-timeout.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File nm-fix-dhcp-client-timeout.patch of Package NetworkManager.21340
Index: NetworkManager-1.22.10/src/dhcp/nm-dhcp-client.c =================================================================== --- NetworkManager-1.22.10.orig/src/dhcp/nm-dhcp-client.c +++ NetworkManager-1.22.10/src/dhcp/nm-dhcp-client.c @@ -420,9 +420,6 @@ nm_dhcp_client_set_state (NMDhcpClient * if (NM_IN_SET (new_state, NM_DHCP_STATE_BOUND, NM_DHCP_STATE_EXTENDED)) { g_return_if_fail (NM_IS_IP_CONFIG (ip_config, priv->addr_family)); g_return_if_fail (options); - } else { - g_return_if_fail (!ip_config); - g_return_if_fail (!options); } if (new_state >= NM_DHCP_STATE_BOUND) @@ -436,7 +433,7 @@ nm_dhcp_client_set_state (NMDhcpClient * * events since the lease won't have changed and the state was already handled. */ if ( (priv->state == new_state) - && !NM_IN_SET (new_state, NM_DHCP_STATE_BOUND, NM_DHCP_STATE_EXTENDED)) + && !NM_IN_SET (new_state, NM_DHCP_STATE_BOUND, NM_DHCP_STATE_EXTENDED, NM_DHCP_STATE_TIMEOUT)) return; if (_LOGI_ENABLED ()) { @@ -524,8 +521,8 @@ nm_dhcp_client_start_timeout (NMDhcpClie return; priv->timeout_id = g_timeout_add_seconds (priv->timeout, - transaction_timeout, - self); + transaction_timeout, + self); } void @@ -536,8 +533,6 @@ nm_dhcp_client_watch_child (NMDhcpClient g_return_if_fail (priv->pid == -1); priv->pid = pid; - nm_dhcp_client_start_timeout (self); - g_return_if_fail (priv->watch_id == 0); priv->watch_id = g_child_watch_add (pid, daemon_watch_cb, self); } @@ -880,7 +875,7 @@ nm_dhcp_client_handle_event (gpointer un _LOGD ("DHCP state '%s' -> '%s' (reason: '%s')", state_to_string (old_state), state_to_string (new_state), reason); - if (NM_IN_SET (new_state, NM_DHCP_STATE_BOUND, NM_DHCP_STATE_EXTENDED)) { + if (NM_IN_SET (new_state, NM_DHCP_STATE_BOUND, NM_DHCP_STATE_EXTENDED, NM_DHCP_STATE_TIMEOUT)) { GVariantIter iter; const char *name; GVariant *value; Index: NetworkManager-1.22.10/src/devices/nm-device.c =================================================================== --- NetworkManager-1.22.10.orig/src/devices/nm-device.c +++ NetworkManager-1.22.10/src/devices/nm-device.c @@ -8000,7 +8000,39 @@ dhcp4_state_changed (NMDhcpClient *clien } break; case NM_DHCP_STATE_TIMEOUT: - dhcp4_fail (self, state); + /* If got valid ip config from recorded lease file */ + if (!ip4_config) { + _LOGI (LOGD_DHCP4, "DHCP timed out and no valid lease file is available."); + dhcp4_fail (self, TRUE); + } else { + nm_dhcp4_config_set_options (priv->dhcp4.config, options); + _notify (self, PROP_DHCP4_CONFIG); + + if (priv->ip_state_4 == NM_DEVICE_IP_STATE_CONF) { + connection = nm_device_get_applied_connection (self); + g_assert (connection); + + manual = nm_device_ip4_config_new (self); + nm_ip4_config_merge_setting (manual, + nm_connection_get_setting_ip4_config (connection), + NM_SETTING_CONNECTION_MDNS_DEFAULT, + NM_SETTING_CONNECTION_LLMNR_DEFAULT, + nm_device_get_route_table (self, AF_INET), + nm_device_get_route_metric (self, AF_INET)); + + configs = g_new0 (NMIP4Config *, 3); + configs[0] = manual; + configs[1] = g_object_ref (ip4_config); + + ipv4_dad_start (self, configs, dhcp4_dad_cb); + } else if (priv->ip_state_4 == NM_DEVICE_IP_STATE_DONE) { + if (dhcp4_lease_change (self, ip4_config, + state == NM_DHCP_STATE_BOUND)) + nm_device_update_metered (self); + else + dhcp4_fail (self, state); + } + } break; case NM_DHCP_STATE_EXPIRE: /* Ignore expiry before we even have a lease (NAK, old lease, etc) */
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor