mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-07 20:40:21 +01:00
dhcp: allow some same-state transitions (rh #810744)
The DHCP code usually ignores dhclient state transitions to the same state it's currently in. This turns out to be wrong, since dhclient will use the same reason code (which NM uses for the state value) for operations like RENEW and REBIND. i.e. you'll see states like this: BOUND RENEW (first renew) RENEW (second renew) RENEW (third renew) etc Therefore to ensure we trigger dispatcher scripts and internal housekeeping code for renewals we need to make sure we process these events even though they use the same state as the previous event.
This commit is contained in:
parent
cca40524ac
commit
a5dfb5a482
1 changed files with 14 additions and 2 deletions
|
|
@ -570,8 +570,20 @@ nm_dhcp_client_new_options (NMDHCPClient *self,
|
|||
g_hash_table_remove_all (priv->options);
|
||||
g_hash_table_foreach (options, copy_option, priv->options);
|
||||
|
||||
if (old_state == new_state)
|
||||
return;
|
||||
if (old_state == new_state) {
|
||||
/* dhclient will stay in the same state (or, really, provide the same
|
||||
* reason) for operations like RENEW and REBIND. We need to ensure
|
||||
* that triggers various DHCP lease change code, so we need to pass
|
||||
* along same-state transitions for these states.
|
||||
*/
|
||||
if ( new_state != DHC_BOUND4
|
||||
&& new_state != DHC_RENEW4
|
||||
&& new_state != DHC_REBIND4
|
||||
&& new_state != DHC_BOUND6
|
||||
&& new_state != DHC_RENEW6
|
||||
&& new_state != DHC_REBIND6)
|
||||
return;
|
||||
}
|
||||
|
||||
/* Handle changed device state */
|
||||
if (state_is_bound (new_state)) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue