From df923622b1c1b12b3e2e8b00bc411ff7f081c10f Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 28 Aug 2014 18:32:05 +0200 Subject: [PATCH] core: overwrite the default route priority via connection setting Make use of the new setting nm_setting_ip_config_get_route_metric() If set, this override the route metric determined based on the device type. Similarly for VPN also prefer the setting from the connection. Thereby change the default priority (for VPN that have their own device) to NM_VPN_ROUTE_METRIC_DEFAULT instead of NM_PLATFORM_ROUTE_METRIC_DEFAULT. The latter would be a very low priority compared to the default metrics for devices. Signed-off-by: Thomas Haller --- src/devices/nm-device.c | 24 ++++++++++++++++++++-- src/vpn-manager/nm-vpn-connection.c | 32 ++++++++++++++++++++--------- 2 files changed, 44 insertions(+), 12 deletions(-) diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 419ea87174..f4a8a1c424 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -684,13 +684,33 @@ nm_device_get_priority (NMDevice *self) guint32 nm_device_get_ip4_route_metric (NMDevice *self) { - return nm_device_get_priority (self); + NMConnection *connection; + gint64 route_metric = -1; + + g_return_val_if_fail (NM_IS_DEVICE (self), G_MAXUINT32); + + connection = nm_device_get_connection (self); + + if (connection) + route_metric = nm_setting_ip_config_get_route_metric (nm_connection_get_setting_ip4_config (connection)); + + return route_metric >= 0 ? route_metric : nm_device_get_priority (self); } guint32 nm_device_get_ip6_route_metric (NMDevice *self) { - return nm_device_get_priority (self); + NMConnection *connection; + gint64 route_metric = -1; + + g_return_val_if_fail (NM_IS_DEVICE (self), G_MAXUINT32); + + connection = nm_device_get_connection (self); + + if (connection) + route_metric = nm_setting_ip_config_get_route_metric (nm_connection_get_setting_ip6_config (connection)); + + return route_metric >= 0 ? route_metric : nm_device_get_priority (self); } const char * diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c index 9f5e47b65e..d41e2e2c67 100644 --- a/src/vpn-manager/nm-vpn-connection.c +++ b/src/vpn-manager/nm-vpn-connection.c @@ -1113,29 +1113,41 @@ nm_vpn_connection_config_get (DBusGProxy *proxy, guint32 nm_vpn_connection_get_ip4_route_metric (NMVpnConnection *connection) { + NMDevice *parent_dev; NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection); - if (priv->ip_ifindex) - return NM_PLATFORM_ROUTE_METRIC_DEFAULT; - else { - NMDevice *parent_dev = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (connection)); + if (priv->connection) { + gint64 route_metric = nm_setting_ip_config_get_route_metric (nm_connection_get_setting_ip4_config (priv->connection)); - return nm_device_get_ip4_route_metric (parent_dev); + if (route_metric >= 0) + return route_metric; } + + if ( priv->ip_ifindex + || !(parent_dev = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (connection)))) + return NM_VPN_ROUTE_METRIC_DEFAULT; + + return nm_device_get_ip4_route_metric (parent_dev); } guint32 nm_vpn_connection_get_ip6_route_metric (NMVpnConnection *connection) { + NMDevice *parent_dev; NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection); - if (priv->ip_ifindex) - return NM_PLATFORM_ROUTE_METRIC_DEFAULT; - else { - NMDevice *parent_dev = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (connection)); + if (priv->connection) { + gint64 route_metric = nm_setting_ip_config_get_route_metric (nm_connection_get_setting_ip6_config (priv->connection)); - return nm_device_get_ip6_route_metric (parent_dev); + if (route_metric >= 0) + return route_metric; } + + if ( priv->ip_ifindex + || !(parent_dev = nm_active_connection_get_device (NM_ACTIVE_CONNECTION (connection)))) + return NM_VPN_ROUTE_METRIC_DEFAULT; + + return nm_device_get_ip6_route_metric (parent_dev); } static void