Revert "Added support to delete ipv6 route using netlink." 74/189074/1
authorSeonah Moon <seonah1.moon@samsung.com>
Thu, 13 Sep 2018 07:14:36 +0000 (16:14 +0900)
committerSeonah Moon <seonah1.moon@samsung.com>
Thu, 13 Sep 2018 07:15:13 +0000 (16:15 +0900)
This reverts commit a259e3e99a5382699c19fc50288bf46eb03f18a4.

Change-Id: I488cb1554159ac05edfdcd6e2c8640bdf9ff78de

include/util.h
src/network-state.c
src/utils/util.c

index 56a7a8b..f1efcce 100755 (executable)
@@ -84,7 +84,7 @@ int netconfig_execute_file_no_wait(const char *file_path,
                char *const args[]);
 int netconfig_execute_clatd(const char *file_path, char *const args[]);
 int netconfig_add_route_ipv6(gchar *interface, gchar *gateway);
-int netconfig_del_route_ipv6(gchar *interface, gchar *gateway);
+int netconfig_del_route_ipv6(gchar *ip_addr, gchar *interface, gchar *gateway, unsigned char prefix_len);
 int netconfig_add_route_ipv4(gchar *ip_addr, gchar *subnet, gchar *interface, gint address_family);
 int netconfig_del_route_ipv4(gchar *ip_addr, gchar *subnet, gchar *interface, gint address_family);
 
index bd6c95a..48c6778 100755 (executable)
@@ -1356,6 +1356,10 @@ static gboolean handle_remove_route(
        gchar *const args[] = { "/sbin/route", "del", "-net", ip_addr, gw_str,
                "netmask", netmask, "dev", interface, NULL };
        char *const envs[] = { NULL };
+       const char* buf = NULL;
+       char* ch = NULL;
+       int prefix_len = 0;
+       int pos = 0;
 
        DBG("ip_addr(%s), netmask(%s), interface(%s), gateway(%s)", ip_addr, netmask, interface, gateway);
 
@@ -1379,7 +1383,17 @@ static gboolean handle_remove_route(
                        return TRUE;
                }
 
-               if (netconfig_del_route_ipv6(interface, gateway) < 0) {
+               buf = ip_addr;
+               ch = strchr(buf, '/');
+               pos = ch - buf + 1;
+               if (ch) {
+                       prefix_len = atoi(ch + 1);
+                       ip_addr[pos-1] = '\0';
+               } else {
+                       prefix_len = 128;
+               }
+
+               if (netconfig_del_route_ipv6(ip_addr, interface, gateway, prefix_len) < 0) {
                        DBG("Failed to remove the route");
                        netconfig_error_permission_denied(context);
                        return TRUE;
index abf98a3..9df35d6 100755 (executable)
@@ -1095,23 +1095,56 @@ int netconfig_add_route_ipv6(gchar *interface, gchar *gateway)
        return 0;
 }
 
-int netconfig_del_route_ipv6(gchar *interface, gchar *gateway)
+int netconfig_del_route_ipv6(gchar *ip_addr, gchar *interface, gchar *gateway, unsigned char prefix_len)
 {
-       int ret = __netconfig_rtnl_open(&rth, 0, NETLINK_ROUTE);
-       if (ret < 0) {
-               DBG("Failed to open rtnl socket");
+       struct in6_rtmsg rt;
+       int fd = 0;
+       int err = 0;
+
+       memset(&rt, 0, sizeof(rt));
+
+       rt.rtmsg_dst_len = prefix_len;
+
+       rt.rtmsg_flags = RTF_UP | RTF_HOST;
+
+       if (inet_pton(AF_INET6, ip_addr, &rt.rtmsg_dst) < 0) {
+               err = -errno;
+               return err;
+       }
+
+       if (gateway != NULL) {
+               rt.rtmsg_flags |= RTF_GATEWAY;
+               if (inet_pton(AF_INET6, gateway, &rt.rtmsg_gateway) < 0) {
+                       err = -errno;
+                       return err;
+               }
+       }
+
+       rt.rtmsg_metric = 1;
+
+       fd = socket(AF_INET6, SOCK_DGRAM, 0);
+       if (fd < 0)
                return -1;
+
+       rt.rtmsg_ifindex = 0;
+
+       if (interface) {
+               struct ifreq ifr;
+               memset(&ifr, 0, sizeof(ifr));
+               strncpy(ifr.ifr_name, interface, sizeof(ifr.ifr_name)-1);
+               ioctl(fd, SIOCGIFINDEX, &ifr);
+               rt.rtmsg_ifindex = ifr.ifr_ifindex;
        }
 
-       ret = __netconfig_iproute_modify(RTM_DELROUTE, NLM_F_CREATE|NLM_F_EXCL, interface, gateway);
-       if (ret < 0) {
-               DBG("Failed to delete ipv6 route.");
-               __netconfig_rtnl_close();
+       if ((err = ioctl(fd, SIOCDELRT, &rt)) < 0) {
+               DBG("Failed to del route: %d\n", err);
+               close(fd);
                return -1;
        }
 
-       __netconfig_rtnl_close();
-       return 0;
+       close(fd);
+
+       return 1;
 }
 
 gboolean handle_launch_direct(Wifi *wifi, GDBusMethodInvocation *context)