connection: Fix host route to VPN server
authorDaniel Wagner <daniel.wagner@bmw-carit.de>
Mon, 7 May 2012 15:31:03 +0000 (17:31 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Tue, 8 May 2012 14:47:18 +0000 (07:47 -0700)
The kernel will ignore host routes which are bogus.
In case of a PtP connection such as PPP for cellular the
gateway address should not be used.

src/connection.c

index f4abd57..712a4be 100644 (file)
@@ -832,6 +832,7 @@ int __connman_connection_gateway_add(struct connman_service *service,
        }
 
        if (service_type == CONNMAN_SERVICE_TYPE_VPN) {
+               char *dest;
 
                if (type == CONNMAN_IPCONFIG_TYPE_IPV4) {
                        if (new_gateway->ipv4_gateway != NULL)
@@ -844,18 +845,28 @@ int __connman_connection_gateway_add(struct connman_service *service,
                         * the VPN. The route might already exist depending
                         * on network topology.
                         */
+                       if (g_strcmp0(active_gateway->ipv4_gateway->gateway, "0.0.0.0") != 0)
+                               dest = active_gateway->ipv4_gateway->gateway;
+                       else
+                               dest = NULL;
+
                        connman_inet_add_host_route(active_gateway->index,
                                        gateway,
-                                       active_gateway->ipv4_gateway->gateway);
+                                       dest);
 
                } else if (type == CONNMAN_IPCONFIG_TYPE_IPV6) {
                        if (new_gateway->ipv6_gateway != NULL)
                                set_vpn_routes(new_gateway->ipv6_gateway,
                                        service, gateway, type, peer);
 
+                       if (g_strcmp0(active_gateway->ipv6_gateway->gateway, "::") != 0)
+                               dest = active_gateway->ipv6_gateway->gateway;
+                       else
+                               dest = NULL;
+
                        connman_inet_add_ipv6_host_route(active_gateway->index,
                                        gateway,
-                                       active_gateway->ipv6_gateway->gateway);
+                                       dest);
                }
 
        } else {