diff options
author | Thomas Haller <thaller@redhat.com> | 2017-08-30 19:17:29 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2017-09-08 11:05:04 +0200 |
commit | 315bd0a97d0f05f0e04297a48ed62d92d1b3aa9b (patch) | |
tree | 02e0554b33ce81dc34b188f63d8017778fbee3ea /src | |
parent | e99a6039445445c4c9d9cef18abd2022985e7dfc (diff) | |
download | NetworkManager-315bd0a97d0f05f0e04297a48ed62d92d1b3aa9b.tar.gz |
core: add nm_utils_connection_has_default_route()
Taken from "src/nm-default-route-manager.c".
Diffstat (limited to 'src')
-rw-r--r-- | src/NetworkManagerUtils.c | 49 | ||||
-rw-r--r-- | src/devices/nm-device.c | 6 | ||||
-rw-r--r-- | src/nm-core-utils.h | 4 | ||||
-rw-r--r-- | src/nm-default-route-manager.c | 61 | ||||
-rw-r--r-- | src/nm-default-route-manager.h | 3 |
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); |