summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2015-05-27 11:34:31 +0200
committerThomas Haller <thaller@redhat.com>2015-05-29 11:43:58 +0200
commit49227a07f3e71033f7d10023cfe5a39334f335cb (patch)
treeb2f601dbf896609bae3e052e933c7cab6ef45a74
parent242fe0bfb0bf5e8f772506012ebdad4d129d0a5c (diff)
downloadNetworkManager-49227a07f3e71033f7d10023cfe5a39334f335cb.tar.gz
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().
-rw-r--r--src/devices/nm-device.c6
-rw-r--r--src/nm-default-route-manager.c36
-rw-r--r--src/nm-default-route-manager.h4
3 files changed, 28 insertions, 18 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index 043d6dbe87..0a17637e68 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -3127,8 +3127,7 @@ ip4_config_merge_and_apply (NMDevice *self,
* configured. */
priv->default_route.v4_is_assumed = FALSE;
- if ( !connection
- || !nm_default_route_manager_ip4_connection_has_default_route (nm_default_route_manager_get (), connection))
+ if (!nm_default_route_manager_ip4_connection_has_default_route (nm_default_route_manager_get (), connection, NULL))
goto END_ADD_DEFAULT_ROUTE;
if (!nm_ip4_config_get_num_addresses (composite)) {
@@ -3709,8 +3708,7 @@ ip6_config_merge_and_apply (NMDevice *self,
* configured. */
priv->default_route.v6_is_assumed = FALSE;
- if ( !connection
- || !nm_default_route_manager_ip6_connection_has_default_route (nm_default_route_manager_get (), connection))
+ if (!nm_default_route_manager_ip6_connection_has_default_route (nm_default_route_manager_get (), connection, NULL))
goto END_ADD_DEFAULT_ROUTE;
if (!nm_ip6_config_get_num_addresses (composite)) {
diff --git a/src/nm-default-route-manager.c b/src/nm-default-route-manager.c
index 4caf4672d7..1019807c45 100644
--- a/src/nm-default-route-manager.c
+++ b/src/nm-default-route-manager.c
@@ -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);
diff --git a/src/nm-default-route-manager.h b/src/nm-default-route-manager.h
index d8e422735e..7fc27bbd1c 100644
--- a/src/nm-default-route-manager.h
+++ b/src/nm-default-route-manager.h
@@ -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);