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