From ec2adfa818da0d6845ff5f0ad1a8e1017cf4461d Mon Sep 17 00:00:00 2001 From: Samuel Ortiz Date: Thu, 8 Jul 2010 19:08:14 +0200 Subject: Factorize host route setting routine --- include/inet.h | 3 +-- src/connection.c | 8 ++++---- src/inet.c | 60 +++++++------------------------------------------------- 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)); -- cgit v1.2.3