summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2014-06-09 09:36:01 -0400
committerDan Winship <danw@gnome.org>2014-06-10 09:14:48 -0400
commitcdd09286d73919d64f0f9481821a6f5185f7876b (patch)
tree387b8ac8c998c5fee738a9f15417560878cf1d1f
parent7c256586da6a9514c351379ec7342e263f212352 (diff)
downloadNetworkManager-cdd09286d73919d64f0f9481821a6f5185f7876b.tar.gz
core: fix metrics of user-added routes
Adding a route with a metric of 0 to an IP4 or IP6 setting used to implicitly mean "use the default metric for the device", but this got broken by 722c9034. Fix that. https://bugzilla.gnome.org/show_bug.cgi?id=731402
-rw-r--r--src/devices/nm-device.c14
-rw-r--r--src/nm-ip4-config.c4
-rw-r--r--src/nm-ip4-config.h2
-rw-r--r--src/nm-ip6-config.c4
-rw-r--r--src/nm-ip6-config.h2
-rw-r--r--src/vpn-manager/nm-vpn-connection.c8
6 files changed, 24 insertions, 10 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index a6b4b548f0..b1bf887ebf 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -2629,8 +2629,11 @@ ip4_config_merge_and_apply (NMDevice *self,
/* Merge user overrides into the composite config */
connection = nm_device_get_connection (self);
- if (connection)
- nm_ip4_config_merge_setting (composite, nm_connection_get_setting_ip4_config (connection));
+ if (connection) {
+ nm_ip4_config_merge_setting (composite,
+ nm_connection_get_setting_ip4_config (connection),
+ nm_device_get_priority (self));
+ }
/* Allow setting MTU etc */
if (commit) {
@@ -3071,8 +3074,11 @@ ip6_config_merge_and_apply (NMDevice *self,
/* Merge user overrides into the composite config */
connection = nm_device_get_connection (self);
- if (connection)
- nm_ip6_config_merge_setting (composite, nm_connection_get_setting_ip6_config (connection));
+ if (connection) {
+ nm_ip6_config_merge_setting (composite,
+ nm_connection_get_setting_ip6_config (connection),
+ nm_device_get_priority (self));
+ }
nm_ip6_config_addresses_sort (composite,
priv->rdisc ? priv->rdisc_use_tempaddr : NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN);
diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c
index 6a7904328a..87f3761a68 100644
--- a/src/nm-ip4-config.c
+++ b/src/nm-ip4-config.c
@@ -296,7 +296,7 @@ nm_ip4_config_commit (const NMIP4Config *config, int ifindex)
}
void
-nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIP4Config *setting)
+nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIP4Config *setting, int default_route_metric)
{
guint naddresses, nroutes, nnameservers, nsearches;
int i;
@@ -355,6 +355,8 @@ nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIP4Config *setting)
route.plen = nm_ip4_route_get_prefix (s_route);
route.gateway = nm_ip4_route_get_next_hop (s_route);
route.metric = nm_ip4_route_get_metric (s_route);
+ if (!route.metric)
+ route.metric = default_route_metric;
route.source = NM_PLATFORM_SOURCE_USER;
nm_ip4_config_add_route (config, &route);
diff --git a/src/nm-ip4-config.h b/src/nm-ip4-config.h
index d0e0df028e..c9096bb389 100644
--- a/src/nm-ip4-config.h
+++ b/src/nm-ip4-config.h
@@ -61,7 +61,7 @@ const char * nm_ip4_config_get_dbus_path (const NMIP4Config *config);
/* Integration with nm-platform and nm-setting */
NMIP4Config *nm_ip4_config_capture (int ifindex, gboolean capture_resolv_conf);
gboolean nm_ip4_config_commit (const NMIP4Config *config, int ifindex);
-void nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIP4Config *setting);
+void nm_ip4_config_merge_setting (NMIP4Config *config, NMSettingIP4Config *setting, int default_route_metric);
NMSetting *nm_ip4_config_create_setting (const NMIP4Config *config);
/* Utility functions */
diff --git a/src/nm-ip6-config.c b/src/nm-ip6-config.c
index 66fa395352..aaf5e70163 100644
--- a/src/nm-ip6-config.c
+++ b/src/nm-ip6-config.c
@@ -401,7 +401,7 @@ nm_ip6_config_commit (const NMIP6Config *config, int ifindex)
}
void
-nm_ip6_config_merge_setting (NMIP6Config *config, NMSettingIP6Config *setting)
+nm_ip6_config_merge_setting (NMIP6Config *config, NMSettingIP6Config *setting, int default_route_metric)
{
guint naddresses, nroutes, nnameservers, nsearches;
int i;
@@ -457,6 +457,8 @@ nm_ip6_config_merge_setting (NMIP6Config *config, NMSettingIP6Config *setting)
route.plen = nm_ip6_route_get_prefix (s_route);
route.gateway = *nm_ip6_route_get_next_hop (s_route);
route.metric = nm_ip6_route_get_metric (s_route);
+ if (!route.metric)
+ route.metric = default_route_metric;
route.source = NM_PLATFORM_SOURCE_USER;
nm_ip6_config_add_route (config, &route);
diff --git a/src/nm-ip6-config.h b/src/nm-ip6-config.h
index 8fb03e2014..b7b9d83ec7 100644
--- a/src/nm-ip6-config.h
+++ b/src/nm-ip6-config.h
@@ -60,7 +60,7 @@ const char * nm_ip6_config_get_dbus_path (const NMIP6Config *config);
/* Integration with nm-platform and nm-setting */
NMIP6Config *nm_ip6_config_capture (int ifindex, gboolean capture_resolv_conf, NMSettingIP6ConfigPrivacy use_temporary);
gboolean nm_ip6_config_commit (const NMIP6Config *config, int ifindex);
-void nm_ip6_config_merge_setting (NMIP6Config *config, NMSettingIP6Config *setting);
+void nm_ip6_config_merge_setting (NMIP6Config *config, NMSettingIP6Config *setting, int default_route_metric);
NMSetting *nm_ip6_config_create_setting (const NMIP6Config *config);
/* Utility functions */
diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c
index f7476b411a..d66dcfdb73 100644
--- a/src/vpn-manager/nm-vpn-connection.c
+++ b/src/vpn-manager/nm-vpn-connection.c
@@ -1208,7 +1208,9 @@ nm_vpn_connection_ip4_config_get (DBusGProxy *proxy,
nm_ip4_config_set_never_default (config, g_value_get_boolean (val));
/* Merge in user overrides from the NMConnection's IPv4 setting */
- nm_ip4_config_merge_setting (config, nm_connection_get_setting_ip4_config (priv->connection));
+ nm_ip4_config_merge_setting (config,
+ nm_connection_get_setting_ip4_config (priv->connection),
+ vpn_routing_metric (connection));
priv->ip4_config = config;
nm_ip4_config_export (config);
@@ -1352,7 +1354,9 @@ nm_vpn_connection_ip6_config_get (DBusGProxy *proxy,
nm_ip6_config_set_never_default (config, g_value_get_boolean (val));
/* Merge in user overrides from the NMConnection's IPv6 setting */
- nm_ip6_config_merge_setting (config, nm_connection_get_setting_ip6_config (priv->connection));
+ nm_ip6_config_merge_setting (config,
+ nm_connection_get_setting_ip6_config (priv->connection),
+ vpn_routing_metric (connection));
priv->ip6_config = config;
nm_ip6_config_export (config);