From: Seonah Moon Date: Thu, 13 Sep 2018 07:14:36 +0000 (+0900) Subject: Revert "Added support to delete ipv6 route using netlink." X-Git-Tag: submit/tizen/20180918.091131~3 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fconnectivity%2Fnet-config.git;a=commitdiff_plain;h=5462712d8c437c24e284906be695372a7b42df2a Revert "Added support to delete ipv6 route using netlink." This reverts commit a259e3e99a5382699c19fc50288bf46eb03f18a4. Change-Id: I488cb1554159ac05edfdcd6e2c8640bdf9ff78de --- diff --git a/include/util.h b/include/util.h index 56a7a8b..f1efcce 100755 --- a/include/util.h +++ b/include/util.h @@ -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); diff --git a/src/network-state.c b/src/network-state.c index bd6c95a..48c6778 100755 --- a/src/network-state.c +++ b/src/network-state.c @@ -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; diff --git a/src/utils/util.c b/src/utils/util.c index abf98a3..9df35d6 100755 --- a/src/utils/util.c +++ b/src/utils/util.c @@ -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)