QSSI Changes

Change-Id: I0d034ada4dd9276a619067f36d3c1bee68875565
diff --git a/Makefile.am b/Makefile.am
deleted file mode 100755
index f2ad6f9..0000000
--- a/Makefile.am
+++ /dev/null
@@ -1,11 +0,0 @@
-# Makefile.am - Automake script for Data-opensource
-#
-
-ACLOCAL_AMFLAGS = -I m4
-AUTOMAKE_OPTIONS = foreign
-SUBDIRS = rmnetctl/src rmnetctl/cli
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = data-oss.pc
-EXTRA_DIST = $(pkgconfig_DATA)
-
diff --git a/configure.ac b/configure.ac
deleted file mode 100644
index b6901ee..0000000
--- a/configure.ac
+++ /dev/null
@@ -1,51 +0,0 @@
-#                                               -*- Autoconf -*-
-# Process this file with autoconf to produce a configure script.
-AC_PREREQ([2.65])
-AC_INIT([data-oss], [1.0.0])
-AM_INIT_AUTOMAKE
-AC_OUTPUT(Makefile rmnetctl/src/Makefile rmnetctl/cli/Makefile data-oss.pc)
-AC_CONFIG_SRCDIR([rmnetctl/src/librmnetctl.c])
-#AC_CONFIG_HEADERS([config.h])
-AC_CONFIG_MACRO_DIR([m4])
-
-# Checks for programs.
-AC_PROG_CC
-AC_PROG_LIBTOOL
-PKG_PROG_PKG_CONFIG
-
-# Checks for libraries.
-AC_ARG_WITH(sanitized-headers,
-      AS_HELP_STRING([--with-sanitized-headers=DIR],
-         [Specify the location of the sanitized Linux headers]),
-      [CPPFLAGS="$CPPFLAGS -idirafter $withval"])
-
-AC_ARG_WITH([glib],
-      AC_HELP_STRING([--with-glib],
-         [enable glib, building HLOS systems which use glib]))
-
-if (test "x${with_glib}" = "xyes"); then
-        AC_DEFINE(ENABLE_USEGLIB, 1, [Define if HLOS systems uses glib])
-        PKG_CHECK_MODULES(GTHREAD, gthread-2.0 >= 2.16, dummy=yes,
-                                AC_MSG_ERROR(GThread >= 2.16 is required))
-        PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16, dummy=yes,
-                                AC_MSG_ERROR(GLib >= 2.16 is required))
-        GLIB_CFLAGS="$GLIB_CFLAGS $GTHREAD_CFLAGS"
-        GLIB_LIBS="$GLIB_LIBS $GTHREAD_LIBS"
-        AC_SUBST(GLIB_CFLAGS)
-        AC_SUBST(GLIB_LIBS)
-fi
-
-AM_CONDITIONAL(USE_GLIB, test "x${with_glib}" = "xyes")
-
-# Checks for header files.
-AC_CHECK_HEADERS([sys/socket.h stdint.h linux/netlink.h string.h stdio.h unistd.h stdlib.h linux/rmnet_data.h])
-
-# Checks for typedefs, structures, and compiler characteristics.
-AC_TYPE_OFF_T
-
-# Checks for library functions.
-AC_FUNC_MALLOC
-
-#AC_FUNC_MMAP
-#AC_CHECK_FUNCS([memset malloc sendto recvfrom ])
-AC_OUTPUT
diff --git a/data-oss.pc.in b/data-oss.pc.in
deleted file mode 100644
index 7c268df..0000000
--- a/data-oss.pc.in
+++ /dev/null
@@ -1,10 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: data-oss
-Description: Data Opensource Components
-Version: @VERSION@
-Libs: -L${libdir} -lrmnetctl
-Cflags: -I${includedir}/data-oss
diff --git a/datatop/Android.mk b/datatop/Android.mk
deleted file mode 100644
index 8338432..0000000
--- a/datatop/Android.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-include $(call all-subdir-makefiles)
-
diff --git a/datatop/Makefile.am b/datatop/Makefile.am
deleted file mode 100644
index 15ea2b3..0000000
--- a/datatop/Makefile.am
+++ /dev/null
@@ -1,3 +0,0 @@
-AUTOMAKE_OPTIONS = foreign
-
-SUBDIRS = src
diff --git a/datatop/autogen.sh b/datatop/autogen.sh
deleted file mode 100644
index 7141954..0000000
--- a/datatop/autogen.sh
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/sh
-
-# Copyright (c) 2015, The Linux Foundation. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above
-#       copyright notice, this list of conditions and the following
-#       disclaimer in the documentation and/or other materials provided
-#       with the distribution.
-#     * Neither the name of The Linux Foundation nor the names of its
-#       contributors may be used to endorse or promote products derived
-#       from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-ACLOCAL=`which aclocal`
-AUTOCONF=`which autoconf`
-AUTOMAKE=`which automake`
-
-if [ ! -x "$ACLOCAL" ]; then
-	echo "Missing 'aclocal'; not in path. Make sure it is installed!"
-	exit -1
-fi
-
-if [ ! -x "$AUTOCONF" ]; then
-	echo "Missing 'autoconf'; not in path. Make sure it is installed!"
-	exit -1
-fi
-
-if [ ! -x "$AUTOMAKE" ]; then
-	echo "Missing 'automake'; not in path. Make sure it is installed!"
-	exit -1
-fi
-
-$ACLOCAL
-$AUTOCONF
-$AUTOMAKE -a
diff --git a/datatop/configure.ac b/datatop/configure.ac
deleted file mode 100644
index b9f9abf..0000000
--- a/datatop/configure.ac
+++ /dev/null
@@ -1,56 +0,0 @@
-#                                               -*- Autoconf -*-
-
-# Copyright (c) 2015, The Linux Foundation. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above
-#       copyright notice, this list of conditions and the following
-#       disclaimer in the documentation and/or other materials provided
-#       with the distribution.
-#     * Neither the name of The Linux Foundation nor the names of its
-#       contributors may be used to endorse or promote products derived
-#       from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# Process this file with autoconf to produce a configure script.
-
-AC_PREREQ([2.68])
-AC_INIT([Data Top], [1.0.4], [harouth@codeaurora.org])
-AC_CONFIG_SRCDIR([src/datatop.c])
-#AC_CONFIG_HEADERS([src/config.h])
-AC_CONFIG_FILES([Makefile
-		 src/Makefile])
-
-# Checks for programs.
-AC_PROG_CC
-
-# Checks for libraries.
-
-# Checks for header files.
-AC_CHECK_HEADERS([stdlib.h string.h])
-
-# Checks for typedefs, structures, and compiler characteristics.
-
-# Checks for library functions.
-AC_FUNC_MALLOC
-
-
-#### Generate Makefile Data
-AM_INIT_AUTOMAKE([datatop], [1.0.4])
-
-AC_OUTPUT
diff --git a/datatop/src/Android.mk b/datatop/src/Android.mk
deleted file mode 100644
index f61e654..0000000
--- a/datatop/src/Android.mk
+++ /dev/null
@@ -1,33 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := datatop.c
-LOCAL_SRC_FILES += datatop_cpu_stats_poll.c
-LOCAL_SRC_FILES += datatop_dev_poll.c
-LOCAL_SRC_FILES += datatop_dual_line_poll.c
-LOCAL_SRC_FILES += datatop_fileops.c
-LOCAL_SRC_FILES += datatop_gen_poll.c
-LOCAL_SRC_FILES += datatop_helpers.c
-LOCAL_SRC_FILES += datatop_linked_list.c
-LOCAL_SRC_FILES += datatop_meminfo_file_poll.c
-LOCAL_SRC_FILES += datatop_opt.c
-LOCAL_SRC_FILES += datatop_single_line_poll.c
-LOCAL_SRC_FILES += datatop_stat_poll.c
-LOCAL_SRC_FILES += datatop_str.c
-LOCAL_SRC_FILES += datatop_sys_snap.c
-LOCAL_SRC_FILES += datatop_value_only_poll.c
-LOCAL_SRC_FILES += datatop_ip_table_poll.c
-
-LOCAL_CFLAGS := -Wall -Wextra -Werror -pedantic -std=c99
-LOCAL_CFLAGS += -DVERSION="\"1.0.4"\"
-LOCAL_CFLAGS += -DHAVE_STRL_FUNCTIONS
-LOCAL_CFLAGS += -D _BSD_SOURCE
-
-LOCAL_C_INCLUDES := $(LOCAL_PATH)
-
-LOCAL_CLANG := true
-LOCAL_MODULE := datatop
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_EXECUTABLE)
diff --git a/datatop/src/Makefile.am b/datatop/src/Makefile.am
deleted file mode 100644
index 8ac8014..0000000
--- a/datatop/src/Makefile.am
+++ /dev/null
@@ -1,23 +0,0 @@
-## Makefile.am for main application
-
-CFLAGS := -std=c99                        # Target c99 for portability
-CFLAGS += -Wall -Wextra -Werror -pedantic # Strict code quality enforcement
-CFLAGS += -g -D _BSD_SOURCE               # Enable debugging and BSD time functions
-
-bin_PROGRAMS = datatop
-datatop_SOURCES := datatop.c
-datatop_SOURCES += datatop_fileops.c
-datatop_SOURCES += datatop_dual_line_poll.c
-datatop_SOURCES += datatop_single_line_poll.c
-datatop_SOURCES += datatop_meminfo_file_poll.c
-datatop_SOURCES += datatop_dev_poll.c
-datatop_SOURCES += datatop_stat_poll.c
-datatop_SOURCES += datatop_value_only_poll.c
-datatop_SOURCES += datatop_str.c
-datatop_SOURCES += datatop_cpu_stats_poll.c
-datatop_SOURCES += datatop_helpers.c
-datatop_SOURCES += datatop_linked_list.c
-datatop_SOURCES += datatop_opt.c
-datatop_SOURCES += datatop_gen_poll.c
-datatop_SOURCES += datatop_sys_snap.c
-datatop_SOURCES += datatop_ip_table_poll.c
diff --git a/datatop/src/datatop.c b/datatop/src/datatop.c
deleted file mode 100644
index 60253d7..0000000
--- a/datatop/src/datatop.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/************************************************************************
-Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
-* @file datatop.c
-* @brief Executes commands for application.
-*
-* Contains the main() function where program executes. Calls appropriate
-* methods based on user's CLI commands. Executes parsing function to
-* determine necessary output and handles errors which may arise during the
-* parse. Initiliazes files for data collection. Will call functions designed
-* to poll and print the data in understandable format.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include <time.h>
-#include <pthread.h>
-#include "datatop_interface.h"
-#include "datatop_linked_list.h"
-#include "datatop_opt.h"
-#include "datatop_fileops.h"
-#include "datatop_polling.h"
-#include "datatop_gen_poll.h"
-
-struct dtop_linked_list *first_dpg_list;
-struct cli_opts usr_cl_opts;
-
-/**
- * @brief Prints the datapoint names and values to the terminal.
- *
- * @param dpg_list A pointer to the first node of a linked list which
- *                 contains all data_point_gatherer structs to print.
- */
-void dtop_print_terminal(struct dtop_linked_list *dpg_list)
-{
-	struct dtop_linked_list *curr_ptr = dpg_list;
-	struct dtop_data_point_gatherer *dpset;
-
-	while (curr_ptr) {
-		dpset = (struct dtop_data_point_gatherer *) curr_ptr->data;
-		dtop_print_dpg(dpset);
-		curr_ptr = curr_ptr->next_ptr;
-	}
-}
-
-/**
- * @brief Polls the data periodically and prints to file specified by the user.
- *
- * Polls the data as often as specified by the user in their CLI arguments
- * and outputs the data to a file also specified in CLI arguments. Then prints
- * a snapshot of delta(dp_value) to the terminal.
- *
- * @param dpg_list A pointer to the first node of a linked list which contains
- *                 all data_point_gatherer structs to poll and print.
- * @param fw A pointer to the file which will be printed to.
- * @return FILE_ERROR - Writing to file was unsuccessful.
- * @return FILE_SUCCESS - Writing to file was successful.
- */
-int dtop_poll_periodically(struct dtop_linked_list *dpg_list, FILE *fw)
-{
-	struct timeval tv, timeout;
-	fd_set rfds;
-	time_t curtime, endtime;
-	int inp, quit = 0;
-	struct dtop_linked_list *curr_ptr = dpg_list;
-	struct dtop_data_point_gatherer *dpset;
-	struct timeval ftime, itime, polltime;
-
-	gettimeofday(&tv, NULL);
-	curtime = tv.tv_sec;
-	endtime = tv.tv_sec + usr_cl_opts.poll_time;
-
-	/* print all of our datapoint names as column headers in csv format */
-	if (fprintf(fw, "\"Time\",") < 0)
-		return FILE_ERROR;
-
-	while (curr_ptr) {
-		dpset = (struct dtop_data_point_gatherer *) curr_ptr->data;
-		if (dtop_print_dpg_names_csv(dpset, fw) == FILE_ERROR)
-			return FILE_ERROR;
-		curr_ptr = curr_ptr->next_ptr;
-	}
-	if (fprintf(fw, "\n") < 0)
-		return FILE_ERROR;
-
-	dtop_print_interactive_opts();
-	gettimeofday(&itime, NULL);
-	/* periodically poll the datapoints and print in csv format */
-	while (curtime < endtime
-		|| usr_cl_opts.poll_time == POLL_NOT_SPECIFIED) {
-		FD_ZERO(&rfds);
-		FD_SET(0, &rfds);
-		timeout.tv_sec = usr_cl_opts.poll_per;
-		timeout.tv_usec = 0;
-		//ftime is right before timeout calculations for most acurate calculations
-		gettimeofday(&ftime, NULL);
-		timersub(&ftime, &itime, &polltime);
-		timersub(&timeout,&polltime, &timeout);
-		inp = select(1, &rfds, NULL, NULL, &timeout);
-		gettimeofday(&itime, NULL);
-		if (inp) {
-			char s[4];
-			scanf("%s", s);
-			if (strcmp(s, "quit") == 0
-			    || strcmp(s, "q") == 0) {
-				quit = QUIT;
-				break;
-			}
-			if (strcmp(s, "i") == 0) {
-				dtop_print_snapshot_diff(first_dpg_list);
-				dtop_reset_dp_initial_values(first_dpg_list);
-			}
-			if (strcmp(s, "l") == 0)
-				dtop_print_snapshot_diff(first_dpg_list);
-		}
-		gettimeofday(&tv, NULL);
-		curtime = tv.tv_sec;
-		dtop_poll(dpg_list);
-		printf("Polled at %ld.%06ld\n", tv.tv_sec, tv.tv_usec);
-		if (dtop_print_time_at_poll(fw) == FILE_ERROR)
-			return FILE_ERROR;
-		if (dtop_write_pollingdata_csv(dpg_list, fw) == FILE_ERROR)
-			return FILE_ERROR;
-	}
-
-	if (quit != QUIT)
-		dtop_print_snapshot_diff(dpg_list);
-	return FILE_SUCCESS;
-}
-
-static void dtop_set_niceness(int niceness)
-{
-	int pid, rc;
-	pid = getpid();
-	printf("Requesting nice %d\n", niceness);
-	rc = setpriority(PRIO_PROCESS, pid, niceness);
-	if (rc != 0)
-		fprintf(stderr, "Error setting priority [%d]\n", errno);
-
-	rc = getpriority(PRIO_PROCESS, pid);
-	printf("Running with nice %d.\n", rc);
-}
-
-int main(int argc, char **argv)
-{
-	int parse_status;
-	pthread_t tid;
-	printf("DataTop - Version %s\n", VERSION);
-	printf("(c)2014-2015 Linux Foundation\n");
-
-	dtop_load_default_options(&usr_cl_opts);
-
-	parse_status = dtop_parse_cli_opts(&usr_cl_opts, argc, argv);
-	switch (parse_status) {
-	case PARSE_SUCCESS:
-		dtop_set_niceness(usr_cl_opts.priority);
-	break;
-
-	case PARSE_FORCE_EXIT:
-		exit(EXIT_SUCCESS);
-	break;
-
-	case PARSE_FAILURE:
-	default:
-		printf("Failed to parse command line arguments.\n");
-		exit(EXIT_FAILURE);
-	break;
-	}
-
-	if (usr_cl_opts.iptables_rules_routes == OPT_CHOSE) {
-		if (usr_cl_opts.out_dir[0] == '\0') {
-			printf("Please provide an out directory.\n");
-			exit(EXIT_FAILURE);
-		}
-	}
-
-	dtop_dual_line_init("/proc/net/netstat");
-	dtop_dual_line_init("/proc/net/snmp");
-	dtop_single_line_init("/proc/net/snmp6");
-	dtop_gen_init("/proc/sys/net/");
-	dtop_gen_init("/sys/module/rmnet_data/parameters/");
-	dtop_gen_init("/sys/class/net/rmnet_mhi0/statistics/");
-	dtop_gen_init("/sys/class/net/usb_rmnet0/statistics/");
-	dtop_gen_init("/sys/class/net/rmnet_ipa0/statistics/");
-	dtop_meminfo_init();
-	dtop_dev_init();
-	dtop_stat_init();
-	dtop_cpu_stats_init();
-	dtop_gen_init("/sys/kernel/debug/clk/bimc_clk/");
-	dtop_gen_init("/sys/kernel/debug/clk/snoc_clk/");
-	dtop_gen_init("/sys/kernel/debug/clk/pnoc_clk/");
-
-	if (usr_cl_opts.iptables_rules_routes == OPT_CHOSE) {
-		printf("Datatop IP Tables, rules, routes\n");
-		dtop_ip_table_init(usr_cl_opts.out_dir);
-		if(0 != pthread_create(&tid, NULL, &dtop_ip_table_start_poll, NULL)) {
-			printf("Unable to create capture_ip_tables_rules_routes thread\n");
-		}
-	}
-
-	if (usr_cl_opts.print_cl == OPT_CHOSE) {
-		dtop_poll(first_dpg_list);
-		dtop_print_terminal(first_dpg_list);
-	}
-
-	if (usr_cl_opts.print_csv == OPT_CHOSE) {
-		FILE *to_file = NULL;
-		if ((dtop_open_writing_file(usr_cl_opts.file_name,
-						&to_file)) == VALID) {
-			printf("\nData being polled for %ld seconds.\n",
-						usr_cl_opts.poll_time);
-			if (dtop_poll_periodically(first_dpg_list, to_file)
-			    == FILE_ERROR) {
-				fprintf(stderr, "err=%d: %s\n", errno,
-							strerror(errno));
-				dtop_close_file(to_file);
-				deconstruct_dpgs(first_dpg_list);
-				dtop_rem_linked_list(first_dpg_list);
-				exit(EXIT_FAILURE);
-			}
-			dtop_close_file(to_file);
-		} else {
-			printf("File Can Not Be Opened\n");
-			exit(EXIT_FAILURE);
-		}
-	}
-
-	if (usr_cl_opts.snapshot_file) {
-		if (dtop_print_system_snapshot(usr_cl_opts.snapshot_file)
-			    == FILE_ERROR) {
-			fprintf(stderr, "err=%d: %s\n", errno,
-						strerror(errno));
-			deconstruct_dpgs(first_dpg_list);
-			dtop_rem_linked_list(first_dpg_list);
-			exit(EXIT_FAILURE);
-		}
-	}
-
-	if (usr_cl_opts.print_cl == OPT_NOT_CHOSE &&
-	    usr_cl_opts.print_csv == OPT_NOT_CHOSE) {
-		if ((!usr_cl_opts.snapshot_file)
-		   || usr_cl_opts.poll_time_selected == POLL_TIME_SELECTED) {
-			printf("\nData will now be polled for %ld seconds.\n",
-							usr_cl_opts.poll_time);
-			dtop_poll(first_dpg_list);
-			sleep(usr_cl_opts.poll_time);
-			dtop_poll(first_dpg_list);
-			dtop_print_snapshot_diff(first_dpg_list);
-		}
-	}
-
-	deconstruct_dpgs(first_dpg_list);
-	dtop_rem_linked_list(first_dpg_list);
-	return 0;
-}
-
-/**
- * @brief Adds each dpg as a node to a linked list.
- *
- * Called when a dpg is initialized.
- *
- * @param dpg A pointer to a data_point_gatherer struct which is to be added to the linked list.
- */
-void dtop_register(struct dtop_data_point_gatherer *dpg)
-{
-	if (dpg)
-		first_dpg_list = dtop_add_linked_list(dpg, first_dpg_list);
-}
diff --git a/datatop/src/datatop_cpu_stats_poll.c b/datatop/src/datatop_cpu_stats_poll.c
deleted file mode 100644
index 275ddd8..0000000
--- a/datatop/src/datatop_cpu_stats_poll.c
+++ /dev/null
@@ -1,182 +0,0 @@
-/************************************************************************
-Copyright (c) 2015, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_cpu_stats_poll.c
- * @brief Calls dtop_value_only_init for necessary cpu datapoints.
- *
- * File contains methods for determing number of cpu's online and calling
- * correct initialization function to gather scaling_cur_freq data point
- * for each cpu along with each cpu's online status.
- */
-
-#include <unistd.h>
-#include <stdio.h>
-#include <dirent.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <ctype.h>
-#include "datatop_interface.h"
-#include "datatop_fileops.h"
-#include "datatop_str.h"
-#include "datatop_polling.h"
-
-#define DTOP_GEN_SIZE 8192
-#define DTOP_GEN_LINE (DTOP_GEN_SIZE>>2)
-#define NO_CPUS_ONLINE -1
-
-/**
- * @brief Searches /sys/devices/system/cpu/ directory to get find number of CPUs.
- *
- * @return Number of CPUs found in directory.
- */
-static int dtop_cpu_search(void)
-{
-	DIR *dp;
-	struct dirent *entry;
-	struct stat s;
-	int cpu_amt;
-	char cwd[1024];
-
-	if (!getcwd(cwd, sizeof(cwd))) {
-		fprintf(stderr, "Failed to get current working dir\n");
-		return -1;
-	}
-
-	dp = opendir("/sys/devices/system/cpu/");
-	if (dp == NULL) {
-		fprintf(stderr, "err=%d: %s\n", errno, strerror(errno));
-		fprintf(stderr, "Cannot open directory: %s\n",
-					"/sys/devices/system/cpu/");
-		return NO_CPUS_ONLINE;
-	}
-
-	chdir("/sys/devices/system/cpu/");
-	cpu_amt = 0;
-	while ((entry = readdir(dp))) {
-		if (stat(entry->d_name, &s)) {
-			printf("stat err=%d: %s\n", errno, strerror(errno));
-			return NO_CPUS_ONLINE;
-		}
-
-		if (entry->d_name[0] == 'c' &&
-			entry->d_name[1] == 'p' &&
-			entry->d_name[2] == 'u' &&
-			(isdigit(entry->d_name[3]))) {
-
-			cpu_amt++;
-		}
-	}
-
-	closedir(dp);
-	chdir(cwd);
-	return cpu_amt;
-}
-
-/**
- * @brief Creates a dpg designed for CPU online and CPU scaling_cur_freq stats.
- *
- * @param name Name of file dpg represents.
- */
-static void construct_cpu_stat_dpg(char *name)
-{
-	char *file = malloc(strlen(name) + 1);
-	struct dtop_data_point *dp =
-			malloc(sizeof(struct dtop_data_point));
-	struct dtop_data_point_gatherer *dpg = malloc
-		(sizeof(struct dtop_data_point_gatherer));
-
-	strlcpy(file, name, strlen(name) + 1);
-
-	dp[0].type = DTOP_ULONG;
-	dp[0].name = malloc(5);
-	strlcpy(dp[0].name, "", 5);
-	dp[0].prefix = NULL;
-	dp[0].data.d_ulong = 0;
-	dp[0].initial_data.d_ulong = 0;
-	dp[0].skip = DO_NOT_SKIP;
-	dp[0].initial_data_populated = NOT_POPULATED;
-
-	dpg->prefix = file;
-	dpg->file = file;
-	dpg->poll = dtop_value_only_poll;
-	dpg->data_points = dp;
-	dpg->data_points_len = 1;
-	dpg->deconstruct = dtop_value_only_dpg_deconstructor;
-
-	dtop_register(dpg);
-}
-
-/**
- * @brief Calls dpg constructor for necessary CPU stat files.
- *
- * Creates file names based on number of CPUs found and calls the
- * dpg constructor for them.
- *
- * @param file Directory where the CPUs are found.
- * @param add String which is concatenated onto file and represents
- * the path after a CPU directory is entered.
- * @param cpu_amt Amount of CPUs found on device.
- */
-static void cpu_poll_helper(char *file, char *add, int cpu_amt)
-{
-	int i;
-	for (i = 0; i < cpu_amt; i++) {
-		char *cpu_num = malloc(5);
-		char *newfile;
-		int nf_len;
-		snprintf(cpu_num, 5, "%d", i);
-		nf_len = strlen(file) + strlen(add) + strlen(cpu_num) + 2;
-		newfile = malloc(nf_len);
-		strlcpy(newfile, file, nf_len);
-		strlcat(newfile, cpu_num, nf_len);
-		strlcat(newfile, add, nf_len);
-		free(cpu_num);
-		construct_cpu_stat_dpg(newfile);
-		free(newfile);
-	}
-}
-
-/**
- * @brief Calls necessary functions for CPU stat dpgs.
- */
-void dtop_cpu_stats_init(void)
-{
-	int cpu_amt;
-	char *file = "/sys/devices/system/cpu/cpu";
-	char *add = "/cpufreq/scaling_cur_freq";
-
-	cpu_amt = dtop_cpu_search();
-	cpu_poll_helper(file, add, cpu_amt);
-	add = "/online";
-	cpu_poll_helper(file, add, cpu_amt);
-}
diff --git a/datatop/src/datatop_dev_poll.c b/datatop/src/datatop_dev_poll.c
deleted file mode 100644
index 2a47567..0000000
--- a/datatop/src/datatop_dev_poll.c
+++ /dev/null
@@ -1,320 +0,0 @@
-/************************************************************************
-Copyright (c) 2015, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_dev_poll.c
- * @brief Adds ability for data collection from /proc/net/dev
- *
- * File contains methods for searching and polling data from
- * "/proc/net/dev"
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include "datatop_interface.h"
-#include "datatop_fileops.h"
-#include "datatop_str.h"
-
-#define DTOP_DEV_SIZE 8192
-#define DTOP_DEV_LINE (DTOP_DEV_SIZE>>2)
-
-/**
-* @struct dtop_dev_vars
-* @brief Struct used to hold necessary variables for /proc/net/dev dpg
-*
-* @var dtop_dev_vars::line
-* Array of strings where necessary dp names and values are held.
-* @var dtop_dev_vars::line_count
-* Number of lines the file is that the dpg represents.
-*/
-struct dtop_dev_vars {
-	char **line;
-	int line_count;
-};
-
-/**
- * @brief Parses lines with data in "/proc/net/dev"
- *
- * @param line1 Line to parse to find datapoint names and values.
- * @param len1 Length of line1.
- * @param index Index in the dictionary the key (name) is added to.
- * @param dict Dictionary the keys and values are added to.
- */
-static void dt_dev_parse(char *line1, int len1,
-			 int index, struct dt_procdict *dict)
-{
-	int i, start = 0;
-	int j, k, n;
-	i = 0;
-	while (line1[i] == '	' || line1[i] == ' ')
-		i++;
-	dict->key[index] = &line1[i];
-	for (i = 0; i < len1; i++) {
-		if (line1[i] == ':') {
-			line1[i+1] = 0;
-			start = i+2;
-			break;
-		}
-	}
-
-	k = 0;
-	for (j = start; j < len1; j++) {
-		if (line1[j] != '	' && line1[j] != ' ') {
-			dict->val[k] = &line1[j];
-			n = j;
-			while (line1[n] != 0 && line1[n] != '	' && line1[n] != ' ')
-				n++;
-			if (n < len1)
-				line1[n] = 0;
-			j = n;
-			k++;
-		}
-	}
-}
-
-/**
- * @brief Stores the data collected from "/proc/net/dev"
- *
- * @param dpg Struct that polled data is added to.
- * @return DTOP_POLL_IO_ERR - Poll of dpg unsuccessful.
- * @return DTOP_POLL_OK - Poll of dpg successful.
- */
-int dtop_dev_poll(struct dtop_data_point_gatherer *dpg)
-{
-	char *data;
-	int *line_len = malloc(sizeof(int) *
-			((struct dtop_dev_vars *)
-			(dpg->priv))->line_count);
-	int read;
-	struct dt_procdict *dict = malloc(sizeof(struct dt_procdict)
-					*((struct dtop_dev_vars *)
-					(dpg->priv))->line_count-2);
-	int j, n, sum;
-	int index = 0;
-	int dp = 0;
-
-	read = dt_read_file(dpg->file, &data, DTOP_DEV_SIZE);
-	if (read == 0 || data == 0)
-		return DTOP_POLL_IO_ERR;
-
-	sum = 0;
-	/* Assigns each line read from the file, a length */
-	for (n = 0; n < ((struct dtop_dev_vars *)
-				(dpg->priv))->line_count; n++) {
-		line_len[n] = dt_read_line(((struct dtop_dev_vars *)
-					(dpg->priv))->line[n],
-					   DTOP_DEV_LINE, data,
-					   DTOP_DEV_SIZE, sum);
-		if (n <= (((struct dtop_dev_vars *)
-			(dpg->priv))->line_count - 1)) {
-			sum += (line_len[n] + 1);
-		}
-
-	}
-
-	for (n = 2; n < ((struct dtop_dev_vars *)
-			(dpg->priv))->line_count; n++) {
-		dt_dev_parse(((struct dtop_dev_vars *)
-				(dpg->priv))->line[n], line_len[n],
-					index, &dict[index]);
-		index++;
-	}
-
-
-	/* Assigns the dp value to the dp struct */
-	for (n = 2; n < ((struct dtop_dev_vars *)
-			(dpg->priv))->line_count; n++) {
-		for (j = 0; j < 16; j++) {
-			dtop_store_dp(&(dpg->data_points[dp]),
-						dict[n-2].val[j]);
-			dp++;
-		}
-	}
-
-	dt_free(&data);
-	free(line_len);
-	free(dict);
-	return DTOP_POLL_OK;
-}
-
-/**
- * @brief Frees dynamically allocated "/proc/net/dev" dpg.
- *
- * Frees the memory of the dpg along with it's data_points
- * and other malloc'd memory no longer needed.
- *
- * @param dpg Dpg to deconstruct and deallocate memory for.
- */
-static void dtop_dev_dpg_deconstructor
-			(struct dtop_data_point_gatherer *dpset)
-{
-	int i, j, dp;
-	dp = 0;
-	for (j = 0; j < ((((struct dtop_dev_vars *)
-		(dpset->priv))->line_count)-2); j++) {
-		for (i = 0; i < 16; i++) {
-			free(dpset->data_points[dp].prefix);
-			dp++;
-		}
-	}
-	free(dpset->data_points);
-	for (i = 0; i < ((struct dtop_dev_vars *)
-				(dpset->priv))->line_count; i++)
-		free(((struct dtop_dev_vars *)(dpset->priv))->line[i]);
-	free(((struct dtop_dev_vars *)(dpset->priv))->line);
-	free(((struct dtop_dev_vars *)(dpset->priv)));
-	free(dpset);
-}
-
-/**
- * @brief Creates a dpg for "/proc/net/dev" file
- *
- * Dynamically allocates memory for dpg which is then added to a linked list
- * via the dtop_register(dpg) function call.
- *
- * @param data_points dtop_data_point struct that dpg points to.
- * @param storage dtop_dev_vars struct that holds relevant dpg variables.
- */
-static void construct_dev_file_dpg(struct dtop_dev_vars *storage,
-			int dp_count, struct dtop_data_point *data_points)
-{
-	struct dtop_data_point_gatherer *dpg = malloc
-		(sizeof(struct dtop_data_point_gatherer));
-
-	dpg->prefix = "/proc/net/dev";
-	dpg->file = "/proc/net/dev";
-	dpg->poll = dtop_dev_poll;
-	dpg->data_points = data_points;
-	dpg->priv = (struct dtop_dev_vars *)storage;
-	dpg->data_points_len = dp_count;
-	dpg->deconstruct = dtop_dev_dpg_deconstructor;
-
-	dtop_register(dpg);
-}
-
-/**
- * @brief Scans "/proc/net/dev in order to autodetect dps.
- *
- * Searches through "/proc/net/dev" file for all available data
- * points to create as dp structs.
- *
- * @param name This is the file name "/proc/net/dev" passed in by dtop_dev_init
- * @param storage dtop_dev_vars struct where relevant variables are stored.
- */
-int dtop_dev_search(char *name, struct dtop_dev_vars *storage)
-{
-	int i, n, sum;
-	char *data;
-	int *line_len = malloc(sizeof(int) * storage->line_count);
-	int read;
-	struct dt_procdict dict;
-	struct dt_procdict dev_dict;
-	struct dtop_data_point *data_points = malloc
-		(sizeof(struct dtop_data_point) * 16 * (storage->line_count-2));
-	int dp_count = (16 * (storage->line_count - 2));
-	int index = 0;
-	int dp = 0;
-
-	storage->line = malloc(storage->line_count * sizeof(*storage->line));
-
-	for (i = 0; i < storage->line_count; i++)
-		storage->line[i] = malloc(sizeof(char) * DTOP_DEV_LINE);
-
-	dev_dict.val[0] = "bytes";
-	dev_dict.val[1] = "packets";
-	dev_dict.val[2] = "errs";
-	dev_dict.val[3] = "drop";
-	dev_dict.val[4] = "fifo";
-	dev_dict.val[5] = "frame";
-	dev_dict.val[6] = "compressed";
-	dev_dict.val[7] = "multicast";
-	dev_dict.val[8] = "bytes";
-	dev_dict.val[9] = "packets";
-	dev_dict.val[10] = "errs";
-	dev_dict.val[11] = "drop";
-	dev_dict.val[12] = "fifo";
-	dev_dict.val[13] = "colls";
-	dev_dict.val[14] = "carrier";
-	dev_dict.val[15] = "compressed";
-
-	read = dt_read_file(name, &data, DTOP_DEV_SIZE);
-	if (read == 0 || data == 0)
-		return DTOP_POLL_IO_ERR;
-
-	sum = 0;
-	/* Assigns each line read from the file, a length */
-	for (n = 0; n < storage->line_count; n++) {
-		line_len[n] = dt_read_line(storage->line[n],
-					   DTOP_DEV_LINE, data,
-					   DTOP_DEV_SIZE, sum);
-		if (n < (storage->line_count - 1))
-			sum += (line_len[n] + 1);
-	}
-
-	construct_dev_file_dpg(storage, dp_count, data_points);
-
-	for (n = 2; n < storage->line_count; n++) {
-		dt_dev_parse(storage->line[n], line_len[n], index, &dict);
-		index++;
-	}
-
-	for (n = 2; n < storage->line_count; n++) {
-		for (i = 0; i < 16; i++) {
-			char *pref = malloc(30 * sizeof(char));
-			data_points[dp].skip = 0;
-			data_points[dp].initial_data_populated = NOT_POPULATED;
-			if (i < 8)
-				strlcpy(pref, "Receive:", 30 * sizeof(char));
-			else if (i >= 8)
-				strlcpy(pref, "Transmit:", 30 * sizeof(char));
-			strlcat(pref, dev_dict.val[i], 30 * sizeof(char));
-			data_points[dp].prefix = pref;
-			data_points[dp].name = dict.key[n-2];
-			data_points[dp].type = DTOP_ULONG;
-			dp++;
-		}
-		index++;
-	}
-
-	free(line_len);
-	dt_free(&data);
-	return DTOP_POLL_OK;
-}
-
-/**
- * @brief Calls dtop_search for "/proc/net/dev" file.
- */
-void dtop_dev_init(void)
-{
-	struct dtop_dev_vars *storage = malloc
-			(sizeof(struct dtop_dev_vars));
-	storage->line_count = dtop_get_file_line_amount("/proc/net/dev");
-	dtop_dev_search("/proc/net/dev", storage);
-}
diff --git a/datatop/src/datatop_dual_line_poll.c b/datatop/src/datatop_dual_line_poll.c
deleted file mode 100644
index 8ada0c1..0000000
--- a/datatop/src/datatop_dual_line_poll.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/************************************************************************
-Copyright (c) 2015, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_dual_line_poll.c
- * @brief Adds ability for data collection from dual line files.
- *
- * File contains methods for searching and polling data from
- * dual line files, meaning the first line contains the dp names
- * while the second line contains the corresponding values.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include "datatop_interface.h"
-#include "datatop_fileops.h"
-#include "datatop_str.h"
-
-#define DTOP_DUAL_SIZE 8192
-#define DTOP_DUAL_LINE (DTOP_DUAL_SIZE>>2)
-
-/**
-* @struct dtop_dual_line_vars
-* @brief Struct used to hold necessary variables for dual_line_file dpgs.
-*
-* @var dtop_dual_line_vars::line
-* Array of strings where necessary dp names and values are held.
-* @var dtop_dual_line_vars::line2
-* Array of strings where necessary dp names and values are held.
-* @var dtop_dual_line_vars::line_count
-* Number of lines the file is that the dpg represents.
-*/
-struct dtop_dual_line_vars {
-	char **line;
-	char **line2;
-	int line_count;
-};
-
-/**
- * @brief Stores the data collected from a dual_line file.
- *
- * @param dpg Struct that polled data is added to.
- * @return DTOP_POLL_IO_ERR - Poll of dpg unsuccessful.
- * @return DTOP_POLL_OK - Poll of dpg successful.
- */
-int dtop_dual_line_poll(struct dtop_data_point_gatherer *dpg)
-{
-	char *data;
-	int *line_len = malloc(sizeof(int) *
-			((struct dtop_dual_line_vars *)
-			(dpg->priv))->line_count);
-	int *line_len2 = malloc(sizeof(int) *
-			((struct dtop_dual_line_vars *)
-			(dpg->priv))->line_count);
-	int read;
-
-	struct dt_procdict *dict = malloc(sizeof(struct dt_procdict)
-					* (((struct dtop_dual_line_vars *)
-					(dpg->priv))->line_count/2));
-	struct dt_procdict *prefix_dict = malloc(sizeof(struct dt_procdict)
-					* (((struct dtop_dual_line_vars *)
-					(dpg->priv))->line_count/2));
-	int i, j, k, n, sum, sum2;
-
-	read = dt_read_file(dpg->file, &data, DTOP_DUAL_SIZE);
-	if (read == 0 || data == 0)
-		return DTOP_POLL_IO_ERR;
-
-	sum = 0;
-	sum2 = 0;
-	/* Assigns each line read from the file, a length */
-	for (n = 0; n < ((struct dtop_dual_line_vars *)
-				(dpg->priv))->line_count; n++) {
-		line_len[n] = dt_read_line(((struct dtop_dual_line_vars *)
-					(dpg->priv))->line[n],
-					   DTOP_DUAL_LINE, data,
-					   DTOP_DUAL_SIZE, sum);
-		line_len2[n] = dt_read_line(((struct dtop_dual_line_vars *)
-					(dpg->priv))->line2[n],
-					    DTOP_DUAL_LINE, data,
-					    DTOP_DUAL_SIZE, sum2);
-		if (n <= (((struct dtop_dual_line_vars *)
-				(dpg->priv))->line_count-2)) {
-			sum += (line_len[n] + 1);
-			sum2 += (line_len2[n] + 1);
-		}
-
-	}
-
-	/* Stores dp names and values in dictionary */
-	for (i = 0; i < (((struct dtop_dual_line_vars *)
-				(dpg->priv))->line_count/2); i++)
-		dt_parse_proc_dictionary(((struct dtop_dual_line_vars *)
-					(dpg->priv))->line[2*i],
-					  line_len[2*i],
-					  ((struct dtop_dual_line_vars *)
-					  (dpg->priv))->line[(2*i)+1],
-					  line_len[(2*i)+1],
-					  &dict[i]);
-
-	/* Stores dp prefices in dictionary */
-	for (i = 0; i < (((struct dtop_dual_line_vars *)
-				(dpg->priv))->line_count/2); i++)
-		dt_parse_for_prefix(((struct dtop_dual_line_vars *)
-				(dpg->priv))->line2[2*i], line_len2[2*i],
-				    &prefix_dict[i]);
-
-	/* Assigns a dp value to each dp struct */
-	for (k = 0; k < (((struct dtop_dual_line_vars *)
-				(dpg->priv))->line_count/2); k++) {
-		for (j = 0; j < dpg->data_points_len; j++) {
-			i =  dt_find_dict_idx(dpg->data_points[j].name,
-					      &dict[k]);
-			if (i >= 0 && i < dict[k].max &&
-				(strcmp(dpg->data_points[j].prefix,
-				prefix_dict[k].val[i]) == 0))
-
-				dtop_store_dp(&(dpg->data_points[j]),
-					      dict[k].val[i]);
-		}
-	}
-
-	dt_free(&data);
-	free(line_len);
-	free(line_len2);
-	free(dict);
-	free(prefix_dict);
-	return DTOP_POLL_OK;
-}
-
-/**
- * @brief Frees dynamically allocated dual_line_file dpgs.
- *
- * Frees the memory of the dpg along with it's data_points
- * and other malloc'd memory no longer needed.
- *
- * @param dpg Dpg to deconstruct and deallocate memory for.
- */
-static void dtop_dual_line_dpg_deconstructor
-			(struct dtop_data_point_gatherer *dpset)
-{
-	int i;
-	free(dpset->data_points);
-	for (i = 0; i < ((struct dtop_dual_line_vars *)
-				(dpset->priv))->line_count; i++) {
-		free(((struct dtop_dual_line_vars *)(dpset->priv))->line[i]);
-		free(((struct dtop_dual_line_vars *)(dpset->priv))->line2[i]);
-	}
-	free(((struct dtop_dual_line_vars *)(dpset->priv))->line);
-	free(((struct dtop_dual_line_vars *)(dpset->priv))->line2);
-	free(((struct dtop_dual_line_vars *)(dpset->priv)));
-	free(dpset);
-}
-
-/**
- * @brief Creates a dpg for a dual_line file.
- *
- * Dynamically allocates memory for dpg which is then added to a linked list
- * via the dtop_register(dpg) function call.
- *
- * @param name Name of file dpg represents.
- * @param data_points dtop_data_point struct that dpg points to.
- * @param storage dtop_dual_line_vars struct that hold relevant dpg variables.
- * @param dp_count Number of datapoints in dtop_data_point struct array.
- */
-static void construct_dual_line_file_dpg(char *name, struct dtop_data_point
-		*data_points, struct dtop_dual_line_vars *storage, int dp_count)
-{
-	struct dtop_data_point_gatherer *dpg = malloc
-		(sizeof(struct dtop_data_point_gatherer));
-	dpg->prefix = name;
-	dpg->file = name;
-	dpg->poll = dtop_dual_line_poll;
-	dpg->data_points = data_points;
-	dpg->priv = (struct dtop_dual_line_vars *)storage;
-	dpg->data_points_len = dp_count;
-	dpg->deconstruct = dtop_dual_line_dpg_deconstructor;
-
-	dtop_register(dpg);
-}
-
-/**
- * @brief Scans a dual_line file for all datapoints and creats dps.
- *
- * Searches through a dual_line file (Key on one line with value on next line)
- * for all available data points to create as dp structs.
- *
- * @param name Name of file.
- * @param storage dtop_dual_line_vars struct where relevant variables are stored.
- */
-int dtop_dual_line_search(char *name, struct dtop_dual_line_vars *storage)
-{
-	int i, j, k, n, sum, sum2;
-	char *data;
-	int *line_len = malloc(sizeof(int) * storage->line_count);
-	int *line_len2 = malloc(sizeof(int) * storage->line_count);
-	int read;
-	struct dt_procdict *dict, *prefix_dict;
-	struct dtop_data_point *data_points;
-	int dp_count = 0;
-
-	storage->line = malloc(storage->line_count * sizeof(*storage->line));
-	storage->line2 = malloc(storage->line_count * sizeof(*storage->line2));
-	for (i = 0; i < storage->line_count; i++) {
-		storage->line[i] = malloc(sizeof(char) * DTOP_DUAL_LINE);
-		storage->line2[i] = malloc(sizeof(char) * DTOP_DUAL_LINE);
-	}
-	dict = malloc(sizeof(struct dt_procdict) * (storage->line_count/2));
-	prefix_dict = malloc(sizeof(struct dt_procdict)
-				* (storage->line_count/2));
-
-	read = dt_read_file(name, &data, DTOP_DUAL_SIZE);
-	if (read == 0 || data == 0)
-		return DTOP_POLL_IO_ERR;
-
-	sum = 0;
-	sum2 = 0;
-	/* Assigns each line read from the file, a length */
-	for (n = 0; n < storage->line_count; n++) {
-		line_len[n] = dt_read_line(storage->line[n],
-					   DTOP_DUAL_LINE, data,
-					   DTOP_DUAL_SIZE, sum);
-		line_len2[n] = dt_read_line(storage->line2[n],
-					    DTOP_DUAL_LINE, data,
-					    DTOP_DUAL_SIZE, sum2);
-		if (n <= (storage->line_count-2)) {
-			sum += (line_len[n] + 1);
-			sum2 += (line_len2[n] + 1);
-		}
-
-	}
-
-	/* Stores dp names and prefixes in dictionaries */
-	for (i = 0; i < (storage->line_count/2); i++)
-		dt_parse_proc_dictionary(storage->line[2*i], line_len[2*i],
-			 storage->line[(2*i)+1], line_len[(2*i)+1], &dict[i]);
-
-	for (i = 0; i < (storage->line_count/2); i++)
-		dt_parse_for_prefix(storage->line2[2*i], line_len2[2*i],
-				    &prefix_dict[i]);
-
-	/* Finds how many data points were gathered from the file */
-	for (j = 0; j < (storage->line_count/2); j++) {
-		for (i = 0; i < dict[j].max; i++)
-			dp_count++;
-	}
-
-	data_points = malloc(dp_count * sizeof(struct dtop_data_point));
-
-	k = 0;
-	/* Creates a dtop_data_point struct for each dp found in the file */
-	for (j = 0; j < (storage->line_count/2); j++)
-		for (i = 0; i < dict[j].max; i++) {
-			if (dict[j].val[i][0] == '-')
-				data_points[k].type = DTOP_LONG;
-			else
-				data_points[k].type = DTOP_ULONG;
-			data_points[k].name = dict[j].key[i];
-			data_points[k].prefix = prefix_dict[j].val[i];
-			data_points[k].skip = DO_NOT_SKIP;
-			data_points[k].initial_data_populated = NOT_POPULATED;
-			k++;
-		}
-
-	/* Calls dpg constructor, dpg will point to the dp struct */
-	construct_dual_line_file_dpg(name, data_points, storage, dp_count);
-
-	free(line_len);
-	free(line_len2);
-	free(dict);
-	free(prefix_dict);
-	dt_free(&data);
-
-	return DTOP_POLL_OK;
-}
-
-/**
- * @brief Calls dtop_search for a file with dual line pairs.
- */
-void dtop_dual_line_init(char *name)
-{
-	struct dtop_dual_line_vars *storage = malloc
-			(sizeof(struct dtop_dual_line_vars));
-	storage->line_count = dtop_get_file_line_amount(name);
-
-	if (storage->line_count%2 != 0) {
-		printf("Dual line file, %s, contains error.\n", name);
-		printf("Data will not be collected from %s\n", name);
-		return;
-	}
-	dtop_dual_line_search(name, storage);
-}
diff --git a/datatop/src/datatop_fileops.c b/datatop/src/datatop_fileops.c
deleted file mode 100644
index 9ff06b5..0000000
--- a/datatop/src/datatop_fileops.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/************************************************************************
-Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_fileops.c
- * @brief Declares functions for reading and writing to files.
- *
- * Declares functions called when reading from files which data is collected.
- * Also contains methods to handle files which will be written to.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include "datatop_interface.h"
-#include "datatop_linked_list.h"
-#include "datatop_opt.h"
-#include "datatop_fileops.h"
-
-/**
- * @brief Reads the lines from files which we are collecting data from.
- *
- * @param file File which is read from
- * @param buffer Pointer to buffer where data will be read. The buffer is allocated
- *               in dt_read_file() and passed back to the caller. Caller should
- *               free this when done.
- * @param len Maximum amount of data which should be read from the file.
- * @return Number of bytes of data placed in *buffer.
- */
-int dt_read_file(const char *file, char **buffer, int len)
-{
-	int read;
-	FILE *fp;
-
-	*buffer = (char *)malloc(len);
-	if (!(*buffer)) {
-		fprintf(stderr, "%s(): malloc(%d) failed\n", __func__, len);
-		return 0;
-	}
-
-	fp = fopen(file, "r");
-	if (!fp) {
-		fprintf(stderr, "%s(): Failed to open %s: ", __func__, file);
-		fprintf(stderr, "Error: %s\n", strerror(errno));
-		free(*buffer);
-		*buffer = 0;
-		return 0;
-	}
-	read = fread(*buffer, sizeof(char), len, fp);
-	fclose(fp);
-
-	return read;
-}
-
-/**
- * @brief Deallocates memory no longer being used.
- *
- * @param buffer Buffer to be deallocated.
- */
-void dt_free(char **buffer)
-{
-	free(*buffer);
-	*buffer = 0;
-}
-
-/**
- * @brief Checks for access to a file for writing.
- *
- * @param fw File to check access of.
- * @return INVALID - File already exists or write access denied.
- * @return VALID - File does not exist and can be written to.
- */
-int dtop_check_writefile_access(char *fw)
-{
-	if (!access(fw, F_OK)) {
-		printf("File specified already exists\n");
-		return INVALID;
-	}
-
-	if (!access(fw, W_OK)) {
-		printf("Permission to write to specified file denied\n");
-		return INVALID;
-	}
-
-	return VALID;
-}
-
-/**
- * @brief Checks for the presence of a dir.
- *
- * @param fw Dir to check the presence
- * @return INVALID - Out dir doesn't exist.
- * @return VALID - Out dir exist and can be written to.
- */
-int dtop_check_out_dir_presence(char *fw)
-{
-	if (access(fw, F_OK)) {
-		printf("Out dir not present\n");
-		return INVALID;
-	}
-
-	return VALID;
-}
-
-/**
- * @brief Creates a directory
- *
- * @param New directory full path.
- * @return INVALID - Out dir doesn't exist or write access denied.
- * @return VALID - Out dir exist and can be written to.
- */
-int dtop_create_dir(char *full_path)
-{
-	if (!mkdir(full_path, 0755)) {
-		printf("Unable to create dir: %s, errno: %d\n", full_path, errno);
-		return INVALID;
-	}
-
-	return VALID;
-}
-
-/**
- * @brief Opens file and handles possible errors.
- *
- * @param fw File path to be opened.
- * @param to_file Pointer to the *file that is opened.
- * @return VALID - File opened successfully.
- * @return INVALID - File could not be opened.
- */
-int dtop_open_writing_file(char *fw, FILE **to_file)
-{
-	*to_file = fopen(fw, "w");
-	if (*to_file) {
-		return VALID;
-	} else {
-		fprintf(stderr, "Value of errno: %d\n", errno);
-		fprintf(stderr, "Error opening file: %s\n", strerror(errno));
-		fprintf(stderr, "Please try writing to a non-existent file\n");
-		printf("See datatop -h for help\n");
-		return INVALID;
-	}
-}
-
-/**
- * @brief Closes a file if not a standard stream.
- *
- * @param fw File to be closed.
- */
-void dtop_close_file(FILE *fw)
-{
-	if (fw != stdout && fw != stderr && fw != stdin)
-		fclose(fw);
-}
-
-/**
- * @brief Helper function to find number of lines in dual_line file.
- *
- * @return Number of lines in a dual_line file.
- */
-int dtop_get_file_line_amount(char *name)
-{
-	signed char rc = 0;
-	int line_count = 0;
-	FILE *file = fopen(name, "r");
-	while (rc != EOF) {
-		if (rc == '\n')
-			line_count++;
-		rc = fgetc(file);
-	}
-
-	fclose(file);
-	return line_count;
-}
diff --git a/datatop/src/datatop_fileops.h b/datatop/src/datatop_fileops.h
deleted file mode 100644
index 9d60a41..0000000
--- a/datatop/src/datatop_fileops.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/************************************************************************
-Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_fileops.h
- * @brief Declares functions held within datatop_fileops.h
- */
-
-#ifndef DATATOP_FILEOPS_H
-#define DATATOP_FILEOPS_H
-
-#include "datatop_interface.h"
-#include "datatop_linked_list.h"
-#include "datatop_opt.h"
-
-int dt_read_file(const char *file, char **buffer, int len);
-void dt_free(char **buffer);
-int dtop_check_writefile_access(char *fw);
-int dtop_check_out_dir_presence(char *fw);
-int dtop_create_dir(char *full_path);
-int dtop_open_writing_file(char *fw, FILE **to_file);
-void dtop_close_file(FILE *fw);
-int dtop_get_file_line_amount(char *file);
-#endif /* DATATOP_FILEOPS_H */
diff --git a/datatop/src/datatop_gen_poll.c b/datatop/src/datatop_gen_poll.c
deleted file mode 100644
index c3eb09d..0000000
--- a/datatop/src/datatop_gen_poll.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/************************************************************************
-Copyright (c) 2015, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_gen_poll.c
- * @brief Contains functions which add ability to scan directories for data points.
- *
- * Contains functions that search through a directory and create dpg's for any
- * important data values found which can then be polled for data collection.
- */
-
-#include <unistd.h>
-#include <stdio.h>
-#include <dirent.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include "datatop_interface.h"
-#include "datatop_fileops.h"
-#include "datatop_str.h"
-#include "datatop_gen_poll.h"
-
-#define DTOP_GEN_SIZE 8192
-#define DTOP_GEN_LINE (DTOP_GEN_SIZE>>2)
-
-/**
- * @brief Searches a file to find the number of data values it contains.
- *
- * @param dpg The struct which contains the file to search.
- * @return Number of datapoints found in the file.
- */
-static int get_number_of_values(struct dtop_data_point_gatherer *dpg)
-{
-	char *data;
-	int read;
-	char line[DTOP_GEN_LINE];
-	int line_len;
-	int i, num;
-
-	read = dt_read_file(dpg->file, &data, DTOP_GEN_SIZE);
-	line_len = dt_read_line(line, DTOP_GEN_LINE, data, DTOP_GEN_SIZE, 0);
-
-	if (read == 0) {
-		return 0;
-	}
-
-	if (line_len < 1) {
-		dt_free(&data);
-		return 0;
-	}
-
-	num = 1;
-	for (i = 0; i < line_len; i++) {
-		if ((line[i] == ' ' || line[i] == ','
-		    || line[i] == '	') &&line[i+1] != 0)
-			num++;
-	}
-
-	dt_free(&data);
-	return num;
-}
-
-/**
- * @brief Stores the data collected from a dpg that was constructed during dtop_search.
- *
- * @param dpg Struct that polled data is added to.
- * @return DTOP_POLL_IO_ERR - Poll of dpg unsuccessful.
- * @return DTOP_POLL_OK - Poll of dpg successful.
- */
-int dtop_gen_poll(struct dtop_data_point_gatherer *dpg)
-{
-	char *data;
-	int read;
-	char line[DTOP_GEN_LINE];
-	int line_len;
-	struct dt_procdict dict;
-	int i;
-
-	read = dt_read_file(dpg->file, &data, DTOP_GEN_SIZE);
-	line_len = dt_read_line(line, DTOP_GEN_LINE, data, DTOP_GEN_SIZE, 0);
-
-	if (read == 0 || data == 0)
-		return DTOP_POLL_IO_ERR;
-
-	dt_single_line_parse(line, line_len, &dict);
-
-	for (i = 0; i < dpg->data_points_len; i++) {
-		if (dict.val[i][0] == '-')
-			dpg->data_points[i].type = DTOP_LONG;
-		dtop_store_dp(&(dpg->data_points[i]), dict.val[i]);
-	}
-
-	dt_free(&data);
-	return DTOP_POLL_OK;
-}
-
-/**
- * @brief Frees dynamically allocated dpg's.
- *
- * Frees the memory of dpg variables and the dpg for all dynamically allocated
- * dpgs.
- *
- * @param dpg Dpg to deconstruct and deallocate memory for.
- */
-static void dtop_gen_dpg_deconstructor(struct dtop_data_point_gatherer *dpset)
-{
-	int i;
-	for (i = 0; i < dpset->data_points_len; i++)
-		free(dpset->data_points[i].name);
-	free(dpset->data_points);
-	free(dpset->file);
-	free(dpset->prefix);
-	free(dpset);
-}
-
-/**
- * @brief Creates a dpg and all necessary dp's corresponding to it.
- *
- * Dynamically allocates memory for dpg and dp structs which are then
- * created and added to a linked_list of dpgs through the dtop_register
- * function.
- *
- * @param dir Directory which file is located in, assigned to the dpg prefix.
- * @param name Name of file that dpg represents, assigned to a dp name.
- */
-static void dpg_construction(char *dir, char *name)
-{
-	int num, i;
-	int both_len = strlen(dir) + strlen(name) + 1;
-	char *both = malloc(both_len);
-	char *maindir;
-	struct dtop_data_point_gatherer *dpg = malloc
-	       (sizeof(struct dtop_data_point_gatherer));
-	strlcpy(both, dir, both_len);
-	strlcat(both, name, both_len);
-	maindir = malloc(strlen(dir) + 1);
-	strlcpy(maindir, dir, strlen(dir) + 1);
-
-	dpg->prefix = maindir;
-	dpg->file = both;
-	dpg->poll = dtop_gen_poll;
-	dpg->deconstruct = dtop_gen_dpg_deconstructor;
-	num = get_number_of_values(dpg);
-
-	if (num != 0) {
-		struct dtop_data_point *dp = malloc
-		       (num * sizeof(struct dtop_data_point));
-		for (i = 0; i < num; i++) {
-			if (num == 1) {
-				dp[i].name = malloc(strlen(name) + 1);
-				strlcpy(dp[i].name, name, strlen(name) + 1);
-			} else {
-				char *add = malloc(7 * sizeof(char));
-				char *newname;
-				int nn_len, dpn_len;
-				snprintf(add, 7 * sizeof(char), "[%d]:", i);
-				nn_len = strlen(name) + strlen(add) + 1;
-				newname = malloc(nn_len);
-				strlcpy(newname, name, nn_len);
-				strlcat(newname, add, nn_len);
-				dpn_len = strlen(newname) + 1;
-				dp[i].name = malloc(dpn_len);
-				strlcpy(dp[i].name, newname, dpn_len);
-				free(add);
-				free(newname);
-			}
-			dp[i].prefix = NULL;
-			dp[i].type = DTOP_ULONG;
-			dp[i].skip = DO_NOT_SKIP;
-			dp[i].initial_data_populated = NOT_POPULATED;
-		}
-
-		dpg->data_points = dp;
-		dpg->data_points_len = num;
-
-		dtop_register(dpg);
-	} else {
-		free(dpg->prefix);
-		free(dpg->file);
-		free(dpg);
-	}
-}
-
-/**
- * @brief Scans a directory for all important datapoints to be collected.
- *
- * Recursively scans a directory and locates all files which data will be
- * collected from.
- *
- * @param dir Directory to search.
- */
-static int dtop_search(char *dir)
-{
-	DIR *dp;
-	struct dirent *entry;
-	struct stat s;
-	char cwd[1024];
-
-	if (!getcwd(cwd, sizeof(cwd))) {
-		fprintf(stderr, "Failed to get current working dir\n");
-		return -1;
-	}
-
-	dp = opendir(dir);
-	if (dp == NULL) {
-		fprintf(stderr, "err=%d: %s\n", errno, strerror(errno));
-		fprintf(stderr, "Cannot open directory: %s\n", dir);
-		return DIR_FAILURE;
-	}
-
-	chdir(dir);
-
-	while ((entry = readdir(dp))) {
-		if (stat(entry->d_name, &s)) {
-			printf("stat err=%d: %s\n", errno, strerror(errno));
-			return DIR_FAILURE;
-		}
-
-		if (strcmp(".", entry->d_name) != 0 &&
-		   strcmp("..", entry->d_name) != 0 &&
-		   S_ISREG(s.st_mode)) {
-
-			dpg_construction(dir, entry->d_name);
-
-		} else if (strcmp(".", entry->d_name) != 0 &&
-			strcmp("..", entry->d_name) != 0 &&
-			S_ISDIR(s.st_mode)) {
-			int nd_len = strlen(dir) + strlen(entry->d_name) + 2;
-			char *newdir = malloc(nd_len);
-			strlcpy(newdir, dir, nd_len);
-			strlcat(newdir, entry->d_name, nd_len);
-			strlcat(newdir, "/", nd_len);
-			dtop_search(newdir);
-			free(newdir);
-		}
-	}
-
-	closedir(dp);
-	chdir(cwd);
-	return DIR_SUCCESS;
-}
-
-/**
- * @brief Calls dtop_search for any specified directory.
- *
- * @param dir Directory to search.
- */
-void dtop_gen_init(char *dir)
-{
-	dtop_search(dir);
-}
diff --git a/datatop/src/datatop_gen_poll.h b/datatop/src/datatop_gen_poll.h
deleted file mode 100644
index 6baffc9..0000000
--- a/datatop/src/datatop_gen_poll.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/************************************************************************
-Copyright (c) 2015, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_gen_poll.h
- * @brief Declares functions held within datatop_gen_poll.c
- */
-
-#ifndef DATATOP_GEN_POLL_H
-#define DATATOP_GEN_POLL_H
-
-#define DIR_SUCCESS 0
-#define DIR_FAILURE 1
-
-void dtop_gen_init(char *dir);
-#endif /*  DATATOP_GEN_POLL_H */
-
diff --git a/datatop/src/datatop_helpers.c b/datatop/src/datatop_helpers.c
deleted file mode 100644
index 325b824..0000000
--- a/datatop/src/datatop_helpers.c
+++ /dev/null
@@ -1,478 +0,0 @@
-/************************************************************************
-Copyright (c) 2015, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_helpers.c
- * @brief Contains functions which output data.
- *
- * Contains functions which are used for printing data to output streams.
- * Handles all formatting for data output. Also contains functions which
- * are responsible for data gathering and collection.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <time.h>
-#include <sys/time.h>
-#include <string.h>
-#include <errno.h>
-#include "datatop_interface.h"
-#include "datatop_linked_list.h"
-#include "datatop_fileops.h"
-
-/**
- * @brief Prints the name and prefix of a datapoint.
- *
- * @param dp Dp whose name and prefix is printed.
- * @param prefix Directory where dp is contained.
- * @param fw File to print the information to.
- * @return FILE_ERROR - Writing to file was unsuccessful.
- * @return FILE_SUCCESS - Writing to file was successful.
- */
-static int dtop_format_dp_names(struct dtop_data_point *dp, const char
-						*prefix, FILE *fw)
-{
-	if (dp->prefix) {
-		if (fprintf(fw, "\"%s:%s:%s\",", prefix, dp->prefix,
-							dp->name) < 0)
-			return FILE_ERROR;
-	} else {
-		if (fprintf(fw, "\"%s::%s\",", prefix, dp->name) < 0)
-			return FILE_ERROR;
-	}
-	return FILE_SUCCESS;
-}
-
-/**
- * @brief Prints the value of a datapoint.
- *
- * Checks the type of the value and will print it accordingly.
- *
- * @param dp Pointer to the data_point struct which holds the value that will
- *           be printed.
- * @param fw File to print the information to.
- * @return FILE_ERROR - Writing to file was unsuccessful.
- * @return FILE_SUCCESS - Writing to file was successful.
- */
-static int dtop_format_dp_values(struct dtop_data_point *dp, FILE *fw)
-{
-	switch (dp->type) {
-	case DTOP_ULONG:
-		if (fprintf(fw, "%"PRIu64, dp->data.d_ulong) < 0)
-			return FILE_ERROR;
-	break;
-	case DTOP_LONG:
-		if (fprintf(fw, "%"PRId64, dp->data.d_long) < 0)
-			return FILE_ERROR;
-	break;
-	case DTOP_UINT:
-		if (fprintf(fw, "%d", dp->data.d_uint) < 0)
-			return FILE_ERROR;
-	break;
-	case DTOP_INT:
-		if (fprintf(fw, "%u", dp->data.d_uint) < 0)
-			return FILE_ERROR;
-	break;
-	case DTOP_UCHAR:
-		if (fprintf(fw, "%c,", dp->data.d_uchar) < 0)
-			return FILE_ERROR;
-		if (fprintf(fw, "(0x%02X)", dp->data.d_uchar) < 0)
-			return FILE_ERROR;
-	break;
-	case DTOP_CHAR:
-		if (fprintf(fw, "%c,", dp->data.d_char) < 0)
-			return FILE_ERROR;
-		if (fprintf(fw, "(%d)", dp->data.d_char) < 0)
-			return FILE_ERROR;
-	break;
-	case DTOP_STR:
-		if (fprintf(fw, "\"%s\"", dp->data.d_str) < 0)
-			return FILE_ERROR;
-	break;
-	default:
-		if (fprintf(fw, "UNKNOWN_TYPE") < 0)
-			return FILE_ERROR;
-	break;
-	}
-	return FILE_SUCCESS;
-}
-
-/**
- * @brief Prints the name and prefix of a dp, formatted appropriately.
- *
- * @param dpset data_point_gatherer used to access dp directory.
- * @param dp data_point used to get datapoint prefix if available.
- */
-static void dtop_format_text_for_snapshot
-	(struct dtop_data_point_gatherer *dpset, struct dtop_data_point dp)
-{
-	printf("%s:", dpset->prefix);
-	if (dp.prefix)
-		printf("%s:", dp.prefix);
-
-	printf("%s::", dp.name);
-}
-
-/**
- * @brief Prints a datapoint value to a specified csv file.
- *
- * @param dp Datapoint that holds the value to be printed.
- * @param fw File to print to.
- * @return FILE_ERROR - Writing to file was unsuccessful.
- * @return FILE_SUCCESS - Writing to file was successful.
- */
-static int dtop_print_dp_csv(struct dtop_data_point *dp, FILE *fw)
-{
-	if (dtop_format_dp_values(dp, fw) == FILE_ERROR)
-		return FILE_ERROR;
-	if (fprintf(fw, ",") < 0)
-		return FILE_ERROR;
-	return FILE_SUCCESS;
-}
-
-/**
- * @brief Prints a datapoint value to the terminal.
- *
- * @param dp Holds the value to be printed print.
- * @param prefix Used to print prefix of the data_point.
- */
-static void dtop_print_dp(struct dtop_data_point *dp, const char *prefix)
-{
-	dtop_format_dp_names(dp, prefix, stdout);
-	printf(" ");
-	dtop_format_dp_values(dp, stdout);
-	printf("\n");
-}
-
-/**
- * @brief Finds delta(value) of a datapoint.
- *
- * Function accounts for different types that values may be.
- *
- * @param dpset Pointer to a data_point used as another parameter for printing.
- * @param dp Datapoint which contains the value to find the difference of.
- */
-static void dtop_handle_dp_type_for_snapshot(
-	struct dtop_data_point_gatherer *dpset, struct dtop_data_point dp)
-{
-	int64_t int64;
-
-	switch (dp.type) {
-	case DTOP_ULONG:
-	default:
-		/* This is less than ideal. Replace with 128-bit ops later */
-		int64 = (int64_t)dp.data.d_ulong
-			- (int64_t)dp.initial_data.d_ulong;
-		if (int64 != 0) {
-			dtop_format_text_for_snapshot(dpset, dp);
-			printf("%"PRId64"\n", int64);
-		}
-	break;
-
-	case DTOP_LONG:
-		/* This is less than ideal. Replace with 128-bit ops later */
-		int64 = (int64_t)dp.data.d_long
-			- (int64_t)dp.initial_data.d_long;
-		if (int64 != 0) {
-			dtop_format_text_for_snapshot(dpset, dp);
-			printf("%"PRId64"\n", int64);
-		}
-	break;
-
-	case DTOP_UINT:
-		int64 = (int64_t)dp.data.d_uint
-			- (int64_t)dp.initial_data.d_uint;
-		if (int64 != 0) {
-			dtop_format_text_for_snapshot(dpset, dp);
-			printf("%"PRId64"\n", int64);
-		}
-	break;
-
-	case DTOP_INT:
-		int64 = (int64_t)dp.data.d_int
-			- (int64_t)dp.initial_data.d_int;
-		if (int64 != 0) {
-			dtop_format_text_for_snapshot(dpset, dp);
-			printf("%"PRId64"\n", int64);
-		}
-	break;
-	}
-}
-
-/**
- * @brief Calls the dtop_print_dp_csv function for each data_point a dpg has access to.
- *
- * @param dpg A data_point_gatherer struct that is iterated through for each datapoint.
- * @param fw File to print datapoint values to.
- * @return FILE_ERROR - Writing to file was unsuccessful.
- * @return FILE_SUCCESS - Writing to file was successful.
- */
-static int dtop_print_dpg_csv(struct dtop_data_point_gatherer *dpg, FILE *fw)
-{
-	int i;
-
-	for (i = 0; i < dpg->data_points_len; i++)
-		if (dtop_print_dp_csv(&(dpg->data_points[i]), fw) == FILE_ERROR)
-			return FILE_ERROR;
-	return FILE_SUCCESS;
-}
-
-/**
- * @brief Calls the dtop_format_dp_names function for each data_point a dpg has access to.
- *
- * @param dpg A data_point_gatherer struct that is iterated through for each datapoint.
- * @param fw File to printg datapoint names and prefixes to.
- * @return FILE_ERROR - Writing to file was unsuccessful.
- * @return FILE_SUCCESS - Writing to file was successful.
- */
-int dtop_print_dpg_names_csv(struct dtop_data_point_gatherer *dpg, FILE *fw)
-{
-	int i;
-
-	for (i = 0; i < dpg->data_points_len; i++)
-		if (dtop_format_dp_names(&(dpg->data_points[i]),
-		dpg->prefix, fw) == FILE_ERROR)
-			return FILE_ERROR;
-
-	return FILE_SUCCESS;
-}
-
-/**
- * @brief Prints all dp values to a specified file.
- *
- * This function is responsible for the printing of all data_point values
- * to a specified file. It will iterate through the linked list which contains
- * all of the dpgs and will print each dp value, being sure to flush the buffer.
- *
- * @param dpg_list Pointer to first node of linked list which contains all dpgs.
- * @param fw File that data prints to.
- * @return FILE_ERROR - Writing to file was unsuccessful.
- * @return FILE_SUCCESS - Writing to file was successful.
- */
-int dtop_write_pollingdata_csv(struct dtop_linked_list *dpg_list, FILE *fw)
-{
-	struct dtop_linked_list *curr_ptr = dpg_list;
-	struct dtop_data_point_gatherer *dpset;
-
-	while (curr_ptr) {
-		dpset = (struct dtop_data_point_gatherer *) curr_ptr->data;
-		if (dtop_print_dpg_csv(dpset, fw) == FILE_ERROR)
-			return FILE_ERROR;
-		curr_ptr = curr_ptr->next_ptr;
-		fflush(fw);
-	}
-
-	if (fprintf(fw, "\n") < 0)
-		return FILE_ERROR;
-
-	return FILE_SUCCESS;
-}
-
-/**
- * @brief Calls the dtop_print_dp function for each data_point a dpg has access to.
- *
- * @param dpg A data_point_gatherer struct that is iterated through for each datapoint.
- */
-void dtop_print_dpg(struct dtop_data_point_gatherer *dpg)
-{
-	int i;
-	for (i = 0; i < dpg->data_points_len; i++)
-		dtop_print_dp(&(dpg->data_points[i]), dpg->prefix);
-}
-
-/**
- * @brief Stores the values for the datapoints and populates the initial value.
- *
- * @param dp A datapoint whose value will be stored.
- * @param str Str used for sscanf function call to find value of dp.
- */
-void dtop_store_dp(struct dtop_data_point *dp, const char *str)
-{
-	switch (dp->type) {
-	case DTOP_ULONG:
-		sscanf(str, "%"PRIu64, &(dp->data.d_ulong));
-		if (dp->initial_data_populated == NOT_POPULATED) {
-			dp->initial_data.d_ulong = dp->data.d_ulong;
-			dp->initial_data_populated = POPULATED;
-		}
-	break;
-	case DTOP_LONG:
-		sscanf(str, "%"PRId64, &(dp->data.d_long));
-		if (dp->initial_data_populated == NOT_POPULATED) {
-			dp->initial_data.d_long = dp->data.d_long;
-			dp->initial_data_populated = POPULATED;
-		}
-	break;
-	case DTOP_UINT:
-		sscanf(str, "%u",  &(dp->data.d_uint));
-		if (dp->initial_data_populated == NOT_POPULATED) {
-			dp->initial_data.d_uint = dp->data.d_uint;
-			dp->initial_data_populated = POPULATED;
-		}
-	break;
-	case DTOP_INT:
-		sscanf(str, "%d",  &(dp->data.d_int));
-		if (dp->initial_data_populated == NOT_POPULATED) {
-			dp->initial_data.d_int = dp->data.d_int;
-			dp->initial_data_populated = POPULATED;
-		}
-	break;
-	case DTOP_UCHAR:
-		sscanf(str, "%c",  &(dp->data.d_uchar));
-		if (dp->initial_data_populated == NOT_POPULATED) {
-			dp->initial_data.d_uchar = dp->data.d_uchar;
-			dp->initial_data_populated = POPULATED;
-		}
-	break;
-	case DTOP_CHAR:
-		sscanf(str, "%c",  &(dp->data.d_char));
-		if (dp->initial_data_populated == NOT_POPULATED) {
-			dp->initial_data.d_char = dp->data.d_char;
-			dp->initial_data_populated = POPULATED;
-		}
-	break;
-	case DTOP_STR:
-		sscanf(str, "%s",  dp->data.d_str);
-		if (dp->initial_data_populated == NOT_POPULATED) {
-			memcpy(dp->initial_data.d_str, dp->data.d_str,
-			       DTOP_DP_MAX_STR_LEN);
-			dp->initial_data_populated = POPULATED;
-		}
-	break;
-	default:
-	break;
-	}
-}
-
-/**
- * @brief Responsible for calculating and printing current time to file.
- *
- * Prints the time since 1970, in Seconds and Milliseconds.
- *
- * @param fw File that time is printed to.
- * @return FILE_ERROR - Writing to file was unsuccessful.
- * @return FILE_SUCCESS - Writing to file was successful.
- */
-int dtop_print_time_at_poll(FILE *fw)
-{
-	struct timeval tv;
-	gettimeofday(&tv, NULL);
-
-	if (fprintf(fw, "%10ld", tv.tv_sec) < 0)
-		return FILE_ERROR;
-
-	if (fprintf(fw, ".%06ld,", tv.tv_usec) < 0)
-		return FILE_ERROR;
-
-	return FILE_SUCCESS;
-}
-
-/**
- * @brief Polls all dp values and updates each value.
- *
- * @param dpg_list Pointer to first node of linked list which contains all dpgs.
- */
-void dtop_poll(struct dtop_linked_list *dpg_list)
-{
-	struct dtop_linked_list *curr_ptr = dpg_list;
-	struct dtop_data_point_gatherer *dpset;
-
-	while (curr_ptr) {
-		dpset = (struct dtop_data_point_gatherer *) curr_ptr->data;
-		dpset->poll(dpset);
-		curr_ptr = curr_ptr->next_ptr;
-	}
-}
-
-/**
- * @brief Prints the delta(value) of all data_points to terminal.
- *
- * @param dpg_list Pointer to first node of linked list which contains all dpgs.
- */
-void dtop_print_snapshot_diff(struct dtop_linked_list *dpg_list)
-{
-	int i;
-
-	struct dtop_linked_list *curr_ptr = dpg_list;
-	struct dtop_data_point_gatherer *dpset;
-	printf("\n");
-	printf("Change In Datapoint Values\n");
-	printf("---------------------------\n");
-	while (curr_ptr) {
-		dpset = (struct dtop_data_point_gatherer *) curr_ptr->data;
-		for (i = 0; i < dpset->data_points_len; i++)
-			dtop_handle_dp_type_for_snapshot(dpset,
-					  dpset->data_points[i]);
-		curr_ptr = curr_ptr->next_ptr;
-	}
-	printf("\n");
-}
-
-/**
- * @brief Resets the initial values of all data_points.
- *
- * @param dpg_list Pointer to first node of linked list which contains all dpgs.
- */
-void dtop_reset_dp_initial_values(struct dtop_linked_list *dpg_list)
-{
-	int i;
-
-	struct dtop_linked_list *curr_ptr = dpg_list;
-	struct dtop_data_point_gatherer *dpset;
-
-	while (curr_ptr) {
-		dpset = (struct dtop_data_point_gatherer *) curr_ptr->data;
-		for (i = 0; i < dpset->data_points_len; i++)
-			dpset->data_points[i].initial_data_populated
-							= NOT_POPULATED;
-		curr_ptr = curr_ptr->next_ptr;
-	}
-}
-
-/**
- * @brief Calls deconstructor method for all dpgs dynamically created.
- *
- * Checks to see if each dpg created has a deconstructor method. If not null,
- * function calls the appropiate deconstructor method to deallocate memory.
- *
- * @param dpg_list Pointer to first node of linked list which contains all dpgs.
- */
-void deconstruct_dpgs(struct dtop_linked_list *dpg_list)
-{
-	struct dtop_linked_list *curr_ptr = dpg_list;
-	struct dtop_data_point_gatherer *dpset;
-
-	while (curr_ptr) {
-		dpset = (struct dtop_data_point_gatherer *) curr_ptr->data;
-		if (dpset->deconstruct)
-			dpset->deconstruct(dpset);
-		curr_ptr = curr_ptr->next_ptr;
-	}
-}
diff --git a/datatop/src/datatop_interface.h b/datatop/src/datatop_interface.h
deleted file mode 100644
index 2928c26..0000000
--- a/datatop/src/datatop_interface.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/************************************************************************
-Copyright (c) 2015, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_interface.h
- * @brief Declares functions held within datatop.c and datatop_helpers.c
- *
- * Declares functions which are held within datatop.c and datatop_helpers.c.
- * Also defines data structures used for storing data gathered during polling
- * such as datapoint names, values, and prefixes along with other valuable
- * information.
- */
-
-#ifndef DATATOP_INTERFACE_H
-#define DATATOP_INTERFACE_H
-
-#include <inttypes.h>
-#include "datatop_linked_list.h"
-
-#define DTOP_ULONG 0
-#define DTOP_LONG  1
-#define DTOP_UINT  2
-#define DTOP_INT   3
-#define DTOP_UCHAR 4
-#define DTOP_CHAR  5
-#define DTOP_STR   6
-
-#define FILE_ERROR       -1
-#define FILE_SUCCESS      0
-#define SKIP              1
-#define DO_NOT_SKIP       0
-#define POPULATED         1
-#define NOT_POPULATED     0
-
-#define DTOP_POLL_OK      0
-#define DTOP_POLL_IO_ERR  1
-#define NOT_CHECKED       0
-
-#define QUIT              1
-
-#define DTOP_DP_MAX_STR_LEN 32
-
-#define DTOP_DP_HFILL   .initial_data_populated = NOT_POPULATED, \
-			.skip = 0
-
-/**
- * @struct dtop_data_union
- * @brief Provides the type for dp value.
- */
-union dtop_data_union {
-	uint64_t d_ulong;
-	int64_t d_long;
-	uint32_t d_uint;
-	int32_t d_int;
-	uint8_t d_uchar;
-	int8_t d_char;
-	char d_str[DTOP_DP_MAX_STR_LEN];
-};
-
-/**
- * @struct dtop_data_point
- * @brief Individual datapoint in a file.
- *
- * @var dtop_data_point::name
- * Stores the datapoints name.
- * @var dtop_data_point::prefix
- * Stores the individual prefix for the dp.
- * @var dtop_data_point::type
- * Type dp value is, see definitions.
- * @var dtop_data_point::initial_data
- * Holds the initial value of the dp the first time it was polled.
- * @var dtop_data_point::initial_data_populated
- * Variable that is changed when initial_data is populated.
- * @var dtop_data_point::data
- * Value of the dp at the most recent poll.
- */
-struct dtop_data_point {
-	char *name;
-	char *prefix;
-
-	/* Results of polling */
-	char type;
-	union dtop_data_union initial_data;
-	char initial_data_populated;
-	union dtop_data_union data;
-
-	/* Skip on subsequent polls */
-	char skip;
-};
-
-/**
- * @struct dtop_data_point_gatherer
- * @brief Struct used to hold data about a set of collected data.
- *
- * @var dtop_data_point_gatherer::prefix
- * Name of directory which data is collected from.
- * @var dtop_data_point_gatherer::file
- * File path that data is collected from.
- * @var dtop_data_point_gatherer::poll
- * Poll function takes a dtop_data_point_gatherer as parameter.
- * int equals, DTOP_POLL_IO_ERR - Poll of dpg unsuccessful, or
- * DTOP_POLL_OK - Poll of dpg successful.
- * @var dtop_data_point_gatherer::data_points
- * Pointer to a dtop_data_point struct (dp).
- * @var dtop_data_point_gatherer::data_points_len
- * Number of elements in the array of dp's the dpg accesses.
- */
-struct dtop_data_point_gatherer {
-	char *prefix;
-	char *file;
-	int (*poll)(struct dtop_data_point_gatherer *dpg);
-	void (*deconstruct)(struct dtop_data_point_gatherer *dpg);
-
-	struct dtop_data_point *data_points;
-	int data_points_len;
-
-	/* Private data */
-	void *priv;
-};
-
-void dtop_register(struct dtop_data_point_gatherer *dpg);
-void dtop_store_dp(struct dtop_data_point *dp, const char *str);
-void dtop_print_dpg(struct dtop_data_point_gatherer *dpg);
-void get_snapshot_diff(struct dtop_linked_list *dpg_list);
-void dtop_print_snapshot_diff(struct dtop_linked_list *dpg_list);
-void dtop_poll(struct dtop_linked_list *dpg_list);
-int dtop_print_time_at_poll(FILE *fw);
-int dtop_print_dpg_names_csv(struct dtop_data_point_gatherer *dpg, FILE *fw);
-int dtop_write_pollingdata_csv(struct dtop_linked_list *dpg_list, FILE *fw);
-void dtop_reset_dp_initial_values(struct dtop_linked_list *dpg_list);
-void deconstruct_dpgs(struct dtop_linked_list *dpg_list);
-int dtop_print_system_snapshot(char *file);
-
-
-#ifndef HAVE_STRL_FUNCTIONS
-#define strlcpy(X,Y,Z) strcpy(X,Y)
-#define strlcat(X,Y,Z) strcat(X,Y)
-#endif /* HAVE_STRL_FUNCTIONS */
-
-#endif /*  DATATOP_INTERFACE_H */
diff --git a/datatop/src/datatop_ip_table_poll.c b/datatop/src/datatop_ip_table_poll.c
deleted file mode 100644
index 09e504d..0000000
--- a/datatop/src/datatop_ip_table_poll.c
+++ /dev/null
@@ -1,344 +0,0 @@
-/************************************************************************
-Copyright (c) 2016, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_ip_table_poll.c
- * @brief Adds ability for TP Tables, Rules and Routes data collection
-          Unlike other polls, this is intended for running as a separate
-          thread as it can cause delays of > 3sec per poll
- *
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <time.h>
-#include <pthread.h>
-#include "datatop_interface.h"
-#include "datatop_fileops.h"
-#include "datatop_str.h"
-#include "datatop_polling.h"
-
-#define DTOP_IPTRR_POLL_PERIOD  5.00
-
-/**
-* @struct dtop_ip_table_vars
-* @brief Struct used to hold necessary variables for /proc/stat dpg
-*
-* @var dtop_ip_table_vars::line
-* Array of strings where necessary dp names and values are held.
-* @var dtop_ip_table_vars::line_count
-* Number of lines the file is that the dpg represents.
-*/
-struct dtop_ip_table_vars {
-	char *out_dir;
-}dtop_ip_table_storage;
-
-struct dtop_linked_list *ip_dpg_list = NULL;
-
-pthread_mutex_t dtop_ip_table_lock;
-
-/**
- * @brief Perform IP table command and store it in a file
- *
- * @param dpg Struct that polled data is added to.
- * @return DTOP_POLL_IO_ERR - Poll of dpg unsuccessful.
- * @return DTOP_POLL_OK - Poll of dpg successful.
- */
-int dtop_ip_table_poll(struct dtop_data_point_gatherer *dpg)
-{
-  FILE *fd;
-  FILE *fo = (FILE *)dpg->file;
-  char buf[1001];
-
-  time_t rawtime;
-  struct tm * timeinfo;
-
-  if(fo == NULL)
-  {
-    fprintf(stderr, "Could not fopen: %s\n", dpg->file);
-	  return DTOP_POLL_IO_ERR;
-  }
-
-  time ( &rawtime );
-  timeinfo = gmtime ( &rawtime );
-
-  fprintf ( fo, "============\nStart: %s==========\n", asctime (timeinfo) );
-  fflush(fo);
-
-  /* redirect stderr to output file */
-  dup2(fileno(fo), 2);
-
-  fd = popen((char *)dpg->priv, "r");
-  if(fd == NULL)
-  {
-    fprintf(stderr, "Could not popen: %s\n", (char *)dpg->priv);
-	  return DTOP_POLL_IO_ERR;
-  }
-
-  while(fgets(buf, 1000, fd) != NULL)
-  {
-    fputs(buf, fo);
-  }
-
-  fprintf ( fo, "============\nEnd: %s==========\n\n", asctime (timeinfo) );
-  fflush(fo);
-  pclose(fd);
-	return DTOP_POLL_OK;
-}
-
-/**
- * @brief Frees dynamically allocated IP table dpg.
- *
- * Frees the memory of the dpg along with it's data_points
- * and other malloc'd memory no longer needed.
- *
- * @param dpg Dpg to deconstruct and deallocate memory for.
- */
-static void dtop_ip_table_dpg_deconstructor
-			(struct dtop_data_point_gatherer *dpset)
-{
-	free(dpset->prefix);
-  if(dpset->file)
-  {
-     fclose((FILE *)dpset->file);
-  }
-
-	free(dpset);
-}
-
-/**
- * @brief Registers a new IP table dpg to the list.
- *
- * @param dpg Dpg to construct and allocate memory for.
- */
-void dtop_ip_table_register(struct dtop_data_point_gatherer *dpg)
-{
-  if (dpg)
-    ip_dpg_list = dtop_add_linked_list(dpg, ip_dpg_list);
-}
-
-/**
- * @brief Open the files for writing the output for each dpg.
- *
- * @param None
- */
-int dtop_ip_table_init_files()
-{
-  struct dtop_data_point_gatherer *dpset;
-  struct dtop_linked_list *curr_ptr = ip_dpg_list;
-  FILE *fd;
-
-  while(curr_ptr)
-  {
-    dpset = (struct dtop_data_point_gatherer *) curr_ptr->data;
-    fd = fopen(dpset->prefix, "a+");
-    if(!fd)
-    {
-      fprintf(stderr, "Could not fopen: %s\n", dpset->prefix);
-      return DTOP_POLL_IO_ERR;
-    }
-    dpset->file = (char *)fd;
-    curr_ptr = curr_ptr->next_ptr;
-  }
-  return DTOP_POLL_OK;
-}
-
-/**
- * @brief Perform cleanup of IP table dgp list at exit.
- *
- * @param None
- */
-void dtop_ip_table_poll_cleanup()
-{
-  pthread_mutex_lock(&dtop_ip_table_lock);
-  deconstruct_dpgs(ip_dpg_list);
-  dtop_rem_linked_list(ip_dpg_list);
-  pthread_mutex_unlock(&dtop_ip_table_lock);
-
-}
-
-/**
- * @brief The thread to poll for IP table data.
- *
- * @param arg ptr
- */
-void *dtop_ip_table_start_poll(void *arg)
-{
-  time_t start_t, curr_t;
-  double diff_t = 9999999.00; /* some high # > DTOP_IPTRR_POLL_PERIOD */
-  int ret = DTOP_POLL_OK;
-
-  (void) arg;
-
-  if (pthread_mutex_init(&dtop_ip_table_lock, NULL) != 0)
-  {
-      printf("\n mutex init failed\n");
-      return NULL;
-  }
-
-  atexit(dtop_ip_table_poll_cleanup);
-
-  if(DTOP_POLL_OK != ( ret = dtop_ip_table_init_files()))
-  {
-    return NULL;
-  }
-
-  while(1)
-  {
-    struct dtop_linked_list *curr_ptr = ip_dpg_list;
-    struct dtop_data_point_gatherer *dpset;
-
-    pthread_mutex_lock(&dtop_ip_table_lock);
-
-    if (diff_t >= DTOP_IPTRR_POLL_PERIOD)
-    {
-      printf("Poll for IP Tables, Rules & Routes\n");
-      time(&start_t);
-      while (curr_ptr)
-      {
-        dpset = (struct dtop_data_point_gatherer *) curr_ptr->data;
-        dpset->poll(dpset);
-        curr_ptr = curr_ptr->next_ptr;
-      }
-    }
-    pthread_mutex_unlock(&dtop_ip_table_lock);
-
-    /* sleep for 500 milliseconds */
-    usleep(500 * 1000);
-    time(&curr_t);
-    diff_t = difftime(curr_t, start_t);
-  }
-  return NULL;
-}
-
-/**
- * @brief Creates a dpg for ip table command
- *
- * Dynamically allocates memory for dpg which is then added to a linked list
- * via the dtop_register(dpg) function call.
- *
- * @param data_points dtop_data_point struct that dpg points to.
- * @param storage dtop_ip_table_vars struct that holds relevant dpg variables.
- */
-/*static void construct_ip_table_dpg(struct dtop_data_point
-		*data_points, struct dtop_ip_table_vars *command, int dp_count)
-*/
-static void construct_ip_table_dpg(char *command)
-{
-	struct dtop_data_point_gatherer *dpg = malloc
-		(sizeof(struct dtop_data_point_gatherer));
-  char *file_name = (char *)malloc(strlen(command)+ 1 + 1 + strlen(dtop_ip_table_storage.out_dir) + 4);
-  int i, fname_start_ind;
-
-  strcpy(file_name, dtop_ip_table_storage.out_dir);
-  strcat(file_name, "/");
-
-  fname_start_ind = strlen(file_name);
-  strcat(file_name, command);
-  strcat(file_name, ".txt");
-
-  for(i=fname_start_ind; file_name[i]; i++)
-  {
-    if(file_name[i] == ' ')
-      file_name[i] = '_';
-    if(file_name[i] == '/')
-      file_name[i] = '-';
-  }
-
-	dpg->prefix = file_name;
-	dpg->poll = dtop_ip_table_poll;
-	dpg->priv = (char *)command;
-  dpg->file = NULL;
-	dpg->deconstruct = dtop_ip_table_dpg_deconstructor;
-
-	dtop_ip_table_register(dpg);
-}
-
-/*
- * @brief Scans "/proc/stat" in order to autodetect dps.
- *
- * Searches through "/proc/stat" file for all available data
- * points to create as dp structs.
- *
- * @param storage dtop_ip_table_vars struct where relevant variables are stored.
- */
-
-/**
- * @brief Calls dtop_search for "/proc/stat" file.
- */
-void dtop_ip_table_init(char *out_dir)
-{
-	dtop_ip_table_storage.out_dir = out_dir;
-  construct_ip_table_dpg("ip xfrm state show");
-  construct_ip_table_dpg("ip xfrm policy show");
-  construct_ip_table_dpg("ip addr");
-  construct_ip_table_dpg("iptables -t raw -L -n -v");
-  construct_ip_table_dpg("iptables -t mangle -L -n -v");
-  construct_ip_table_dpg("iptables -L -n -v");
-  construct_ip_table_dpg("iptables -t nat -L -n -v");
-  construct_ip_table_dpg("ip6tables -t raw -L -n -v");
-  construct_ip_table_dpg("ip6tables -t mangle -L -n -v");
-  construct_ip_table_dpg("ip6tables -L -n -v");
-  construct_ip_table_dpg("ip6tables -t nat -L -n -v");
-  construct_ip_table_dpg("ip rule show");
-  construct_ip_table_dpg("ip -6 rule show");
-  construct_ip_table_dpg("ip route show table all");
-  construct_ip_table_dpg("ip -6 route show table all");
-  construct_ip_table_dpg("ip route show table rmnet_data0");
-  construct_ip_table_dpg("ip route show table rmnet_data1");
-  construct_ip_table_dpg("ip route show table rmnet_data2");
-  construct_ip_table_dpg("ip route show table rmnet_data6");
-  construct_ip_table_dpg("ip route show table rmnet_data7");
-  construct_ip_table_dpg("ip route show table r_rmnet_data0");
-  construct_ip_table_dpg("ip route show table r_rmnet_data1");
-  construct_ip_table_dpg("ip route show table r_rmnet_data2");
-  construct_ip_table_dpg("ip route show table r_rmnet_data6");
-  construct_ip_table_dpg("ip route show table r_rmnet_data7");
-  construct_ip_table_dpg("ip -6 route show table rmnet_data0");
-  construct_ip_table_dpg("ip -6 route show table rmnet_data1");
-  construct_ip_table_dpg("ip -6 route show table rmnet_data2");
-  construct_ip_table_dpg("ip -6 route show table rmnet_data6");
-  construct_ip_table_dpg("ip -6 route show table rmnet_data7");
-  construct_ip_table_dpg("ip -6 route show table r_rmnet_data0");
-  construct_ip_table_dpg("ip -6 route show table r_rmnet_data1");
-  construct_ip_table_dpg("ip -6 route show table r_rmnet_data2");
-  construct_ip_table_dpg("ip -6 route show table r_rmnet_data6");
-  construct_ip_table_dpg("ip -6 route show table r_rmnet_data7");
-  construct_ip_table_dpg("ip route show table wlan0");
-  construct_ip_table_dpg("ip -6 route show table wlan0");
-  construct_ip_table_dpg("ip route show table dummy0");
-  construct_ip_table_dpg("ip -6 route show table dummy0");
-  construct_ip_table_dpg("cat /proc/net/xfrm_stat");
-  construct_ip_table_dpg("cat /proc/sys/net/ipv4/ip_forward");
-  construct_ip_table_dpg("cat /proc/sys/net/ipv6/conf/all/forwarding");
-
-  printf("Poll for IP Tables, Rules & Routes every 5 seconds\n");
-}
diff --git a/datatop/src/datatop_linked_list.c b/datatop/src/datatop_linked_list.c
deleted file mode 100644
index 7e5b632..0000000
--- a/datatop/src/datatop_linked_list.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/************************************************************************
-Copyright (c) 2015, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_linked_list.c
- * @brief Necessary linked_list functions created.
- *
- * Holds function which adds to or creates a linked list
- * used for storing dtop_data_point_gatherer's (dpg's).
- * Datapoints are stored in linked list for ability to
- * iteratively poll and print efficiently. Handles creation
- * and deletion of memory for linked list nodes.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "datatop_linked_list.h"
-
-/**
- * @brief Adds a node to the beginning of a linked list.
- *
- * @param data A void pointer which can hold any data in the node.
- * @param list The list that is added to.
- * @return Updated linked list struct.
- */
-struct dtop_linked_list *dtop_add_linked_list(void *data,
-				struct dtop_linked_list *list)
-{
-	struct dtop_linked_list *list_node;
-	list_node = malloc(sizeof(struct dtop_linked_list));
-
-	if (!list_node) {
-		fprintf(stderr, "failed to allocate memory.\n");
-		exit(EXIT_FAILURE);
-	}
-
-	list_node->data = data;
-	list_node->next_ptr = list;
-	list = list_node;
-	return list;
-}
-
-/**
- * @brief Deletes a linked list.
- *
- * @param head_ptr Pointer to the first node in the linked list that is to be deleted.
- */
-void dtop_rem_linked_list(struct dtop_linked_list *head_ptr)
-{
-	struct dtop_linked_list *tmp_ptr = NULL;
-	while (head_ptr) {
-		tmp_ptr = head_ptr;
-		head_ptr = head_ptr->next_ptr;
-		free(tmp_ptr);
-	}
-}
diff --git a/datatop/src/datatop_linked_list.h b/datatop/src/datatop_linked_list.h
deleted file mode 100644
index 4386d02..0000000
--- a/datatop/src/datatop_linked_list.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/************************************************************************
-Copyright (c) 2015, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_linked_list.h
- * @brief Defines linked list struct and declares linked list methods.
- *
- * Defines linked list struct which can be used for any data
- * storage. Declares methods held within datatop_linked_list.c.
- */
-
-#ifndef DATATOP_LINKED_LIST_H
-#define DATATOP_LINKED_LIST_H
-
-/**
- * @struct dtop_linked_list
- * @brief Struct used to represent linked list node that stores a pointer with any type.
- *
- * @var dtop_linked_list::next_ptr
- * Pointer to next node in the list.
- * @var dtop_linked_list::data
- * Pointer to data the node stores.
- */
-struct dtop_linked_list {
-	struct dtop_linked_list *next_ptr;
-	void *data;
-};
-
-struct dtop_linked_list *dtop_add_linked_list(void *data,
-				struct dtop_linked_list *list);
-void dtop_rem_linked_list(struct dtop_linked_list *head_ptr);
-#endif /* DATATOP_LINKED_LIST_H */
-
diff --git a/datatop/src/datatop_meminfo_file_poll.c b/datatop/src/datatop_meminfo_file_poll.c
deleted file mode 100644
index 078b825..0000000
--- a/datatop/src/datatop_meminfo_file_poll.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/************************************************************************
-Copyright (c) 2015, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_meminfo_file_poll.c
- * @brief Adds ability for data collection from /proc/meminfo
- *
- * File contains methods for searching and polling data from
- * "/proc/meminfo"
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#include <stdlib.h>
-#include <inttypes.h>
-#include "datatop_interface.h"
-#include "datatop_fileops.h"
-#include "datatop_str.h"
-
-#define DTOP_MEM_SIZE 8192
-#define DTOP_MEM_LINE (DTOP_MEM_SIZE>>2)
-
-/**
-* @struct dtop_meminfo_vars
-* @brief Struct used to hold necessary variables for /proc/meminfo dpg
-*
-* @var dtop_meminfo_vars::line
-* Array of strings where necessary dp names and values are held.
-* @var dtop_meminfo_vars::line_count
-* Number of lines the file is that the dpg represents.
-*/
-struct dtop_meminfo_vars {
-	char **line;
-	int line_count;
-};
-
-/**
- * @brief Parses lines with data in "/proc/meminfo"
- *
- * @param line1 Line to parse to find datapoint names and values.
- * @param len1 Length of line1.
- * @param l Index in the dictionary the key/value pair is added to.
- * @param dict Dictionary the keys and values are added to.
- */
-int dt_meminfo_parse(char *line1, int len1,
-			int l, struct dt_procdict *dict)
-{
-	int i, k, n;
-	if (len1 < 1)
-		return 0;
-
-	if (line1 == 0 || dict == 0)
-		return 0;
-
-	k = l;
-	dict->key[k] = &line1[0];
-	for (i = 0; i < len1 && k < DTOP_DICT_SIZE; i++) {
-		if (line1[i] == ' ' || line1[i] == '	') {
-			line1[i] = 0;
-			n = i+1;
-			while (line1[n] == '	' || line1[n] == ' ')
-				n++;
-			dict->val[k] = &line1[n];
-			while (line1[n] != ' ')
-				n++;
-			line1[n] = 0;
-			break;
-		}
-	}
-	k++;
-	dict->max = k;
-	return k;
-}
-
-/**
- * @brief Stores the data collected from a "/proc/meminfo"
- *
- * @param dpg Struct that polled data is added to.
- * @return DTOP_POLL_IO_ERR - Poll of dpg unsuccessful.
- * @return DTOP_POLL_OK - Poll of dpg successful.
- */
-int dtop_meminfo_poll(struct dtop_data_point_gatherer *dpg)
-{
-	char *data;
-	int *line_len = malloc(sizeof(int) *
-			((struct dtop_meminfo_vars *)
-			(dpg->priv))->line_count);
-	int read;
-	struct dt_procdict dict;
-	int i, j, n, sum;
-
-	read = dt_read_file(dpg->file, &data, DTOP_MEM_SIZE);
-	if (read == 0 || data == 0)
-		return DTOP_POLL_IO_ERR;
-
-	sum = 0;
-	/* Assigns each line read from the file, a length */
-	for (n = 0; n < ((struct dtop_meminfo_vars *)
-				(dpg->priv))->line_count; n++) {
-		line_len[n] = dt_read_line(((struct dtop_meminfo_vars *)
-					(dpg->priv))->line[n],
-					   DTOP_MEM_LINE, data,
-					   DTOP_MEM_SIZE, sum);
-		if (n <= (((struct dtop_meminfo_vars *)
-			(dpg->priv))->line_count - 1)) {
-			sum += (line_len[n] + 1);
-		}
-
-	}
-
-	/* Stores dp names and values in dictionary */
-	for (i = 0; i < dpg->data_points_len; i++)
-		dt_meminfo_parse(((struct dtop_meminfo_vars *)
-			(dpg->priv))->line[i], line_len[i], i, &dict);
-
-	/* Assigns the dp value to the dp struct */
-	for (j = 0; j < dpg->data_points_len; j++) {
-		i = dt_find_dict_idx(dpg->data_points[j].name, &dict);
-		if (i >= 0 && i < dict.max) {
-			sscanf(dict.val[i], "%" PRIu64,
-			       &(dpg->data_points[i].data.d_ulong));
-			dpg->data_points[i].data.d_ulong *= 1024;
-			if (dpg->data_points[i].
-				initial_data_populated == NOT_POPULATED) {
-				dpg->data_points[i].initial_data.d_ulong
-					= dpg->data_points[i].data.d_ulong;
-				dpg->data_points[i].initial_data_populated
-					= POPULATED;
-			}
-		}
-	}
-
-	dt_free(&data);
-	free(line_len);
-	return DTOP_POLL_OK;
-}
-
-/**
- * @brief Frees dynamically allocated "/proc/meminfo" dpg.
- *
- * Frees the memory of the dpg along with it's data_points
- * and other malloc'd memory no longer needed.
- *
- * @param dpg Dpg to deconstruct and deallocate memory for.
- */
-static void dtop_meminfo_dpg_deconstructor
-			(struct dtop_data_point_gatherer *dpset)
-{
-	int i;
-	free(dpset->data_points);
-	for (i = 0; i < ((struct dtop_meminfo_vars *)
-				(dpset->priv))->line_count; i++)
-		free(((struct dtop_meminfo_vars *)(dpset->priv))->line[i]);
-	free(((struct dtop_meminfo_vars *)(dpset->priv))->line);
-	free(((struct dtop_meminfo_vars *)(dpset->priv)));
-	free(dpset);
-}
-
-/**
- * @brief Creates a dpg for "/proc/meminfo" file
- *
- * Dynamically allocates memory for dpg which is then added to a linked list
- * via the dtop_register(dpg) function call.
- *
- * @param data_points dtop_data_point struct that dpg points to.
- * @param storage dtop_meminfo_vars struct that holds relevant dpg variables.
- */
-static void construct_meminfo_file_dpg(struct dtop_data_point
-		*data_points, struct dtop_meminfo_vars *storage)
-{
-	struct dtop_data_point_gatherer *dpg = malloc
-		(sizeof(struct dtop_data_point_gatherer));
-	dpg->prefix = "/proc/meminfo";
-	dpg->file = "/proc/meminfo";
-	dpg->poll = dtop_meminfo_poll;
-	dpg->data_points = data_points;
-	dpg->priv = (struct dtop_meminfo_vars *)storage;
-	dpg->data_points_len = storage->line_count;
-	dpg->deconstruct = dtop_meminfo_dpg_deconstructor;
-
-	dtop_register(dpg);
-}
-
-/**
- * @brief Scans "/proc/meminfo in order to autodetect dps.
- *
- * Searches through "/proc/meminfo" file for all available data
- * points to create as dp structs.
- *
- * @param storage dtop_meminfo_vars struct where relevant variables are stored.
- */
-int dtop_meminfo_search(struct dtop_meminfo_vars *storage)
-{
-	int i, k, n, sum;
-	char *data;
-	int *line_len = malloc(sizeof(int) * storage->line_count);
-	int read;
-	struct dt_procdict dict;
-	struct dtop_data_point *data_points;
-
-	storage->line = malloc(storage->line_count * sizeof(*storage->line));
-
-	for (i = 0; i < storage->line_count; i++)
-		storage->line[i] = malloc(sizeof(char) * DTOP_MEM_LINE);
-
-	read = dt_read_file("/proc/meminfo", &data, DTOP_MEM_SIZE);
-	if (read == 0 || data == 0)
-		return DTOP_POLL_IO_ERR;
-
-	sum = 0;
-	/* Assigns each line read from the file, a length */
-	for (n = 0; n < storage->line_count; n++) {
-		line_len[n] = dt_read_line(storage->line[n],
-					   DTOP_MEM_LINE, data,
-					   DTOP_MEM_SIZE, sum);
-		if (n < (storage->line_count - 1))
-			sum += (line_len[n] + 1);
-	}
-
-	/* Stores dp names in dictionary */
-	for (i = 0; i < (storage->line_count); i++)
-		dt_parse_proc_same_line_key_and_val(storage->line[i],
-						line_len[i], i, &dict);
-
-	data_points = malloc
-		       (storage->line_count * sizeof(struct dtop_data_point));
-
-	k = 0;
-	/* Creates a dtop_data_point struct for each dp found in the file */
-	for (i = 0; i < dict.max; i++) {
-		data_points[i].name = dict.key[i];
-		data_points[i].prefix = NULL;
-		data_points[i].type = DTOP_ULONG;
-		k++;
-	}
-
-	/* Calls dpg constructor, dpg will point to the dp struct */
-	construct_meminfo_file_dpg(data_points, storage);
-
-	free(line_len);
-	dt_free(&data);
-
-	return DTOP_POLL_OK;
-}
-
-/**
- * @brief Calls dtop_search for "/proc/meminfo" file.
- */
-void dtop_meminfo_init(void)
-{
-	struct dtop_meminfo_vars *storage = malloc
-			(sizeof(struct dtop_meminfo_vars));
-	storage->line_count = dtop_get_file_line_amount("/proc/meminfo");
-	dtop_meminfo_search(storage);
-}
diff --git a/datatop/src/datatop_opt.c b/datatop/src/datatop_opt.c
deleted file mode 100644
index b10f593..0000000
--- a/datatop/src/datatop_opt.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/************************************************************************
-Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_opt.c
- * @brief Adds getopt functionality for CLI commands.
- *
- * Contains method for getopt functionality used for parsing
- * the CLI arguments into executable commands. Handles
- * errors which arise when parsing.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <ctype.h>
-#include <getopt.h>
-#include <time.h>
-#include "datatop_opt.h"
-#include "datatop_interface.h"
-#include "datatop_linked_list.h"
-#include "datatop_fileops.h"
-
-/**
- * @brief Populate the comand line options with sane defaults
- *
- * @param clopts Struct used to hold data regarding CLI arguments.
- */
-void dtop_load_default_options(struct cli_opts *clopts)
-{
-	memset(clopts, 0, sizeof(struct cli_opts));
-
-	clopts->priority = DEFAULT_NICE;
-}
-
-/**
- * @brief Parses all CLI commands for main() to execute.
- *
- * @param clopts Struct used to hold data regarding CLI arguments.
- * @param argc Parameter used to read CLI commands from.
- * @param argv Parameter used to read CLI arguments from.
- * @return PARSE_SUCCESS - CLI arguments read successfully,
- * @return PARSE_FAILURE - CLI arguments and/or input not valid.
- * @return PARSE_FORCE_EXIT - Exit immediately, print help options.
- */
-int dtop_parse_cli_opts(struct cli_opts *clopts, int argc, char **argv)
-{
-	int option;
-	time_t rawtime;
-	struct tm * timeinfo;
-	char timestamp[100];
-
-	time ( &rawtime );
-	timeinfo = gmtime ( &rawtime );
-	strftime (timestamp, 100,"%F_%H-%M-%S",timeinfo);
-
-	if (!clopts || !*argv) {
-		printf("Internal Error: Null Pointer\n");
-		goto error;
-	}
-
-	while ((option = getopt(argc, argv, "phri:t:w:o:s:n:")) != -1) {
-		switch (option) {
-		case 'p':
-			clopts->print_cl = OPT_CHOSE;
-		break;
-
-		case 'h':
-			dtop_print_help_opts();
-			return PARSE_FORCE_EXIT;
-		break;
-
-		case 'n':
-			clopts->priority = strtol(optarg, 0, 10);
-			if (clopts->priority > 19 || clopts->priority < -20) {
-				printf("Argument for -n is not valid. ");
-				printf("Must be between -20 and 19.\n");
-				goto error;
-			}
-		break;
-
-		case 'i':
-			clopts->poll_per = strtol(optarg, 0, 10);
-			if (clopts->poll_per <= 0) {
-				printf("Argument for -i is not valid. ");
-				printf("Must be positive integer.\n");
-				goto error;
-			}
-		break;
-
-		case 't':
-			clopts->poll_time = strtol(optarg, 0, 10);
-			clopts->poll_time_selected = POLL_TIME_SELECTED;
-			if (clopts->poll_time <= 0) {
-				printf("Argument for -t is not valid. ");
-				printf("Must be positive integer.\n");
-				goto error;
-			}
-		break;
-
-		case 'w':
-			if (dtop_check_writefile_access(optarg) == VALID) {
-				clopts->file_name = optarg;
-				clopts->print_csv = OPT_CHOSE;
-			} else {
-				goto error;
-			}
-		break;
-
-		case 'o':
-			if (dtop_check_out_dir_presence(optarg) != VALID) {
-				goto error;
-			}
-
-			if(strlen(optarg) + strlen(timestamp) > OUT_DIR_LEN_MAX) {
-				printf("Out dir too long!");
-				goto error;
-			}
-			strcpy(clopts->out_dir, optarg);
-			strcat(clopts->out_dir, "/");
-			strcat(clopts->out_dir, timestamp);
-			if(dtop_create_dir(clopts->out_dir) != INVALID) {
-				goto error;
-			}
-		break;
-
-		case 's':
-			if (dtop_check_writefile_access(optarg) == VALID)
-				clopts->snapshot_file = optarg;
-			else
-				goto error;
-		break;
-
-		case 'r':
-			clopts->iptables_rules_routes = OPT_CHOSE;
-		break;
-
-		case '?':
-		default:
-			goto error;
-		}
-	}
-
-	if (clopts->poll_time == 0) {
-		if (clopts->print_csv == 1)
-			clopts->poll_time = POLL_NOT_SPECIFIED;
-		else
-			clopts->poll_time = POLL_TIME_DEFAULT;
-	}
-	if (clopts->poll_per == 0)
-		clopts->poll_per = DEFAULT_POLL_INTERVAL;
-
-	return PARSE_SUCCESS;
-
-error:
-	printf("See datatop -h for help\n");
-	return PARSE_FAILURE;
-}
-
-/**
- * @brief Prints the options the user has for the program to terminal.
- */
-void dtop_print_help_opts(void)
-{
-	printf("The following datatop commands are:\n");
-	printf("\t-p\t\t\tPrint output to terminal\n");
-	printf("\t-i , seconds\t\tSpecify polling period\n");
-	printf("\t-t , seconds\t\tSpecify polling duration\n");
-	printf("\t-w , file name (.csv)\tWrite output to a file\n");
-	printf("\t-s , file name\t\tPrint system snapshot to a file\n");
-	printf("\t-n , nice value\t\tSet niceness (default 19)\n");
-	printf("\t-r , \t\t\tCapture IPTables, Rules and Routes\n");
-	printf("\t-o , out directory for -w options\t\tOut dir where the set of files are saved\n");
-	printf("\t-h\t\t\tGet help\n");
-}
-
-
-/**
-* @brief Prints the interactive options the user can enter during runtime.
-*/
-void dtop_print_interactive_opts(void)
-{
-	printf("The following interactive commands are:\n");
-	printf("\tq | quit\tTerminate program at any time\n");
-	printf("\ti\t\tPrint dp differences, reset initial dp values\n");
-	printf("\tl\t\tPrint dp differences since last reset\n");
-	printf("\n");
-}
diff --git a/datatop/src/datatop_opt.h b/datatop/src/datatop_opt.h
deleted file mode 100644
index a1ad288..0000000
--- a/datatop/src/datatop_opt.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/************************************************************************
-Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_opt.h
- * @brief Declares methods and defines struct used within datatop_opt.c
- *
- * Struct defined is used when parsing the CLI arguments.
- */
-
-#ifndef DATATOP_OPT_H
-#define DATATOP_OPT_H
-
-#define OPT_CHOSE             1
-#define OPT_NOT_CHOSE         0
-#define DEFAULT_POLL_INTERVAL 1
-#define POLL_NOT_SPECIFIED   -1
-#define POLL_TIME_DEFAULT     30
-#define POLL_TIME_SELECTED     1
-#define PARSE_SUCCESS     0
-#define PARSE_FAILURE    -1
-#define PARSE_FORCE_EXIT -2
-#define VALID 0
-#define INVALID -1
-#define DEFAULT_NICE 19               /* Lowest priority */
-#define OUT_DIR_LEN_MAX       150
-
-/**
- * @struct cli_opts
- * @brief Struct used to store arguments from CLI input.
- *
- * @var cli_opts::print_cl
- * Represents -p argument.
- * @var cli_opts::poll_per
- * Polling frequency argument.
- * @var cli_opts::poll_time
- * Polling duration argument.
- * @var cli_opts::cli_help
- * Represents -h argument.
- * @var cli_opts::file_name
- * File name argument.
- * @var cli_opts::print_csv
- * Represents -w argument.
- */
-struct cli_opts {
-	int print_cl;                   /* -p option */
-	long int poll_per;              /* -i option */
-	long int poll_time;             /* -t option */
-	int cli_help;                   /* -h option */
-	char *file_name;                /* -w option */
-	char *snapshot_file;            /* -s option */
-	int iptables_rules_routes;      /* -r option */
-	char out_dir[OUT_DIR_LEN_MAX];  /* -o option */
-	int print_csv;
-	int poll_time_selected;
-	int priority;                   /* -n option (niceness) */
-};
-
-int dtop_parse_cli_opts(struct cli_opts *clopts, int argc, char **argv);
-void dtop_print_help_opts(void);
-void dtop_print_interactive_opts(void);
-void dtop_load_default_options(struct cli_opts *clopts);
-
-#endif /* DATATOP_OPT_H */
-
diff --git a/datatop/src/datatop_polling.h b/datatop/src/datatop_polling.h
deleted file mode 100644
index 53d2c1b..0000000
--- a/datatop/src/datatop_polling.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/************************************************************************
-Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_dual_line_poll.h
- * @brief Declares methods held in datatop_dual_line_poll.c
- */
-
-#ifndef DATATOP_DUAL_LINE_POLL_H
-#define DATATOP_DUAL_LINE_POLL_H
-
-void dtop_dual_line_init(char *name);
-void dtop_single_line_init(char *name);
-void dtop_value_only_init(char *name);
-void dtop_meminfo_init(void);
-void dtop_dev_init(void);
-void dtop_stat_init(void);
-void dtop_ip_table_init(char *out_dir);
-void *dtop_ip_table_start_poll(void * arg);
-void dtop_cpu_stats_init(void);
-int dtop_value_only_poll(struct dtop_data_point_gatherer *dpg);
-void dtop_value_only_dpg_deconstructor
-			(struct dtop_data_point_gatherer *dpset);
-
-#endif /* DATATOP_DUAL_LINE_POLL_H */
diff --git a/datatop/src/datatop_single_line_poll.c b/datatop/src/datatop_single_line_poll.c
deleted file mode 100644
index a43036f..0000000
--- a/datatop/src/datatop_single_line_poll.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/************************************************************************
-Copyright (c) 2015, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_single_line_poll.c
- * @brief Adds ability for data collection from single line files
- *
- * File contains methods for searching and polling data from
- * single line files, meaning a file with multiple lines, but each
- * line contains the name of the dp, followed by the value.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include "datatop_interface.h"
-#include "datatop_fileops.h"
-#include "datatop_str.h"
-
-#define DTOP_SINGLE_SIZE 8192
-#define DTOP_SINGLE_LINE (DTOP_SINGLE_SIZE>>2)
-
-/**
-* @struct dtop_single_line_vars
-* @brief Struct used to hold necessary variables for dual_line_file dpgs.
-*
-* @var dtop_single_line_vars::line
-* Array of strings where necessary dp names and values are held.
-* @var dtop_single_line_vars::line_count
-* Number of lines the file is that the dpg represents.
-*/
-struct dtop_single_line_vars {
-	char **line;
-	int line_count;
-};
-
-/**
- * @brief Stores the data collected from a single_line files.
- *
- * @param dpg Struct that polled data is added to.
- * @return DTOP_POLL_IO_ERR - Poll of dpg unsuccessful.
- * @return DTOP_POLL_OK - Poll of dpg successful.
- */
-int dtop_single_line_poll(struct dtop_data_point_gatherer *dpg)
-{
-	char *data;
-	int *line_len = malloc(sizeof(int) *
-			((struct dtop_single_line_vars *)
-			(dpg->priv))->line_count);
-	int read;
-	struct dt_procdict dict;
-	int i, j, n, sum;
-
-	read = dt_read_file(dpg->file, &data, DTOP_SINGLE_SIZE);
-	if (read == 0 || data == 0)
-		return DTOP_POLL_IO_ERR;
-
-	sum = 0;
-	/* Assigns each line read from the file, a length */
-	for (n = 0; n < ((struct dtop_single_line_vars *)
-				(dpg->priv))->line_count; n++) {
-		line_len[n] = dt_read_line(((struct dtop_single_line_vars *)
-					(dpg->priv))->line[n],
-					   DTOP_SINGLE_LINE, data,
-					   DTOP_SINGLE_SIZE, sum);
-		if (n <= (((struct dtop_single_line_vars *)
-			(dpg->priv))->line_count - 1)) {
-			sum += (line_len[n] + 1);
-		}
-
-	}
-
-	/* Stores dp names and values in dictionary */
-	for (i = 0; i < dpg->data_points_len; i++)
-		dt_parse_proc_same_line_key_and_val((
-			(struct dtop_single_line_vars *)
-			(dpg->priv))->line[i], line_len[i], i, &dict);
-
-	/* Assigns the dp value to the dp struct */
-	for (j = 0; j < dpg->data_points_len; j++) {
-		i = dt_find_dict_idx(dpg->data_points[j].name, &dict);
-		if (i >= 0 && i < dict.max)
-			dtop_store_dp(&(dpg->data_points[j]),
-				      dict.val[i]);
-	}
-
-	dt_free(&data);
-	free(line_len);
-	return DTOP_POLL_OK;
-}
-
-/**
- * @brief Frees dynamically allocated single_line_file dpgs.
- *
- * Frees the memory of the dpg along with it's data_points
- * and other malloc'd memory no longer needed.
- *
- * @param dpg Dpg to deconstruct and deallocate memory for.
- */
-static void dtop_single_line_dpg_deconstructor
-			(struct dtop_data_point_gatherer *dpset)
-{
-	int i;
-	free(dpset->data_points);
-	for (i = 0; i < ((struct dtop_single_line_vars *)
-				(dpset->priv))->line_count; i++)
-		free(((struct dtop_single_line_vars *)(dpset->priv))->line[i]);
-	free(((struct dtop_single_line_vars *)(dpset->priv))->line);
-	free(((struct dtop_single_line_vars *)(dpset->priv)));
-	free(dpset);
-}
-
-/**
- * @brief Creates a dpg for a single_line file.
- *
- * Dynamically allocates memory for dpg which is then added to a linked list
- * via the dtop_register(dpg) function call.
- *
- * @param name Name of file dpg represents.
- * @param data_points dtop_data_point struct that dpg points to.
- * @param storage dtop_single_line_vars struct that holds relevant dpg variables.
- */
-static void construct_single_line_file_dpg(char *name, struct dtop_data_point
-		*data_points, struct dtop_single_line_vars *storage)
-{
-	struct dtop_data_point_gatherer *dpg = malloc
-		(sizeof(struct dtop_data_point_gatherer));
-	dpg->prefix = name;
-	dpg->file = name;
-	dpg->poll = dtop_single_line_poll;
-	dpg->data_points = data_points;
-	dpg->priv = (struct dtop_single_line_vars *)storage;
-	dpg->data_points_len = storage->line_count;
-	dpg->deconstruct = dtop_single_line_dpg_deconstructor;
-
-	dtop_register(dpg);
-}
-
-/**
- * @brief Scans a single_line file for all datapoints and creats dps.
- *
- * Searches through a single_line file (Key followed by value on the
- * same line) for all available data points to create as dp structs.
- *
- * @param name Name of file.
- * @param storage dtop_single_line_vars struct where relevant variables are stored.
- */
-int dtop_single_line_search(char *name, struct dtop_single_line_vars *storage)
-{
-	int i, k, n, sum;
-	char *data;
-	int *line_len = malloc(sizeof(int) * storage->line_count);
-	int read;
-	struct dt_procdict dict;
-	struct dtop_data_point *data_points;
-
-	storage->line = malloc(storage->line_count * sizeof(*storage->line));
-
-	for (i = 0; i < storage->line_count; i++)
-		storage->line[i] = malloc(sizeof(char) * DTOP_SINGLE_LINE);
-
-	read = dt_read_file(name, &data, DTOP_SINGLE_SIZE);
-	if (read == 0 || data == 0)
-		return DTOP_POLL_IO_ERR;
-
-	sum = 0;
-	/* Assigns each line read from the file, a length */
-	for (n = 0; n < storage->line_count; n++) {
-		line_len[n] = dt_read_line(storage->line[n],
-					   DTOP_SINGLE_LINE, data,
-					   DTOP_SINGLE_SIZE, sum);
-		if (n < (storage->line_count - 1))
-			sum += (line_len[n] + 1);
-	}
-
-	/* Stores dp names and values in dictionary */
-	for (i = 0; i < (storage->line_count); i++)
-		dt_parse_proc_same_line_key_and_val(storage->line[i],
-						line_len[i], i, &dict);
-
-	data_points = malloc
-		       (storage->line_count * sizeof(struct dtop_data_point));
-
-	k = 0;
-	/* Creates a dtop_data_point struct for each dp found in the file */
-	for (i = 0; i < dict.max; i++) {
-		if (dict.val[i][0] == '-')
-			data_points[k].type = DTOP_LONG;
-		else
-			data_points[k].type = DTOP_ULONG;
-		data_points[i].name = dict.key[i];
-		data_points[i].prefix = NULL;
-		k++;
-	}
-
-	/* Calls dpg constructor, dpg will point to the dp struct */
-	construct_single_line_file_dpg(name, data_points, storage);
-
-	free(line_len);
-	dt_free(&data);
-
-	return DTOP_POLL_OK;
-}
-
-/**
- * @brief Calls dtop_search for a files with single line format.
- *
- * Single line format refers to a file, where each line contains
- * the name of a dp, followed by the value of a dp.
- */
-void dtop_single_line_init(char *name)
-{
-	struct dtop_single_line_vars *storage = malloc
-			(sizeof(struct dtop_single_line_vars));
-	storage->line_count = dtop_get_file_line_amount(name);
-	dtop_single_line_search(name, storage);
-}
diff --git a/datatop/src/datatop_stat_poll.c b/datatop/src/datatop_stat_poll.c
deleted file mode 100644
index 88320b5..0000000
--- a/datatop/src/datatop_stat_poll.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/************************************************************************
-Copyright (c) 2015, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_stat_poll.c
- * @brief Adds ability for data collection from /proc/stat
- *
- * File contains methods for searching and polling data from
- * "/proc/stat"
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include "datatop_interface.h"
-#include "datatop_fileops.h"
-#include "datatop_str.h"
-
-#define DTOP_STAT_SIZE 16384
-#define DTOP_STAT_LINE (DTOP_STAT_SIZE>>2)
-
-/**
-* @struct dtop_stat_vars
-* @brief Struct used to hold necessary variables for /proc/stat dpg
-*
-* @var dtop_stat_vars::line
-* Array of strings where necessary dp names and values are held.
-* @var dtop_stat_vars::line_count
-* Number of lines the file is that the dpg represents.
-*/
-struct dtop_stat_vars {
-	char **line;
-	int line_count;
-};
-
-/**
- * @brief Parses lines with data in "/proc/stat"
- *
- * @param line1 Line to parse to find datapoint names and values.
- * @param len1 Length of line1.
- * @param n_index Index in the dictionary the key (name) is added to.
- * @param v_index Index in the dictionary the value is added to.
- * @param dict Dictionary the keys and values are added to.
- */
-static int dt_stat_parse(char *line1, int len1,
-			int n_index, int v_index, struct dt_procdict *dict)
-{
-	int i, k, j, start = 0;
-	if (len1 < 1)
-		return 0;
-
-	if (line1 == 0 || dict == 0)
-		return 0;
-
-	dict->key[n_index] = &line1[0];
-	for (i = 0; i < len1; i++) {
-		if (line1[i] == ' ') {
-			line1[i] = 0;
-			start = (i+1);
-			break;
-		}
-	}
-
-	k = v_index;
-	for (i = start; i < len1 && k < DTOP_DICT_SIZE; i++) {
-		if (line1[i] != ' ') {
-			dict->val[k] = &line1[i];
-			for (j = i; j < len1; j++) {
-				if (line1[j] == ' ') {
-					line1[j] = 0;
-					break;
-				}
-			}
-			i = j;
-			k++;
-		}
-	}
-
-	dict->max = k;
-	return k;
-}
-
-/**
- * @brief Stores the data collected from "/proc/stat"
- *
- * @param dpg Struct that polled data is added to.
- * @return DTOP_POLL_IO_ERR - Poll of dpg unsuccessful.
- * @return DTOP_POLL_OK - Poll of dpg successful.
- */
-int dtop_stat_poll(struct dtop_data_point_gatherer *dpg)
-{
-	char *data;
-	int *line_len = malloc(sizeof(int) *
-			((struct dtop_stat_vars *)
-			(dpg->priv))->line_count);
-	int read;
-	struct dt_procdict dict;
-	int i, n, sum;
-	int dp_count = 0;
-
-	read = dt_read_file(dpg->file, &data, DTOP_STAT_SIZE);
-	if (read == 0 || data == 0)
-		return DTOP_POLL_IO_ERR;
-
-	sum = 0;
-	/* Assigns each line read from the file, a length */
-	for (n = 0; n < ((struct dtop_stat_vars *)
-				(dpg->priv))->line_count; n++) {
-		line_len[n] = dt_read_line(((struct dtop_stat_vars *)
-					(dpg->priv))->line[n],
-					   DTOP_STAT_LINE, data,
-					   DTOP_STAT_SIZE, sum);
-		if (n <= (((struct dtop_stat_vars *)
-			(dpg->priv))->line_count - 1)) {
-			sum += (line_len[n] + 1);
-		}
-
-	}
-
-	/* Stores dp names and values in dictionary */
-	for (i = 0; i < ((struct dtop_stat_vars *)(dpg->priv))->line_count; i++)
-		dp_count = dt_stat_parse(((struct dtop_stat_vars *)
-			(dpg->priv))->line[i], line_len[i], i, dp_count, &dict);
-
-	/* Assigns the dp value to the dp struct */
-	for (n = 0; n < dp_count; n++) {
-		dtop_store_dp(&(dpg->data_points[n]),
-				dict.val[n]);
-	}
-
-	dt_free(&data);
-	free(line_len);
-	return DTOP_POLL_OK;
-}
-
-/**
- * @brief Frees dynamically allocated "/proc/stat" dpg.
- *
- * Frees the memory of the dpg along with it's data_points
- * and other malloc'd memory no longer needed.
- *
- * @param dpg Dpg to deconstruct and deallocate memory for.
- */
-static void dtop_stat_dpg_deconstructor
-			(struct dtop_data_point_gatherer *dpset)
-{
-	int i;
-	for (i = 0; i < dpset->data_points_len; i++)
-		free(dpset->data_points[i].name);
-	free(dpset->data_points);
-	for (i = 0; i < ((struct dtop_stat_vars *)
-				(dpset->priv))->line_count; i++)
-		free(((struct dtop_stat_vars *)(dpset->priv))->line[i]);
-	free(((struct dtop_stat_vars *)(dpset->priv))->line);
-	free(((struct dtop_stat_vars *)(dpset->priv)));
-
-	free(dpset);
-}
-
-/**
- * @brief Creates a dpg for "/proc/stat" file
- *
- * Dynamically allocates memory for dpg which is then added to a linked list
- * via the dtop_register(dpg) function call.
- *
- * @param data_points dtop_data_point struct that dpg points to.
- * @param storage dtop_stat_vars struct that holds relevant dpg variables.
- * @param dp_count Number of data_points in data_points array
- */
-static void construct_stat_file_dpg(struct dtop_data_point
-		*data_points, struct dtop_stat_vars *storage, int dp_count)
-{
-	struct dtop_data_point_gatherer *dpg = malloc
-		(sizeof(struct dtop_data_point_gatherer));
-	dpg->prefix = "/proc/stat";
-	dpg->file = "/proc/stat";
-	dpg->poll = dtop_stat_poll;
-	dpg->data_points = data_points;
-	dpg->priv = (struct dtop_stat_vars *)storage;
-	dpg->data_points_len = dp_count;
-	dpg->deconstruct = dtop_stat_dpg_deconstructor;
-
-	dtop_register(dpg);
-}
-
-/**
- * @brief Scans "/proc/stat" in order to autodetect dps.
- *
- * Searches through "/proc/stat" file for all available data
- * points to create as dp structs.
- *
- * @param storage dtop_stat_vars struct where relevant variables are stored.
- */
-int dtop_stat_search(struct dtop_stat_vars *storage)
-{
-	int i, n, sum;
-	char *data;
-	int *line_len = malloc(sizeof(int) * storage->line_count);
-	int read;
-	struct dt_procdict dict;
-	int dp_count = 0;
-	int end;
-	int *dp_per_line;
-	struct dtop_data_point *data_points;
-	int count = 0;
-
-	storage->line = malloc(storage->line_count * sizeof(*storage->line));
-
-	for (i = 0; i < storage->line_count; i++)
-		storage->line[i] = malloc(sizeof(char) * DTOP_STAT_LINE);
-
-	read = dt_read_file("/proc/stat", &data, DTOP_STAT_SIZE);
-	if (read == 0 || data == 0)
-		return DTOP_POLL_IO_ERR;
-
-	sum = 0;
-	/* Assigns each line read from the file, a length */
-	for (n = 0; n < storage->line_count; n++) {
-		line_len[n] = dt_read_line(storage->line[n],
-					   DTOP_STAT_LINE, data,
-					   DTOP_STAT_SIZE, sum);
-		if (n < (storage->line_count - 1))
-			sum += (line_len[n] + 1);
-	}
-
-	dp_per_line = malloc(sizeof(int) * (storage->line_count));
-	/* Stores dp names in dictionary */
-
-	for (i = 0; i < (storage->line_count); i++) {
-		end = dp_count;
-		dp_count = dt_stat_parse(storage->line[i],
-				line_len[i], i, dp_count, &dict);
-		dp_per_line[i] = (dp_count - end);
-	}
-
-	data_points = malloc(dp_count * sizeof(struct dtop_data_point));
-
-	for (i = 0; i < (storage->line_count); i++) {
-		for (n = 0; n < dp_per_line[i]; n++) {
-			if (dp_per_line[i] == 1) {
-				int dk_len = strlen(dict.key[i]) + 1;
-				int dp_len;
-				char *newname = malloc(dk_len);
-				strlcpy(newname, dict.key[i], dk_len);
-				dp_len = strlen(newname) + 1;
-				data_points[count].name = malloc(dp_len);
-				strlcpy(data_points[count].name, newname,
-					dp_len);
-				free(newname);
-			} else {
-				char *add = malloc(15 * sizeof(char));
-				char *newname;
-				int nn_len, dpn_len;
-				snprintf(add, 15 * sizeof(char), "[%d]:", n);
-				nn_len = strlen(dict.key[i]) + strlen(add) + 1;
-				newname = malloc(nn_len);
-				strlcpy(newname, dict.key[i], nn_len);
-				strlcat(newname, add, nn_len);
-				dpn_len = strlen(newname) + 1;
-				data_points[count].name = malloc(dpn_len);
-				strlcpy(data_points[count].name, newname,
-					dpn_len);
-				free(newname);
-				free(add);
-			}
-			data_points[count].prefix = NULL;
-			data_points[count].type = DTOP_ULONG;
-			data_points[count].initial_data_populated
-						= NOT_POPULATED;
-			data_points[count].skip = DO_NOT_SKIP;
-			count++;
-		}
-	}
-
-	/* Calls dpg constructor, dpg will point to the dp struct */
-	construct_stat_file_dpg(data_points, storage, dp_count);
-	free(dp_per_line);
-	free(line_len);
-	dt_free(&data);
-
-	return DTOP_POLL_OK;
-}
-
-/**
- * @brief Calls dtop_search for "/proc/stat" file.
- */
-void dtop_stat_init(void)
-{
-	struct dtop_stat_vars *storage = malloc
-			(sizeof(struct dtop_stat_vars));
-	storage->line_count = dtop_get_file_line_amount("/proc/stat");
-	dtop_stat_search(storage);
-}
diff --git a/datatop/src/datatop_str.c b/datatop/src/datatop_str.c
deleted file mode 100644
index 3d25751..0000000
--- a/datatop/src/datatop_str.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/************************************************************************
-Copyright (c) 2015, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_str.c
- * @brief Algorithms used for storing and polling data created.
- *
- * Methods created which store collected data from files in
- * dictionaries for many different file formats.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include "datatop_str.h"
-
-/** @brief Reads an individual line from a file.
- *
- * Will read from buf2 until either a '\n' is reached, or the end of buf1
- * or buf2 is reached. The result is guaranteed to be null terminated.
- *
- * @param buf1 Destination buffer to store the read line.
- * @param len1 Size of destination buffer.
- * @param buf2 Source buffer to read lines from. Const, will not be
- *             modified by this function.
- * @param len2 Size of the source buffer.
- * @param start Offset (in bytes) to start reading from source buffer.
- * @return Length of line (of chars).
- */
-int dt_read_line(char *buf1, int len1, const char *buf2, int len2, int start)
-{
-	int i, j;
-
-	if (len1 < 1 || len2 < 1 || start < 0 || start > len2)
-		return 0;
-
-	if (buf1 == 0 || buf2 == 0)
-		return 0;
-
-	i = 0;
-	j = start;
-
-	while ((i < (len1-1)) && (j < len2)) {
-		buf1[i] = buf2[j];
-		if (buf1[i] == '\n')
-			break;
-		i++;
-		j++;
-	}
-	buf1[i] = 0;
-	return i;
-}
-
-/**
- * @brief Parses files that have Names and Values on separate lines.
- *
- * Use this method to parse files that have names on one line, followed by
- * the corresponding values on the next line. Such as "/proc/net/netstat"
- *
- * @param line1 First line that is parsed to store the datapoint names as keys.
- * @param len1 Length of line1.
- * @param line2 Second line that is parsed to store the datapoint values as dictionary values.
- * @param len2 Length of line2.
- * @param dict Dictionary that keys and values are added to.
- * @return Number of key/val pairs in the dictionary.
- */
-int dt_parse_proc_dictionary(char *line1, int len1, char *line2,
-			     int len2, struct dt_procdict *dict)
-{
-	int i, j, k;
-
-	if (len1 < 1 || len2 < 1)
-		return 0;
-
-	if (line1 == 0 || line2 == 0 || dict == 0)
-		return 0;
-
-	k = 0;
-	for (i = 0; i < len1 && k < DTOP_DICT_SIZE; i++) {
-		if (line1[i] == ' ') {
-			dict->key[k] = &line1[i+1];
-			line1[i] = 0;
-			k++;
-		}
-	}
-	j = k;
-
-	k = 0;
-	for (i = 0; i < len2 && k < DTOP_DICT_SIZE; i++) {
-		if (line2[i] == ' ') {
-			dict->val[k] = &line2[i+1];
-			line2[i] = 0;
-			k++;
-		}
-	}
-	if (j != k) {
-		if (k < j)
-			j = k;
-		fprintf(stderr, "Warning, list index length mismatch\n");
-	}
-	dict->max = j;
-	return j;
-}
-
-/**
- * @brief Parses line for prefixes for files that have individual data_point prefixes.
- *
- * Use this method for lines that have a prefix before data begins. Such as
- * "/proc/net/snmp"
- *
- * @param line1 Line to parse to find datapoint prefix.
- * @param len1 Length of line1.
- * @param dict Dictionary prefix is being added to.
- */
-void dt_parse_for_prefix(char *line1, int len1, struct dt_procdict *dict)
-{
-	int i, j, k;
-
-	if (len1 < 1)
-		return;
-
-	if (line1 == 0 || dict == 0)
-		return;
-
-	k = 0;
-	for (i = 0; i < len1 && k < DTOP_DICT_SIZE; i++) {
-		if (line1[i] == ' ') {
-			dict->key[k] = &line1[i+1];
-			line1[i] = 0;
-			k++;
-		}
-	}
-
-	for (j = 0; j < k; j++)
-		dict->val[j] = &line1[0];
-
-	for (j = 0; j < len1; j++) {
-		if (line1[j] == ':')
-			line1[j] = 0;
-	}
-}
-
-/**
- * @brief Finds the dictionary index of a data_point name.
- *
- * @param str Name of data_point that is to be located in dict.
- * @param dict Dictionary to look through for dp name.
- * @return Dictionary index of name if found.
- * @return -1 if name not found in dictionary keys.
- */
-int dt_find_dict_idx(const char *str, struct dt_procdict *dict)
-{
-	int i;
-	if (str == 0 || dict == 0)
-		return -1;
-
-	for (i = 0; i < dict->max; i++) {
-		if (dict->key[i] && !strcmp(str, dict->key[i]))
-			return i;
-	}
-	return -1;
-}
-
-/**
- * @brief Parses files that have Names and Values on same line.
- *
- * Use this method to parse lines that have a dp name followed
- * by a dp value. Such as "/proc/net/snmp6"
- *
- * @param line1 Line to parse to find datapoint names and values.
- * @param len1 Length of line1.
- * @param l Index in the dictionary the key/val pair is added to.
- * @param dict Dictionary the keys and values are added to.
- * @return Number of key/val pairs in the dictionary.
- */
-int dt_parse_proc_same_line_key_and_val(char *line1, int len1,
-					int l, struct dt_procdict *dict)
-{
-	int i, k, n;
-	if (len1 < 1)
-		return 0;
-
-	if (line1 == 0 || dict == 0)
-		return 0;
-
-	k = l;
-	for (i = 0; i < len1 && k < DTOP_DICT_SIZE; i++) {
-		if (line1[i] == ' ') {
-			dict->key[k] = &line1[0];
-			line1[i] = 0;
-			for (n = i+1; n < len1; n++) {
-				if (line1[n] != ' ') {
-					dict->val[k] = &line1[n+1];
-					break;
-				}
-			}
-			break;
-		}
-	}
-	k++;
-	dict->max = k;
-	return k;
-}
-
-/**
- * @brief Parses files that have a single line.
- *
- * Parses a single line file for csv, tab-separated, space-separated, and single
- * value formats and adds values to a dictionary. Such as
- * "/proc/sys/net/ipv4/ping_group_range"
- *
- * Use this method to parse lines that contain only values.
- *
- * @param line1 Line to parse.
- * @param len1 Length of line1.
- * @param dict Dictionary datapoints are added to.
- * @return Number of values dictionary holds.
- */
-int dt_single_line_parse(char *line1, int len1, struct dt_procdict *dict)
-{
-	int i, k;
-	k = 0;
-	dict->val[k] = &line1[0];
-	k++;
-
-	for (i = 0; i < len1; i++) {
-		if (line1[i] == ' ' || line1[i] == ',' || line1[i] == '	') {
-			line1[i] = 0;
-			dict->val[k] = &line1[i+1];
-			k++;
-		}
-	}
-	dict->max = k;
-	return k;
-}
diff --git a/datatop/src/datatop_str.h b/datatop/src/datatop_str.h
deleted file mode 100644
index 1f30370..0000000
--- a/datatop/src/datatop_str.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/************************************************************************
-Copyright (c) 2015, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_str.h
- * @brief Declares methods held in datatop_str.c and defines dictionary struct.
- */
-
-#ifndef DATATOP_STR_H
-#define DATATOP_STR_H
-
-#define DTOP_DICT_SIZE 2048
-
-/**
- * @struct dt_procdict
- * @brief Struct used to create dictionary for parsing purposes.
- *
- * @var dt_procdict::max
- * Number of key/val pairs in dictionary.
- * @var dt_procdict::key
- * Holds the key that is used to access the value.
- * @var dt_procdict::val
- * Value that the key accesses.
- */
-struct dt_procdict {
-	int max;
-	char *key[DTOP_DICT_SIZE];
-	char *val[DTOP_DICT_SIZE];
-};
-
-int dt_read_line(char *buf1, int len1, const char *buf2, int len2, int start);
-
-int dt_parse_proc_dictionary(char *line1, int len1, char *line2, int len2,
-			     struct dt_procdict *dict);
-
-int dt_find_dict_idx(const char *str, struct dt_procdict *dict);
-
-int dt_parse_proc_same_line_key_and_val(char *line1, int len1, int l,
-					struct dt_procdict *dict);
-
-void dt_parse_for_prefix(char *line1, int len1, struct dt_procdict *dict);
-
-int dt_single_line_parse(char *line1, int len1, struct dt_procdict *dict);
-#endif /* DATATOP_STR_H */
diff --git a/datatop/src/datatop_sys_snap.c b/datatop/src/datatop_sys_snap.c
deleted file mode 100644
index ee9ea95..0000000
--- a/datatop/src/datatop_sys_snap.c
+++ /dev/null
@@ -1,199 +0,0 @@
-/************************************************************************
-Copyright (c) 2015, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-#include <unistd.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <sys/stat.h>
-
-#include "datatop_interface.h"
-#include "datatop_fileops.h"
-#include "datatop_str.h"
-#include "datatop_opt.h"
-
-#define DTOP_SNAP_SIZE 8192
-#define DTOP_SNAP_LINE (DTOP_SNAP_SIZE>>2)
-
-static int dtop_system_snapshot_helper_print(char *file, const char *str)
-{
-	FILE *snap_file = fopen(file, "a");
-
-	if (snap_file) {
-		if (fprintf(snap_file, "%s", str) < 0) {
-			fclose(snap_file);
-			return FILE_ERROR;
-		}
-	} else {
-			return FILE_ERROR;
-	}
-	fflush(snap_file);
-	fclose(snap_file);
-	return FILE_SUCCESS;
-}
-
-/**
- * @brief A helper function to dtop_print_system_snapshot.
- *
- * @param fw File that desired system data is printed to.
- * @return FILE_ERROR - Writing to file was unsuccessful.
- * @return FILE_SUCCESS - Writing to file was successful.
- */
-static int dtop_run_and_log(char *file, const char *c1, const char **args)
-{
-	int i;
-	pid_t child_pid;
-
-	i = 0;
-	dtop_system_snapshot_helper_print(file, "\n"
-	"--------------------------------------------------------------\n"
-	"Command: ");
-	while(args[i] != 0) {
-		dtop_system_snapshot_helper_print(file, args[i++]);
-		dtop_system_snapshot_helper_print(file, " ");
-	}
-	dtop_system_snapshot_helper_print(file, "\n");
-
-
-	child_pid = fork();
-	if (child_pid == 0) {
-		int fd = open(file, O_WRONLY | O_APPEND | O_CREAT,
-						S_IRUSR | S_IWUSR);
-		dup2(fd, STDOUT_FILENO);
-		dup2(fd, STDERR_FILENO);
-		close(fd);
-		execvp(c1, (char * const *)args);
-		printf("Failed to execute %s\n", c1);
-		printf("errno=%d error=%s\n", errno, strerror(errno));
-		close(STDOUT_FILENO);
-		close(STDERR_FILENO);
-		exit(0);
-	} else if (child_pid < 0) {
-		return FILE_ERROR;
-	} else {
-		int return_status;
-		waitpid(child_pid, &return_status, 0);
-
-		if (return_status != 0)
-			return FILE_ERROR;
-	}
-
-	return FILE_SUCCESS;
-}
-
-
-
-/* IPv4 */
-const char *ip_addr_cmd[] = {"ip", "addr", 0};
-const char *ip_route_cmd[] = {"ip", "route", 0};
-const char *ip_route_all_tables_cmd[] = {"ip", "route", "show", "table", "all", 0};
-const char *ip_rule_cmd[] = {"ip", "rule", "show", 0};
-const char *ip_tables_cmd[] = {"iptables", "-L", "-n", "-v", 0};
-const char *ip_tables_nat_cmd[] = {"iptables", "-t", "nat", "-L", "-n", "-v", 0};
-const char *ip_tables_mangle_cmd[] = {"iptables", "-t", "mangle", "-L", "-n", "-v", 0};
-const char *ip_tables_raw_cmd[] = {"iptables", "-t", "raw", "-L", "-n", "-v", 0};
-
-/* IPv6 */
-const char *ip6_addr_cmd[] = {"ip", "-6", "addr", 0};
-const char *ip6_route_cmd[] = {"ip", "-6", "route", 0};
-const char *ip6_route_all_tables_cmd[] = {"ip", "-6", "route", "show", "table", "all", 0};
-const char *ip6_rule_cmd[] = {"ip", "-6", "rule", "show", 0};
-const char *ip6_tables_cmd[] = {"ip6tables", "-L", "-n", "-v", 0};
-const char *ip6_tables_nat_cmd[] = {"ip6tables", "-t", "nat", "-L", "-n", "-v", 0};
-const char *ip6_tables_mangle_cmd[] = {"ip6tables", "-t", "mangle", "-L", "-n", "-v", 0};
-const char *ip6_tables_raw_cmd[] = {"ip6tables", "-t", "raw", "-L", "-n", "-v", 0};
-
-/* Misc */
-const char *rps_config[] = {"cat", "/sys/class/net/rmnet_mhi0/queues/rx-0/rps_cpus", 0};
-const char *if_config[] = {"/data/busybox/busybox", "ifconfig", 0};
-const char *netcfg[] = {"netcfg", 0};
-const char *softnet_stat[] = {"cat", "/proc/net/softnet_stat", 0};
-
-/* XFRM logging */
-const char *xfrm_state[] = {"ip", "xfrm", "state", "show", 0};
-const char *xfrm_policy[] = {"ip", "xfrm", "policy", "show", 0};
-const char *xfrm_netstat[] = {"cat", "/proc/net/xfrm_stat", 0};
-
-#define DO_DTOP_RUN_AND_LOG(X) \
-	dtop_run_and_log(file, X[0], X);
-/**
- * @brief Prints a System snapshot to a file specified by the user.
- *
- * @param fw File that system snapshot is printed to.
- * @return FILE_ERROR - Writing to file was unsuccessful.
- * @return FILE_SUCCESS - Writing to file was successful.
- */
-int dtop_print_system_snapshot(char *file)
-{
-	dtop_system_snapshot_helper_print(file,
-	"==============================================================\n"
-	"    System Data Snapshot - Captured with Data Top             \n"
-	"    Version ");
-	dtop_system_snapshot_helper_print(file, VERSION);
-	dtop_system_snapshot_helper_print(file, "\n"
-	"==============================================================\n"
-	"\n");
-
-	/* IPv4 */
-	DO_DTOP_RUN_AND_LOG(ip_addr_cmd);
-	DO_DTOP_RUN_AND_LOG(ip_route_cmd);
-	DO_DTOP_RUN_AND_LOG(ip_route_all_tables_cmd);
-	DO_DTOP_RUN_AND_LOG(ip_rule_cmd);
-	DO_DTOP_RUN_AND_LOG(ip_tables_cmd);
-	DO_DTOP_RUN_AND_LOG(ip_tables_nat_cmd);
-	DO_DTOP_RUN_AND_LOG(ip_tables_mangle_cmd);
-	DO_DTOP_RUN_AND_LOG(ip_tables_raw_cmd);
-
-	/* IPv6 */
-	DO_DTOP_RUN_AND_LOG(ip6_addr_cmd);
-	DO_DTOP_RUN_AND_LOG(ip6_route_cmd);
-	DO_DTOP_RUN_AND_LOG(ip6_route_all_tables_cmd);
-	DO_DTOP_RUN_AND_LOG(ip6_rule_cmd);
-	DO_DTOP_RUN_AND_LOG(ip6_tables_cmd);
-	DO_DTOP_RUN_AND_LOG(ip6_tables_nat_cmd);
-	DO_DTOP_RUN_AND_LOG(ip6_tables_mangle_cmd);
-	DO_DTOP_RUN_AND_LOG(ip6_tables_raw_cmd);
-
-	/* Misc */
-	DO_DTOP_RUN_AND_LOG(rps_config);
-	DO_DTOP_RUN_AND_LOG(if_config);
-	DO_DTOP_RUN_AND_LOG(netcfg);
-	DO_DTOP_RUN_AND_LOG(softnet_stat);
-
-	/* XFRM logging */
-	DO_DTOP_RUN_AND_LOG(xfrm_state);
-	DO_DTOP_RUN_AND_LOG(xfrm_policy);
-	DO_DTOP_RUN_AND_LOG(xfrm_netstat);
-
-	return FILE_SUCCESS;
-}
diff --git a/datatop/src/datatop_value_only_poll.c b/datatop/src/datatop_value_only_poll.c
deleted file mode 100644
index bf6fc54..0000000
--- a/datatop/src/datatop_value_only_poll.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/************************************************************************
-Copyright (c) 2015, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-************************************************************************/
-
-/**
- * @file datatop_value_only_poll.c
- * @brief Adds ability for data collection from files with only values
- *
- * File contains methods for searching and polling data from
- * value_only files, meaning a file with a single line, containing
- * only values.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include "datatop_interface.h"
-#include "datatop_fileops.h"
-#include "datatop_str.h"
-
-#define DTOP_SINGLE_SIZE 8192
-#define DTOP_SINGLE_LINE (DTOP_SINGLE_SIZE>>2)
-
-/**
- * @brief Stores the data collected from a value_only files.
- *
- * @param dpg Struct that polled data is added to.
- * @return DTOP_POLL_IO_ERR - Poll of dpg unsuccessful.
- * @return DTOP_POLL_OK - Poll of dpg successful.
- */
-int dtop_value_only_poll(struct dtop_data_point_gatherer *dpg)
-{
-	char *data;
-	int line_len;
-	char line[DTOP_SINGLE_LINE];
-	int read;
-	struct dt_procdict dict;
-	int j;
-	FILE *check = fopen(dpg->file, "r");
-	if (check) {
-		fclose(check);
-		read = dt_read_file(dpg->file, &data, DTOP_SINGLE_SIZE);
-	} else {
-		return DTOP_POLL_IO_ERR;
-	}
-
-	if (read == 0 || data == 0)
-		return DTOP_POLL_IO_ERR;
-
-	line_len = dt_read_line(line, DTOP_SINGLE_LINE, data,
-					   DTOP_SINGLE_SIZE, 0);
-
-	/* Stores dp values in dictionary */
-	dt_single_line_parse(line, line_len, &dict);
-
-	/* Assigns the dp value to the dp struct */
-	for (j = 0; j < dpg->data_points_len; j++)
-		dtop_store_dp(&(dpg->data_points[j]), dict.val[j]);
-
-	dt_free(&data);
-	return DTOP_POLL_OK;
-}
-
-/**
- * @brief Frees dynamically allocated single line dpg.
- *
- * Frees the memory of the dpg along with it's data_points
- * and other malloc'd memory no longer needed.
- *
- * @param dpg Dpg to deconstruct and deallocate memory for.
- */
-void dtop_value_only_dpg_deconstructor
-			(struct dtop_data_point_gatherer *dpset)
-{
-	int i;
-	for (i = 0; i < dpset->data_points_len; i++)
-		free(dpset->data_points[i].name);
-	free(dpset->data_points);
-	free(dpset->file);
-	free(dpset);
-}
-
-/**
- * @brief Creates a dpg for a single line file.
- *
- * Dynamically allocates memory for dpg which is then added to a linked list
- * via the dtop_register(dpg) function call.
- *
- * @param name Name of file dpg represents.
- * @param data_points dtop_data_point struct that dpg points to.
- * @param dp_count Number of data_points in data_points array
- */
-static void construct_value_only_dpg(char *name, struct dtop_data_point
-		*data_points, int dp_count)
-{
-	struct dtop_data_point_gatherer *dpg = malloc
-		(sizeof(struct dtop_data_point_gatherer));
-	dpg->prefix = name;
-	dpg->file = name;
-	dpg->poll = dtop_value_only_poll;
-	dpg->data_points = data_points;
-	dpg->data_points_len = dp_count;
-	dpg->deconstruct = dtop_value_only_dpg_deconstructor;
-
-	dtop_register(dpg);
-}
-
-/**
- * @brief Scans a single line file in order to autodetect dps.
- *
- * Searches through a file that contains a single line and only
- * values in order to detect and create dp's/
- *
- * @param name Name of file to scan.
- */
-int dtop_value_only_search(char *name)
-{
-	int i;
-	char *data;
-	char line[DTOP_SINGLE_LINE];
-	int line_len;
-	int read;
-	struct dt_procdict dict;
-	struct dtop_data_point *data_points;
-
-
-	read = dt_read_file(name, &data, DTOP_SINGLE_SIZE);
-	if (read == 0 || data == 0) {
-		free(name);
-		return DTOP_POLL_IO_ERR;
-	}
-
-	line_len = dt_read_line(line,
-				DTOP_SINGLE_LINE, data,
-				DTOP_SINGLE_SIZE, 0);
-
-	/* Stores dp values in dictionary */
-	dt_single_line_parse(line, line_len, &dict);
-
-	data_points = malloc(dict.max * sizeof(struct dtop_data_point));
-
-	/* Creates a dtop_data_point struct for each dp found in the file */
-	for (i = 0; i < dict.max; i++) {
-		char *newname = malloc(sizeof(10));
-		if (dict.val[i][0] == '-')
-			data_points[i].type = DTOP_LONG;
-		else
-			data_points[i].type = DTOP_ULONG;
-		data_points[i].name = malloc(sizeof(10));
-		if (dict.max > 1)
-			snprintf(newname, sizeof(10), "[%d]:", i);
-		else
-			strlcpy(newname, "", sizeof(10));
-		strlcpy(data_points[i].name, newname, sizeof(10));
-		free(newname);
-		data_points[i].prefix = NULL;
-		data_points[i].skip = DO_NOT_SKIP;
-		data_points[i].initial_data_populated = NOT_POPULATED;
-	}
-
-	/* Calls dpg constructor, dpg will point to the dp struct */
-	construct_value_only_dpg(name, data_points, dict.max);
-
-	dt_free(&data);
-	return DTOP_POLL_OK;
-}
-
-/**
- * @brief Calls dtop_search for files with a single line and only values.
- */
-void dtop_value_only_init(char *name)
-{
-	char *file = malloc(strlen(name) + 1);
-	strlcpy(file, name, strlen(name) + 1);
-	dtop_value_only_search(file);
-}
diff --git a/rmnetctl/Android.mk b/rmnetctl/Android.mk
deleted file mode 100644
index 8338432..0000000
--- a/rmnetctl/Android.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-include $(call all-subdir-makefiles)
-
diff --git a/rmnetctl/cli/Android.mk b/rmnetctl/cli/Android.mk
deleted file mode 100644
index 75cacb7..0000000
--- a/rmnetctl/cli/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := rmnetcli.c
-LOCAL_CFLAGS := -Wall -Werror
-
-LOCAL_C_INCLUDES := $(LOCAL_PATH)/../inc
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../src
-LOCAL_C_INCLUDES += $(LOCAL_PATH)
-
-LOCAL_MODULE := rmnetcli
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SHARED_LIBRARIES := librmnetctl
-
-LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/bin
-
-include $(BUILD_EXECUTABLE)
diff --git a/rmnetctl/cli/Makefile.am b/rmnetctl/cli/Makefile.am
deleted file mode 100644
index a17b79e..0000000
--- a/rmnetctl/cli/Makefile.am
+++ /dev/null
@@ -1,9 +0,0 @@
-AM_CFLAGS = -Wall -Werror -Wundef -Wstrict-prototypes -Wno-trigraphs
-AM_CFLAGS += -I./../inc
-rmnetcli_SOURCES = rmnetcli.c
-bin_PROGRAMS = rmnetcli
-requiredlibs = ../src/librmnetctl.la
-rmnetcli_LDADD = $(requiredlibs)
-LOCAL_MODULE := librmnetctl
-LOCAL_PRELINK_MODULE := false
-include $(BUILD_SHARED_LIBRARY)
diff --git a/rmnetctl/cli/rmnetcli.c b/rmnetctl/cli/rmnetcli.c
deleted file mode 100644
index c02850b..0000000
--- a/rmnetctl/cli/rmnetcli.c
+++ /dev/null
@@ -1,503 +0,0 @@
-/******************************************************************************
-
-			R M N E T C L I . C
-
-Copyright (c) 2013-2015, 2017-2018 The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-	* Redistributions of source code must retain the above copyright
-	  notice, this list of conditions and the following disclaimer.
-	* Redistributions in binary form must reproduce the above
-	  copyright notice, this list of conditions and the following
-	  disclaimer in the documentation and/or other materials provided
-	  with the distribution.
-	* Neither the name of The Linux Foundation nor the names of its
-	  contributors may be used to endorse or promote products derived
-	  from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-******************************************************************************/
-
-/******************************************************************************
-
-  @file    rmnetcli.c
-  @brief   command line interface to expose rmnet control API's
-
-  DESCRIPTION
-  File containing implementation of the command line interface to expose the
-  rmnet control configuration .
-
-******************************************************************************/
-
-/*===========================================================================
-				INCLUDE FILES
-===========================================================================*/
-
-#include <sys/socket.h>
-#include <stdint.h>
-#include <linux/netlink.h>
-#include <string.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include "rmnetcli.h"
-#include "librmnetctl.h"
-
-#define RMNET_MAX_STR_LEN  16
-
-#define _RMNETCLI_CHECKNULL(X)		do { if (!X) {                         \
-print_rmnet_api_status(RMNETCTL_INVALID_ARG, RMNETCTL_CFG_FAILURE_NO_COMMAND); \
-				rmnetctl_cleanup(handle);                      \
-				return RMNETCTL_INVALID_ARG;                   \
-		} } while (0);
-#define _STRTOUI32(X)           (uint32_t)strtoul(X, NULL, 0)
-#define _STRTOUI16(X)           (uint16_t)strtoul(X, NULL, 0)
-#define _STRTOUI8(X)           (uint8_t)strtoul(X, NULL, 0)
-#define _STRTOI32(X)           (int32_t)strtol(X, NULL, 0)
-
-#define _5TABS 		"\n\t\t\t\t\t"
-#define _2TABS 		"\n\t\t"
-
-/*!
-* @brief Contains a list of error message from CLI
-*/
-char rmnetcfg_error_code_text
-[RMNETCFG_TOTAL_ERR_MSGS][RMNETCTL_ERR_MSG_SIZE] = {
-	"Help option Specified",
-	"ERROR: No\\Invalid command was specified\n",
-	"ERROR: Could not allocate buffer for Egress device\n"
-};
-
-/*!
-* @brief Method to display the syntax for the commands
-* @details Displays the syntax and usage for the commands
-* @param void
-* @return void
-*/
-static void rmnet_api_usage(void)
-{
-	printf("RmNet API Usage:\n\n");
-	printf("rmnetcli help                            Displays this help\n");
-	printf("\n");
-	printf("rmnetcli assocnetdev <dev_name>          Registers the RmNet");
-	printf(_5TABS" data driver on a particular");
-	printf(_5TABS" device.dev_name cannot");
-	printf(_5TABS" be larger than 15");
-	printf(_5TABS" characters. Returns");
-	printf(_5TABS" the status code.\n\n");
-	printf("rmnetcli unassocnetdev <dev_name>        Unregisters the");
-	printf(_5TABS" RmNet data driver on a particular");
-	printf(_5TABS" device. dev_name cannot");
-	printf(_5TABS" be larger than 15");
-	printf(_5TABS" characters. Returns");
-	printf(_5TABS" the status code.\n\n");
-	printf("rmnetcli getnetdevassoc <dev_name>       Get if the RmNet");
-	printf(_5TABS" data driver is registered on");
-	printf(_5TABS" a particular device.");
-	printf(_5TABS" dev_name cannot be");
-	printf(_5TABS" larger than 15");
-	printf(_5TABS" characters. Returns 1");
-	printf(_5TABS" if is registered and");
-	printf(_5TABS" 0 if it is not");
-	printf(_5TABS" registered\n\n");
-	printf("rmnetcli setledf <egress_flags>          Sets the egress data");
-	printf(_2TABS" <agg_size>              format for a particular link.");
-	printf(_2TABS" <agg_count>             dev_name cannot be larger");
-	printf(_2TABS" <dev_name>              than 15 characters.");
-	printf(_5TABS" Returns the status code\n\n");
-	printf("rmnetcli getledf <dev_name>              Gets the egress data");
-	printf(_5TABS" format for a particular link.");
-	printf(_5TABS" dev_name cannot be larger");
-	printf(_5TABS" than 15. Returns the 4");
-	printf(_5TABS" byte unsigned integer");
-	printf(_5TABS" egress_flags\n\n");
-	printf("rmnetcli setlidf <ingress_flags>         Sets the ingress");
-	printf(_2TABS" <tail_spacing>          data format for a particular");
-	printf(_2TABS" <dev_name>              link. ingress_flags is 4");
-	printf(_5TABS" byte unsigned integer.");
-	printf(_5TABS" tail_spacing is a one.");
-	printf(_5TABS" byte unsigned integer.");
-	printf(_5TABS" dev_name cannot be");
-	printf(_5TABS" larger than 15.");
-	printf(_5TABS" characters. Returns");
-	printf(_5TABS" the status code\n\n");
-	printf("rmnetcli getlidf <dev_name>              Gets the ingress");
-	printf(_5TABS" data format for a particular");
-	printf(_5TABS" link. dev_name cannot be");
-	printf(_5TABS" larger than 15. Returns");
-	printf(_5TABS" the 4 byte unsigned");
-	printf(_5TABS" integer ingress_flags\n\n");
-	printf("rmnetcli setlepc <logical_ep_id>         Sets the logical");
-	printf(_2TABS" <rmnet_mode>            endpoint configuration for");
-	printf(_2TABS" <dev_name>              a particular link.");
-	printf(_2TABS" <egress_dev_name>       logical_ep_id are 32bit");
-	printf(_5TABS" integers from -1 to 31.");
-	printf(_5TABS" rmnet_mode is a 1 byte");
-	printf(_5TABS" unsigned integer of");
-	printf(_5TABS" value none, vnd or");
-	printf(_5TABS" bridged. dev_name");
-	printf(_5TABS" and egress_dev_name");
-	printf(_5TABS" cannot be larger");
-	printf(_5TABS" than 15 characters");
-	printf(_5TABS" Returns the status code\n\n");
-	printf("rmnetcli unsetlepc <logical_ep_id>       Un-sets the logical");
-	printf(_2TABS"  <dev_name>              endpoint configuration for");
-	printf(_5TABS" a particular link.");
-	printf(_5TABS" integers from -1 to 31.");
-	printf(_5TABS" dev_name cannot be larger");
-	printf(_5TABS" than 15 characters");
-	printf(_5TABS" Returns the status code\n\n");
-	printf("rmnetcli getlepc <logical_ep_id>         Sets the logical");
-	printf(_2TABS" <dev_name>              endpoint configuration for a");
-	printf(_5TABS" particular link.");
-	printf(_5TABS" logical_ep_id are 32bit");
-	printf(_5TABS" integers from -1 to 31.");
-	printf(_5TABS" Returns the rmnet_mode");
-	printf(_5TABS" and egress_dev_name.");
-	printf(_5TABS" rmnet_mode is a 1");
-	printf(_5TABS" byte unsigned integer");
-	printf(_5TABS" of value none, vnd or");
-	printf(_5TABS" bridged. dev_name and");
-	printf(_5TABS" egress_dev_name cannot be");
-	printf(_5TABS" larger than 15 ");
-	printf(_5TABS" characters. Returns the");
-	printf(_5TABS" status code\n\n");
-	printf("rmnetcli newvnd <dev_id>                 Creates a new");
-	printf(_5TABS" virtual network device node.");
-	printf(_5TABS" dev_id is an int");
-	printf(_5TABS" less than 32. Returns");
-	printf(_5TABS" the status code\n\n");
-	printf("rmnetcli newvndprefix <dev_id> <name_prefix>   Creates");
-	printf(_5TABS" virtual network device node.");
-	printf(_5TABS" dev_id is an int");
-	printf(_5TABS" less than 32. Prefix");
-	printf(_5TABS" must be less than");
-	printf(_5TABS" 15 chars. Returns");
-	printf(_5TABS" the status code\n\n");
-	printf("rmnetcli newvndname <dev_id> <name_prefix>   Creates");
-	printf(_5TABS" virtual network device node.");
-	printf(_5TABS" dev_id is an int");
-	printf(_5TABS" less than 32. Name");
-	printf(_5TABS" must be less than");
-	printf(_5TABS" 15 chars. Returns");
-	printf(_5TABS" the status code\n\n");
-	printf("rmnetcli getvndname <dev_id>              Get name of");
-	printf(_5TABS" network device node from id\n\n");
-	printf("rmnetcli freevnd <dev_id>              Removes virtual");
-	printf(_5TABS" network device node. dev_name");
-	printf(_5TABS" cannot be larger than 15.");
-	printf(_5TABS" Returns the status code\n\n");
-	printf("rmnetcli addvnctcflow <dev_id>            Add a modem flow");
-	printf(_2TABS" <mdm_flow_hndl>         handle - tc flow handle");
-	printf(_2TABS" <tc_flow_hndl>          mapping for a virtual network");
-	printf(_2TABS" device node\n\n");
-	printf("rmnetcli delvnctcflow <dev_id>            Delete a modem flow");
-	printf(_2TABS" <mdm_flow_hndl>         handle - tc flow handle");
-	printf(_2TABS" <tc_flow_hndl>          mapping for a virtual network");
-	printf(_2TABS" device node\n\n");
-	printf("**************************\n");
-	printf("RmNet RTM_NETLINK API Usage:\n\n");
-	printf("rmnetcli -n newlink  <dev_id>            Add a vnd w/ newlink");
-	printf(_2TABS" <vnd>                   string - vnd device_name");
-	printf(_2TABS" <vnd id>                int - new vnd id");
-	printf(_2TABS" [flags]                 int - starting flag config\n\n");
-	printf("rmnetcli -n changelink  <dev_id>         Change a vnd's flags");
-	printf(_2TABS" <vnd>                   string - vnd device_name");
-	printf(_2TABS" <vnd id>                int - new vnd id");
-	printf(_2TABS" <flags>                 int - new flag config\n\n");
-	printf("rmnetcli -n dellink <dev_name>           Delete a vnd");
-	printf(_2TABS"                         by inputting dev name\n\n");
-	printf("rmnetcli -n bridgelink  <dev_name>       Bridge a vnd and a dev");
-	printf(_2TABS" <vnd id>                by specifying dev id and vnd id\n\n");
-
-}
-
-static void print_rmnetctl_lib_errors(uint16_t error_number)
-{
-	if ((error_number > RMNETCTL_API_SUCCESS) &&
-		(error_number < RMNETCTL_API_ERR_ENUM_LENGTH)) {
-		printf("%s", rmnetctl_error_code_text[error_number]);
-	}
-	if ((error_number >= RMNETCFG_ERR_NUM_START) &&
-	(error_number < RMNETCFG_ERR_NUM_START + RMNETCFG_TOTAL_ERR_MSGS)) {
-		printf("%s", rmnetcfg_error_code_text
-			[error_number - RMNETCFG_ERR_NUM_START]);
-		if ((error_number == RMNETCTL_CFG_SUCCESS_HELP_COMMAND) ||
-			(error_number == RMNETCTL_CFG_FAILURE_NO_COMMAND))
-			rmnet_api_usage();
-	}
-}
-
-/*!
-* @brief Method to check the error numbers generated from API calls
-* @details Displays the error messages based on each error code
-* @param error_number Error number returned from the API and the CLI
-* @return void
-*/
-static void print_rmnet_api_status(int return_code, uint16_t error_number)
-{
-	if (return_code == RMNETCTL_SUCCESS)
-		printf("SUCCESS\n");
-	else if (return_code == RMNETCTL_LIB_ERR) {
-		printf("LIBRARY ");
-		print_rmnetctl_lib_errors(error_number);
-	} else if (return_code == RMNETCTL_KERNEL_ERR) {
-		if (error_number < RMNETCTL_API_ERR_ENUM_LENGTH)
-			printf("KERNEL ERROR: System or rmnet error %d\n",
-			       error_number);
-	}
-	else if (return_code == RMNETCTL_INVALID_ARG)
-		printf("INVALID_ARG\n");
-}
-
-/*!
-* @brief Method to make the API calls
-* @details Checks for each type of parameter and calls the appropriate
-* function based on the number of parameters and parameter type
-* @param argc Number of arguments which vary based on the commands
-* @param argv Value of the arguments which vary based on the commands
-* @return RMNETCTL_SUCCESS if successful. Relevant data might be printed
-* based on the message type
-* @return RMNETCTL_LIB_ERR if there was a library error. Error code will be
-* printed
-* @return RMNETCTL_KERNEL_ERR if there was a error in the kernel. Error code will be
-* printed
-* @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
-*/
-
-static int rmnet_api_call(int argc, char *argv[])
-{
-	struct rmnetctl_hndl_s *handle = NULL;
-	uint16_t error_number = RMNETCTL_CFG_FAILURE_NO_COMMAND;
-	int return_code = RMNETCTL_LIB_ERR;
-	if ((!argc) || (!*argv)) {
-		print_rmnet_api_status(RMNETCTL_LIB_ERR,
-		RMNETCTL_CFG_FAILURE_NO_COMMAND);
-		return RMNETCTL_LIB_ERR;
-	}
-	if (!strcmp(*argv, "help")) {
-		print_rmnet_api_status(RMNETCTL_LIB_ERR,
-		RMNETCTL_CFG_SUCCESS_HELP_COMMAND);
-		return RMNETCTL_LIB_ERR;
-	}
-
-	if (!strcmp(*argv, "-n")) {
-		return_code = rtrmnet_ctl_init(&handle, &error_number);
-		if (return_code != RMNETCTL_SUCCESS) {
-			print_rmnet_api_status(return_code, error_number);
-			return RMNETCTL_LIB_ERR;
-		}
-		error_number = RMNETCTL_CFG_FAILURE_NO_COMMAND;
-		return_code = RMNETCTL_LIB_ERR;
-		argv++;
-		argc--;
-		if ((!argc) || (!*argv)) {
-			print_rmnet_api_status(RMNETCTL_LIB_ERR,
-			RMNETCTL_CFG_FAILURE_NO_COMMAND);
-			return RMNETCTL_LIB_ERR;
-		}
-		if (!strcmp(*argv, "newlink")) {
-			_RMNETCLI_CHECKNULL(argv[1]);
-			_RMNETCLI_CHECKNULL(argv[2]);
-			_RMNETCLI_CHECKNULL(argv[3]);
-			uint32_t flags = 0;
-			/* If optional flag was used pass it on*/
-			if (argv[4])
-				flags = _STRTOI32(argv[4]);
-
-			return_code = rtrmnet_ctl_newvnd(handle, argv[1],
-							 argv[2],
-							 &error_number,
-							 _STRTOI32(argv[3]),
-							 flags);
-		} else if (!strcmp(*argv, "changelink")) {
-			_RMNETCLI_CHECKNULL(argv[1]);
-			_RMNETCLI_CHECKNULL(argv[2]);
-			_RMNETCLI_CHECKNULL(argv[3]);
-			_RMNETCLI_CHECKNULL(argv[4]);
-
-			return_code = rtrmnet_ctl_changevnd(handle, argv[1],
-							    argv[2],
-							    &error_number,
-							    _STRTOI32(argv[3]),
-							    _STRTOI32(argv[4]));
-		} else if (!strcmp(*argv, "dellink")) {
-			_RMNETCLI_CHECKNULL(argv[1]);
-				return_code = rtrmnet_ctl_delvnd(handle, argv[1],
-								 &error_number);
-		} else if (!strcmp(*argv, "bridge")) {
-			_RMNETCLI_CHECKNULL(argv[1]);
-			_RMNETCLI_CHECKNULL(argv[2]);
-			return_code = rtrmnet_ctl_bridgevnd(handle, argv[1],
-							    argv[2],
-							    &error_number);
-		}
-		goto end;
-	} else {
-		return_code = rmnetctl_init(&handle, &error_number);
-		if (return_code != RMNETCTL_SUCCESS) {
-			print_rmnet_api_status(return_code, error_number);
-			return RMNETCTL_LIB_ERR;
-		}
-
-	}
-	error_number = RMNETCTL_CFG_FAILURE_NO_COMMAND;
-	return_code = RMNETCTL_LIB_ERR;
-	if (!strcmp(*argv, "assocnetdev")) {
-		return_code = rmnet_associate_network_device(handle,
-		argv[1], &error_number, RMNETCTL_DEVICE_ASSOCIATE);
-	} else if (!strcmp(*argv, "unassocnetdev")) {
-		return_code = rmnet_associate_network_device(handle,
-		argv[1], &error_number, RMNETCTL_DEVICE_UNASSOCIATE);
-	} else if (!strcmp(*argv, "getnetdevassoc")) {
-		int register_status;
-		return_code = rmnet_get_network_device_associated(handle,
-		argv[1], &register_status, &error_number);
-		if (return_code == RMNETCTL_SUCCESS)
-			printf("register_status is %d\n", register_status);
-	} else if (!strcmp(*argv, "getledf")) {
-		uint32_t egress_flags;
-		uint16_t agg_size, agg_count;
-		return_code = rmnet_get_link_egress_data_format(handle,
-		argv[1], &egress_flags, &agg_size, &agg_count, &error_number);
-		if (return_code == RMNETCTL_SUCCESS) {
-			printf("egress_flags is %u\n", egress_flags);
-			printf("agg_size is %u\n", agg_size);
-			printf("agg_count is %u\n", agg_count);
-		}
-	} else if (!strcmp(*argv, "getlidf")) {
-		uint32_t ingress_flags;
-		uint8_t  tail_spacing;
-		return_code = rmnet_get_link_ingress_data_format_tailspace(
-		handle, argv[1], &ingress_flags, &tail_spacing, &error_number);
-		if (return_code == RMNETCTL_SUCCESS) {
-			printf("ingress_flags is %u\n", ingress_flags);
-			printf("tail_spacing is %u\n", tail_spacing);
-		}
-	} else if (!strcmp(*argv, "newvndprefix")) {
-		_RMNETCLI_CHECKNULL(argv[1]);
-		_RMNETCLI_CHECKNULL(argv[2]);
-		return_code = rmnet_new_vnd_prefix(handle,
-		_STRTOUI32(argv[1]), &error_number, RMNETCTL_NEW_VND, argv[2]);
-	} else if (!strcmp(*argv, "newvndname")) {
-		_RMNETCLI_CHECKNULL(argv[1]);
-		_RMNETCLI_CHECKNULL(argv[2]);
-		return_code = rmnet_new_vnd_name(handle,
-		_STRTOUI32(argv[1]), &error_number, argv[2]);
-	} else if (!strcmp(*argv, "newvnd")) {
-		_RMNETCLI_CHECKNULL(argv[1]);
-		return_code = rmnet_new_vnd(handle,
-		_STRTOUI32(argv[1]), &error_number, RMNETCTL_NEW_VND);
-	} else if (!strcmp(*argv, "getvndname")) {
-		char buffer[32];
-		memset(buffer, 0, 32);
-		_RMNETCLI_CHECKNULL(argv[1]);
-		return_code = rmnet_get_vnd_name(handle, _STRTOUI32(argv[1]),
-			           &error_number, buffer, 32);
-		if (return_code == RMNETCTL_SUCCESS) {
-			printf("VND name: %s\n", buffer);
-		}
-	} else if (!strcmp(*argv, "freevnd")) {
-		_RMNETCLI_CHECKNULL(argv[1]);
-		return_code = rmnet_new_vnd(handle,
-		_STRTOUI32(argv[1]), &error_number, RMNETCTL_FREE_VND);
-	} else if (!strcmp(*argv, "setlidf")) {
-		_RMNETCLI_CHECKNULL(argv[1]);
-		_RMNETCLI_CHECKNULL(argv[2]);
-		_RMNETCLI_CHECKNULL(argv[3]);
-		return_code = rmnet_set_link_ingress_data_format_tailspace(
-		handle, _STRTOUI32(argv[1]), _STRTOUI8(argv[2]), argv[3],
-		&error_number);
-	} else if (!strcmp(*argv, "delvnctcflow")) {
-		_RMNETCLI_CHECKNULL(argv[1]);
-		_RMNETCLI_CHECKNULL(argv[2]);
-		_RMNETCLI_CHECKNULL(argv[3]);
-		return_code = rmnet_add_del_vnd_tc_flow(handle,
-		_STRTOUI32(argv[1]), _STRTOUI32(argv[2]), _STRTOUI32(argv[3]),
-		RMNETCTL_DEL_FLOW, &error_number);
-	} else if (!strcmp(*argv, "getlepc")) {
-		_RMNETCLI_CHECKNULL(argv[1]);
-		uint8_t rmnet_mode;
-		char *egress_dev_name;
-		egress_dev_name = NULL;
-		egress_dev_name = (char *)malloc(RMNET_MAX_STR_LEN
-		* sizeof(char));
-		if (!egress_dev_name) {
-			print_rmnet_api_status(RMNETCTL_LIB_ERR,
-			RMNETCTL_CFG_FAILURE_EGRESS_DEV_NAME_NULL);
-			rmnetctl_cleanup(handle);
-			return RMNETCTL_LIB_ERR;
-		}
-		return_code = rmnet_get_logical_ep_config(handle,
-		_STRTOI32(argv[1]), argv[2], &rmnet_mode,
-		&egress_dev_name, RMNET_MAX_STR_LEN, &error_number);
-		if (return_code == RMNETCTL_SUCCESS) {
-			printf("rmnet_mode is %u\n", rmnet_mode);
-			printf("egress_dev_name is %s\n", egress_dev_name);
-		}
-		free(egress_dev_name);
-	} else if (!strcmp(*argv, "addvnctcflow")) {
-		_RMNETCLI_CHECKNULL(argv[1]);
-		_RMNETCLI_CHECKNULL(argv[2]);
-		_RMNETCLI_CHECKNULL(argv[3]);
-		return_code = rmnet_add_del_vnd_tc_flow(handle,
-		_STRTOUI32(argv[1]), _STRTOUI32(argv[2]), _STRTOUI32(argv[3]),
-		RMNETCTL_ADD_FLOW, &error_number);
-	} else if (!strcmp(*argv, "setledf")) {
-		_RMNETCLI_CHECKNULL(argv[1]);
-		_RMNETCLI_CHECKNULL(argv[2]);
-		_RMNETCLI_CHECKNULL(argv[3]);
-		return_code = rmnet_set_link_egress_data_format(handle,
-		_STRTOUI32(argv[1]), _STRTOUI16(argv[2]), _STRTOUI16(argv[3]),
-		argv[4], &error_number);
-	} else if (!strcmp(*argv, "setlepc")) {
-		_RMNETCLI_CHECKNULL(argv[1]);
-		_RMNETCLI_CHECKNULL(argv[2]);
-		return_code = rmnet_set_logical_ep_config(handle,
-		_STRTOI32(argv[1]), _STRTOUI8(argv[2]), argv[3], argv[4],
-		&error_number);
-	} else if (!strcmp(*argv, "unsetlepc")) {
-		_RMNETCLI_CHECKNULL(argv[1]);
-		return_code = rmnet_unset_logical_ep_config(handle,
-		_STRTOI32(argv[1]), argv[2], &error_number);
-	}
-end:
-	print_rmnet_api_status(return_code, error_number);
-	rmnetctl_cleanup(handle);
-	rtrmnet_ctl_deinit(handle);
-	return return_code;
-}
-
-/*!
-* @brief Method which serves as en entry point to the rmnetcli function
-* @details Entry point for the RmNet Netlink API. This is the command line
-* interface for the RmNet API
-* @param argc Number of arguments which vary based on the commands
-* @param argv Value of the arguments which vary based on the commands
-* @return RMNETCTL_SUCCESS if successful. Relevant data might be printed
-* based on the message type
-* @return RMNETCTL_LIB_ERR if there was a library error. Error code will be
-* printed
-* @return RMNETCTL_KERNEL_ERR if there was a error in the kernel. Error code will be
-* printed
-* @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
-*/
-int main(int argc, char *argv[])
-{
-	argc--;
-	argv++;
-	return rmnet_api_call(argc, argv);
-}
diff --git a/rmnetctl/cli/rmnetcli.h b/rmnetctl/cli/rmnetcli.h
deleted file mode 100644
index 6375082..0000000
--- a/rmnetctl/cli/rmnetcli.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/******************************************************************************
-
-			  R M N E T C L I . H
-
-Copyright (c) 2013, 2015 The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-	* Redistributions of source code must retain the above copyright
-	  notice, this list of conditions and the following disclaimer.
-	* Redistributions in binary form must reproduce the above
-	  copyright notice, this list of conditions and the following
-	  disclaimer in the documentation and/or other materials provided
-	  with the distribution.
-	* Neither the name of The Linux Foundation nor the names of its
-	  contributors may be used to endorse or promote products derived
-	  from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-******************************************************************************/
-
-/******************************************************************************
-
-  @file	   rmnetcli.h
-  @brief   headers for the command line interface to expose rmnet control API's
-
-  DESCRIPTION
-  Header file containing definition for the command line interface to expose
-  rmnet control API's
-
-******************************************************************************/
-
-#ifndef RMNETCLI_H
-#define RMNETCLI_H
-
-/* Print the help for the commands since the help flag was used. */
-#define RMNETCTL_CFG_SUCCESS_HELP_COMMAND 100
-/* No/invalid API call was specified. So return an error. */
-#define RMNETCTL_CFG_FAILURE_NO_COMMAND 101
-/* The buffer for egress device name was NULL */
-#define RMNETCTL_CFG_FAILURE_EGRESS_DEV_NAME_NULL 102
-
-/* This should always be the value of the starting element */
-#define RMNETCFG_ERR_NUM_START 100
-
-/* This should always be the total number of error message from CLI */
-#define RMNETCFG_TOTAL_ERR_MSGS 3
-
-#endif /* not defined RMNETCLI_H */
diff --git a/rmnetctl/inc/librmnetctl.h b/rmnetctl/inc/librmnetctl.h
deleted file mode 100644
index 4014ac2..0000000
--- a/rmnetctl/inc/librmnetctl.h
+++ /dev/null
@@ -1,606 +0,0 @@
-/******************************************************************************
-
-			  L I B R M N E T C T L . H
-
-Copyright (c) 2013-2015, 2017-2018 The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-	* Redistributions of source code must retain the above copyright
-	  notice, this list of conditions and the following disclaimer.
-	* Redistributions in binary form must reproduce the above
-	  copyright notice, this list of conditions and the following
-	  disclaimer in the documentation and/or other materials provided
-	  with the distribution.
-	* Neither the name of The Linux Foundation nor the names of its
-	  contributors may be used to endorse or promote products derived
-	  from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-******************************************************************************/
-
-/*!
-*  @file    librmnetctl.h
-*  @brief   rmnet control API's header file
-*/
-
-#ifndef LIBRMNETCTL_H
-#define LIBRMNETCTL_H
-
-/* RMNET API failed to copy*/
-#define RMNETCTL_LIB_COPY_FAILED -1
-/* RMNET API succeeded */
-#define RMNETCTL_SUCCESS 0
-/* RMNET API encountered an error while executing within the library. Check the
-* error code in this case */
-#define RMNETCTL_LIB_ERR 1
-/* RMNET API encountered an error while executing in the kernel. Check the
-* error code in this case */
-#define RMNETCTL_KERNEL_ERR 2
-/* RMNET API encountered an error because of invalid arguments*/
-#define RMNETCTL_INVALID_ARG 3
-
-/* Flag to associate a network device*/
-#define RMNETCTL_DEVICE_ASSOCIATE 1
-/* Flag to unassociate a network device*/
-#define RMNETCTL_DEVICE_UNASSOCIATE 0
-/* Flag to create a new virtual network device*/
-#define RMNETCTL_NEW_VND 1
-/* Flag to free a new virtual network device*/
-#define RMNETCTL_FREE_VND 0
-/* Flag to add a new flow*/
-#define RMNETCTL_ADD_FLOW 1
-/* Flag to delete an existing flow*/
-#define RMNETCTL_DEL_FLOW 0
-
-enum rmnetctl_error_codes_e {
-	/* API succeeded. This should always be the first element. */
-	RMNETCTL_API_SUCCESS = 0,
-
-	RMNETCTL_API_FIRST_ERR = 1,
-	/* API failed because not enough memory to create buffer to send
-	 * message */
-	RMNETCTL_API_ERR_REQUEST_INVALID = RMNETCTL_API_FIRST_ERR,
-	/* API failed because not enough memory to create buffer for the
-	 *  response message */
-	RMNETCTL_API_ERR_RESPONSE_INVALID = 2,
-	/* API failed because could not send the message to kernel */
-	RMNETCTL_API_ERR_MESSAGE_SEND = 3,
-	/* API failed because could not receive message from the kernel */
-	RMNETCTL_API_ERR_MESSAGE_RECEIVE = 4,
-
-	RMNETCTL_INIT_FIRST_ERR = 5,
-	/* Invalid process id. So return an error. */
-	RMNETCTL_INIT_ERR_PROCESS_ID = RMNETCTL_INIT_FIRST_ERR,
-	/* Invalid socket descriptor id. So return an error. */
-	RMNETCTL_INIT_ERR_NETLINK_FD = 6,
-	/* Could not bind the socket to the Netlink file descriptor */
-	RMNETCTL_INIT_ERR_BIND = 7,
-	/* Invalid user id. Only root has access to this function. (NA) */
-	RMNETCTL_INIT_ERR_INVALID_USER = 8,
-
-	RMNETCTL_API_SECOND_ERR = 9,
-	/* API failed because the RmNet handle for the transaction was NULL */
-	RMNETCTL_API_ERR_HNDL_INVALID = RMNETCTL_API_SECOND_ERR,
-	/* API failed because the request buffer for the transaction was NULL */
-	RMNETCTL_API_ERR_REQUEST_NULL = 10,
-	/* API failed because the response buffer for the transaction was NULL*/
-	RMNETCTL_API_ERR_RESPONSE_NULL = 11,
-	/* API failed because the request and response type do not match*/
-	RMNETCTL_API_ERR_MESSAGE_TYPE = 12,
-	/* API failed because the return type is invalid */
-	RMNETCTL_API_ERR_RETURN_TYPE = 13,
-	/* API failed because the string was truncated */
-	RMNETCTL_API_ERR_STRING_TRUNCATION = 14,
-
-	/* These error are 1-to-1 with rmnet_data config errors in rmnet_data.h
-	   for each conversion.
-	   please keep the enums synced.
-	*/
-	RMNETCTL_KERNEL_FIRST_ERR = 15,
-	/* No error */
-	RMNETCTL_KERNEL_ERROR_NO_ERR = RMNETCTL_KERNEL_FIRST_ERR,
-	/* Invalid / unsupported message */
-	RMNETCTL_KERNEL_ERR_UNKNOWN_MESSAGE = 16,
-	/* Internal problem in the kernel module */
-	RMNETCTL_KERNEL_ERR_INTERNAL = 17,
-	/* Kernel is temporarily out of memory */
-	RMNETCTL_KERNEL_ERR_OUT_OF_MEM = 18,
-	/* Device already exists / Still in use */
-	RMETNCTL_KERNEL_ERR_DEVICE_IN_USE = 19,
-	/* Invalid request / Unsupported scenario */
-	RMNETCTL_KERNEL_ERR_INVALID_REQUEST = 20,
-	/* Device doesn't exist */
-	RMNETCTL_KERNEL_ERR_NO_SUCH_DEVICE = 21,
-	/* One or more of the arguments is invalid */
-	RMNETCTL_KERNEL_ERR_BAD_ARGS = 22,
-	/* Egress device is invalid */
-	RMNETCTL_KERNEL_ERR_BAD_EGRESS_DEVICE = 23,
-	/* TC handle is full */
-	RMNETCTL_KERNEL_ERR_TC_HANDLE_FULL = 24,
-
-	/* This should always be the last element */
-	RMNETCTL_API_ERR_ENUM_LENGTH
-};
-
-#define RMNETCTL_ERR_MSG_SIZE 100
-
-/*!
-* @brief Contains a list of error message from API
-*/
-char rmnetctl_error_code_text
-[RMNETCTL_API_ERR_ENUM_LENGTH][RMNETCTL_ERR_MSG_SIZE] = {
-	"ERROR: API succeeded\n",
-	"ERROR: Unable to allocate the buffer to send message\n",
-	"ERROR: Unable to allocate the buffer to receive message\n",
-	"ERROR: Could not send the message to kernel\n",
-	"ERROR: Unable to receive message from the kernel\n",
-	"ERROR: Invalid process id\n",
-	"ERROR: Invalid socket descriptor id\n",
-	"ERROR: Could not bind to netlink socket\n",
-	"ERROR: Only root can access this API\n",
-	"ERROR: RmNet handle for the transaction was NULL\n",
-	"ERROR: Request buffer for the transaction was NULL\n",
-	"ERROR: Response buffer for the transaction was NULL\n",
-	"ERROR: Request and response type do not match\n",
-	"ERROR: Return type is invalid\n",
-	"ERROR: String was truncated\n",
-	/* Kernel errors */
-	"ERROR: Kernel call succeeded\n",
-	"ERROR: Invalid / Unsupported directive\n",
-	"ERROR: Internal problem in the kernel module\n",
-	"ERROR: The kernel is temporarily out of memory\n",
-	"ERROR: Device already exists / Still in use\n",
-	"ERROR: Invalid request / Unsupported scenario\n",
-	"ERROR: Device doesn't exist\n",
-	"ERROR: One or more of the arguments is invalid\n",
-	"ERROR: Egress device is invalid\n",
-	"ERROR: TC handle is full\n"
-};
-
-/*===========================================================================
-			 DEFINITIONS AND DECLARATIONS
-===========================================================================*/
-typedef struct rmnetctl_hndl_s rmnetctl_hndl_t;
-
-/*!
-* @brief Public API to initialize the RMNET control driver
-* @details Allocates memory for the RmNet handle. Creates and binds to a   and
-* netlink socket if successful
-* @param **rmnetctl_hndl_t_val RmNet handle to be initialized
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
-* @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
-* Check error_code
-* @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
-*/
-int rmnetctl_init(rmnetctl_hndl_t **hndl, uint16_t *error_code);
-
-/*!
-* @brief Public API to clean up the RmNeT control handle
-* @details Close the socket and free the RmNet handle
-* @param *rmnetctl_hndl_t_val RmNet handle to be initialized
-* @return void
-*/
-void rmnetctl_cleanup(rmnetctl_hndl_t *hndl);
-
-/*!
-* @brief Public API to register/unregister a RMNET driver on a particular device
-* @details Message type is RMNET_NETLINK_ASSOCIATE_NETWORK_DEVICE or
-* RMNET_NETLINK_UNASSOCIATE_NETWORK_DEVICE based on the flag for assoc_dev
-* @param *rmnetctl_hndl_t_val RmNet handle for the Netlink message
-* @param dev_name Device on which to register the RmNet driver
-* @param error_code Status code of this operation
-* @param assoc_dev registers the device if RMNETCTL_DEVICE_ASSOCIATE or
-* unregisters the device if RMNETCTL_DEVICE_UNASSOCIATE
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
-* @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
-* Check error_code
-* @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
-*/
-int rmnet_associate_network_device(rmnetctl_hndl_t *hndl,
-				   const char *dev_name,
-				   uint16_t *error_code,
-				   uint8_t assoc_dev);
-
-/*!
-* @brief Public API to get if a RMNET driver is registered on a particular
-* device
-* @details Message type is RMNET_NETLINK_GET_NETWORK_DEVICE_ASSOCIATED.
-* @param *rmnetctl_hndl_t_val RmNet handle for the Netlink message
-* @param dev_name Device on which to check if the RmNet driver is registered
-* @param register_status 1 if RmNet data driver is registered on a particular
-* device, 0 if not
-* @param error_code Status code of this operation
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
-* @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
-* Check error_code
-* @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
-*/
-int rmnet_get_network_device_associated(rmnetctl_hndl_t *hndl,
-					const char *dev_name,
-					int *register_status,
-					uint16_t *error_code);
-
-/*!
-* @brief Public API to set the egress data format for a particular link.
-* @details Message type is RMNET_NETLINK_SET_LINK_EGRESS_DATA_FORMAT.
-* @param *rmnetctl_hndl_t_val RmNet handle for the Netlink message
-* @param egress_flags Egress flags to be set on the device
-* @param agg_size Max size of aggregated packets
-* @param agg_count Number of packets to be aggregated
-* @param dev_name Device on which to set the egress data format
-* @param error_code Status code of this operation returned from the kernel
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
-* @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
-* Check error_code
-* @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
-*/
-int rmnet_set_link_egress_data_format(rmnetctl_hndl_t *hndl,
-				      uint32_t egress_flags,
-				      uint16_t agg_size,
-				      uint16_t agg_count,
-				      const char *dev_name,
-				      uint16_t *error_code);
-
-/*!
-* @brief Public API to get the egress data format for a particular link.
-* @details Message type is RMNET_NETLINK_GET_LINK_EGRESS_DATA_FORMAT.
-* @param *rmnetctl_hndl_t_val RmNet handle for the Netlink message
-* @param dev_name Device on which to get the egress data format
-* @param egress_flags Egress flags from the device
-* @param agg_count Number of packets to be aggregated
-* @param error_code Status code of this operation returned from the kernel
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
-* @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
-* Check error_code
-* @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
-*/
-int rmnet_get_link_egress_data_format(rmnetctl_hndl_t *hndl,
-				      const char *dev_name,
-				      uint32_t *egress_flags,
-				      uint16_t *agg_size,
-				      uint16_t *agg_count,
-				      uint16_t *error_code);
-
-/*!
-* @brief Public API to set the ingress data format for a particular link.
-* @details Message type is RMNET_NETLINK_SET_LINK_INGRESS_DATA_FORMAT.
-* @param *rmnetctl_hndl_t_val RmNet handle for the Netlink message
-* @param ingress_flags Ingress flags from the device
-* @param tail_spacing Tail spacing needed for the packet
-* @param dev_name Device on which to set the ingress data format
-* @param error_code Status code of this operation returned from the kernel
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
-* @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
-* Check error_code
-* @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
-*/
-int rmnet_set_link_ingress_data_format_tailspace(rmnetctl_hndl_t *hndl,
-						 uint32_t ingress_flags,
-						 uint8_t  tail_spacing,
-						 const char *dev_name,
-						 uint16_t *error_code);
-
-/*!
-* @brief Public API to get the ingress data format for a particular link.
-* @details Message type is RMNET_NETLINK_GET_LINK_INGRESS_DATA_FORMAT.
-* @param *rmnetctl_hndl_t_val RmNet handle for the Netlink message
-* @param dev_name Device on which to get the ingress data format
-* @param ingress_flags Ingress flags from the device
-* @param tail_spacing Tail spacing needed for the packet
-* @param error_code Status code of this operation returned from the kernel
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
-* @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
-* Check error_code
-* @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
-*/
-int rmnet_get_link_ingress_data_format_tailspace(rmnetctl_hndl_t *hndl,
-						const char *dev_name,
-						uint32_t *ingress_flags,
-						uint8_t  *tail_spacing,
-						uint16_t *error_code);
-
-inline int rmnet_set_link_ingress_data_format(rmnetctl_hndl_t *hndl,
-					      uint32_t ingress_flags,
-					      const char *dev_name,
-					      uint16_t *error_code)
-{
-	return rmnet_set_link_ingress_data_format_tailspace(hndl,
-							    ingress_flags,
-							    0,
-							    dev_name,
-							    error_code);
-}
-
-inline int rmnet_get_link_ingress_data_format(rmnetctl_hndl_t *hndl,
-					      const char *dev_name,
-					      uint32_t *ingress_flags,
-					      uint16_t *error_code)
-{
-	return rmnet_get_link_ingress_data_format_tailspace(hndl,
-							    dev_name,
-							    ingress_flags,
-							    0,
-							    error_code);
-}
-
-/*!
-* @brief Public API to set the logical endpoint configuration for a
-* particular link.
-* @details Message type is RMNET_NETLINK_SET_LOGICAL_EP_CONFIG.
-* @param *rmnetctl_hndl_t_val RmNet handle for the Netlink message
-* @param logical_ep_id Logical end point id on which the configuration is to be
-* set
-* @param rmnet_mode RmNet mode to be set on the device
-* @param dev_name Device on which to set the logical end point configuration
-* @param egress_dev_name Egress Device if operating in bridge mode
-* @param error_code Status code of this operation returned from the kernel
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
-* @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
-* Check error_code
-* @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
-*/
-int rmnet_set_logical_ep_config(rmnetctl_hndl_t *hndl,
-				int32_t ep_id,
-				uint8_t operating_mode,
-				const char *dev_name,
-				const char *next_dev,
-				uint16_t *error_code);
-
-/*!
-* @brief Public API to un-set the logical endpoint configuration for a
-* particular link.
-* @details Message type is RMNET_NETLINK_UNSET_LOGICAL_EP_CONFIG.
-* @param *rmnetctl_hndl_t_val RmNet handle for the Netlink message
-* @param logical_ep_id Logical end point id on which the configuration is to be
-* un-set
-* @param dev_name Device on which to un-set the logical end point configuration
-* @param error_code Status code of this operation returned from the kernel
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
-* @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
-* Check error_code
-* @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
-*/
-int rmnet_unset_logical_ep_config(rmnetctl_hndl_t *hndl,
-				  int32_t ep_id,
-				  const char *dev_name,
-				  uint16_t *error_code);
-/*!
-* @brief Public API to get the logical endpoint configuration for a
-* particular link.
-* @details Message type is RMNET_NETLINK_GET_LOGICAL_EP_CONFIG.
-* @param *rmnetctl_hndl_t_val RmNet handle for the Netlink message
-* @param logical_ep_id Logical end point id from which to get the configuration
-* @param dev_name Device on which to get the logical end point configuration
-* @param rmnet_mode RmNet mode from the device
-* @param next_dev Egress Device name
-* @param next_dev_len Egress Device I/O string len
-* @param error_code Status code of this operation returned from the kernel
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
-* @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
-* Check error_code
-* @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
-*/
-int rmnet_get_logical_ep_config(rmnetctl_hndl_t *hndl,
-				int32_t ep_id,
-				const char *dev_name,
-				uint8_t *operating_mode,
-				char **next_dev,
-				uint32_t next_dev_len,
-				uint16_t *error_code);
-
-/*!
-* @brief Public API to create a new virtual device node
-* @details Message type is RMNET_NETLINK_NEW_VND or
-* RMNETCTL_FREE_VND based on the flag for new_vnd
-* @param hndl RmNet handle for the Netlink message
-* @param id Node number to create the virtual network device node
-* @param error_code Status code of this operation returned from the kernel
-* @param new_vnd creates a new virtual network device if  RMNETCTL_NEW_VND or
-* frees the device if RMNETCTL_FREE_VND
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
-* @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
-* Check error_code
-* @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
-*/
-int rmnet_new_vnd(rmnetctl_hndl_t *hndl,
-		  uint32_t id,
-		  uint16_t *error_code,
-		  uint8_t new_vnd);
-
-/*!
- * @brief Public API to create a new virtual device node with a custom prefix
- * @details Message type is RMNET_NETLINK_NEW_VND or
- * RMNETCTL_FREE_VND based on the flag for new_vnd
- * @param hndl RmNet handle for the Netlink message
- * @param id Node number to create the virtual network device node
- * @param error_code Status code of this operation returned from the kernel
- * @param new_vnd creates a new virtual network device if  RMNETCTL_NEW_VND or
- * frees the device if RMNETCTL_FREE_VND
- * @param prefix Prefix to be used when naming the network interface
- * @return RMNETCTL_SUCCESS if successful
- * @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
- * @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
- * Check error_code
- * @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
- */
-int rmnet_new_vnd_prefix(rmnetctl_hndl_t *hndl,
-			 uint32_t id,
-			 uint16_t *error_code,
-			 uint8_t new_vnd,
-			 const char *prefix);
-
-/*!
- * @brief Public API to create a new virtual device node with a custom prefix
- * @details Message type is RMNET_NETLINK_NEW_VND or
- * RMNETCTL_FREE_VND based on the flag for new_vnd
- * @param hndl RmNet handle for the Netlink message
- * @param id Node number to create the virtual network device node
- * @param error_code Status code of this operation returned from the kernel
- * @param new_vnd creates a new virtual network device if  RMNETCTL_NEW_VND or
- * frees the device if RMNETCTL_FREE_VND
- * @param name Name to be used when naming the network interface
- * @return RMNETCTL_SUCCESS if successful
- * @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
- * @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
- * Check error_code
- * @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
- */
-int rmnet_new_vnd_name(rmnetctl_hndl_t *hndl,
-			 uint32_t id,
-			 uint16_t *error_code,
-			 const char *name);
-
-/*!
- * @brief API to get the ASCII name of a virtual network device from its ID
- * @param hndl RmNet handle for the Netlink message
- * @param id Node number to create the virtual network device node
- * @param error_code Status code of this operation returned from the kernel
- * @param buf Buffer to store ASCII representation of device name
- * @param buflen Length of the buffer
- * @param prefix Prefix to be used when naming the network interface
- * @return RMNETCTL_SUCCESS if successful
- * @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
- * @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
- * Check error_code
- * @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
- */
-
-int rmnet_get_vnd_name(rmnetctl_hndl_t *hndl,
-                      uint32_t id,
-                      uint16_t *error_code,
-                      char *buf,
-                      uint32_t buflen);
-
-/*!
-* @brief Public API to set or clear a flow
-* @details Message type is RMNET_NETLINK_ADD_VND_TC_FLOW or
-* RMNET_NETLINK_DEL_VND_TC_FLOW based on the flag for set_flow
-* @param *rmnetctl_hndl_t_val RmNet handle for the Netlink message
-* @param id Node number to set or clear the flow on the virtual network
-* device node
-* @param map_flow_id Flow handle of the modem
-* @param tc_flow_id Software flow handle
-* @param set_flow sets the flow if  RMNET_NETLINK_SET_FLOW or
-* clears the flow if RMNET_NETLINK_CLEAR_FLOW
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
-* @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
-* Check error_code
-* @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
-*/
-int rmnet_add_del_vnd_tc_flow(rmnetctl_hndl_t *hndl,
-			      uint32_t id,
-			      uint32_t map_flow_id,
-			      uint32_t tc_flow_id,
-			      uint8_t set_flow,
-			      uint16_t *error_code);
-
-/* @brief Public API to initialize the RTM_NETLINK RMNET control driver
- * @details Allocates memory for the RmNet handle. Creates and binds to a
- * netlink socket if successful
- * @param **rmnetctl_hndl_t_val RmNet handle to be initialized
- * @return RMNETCTL_SUCCESS if successful
- * @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
- * @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
- * Check error_code
- * @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
- */
-int rtrmnet_ctl_init(rmnetctl_hndl_t **hndl, uint16_t *error_code);
-
-/* @brief Public API to clean up the RTM_NETLINK RmNeT control handle
- * @details Close the socket and free the RmNet handle
- * @param *rmnetctl_hndl_t_val RmNet handle to be initialized
- * @return void
- */
-int rtrmnet_ctl_deinit(rmnetctl_hndl_t *hndl);
-
-/* @brief Public API to create a new virtual device node
- * @details Message type is RTM_NEWLINK
- * @param hndl RmNet handle for the Netlink message
- * @param dev_name Device name new node will be connected to
- * @param vnd_name Name of virtual device to be created
- * @param error_code Status code of this operation returned from the kernel
- * @param index Index node will have
- * @param flagconfig Flag configuration device will have
- * @return RMNETCTL_SUCCESS if successful
- * @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
- * @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
- * Check error_code
- * @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
- */
-int rtrmnet_ctl_newvnd(rmnetctl_hndl_t *hndl, char *devname, char *vndname,
-		       uint16_t *error_code, uint8_t  index,
-		       uint32_t flagconfig);
-
-/* @brief Public API to delete a virtual device node
- * @details Message type is RTM_DELLINK
- * @param hndl RmNet handle for the Netlink message
- * @param vnd_name Name of virtual device to be deleted
- * @param error_code Status code of this operation returned from the kernel
- * @return RMNETCTL_SUCCESS if successful
- * @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
- * @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
- * Check error_code
- * @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
- */
-int rtrmnet_ctl_delvnd(rmnetctl_hndl_t *hndl, char *vndname,
-		       uint16_t *error_code);
-
-/* @brief Public API to change flag's of a virtual device node
- * @details Message type is RTM_NEWLINK
- * @param hndl RmNet handle for the Netlink message
- * @param dev_name Name of device node is connected to
- * @param vnd_name Name of virtual device to be changed
- * @param error_code Status code of this operation returned from the kernel
- * @param flagconfig New flag config vnd should have
- * @return RMNETCTL_SUCCESS if successful
- * @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
- * @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
- * Check error_code
- * @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
- */
-int rtrmnet_ctl_changevnd(rmnetctl_hndl_t *hndl, char *devname, char *vndname,
-			  uint16_t *error_code, uint8_t  index,
-			  uint32_t flagconfig);
-
-/* @brief Public API to bridge a vnd and device
- * @details Message type is RTM_NEWLINK
- * @param hndl RmNet handle for the Netlink message
- * @param dev_name device to bridge msg will be sent to
- * @param vnd_name vnd name of device that will be dev_name's master
- * @param error_code Status code of this operation returned from the kernel
- * @return RMNETCTL_SUCCESS if successful
- * @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
- * @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
- * Check error_code
- * @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
- */
-int rtrmnet_ctl_bridgevnd(rmnetctl_hndl_t *hndl, char *devname, char *vndname,
-			  uint16_t *error_code);
-
-#endif /* not defined LIBRMNETCTL_H */
-
diff --git a/rmnetctl/inc/librmnetctl_hndl.h b/rmnetctl/inc/librmnetctl_hndl.h
deleted file mode 100644
index 1a435ed..0000000
--- a/rmnetctl/inc/librmnetctl_hndl.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/******************************************************************************
-
-			L I B R M N E T C T L _ H N D L. H
-
-Copyright (c) 2013, 2015 The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-	* Redistributions of source code must retain the above copyright
-	  notice, this list of conditions and the following disclaimer.
-	* Redistributions in binary form must reproduce the above
-	  copyright notice, this list of conditions and the following
-	  disclaimer in the documentation and/or other materials provided
-	  with the distribution.
-	* Neither the name of The Linux Foundation nor the names of its
-	  contributors may be used to endorse or promote products derived
-	  from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-******************************************************************************/
-
-/*!
-*  @file    librmnetctl_hndl.h
-*  @brief   rmnet control API's handle file
-*/
-
-#ifndef LIBRMNETCTL_HNDL_H
-#define LIBRMNETCTL_HNDL_H
-
-/*===========================================================================
-			 DEFINITIONS AND DECLARATIONS
-===========================================================================*/
-
-/*!
-* @brief Structure for RMNET control handles. A rmnet hndl contains the caller
-* process id, the transaction id which is initialized to 0 for each new
-* initialized handle and the netlink file descriptor for this handle.
-* @var pid process id to be used for the netlink message
-* @var transaction_id message number for debugging
-* @var netlink_fd netlink file descriptor to be used
-* @var src_addr source socket address properties for this message
-* @var dest_addr destination socket address properties for this message
-*/
-
-struct rmnetctl_hndl_s {
-	 uint32_t pid;
-	 uint32_t transaction_id;
-	 int netlink_fd;
-	 struct sockaddr_nl src_addr, dest_addr;
-};
-
-#endif /* not defined LIBRMNETCTL_HNDL_H */
-
diff --git a/rmnetctl/src/Android.mk b/rmnetctl/src/Android.mk
deleted file mode 100644
index f992aed..0000000
--- a/rmnetctl/src/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_COPY_HEADERS_TO   := dataservices/rmnetctl
-LOCAL_COPY_HEADERS      := ../inc/librmnetctl.h
-
-LOCAL_SRC_FILES := librmnetctl.c
-LOCAL_CFLAGS := -Wall -Werror
-
-LOCAL_C_INCLUDES := $(LOCAL_PATH)/../inc
-LOCAL_C_INCLUDES += $(LOCAL_PATH)
-LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
-LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
-
-LOCAL_CLANG := true
-LOCAL_MODULE := librmnetctl
-LOCAL_MODULE_TAGS := optional
-LOCAL_PRELINK_MODULE := false
-
-LOCAL_MODULE_PATH_32 := $(TARGET_OUT_VENDOR)/lib
-LOCAL_MODULE_PATH_64 := $(TARGET_OUT_VENDOR)/lib64
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/rmnetctl/src/Makefile.am b/rmnetctl/src/Makefile.am
deleted file mode 100644
index 5f4ff95..0000000
--- a/rmnetctl/src/Makefile.am
+++ /dev/null
@@ -1,16 +0,0 @@
-AM_CFLAGS = -Wall -Werror -Wundef -Wstrict-prototypes -Wno-trigraphs
-AM_CFLAGS += -I./../inc
-
-librmnetctl_la_C = @C@
-librmnetctl_la_SOURCES = librmnetctl.c
-
-common_CFLAGS =  -DUSE_GLIB @GLIB_CFLAGS@
-common_LDFLAGS = -lpthread -lrt @GLIB_LIBS@
-
-librmnetctl_la_CFLAGS := $(AM_CFLAGS) $(common_CFLAGS)
-librmnetctl_la_LDFLAGS := -shared $(common_LDFLAGS)
-
-library_includedir = $(pkgincludedir)
-library_include_HEADERS = ./../inc/librmnetctl.h
-
-lib_LTLIBRARIES = librmnetctl.la
diff --git a/rmnetctl/src/librmnetctl.c b/rmnetctl/src/librmnetctl.c
deleted file mode 100644
index cf237ba..0000000
--- a/rmnetctl/src/librmnetctl.c
+++ /dev/null
@@ -1,1408 +0,0 @@
-/******************************************************************************
-
-			L I B R M N E T C T L . C
-
-Copyright (c) 2013-2015, 2017-2018 The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-	* Redistributions of source code must retain the above copyright
-	  notice, this list of conditions and the following disclaimer.
-	* Redistributions in binary form must reproduce the above
-	  copyright notice, this list of conditions and the following
-	  disclaimer in the documentation and/or other materials provided
-	  with the distribution.
-	* Neither the name of The Linux Foundation nor the names of its
-	  contributors may be used to endorse or promote products derived
-	  from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-******************************************************************************/
-
-/*!
-* @file    librmnetctl.c
-* @brief   rmnet control API's implementation file
-*/
-
-/*===========================================================================
-			INCLUDE FILES
-===========================================================================*/
-
-#include <sys/socket.h>
-#include <stdint.h>
-#include <linux/netlink.h>
-#include <string.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <linux/rtnetlink.h>
-#include <linux/gen_stats.h>
-#include <net/if.h>
-#include <asm/types.h>
-#include <linux/rmnet_data.h>
-#include "librmnetctl_hndl.h"
-#include "librmnetctl.h"
-
-#ifdef USE_GLIB
-#include <glib.h>
-#define strlcpy g_strlcpy
-#endif
-
-#define RMNETCTL_SOCK_FLAG 0
-#define ROOT_USER_ID 0
-#define MIN_VALID_PROCESS_ID 0
-#define MIN_VALID_SOCKET_FD 0
-#define KERNEL_PROCESS_ID 0
-#define UNICAST 0
-#define MAX_BUF_SIZE sizeof(struct nlmsghdr) + sizeof(struct rmnet_nl_msg_s)
-#define INGRESS_FLAGS_MASK   (RMNET_INGRESS_FIX_ETHERNET | \
-			      RMNET_INGRESS_FORMAT_MAP | \
-			      RMNET_INGRESS_FORMAT_DEAGGREGATION | \
-			      RMNET_INGRESS_FORMAT_DEMUXING | \
-			      RMNET_INGRESS_FORMAT_MAP_COMMANDS | \
-			      RMNET_INGRESS_FORMAT_MAP_CKSUMV3 | \
-			      RMNET_INGRESS_FORMAT_MAP_CKSUMV4)
-#define EGRESS_FLAGS_MASK    (RMNET_EGRESS_FORMAT__RESERVED__ | \
-			      RMNET_EGRESS_FORMAT_MAP | \
-			      RMNET_EGRESS_FORMAT_AGGREGATION | \
-			      RMNET_EGRESS_FORMAT_MUXING | \
-			      RMNET_EGRESS_FORMAT_MAP_CKSUMV3 | \
-			      RMNET_EGRESS_FORMAT_MAP_CKSUMV4)
-
-#define min(a, b) (((a) < (b)) ? (a) : (b))
-#define NLMSG_TAIL(nmsg) \
-    ((struct rtattr *) (((char *)(nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len)))
-
-struct nlmsg {
-	struct nlmsghdr nl_addr;
-	struct ifinfomsg ifmsg;
-	char data[500];
-};
-
-/*
- * Helper functions
- */
-/*
- * @brief helper function to implement a secure memcpy
- * @details take source and destination buffer size into
- *          considerations before copying
- * @param dst destination buffer
- * @param dst_size size of destination buffer
- * @param src source buffer
- * @param src_size size of source buffer
- * @return size of the smallest of two buffer
- */
-static inline size_t memscpy(void* dst, size_t dst_size,
-        const void* src, size_t src_size)
-{
-    size_t copy_size = 0;
-    if( dst_size <= src_size)
-        return  RMNETCTL_LIB_COPY_FAILED;
-    else
-        memcpy(dst, src, copy_size);
-
-    return copy_size;
-}
-
-/*===========================================================================
-			LOCAL FUNCTION DEFINITIONS
-===========================================================================*/
-/*!
-* @brief Synchronous method to send and receive messages to and from the kernel
-* using  netlink sockets
-* @details Increments the transaction id for each message sent to the kernel.
-* Sends the netlink message to the kernel and receives the response from the
-* kernel.
-* @param *hndl RmNet handle for this transaction
-* @param request Message to be sent to the kernel
-* @param response Message received from the kernel
-* @return RMNETCTL_API_SUCCESS if successfully able to send and receive message
-* from the kernel
-* @return RMNETCTL_API_ERR_HNDL_INVALID if RmNet handle for the transaction was
-* NULL
-* @return RMNETCTL_API_ERR_REQUEST_NULL not enough memory to create buffer for
-* sending the message
-* @return RMNETCTL_API_ERR_MESSAGE_SEND if could not send the message to kernel
-* @return RMNETCTL_API_ERR_MESSAGE_RECEIVE if could not receive message from the
-* kernel
-* @return RMNETCTL_API_ERR_MESSAGE_TYPE if the request and response type do not
-* match
-*/
-static uint16_t rmnetctl_transact(rmnetctl_hndl_t *hndl,
-			struct rmnet_nl_msg_s *request,
-			struct rmnet_nl_msg_s *response) {
-	uint8_t *request_buf, *response_buf;
-	struct nlmsghdr *nlmsghdr_val;
-	struct rmnet_nl_msg_s *rmnet_nl_msg_s_val;
-	ssize_t bytes_read = -1;
-	uint16_t return_code = RMNETCTL_API_ERR_HNDL_INVALID;
-	struct sockaddr_nl* __attribute__((__may_alias__)) saddr_ptr;
-	request_buf = NULL;
-	response_buf = NULL;
-	nlmsghdr_val = NULL;
-	rmnet_nl_msg_s_val = NULL;
-	do {
-	if (!hndl){
-		break;
-	}
-	if (!request){
-		return_code = RMNETCTL_API_ERR_REQUEST_NULL;
-		break;
-	}
-	if (!response){
-		return_code = RMNETCTL_API_ERR_RESPONSE_NULL;
-		break;
-	}
-	request_buf = (uint8_t *)malloc(MAX_BUF_SIZE * sizeof(uint8_t));
-	if (!request_buf){
-		return_code = RMNETCTL_API_ERR_REQUEST_NULL;
-		break;
-	}
-
-	response_buf = (uint8_t *)malloc(MAX_BUF_SIZE * sizeof(uint8_t));
-	if (!response_buf) {
-		return_code = RMNETCTL_API_ERR_RESPONSE_NULL;
-		break;
-	}
-
-	nlmsghdr_val = (struct nlmsghdr *)request_buf;
-	rmnet_nl_msg_s_val = (struct rmnet_nl_msg_s *)NLMSG_DATA(request_buf);
-
-	memset(request_buf, 0, MAX_BUF_SIZE*sizeof(uint8_t));
-	memset(response_buf, 0, MAX_BUF_SIZE*sizeof(uint8_t));
-
-	nlmsghdr_val->nlmsg_seq = hndl->transaction_id;
-	nlmsghdr_val->nlmsg_pid = hndl->pid;
-	nlmsghdr_val->nlmsg_len = MAX_BUF_SIZE;
-
-	memcpy((void *)NLMSG_DATA(request_buf), request,
-	sizeof(struct rmnet_nl_msg_s));
-
-	rmnet_nl_msg_s_val->crd = RMNET_NETLINK_MSG_COMMAND;
-	hndl->transaction_id++;
-
-	saddr_ptr = &hndl->dest_addr;
-	socklen_t addrlen = sizeof(struct sockaddr_nl);
-	if (sendto(hndl->netlink_fd,
-			request_buf,
-			MAX_BUF_SIZE,
-			RMNETCTL_SOCK_FLAG,
-			(struct sockaddr*)saddr_ptr,
-			sizeof(struct sockaddr_nl)) < 0) {
-		return_code = RMNETCTL_API_ERR_MESSAGE_SEND;
-		break;
-	}
-
-	saddr_ptr = &hndl->src_addr;
-	bytes_read = recvfrom(hndl->netlink_fd,
-			response_buf,
-			MAX_BUF_SIZE,
-			RMNETCTL_SOCK_FLAG,
-			(struct sockaddr*)saddr_ptr,
-			&addrlen);
-	if (bytes_read < 0) {
-		return_code = RMNETCTL_API_ERR_MESSAGE_RECEIVE;
-		break;
-	}
-
-	memcpy(response, (void *)NLMSG_DATA(response_buf),
-	sizeof(struct rmnet_nl_msg_s));
-	if (sizeof(*response) < sizeof(struct rmnet_nl_msg_s)) {
-		return_code = RMNETCTL_API_ERR_RESPONSE_NULL;
-		break;
-	}
-
-	if (request->message_type != response->message_type) {
-		return_code = RMNETCTL_API_ERR_MESSAGE_TYPE;
-		break;
-	}
-	return_code = RMNETCTL_SUCCESS;
-	} while(0);
-	free(request_buf);
-	free(response_buf);
-	return return_code;
-}
-
-/*!
-* @brief Static function to check the dev name
-* @details Checks if the name is not NULL and if the name is less than the
-* RMNET_MAX_STR_LEN
-* @param dev_name Name of the device
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_INVALID_ARG if invalid arguments were passed to the API
-*/
-static inline int _rmnetctl_check_dev_name(const char *dev_name) {
-	int return_code = RMNETCTL_INVALID_ARG;
-	do {
-	if (!dev_name)
-		break;
-	if (strlen(dev_name) >= RMNET_MAX_STR_LEN)
-		break;
-	return_code = RMNETCTL_SUCCESS;
-	} while(0);
-	return return_code;
-}
-
-/*!
-* @brief Static function to check the string length after a copy
-* @details Checks if the string length is not lesser than zero and lesser than
-* RMNET_MAX_STR_LEN
-* @param str_len length of the string after a copy
-* @param error_code Status code of this operation
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
-*/
-static inline int _rmnetctl_check_len(size_t str_len, uint16_t *error_code) {
-	int return_code = RMNETCTL_LIB_ERR;
-	do {
-	if (str_len > RMNET_MAX_STR_LEN) {
-		*error_code = RMNETCTL_API_ERR_STRING_TRUNCATION;
-		break;
-	}
-	return_code = RMNETCTL_SUCCESS;
-	} while(0);
-	return return_code;
-}
-
-/*!
-* @brief Static function to check the response type
-* @details Checks if the response type of this message was return code
-* @param crd The crd field passed
-* @param error_code Status code of this operation
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
-*/
-static inline int _rmnetctl_check_code(int crd, uint16_t *error_code) {
-	int return_code = RMNETCTL_LIB_ERR;
-	do {
-	if (crd != RMNET_NETLINK_MSG_RETURNCODE) {
-		*error_code = RMNETCTL_API_ERR_RETURN_TYPE;
-		break;
-	}
-	return_code = RMNETCTL_SUCCESS;
-	} while(0);
-	return return_code;
-}
-
-/*!
-* @brief Static function to check the response type
-* @details Checks if the response type of this message was data
-* @param crd The crd field passed
-* @param error_code Status code of this operation
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_LIB_ERR if there was a library error. Check error_code
-*/
-static inline int _rmnetctl_check_data(int crd, uint16_t *error_code) {
-	int return_code = RMNETCTL_LIB_ERR;
-	do {
-	if (crd != RMNET_NETLINK_MSG_RETURNDATA) {
-		*error_code = RMNETCTL_API_ERR_RETURN_TYPE;
-		break;
-	}
-	return_code = RMNETCTL_SUCCESS;
-	} while(0);
-	return return_code;
-}
-
-/*!
-* @brief Static function to set the return value
-* @details Checks if the error_code from the transaction is zero for a return
-* code type message and sets the message type as RMNETCTL_SUCCESS
-* @param crd The crd field passed
-* @param error_code Status code of this operation
-* @return RMNETCTL_SUCCESS if successful
-* @return RMNETCTL_KERNEL_ERR if there was an error in the kernel.
-* Check error_code
-*/
-static inline int _rmnetctl_set_codes(int error_val, uint16_t *error_code) {
-	int return_code = RMNETCTL_KERNEL_ERR;
-	if (error_val == RMNET_CONFIG_OK)
-		return_code = RMNETCTL_SUCCESS;
-	else
-		*error_code = (uint16_t)error_val + RMNETCTL_KERNEL_FIRST_ERR;
-	return return_code;
-}
-
-/*===========================================================================
-				EXPOSED API
-===========================================================================*/
-
-int rmnetctl_init(rmnetctl_hndl_t **hndl, uint16_t *error_code)
-{
-	pid_t pid = 0;
-	int netlink_fd = -1, return_code = RMNETCTL_LIB_ERR;
-	struct sockaddr_nl* __attribute__((__may_alias__)) saddr_ptr;
-	do {
-	if ((!hndl) || (!error_code)){
-		return_code = RMNETCTL_INVALID_ARG;
-		break;
-	}
-
-	*hndl = (rmnetctl_hndl_t *)malloc(sizeof(rmnetctl_hndl_t));
-	if (!*hndl) {
-		*error_code = RMNETCTL_API_ERR_HNDL_INVALID;
-		break;
-	}
-
-	memset(*hndl, 0, sizeof(rmnetctl_hndl_t));
-
-	pid = getpid();
-	if (pid  < MIN_VALID_PROCESS_ID) {
-		free(*hndl);
-		*error_code = RMNETCTL_INIT_ERR_PROCESS_ID;
-		break;
-	}
-	(*hndl)->pid = (uint32_t)pid;
-	netlink_fd = socket(PF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, RMNET_NETLINK_PROTO);
-	if (netlink_fd < MIN_VALID_SOCKET_FD) {
-		free(*hndl);
-		*error_code = RMNETCTL_INIT_ERR_NETLINK_FD;
-		break;
-	}
-
-	(*hndl)->netlink_fd = netlink_fd;
-
-	memset(&(*hndl)->src_addr, 0, sizeof(struct sockaddr_nl));
-
-	(*hndl)->src_addr.nl_family = AF_NETLINK;
-	(*hndl)->src_addr.nl_pid = (*hndl)->pid;
-
-	saddr_ptr = &(*hndl)->src_addr;
-	if (bind((*hndl)->netlink_fd,
-		(struct sockaddr*)saddr_ptr,
-		sizeof(struct sockaddr_nl)) < 0) {
-		close((*hndl)->netlink_fd);
-		free(*hndl);
-		*error_code = RMNETCTL_INIT_ERR_BIND;
-		break;
-	}
-
-	memset(&(*hndl)->dest_addr, 0, sizeof(struct sockaddr_nl));
-
-	(*hndl)->dest_addr.nl_family = AF_NETLINK;
-	(*hndl)->dest_addr.nl_pid = KERNEL_PROCESS_ID;
-	(*hndl)->dest_addr.nl_groups = UNICAST;
-
-	return_code = RMNETCTL_SUCCESS;
-	} while(0);
-	return return_code;
-}
-
-void rmnetctl_cleanup(rmnetctl_hndl_t *hndl)
-{
-	if (!hndl)
-		return;
-	close(hndl->netlink_fd);
-	free(hndl);
-}
-
-int rmnet_associate_network_device(rmnetctl_hndl_t *hndl,
-				   const char *dev_name,
-				   uint16_t *error_code,
-				   uint8_t assoc_dev)
-{
-	struct rmnet_nl_msg_s request, response;
-	size_t str_len = 0;
-	int return_code = RMNETCTL_LIB_ERR;
-	do {
-	if ((!hndl) || (!error_code) || _rmnetctl_check_dev_name(dev_name) ||
-		((assoc_dev != RMNETCTL_DEVICE_ASSOCIATE) &&
-		(assoc_dev != RMNETCTL_DEVICE_UNASSOCIATE))) {
-		return_code = RMNETCTL_INVALID_ARG;
-		break;
-	}
-
-	if (assoc_dev == RMNETCTL_DEVICE_ASSOCIATE)
-		request.message_type = RMNET_NETLINK_ASSOCIATE_NETWORK_DEVICE;
-	else
-		request.message_type = RMNET_NETLINK_UNASSOCIATE_NETWORK_DEVICE;
-
-	request.arg_length = RMNET_MAX_STR_LEN;
-	str_len = strlcpy((char *)(request.data), dev_name, (size_t)RMNET_MAX_STR_LEN);
-	if (_rmnetctl_check_len(str_len, error_code) != RMNETCTL_SUCCESS)
-		break;
-
-	if ((*error_code = rmnetctl_transact(hndl, &request, &response))
-		!= RMNETCTL_SUCCESS)
-		break;
-	if (_rmnetctl_check_code(response.crd, error_code) != RMNETCTL_SUCCESS)
-		break;
-	return_code = _rmnetctl_set_codes(response.return_code, error_code);
-	} while(0);
-	return return_code;
-}
-
-int rmnet_get_network_device_associated(rmnetctl_hndl_t *hndl,
-					const char *dev_name,
-					int *register_status,
-					uint16_t *error_code) {
-	struct rmnet_nl_msg_s request, response;
-	size_t str_len = 0;
-	int  return_code = RMNETCTL_LIB_ERR;
-	do {
-	if ((!hndl) || (!register_status) || (!error_code) ||
-	_rmnetctl_check_dev_name(dev_name)) {
-		return_code = RMNETCTL_INVALID_ARG;
-		break;
-	}
-
-	request.message_type = RMNET_NETLINK_GET_NETWORK_DEVICE_ASSOCIATED;
-
-	request.arg_length = RMNET_MAX_STR_LEN;
-	str_len = strlcpy((char *)(request.data), dev_name, RMNET_MAX_STR_LEN);
-	if (_rmnetctl_check_len(str_len, error_code) != RMNETCTL_SUCCESS)
-		break;
-
-	if ((*error_code = rmnetctl_transact(hndl, &request, &response))
-		!= RMNETCTL_SUCCESS)
-		break;
-
-	if (_rmnetctl_check_data(response.crd, error_code)
-		!= RMNETCTL_SUCCESS) {
-		if (_rmnetctl_check_code(response.crd, error_code)
-			== RMNETCTL_SUCCESS)
-			return_code = _rmnetctl_set_codes(response.return_code,
-							  error_code);
-		break;
-	}
-
-	*register_status = response.return_code;
-	return_code = RMNETCTL_SUCCESS;
-	} while(0);
-	return return_code;
-}
-
-int rmnet_set_link_egress_data_format(rmnetctl_hndl_t *hndl,
-				      uint32_t egress_flags,
-				      uint16_t agg_size,
-				      uint16_t agg_count,
-				      const char *dev_name,
-				      uint16_t *error_code) {
-	struct rmnet_nl_msg_s request, response;
-	size_t str_len = 0;
-	int  return_code = RMNETCTL_LIB_ERR;
-	do {
-	if ((!hndl) || (!error_code) || _rmnetctl_check_dev_name(dev_name) ||
-	    ((~EGRESS_FLAGS_MASK) & egress_flags)) {
-		return_code = RMNETCTL_INVALID_ARG;
-		break;
-	}
-
-	request.message_type = RMNET_NETLINK_SET_LINK_EGRESS_DATA_FORMAT;
-
-	request.arg_length = RMNET_MAX_STR_LEN +
-			 sizeof(uint32_t) + sizeof(uint16_t) + sizeof(uint16_t);
-	str_len = strlcpy((char *)(request.data_format.dev),
-			  dev_name,
-			  RMNET_MAX_STR_LEN);
-	if (_rmnetctl_check_len(str_len, error_code) != RMNETCTL_SUCCESS)
-		break;
-
-	request.data_format.flags = egress_flags;
-	request.data_format.agg_size = agg_size;
-	request.data_format.agg_count = agg_count;
-
-	if ((*error_code = rmnetctl_transact(hndl, &request, &response))
-		!= RMNETCTL_SUCCESS)
-		break;
-
-	if (_rmnetctl_check_code(response.crd, error_code) != RMNETCTL_SUCCESS)
-		break;
-
-	return_code = _rmnetctl_set_codes(response.return_code, error_code);
-	} while(0);
-	return return_code;
-}
-
-int rmnet_get_link_egress_data_format(rmnetctl_hndl_t *hndl,
-				      const char *dev_name,
-				      uint32_t *egress_flags,
-				      uint16_t *agg_size,
-				      uint16_t *agg_count,
-				      uint16_t *error_code) {
-	struct rmnet_nl_msg_s request, response;
-	size_t str_len = 0;
-	int  return_code = RMNETCTL_LIB_ERR;
-	do {
-	if ((!hndl) || (!egress_flags) || (!agg_size) || (!agg_count) ||
-	(!error_code) || _rmnetctl_check_dev_name(dev_name)) {
-		return_code = RMNETCTL_INVALID_ARG;
-		break;
-	}
-	request.message_type = RMNET_NETLINK_GET_LINK_EGRESS_DATA_FORMAT;
-
-	request.arg_length = RMNET_MAX_STR_LEN;
-	str_len = strlcpy((char *)(request.data_format.dev),
-			  dev_name,
-			  RMNET_MAX_STR_LEN);
-	if (_rmnetctl_check_len(str_len, error_code) != RMNETCTL_SUCCESS)
-		break;
-
-	if ((*error_code = rmnetctl_transact(hndl, &request, &response))
-		!= RMNETCTL_SUCCESS)
-		break;
-
-	if (_rmnetctl_check_data(response.crd, error_code)
-		!= RMNETCTL_SUCCESS) {
-		if (_rmnetctl_check_code(response.crd, error_code)
-			== RMNETCTL_SUCCESS)
-			return_code = _rmnetctl_set_codes(response.return_code,
-							  error_code);
-		break;
-	}
-
-	*egress_flags = response.data_format.flags;
-	*agg_size = response.data_format.agg_size;
-	*agg_count = response.data_format.agg_count;
-	return_code = RMNETCTL_SUCCESS;
-	} while(0);
-	return return_code;
-}
-
-int rmnet_set_link_ingress_data_format_tailspace(rmnetctl_hndl_t *hndl,
-						 uint32_t ingress_flags,
-						 uint8_t  tail_spacing,
-						 const char *dev_name,
-						 uint16_t *error_code) {
-	struct rmnet_nl_msg_s request, response;
-	size_t str_len = 0;
-	int  return_code = RMNETCTL_LIB_ERR;
-	do {
-	if ((!hndl) || (!error_code) || _rmnetctl_check_dev_name(dev_name) ||
-	    ((~INGRESS_FLAGS_MASK) & ingress_flags)) {
-		return_code = RMNETCTL_INVALID_ARG;
-		break;
-	}
-
-	request.message_type = RMNET_NETLINK_SET_LINK_INGRESS_DATA_FORMAT;
-
-	request.arg_length = RMNET_MAX_STR_LEN +
-	sizeof(uint32_t) + sizeof(uint16_t) + sizeof(uint16_t);
-	str_len = strlcpy((char *)(request.data_format.dev),
-			  dev_name,
-			  RMNET_MAX_STR_LEN);
-	if (_rmnetctl_check_len(str_len, error_code) != RMNETCTL_SUCCESS)
-		break;
-	request.data_format.flags = ingress_flags;
-	request.data_format.tail_spacing = tail_spacing;
-
-	if ((*error_code = rmnetctl_transact(hndl, &request, &response))
-		!= RMNETCTL_SUCCESS)
-		break;
-
-	if (_rmnetctl_check_code(response.crd, error_code) != RMNETCTL_SUCCESS)
-		break;
-
-	return_code = _rmnetctl_set_codes(response.return_code, error_code);
-	} while(0);
-	return return_code;
-}
-
-int rmnet_get_link_ingress_data_format_tailspace(rmnetctl_hndl_t *hndl,
-						 const char *dev_name,
-						 uint32_t *ingress_flags,
-						 uint8_t  *tail_spacing,
-						 uint16_t *error_code) {
-	struct rmnet_nl_msg_s request, response;
-	size_t str_len = 0;
-	int  return_code = RMNETCTL_LIB_ERR;
-	do {
-	if ((!hndl) || (!error_code) ||
-		_rmnetctl_check_dev_name(dev_name)) {
-		return_code = RMNETCTL_INVALID_ARG;
-		break;
-	}
-
-	request.message_type = RMNET_NETLINK_GET_LINK_INGRESS_DATA_FORMAT;
-
-	request.arg_length = RMNET_MAX_STR_LEN;
-	str_len = strlcpy((char *)(request.data_format.dev),
-			  dev_name,
-			  RMNET_MAX_STR_LEN);
-	if (_rmnetctl_check_len(str_len, error_code) != RMNETCTL_SUCCESS)
-		break;
-
-	if ((*error_code = rmnetctl_transact(hndl, &request, &response))
-		!= RMNETCTL_SUCCESS)
-		break;
-
-	if (_rmnetctl_check_data(response.crd, error_code)
-		!= RMNETCTL_SUCCESS) {
-		if (_rmnetctl_check_code(response.crd, error_code)
-			== RMNETCTL_SUCCESS)
-			return_code = _rmnetctl_set_codes(response.return_code,
-							  error_code);
-		break;
-	}
-
-	if (ingress_flags)
-		*ingress_flags = response.data_format.flags;
-
-	if (tail_spacing)
-		*tail_spacing = response.data_format.tail_spacing;
-
-	return_code = RMNETCTL_SUCCESS;
-	} while(0);
-	return return_code;
-}
-
-int rmnet_set_logical_ep_config(rmnetctl_hndl_t *hndl,
-				int32_t ep_id,
-				uint8_t operating_mode,
-				const char *dev_name,
-				const char *next_dev,
-				uint16_t *error_code) {
-	struct rmnet_nl_msg_s request, response;
-	size_t str_len = 0;
-	int return_code = RMNETCTL_LIB_ERR;
-	do {
-	if ((!hndl) || ((ep_id < -1) || (ep_id > 31)) || (!error_code) ||
-		_rmnetctl_check_dev_name(dev_name) ||
-		_rmnetctl_check_dev_name(next_dev) ||
-		operating_mode >= RMNET_EPMODE_LENGTH) {
-		return_code = RMNETCTL_INVALID_ARG;
-		break;
-	}
-
-	request.message_type = RMNET_NETLINK_SET_LOGICAL_EP_CONFIG;
-
-	request.arg_length = RMNET_MAX_STR_LEN +
-	RMNET_MAX_STR_LEN + sizeof(int32_t) + sizeof(uint8_t);
-	str_len = strlcpy((char *)(request.local_ep_config.dev),
-			  dev_name,
-			  RMNET_MAX_STR_LEN);
-	if (_rmnetctl_check_len(str_len, error_code) != RMNETCTL_SUCCESS)
-		break;
-
-	str_len = strlcpy((char *)(request.local_ep_config.next_dev),
-			  next_dev,
-			  RMNET_MAX_STR_LEN);
-	if (_rmnetctl_check_len(str_len, error_code) != RMNETCTL_SUCCESS)
-		break;
-	request.local_ep_config.ep_id = ep_id;
-	request.local_ep_config.operating_mode = operating_mode;
-
-	if ((*error_code = rmnetctl_transact(hndl, &request, &response))
-		!= RMNETCTL_SUCCESS)
-		break;
-	if (_rmnetctl_check_code(response.crd, error_code) != RMNETCTL_SUCCESS)
-		break;
-
-	return_code = _rmnetctl_set_codes(response.return_code, error_code);
-	} while(0);
-	return return_code;
-}
-
-int rmnet_unset_logical_ep_config(rmnetctl_hndl_t *hndl,
-				  int32_t ep_id,
-				  const char *dev_name,
-				  uint16_t *error_code) {
-	struct rmnet_nl_msg_s request, response;
-	size_t str_len = 0;
-	int return_code = RMNETCTL_LIB_ERR;
-	do {
-
-	if ((!hndl) || ((ep_id < -1) || (ep_id > 31)) || (!error_code) ||
-		_rmnetctl_check_dev_name(dev_name)) {
-		return_code = RMNETCTL_INVALID_ARG;
-		break;
-	}
-
-	request.message_type = RMNET_NETLINK_UNSET_LOGICAL_EP_CONFIG;
-
-	request.arg_length = RMNET_MAX_STR_LEN + sizeof(int32_t);
-	str_len = strlcpy((char *)(request.local_ep_config.dev),
-			  dev_name,
-			  RMNET_MAX_STR_LEN);
-
-	if (_rmnetctl_check_len(str_len, error_code) != RMNETCTL_SUCCESS)
-		break;
-
-	request.local_ep_config.ep_id = ep_id;
-
-	if ((*error_code = rmnetctl_transact(hndl, &request, &response))
-		!= RMNETCTL_SUCCESS)
-		break;
-	if (_rmnetctl_check_code(response.crd, error_code) != RMNETCTL_SUCCESS)
-		break;
-
-	return_code = _rmnetctl_set_codes(response.return_code, error_code);
-	} while(0);
-
-	return return_code;
-}
-
-int rmnet_get_logical_ep_config(rmnetctl_hndl_t *hndl,
-				int32_t ep_id,
-				const char *dev_name,
-				uint8_t *operating_mode,
-				char **next_dev,
-				uint32_t next_dev_len,
-				uint16_t *error_code) {
-	struct rmnet_nl_msg_s request, response;
-	size_t str_len = 0;
-	int return_code = RMNETCTL_LIB_ERR;
-	do {
-	if ((!hndl) || (!operating_mode) || (!error_code) || ((ep_id < -1) ||
-	    (ep_id > 31)) || _rmnetctl_check_dev_name(dev_name) || (!next_dev)
-	    || (0 == next_dev_len)) {
-		return_code = RMNETCTL_INVALID_ARG;
-		break;
-	}
-
-	request.message_type = RMNET_NETLINK_GET_LOGICAL_EP_CONFIG;
-
-	request.arg_length = RMNET_MAX_STR_LEN + sizeof(int32_t);
-	str_len = strlcpy((char *)(request.local_ep_config.dev),
-			  dev_name,
-			  RMNET_MAX_STR_LEN);
-	if (_rmnetctl_check_len(str_len, error_code) != RMNETCTL_SUCCESS)
-		break;
-
-	request.local_ep_config.ep_id = ep_id;
-
-	if ((*error_code = rmnetctl_transact(hndl, &request, &response))
-		!= RMNETCTL_SUCCESS)
-		break;
-
-	if (_rmnetctl_check_data(response.crd, error_code)
-		!= RMNETCTL_SUCCESS) {
-		if (_rmnetctl_check_code(response.crd, error_code)
-			== RMNETCTL_SUCCESS)
-			return_code = _rmnetctl_set_codes(response.return_code,
-							  error_code);
-		break;
-	}
-
-	str_len = strlcpy(*next_dev,
-			  (char *)(response.local_ep_config.next_dev),
-			  min(RMNET_MAX_STR_LEN, next_dev_len));
-	if (_rmnetctl_check_len(str_len, error_code) != RMNETCTL_SUCCESS)
-		break;
-
-	*operating_mode = response.local_ep_config.operating_mode;
-	return_code = RMNETCTL_SUCCESS;
-	} while(0);
-	return return_code;
-}
-
-int rmnet_new_vnd_prefix(rmnetctl_hndl_t *hndl,
-			 uint32_t id,
-			 uint16_t *error_code,
-			 uint8_t new_vnd,
-			 const char *prefix)
-{
-	struct rmnet_nl_msg_s request, response;
-	int return_code = RMNETCTL_LIB_ERR;
-	size_t str_len = 0;
-	do {
-	if ((!hndl) || (!error_code) ||
-	((new_vnd != RMNETCTL_NEW_VND) && (new_vnd != RMNETCTL_FREE_VND))) {
-		return_code = RMNETCTL_INVALID_ARG;
-		break;
-	}
-
-	memset(request.vnd.vnd_name, 0, RMNET_MAX_STR_LEN);
-	if (new_vnd ==  RMNETCTL_NEW_VND) {
-		if (prefix) {
-			request.message_type =RMNET_NETLINK_NEW_VND_WITH_PREFIX;
-			str_len = strlcpy((char *)request.vnd.vnd_name,
-					  prefix, RMNET_MAX_STR_LEN);
-			if (_rmnetctl_check_len(str_len, error_code)
-						!= RMNETCTL_SUCCESS)
-				break;
-		} else {
-			request.message_type = RMNET_NETLINK_NEW_VND;
-		}
-	} else {
-		request.message_type = RMNET_NETLINK_FREE_VND;
-	}
-
-	request.arg_length = sizeof(uint32_t);
-	request.vnd.id = id;
-
-	if ((*error_code = rmnetctl_transact(hndl, &request, &response))
-		!= RMNETCTL_SUCCESS)
-		break;
-	if (_rmnetctl_check_code(response.crd, error_code) != RMNETCTL_SUCCESS)
-		break;
-
-	return_code = _rmnetctl_set_codes(response.return_code, error_code);
-	} while(0);
-	return return_code;
-}
-
-int rmnet_new_vnd_name(rmnetctl_hndl_t *hndl,
-			 uint32_t id,
-			 uint16_t *error_code,
-			 const char *prefix)
-{
-	struct rmnet_nl_msg_s request, response;
-	int return_code = RMNETCTL_LIB_ERR;
-	size_t str_len = 0;
-	do {
-	if ((!hndl) || (!error_code)) {
-		return_code = RMNETCTL_INVALID_ARG;
-		break;
-	}
-
-	memset(request.vnd.vnd_name, 0, RMNET_MAX_STR_LEN);
-		if (prefix) {
-			request.message_type =RMNET_NETLINK_NEW_VND_WITH_NAME;
-			str_len = strlcpy((char *)request.vnd.vnd_name,
-					  prefix, RMNET_MAX_STR_LEN);
-			if (_rmnetctl_check_len(str_len, error_code)
-						!= RMNETCTL_SUCCESS)
-				break;
-		} else {
-			request.message_type = RMNET_NETLINK_NEW_VND;
-		}
-
-	request.arg_length = sizeof(uint32_t);
-	request.vnd.id = id;
-
-	if ((*error_code = rmnetctl_transact(hndl, &request, &response))
-		!= RMNETCTL_SUCCESS)
-		break;
-	if (_rmnetctl_check_code(response.crd, error_code) != RMNETCTL_SUCCESS)
-		break;
-
-	return_code = _rmnetctl_set_codes(response.return_code, error_code);
-	} while(0);
-	return return_code;
-}
-
-int rmnet_new_vnd(rmnetctl_hndl_t *hndl,
-		  uint32_t id,
-		  uint16_t *error_code,
-		  uint8_t new_vnd)
-{
-	return rmnet_new_vnd_prefix(hndl, id, error_code, new_vnd, 0);
-}
-
-int rmnet_get_vnd_name(rmnetctl_hndl_t *hndl,
-		       uint32_t id,
-		       uint16_t *error_code,
-		       char *buf,
-		       uint32_t buflen)
-{
-	struct rmnet_nl_msg_s request, response;
-	uint32_t str_len;
-	int return_code = RMNETCTL_LIB_ERR;
-	do {
-	if ((!hndl) || (!error_code) || (!buf) || (0 == buflen)) {
-		return_code = RMNETCTL_INVALID_ARG;
-		break;
-	}
-
-	request.message_type = RMNET_NETLINK_GET_VND_NAME;
-	request.arg_length = sizeof(uint32_t);
-	request.vnd.id = id;
-
-
-	if ((*error_code = rmnetctl_transact(hndl, &request, &response))
-		!= RMNETCTL_SUCCESS)
-		break;
-
-	if (_rmnetctl_check_data(response.crd, error_code)
-		!= RMNETCTL_SUCCESS) {
-		if (_rmnetctl_check_code(response.crd, error_code)
-			== RMNETCTL_SUCCESS)
-			return_code = _rmnetctl_set_codes(response.return_code,
-							  error_code);
-		break;
-	}
-
-	str_len = (uint32_t)strlcpy(buf,
-			  (char *)(response.vnd.vnd_name),
-			  buflen);
-	if (str_len >= buflen) {
-		*error_code = RMNETCTL_API_ERR_STRING_TRUNCATION;
-		break;
-	}
-
-	return_code = RMNETCTL_SUCCESS;
-	} while (0);
-	return return_code;
-}
-
-int rmnet_add_del_vnd_tc_flow(rmnetctl_hndl_t *hndl,
-			      uint32_t id,
-			      uint32_t map_flow_id,
-			      uint32_t tc_flow_id,
-			      uint8_t set_flow,
-			      uint16_t *error_code) {
-	struct rmnet_nl_msg_s request, response;
-	int return_code = RMNETCTL_LIB_ERR;
-	do {
-	if ((!hndl) || (!error_code) || ((set_flow != RMNETCTL_ADD_FLOW) &&
-	    (set_flow != RMNETCTL_DEL_FLOW))) {
-		return_code = RMNETCTL_INVALID_ARG;
-		break;
-	}
-	if (set_flow ==  RMNETCTL_ADD_FLOW)
-		request.message_type = RMNET_NETLINK_ADD_VND_TC_FLOW;
-	else
-		request.message_type = RMNET_NETLINK_DEL_VND_TC_FLOW;
-
-	request.arg_length = (sizeof(uint32_t))*3;
-	request.flow_control.id = id;
-	request.flow_control.map_flow_id = map_flow_id;
-	request.flow_control.tc_flow_id = tc_flow_id;
-
-	if ((*error_code = rmnetctl_transact(hndl, &request, &response))
-	!= RMNETCTL_SUCCESS)
-		break;
-	if (_rmnetctl_check_code(response.crd, error_code) != RMNETCTL_SUCCESS)
-		break;
-	return_code = _rmnetctl_set_codes(response.return_code, error_code);
-	} while(0);
-	return return_code;
-}
-
-/*
- *                       NEW DRIVER API
- */
-/* @brief Synchronous method to receive messages to and from the kernel
- * using netlink sockets
- * @details Receives the ack response from the kernel.
- * @param *hndl RmNet handle for this transaction
- * @param *error_code Error code if transaction fails
- * @return RMNETCTL_API_SUCCESS if successfully able to send and receive message
- * from the kernel
- * @return RMNETCTL_API_ERR_HNDL_INVALID if RmNet handle for the transaction was
- * NULL
- * @return RMNETCTL_API_ERR_MESSAGE_RECEIVE if could not receive message from
- * the kernel
- * @return RMNETCTL_API_ERR_MESSAGE_TYPE if the response type does not
- * match
- */
-static int rmnet_get_ack(rmnetctl_hndl_t *hndl, uint16_t *error_code)
-{
-	struct nlack {
-		struct nlmsghdr ackheader;
-		struct nlmsgerr ackdata;
-		char   data[256];
-
-	} ack;
-	int i;
-
-	if (!hndl || !error_code)
-		return RMNETCTL_INVALID_ARG;
-
-	if ((i = recv(hndl->netlink_fd, &ack, sizeof(ack), 0)) < 0) {
-		*error_code = errno;
-		return RMNETCTL_API_ERR_MESSAGE_RECEIVE;
-	}
-
-	/*Ack should always be NLMSG_ERROR type*/
-	if (ack.ackheader.nlmsg_type == NLMSG_ERROR) {
-		if (ack.ackdata.error == 0) {
-			*error_code = RMNETCTL_API_SUCCESS;
-			return RMNETCTL_SUCCESS;
-		} else {
-			*error_code = -ack.ackdata.error;
-			return RMNETCTL_KERNEL_ERR;
-		}
-	}
-
-	*error_code = RMNETCTL_API_ERR_RETURN_TYPE;
-	return RMNETCTL_API_FIRST_ERR;
-}
-
-/*
- *                       EXPOSED NEW DRIVER API
- */
-int rtrmnet_ctl_init(rmnetctl_hndl_t **hndl, uint16_t *error_code)
-{
-	struct sockaddr_nl __attribute__((__may_alias__)) *saddr_ptr;
-	int netlink_fd = -1;
-	pid_t pid = 0;
-
-	if (!hndl || !error_code)
-		return RMNETCTL_INVALID_ARG;
-
-	*hndl = (rmnetctl_hndl_t *)malloc(sizeof(rmnetctl_hndl_t));
-	if (!*hndl) {
-		*error_code = RMNETCTL_API_ERR_HNDL_INVALID;
-		return RMNETCTL_LIB_ERR;
-	}
-
-	memset(*hndl, 0, sizeof(rmnetctl_hndl_t));
-
-	pid = getpid();
-	if (pid  < MIN_VALID_PROCESS_ID) {
-		free(*hndl);
-		*error_code = RMNETCTL_INIT_ERR_PROCESS_ID;
-		return RMNETCTL_LIB_ERR;
-	}
-	(*hndl)->pid = KERNEL_PROCESS_ID;
-	netlink_fd = socket(AF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, NETLINK_ROUTE);
-	if (netlink_fd < MIN_VALID_SOCKET_FD) {
-		free(*hndl);
-		*error_code = RMNETCTL_INIT_ERR_NETLINK_FD;
-		return RMNETCTL_LIB_ERR;
-	}
-
-	(*hndl)->netlink_fd = netlink_fd;
-
-	memset(&(*hndl)->src_addr, 0, sizeof(struct sockaddr_nl));
-
-	(*hndl)->src_addr.nl_family = AF_NETLINK;
-	(*hndl)->src_addr.nl_pid = (*hndl)->pid;
-
-	saddr_ptr = &(*hndl)->src_addr;
-	if (bind((*hndl)->netlink_fd,
-		(struct sockaddr *)saddr_ptr,
-		sizeof(struct sockaddr_nl)) < 0) {
-		close((*hndl)->netlink_fd);
-		free(*hndl);
-		*error_code = RMNETCTL_INIT_ERR_BIND;
-		return RMNETCTL_LIB_ERR;
-	}
-
-	memset(&(*hndl)->dest_addr, 0, sizeof(struct sockaddr_nl));
-
-	(*hndl)->dest_addr.nl_family = AF_NETLINK;
-	(*hndl)->dest_addr.nl_pid = KERNEL_PROCESS_ID;
-	(*hndl)->dest_addr.nl_groups = UNICAST;
-
-	return RMNETCTL_SUCCESS;
-}
-
-int rtrmnet_ctl_deinit(rmnetctl_hndl_t *hndl)
-{
-	if (!hndl)
-		return RMNETCTL_SUCCESS;
-
-	close(hndl->netlink_fd);
-	free(hndl);
-
-	return RMNETCTL_SUCCESS;
-}
-
-int rtrmnet_ctl_newvnd(rmnetctl_hndl_t *hndl, char *devname, char *vndname,
-		       uint16_t *error_code, uint8_t  index,
-		       uint32_t flagconfig)
-{
-	struct rtattr *attrinfo, *datainfo, *linkinfo;
-	struct ifla_vlan_flags flags;
-	int devindex = 0, val = 0;
-	char *kind = "rmnet";
-	struct nlmsg req;
-	short id;
-	int ret = 0;
-
-	if (!hndl || !devname || !vndname || !error_code)
-		return RMNETCTL_INVALID_ARG;
-
-	memset(&req, 0, sizeof(req));
-	req.nl_addr.nlmsg_type = RTM_NEWLINK;
-	req.nl_addr.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg));
-	req.nl_addr.nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE | NLM_F_EXCL |
-				  NLM_F_ACK;
-	req.nl_addr.nlmsg_seq = hndl->transaction_id;
-	hndl->transaction_id++;
-
-	/* Get index of devname*/
-	devindex = if_nametoindex(devname);
-	if (devindex < 0) {
-		*error_code = errno;
-		return RMNETCTL_KERNEL_ERR;
-	}
-
-	/* Setup link attr with devindex as data */
-	val = devindex;
-	attrinfo = (struct rtattr *)(((char *)&req) +
-				     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
-	attrinfo->rta_type = IFLA_LINK;
-	attrinfo->rta_len = RTA_ALIGN(RTA_LENGTH(sizeof(val)));
-	memcpy(RTA_DATA(attrinfo), &val, sizeof(val));
-	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
-				RTA_ALIGN(RTA_LENGTH(sizeof(val)));
-
-	/* Set up IFLA info kind  RMNET that has linkinfo and type */
-	attrinfo = (struct rtattr *)(((char *)&req) +
-				     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
-	attrinfo->rta_type =  IFLA_IFNAME;
-	attrinfo->rta_len = RTA_ALIGN(RTA_LENGTH(strlen(vndname) + 1));
-	memcpy(RTA_DATA(attrinfo), vndname, strlen(vndname) + 1);
-	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
-				RTA_ALIGN(RTA_LENGTH(strlen(vndname) + 1));
-
-	linkinfo = (struct rtattr *)(((char *)&req) +
-				     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
-	linkinfo->rta_type = IFLA_LINKINFO;
-	linkinfo->rta_len = RTA_ALIGN(RTA_LENGTH(0));
-	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
-				RTA_ALIGN(RTA_LENGTH(0));
-
-	attrinfo = (struct rtattr *)(((char *)&req) +
-				     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
-	attrinfo->rta_type =  IFLA_INFO_KIND;
-	attrinfo->rta_len = RTA_ALIGN(RTA_LENGTH(strlen(kind)));
-	if(strlen(kind) < IFNAMSIZ)
-		strlcpy(RTA_DATA(attrinfo), kind, sizeof(attrinfo));
-	else
-		return RMNETCTL_LIB_ERR;
-	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
-				RTA_ALIGN(RTA_LENGTH(strlen(kind)));
-
-	datainfo = (struct rtattr *)(((char *)&req) +
-				     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
-	datainfo->rta_type =  IFLA_INFO_DATA;
-	datainfo->rta_len = RTA_ALIGN(RTA_LENGTH(0));
-	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
-				RTA_ALIGN(RTA_LENGTH(0));
-
-	id = index;
-	attrinfo = (struct rtattr *)(((char *)&req) +
-				     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
-	attrinfo->rta_type =  IFLA_VLAN_ID;
-	attrinfo->rta_len = RTA_LENGTH(sizeof(id));
-	ret = memscpy(RTA_DATA(attrinfo), sizeof(req.data), &id, sizeof(id));
-	if(ret == RMNETCTL_LIB_COPY_FAILED)
-		return RMNETCTL_LIB_ERR;
-	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
-				RTA_ALIGN(RTA_LENGTH(sizeof(id)));
-
-	if (flagconfig != 0) {
-		flags.mask  = flagconfig;
-		flags.flags = flagconfig;
-
-		attrinfo = (struct rtattr *)(((char *)&req) +
-					     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
-		attrinfo->rta_type =  IFLA_VLAN_FLAGS;
-		attrinfo->rta_len = RTA_LENGTH(sizeof(flags));
-		ret = memscpy(RTA_DATA(attrinfo), sizeof(req.data), &flags, sizeof(flags));
-		if(ret == RMNETCTL_LIB_COPY_FAILED)
-			return RMNETCTL_LIB_ERR;
-		req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
-					RTA_ALIGN(RTA_LENGTH(sizeof(flags)));
-	}
-
-	datainfo->rta_len = (char *)NLMSG_TAIL(&req.nl_addr) - (char *)datainfo;
-
-	linkinfo->rta_len = (char *)NLMSG_TAIL(&req.nl_addr) - (char *)linkinfo;
-
-	if (send(hndl->netlink_fd, &req, req.nl_addr.nlmsg_len, 0) < 0) {
-		*error_code = RMNETCTL_API_ERR_MESSAGE_SEND;
-		return RMNETCTL_LIB_ERR;
-	}
-
-	return rmnet_get_ack(hndl, error_code);
-}
-
-int rtrmnet_ctl_delvnd(rmnetctl_hndl_t *hndl, char *vndname,
-		       uint16_t *error_code)
-{
-	int devindex = 0;
-	struct nlmsg req;
-
-	if (!hndl || !vndname || !error_code)
-		return RMNETCTL_INVALID_ARG;
-
-	memset(&req, 0, sizeof(req));
-	req.nl_addr.nlmsg_type = RTM_DELLINK;
-	req.nl_addr.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg));
-	req.nl_addr.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
-	req.nl_addr.nlmsg_seq = hndl->transaction_id;
-	hndl->transaction_id++;
-
-	/* Get index of vndname*/
-	devindex = if_nametoindex(vndname);
-	if (devindex < 0) {
-		*error_code = errno;
-		return RMNETCTL_KERNEL_ERR;
-	}
-
-	/* Setup index attribute */
-	req.ifmsg.ifi_index = devindex;
-	if (send(hndl->netlink_fd, &req, req.nl_addr.nlmsg_len, 0) < 0) {
-		*error_code = RMNETCTL_API_ERR_MESSAGE_SEND;
-		return RMNETCTL_LIB_ERR;
-	}
-
-	return rmnet_get_ack(hndl, error_code);
-}
-
-
-int rtrmnet_ctl_changevnd(rmnetctl_hndl_t *hndl, char *devname, char *vndname,
-			  uint16_t *error_code, uint8_t  index,
-			  uint32_t flagconfig)
-{
-	struct rtattr *attrinfo, *datainfo, *linkinfo;
-	struct ifla_vlan_flags flags;
-	char *kind = "rmnet";
-	struct nlmsg req;
-	int devindex = 0;
-	int val = 0;
-	short id;
-	int ret = 0;
-
-	memset(&req, 0, sizeof(req));
-
-	if (!hndl || !devname || !vndname || !error_code)
-		return RMNETCTL_INVALID_ARG;
-
-	req.nl_addr.nlmsg_type = RTM_NEWLINK;
-	req.nl_addr.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg));
-	req.nl_addr.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
-	req.nl_addr.nlmsg_seq = hndl->transaction_id;
-	hndl->transaction_id++;
-
-	/* Get index of devname*/
-	devindex = if_nametoindex(devname);
-	if (devindex < 0) {
-		*error_code = errno;
-		return RMNETCTL_KERNEL_ERR;
-	}
-
-	/* Setup link attr with devindex as data */
-	val = devindex;
-	attrinfo = (struct rtattr *)(((char *)&req) +
-				     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
-
-	attrinfo->rta_type = IFLA_LINK;
-	attrinfo->rta_len = RTA_ALIGN(RTA_LENGTH(sizeof(val)));
-	memcpy(RTA_DATA(attrinfo), &val, sizeof(val));
-	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
-				RTA_ALIGN(RTA_LENGTH(sizeof(val)));
-
-	  /* Set up IFLA info kind  RMNET that has linkinfo and type */
-	attrinfo = (struct rtattr *)(((char *)&req) +
-				     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
-	attrinfo->rta_type =  IFLA_IFNAME;
-	attrinfo->rta_len = RTA_ALIGN(RTA_LENGTH(strlen(vndname) + 1));
-	memcpy(RTA_DATA(attrinfo), vndname, strlen(vndname) + 1);
-	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
-				RTA_ALIGN(RTA_LENGTH(strlen(vndname) + 1));
-
-	linkinfo = (struct rtattr *)(((char *)&req) +
-				     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
-
-	linkinfo->rta_type = IFLA_LINKINFO;
-	linkinfo->rta_len = RTA_ALIGN(RTA_LENGTH(0));
-	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
-				RTA_ALIGN(RTA_LENGTH(0));
-
-
-	attrinfo = (struct rtattr *)(((char *)&req) +
-				     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
-
-	attrinfo->rta_type =  IFLA_INFO_KIND;
-	attrinfo->rta_len = RTA_ALIGN(RTA_LENGTH(strlen(kind)));
-	if(strlen(kind) < IFNAMSIZ)
-		strlcpy(RTA_DATA(attrinfo), kind, sizeof(attrinfo));
-	else
-		return RMNETCTL_LIB_ERR;
-	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
-				RTA_ALIGN(RTA_LENGTH(strlen(kind)));
-
-	datainfo = (struct rtattr *)(((char *)&req) +
-				     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
-
-	datainfo->rta_type =  IFLA_INFO_DATA;
-	datainfo->rta_len = RTA_ALIGN(RTA_LENGTH(0));
-	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
-				RTA_ALIGN(RTA_LENGTH(0));
-
-	id = index;
-	attrinfo = (struct rtattr *)(((char *)&req) +
-				     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
-	attrinfo->rta_type =  IFLA_VLAN_ID;
-	attrinfo->rta_len = RTA_LENGTH(sizeof(id));
-	ret = memscpy(RTA_DATA(attrinfo), sizeof(req.data), &id, sizeof(id));
-	if(ret == RMNETCTL_LIB_COPY_FAILED)
-		return RMNETCTL_LIB_ERR;
-	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
-				RTA_ALIGN(RTA_LENGTH(sizeof(id)));
-
-	if (flagconfig != 0) {
-		flags.mask  = flagconfig;
-		flags.flags = flagconfig;
-
-		attrinfo = (struct rtattr *)(((char *)&req) +
-					     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
-		attrinfo->rta_type =  IFLA_VLAN_FLAGS;
-		attrinfo->rta_len = RTA_LENGTH(sizeof(flags));
-		ret = memscpy(RTA_DATA(attrinfo), sizeof(req.data), &flags, sizeof(flags));
-		if(ret == RMNETCTL_LIB_COPY_FAILED)
-			return RMNETCTL_LIB_ERR;
-		req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
-					RTA_ALIGN(RTA_LENGTH(sizeof(flags)));
-	}
-
-	datainfo->rta_len = (char *)NLMSG_TAIL(&req.nl_addr) - (char *)datainfo;
-
-	linkinfo->rta_len = (char *)NLMSG_TAIL(&req.nl_addr) - (char *)linkinfo;
-
-	if (send(hndl->netlink_fd, &req, req.nl_addr.nlmsg_len, 0) < 0) {
-		*error_code = RMNETCTL_API_ERR_MESSAGE_SEND;
-		return RMNETCTL_LIB_ERR;
-	}
-
-	return rmnet_get_ack(hndl, error_code);
-}
-
-int rtrmnet_ctl_bridgevnd(rmnetctl_hndl_t *hndl, char *devname, char *vndname,
-			  uint16_t *error_code)
-{
-	int devindex = 0, vndindex = 0;
-	struct rtattr *masterinfo;
-	struct nlmsg req;
-
-	if (!hndl || !vndname || !devname || !error_code)
-		return RMNETCTL_INVALID_ARG;
-
-	memset(&req, 0, sizeof(req));
-	req.nl_addr.nlmsg_type = RTM_NEWLINK;
-	req.nl_addr.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg));
-	req.nl_addr.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
-	req.nl_addr.nlmsg_seq = hndl->transaction_id;
-	hndl->transaction_id++;
-
-	/* Get index of vndname*/
-	devindex = if_nametoindex(devname);
-	if (devindex < 0) {
-		*error_code = errno;
-		return RMNETCTL_KERNEL_ERR;
-	}
-
-	vndindex = if_nametoindex(vndname);
-	if (vndindex < 0) {
-		*error_code = errno;
-		return RMNETCTL_KERNEL_ERR;
-	}
-
-	/* Setup index attribute */
-	req.ifmsg.ifi_index = devindex;
-	masterinfo = (struct rtattr *)(((char *)&req) +
-				       NLMSG_ALIGN(req.nl_addr.nlmsg_len));
-
-	masterinfo->rta_type =  IFLA_MASTER;
-	masterinfo->rta_len = RTA_LENGTH(sizeof(vndindex));
-	memcpy(RTA_DATA(masterinfo), &vndindex, sizeof(vndindex));
-	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
-				RTA_ALIGN(RTA_LENGTH(sizeof(vndindex)));
-
-	if (send(hndl->netlink_fd, &req, req.nl_addr.nlmsg_len, 0) < 0) {
-		*error_code = RMNETCTL_API_ERR_MESSAGE_SEND;
-		return RMNETCTL_LIB_ERR;
-	}
-
-	return rmnet_get_ack(hndl, error_code);
-}