diff options
author | Dan Winship <danw@gnome.org> | 2014-06-09 09:36:01 -0400 |
---|---|---|
committer | Dan Winship <danw@gnome.org> | 2014-06-10 09:14:48 -0400 |
commit | cdd09286d73919d64f0f9481821a6f5185f7876b (patch) | |
tree | 387b8ac8c998c5fee738a9f15417560878cf1d1f | |
parent | 7c256586da6a9514c351379ec7342e263f212352 (diff) | |
download | NetworkManager-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.c | 14 | ||||
-rw-r--r-- | src/nm-ip4-config.c | 4 | ||||
-rw-r--r-- | src/nm-ip4-config.h | 2 | ||||
-rw-r--r-- | src/nm-ip6-config.c | 4 | ||||
-rw-r--r-- | src/nm-ip6-config.h | 2 | ||||
-rw-r--r-- | src/vpn-manager/nm-vpn-connection.c | 8 |
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); |