summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2014-10-23 20:00:06 +0200
committerThomas Haller <thaller@redhat.com>2014-10-29 17:33:13 +0100
commit70514014d4398988f345e9fce0a3e4b84924513b (patch)
treed07feca6439104f067564dcfe7d4ece781d5845d
parent70c5784443f07b11e72da14d6b4fd5be3c6be331 (diff)
downloadNetworkManager-70514014d4398988f345e9fce0a3e4b84924513b.tar.gz
fixup! core: add manager for default route and support multiple default routes
-rw-r--r--src/devices/nm-device.c28
-rw-r--r--src/nm-default-route-manager.c8
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),