diff options
author | Thomas Haller <thaller@redhat.com> | 2022-08-25 23:20:55 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2022-08-31 10:07:43 +0200 |
commit | c8341aa3f25d4ab6c7224c682342f9ab37443ba5 (patch) | |
tree | 19d1c8f580042e09cbf94ad084c3cb70b0887643 | |
parent | 19613a8d81f9bfccb7450229157e416bd1a27e0f (diff) | |
parent | d0fb3fbf8e68c8452840adeb2ee818596b4b54af (diff) | |
download | NetworkManager-c8341aa3f25d4ab6c7224c682342f9ab37443ba5.tar.gz |
dhcp: merge branch 'bg/restart-dhcp-on-mac-change'
https://bugzilla.redhat.com/show_bug.cgi?id=2110000
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1343
(cherry picked from commit 7f40eb1b04762d63943b0c0e40c4a63af798d78e)
(cherry picked from commit 14633422e299ddbdc0067f4700113482735fdddc)
-rw-r--r-- | src/core/devices/nm-device-ethernet.c | 2 | ||||
-rw-r--r-- | src/core/devices/nm-device.c | 19 | ||||
-rw-r--r-- | src/core/devices/nm-device.h | 2 | ||||
-rw-r--r-- | src/core/devices/wifi/nm-device-wifi.c | 4 | ||||
-rw-r--r-- | src/core/nm-manager.c | 2 |
5 files changed, 17 insertions, 12 deletions
diff --git a/src/core/devices/nm-device-ethernet.c b/src/core/devices/nm-device-ethernet.c index 32f2fbf9b4..40c6d208e1 100644 --- a/src/core/devices/nm-device-ethernet.c +++ b/src/core/devices/nm-device-ethernet.c @@ -451,7 +451,7 @@ supplicant_auth_state_changed(NMSupplicantInterface *iface, if (state == NM_SUPPLICANT_AUTH_STATE_SUCCESS) { nm_clear_g_signal_handler(priv->supplicant.iface, &priv->supplicant.iface_state_id); - nm_device_update_dynamic_ip_setup(NM_DEVICE(self)); + nm_device_update_dynamic_ip_setup(NM_DEVICE(self), "supplicant auth state changed"); } } diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index 6b854517e5..6c613c570b 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -6112,7 +6112,7 @@ _dev_unmanaged_check_external_down(NMDevice *self, gboolean only_if_unmanaged, g } void -nm_device_update_dynamic_ip_setup(NMDevice *self) +nm_device_update_dynamic_ip_setup(NMDevice *self, const char *reason) { NMDevicePrivate *priv; @@ -6123,6 +6123,8 @@ nm_device_update_dynamic_ip_setup(NMDevice *self) if (priv->state < NM_DEVICE_STATE_IP_CONFIG || priv->state > NM_DEVICE_STATE_ACTIVATED) return; + _LOGD(LOGD_DEVICE, "restarting dynamic IP configuration (%s)", reason); + g_hash_table_remove_all(priv->ip6_saved_properties); if (priv->ipdhcp_data_4.state != NM_DEVICE_IP_STATE_NONE) @@ -6424,6 +6426,7 @@ device_link_changed(gpointer user_data) NMDeviceClass *klass = NM_DEVICE_GET_CLASS(self); NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); gboolean ip_ifname_changed = FALSE; + gboolean hw_addr_changed; nm_auto_nmpobj const NMPObject *pllink_keep_alive = NULL; const NMPlatformLink *pllink; const char *str; @@ -6470,9 +6473,9 @@ device_link_changed(gpointer user_data) if (ifindex == nm_device_get_ip_ifindex(self)) _stats_update_counters_from_pllink(self, pllink); - had_hw_addr = (priv->hw_addr != NULL); - nm_device_update_hw_address(self); - got_hw_addr = (!had_hw_addr && priv->hw_addr); + had_hw_addr = (priv->hw_addr != NULL); + hw_addr_changed = nm_device_update_hw_address(self); + got_hw_addr = (!had_hw_addr && priv->hw_addr); nm_device_update_permanent_hw_address(self, FALSE); if (pllink->name[0] && !nm_streq(priv->iface, pllink->name)) { @@ -6522,7 +6525,9 @@ device_link_changed(gpointer user_data) /* Update DHCP, etc, if needed */ if (ip_ifname_changed) - nm_device_update_dynamic_ip_setup(self); + nm_device_update_dynamic_ip_setup(self, "IP interface changed"); + else if (hw_addr_changed) + nm_device_update_dynamic_ip_setup(self, "hw-address changed"); was_up = priv->up; priv->up = NM_FLAGS_HAS(pllink->n_ifi_flags, IFF_UP); @@ -6582,7 +6587,7 @@ device_link_changed(gpointer user_data) * renew DHCP leases and such. */ if (priv->state == NM_DEVICE_STATE_ACTIVATED) { - nm_device_update_dynamic_ip_setup(self); + nm_device_update_dynamic_ip_setup(self, "interface got carrier"); } } @@ -6644,7 +6649,7 @@ device_ip_link_changed(gpointer user_data) priv->ip_iface_ = g_strdup(ip_iface); update_prop_ip_iface(self); - nm_device_update_dynamic_ip_setup(self); + nm_device_update_dynamic_ip_setup(self, "interface renamed"); } return G_SOURCE_REMOVE; diff --git a/src/core/devices/nm-device.h b/src/core/devices/nm-device.h index d59aecb266..a9d1339e6b 100644 --- a/src/core/devices/nm-device.h +++ b/src/core/devices/nm-device.h @@ -757,7 +757,7 @@ void nm_device_update_metered(NMDevice *self); gboolean nm_device_update_hw_address(NMDevice *self); void nm_device_update_initial_hw_address(NMDevice *self); void nm_device_update_permanent_hw_address(NMDevice *self, gboolean force_freeze); -void nm_device_update_dynamic_ip_setup(NMDevice *self); +void nm_device_update_dynamic_ip_setup(NMDevice *self, const char *reason); guint nm_device_get_supplicant_timeout(NMDevice *self); gboolean nm_device_auth_retries_try_next(NMDevice *self); diff --git a/src/core/devices/wifi/nm-device-wifi.c b/src/core/devices/wifi/nm-device-wifi.c index 04608d1485..958b7d9268 100644 --- a/src/core/devices/wifi/nm-device-wifi.c +++ b/src/core/devices/wifi/nm-device-wifi.c @@ -2520,7 +2520,7 @@ supplicant_iface_state(NMDeviceWifi *self, _LOGD(LOGD_WIFI, "supplicant state settled after roaming, renew dynamic IP configuration"); nm_clear_g_source_inst(&priv->roam_supplicant_wait_source); - nm_device_update_dynamic_ip_setup(device); + nm_device_update_dynamic_ip_setup(device, "roamed to a different AP"); } } break; @@ -2663,7 +2663,7 @@ supplicant_iface_notify_current_bss(NMSupplicantInterface *iface, if (nm_supplicant_interface_get_state(priv->sup_iface) == NM_SUPPLICANT_INTERFACE_STATE_COMPLETED) { - nm_device_update_dynamic_ip_setup(NM_DEVICE(self)); + nm_device_update_dynamic_ip_setup(NM_DEVICE(self), "roamed to a different AP"); } else { /* Wait that the authentication to new the AP completes before * trying to renew, otherwise the DHCP REQUEST could be lost diff --git a/src/core/nm-manager.c b/src/core/nm-manager.c index 521536979f..3ba7b454a9 100644 --- a/src/core/nm-manager.c +++ b/src/core/nm-manager.c @@ -6521,7 +6521,7 @@ do_sleep_wake(NMManager *self, gboolean sleeping_changed) && !nm_device_get_unmanaged_flags(device, NM_UNMANAGED_SLEEPING)) { /* DHCP leases of software devices could have gone stale * so we need to renew them. */ - nm_device_update_dynamic_ip_setup(device); + nm_device_update_dynamic_ip_setup(device, "wake up"); continue; } |