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 7f40eb1b04)

(cherry picked from commit 14633422e2)

(cherry picked from commit c8341aa3f2)

(cherry picked from commit 8b9a12e109)

(cherry picked from commit 693d835c05)
This commit is contained in:
Beniamino Galvani 2022-08-31 10:23:09 +02:00
commit dc39b9a364
5 changed files with 20 additions and 15 deletions

View file

@ -447,7 +447,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");
}
}

View file

@ -4934,7 +4934,7 @@ set_unmanaged_external_down(NMDevice *self, gboolean only_if_unmanaged)
}
void
nm_device_update_dynamic_ip_setup(NMDevice *self)
nm_device_update_dynamic_ip_setup(NMDevice *self, const char *reason)
{
NMDevicePrivate *priv;
@ -4945,6 +4945,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->dhcp_data_4.client) {
@ -4998,7 +5000,7 @@ carrier_changed(NMDevice *self, gboolean carrier)
/* Force master to retry getting ip addresses when carrier
* is restored. */
if (priv->state == NM_DEVICE_STATE_ACTIVATED)
nm_device_update_dynamic_ip_setup(self);
nm_device_update_dynamic_ip_setup(self, "interface got carrier");
/* If needed, also resume IP configuration that is
* waiting for carrier. */
if (nm_device_activate_ip4_state_in_wait(self))
@ -5033,7 +5035,7 @@ carrier_changed(NMDevice *self, gboolean carrier)
* tagged for carrier ignore) ensure that when the carrier appears we
* renew DHCP leases and such.
*/
nm_device_update_dynamic_ip_setup(self);
nm_device_update_dynamic_ip_setup(self, "interface got carrier");
}
} else {
if (priv->state == NM_DEVICE_STATE_UNAVAILABLE) {
@ -5348,9 +5350,10 @@ device_update_interface_flags(NMDevice *self, const NMPlatformLink *plink)
static gboolean
device_link_changed(NMDevice *self)
{
NMDeviceClass * klass = NM_DEVICE_GET_CLASS(self);
NMDevicePrivate * priv = NM_DEVICE_GET_PRIVATE(self);
gboolean ip_ifname_changed = FALSE;
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;
@ -5397,9 +5400,9 @@ device_link_changed(NMDevice *self)
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)) {
@ -5448,7 +5451,9 @@ device_link_changed(NMDevice *self)
/* 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);
@ -5556,7 +5561,7 @@ device_ip_link_changed(NMDevice *self)
priv->ip_iface_ = g_strdup(ip_iface);
_notify(self, PROP_IP_IFACE);
nm_device_update_dynamic_ip_setup(self);
nm_device_update_dynamic_ip_setup(self, "interface renamed");
}
return G_SOURCE_REMOVE;

View file

@ -768,7 +768,7 @@ void nm_device_reactivate_ip_config(NMDevice * device,
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);

View file

@ -2610,7 +2610,7 @@ supplicant_iface_notify_current_bss(NMSupplicantInterface *iface,
* Also, some APs (e.g. Cisco) can be configured to drop
* all traffic until DHCP completes. To support such
* cases, renew the lease when roaming to a new AP. */
nm_device_update_dynamic_ip_setup(NM_DEVICE(self));
nm_device_update_dynamic_ip_setup(NM_DEVICE(self), "roamed to a different AP");
}
set_current_ap(self, new_ap, TRUE);

View file

@ -6329,7 +6329,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;
}