summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-08-30 19:17:29 +0200
committerThomas Haller <thaller@redhat.com>2017-09-08 11:05:04 +0200
commit315bd0a97d0f05f0e04297a48ed62d92d1b3aa9b (patch)
tree02e0554b33ce81dc34b188f63d8017778fbee3ea
parente99a6039445445c4c9d9cef18abd2022985e7dfc (diff)
downloadNetworkManager-315bd0a97d0f05f0e04297a48ed62d92d1b3aa9b.tar.gz
core: add nm_utils_connection_has_default_route()
Taken from "src/nm-default-route-manager.c".
-rw-r--r--src/NetworkManagerUtils.c49
-rw-r--r--src/devices/nm-device.c6
-rw-r--r--src/nm-core-utils.h4
-rw-r--r--src/nm-default-route-manager.c61
-rw-r--r--src/nm-default-route-manager.h3
5 files changed, 56 insertions, 67 deletions
diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c
index 229b05a3e6..316f4acf15 100644
--- a/src/NetworkManagerUtils.c
+++ b/src/NetworkManagerUtils.c
@@ -206,6 +206,55 @@ nm_utils_get_ip_config_method (NMConnection *connection,
g_assert_not_reached ();
}
+gboolean
+nm_utils_connection_has_default_route (NMConnection *connection,
+ int addr_family,
+ 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_CONNECTION (connection), FALSE);
+ g_return_val_if_fail (NM_IN_SET (addr_family, AF_INET, AF_INET6), FALSE);
+
+ if (!connection)
+ goto out;
+
+ if (addr_family == AF_INET)
+ s_ip = nm_connection_get_setting_ip4_config (connection);
+ else
+ s_ip = nm_connection_get_setting_ip6_config (connection);
+ if (!s_ip)
+ goto out;
+ if (nm_setting_ip_config_get_never_default (s_ip)) {
+ is_never_default = TRUE;
+ goto out;
+ }
+
+ if (addr_family == AF_INET) {
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
+ if (NM_IN_STRSET (method, NULL,
+ NM_SETTING_IP4_CONFIG_METHOD_DISABLED,
+ NM_SETTING_IP4_CONFIG_METHOD_LINK_LOCAL))
+ goto out;
+ } else {
+ method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP6_CONFIG);
+ if (NM_IN_STRSET (method, NULL,
+ NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL))
+ goto out;
+ }
+
+ has_default_route = TRUE;
+out:
+ NM_SET_OUT (out_is_never_default, is_never_default);
+ return has_default_route;
+}
+
+/*****************************************************************************/
+
void
nm_utils_complete_generic (NMPlatform *platform,
NMConnection *connection,
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index 3972963739..9f015951a7 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -5753,8 +5753,7 @@ ip4_config_merge_and_apply (NMDevice *self,
*/
connection_has_default_route
- = nm_default_route_manager_ip4_connection_has_default_route (nm_netns_get_default_route_manager (priv->netns),
- connection, &connection_is_never_default);
+ = nm_utils_connection_has_default_route (connection, AF_INET, &connection_is_never_default);
if ( !priv->v4_commit_first_time
&& connection_is_never_default) {
@@ -6489,8 +6488,7 @@ ip6_config_merge_and_apply (NMDevice *self,
*/
connection_has_default_route
- = nm_default_route_manager_ip6_connection_has_default_route (nm_netns_get_default_route_manager (priv->netns),
- connection, &connection_is_never_default);
+ = nm_utils_connection_has_default_route (connection, AF_INET6, &connection_is_never_default);
if ( !priv->v6_commit_first_time
&& connection_is_never_default) {
diff --git a/src/nm-core-utils.h b/src/nm-core-utils.h
index f9545653de..aca69fce6a 100644
--- a/src/nm-core-utils.h
+++ b/src/nm-core-utils.h
@@ -292,6 +292,10 @@ fcn_name (lookup_type val, char *buf, gsize len) \
const char *nm_utils_get_ip_config_method (NMConnection *connection,
GType ip_setting_type);
+gboolean nm_utils_connection_has_default_route (NMConnection *connection,
+ int addr_family,
+ gboolean *out_is_never_default);
+
char *nm_utils_new_vlan_name (const char *parent_iface, guint32 vlan_id);
const char *nm_utils_new_infiniband_name (char *name, const char *parent_name, int p_key);
diff --git a/src/nm-default-route-manager.c b/src/nm-default-route-manager.c
index cde53089e5..dc8f83b4a4 100644
--- a/src/nm-default-route-manager.c
+++ b/src/nm-default-route-manager.c
@@ -964,65 +964,6 @@ nm_default_route_manager_ip6_update_default_route (NMDefaultRouteManager *self,
/*****************************************************************************/
-static gboolean
-_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);
-
- 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)
- 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))
- 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))
- goto out;
- }
-
- 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, gboolean *out_is_never_default)
-{
- 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, gboolean *out_is_never_default)
-{
- return _ipx_connection_has_default_route (&vtable_ip6, self, connection, out_is_never_default);
-}
-
-/*****************************************************************************/
-
static NMDevice *
_ipx_get_best_device (const VTableIP *vtable, NMDefaultRouteManager *self, const GSList *devices)
{
@@ -1117,7 +1058,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_applied_connection (device), NULL))
+ if (!nm_utils_connection_has_default_route (nm_device_get_applied_connection (device), vtable->vt->addr_family, 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 bac8a6ebaa..d6ad719b0b 100644
--- a/src/nm-default-route-manager.h
+++ b/src/nm-default-route-manager.h
@@ -42,9 +42,6 @@ NMDefaultRouteManager *nm_default_route_manager_new (gboolean log_with_ptr, NMPl
gboolean nm_default_route_manager_ip4_update_default_route (NMDefaultRouteManager *manager, gpointer source);
gboolean 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 *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);