mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-26 17:00:08 +01:00
default-route: add @out_is_never_default argument to has_default_route()
Also accept a NULL connection in
nm_default_route_manager_ip4_connection_has_default_route() and
nm_default_route_manager_ip6_connection_has_default_route().
(cherry picked from commit 49227a07f3)
This commit is contained in:
parent
9bac91eb69
commit
76e5d55a98
3 changed files with 28 additions and 16 deletions
|
|
@ -3134,7 +3134,7 @@ ip4_config_merge_and_apply (NMDevice *self,
|
|||
* tweak the effective metric).
|
||||
*/
|
||||
if ( !assumed
|
||||
&& nm_default_route_manager_ip4_connection_has_default_route (nm_default_route_manager_get (), connection)) {
|
||||
&& nm_default_route_manager_ip4_connection_has_default_route (nm_default_route_manager_get (), connection, NULL)) {
|
||||
guint32 gateway = 0;
|
||||
|
||||
priv->default_route.v4_is_assumed = FALSE;
|
||||
|
|
@ -3697,7 +3697,7 @@ ip6_config_merge_and_apply (NMDevice *self,
|
|||
* tweak the effective metric).
|
||||
*/
|
||||
if ( !assumed
|
||||
&& nm_default_route_manager_ip6_connection_has_default_route (nm_default_route_manager_get (), connection)) {
|
||||
&& nm_default_route_manager_ip6_connection_has_default_route (nm_default_route_manager_get (), connection, NULL)) {
|
||||
const struct in6_addr *gateway = NULL;
|
||||
|
||||
priv->default_route.v6_is_assumed = FALSE;
|
||||
|
|
|
|||
|
|
@ -832,48 +832,60 @@ nm_default_route_manager_ip6_update_default_route (NMDefaultRouteManager *self,
|
|||
/***********************************************************************************/
|
||||
|
||||
static gboolean
|
||||
_ipx_connection_has_default_route (const VTableIP *vtable, NMDefaultRouteManager *self, NMConnection *connection)
|
||||
_ipx_connection_has_default_route (const VTableIP *vtable, NMDefaultRouteManager *self, NMConnection *connection, gboolean *out_is_never_default)
|
||||
{
|
||||
const char *method;
|
||||
NMSettingIPConfig *s_ip;
|
||||
gboolean is_never_default = FALSE;
|
||||
gboolean has_default_route = FALSE;
|
||||
|
||||
g_return_val_if_fail (NM_IS_DEFAULT_ROUTE_MANAGER (self), FALSE);
|
||||
g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
|
||||
|
||||
if (!connection)
|
||||
goto out;
|
||||
|
||||
if (vtable->vt->is_ip4)
|
||||
s_ip = nm_connection_get_setting_ip4_config (connection);
|
||||
else
|
||||
s_ip = nm_connection_get_setting_ip6_config (connection);
|
||||
if (!s_ip || nm_setting_ip_config_get_never_default (s_ip))
|
||||
return FALSE;
|
||||
if (!s_ip)
|
||||
goto out;
|
||||
if (nm_setting_ip_config_get_never_default (s_ip)) {
|
||||
is_never_default = TRUE;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (vtable->vt->is_ip4) {
|
||||
method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
|
||||
if ( !method
|
||||
|| !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_DISABLED)
|
||||
|| !strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL))
|
||||
return FALSE;
|
||||
goto out;
|
||||
} else {
|
||||
method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP6_CONFIG);
|
||||
if ( !method
|
||||
|| !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)
|
||||
|| !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL))
|
||||
return FALSE;
|
||||
goto out;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
has_default_route = TRUE;
|
||||
out:
|
||||
if (out_is_never_default)
|
||||
*out_is_never_default = is_never_default;
|
||||
return has_default_route;
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_default_route_manager_ip4_connection_has_default_route (NMDefaultRouteManager *self, NMConnection *connection)
|
||||
nm_default_route_manager_ip4_connection_has_default_route (NMDefaultRouteManager *self, NMConnection *connection, gboolean *out_is_never_default)
|
||||
{
|
||||
return _ipx_connection_has_default_route (&vtable_ip4, self, connection);
|
||||
return _ipx_connection_has_default_route (&vtable_ip4, self, connection, out_is_never_default);
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_default_route_manager_ip6_connection_has_default_route (NMDefaultRouteManager *self, NMConnection *connection)
|
||||
nm_default_route_manager_ip6_connection_has_default_route (NMDefaultRouteManager *self, NMConnection *connection, gboolean *out_is_never_default)
|
||||
{
|
||||
return _ipx_connection_has_default_route (&vtable_ip6, self, connection);
|
||||
return _ipx_connection_has_default_route (&vtable_ip6, self, connection, out_is_never_default);
|
||||
}
|
||||
|
||||
/***********************************************************************************/
|
||||
|
|
@ -972,7 +984,7 @@ _ipx_get_best_activating_device (const VTableIP *vtable, NMDefaultRouteManager *
|
|||
|| state >= NM_DEVICE_STATE_DEACTIVATING)
|
||||
continue;
|
||||
|
||||
if (!_ipx_connection_has_default_route (vtable, self, nm_device_get_connection (device)))
|
||||
if (!_ipx_connection_has_default_route (vtable, self, nm_device_get_connection (device), NULL))
|
||||
continue;
|
||||
|
||||
prio = nm_device_get_ip4_route_metric (device);
|
||||
|
|
|
|||
|
|
@ -51,8 +51,8 @@ NMDefaultRouteManager *nm_default_route_manager_get (void);
|
|||
void nm_default_route_manager_ip4_update_default_route (NMDefaultRouteManager *manager, gpointer source);
|
||||
void nm_default_route_manager_ip6_update_default_route (NMDefaultRouteManager *manager, gpointer source);
|
||||
|
||||
gboolean nm_default_route_manager_ip4_connection_has_default_route (NMDefaultRouteManager *manager, NMConnection *connection);
|
||||
gboolean nm_default_route_manager_ip6_connection_has_default_route (NMDefaultRouteManager *manager, NMConnection *connection);
|
||||
gboolean nm_default_route_manager_ip4_connection_has_default_route (NMDefaultRouteManager *manager, NMConnection *connection, gboolean *out_is_never_default);
|
||||
gboolean nm_default_route_manager_ip6_connection_has_default_route (NMDefaultRouteManager *manager, NMConnection *connection, gboolean *out_is_never_default);
|
||||
|
||||
NMDevice *nm_default_route_manager_ip4_get_best_device (NMDefaultRouteManager *manager, const GSList *devices, gboolean fully_activated, NMDevice *preferred_device);
|
||||
NMDevice *nm_default_route_manager_ip6_get_best_device (NMDefaultRouteManager *manager, const GSList *devices, gboolean fully_activated, NMDevice *preferred_device);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue