gboolean vpn;
char *vpn_ip;
int vpn_phy_index;
+ char *vpn_phy_ip;
};
struct gateway_data {
config->gateway = g_strdup(gateway);
config->vpn_ip = NULL;
+ config->vpn_phy_ip = NULL;
config->vpn = FALSE;
config->vpn_phy_index = -1;
config->active = FALSE;
data->ipv4_gateway->vpn == TRUE) {
connman_inet_set_gateway_address(data->index,
data->ipv4_gateway->vpn_ip);
+ connman_inet_add_host_route(data->ipv4_gateway->vpn_phy_index,
+ data->ipv4_gateway->vpn_ip,
+ data->ipv4_gateway->vpn_phy_ip);
data->ipv4_gateway->active = TRUE;
__connman_service_indicate_default(data->service);
data->ipv6_gateway->vpn == TRUE) {
connman_inet_set_ipv6_gateway_address(data->index,
data->ipv6_gateway->vpn_ip);
+ connman_inet_add_host_route(data->ipv6_gateway->vpn_phy_index,
+ data->ipv6_gateway->vpn_ip,
+ data->ipv6_gateway->vpn_phy_ip);
data->ipv6_gateway->active = TRUE;
__connman_service_indicate_default(data->service);
if (data->ipv4_gateway != NULL) {
g_free(data->ipv4_gateway->gateway);
g_free(data->ipv4_gateway->vpn_ip);
+ g_free(data->ipv4_gateway->vpn_phy_ip);
g_free(data->ipv4_gateway);
}
if (data->ipv6_gateway != NULL) {
g_free(data->ipv6_gateway->gateway);
g_free(data->ipv6_gateway->vpn_ip);
+ g_free(data->ipv6_gateway->vpn_phy_ip);
g_free(data->ipv6_gateway);
}
else if (gateway != NULL)
new_gateway->ipv4_gateway->vpn_ip =
g_strdup(gateway);
- if (active_gateway)
+ if (active_gateway) {
+ const char *new_ipv4_gateway;
+
+ new_ipv4_gateway =
+ active_gateway->ipv4_gateway->gateway;
+ if (new_ipv4_gateway != NULL &&
+ g_strcmp0(new_ipv4_gateway,
+ "0.0.0.0") != 0)
+ new_gateway->ipv4_gateway->vpn_phy_ip =
+ g_strdup(new_ipv4_gateway);
+
new_gateway->ipv4_gateway->vpn_phy_index =
active_gateway->index;
+ }
} else if (type == CONNMAN_IPCONFIG_TYPE_IPV6 &&
new_gateway->ipv6_gateway != NULL) {
else if (gateway != NULL)
new_gateway->ipv6_gateway->vpn_ip =
g_strdup(gateway);
- if (active_gateway)
+ if (active_gateway) {
+ const char *new_ipv6_gateway;
+
+ new_ipv6_gateway =
+ active_gateway->ipv6_gateway->gateway;
+ if (new_ipv6_gateway != NULL &&
+ g_strcmp0(new_ipv6_gateway, "::") != 0)
+ new_gateway->ipv6_gateway->vpn_phy_ip =
+ g_strdup(new_ipv6_gateway);
+
new_gateway->ipv6_gateway->vpn_phy_index =
active_gateway->index;
+ }
}
} else {
if (type == CONNMAN_IPCONFIG_TYPE_IPV4 &&