summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/inet.h3
-rw-r--r--src/connection.c8
-rw-r--r--src/inet.c60
3 files changed, 12 insertions, 59 deletions
diff --git a/include/inet.h b/include/inet.h
index b5bf8a5f..207410ae 100644
--- a/include/inet.h
+++ b/include/inet.h
@@ -44,8 +44,7 @@ connman_bool_t connman_inet_is_cfg80211(int index);
int connman_inet_set_address(int index, struct connman_ipaddress *ipaddress);
int connman_inet_clear_address(int index);
-int connman_inet_add_host_route_vpn(int index, const char *gateway, const char *host);
-int connman_inet_add_host_route(int index, const char *host);
+int connman_inet_add_host_route(int index, const char *host, const char *gateway);
int connman_inet_del_host_route(int index, const char *host);
int connman_inet_set_gateway_address(int index, const char *gateway);
int connman_inet_clear_gateway_address(int index, const char *gateway);
diff --git a/src/connection.c b/src/connection.c
index 154076b0..82648d65 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -157,7 +157,7 @@ static void set_default_gateway(struct gateway_data *data)
goto done;
}
- connman_inet_add_host_route(element->index, data->gateway);
+ connman_inet_add_host_route(element->index, data->gateway, NULL);
if (connman_inet_set_gateway_address(element->index, data->gateway) < 0)
return;
@@ -301,9 +301,9 @@ static int connection_probe(struct connman_element *element)
}
if (new_gateway->vpn == TRUE) {
- connman_inet_add_host_route_vpn(active_gateway->index,
- active_gateway->gateway,
- new_gateway->gateway);
+ connman_inet_add_host_route(active_gateway->index,
+ new_gateway->gateway,
+ active_gateway->gateway);
}
if (new_gateway->order >= active_gateway->order) {
diff --git a/src/inet.c b/src/inet.c
index 980bd481..cfb7f92f 100644
--- a/src/inet.c
+++ b/src/inet.c
@@ -612,58 +612,7 @@ int connman_inet_clear_address(int index)
return 0;
}
-int connman_inet_add_host_route_vpn(int index, const char *gateway, const char *host)
-{
- struct ifreq ifr;
- struct rtentry rt;
- struct sockaddr_in addr;
- int sk, err;
-
- sk = socket(PF_INET, SOCK_DGRAM, 0);
- if (sk < 0)
- return -1;
-
- memset(&ifr, 0, sizeof(ifr));
- ifr.ifr_ifindex = index;
-
- if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {
- close(sk);
- return -1;
- }
-
- DBG("ifname %s", ifr.ifr_name);
-
- memset(&rt, 0, sizeof(rt));
- rt.rt_flags = RTF_UP | RTF_HOST | RTF_GATEWAY;
-
- memset(&addr, 0, sizeof(addr));
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = inet_addr(host);
- memcpy(&rt.rt_dst, &addr, sizeof(rt.rt_dst));
-
- memset(&addr, 0, sizeof(addr));
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = inet_addr(gateway);;
- memcpy(&rt.rt_gateway, &addr, sizeof(rt.rt_gateway));
-
- memset(&addr, 0, sizeof(addr));
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = INADDR_ANY;
- memcpy(&rt.rt_genmask, &addr, sizeof(rt.rt_genmask));
-
- rt.rt_dev = ifr.ifr_name;
-
- err = ioctl(sk, SIOCADDRT, &rt);
- if (err < 0)
- connman_error("Adding host route failed (%s)",
- strerror(errno));
-
- close(sk);
-
- return err;
-}
-
-int connman_inet_add_host_route(int index, const char *host)
+int connman_inet_add_host_route(int index, const char *host, const char *gateway)
{
struct ifreq ifr;
struct rtentry rt;
@@ -686,6 +635,8 @@ int connman_inet_add_host_route(int index, const char *host)
memset(&rt, 0, sizeof(rt));
rt.rt_flags = RTF_UP | RTF_HOST;
+ if (gateway != NULL)
+ rt.rt_flags |= RTF_GATEWAY;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
@@ -694,7 +645,10 @@ int connman_inet_add_host_route(int index, const char *host)
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = INADDR_ANY;
+ if (gateway != NULL)
+ addr.sin_addr.s_addr = inet_addr(gateway);
+ else
+ addr.sin_addr.s_addr = INADDR_ANY;
memcpy(&rt.rt_gateway, &addr, sizeof(rt.rt_gateway));
memset(&addr, 0, sizeof(addr));