Revert "Added support to delete ipv6 route using netlink."
[platform/core/connectivity/net-config.git] / src / utils / util.c
index 9e1b46a..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)
@@ -1218,7 +1251,7 @@ gboolean handle_launch_mdns(Network *object, GDBusMethodInvocation *context,
        if (execute_mdnsd_script("start") < 0) {
                ERR("Failed to launch mdnsresponder daemon");
                netconfig_error_invalid_parameter(context);
-               return FALSE;
+               return TRUE;
        }
 
        mdnsd_ref_count++;
@@ -1587,6 +1620,9 @@ bool netconfig_check_feature_supported(netconfig_supported_feature_e feature)
                case NETCONFIG_SUPPORTED_FEATURE_WIFI_DIRECT:
                        key = WIFI_DIRECT_FEATURE;
                        break;
+               case NETCONFIG_SUPPORTED_FEATURE_WIFI_SOFTAP:
+                       key = WIFI_SOFTAP_FEATURE;
+                       break;
                default:
                        ERR("Uknown feature");
                        return false;