diff options
author | Thomas Haller <thaller@redhat.com> | 2014-08-29 09:40:15 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2014-10-12 22:31:39 +0200 |
commit | b27e3a378371540b7f729522f44cf4452511a722 (patch) | |
tree | 9c9fb718acbe2f80858db868271c60aae1a8de15 | |
parent | 14bd6830d5fc8f0bf79039e4b5d971e398f81f50 (diff) | |
download | NetworkManager-b27e3a378371540b7f729522f44cf4452511a722.tar.gz |
core: add nm_ipX_config_get_default_route() functions
Add functions nm_ip4_config_get_default_route() and
nm_ip6_config_get_default_route() to search for a default
route in NMIP4Config and NMIP6Config.
Signed-off-by: Thomas Haller <thaller@redhat.com>
-rw-r--r-- | src/nm-ip4-config.c | 26 | ||||
-rw-r--r-- | src/nm-ip4-config.h | 1 | ||||
-rw-r--r-- | src/nm-ip6-config.c | 27 | ||||
-rw-r--r-- | src/nm-ip6-config.h | 1 |
4 files changed, 55 insertions, 0 deletions
diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c index a3e85aa259..1e1ca1e85c 100644 --- a/src/nm-ip4-config.c +++ b/src/nm-ip4-config.c @@ -1191,6 +1191,32 @@ nm_ip4_config_get_route (const NMIP4Config *config, guint i) } const NMPlatformIP4Route * +nm_ip4_config_get_default_route (const NMIP4Config *config) +{ + NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config); + NMPlatformIP4Route *default_route = NULL; + int i; + + for (i = 0; i < priv->routes->len; i++ ) { + NMPlatformIP4Route *item = &g_array_index (priv->routes, NMPlatformIP4Route, i); + + if (!NM_PLATFORM_IP_ROUTE_IS_DEFAULT (item)) + continue; + + /* there might be more then one default routes. Choose the best one. */ + if (!default_route) + default_route = item; + else if (item->metric < default_route->metric) + default_route = item; + else if ( item->metric == default_route->metric + && !item->gateway && default_route->gateway) + default_route = item; + } + + return default_route; +} + +const NMPlatformIP4Route * nm_ip4_config_get_direct_route_for_host (const NMIP4Config *config, guint32 host) { NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (config); diff --git a/src/nm-ip4-config.h b/src/nm-ip4-config.h index be5a30d01b..39955efb3b 100644 --- a/src/nm-ip4-config.h +++ b/src/nm-ip4-config.h @@ -92,6 +92,7 @@ void nm_ip4_config_del_route (NMIP4Config *config, guint i); guint32 nm_ip4_config_get_num_routes (const NMIP4Config *config); const NMPlatformIP4Route *nm_ip4_config_get_route (const NMIP4Config *config, guint32 i); +const NMPlatformIP4Route *nm_ip4_config_get_default_route (const NMIP4Config *config); const NMPlatformIP4Route *nm_ip4_config_get_direct_route_for_host (const NMIP4Config *config, guint32 host); /* Nameservers */ diff --git a/src/nm-ip6-config.c b/src/nm-ip6-config.c index 135c2f6fef..2d89681300 100644 --- a/src/nm-ip6-config.c +++ b/src/nm-ip6-config.c @@ -1198,6 +1198,33 @@ nm_ip6_config_get_route (const NMIP6Config *config, guint i) } const NMPlatformIP6Route * +nm_ip6_config_get_default_route (const NMIP6Config *config) +{ + NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config); + NMPlatformIP6Route *default_route = NULL; + int i; + + for (i = 0; i < priv->routes->len; i++ ) { + NMPlatformIP6Route *item = &g_array_index (priv->routes, NMPlatformIP6Route, i); + + if (!NM_PLATFORM_IP_ROUTE_IS_DEFAULT (item)) + continue; + + /* there might be more then one default routes. Choose the best one. */ + if (!default_route) + default_route = item; + else if (nm_utils_ip6_route_metric_normalize (item->metric) < nm_utils_ip6_route_metric_normalize (default_route->metric)) + default_route = item; + else if ( nm_utils_ip6_route_metric_normalize (item->metric) == nm_utils_ip6_route_metric_normalize (default_route->metric) + && IN6_IS_ADDR_UNSPECIFIED (&item->gateway) + && !IN6_IS_ADDR_UNSPECIFIED (&default_route->gateway)) + default_route = item; + } + + return default_route; +} + +const NMPlatformIP6Route * nm_ip6_config_get_direct_route_for_host (const NMIP6Config *config, const struct in6_addr *host) { NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (config); diff --git a/src/nm-ip6-config.h b/src/nm-ip6-config.h index 7abf57a779..94fad5ed12 100644 --- a/src/nm-ip6-config.h +++ b/src/nm-ip6-config.h @@ -93,6 +93,7 @@ void nm_ip6_config_del_route (NMIP6Config *config, guint i); guint32 nm_ip6_config_get_num_routes (const NMIP6Config *config); const NMPlatformIP6Route *nm_ip6_config_get_route (const NMIP6Config *config, guint32 i); +const NMPlatformIP6Route *nm_ip6_config_get_default_route (const NMIP6Config *config); const NMPlatformIP6Route *nm_ip6_config_get_direct_route_for_host (const NMIP6Config *config, const struct in6_addr *host); /* Nameservers */ |