Factorize host route setting routine
authorSamuel Ortiz <sameo@linux.intel.com>
Thu, 8 Jul 2010 17:08:14 +0000 (19:08 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Mon, 12 Jul 2010 18:44:26 +0000 (20:44 +0200)
include/inet.h
src/connection.c
src/inet.c

index b5bf8a5..207410a 100644 (file)
@@ -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);
index 154076b..82648d6 100644 (file)
@@ -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) {
index 980bd48..cfb7f92 100644 (file)
@@ -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));