diff options
author | Thomas Haller <thaller@redhat.com> | 2014-10-23 20:00:06 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2014-10-29 17:33:13 +0100 |
commit | 70514014d4398988f345e9fce0a3e4b84924513b (patch) | |
tree | d07feca6439104f067564dcfe7d4ece781d5845d | |
parent | 70c5784443f07b11e72da14d6b4fd5be3c6be331 (diff) | |
download | NetworkManager-70514014d4398988f345e9fce0a3e4b84924513b.tar.gz |
fixup! core: add manager for default route and support multiple default routes
-rw-r--r-- | src/devices/nm-device.c | 28 | ||||
-rw-r--r-- | src/nm-default-route-manager.c | 8 |
2 files changed, 20 insertions, 16 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 2e9ce8257d..13df710fd3 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -2704,11 +2704,12 @@ ip4_config_merge_and_apply (NMDevice *self, } /* add the default route */ - if ( (s_ip4 = nm_connection_get_setting_ip4_config (connection)) - && !nm_setting_ip4_config_get_never_default (s_ip4)) { - + s_ip4 = nm_connection_get_setting_ip4_config (connection); + if ( s_ip4 + && !nm_setting_ip4_config_get_never_default (s_ip4) + && (gw_addr = nm_ip4_config_get_gateway (composite)) + && (nm_device_get_device_type (self) != NM_DEVICE_TYPE_MODEM)) { route_metric = nm_device_get_ip4_route_metric (self); - gw_addr = nm_ip4_config_get_gateway (composite); mss = nm_ip4_config_get_mss (composite); memset (&route, 0, sizeof (route)); @@ -2721,8 +2722,9 @@ ip4_config_merge_and_apply (NMDevice *self, nm_ip4_config_add_route (composite, &route); if ( gw_addr - && !nm_ip4_config_get_direct_route_for_host (composite, gw_addr)) { - /* To configure a route via gateway, the gateway must be onlink. + && !nm_ip4_config_get_direct_route_for_host (composite, gw_addr) + && !nm_settings_connection_get_nm_generated_assumed (NM_SETTINGS_CONNECTION (connection))) { + /* To configure a route via gateway, the gateway must be directly reachable. * Add this route too. */ route.network = gw_addr; route.plen = 32; @@ -3240,11 +3242,12 @@ ip6_config_merge_and_apply (NMDevice *self, } /* add the default route */ - if ( (s_ip6 = nm_connection_get_setting_ip6_config (connection)) - && !nm_setting_ip6_config_get_never_default (s_ip6)) { - + s_ip6 = nm_connection_get_setting_ip6_config (connection); + if ( s_ip6 + && !nm_setting_ip6_config_get_never_default (s_ip6) + && (gw_addr = nm_ip6_config_get_gateway (composite)) + && (nm_device_get_device_type (self) != NM_DEVICE_TYPE_MODEM)) { route_metric = nm_device_get_ip6_route_metric (self); - gw_addr = nm_ip6_config_get_gateway (composite); mss = nm_ip6_config_get_mss (composite); memset (&route, 0, sizeof (route)); @@ -3257,8 +3260,9 @@ ip6_config_merge_and_apply (NMDevice *self, nm_ip6_config_add_route (composite, &route); if ( gw_addr - && !nm_ip6_config_get_direct_route_for_host (composite, gw_addr)) { - /* To configure a route via gateway, the gateway must be onlink. + && !nm_ip6_config_get_direct_route_for_host (composite, gw_addr) + && !nm_settings_connection_get_nm_generated_assumed (NM_SETTINGS_CONNECTION (connection))) { + /* To configure a route via gateway, the gateway must be directly reachable. * Add this route too. */ route.network = *gw_addr; route.plen = 128; diff --git a/src/nm-default-route-manager.c b/src/nm-default-route-manager.c index ebf8f5a1ad..0c94db6928 100644 --- a/src/nm-default-route-manager.c +++ b/src/nm-default-route-manager.c @@ -720,10 +720,10 @@ nm_default_route_manager_class_init (NMDefaultRouteManagerClass *klass) /* Signals */ /* The first parameter determins which address family changed (IF_INET, IF_INET6 or both (0)). - * The second parameter is a boolean to to indicate, that the most preferred device changed. - * The parameter indicates, whether the default route switched from one device - * to another (it is not true, if the best default route changed but stayed on - * the same device). */ + * The second parameter is a boolean to indicate, that the most preferred device changed. + * This parameter indicates, whether the default route switched from one device + * to another (it is not set to %TRUE, if the best default route changed but still + * stayed on the same device). */ signals[SIGNAL_CHANGED] = g_signal_new (NM_DEFAULT_ROUTE_MANAGER_CHANGED, G_OBJECT_CLASS_TYPE (object_class), |