summaryrefslogtreecommitdiff
path: root/src/inet.c
diff options
context:
space:
mode:
authorSamuel Ortiz <sameo@linux.intel.com>2010-07-08 19:08:14 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2010-07-12 20:44:26 +0200
commitec2adfa818da0d6845ff5f0ad1a8e1017cf4461d (patch)
tree6cac6ef2f4075ec0e4ebdf2117447a49c79bbc46 /src/inet.c
parent20ad3ceb66efd6c3e9d6225a2b0c0c1fc2da41c8 (diff)
downloadconnman-ec2adfa818da0d6845ff5f0ad1a8e1017cf4461d.tar.gz
connman-ec2adfa818da0d6845ff5f0ad1a8e1017cf4461d.tar.bz2
connman-ec2adfa818da0d6845ff5f0ad1a8e1017cf4461d.zip
Factorize host route setting routine
Diffstat (limited to 'src/inet.c')
-rw-r--r--src/inet.c60
1 files changed, 7 insertions, 53 deletions
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));