mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-23 00:20:15 +01:00
default-route: also configure default-routes for assumed connections
Previously for assumed connections we would never configure a default route.
That has serious problems for example in the following two scenarios:
- the default-route might have a limited lifetime from a previous
SLAAC/accept_ra setting. In this case, once we assume the connection
we must also ensure that we extend the lifetime of the default
route.
- the gateway could be received via DHCP/RA and it might change.
If we ignore default-routes for assumed connection we miss that
change.
The problem is that the notion of "assumed connection" wrongly combines
two conflicting goals (related bug bgo#746440):
a) have an external device that is entirely unmanged by NM.
b) do a seamless takeover of a previously managed connection at start,
but still fully manage.
This patch changes the handling of default-routes towards meaning b).
https://bugzilla.redhat.com/show_bug.cgi?id=1224291
This commit is contained in:
parent
98e50e358b
commit
d51975ed92
1 changed files with 13 additions and 7 deletions
|
|
@ -3093,7 +3093,7 @@ ip4_config_merge_and_apply (NMDevice *self,
|
|||
if (priv->wwan_ip4_config)
|
||||
nm_ip4_config_merge (composite, priv->wwan_ip4_config);
|
||||
|
||||
/* Merge user overrides into the composite config. For assumed connection,
|
||||
/* Merge user overrides into the composite config. For assumed connections,
|
||||
* con_ip4_config is empty. */
|
||||
if (priv->con_ip4_config)
|
||||
nm_ip4_config_merge (composite, priv->con_ip4_config);
|
||||
|
|
@ -3122,14 +3122,12 @@ ip4_config_merge_and_apply (NMDevice *self,
|
|||
goto END_ADD_DEFAULT_ROUTE;
|
||||
}
|
||||
|
||||
if (nm_device_uses_assumed_connection (self))
|
||||
goto END_ADD_DEFAULT_ROUTE;
|
||||
|
||||
connection_has_default_route
|
||||
= nm_default_route_manager_ip4_connection_has_default_route (nm_default_route_manager_get (),
|
||||
connection, &connection_is_never_default);
|
||||
|
||||
if ( !priv->default_route.v4_configure_first_time
|
||||
&& !nm_device_uses_assumed_connection (self)
|
||||
&& connection_is_never_default) {
|
||||
/* If the connection is explicitly configured as never-default, we enforce the (absense of the)
|
||||
* default-route only once. That allows the user to configure a connection as never-default,
|
||||
|
|
@ -3137,6 +3135,11 @@ ip4_config_merge_and_apply (NMDevice *self,
|
|||
goto END_ADD_DEFAULT_ROUTE;
|
||||
}
|
||||
|
||||
/* At this point, we treat assumed and non-assumed connections alike.
|
||||
* For assumed connections we do that because we still manage RA and DHCP
|
||||
* leases for them, so we must extend/update the default route on commits.
|
||||
*/
|
||||
|
||||
/* we are about to commit (for a non-assumed connection). Enforce whatever we have
|
||||
* configured. */
|
||||
priv->default_route.v4_configure_first_time = FALSE;
|
||||
|
|
@ -3716,14 +3719,12 @@ ip6_config_merge_and_apply (NMDevice *self,
|
|||
goto END_ADD_DEFAULT_ROUTE;
|
||||
}
|
||||
|
||||
if (nm_device_uses_assumed_connection (self))
|
||||
goto END_ADD_DEFAULT_ROUTE;
|
||||
|
||||
connection_has_default_route
|
||||
= nm_default_route_manager_ip6_connection_has_default_route (nm_default_route_manager_get (),
|
||||
connection, &connection_is_never_default);
|
||||
|
||||
if ( !priv->default_route.v6_configure_first_time
|
||||
&& !nm_device_uses_assumed_connection (self)
|
||||
&& connection_is_never_default) {
|
||||
/* If the connection is explicitly configured as never-default, we enforce the (absence of the)
|
||||
* default-route only once. That allows the user to configure a connection as never-default,
|
||||
|
|
@ -3731,6 +3732,11 @@ ip6_config_merge_and_apply (NMDevice *self,
|
|||
goto END_ADD_DEFAULT_ROUTE;
|
||||
}
|
||||
|
||||
/* At this point, we treat assumed and non-assumed connections alike.
|
||||
* For assumed connections we do that because we still manage RA and DHCP
|
||||
* leases for them, so we must extend/update the default route on commits.
|
||||
*/
|
||||
|
||||
/* we are about to commit (for a non-assumed connection). Enforce whatever we have
|
||||
* configured. */
|
||||
priv->default_route.v6_configure_first_time = FALSE;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue