diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2010-07-08 19:08:14 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2010-07-12 20:44:26 +0200 |
commit | ec2adfa818da0d6845ff5f0ad1a8e1017cf4461d (patch) | |
tree | 6cac6ef2f4075ec0e4ebdf2117447a49c79bbc46 /src/inet.c | |
parent | 20ad3ceb66efd6c3e9d6225a2b0c0c1fc2da41c8 (diff) | |
download | connman-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.c | 60 |
1 files changed, 7 insertions, 53 deletions
@@ -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)); |