summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2014-10-31 23:26:48 +0100
committerThomas Haller <thaller@redhat.com>2014-11-07 15:23:12 +0100
commitff40ccf8994ab5a45f88bc95bd0ef7467c0810e0 (patch)
tree57bee584802b753aa9cff892006fb4c9948ba1ca
parenta39a3ae4cd72d695f1b5d10eaa79544f2020a54e (diff)
downloadNetworkManager-ff40ccf8994ab5a45f88bc95bd0ef7467c0810e0.tar.gz
policy: move get_best_config() function to nm-default-route-manager
No functional change, only refactoring by moving and combining the code. Signed-off-by: Thomas Haller <thaller@redhat.com>
-rw-r--r--src/nm-default-route-manager.c152
-rw-r--r--src/nm-default-route-manager.h19
-rw-r--r--src/nm-policy.c156
3 files changed, 193 insertions, 134 deletions
diff --git a/src/nm-default-route-manager.c b/src/nm-default-route-manager.c
index 8c0529e356..49831375ee 100644
--- a/src/nm-default-route-manager.c
+++ b/src/nm-default-route-manager.c
@@ -29,6 +29,7 @@
#include "nm-device.h"
#include "nm-vpn-connection.h"
#include "nm-platform.h"
+#include "nm-manager.h"
#include "nm-ip4-config.h"
#include "nm-ip6-config.h"
#include "nm-activation-request.h"
@@ -782,6 +783,157 @@ nm_default_route_manager_ip6_get_best_device (NMDefaultRouteManager *self, const
/***********************************************************************************/
+static gpointer
+_ipx_get_best_config (const VTableIP *vtable,
+ NMDefaultRouteManager *self,
+ NMManager *manager,
+ gboolean ignore_never_default,
+ NMDevice *preferred_device,
+ const char **out_ip_iface,
+ int *out_ip_ifindex,
+ NMActiveConnection **out_ac,
+ NMDevice **out_device,
+ NMVpnConnection **out_vpn)
+{
+ NMDefaultRouteManagerPrivate *priv;
+ const GSList *connections, *iter;
+ NMDevice *device;
+ NMActRequest *req = NULL;
+ gpointer config_result = NULL;
+
+ g_return_val_if_fail (NM_IS_DEFAULT_ROUTE_MANAGER (self), NULL);
+
+ priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+
+ /* If a VPN connection is active, it is preferred */
+ connections = nm_manager_get_active_connections (manager);
+ for (iter = connections; iter; iter = g_slist_next (iter)) {
+ NMActiveConnection *active = NM_ACTIVE_CONNECTION (iter->data);
+ NMVpnConnection *candidate;
+ NMConnection *tmp;
+ NMVpnConnectionState vpn_state;
+
+ if (!NM_IS_VPN_CONNECTION (active))
+ continue;
+
+ candidate = NM_VPN_CONNECTION (active);
+
+ tmp = nm_active_connection_get_connection (active);
+ g_assert (tmp);
+
+ vpn_state = nm_vpn_connection_get_vpn_state (candidate);
+ if (vpn_state != NM_VPN_CONNECTION_STATE_ACTIVATED)
+ continue;
+
+ if (VTABLE_IS_IP4) {
+ NMIP4Config *vpn_ip4;
+
+ vpn_ip4 = nm_vpn_connection_get_ip4_config (candidate);
+ if (!vpn_ip4)
+ continue;
+
+ if (!ignore_never_default && nm_ip4_config_get_never_default (vpn_ip4))
+ continue;
+
+ config_result = vpn_ip4;
+ } else {
+ NMIP6Config *vpn_ip6;
+
+ vpn_ip6 = nm_vpn_connection_get_ip6_config (candidate);
+ if (!vpn_ip6)
+ continue;
+
+ if (!ignore_never_default && nm_ip6_config_get_never_default (vpn_ip6))
+ continue;
+
+ config_result = vpn_ip6;
+ }
+
+ if (out_vpn)
+ *out_vpn = candidate;
+ if (out_ac)
+ *out_ac = active;
+ if (out_ip_iface)
+ *out_ip_iface = nm_vpn_connection_get_ip_iface (candidate);
+ if (out_ip_ifindex)
+ *out_ip_ifindex = nm_vpn_connection_get_ip_ifindex (candidate);
+ break;
+ }
+
+ /* If no VPN connections, we use the best device instead */
+ if (!config_result) {
+ device = _ipx_get_best_device (vtable, self, nm_manager_get_devices (manager), TRUE, preferred_device);
+ if (device) {
+ if (VTABLE_IS_IP4)
+ config_result = nm_device_get_ip4_config (device);
+ else
+ config_result = nm_device_get_ip6_config (device);
+ g_assert (config_result);
+ req = nm_device_get_act_request (device);
+ g_assert (req);
+
+ if (out_device)
+ *out_device = device;
+ if (out_ac)
+ *out_ac = NM_ACTIVE_CONNECTION (req);
+ if (out_ip_iface)
+ *out_ip_iface = nm_device_get_ip_iface (device);
+ if (out_ip_ifindex)
+ *out_ip_ifindex = nm_device_get_ip_ifindex (device);
+ }
+ }
+
+ return config_result;
+}
+
+NMIP4Config *
+nm_default_route_manager_ip4_get_best_config (NMDefaultRouteManager *self,
+ NMManager *manager,
+ gboolean ignore_never_default,
+ NMDevice *preferred_device,
+ const char **out_ip_iface,
+ int *out_ip_ifindex,
+ NMActiveConnection **out_ac,
+ NMDevice **out_device,
+ NMVpnConnection **out_vpn)
+{
+ return _ipx_get_best_config (&vtable_ip4,
+ self,
+ manager,
+ ignore_never_default,
+ preferred_device,
+ out_ip_iface,
+ out_ip_ifindex,
+ out_ac,
+ out_device,
+ out_vpn);
+}
+
+NMIP6Config *
+nm_default_route_manager_ip6_get_best_config (NMDefaultRouteManager *self,
+ NMManager *manager,
+ gboolean ignore_never_default,
+ NMDevice *preferred_device,
+ const char **out_ip_iface,
+ int *out_ip_ifindex,
+ NMActiveConnection **out_ac,
+ NMDevice **out_device,
+ NMVpnConnection **out_vpn)
+{
+ return _ipx_get_best_config (&vtable_ip6,
+ self,
+ manager,
+ ignore_never_default,
+ preferred_device,
+ out_ip_iface,
+ out_ip_ifindex,
+ out_ac,
+ out_device,
+ out_vpn);
+}
+
+/***********************************************************************************/
+
static GPtrArray *
_v4_get_entries (NMDefaultRouteManagerPrivate *priv)
{
diff --git a/src/nm-default-route-manager.h b/src/nm-default-route-manager.h
index bf24366329..6961979404 100644
--- a/src/nm-default-route-manager.h
+++ b/src/nm-default-route-manager.h
@@ -60,5 +60,24 @@ gboolean nm_default_route_manager_ip6_connection_has_default_route (NMDefaultRou
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);
+NMIP4Config *nm_default_route_manager_ip4_get_best_config (NMDefaultRouteManager *manager,
+ NMManager *nm_manager,
+ gboolean ignore_never_default,
+ NMDevice *preferred_device,
+ const char **out_ip_iface,
+ int *out_ip_ifindex,
+ NMActiveConnection **out_ac,
+ NMDevice **out_device,
+ NMVpnConnection **out_vpn);
+NMIP6Config *nm_default_route_manager_ip6_get_best_config (NMDefaultRouteManager *manager,
+ NMManager *nm_manager,
+ gboolean ignore_never_default,
+ NMDevice *preferred_device,
+ const char **out_ip_iface,
+ int *out_ip_ifindex,
+ NMActiveConnection **out_ac,
+ NMDevice **out_device,
+ NMVpnConnection **out_vpn);
+
#endif /* NM_DEFAULT_ROUTE_MANAGER_H */
diff --git a/src/nm-policy.c b/src/nm-policy.c
index 37e34440f2..0a90965892 100644
--- a/src/nm-policy.c
+++ b/src/nm-policy.c
@@ -379,7 +379,7 @@ update_default_ac (NMPolicy *policy,
}
static NMIP4Config *
-get_best_ip4_config (NMPolicy *policy,
+get_best_ip4_config (NMPolicy *self,
gboolean ignore_never_default,
const char **out_ip_iface,
int *out_ip_ifindex,
@@ -387,73 +387,17 @@ get_best_ip4_config (NMPolicy *policy,
NMDevice **out_device,
NMVpnConnection **out_vpn)
{
- NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
- const GSList *connections, *iter;
- NMDevice *device;
- NMActRequest *req = NULL;
- NMIP4Config *ip4_config = NULL;
-
- /* If a VPN connection is active, it is preferred */
- connections = nm_manager_get_active_connections (priv->manager);
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMActiveConnection *active = NM_ACTIVE_CONNECTION (iter->data);
- NMVpnConnection *candidate;
- NMIP4Config *vpn_ip4;
- NMConnection *tmp;
- NMVpnConnectionState vpn_state;
-
- if (!NM_IS_VPN_CONNECTION (active))
- continue;
-
- candidate = NM_VPN_CONNECTION (active);
-
- tmp = nm_active_connection_get_connection (active);
- g_assert (tmp);
-
- vpn_state = nm_vpn_connection_get_vpn_state (candidate);
- if (vpn_state != NM_VPN_CONNECTION_STATE_ACTIVATED)
- continue;
-
- vpn_ip4 = nm_vpn_connection_get_ip4_config (candidate);
- if (!vpn_ip4)
- continue;
-
- if (!ignore_never_default && nm_ip4_config_get_never_default (vpn_ip4))
- continue;
-
- ip4_config = vpn_ip4;
- if (out_vpn)
- *out_vpn = candidate;
- if (out_ac)
- *out_ac = active;
- if (out_ip_iface)
- *out_ip_iface = nm_vpn_connection_get_ip_iface (candidate);
- if (out_ip_ifindex)
- *out_ip_ifindex = nm_vpn_connection_get_ip_ifindex (candidate);
- break;
- }
-
- /* If no VPN connections, we use the best device instead */
- if (!ip4_config) {
- device = get_best_ip4_device (policy, TRUE);
- if (device) {
- ip4_config = nm_device_get_ip4_config (device);
- g_assert (ip4_config);
- req = nm_device_get_act_request (device);
- g_assert (req);
-
- if (out_device)
- *out_device = device;
- if (out_ac)
- *out_ac = NM_ACTIVE_CONNECTION (req);
- if (out_ip_iface)
- *out_ip_iface = nm_device_get_ip_iface (device);
- if (out_ip_ifindex)
- *out_ip_ifindex = nm_device_get_ip_ifindex (device);
- }
- }
+ NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
- return ip4_config;
+ return nm_default_route_manager_ip4_get_best_config (nm_default_route_manager_get (),
+ priv->manager,
+ ignore_never_default,
+ priv->default_device4,
+ out_ip_iface,
+ out_ip_ifindex,
+ out_ac,
+ out_device,
+ out_vpn);
}
static void
@@ -565,7 +509,7 @@ update_ip4_routing (NMPolicy *policy, gboolean force_update)
}
static NMIP6Config *
-get_best_ip6_config (NMPolicy *policy,
+get_best_ip6_config (NMPolicy *self,
gboolean ignore_never_default,
const char **out_ip_iface,
int *out_ip_ifindex,
@@ -573,73 +517,17 @@ get_best_ip6_config (NMPolicy *policy,
NMDevice **out_device,
NMVpnConnection **out_vpn)
{
- NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
- const GSList *connections, *iter;
- NMDevice *device;
- NMActRequest *req = NULL;
- NMIP6Config *ip6_config = NULL;
-
- /* If a VPN connection is active, it is preferred */
- connections = nm_manager_get_active_connections (priv->manager);
- for (iter = connections; iter; iter = g_slist_next (iter)) {
- NMActiveConnection *active = NM_ACTIVE_CONNECTION (iter->data);
- NMVpnConnection *candidate;
- NMIP6Config *vpn_ip6;
- NMConnection *tmp;
- NMVpnConnectionState vpn_state;
-
- if (!NM_IS_VPN_CONNECTION (active))
- continue;
-
- candidate = NM_VPN_CONNECTION (active);
-
- tmp = nm_active_connection_get_connection (active);
- g_assert (tmp);
-
- vpn_state = nm_vpn_connection_get_vpn_state (candidate);
- if (vpn_state != NM_VPN_CONNECTION_STATE_ACTIVATED)
- continue;
-
- vpn_ip6 = nm_vpn_connection_get_ip6_config (candidate);
- if (!vpn_ip6)
- continue;
-
- if (!ignore_never_default && nm_ip6_config_get_never_default (vpn_ip6))
- continue;
-
- ip6_config = vpn_ip6;
- if (out_vpn)
- *out_vpn = candidate;
- if (out_ac)
- *out_ac = NM_ACTIVE_CONNECTION (candidate);
- if (out_ip_iface)
- *out_ip_iface = nm_vpn_connection_get_ip_iface (candidate);
- if (out_ip_ifindex)
- *out_ip_ifindex = nm_vpn_connection_get_ip_ifindex (candidate);
- break;
- }
-
- /* If no VPN connections, we use the best device instead */
- if (!ip6_config) {
- device = get_best_ip6_device (policy, TRUE);
- if (device) {
- req = nm_device_get_act_request (device);
- g_assert (req);
- ip6_config = nm_device_get_ip6_config (device);
- g_assert (ip6_config);
-
- if (out_device)
- *out_device = device;
- if (out_ac)
- *out_ac = NM_ACTIVE_CONNECTION (req);
- if (out_ip_iface)
- *out_ip_iface = nm_device_get_ip_iface (device);
- if (out_ip_ifindex)
- *out_ip_ifindex = nm_device_get_ip_ifindex (device);
- }
- }
+ NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (self);
- return ip6_config;
+ return nm_default_route_manager_ip6_get_best_config (nm_default_route_manager_get (),
+ priv->manager,
+ ignore_never_default,
+ priv->default_device6,
+ out_ip_iface,
+ out_ip_ifindex,
+ out_ac,
+ out_device,
+ out_vpn);
}
static void