diff --git a/adb/commandline.c b/adb/commandline.c
index 23da2e4..a69f867 100644
--- a/adb/commandline.c
+++ b/adb/commandline.c
@@ -130,11 +130,11 @@
         "                                 that should be included in a bug report.\n"
         "\n"
         "  adb backup [-f <file>] [-apk|-noapk] [-shared|-noshared] [-all] [<packages...>]\n"
-        "                               - Write a tarfile backup of the device's data to <file>.\n"
+        "                               - Write an archive of the device's data to <file>.\n"
         "                                 If a -f option is not supplied then the data is\n"
-        "                                 written to \"backup.tar\" in the current directory.\n"
+        "                                 written to \"backup.ab\" in the current directory.\n"
         "                                 (-apk|-noapk enable/disable backup of the .apks themselves\n"
-        "                                    in the tarfile; the default is noapk.)\n"
+        "                                    in the archive; the default is noapk.)\n"
         "                                 (-shared|-noshared enable/disable backup of the device's\n"
         "                                    shared storage / SD card contents; the default is noshared.)\n"
         "                                 (-all means to back up all installed applications)\n"
@@ -142,7 +142,7 @@
         "                                    the -all or -shared flags are passed, then the package\n"
         "                                    list is optional.)\n"
         "\n"
-        "  adb restore <file>           - restore device contents from the <file> backup tarfile\n"
+        "  adb restore <file>           - restore device contents from the <file> backup archive\n"
         "\n"
         "  adb help                     - show this help message\n"
         "  adb version                  - show version num\n"
@@ -575,7 +575,7 @@
 
 static int backup(int argc, char** argv) {
     char buf[4096];
-    const char* filename = "./backup.tar";
+    const char* filename = "./backup.ab";
     int fd, outFd;
     int i, j;
 
diff --git a/adb/usb_vendors.c b/adb/usb_vendors.c
index 141b32a..e0c6a47 100644
--- a/adb/usb_vendors.c
+++ b/adb/usb_vendors.c
@@ -97,8 +97,10 @@
 #define VENDOR_ID_COMPAL        0x1219
 // T & A Mobile Phones' USB Vendor ID
 #define VENDOR_ID_T_AND_A       0x1BBB
+// LenovoMobile's USB Vendor ID
+#define VENDOR_ID_LENOVOMOBILE        0x2006
 // Lenovo's USB Vendor ID
-#define VENDOR_ID_LENOVO        0x2006
+#define VENDOR_ID_LENOVO        0x17EF
 // Vizio's USB Vendor ID
 #define VENDOR_ID_VIZIO         0xE040
 
@@ -136,6 +138,7 @@
     VENDOR_ID_IRIVER,
     VENDOR_ID_COMPAL,
     VENDOR_ID_T_AND_A,
+    VENDOR_ID_LENOVOMOBILE,
     VENDOR_ID_LENOVO,
     VENDOR_ID_VIZIO,
 };
diff --git a/include/cutils/qtaguid.h b/include/cutils/qtaguid.h
index 8aa34ea..e6d61e6 100644
--- a/include/cutils/qtaguid.h
+++ b/include/cutils/qtaguid.h
@@ -28,7 +28,12 @@
 /*
  * Set tags (and owning UIDs) for network sockets.
 */
-extern int set_qtaguid(int sockfd, int tag, uid_t uid);
+extern int qtaguid_tagSocket(int sockfd, int tag, uid_t uid);
+
+/*
+ * Untag a network socket before closing.
+*/
+extern int qtaguid_untagSocket(int sockfd);
 
 #ifdef __cplusplus
 }
diff --git a/include/system/graphics.h b/include/system/graphics.h
index d39bd4e..729e92c 100644
--- a/include/system/graphics.h
+++ b/include/system/graphics.h
@@ -17,7 +17,23 @@
 #ifndef SYSTEM_CORE_INCLUDE_ANDROID_GRAPHICS_H
 #define SYSTEM_CORE_INCLUDE_ANDROID_GRAPHICS_H
 
-__BEGIN_DECLS
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * If the HAL needs to create service threads to handle graphics related
+ * tasks, these threads need to run at HAL_PRIORITY_URGENT_DISPLAY priority
+ * if they can block the main rendering thread in any way.
+ *
+ * the priority of the current thread can be set with:
+ *
+ *      #include <sys/resource.h>
+ *      setpriority(PRIO_PROCESS, 0, HAL_PRIORITY_URGENT_DISPLAY);
+ *
+ */
+
+#define HAL_PRIORITY_URGENT_DISPLAY     (-8)
 
 /**
  * pixel format definitions
@@ -100,6 +116,8 @@
     HAL_TRANSFORM_ROT_270   = 0x07,
 };
 
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
 
 #endif /* SYSTEM_CORE_INCLUDE_ANDROID_GRAPHICS_H */
diff --git a/libcutils/qtaguid.c b/libcutils/qtaguid.c
index 517e784..218a21f 100644
--- a/libcutils/qtaguid.c
+++ b/libcutils/qtaguid.c
@@ -19,26 +19,49 @@
 
 #include <cutils/qtaguid.h>
 #include <cutils/log.h>
+#include <errno.h>
 #include <fcntl.h>
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
 
-extern int set_qtaguid(int sockfd, int tag, uid_t uid) {
+extern int qtaguid_tagSocket(int sockfd, int tag, uid_t uid) {
     char lineBuf[128];
-    int fd, cnt = 0;
+    int fd, cnt = 0, res = 0;
     uint64_t kTag = (uint64_t)tag << 32;
     snprintf(lineBuf, sizeof(lineBuf), "t %d %llu %d", sockfd, kTag, uid);
 
-    LOGV("Tagging Socket with command %s\n", lineBuf);
-    /* TODO: Enable after the kernel module is fixed.
-       fd = open("/proc/net/xt_qtaguid/ctrl", O_WRONLY);
-       if (fd < 0) {
-           return -1;
-       }
+    LOGI("Tagging socket %d with tag %llx(%d) for uid %d", sockfd, kTag, tag, uid);
+    fd = open("/proc/net/xt_qtaguid/ctrl", O_WRONLY);
+    if (fd < 0) {
+        return -errno;
+    }
 
-       cnt = write(fd, lineBuf, strlen(lineBuf));
-       close(fd);
-    */
-    return (cnt>0?0:-1);
+    cnt = write(fd, lineBuf, strlen(lineBuf));
+    if (cnt < 0) {
+        res = -errno;
+    }
+
+    close(fd);
+    return res;
+}
+
+extern int qtaguid_untagSocket(int sockfd) {
+    char lineBuf[128];
+    int fd, cnt = 0, res = 0;
+    snprintf(lineBuf, sizeof(lineBuf), "u %d", sockfd);
+
+    LOGI("Untagging socket %d", sockfd);
+    fd = open("/proc/net/xt_qtaguid/ctrl", O_WRONLY);
+    if (fd < 0) {
+        return -errno;
+    }
+
+    cnt = write(fd, lineBuf, strlen(lineBuf));
+    if (cnt < 0) {
+        res = -errno;
+    }
+
+    close(fd);
+    return res;
 }
diff --git a/libnetutils/dhcp_utils.c b/libnetutils/dhcp_utils.c
index 5991ea8..3ab5d1b 100644
--- a/libnetutils/dhcp_utils.c
+++ b/libnetutils/dhcp_utils.c
@@ -33,6 +33,8 @@
                                   /* when polling for property values */
 static const char DAEMON_NAME_RENEW[]  = "iprenew";
 static char errmsg[100];
+/* interface suffix on dhcpcd */
+#define MAX_DAEMON_SUFFIX 25
 
 /*
  * Wait for a system property to be assigned a specified value.
@@ -131,6 +133,15 @@
     return inet_ntoa(in_addr);
 }
 
+void get_daemon_suffix(const char *interface, char *daemon_suffix) {
+    /* Use p2p suffix for any p2p interface. */
+    if (strncmp(interface, "p2p",3) == 0) {
+        sprintf(daemon_suffix, "p2p");
+    } else {
+        snprintf(daemon_suffix, MAX_DAEMON_SUFFIX, "%s", interface);
+    }
+}
+
 /*
  * Start the dhcp client daemon, and wait for it to finish
  * configuring the interface.
@@ -150,6 +161,9 @@
     char daemon_cmd[PROPERTY_VALUE_MAX * 2];
     const char *ctrl_prop = "ctl.start";
     const char *desired_status = "running";
+    char daemon_suffix[MAX_DAEMON_SUFFIX];
+
+    get_daemon_suffix(interface, daemon_suffix);
 
     snprintf(result_prop_name, sizeof(result_prop_name), "%s.%s.result",
             DHCP_PROP_NAME_PREFIX,
@@ -157,17 +171,17 @@
 
     snprintf(daemon_prop_name, sizeof(daemon_prop_name), "%s_%s",
             DAEMON_PROP_NAME,
-            interface);
+            daemon_suffix);
 
     /* Erase any previous setting of the dhcp result property */
     property_set(result_prop_name, "");
 
     /* Start the daemon and wait until it's ready */
     if (property_get(HOSTNAME_PROP_NAME, prop_value, NULL) && (prop_value[0] != '\0'))
-        snprintf(daemon_cmd, sizeof(daemon_cmd), "%s_%s:-h %s %s", DAEMON_NAME, interface,
+        snprintf(daemon_cmd, sizeof(daemon_cmd), "%s_%s:-h %s %s", DAEMON_NAME, daemon_suffix,
                  prop_value, interface);
     else
-        snprintf(daemon_cmd, sizeof(daemon_cmd), "%s_%s:%s", DAEMON_NAME, interface, interface);
+        snprintf(daemon_cmd, sizeof(daemon_cmd), "%s_%s:%s", DAEMON_NAME, daemon_suffix, interface);
     memset(prop_value, '\0', PROPERTY_VALUE_MAX);
     property_set(ctrl_prop, daemon_cmd);
     if (wait_for_property(daemon_prop_name, desired_status, 10) < 0) {
@@ -217,15 +231,19 @@
     const char *ctrl_prop = "ctl.stop";
     const char *desired_status = "stopped";
 
+    char daemon_suffix[MAX_DAEMON_SUFFIX];
+
+    get_daemon_suffix(interface, daemon_suffix);
+
     snprintf(result_prop_name, sizeof(result_prop_name), "%s.%s.result",
             DHCP_PROP_NAME_PREFIX,
             interface);
 
     snprintf(daemon_prop_name, sizeof(daemon_prop_name), "%s_%s",
             DAEMON_PROP_NAME,
-            interface);
+            daemon_suffix);
 
-    snprintf(daemon_cmd, sizeof(daemon_cmd), "%s_%s", DAEMON_NAME, interface);
+    snprintf(daemon_cmd, sizeof(daemon_cmd), "%s_%s", DAEMON_NAME, daemon_suffix);
 
     /* Stop the daemon and wait until it's reported to be stopped */
     property_set(ctrl_prop, daemon_cmd);
@@ -246,11 +264,15 @@
     const char *ctrl_prop = "ctl.stop";
     const char *desired_status = "stopped";
 
+    char daemon_suffix[MAX_DAEMON_SUFFIX];
+
+    get_daemon_suffix(interface, daemon_suffix);
+
     snprintf(daemon_prop_name, sizeof(daemon_prop_name), "%s_%s",
             DAEMON_PROP_NAME,
-            interface);
+            daemon_suffix);
 
-    snprintf(daemon_cmd, sizeof(daemon_cmd), "%s_%s", DAEMON_NAME, interface);
+    snprintf(daemon_cmd, sizeof(daemon_cmd), "%s_%s", DAEMON_NAME, daemon_suffix);
 
     /* Stop the daemon and wait until it's reported to be stopped */
     property_set(ctrl_prop, daemon_cmd);
@@ -282,6 +304,10 @@
     char daemon_cmd[PROPERTY_VALUE_MAX * 2];
     const char *ctrl_prop = "ctl.start";
 
+    char daemon_suffix[MAX_DAEMON_SUFFIX];
+
+    get_daemon_suffix(interface, daemon_suffix);
+
     snprintf(result_prop_name, sizeof(result_prop_name), "%s.%s.result",
             DHCP_PROP_NAME_PREFIX,
             interface);
@@ -290,7 +316,8 @@
     property_set(result_prop_name, "");
 
     /* Start the renew daemon and wait until it's ready */
-    snprintf(daemon_cmd, sizeof(daemon_cmd), "%s_%s:%s", DAEMON_NAME_RENEW, interface, interface);
+    snprintf(daemon_cmd, sizeof(daemon_cmd), "%s_%s:%s", DAEMON_NAME_RENEW,
+            daemon_suffix, interface);
     memset(prop_value, '\0', PROPERTY_VALUE_MAX);
     property_set(ctrl_prop, daemon_cmd);
 
diff --git a/libnl_2/Android.mk b/libnl_2/Android.mk
index 800c2b2..1745f5a 100644
--- a/libnl_2/Android.mk
+++ b/libnl_2/Android.mk
@@ -11,10 +11,11 @@
         msg.c \
         netlink.c \
         object.c \
-        socket.c
+        socket.c \
+        dbg.c
 
 LOCAL_C_INCLUDES += \
-        $(LOCAL_PATH)/include
+        external/libnl-headers
 
 # Static Library
 LOCAL_MODULE := libnl_2
diff --git a/libnl_2/README b/libnl_2/README
index 7559fdf..14db6db 100644
--- a/libnl_2/README
+++ b/libnl_2/README
@@ -11,12 +11,16 @@
 |Netlink Message  |P| Generic Netlink   |P|
 |    Header       |A|  Message Header   |A|
 |(struct nlmsghdr)|D|(struct genlmsghdr)|D|
-+-----------------+-+-------------------+-+
++-----------------+-+-------------------+-+-------------+
+|len:4|type:2|flags:2|seq:4 pid:4|cmd:1|ver:1|reserved:2|
++--------------------------------+----------------------+
 +-----------------+-+-----------------+-+-----------------+-+-----------------+-+---+
 |Netlink Attribute|P|Netlink Attribute|P|Netlink Attribute|P|Netlink Attribute|P|...|
 |    #0 Header    |A|   #0 Payload    |A|   #1 Header     |A|   #1 Payload    |A|   |
 | (struct nlattr) |D|     (void)      |D| (struct nlattr) |D|     (void)      |D|   |
 +-----------------+-+-----------------+-+-----------------+-+-----------------+-+---+
+|len:2(==4+payload)|type:2|payload|pad|
++-------------------------+-------+---+
 
 NETLINK OVERVIEW
 
@@ -39,7 +43,7 @@
   * Not tested for thread safety
 
   Android.mk
-  * No static library because of netlink cache not implemented and
+  * No dynamic library because of netlink cache not implemented and
     not tested for thread safety
 
   attr.c
diff --git a/libnl_2/attr.c b/libnl_2/attr.c
index d416350..f3a2b58 100644
--- a/libnl_2/attr.c
+++ b/libnl_2/attr.c
@@ -66,38 +66,30 @@
 	return nla->nla_len - NLA_HDRLEN;
 }
 
+int nla_padlen(int payload)
+{
+	return NLA_ALIGN(payload) - payload;
+}
+
 /* Start a new level of nested attributes. */
 struct nlattr *nla_nest_start(struct nl_msg *msg, int attrtype)
 {
-	if (!nla_put(msg, attrtype, 0, NULL)) {
-		/* Get ref to last (nested start) attr	*/
-		int padding;
-		struct nlattr *nla;
+	struct nlattr *start = (struct nlattr *)nlmsg_tail(msg->nm_nlh);
+	int rc;
 
-		padding = nlmsg_padlen(nlmsg_datalen(nlmsg_hdr(msg)));
-		nla = (struct nlattr *) \
-			((char *) nlmsg_tail(msg->nm_nlh) - padding);
-		return nla;
-
-	} else
+	rc = nla_put(msg, attrtype, 0, NULL);
+	if (rc < 0)
 		return NULL;
 
+	return start;
 }
 
 /* Finalize nesting of attributes. */
 int nla_nest_end(struct nl_msg *msg, struct nlattr *start)
 {
-	struct nlattr *container;
-
-	/* Adjust nested attribute container size */
-	container = (unsigned char *) start - sizeof(struct nlattr);
-	container->nla_len = (unsigned char *) \
-		nlmsg_tail(nlmsg_hdr(msg)) - (unsigned char *)container;
-
-	/* Fix attribute size */
-	start->nla_len = (unsigned char *) \
-		nlmsg_tail(nlmsg_hdr(msg)) - (unsigned char *)start;
-
+	/* Set attribute size */
+	start->nla_len = (unsigned char *)nlmsg_tail(nlmsg_hdr(msg)) -
+				(unsigned char *)start;
 	return 0;
 }
 
@@ -134,14 +126,13 @@
 	int rem;
 
 	/* First clear table */
-	memset(tb, 0, (maxtype+1) * sizeof(struct nlattr *));
+	memset(tb, 0, (maxtype + 1) * sizeof(struct nlattr *));
 
 	nla_for_each_attr(pos, head, len, rem) {
-		const int type = nla_type(pos);
+		int type = nla_type(pos);
 
-		if (type <= maxtype)
+		if ((type <= maxtype) && (type != 0))
 			tb[type] = pos;
-
 	}
 
 	return 0;
@@ -179,15 +170,10 @@
  * nested message may not have a family specific header */
 int nla_put_nested(struct nl_msg *msg, int attrtype, struct nl_msg *nested)
 {
-	int rc = -1;
-	const int NO_HEADER = 0;
+	int rc;
 
-	rc = nla_put(
-		msg,
-		attrtype,
-		nlmsg_attrlen(nlmsg_hdr(nested), NO_HEADER),
-		(const void *) nlmsg_attrdata(nlmsg_hdr(nested), NO_HEADER)
-		);
+	rc = nla_put(msg, attrtype, nlmsg_attrlen(nlmsg_hdr(nested), 0),
+			nlmsg_attrdata(nlmsg_hdr(nested), 0));
 	return rc;
 
 }
@@ -195,43 +181,37 @@
 /* Return type of the attribute. */
 int nla_type(const struct nlattr *nla)
 {
-	return (int) nla->nla_type;
+	return (int)nla->nla_type & NLA_TYPE_MASK;
 }
 
 /* Reserves room for an attribute in specified netlink message and fills
  * in the attribute header (type,length). Return NULL if insufficient space */
-struct nlattr *nla_reserve(struct nl_msg * msg, int attrtype, int data_len)
+struct nlattr *nla_reserve(struct nl_msg *msg, int attrtype, int data_len)
 {
 
 	struct nlattr *nla;
-	const unsigned int NEW_SIZE = \
-		msg->nm_nlh->nlmsg_len + NLA_ALIGN(NLA_HDRLEN + data_len);
+	const unsigned int NEW_SIZE = NLMSG_ALIGN(msg->nm_nlh->nlmsg_len) +
+					NLA_ALIGN(NLA_HDRLEN + data_len);
 
 	/* Check enough space for attribute */
-	if (NEW_SIZE <= msg->nm_size) {
-		const int fam_hdrlen = msg->nm_nlh->nlmsg_len - NLMSG_HDRLEN;
-		msg->nm_nlh->nlmsg_len = NEW_SIZE;
-		nla = nlmsg_attrdata(msg->nm_nlh, fam_hdrlen);
-		nla->nla_type = attrtype;
-		nla->nla_len = NLA_HDRLEN + data_len;
-	} else
-		goto fail;
+	if (NEW_SIZE > msg->nm_size)
+		return NULL;
 
+	nla = (struct nlattr *)nlmsg_tail(msg->nm_nlh);
+	nla->nla_type = attrtype;
+	nla->nla_len = NLA_HDRLEN + data_len;
+	memset((unsigned char *)nla + nla->nla_len, 0, nla_padlen(data_len));
+	msg->nm_nlh->nlmsg_len = NEW_SIZE;
 	return nla;
-fail:
-	return NULL;
-
 }
 
 /* Copy attribute payload to another memory area. */
 int nla_memcpy(void *dest, struct nlattr *src, int count)
 {
-	int rc;
-	void *ret_dest = memcpy(dest, nla_data(src), count);
-	if (!ret_dest)
-		return count;
-	else
+	if (!src || !dest)
 		return 0;
+	if (count > nla_len(src))
+		count = nla_len(src);
+	memcpy(dest, nla_data(src), count);
+	return count;
 }
-
-
diff --git a/libnl_2/dbg.c b/libnl_2/dbg.c
new file mode 100644
index 0000000..9764de6
--- /dev/null
+++ b/libnl_2/dbg.c
@@ -0,0 +1,12 @@
+#include "netlink/netlink.h"
+#include <android/log.h>
+
+void libnl_printf(int level, char *format, ...)
+{
+	va_list ap;
+
+	level = ANDROID_LOG_ERROR;
+	va_start(ap, format);
+	__android_log_vprint(level, "libnl_2", format, ap);
+	va_end(ap);
+}
diff --git a/libnl_2/include/netlink-generic.h b/libnl_2/include/netlink-generic.h
deleted file mode 100644
index 10aa2f0..0000000
--- a/libnl_2/include/netlink-generic.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * netlink-generic.h	Local Generic Netlink Interface
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_GENL_PRIV_H_
-#define NETLINK_GENL_PRIV_H_
-
-#include <netlink-local.h>
-#include <netlink/netlink.h>
-
-#define GENL_HDRSIZE(hdrlen) (GENL_HDRLEN + (hdrlen))
-
-#endif
diff --git a/libnl_2/include/netlink-local.h b/libnl_2/include/netlink-local.h
deleted file mode 100644
index 0d8c9ab..0000000
--- a/libnl_2/include/netlink-local.h
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * netlink-local.h		Local Netlink Interface
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_LOCAL_H_
-#define NETLINK_LOCAL_H_
-
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <math.h>
-#include <time.h>
-#include <stdarg.h>
-#include <ctype.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-#include <inttypes.h>
-#include <assert.h>
-#include <limits.h>
-
-#include <arpa/inet.h>
-#include <netdb.h>
-
-#ifndef SOL_NETLINK
-#define SOL_NETLINK 270
-#endif
-
-#include <linux/types.h>
-
-/* local header copies */
-#include <linux/if.h>
-#include <linux/if_arp.h>
-#include <linux/if_ether.h>
-#include <linux/pkt_sched.h>
-#include <linux/pkt_cls.h>
-#include <linux/gen_stats.h>
-#include <linux/ip_mp_alg.h>
-
-#include <netlink/netlink.h>
-#include <netlink/handlers.h>
-#include <netlink/cache.h>
-#include <netlink/route/tc.h>
-#include <netlink/object-api.h>
-#include <netlink/cache-api.h>
-#include <netlink-types.h>
-
-struct trans_tbl {
-	int i;
-	const char *a;
-};
-
-#define __ADD(id, name) { .i = id, .a = #name },
-
-struct trans_list {
-	int i;
-	char *a;
-	struct nl_list_head list;
-};
-
-#define NL_DEBUG	1
-
-#define NL_DBG(LVL,FMT,ARG...) \
-	do {	\
-		if (LVL <= nl_debug) \
-			fprintf(stderr, "DBG<" #LVL ">: " FMT, ##ARG); \
-	} while (0)
-
-#define BUG()                            \
-	do {                                 \
-		fprintf(stderr, "BUG: %s:%d\n",  \
-			__FILE__, __LINE__);         \
-		assert(0);	\
-	} while (0)
-
-extern int __nl_read_num_str_file(const char *path,
-				  int (*cb)(long, const char *));
-
-extern int __trans_list_add(int, const char *, struct nl_list_head *);
-extern void __trans_list_clear(struct nl_list_head *);
-
-extern char *__type2str(int, char *, size_t, struct trans_tbl *, size_t);
-extern int __str2type(const char *, struct trans_tbl *, size_t);
-
-extern char *__list_type2str(int, char *, size_t, struct nl_list_head *);
-extern int __list_str2type(const char *, struct nl_list_head *);
-
-extern char *__flags2str(int, char *, size_t, struct trans_tbl *, size_t);
-extern int __str2flags(const char *, struct trans_tbl *, size_t);
-
-extern void dump_from_ops(struct nl_object *, struct nl_dump_params *);
-
-static inline struct nl_cache *dp_cache(struct nl_object *obj)
-{
-	if (obj->ce_cache == NULL)
-		return nl_cache_mngt_require(obj->ce_ops->oo_name);
-
-	return obj->ce_cache;
-}
-
-static inline int nl_cb_call(struct nl_cb *cb, int type, struct nl_msg *msg)
-{
-	return cb->cb_set[type](msg, cb->cb_args[type]);
-}
-
-#define ARRAY_SIZE(X) (sizeof(X) / sizeof((X)[0]))
-#ifndef offsetof
-#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-#endif
-
-#define __init __attribute__ ((constructor))
-#define __exit __attribute__ ((destructor))
-#undef __deprecated
-#define __deprecated __attribute__ ((deprecated))
-
-#define min(x,y) ({ \
-	typeof(x) _x = (x);	\
-	typeof(y) _y = (y);	\
-	(void) (&_x == &_y);		\
-	_x < _y ? _x : _y; })
-
-#define max(x,y) ({ \
-	typeof(x) _x = (x);	\
-	typeof(y) _y = (y);	\
-	(void) (&_x == &_y);		\
-	_x > _y ? _x : _y; })
-
-#define min_t(type,x,y) \
-	({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })
-#define max_t(type,x,y) \
-	({ type __x = (x); type __y = (y); __x > __y ? __x: __y; })
-
-extern int nl_cache_parse(struct nl_cache_ops *, struct sockaddr_nl *,
-			  struct nlmsghdr *, struct nl_parser_param *);
-
-
-static inline void rtnl_copy_ratespec(struct rtnl_ratespec *dst,
-				      struct tc_ratespec *src)
-{
-	dst->rs_cell_log = src->cell_log;
-	dst->rs_feature = src->feature;
-	dst->rs_addend = src->addend;
-	dst->rs_mpu = src->mpu;
-	dst->rs_rate = src->rate;
-}
-
-static inline void rtnl_rcopy_ratespec(struct tc_ratespec *dst,
-				       struct rtnl_ratespec *src)
-{
-	dst->cell_log = src->rs_cell_log;
-	dst->feature = src->rs_feature;
-	dst->addend = src->rs_addend;
-	dst->mpu = src->rs_mpu;
-	dst->rate = src->rs_rate;
-}
-
-static inline char *nl_cache_name(struct nl_cache *cache)
-{
-	return cache->c_ops ? cache->c_ops->co_name : "unknown";
-}
-
-#define GENL_FAMILY(id, name) \
-	{ \
-		{ id, NL_ACT_UNSPEC, name }, \
-		END_OF_MSGTYPES_LIST, \
-	}
-
-static inline int wait_for_ack(struct nl_sock *sk)
-{
-	if (sk->s_flags & NL_NO_AUTO_ACK)
-		return 0;
-	else
-		return nl_wait_for_ack(sk);
-}
-
-#endif
diff --git a/libnl_2/include/netlink-types.h b/libnl_2/include/netlink-types.h
deleted file mode 100644
index 92be87c..0000000
--- a/libnl_2/include/netlink-types.h
+++ /dev/null
@@ -1,832 +0,0 @@
-/*
- * netlink-types.h	Netlink Types (Private)
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_LOCAL_TYPES_H_
-#define NETLINK_LOCAL_TYPES_H_
-
-#include <netlink/list.h>
-#include <netlink/route/link.h>
-#include <netlink/route/qdisc.h>
-#include <netlink/route/rtnl.h>
-#include <netlink/route/route.h>
-#include <netlink/object-api.h>
-#include <linux/socket.h>
-#include <linux/pkt_sched.h>
-
-#define NL_SOCK_BUFSIZE_SET	(1<<0)
-#define NL_SOCK_PASSCRED	(1<<1)
-#define NL_OWN_PORT		(1<<2)
-#define NL_MSG_PEEK		(1<<3)
-#define NL_NO_AUTO_ACK		(1<<4)
-
-#define NL_MSG_CRED_PRESENT 1
-
-struct nl_cache_ops;
-struct nl_sock;
-struct nl_object;
-
-struct nl_cb
-{
-	nl_recvmsg_msg_cb_t	cb_set[NL_CB_TYPE_MAX+1];
-	void *			cb_args[NL_CB_TYPE_MAX+1];
-
-	nl_recvmsg_err_cb_t	cb_err;
-	void *			cb_err_arg;
-
-	/** May be used to replace nl_recvmsgs with your own implementation
-	 * in all internal calls to nl_recvmsgs. */
-	int			(*cb_recvmsgs_ow)(struct nl_sock *,
-						  struct nl_cb *);
-
-	/** Overwrite internal calls to nl_recv, must return the number of
-	 * octets read and allocate a buffer for the received data. */
-	int			(*cb_recv_ow)(struct nl_sock *,
-					      struct sockaddr_nl *,
-					      unsigned char **,
-					      struct ucred **);
-
-	/** Overwrites internal calls to nl_send, must send the netlink
-	 * message. */
-	int			(*cb_send_ow)(struct nl_sock *,
-					      struct nl_msg *);
-
-	int			cb_refcnt;
-};
-
-struct nl_sock
-{
-	struct sockaddr_nl	s_local;
-	struct sockaddr_nl	s_peer;
-	int			s_fd;
-	int			s_proto;
-	unsigned int		s_seq_next;
-	unsigned int		s_seq_expect;
-	int			s_flags;
-	struct nl_cb *		s_cb;
-};
-
-struct nl_cache
-{
-	struct nl_list_head	c_items;
-	int			c_nitems;
-	int                     c_iarg1;
-	int                     c_iarg2;
-	struct nl_cache_ops *   c_ops;
-};
-
-struct nl_cache_assoc
-{
-	struct nl_cache *	ca_cache;
-	change_func_t		ca_change;
-	void *			ca_change_data;
-};
-
-struct nl_cache_mngr
-{
-	int			cm_protocol;
-	int			cm_flags;
-	int			cm_nassocs;
-	struct nl_sock *	cm_handle;
-	struct nl_cache_assoc *	cm_assocs;
-};
-
-struct nl_parser_param;
-
-#define LOOSE_COMPARISON	1
-
-#define NL_OBJ_MARK		1
-
-struct nl_object
-{
-	NLHDR_COMMON
-};
-
-struct nl_data
-{
-	size_t			d_size;
-	void *			d_data;
-};
-
-struct nl_addr
-{
-	int			a_family;
-	unsigned int		a_maxsize;
-	unsigned int		a_len;
-	int			a_prefixlen;
-	int			a_refcnt;
-	char			a_addr[0];
-};
-
-struct nl_msg
-{
-	int			nm_protocol;
-	int			nm_flags;
-	struct sockaddr_nl	nm_src;
-	struct sockaddr_nl	nm_dst;
-	struct ucred		nm_creds;
-	struct nlmsghdr *	nm_nlh;
-	size_t			nm_size;
-	int			nm_refcnt;
-};
-
-struct rtnl_link_map
-{
-	uint64_t lm_mem_start;
-	uint64_t lm_mem_end;
-	uint64_t lm_base_addr;
-	uint16_t lm_irq;
-	uint8_t  lm_dma;
-	uint8_t  lm_port;
-};
-
-#define IFQDISCSIZ	32
-
-struct rtnl_link
-{
-	NLHDR_COMMON
-
-	char		l_name[IFNAMSIZ];
-
-	uint32_t	l_family;
-	uint32_t	l_arptype;
-	uint32_t	l_index;
-	uint32_t	l_flags;
-	uint32_t	l_change;
-	uint32_t 	l_mtu;
-	uint32_t	l_link;
-	uint32_t	l_txqlen;
-	uint32_t	l_weight;
-	uint32_t	l_master;
-	struct nl_addr *l_addr;
-	struct nl_addr *l_bcast;
-	char		l_qdisc[IFQDISCSIZ];
-	struct rtnl_link_map l_map;
-	uint64_t	l_stats[RTNL_LINK_STATS_MAX+1];
-	uint32_t	l_flag_mask;
-	uint8_t		l_operstate;
-	uint8_t		l_linkmode;
-	/* 2 byte hole */
-	struct rtnl_link_info_ops *l_info_ops;
-	void *		l_info;
-};
-
-struct rtnl_ncacheinfo
-{
-	uint32_t nci_confirmed;	/**< Time since neighbour validty was last confirmed */
-	uint32_t nci_used;	/**< Time since neighbour entry was last ued */
-	uint32_t nci_updated;	/**< Time since last update */
-	uint32_t nci_refcnt;	/**< Reference counter */
-};
-
-
-struct rtnl_neigh
-{
-	NLHDR_COMMON
-	uint32_t	n_family;
-	uint32_t	n_ifindex;
-	uint16_t	n_state;
-	uint8_t		n_flags;
-	uint8_t		n_type;
-	struct nl_addr *n_lladdr;
-	struct nl_addr *n_dst;
-	uint32_t	n_probes;
-	struct rtnl_ncacheinfo n_cacheinfo;
-	uint32_t                n_state_mask;
-	uint32_t                n_flag_mask;
-};
-
-
-struct rtnl_addr_cacheinfo
-{
-	/* Preferred lifetime in seconds */
-	uint32_t aci_prefered;
-
-	/* Valid lifetime in seconds */
-	uint32_t aci_valid;
-
-	/* Timestamp of creation in 1/100s seince boottime */
-	uint32_t aci_cstamp;
-
-	/* Timestamp of last update in 1/100s since boottime */
-	uint32_t aci_tstamp;
-};
-
-struct rtnl_addr
-{
-	NLHDR_COMMON
-
-	uint8_t		a_family;
-	uint8_t		a_prefixlen;
-	uint8_t		a_flags;
-	uint8_t		a_scope;
-	uint32_t	a_ifindex;
-
-	struct nl_addr *a_peer;
-	struct nl_addr *a_local;
-	struct nl_addr *a_bcast;
-	struct nl_addr *a_anycast;
-	struct nl_addr *a_multicast;
-
-	struct rtnl_addr_cacheinfo a_cacheinfo;
-
-	char a_label[IFNAMSIZ];
-	uint32_t a_flag_mask;
-};
-
-struct rtnl_nexthop
-{
-	uint8_t			rtnh_flags;
-	uint8_t			rtnh_flag_mask;
-	uint8_t			rtnh_weight;
-	/* 1 byte spare */
-	uint32_t		rtnh_ifindex;
-	struct nl_addr *	rtnh_gateway;
-	uint32_t		ce_mask; /* HACK to support attr macros */
-	struct nl_list_head	rtnh_list;
-	uint32_t		rtnh_realms;
-};
-
-struct rtnl_route
-{
-	NLHDR_COMMON
-
-	uint8_t			rt_family;
-	uint8_t			rt_dst_len;
-	uint8_t			rt_src_len;
-	uint8_t			rt_tos;
-	uint8_t			rt_protocol;
-	uint8_t			rt_scope;
-	uint8_t			rt_type;
-	uint8_t			rt_nmetrics;
-	uint32_t		rt_flags;
-	struct nl_addr *	rt_dst;
-	struct nl_addr *	rt_src;
-	uint32_t		rt_table;
-	uint32_t		rt_iif;
-	uint32_t		rt_prio;
-	uint32_t		rt_metrics[RTAX_MAX];
-	uint32_t		rt_metrics_mask;
-	uint32_t		rt_nr_nh;
-	struct nl_addr *	rt_pref_src;
-	struct nl_list_head	rt_nexthops;
-	struct rtnl_rtcacheinfo	rt_cacheinfo;
-	uint32_t		rt_flag_mask;
-};
-
-struct rtnl_rule
-{
-	NLHDR_COMMON
-
-	uint64_t	r_mark;
-	uint32_t	r_prio;
-	uint32_t	r_realms;
-	uint32_t	r_table;
-	uint8_t		r_dsfield;
-	uint8_t		r_type;
-	uint8_t		r_family;
-	uint8_t		r_src_len;
-	uint8_t		r_dst_len;
-	char		r_iif[IFNAMSIZ];
-	struct nl_addr *r_src;
-	struct nl_addr *r_dst;
-	struct nl_addr *r_srcmap;
-};
-
-struct rtnl_neightbl_parms
-{
-	/**
-	 * Interface index of the device this parameter set is assigned
-	 * to or 0 for the default set.
-	 */
-	uint32_t		ntp_ifindex;
-
-	/**
-	 * Number of references to this parameter set.
-	 */
-	uint32_t		ntp_refcnt;
-
-	/**
-	 * Queue length for pending arp requests, i.e. the number of
-	 * packets which are accepted from other layers while the
-	 * neighbour address is still being resolved
-	 */
-	uint32_t		ntp_queue_len;
-
-	/**
-	 * Number of requests to send to the user level ARP daemon.
-	 * Specify 0 to disable.
-	 */
-	uint32_t		ntp_app_probes;
-
-	/**
-	 * Maximum number of retries for unicast solicitation.
-	 */
-	uint32_t		ntp_ucast_probes;
-
-	/**
-	 * Maximum number of retries for multicast solicitation.
-	 */
-	uint32_t		ntp_mcast_probes;
-
-	/**
-	 * Base value in milliseconds to ompute reachable time, see RFC2461.
-	 */
-	uint64_t		ntp_base_reachable_time;
-
-	/**
-	 * Actual reachable time (read-only)
-	 */
-	uint64_t		ntp_reachable_time;	/* secs */
-
-	/**
-	 * The time in milliseconds between retransmitted Neighbor
-	 * Solicitation messages.
-	 */
-	uint64_t		ntp_retrans_time;
-
-	/**
-	 * Interval in milliseconds to check for stale neighbour
-	 * entries.
-	 */
-	uint64_t		ntp_gc_stale_time;	/* secs */
-
-	/**
-	 * Delay in milliseconds for the first time probe if
-	 * the neighbour is reachable.
-	 */
-	uint64_t		ntp_probe_delay;	/* secs */
-
-	/**
-	 * Maximum delay in milliseconds of an answer to a neighbour
-	 * solicitation message.
-	 */
-	uint64_t		ntp_anycast_delay;
-
-	/**
-	 * Minimum age in milliseconds before a neighbour entry
-	 * may be replaced.
-	 */
-	uint64_t		ntp_locktime;
-
-	/**
-	 * Delay in milliseconds before answering to an ARP request
-	 * for which a proxy ARP entry exists.
-	 */
-	uint64_t		ntp_proxy_delay;
-
-	/**
-	 * Queue length for the delayed proxy arp requests.
-	 */
-	uint32_t		ntp_proxy_qlen;
-
-	/**
-	 * Mask of available parameter attributes
-	 */
-	uint32_t		ntp_mask;
-};
-
-#define NTBLNAMSIZ	32
-
-/**
- * Neighbour table
- * @ingroup neightbl
- */
-struct rtnl_neightbl
-{
-	NLHDR_COMMON
-
-	char			nt_name[NTBLNAMSIZ];
-	uint32_t		nt_family;
-	uint32_t		nt_gc_thresh1;
-	uint32_t		nt_gc_thresh2;
-	uint32_t		nt_gc_thresh3;
-	uint64_t		nt_gc_interval;
-	struct ndt_config	nt_config;
-	struct rtnl_neightbl_parms nt_parms;
-	struct ndt_stats	nt_stats;
-};
-
-struct rtnl_ratespec
-{
-	uint8_t			rs_cell_log;
-	uint16_t		rs_feature;
-	uint16_t		rs_addend;
-	uint16_t		rs_mpu;
-	uint32_t		rs_rate;
-};
-
-struct rtnl_tstats
-{
-	struct {
-		uint64_t            bytes;
-		uint64_t            packets;
-	} tcs_basic;
-
-	struct {
-		uint32_t            bps;
-		uint32_t            pps;
-	} tcs_rate_est;
-
-	struct {
-		uint32_t            qlen;
-		uint32_t            backlog;
-		uint32_t            drops;
-		uint32_t            requeues;
-		uint32_t            overlimits;
-	} tcs_queue;
-};
-
-#define TCKINDSIZ	32
-
-#define NL_TCA_GENERIC(pre)				\
-	NLHDR_COMMON					\
-	uint32_t		pre ##_family;		\
-	uint32_t		pre ##_ifindex;		\
-	uint32_t		pre ##_handle;		\
-	uint32_t		pre ##_parent;		\
-	uint32_t		pre ##_info;		\
-	char			pre ##_kind[TCKINDSIZ];	\
-	struct nl_data *	pre ##_opts;		\
-	uint64_t		pre ##_stats[RTNL_TC_STATS_MAX+1]; \
-	struct nl_data *	pre ##_xstats;		\
-	struct nl_data *	pre ##_subdata;		\
-
-
-struct rtnl_tca
-{
-	NL_TCA_GENERIC(tc);
-};
-
-struct rtnl_qdisc
-{
-	NL_TCA_GENERIC(q);
-	struct rtnl_qdisc_ops	*q_ops;
-};
-
-struct rtnl_class
-{
-	NL_TCA_GENERIC(c);
-	struct rtnl_class_ops	*c_ops;
-};
-
-struct rtnl_cls
-{
-	NL_TCA_GENERIC(c);
-	uint16_t		c_prio;
-	uint16_t		c_protocol;
-	struct rtnl_cls_ops	*c_ops;
-};
-
-struct rtnl_u32
-{
-	uint32_t		cu_divisor;
-	uint32_t		cu_hash;
-	uint32_t		cu_classid;
-	uint32_t		cu_link;
-	struct nl_data *	cu_pcnt;
-	struct nl_data *	cu_selector;
-	struct nl_data *	cu_act;
-	struct nl_data *	cu_police;
-	char			cu_indev[IFNAMSIZ];
-	int			cu_mask;
-};
-
-struct rtnl_cgroup
-{
-	struct rtnl_ematch_tree *cg_ematch;
-	int			cg_mask;
-};
-
-struct rtnl_fw
-{
-	uint32_t		cf_classid;
-	struct nl_data *	cf_act;
-	struct nl_data *	cf_police;
-	char			cf_indev[IFNAMSIZ];
-	int			cf_mask;
-};
-
-struct rtnl_ematch
-{
-	uint16_t		e_id;
-	uint16_t		e_kind;
-	uint16_t		e_flags;
-
-	struct nl_list_head	e_childs;
-	struct nl_list_head	e_list;
-	struct rtnl_ematch_ops *e_ops;
-
-	char			e_data[0];
-};
-
-struct rtnl_ematch_tree
-{
-	uint16_t		et_progid;
-	struct nl_list_head	et_list;
-
-};
-
-struct rtnl_dsmark_qdisc
-{
-	uint16_t	qdm_indices;
-	uint16_t	qdm_default_index;
-	uint32_t	qdm_set_tc_index;
-	uint32_t	qdm_mask;
-};
-
-struct rtnl_dsmark_class
-{
-	uint8_t		cdm_bmask;
-	uint8_t		cdm_value;
-	uint32_t	cdm_mask;
-};
-
-struct rtnl_fifo
-{
-	uint32_t	qf_limit;
-	uint32_t	qf_mask;
-};
-
-struct rtnl_prio
-{
-	uint32_t	qp_bands;
-	uint8_t		qp_priomap[TC_PRIO_MAX+1];
-	uint32_t	qp_mask;
-};
-
-struct rtnl_tbf
-{
-	uint32_t		qt_limit;
-	uint32_t		qt_mpu;
-	struct rtnl_ratespec	qt_rate;
-	uint32_t		qt_rate_bucket;
-	uint32_t		qt_rate_txtime;
-	struct rtnl_ratespec	qt_peakrate;
-	uint32_t		qt_peakrate_bucket;
-	uint32_t		qt_peakrate_txtime;
-	uint32_t		qt_mask;
-};
-
-struct rtnl_sfq
-{
-	uint32_t	qs_quantum;
-	uint32_t	qs_perturb;
-	uint32_t	qs_limit;
-	uint32_t	qs_divisor;
-	uint32_t	qs_flows;
-	uint32_t	qs_mask;
-};
-
-struct rtnl_netem_corr
-{
-	uint32_t	nmc_delay;
-	uint32_t	nmc_loss;
-	uint32_t	nmc_duplicate;
-};
-
-struct rtnl_netem_reo
-{
-	uint32_t	nmro_probability;
-	uint32_t	nmro_correlation;
-};
-
-struct rtnl_netem_crpt
-{
-	uint32_t	nmcr_probability;
-	uint32_t	nmcr_correlation;
-};
-
-struct rtnl_netem_dist
-{
-	int16_t	*	dist_data;
-	size_t		dist_size;
-};
-
-struct rtnl_netem
-{
-	uint32_t		qnm_latency;
-	uint32_t		qnm_limit;
-	uint32_t		qnm_loss;
-	uint32_t		qnm_gap;
-	uint32_t		qnm_duplicate;
-	uint32_t		qnm_jitter;
-	uint32_t		qnm_mask;
-	struct rtnl_netem_corr	qnm_corr;
-	struct rtnl_netem_reo	qnm_ro;
-	struct rtnl_netem_crpt	qnm_crpt;
-	struct rtnl_netem_dist  qnm_dist;
-};
-
-struct rtnl_htb_qdisc
-{
-	uint32_t		qh_rate2quantum;
-	uint32_t		qh_defcls;
-	uint32_t		qh_mask;
-};
-
-struct rtnl_htb_class
-{
-	uint32_t		ch_prio;
-	uint32_t		ch_mtu;
-	struct rtnl_ratespec	ch_rate;
-	struct rtnl_ratespec	ch_ceil;
-	uint32_t		ch_rbuffer;
-	uint32_t		ch_cbuffer;
-	uint32_t		ch_quantum;
-	uint8_t			ch_overhead;
-	uint8_t			ch_mpu;
-	uint32_t		ch_mask;
-};
-
-struct rtnl_cbq
-{
-	struct tc_cbq_lssopt    cbq_lss;
-	struct tc_ratespec      cbq_rate;
-	struct tc_cbq_wrropt    cbq_wrr;
-	struct tc_cbq_ovl       cbq_ovl;
-	struct tc_cbq_fopt      cbq_fopt;
-	struct tc_cbq_police    cbq_police;
-};
-
-struct rtnl_red
-{
-	uint32_t	qr_limit;
-	uint32_t	qr_qth_min;
-	uint32_t	qr_qth_max;
-	uint8_t		qr_flags;
-	uint8_t		qr_wlog;
-	uint8_t		qr_plog;
-	uint8_t		qr_scell_log;
-	uint32_t	qr_mask;
-};
-
-struct flnl_request
-{
-	NLHDR_COMMON
-
-	struct nl_addr *	lr_addr;
-	uint32_t		lr_fwmark;
-	uint8_t			lr_tos;
-	uint8_t			lr_scope;
-	uint8_t			lr_table;
-};
-
-
-struct flnl_result
-{
-	NLHDR_COMMON
-
-	struct flnl_request *	fr_req;
-	uint8_t			fr_table_id;
-	uint8_t			fr_prefixlen;
-	uint8_t			fr_nh_sel;
-	uint8_t			fr_type;
-	uint8_t			fr_scope;
-	uint32_t		fr_error;
-};
-
-#define GENL_OP_HAS_POLICY	1
-#define GENL_OP_HAS_DOIT	2
-#define GENL_OP_HAS_DUMPIT	4
-
-struct genl_family_op
-{
-	uint32_t		o_id;
-	uint32_t		o_flags;
-
-	struct nl_list_head	o_list;
-};
-
-struct genl_family
-{
-	NLHDR_COMMON
-
-	uint16_t		gf_id;
-	char 			gf_name[GENL_NAMSIZ];
-	uint32_t		gf_version;
-	uint32_t		gf_hdrsize;
-	uint32_t		gf_maxattr;
-
-	struct nl_list_head	gf_ops;
-};
-
-union nfnl_ct_proto
-{
-	struct {
-		uint16_t	src;
-		uint16_t	dst;
-	} port;
-	struct {
-		uint16_t	id;
-		uint8_t		type;
-		uint8_t		code;
-	} icmp;
-};
-
-struct nfnl_ct_dir {
-	struct nl_addr *	src;
-	struct nl_addr *	dst;
-	union nfnl_ct_proto	proto;
-	uint64_t		packets;
-	uint64_t		bytes;
-};
-
-union nfnl_ct_protoinfo {
-	struct {
-		uint8_t		state;
-	} tcp;
-};
-
-struct nfnl_ct {
-	NLHDR_COMMON
-
-	uint8_t			ct_family;
-	uint8_t			ct_proto;
-	union nfnl_ct_protoinfo	ct_protoinfo;
-
-	uint32_t		ct_status;
-	uint32_t		ct_status_mask;
-	uint32_t		ct_timeout;
-	uint32_t		ct_mark;
-	uint32_t		ct_use;
-	uint32_t		ct_id;
-
-	struct nfnl_ct_dir	ct_orig;
-	struct nfnl_ct_dir	ct_repl;
-};
-
-struct nfnl_log {
-	NLHDR_COMMON
-
-	uint16_t		log_group;
-	uint8_t			log_copy_mode;
-	uint32_t		log_copy_range;
-	uint32_t		log_flush_timeout;
-	uint32_t		log_alloc_size;
-	uint32_t		log_queue_threshold;
-	uint32_t		log_flags;
-	uint32_t		log_flag_mask;
-};
-
-struct nfnl_log_msg {
-	NLHDR_COMMON
-
-	uint8_t			log_msg_family;
-	uint8_t			log_msg_hook;
-	uint16_t		log_msg_hwproto;
-	uint32_t		log_msg_mark;
-	struct timeval		log_msg_timestamp;
-	uint32_t		log_msg_indev;
-	uint32_t		log_msg_outdev;
-	uint32_t		log_msg_physindev;
-	uint32_t		log_msg_physoutdev;
-	uint8_t			log_msg_hwaddr[8];
-	int			log_msg_hwaddr_len;
-	void *			log_msg_payload;
-	int			log_msg_payload_len;
-	char *			log_msg_prefix;
-	uint32_t		log_msg_uid;
-	uint32_t		log_msg_gid;
-	uint32_t		log_msg_seq;
-	uint32_t		log_msg_seq_global;
-};
-
-struct nfnl_queue {
-	NLHDR_COMMON
-
-	uint16_t		queue_group;
-	uint32_t		queue_maxlen;
-	uint32_t		queue_copy_range;
-	uint8_t			queue_copy_mode;
-};
-
-struct nfnl_queue_msg {
-	NLHDR_COMMON
-
-	uint16_t		queue_msg_group;
-	uint8_t			queue_msg_family;
-	uint8_t			queue_msg_hook;
-	uint16_t		queue_msg_hwproto;
-	uint32_t		queue_msg_packetid;
-	uint32_t		queue_msg_mark;
-	struct timeval		queue_msg_timestamp;
-	uint32_t		queue_msg_indev;
-	uint32_t		queue_msg_outdev;
-	uint32_t		queue_msg_physindev;
-	uint32_t		queue_msg_physoutdev;
-	uint8_t			queue_msg_hwaddr[8];
-	int			queue_msg_hwaddr_len;
-	void *			queue_msg_payload;
-	int			queue_msg_payload_len;
-	uint32_t		queue_msg_verdict;
-};
-
-#endif
diff --git a/libnl_2/include/netlink/addr.h b/libnl_2/include/netlink/addr.h
deleted file mode 100644
index cc3d201..0000000
--- a/libnl_2/include/netlink/addr.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * netlink/addr.h		Abstract Address
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_ADDR_H_
-#define NETLINK_ADDR_H_
-
-#include <netlink/netlink.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nl_addr;
-
-/* Creation */
-extern struct nl_addr *	nl_addr_alloc(size_t);
-extern struct nl_addr *	nl_addr_alloc_attr(struct nlattr *, int);
-extern struct nl_addr *	nl_addr_build(int, void *, size_t);
-extern int		nl_addr_parse(const char *, int, struct nl_addr **);
-extern struct nl_addr *	nl_addr_clone(struct nl_addr *);
-
-/* Destroyage */
-extern void		nl_addr_destroy(struct nl_addr *);
-
-/* Usage Management */
-extern struct nl_addr *	nl_addr_get(struct nl_addr *);
-extern void		nl_addr_put(struct nl_addr *);
-extern int		nl_addr_shared(struct nl_addr *);
-
-extern int		nl_addr_cmp(struct nl_addr *, struct nl_addr *);
-extern int		nl_addr_cmp_prefix(struct nl_addr *, struct nl_addr *);
-extern int		nl_addr_iszero(struct nl_addr *);
-extern int		nl_addr_valid(char *, int);
-extern int      	nl_addr_guess_family(struct nl_addr *);
-extern int		nl_addr_fill_sockaddr(struct nl_addr *,
-					      struct sockaddr *, socklen_t *);
-extern int		nl_addr_info(struct nl_addr *, struct addrinfo **);
-extern int		nl_addr_resolve(struct nl_addr *addr, char *host, size_t hostlen);
-
-/* Access Functions */
-extern void		nl_addr_set_family(struct nl_addr *, int);
-extern int		nl_addr_get_family(struct nl_addr *);
-extern int		nl_addr_set_binary_addr(struct nl_addr *, void *,
-						size_t);
-extern void *		nl_addr_get_binary_addr(struct nl_addr *);
-extern unsigned int	nl_addr_get_len(struct nl_addr *);
-extern void		nl_addr_set_prefixlen(struct nl_addr *, int);
-extern unsigned int	nl_addr_get_prefixlen(struct nl_addr *);
-
-/* Address Family Translations */
-extern char *		nl_af2str(int, char *, size_t);
-extern int		nl_str2af(const char *);
-
-/* Translations to Strings */
-extern char *		nl_addr2str(struct nl_addr *, char *, size_t);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/attr.h b/libnl_2/include/netlink/attr.h
deleted file mode 100644
index 8479c23..0000000
--- a/libnl_2/include/netlink/attr.h
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * netlink/attr.h		Netlink Attributes
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_ATTR_H_
-#define NETLINK_ATTR_H_
-
-#include <netlink/netlink.h>
-#include <netlink/object.h>
-#include <netlink/addr.h>
-#include <netlink/data.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nl_msg;
-
-/**
- * @name Basic Attribute Data Types
- * @{
- */
-
- /**
-  * @ingroup attr
-  * Basic attribute data types
-  *
-  * See \ref attr_datatypes for more details.
-  */
-enum {
-	NLA_UNSPEC,	/**< Unspecified type, binary data chunk */
-	NLA_U8,		/**< 8 bit integer */
-	NLA_U16,	/**< 16 bit integer */
-	NLA_U32,	/**< 32 bit integer */
-	NLA_U64,	/**< 64 bit integer */
-	NLA_STRING,	/**< NUL terminated character string */
-	NLA_FLAG,	/**< Flag */
-	NLA_MSECS,	/**< Micro seconds (64bit) */
-	NLA_NESTED,	/**< Nested attributes */
-	__NLA_TYPE_MAX,
-};
-
-#define NLA_TYPE_MAX (__NLA_TYPE_MAX - 1)
-
-/** @} */
-
-/**
- * @ingroup attr
- * Attribute validation policy.
- *
- * See \ref attr_datatypes for more details.
- */
-struct nla_policy {
-	/** Type of attribute or NLA_UNSPEC */
-	uint16_t	type;
-
-	/** Minimal length of payload required */
-	uint16_t	minlen;
-
-	/** Maximal length of payload allowed */
-	uint16_t	maxlen;
-};
-
-/* Size calculations */
-extern int		nla_attr_size(int payload);
-extern int		nla_total_size(int payload);
-extern int		nla_padlen(int payload);
-
-/* Attribute parsing */
-extern int		nla_type(const struct nlattr *);
-extern void *		nla_data(const struct nlattr *);
-extern int		nla_len(const struct nlattr *);
-extern int		nla_ok(const struct nlattr *, int);
-extern struct nlattr *	nla_next(const struct nlattr *, int *);
-extern int		nla_parse(struct nlattr **, int, struct nlattr *,
-				  int, struct nla_policy *);
-extern int		nla_validate(struct nlattr *, int, int,
-				     struct nla_policy *);
-extern struct nlattr *	nla_find(struct nlattr *, int, int);
-
-/* Helper Functions */
-extern int		nla_memcpy(void *, struct nlattr *, int);
-extern size_t		nla_strlcpy(char *, const struct nlattr *, size_t);
-extern int		nla_memcmp(const struct nlattr *, const void *, size_t);
-extern int		nla_strcmp(const struct nlattr *, const char *);
-
-/* Unspecific attribute */
-extern struct nlattr *	nla_reserve(struct nl_msg *, int, int);
-extern int		nla_put(struct nl_msg *, int, int, const void *);
-extern int		nla_put_data(struct nl_msg *, int, struct nl_data *);
-extern int		nla_put_addr(struct nl_msg *, int, struct nl_addr *);
-
-/* Integer attribute */
-extern uint8_t		nla_get_u8(struct nlattr *);
-extern int		nla_put_u8(struct nl_msg *, int, uint8_t);
-extern uint16_t		nla_get_u16(struct nlattr *);
-extern int		nla_put_u16(struct nl_msg *, int, uint16_t);
-extern uint32_t		nla_get_u32(struct nlattr *);
-extern int		nla_put_u32(struct nl_msg *, int, uint32_t);
-extern uint64_t		nla_get_u64(struct nlattr *);
-extern int		nla_put_u64(struct nl_msg *, int, uint64_t);
-
-/* String attribute */
-extern char *		nla_get_string(struct nlattr *);
-extern char *		nla_strdup(struct nlattr *);
-extern int		nla_put_string(struct nl_msg *, int, const char *);
-
-/* Flag attribute */
-extern int		nla_get_flag(struct nlattr *);
-extern int		nla_put_flag(struct nl_msg *, int);
-
-/* Msec attribute */
-extern unsigned long	nla_get_msecs(struct nlattr *);
-extern int		nla_put_msecs(struct nl_msg *, int, unsigned long);
-
-/* Attribute nesting */
-extern int		nla_put_nested(struct nl_msg *, int, struct nl_msg *);
-extern struct nlattr *	nla_nest_start(struct nl_msg *, int);
-extern int		nla_nest_end(struct nl_msg *, struct nlattr *);
-extern int		nla_parse_nested(struct nlattr **, int, struct nlattr *,
-					 struct nla_policy *);
-
-/**
- * @name Attribute Construction (Exception Based)
- * @{
- */
-
-/**
- * @ingroup attr
- * Add unspecific attribute to netlink message.
- * @arg msg		Netlink message.
- * @arg attrtype	Attribute type.
- * @arg attrlen		Length of attribute payload.
- * @arg data		Head of attribute payload.
- */
-#define NLA_PUT(msg, attrtype, attrlen, data) \
-	do { \
-		if (nla_put(msg, attrtype, attrlen, data) < 0) \
-			goto nla_put_failure; \
-	} while(0)
-
-/**
- * @ingroup attr
- * Add atomic type attribute to netlink message.
- * @arg msg		Netlink message.
- * @arg type		Atomic type.
- * @arg attrtype	Attribute type.
- * @arg value		Head of attribute payload.
- */
-#define NLA_PUT_TYPE(msg, type, attrtype, value) \
-	do { \
-		type __tmp = value; \
-		NLA_PUT(msg, attrtype, sizeof(type), &__tmp); \
-	} while(0)
-
-/**
- * Add 8 bit integer attribute to netlink message.
- * @arg msg		Netlink message.
- * @arg attrtype	Attribute type.
- * @arg value		Numeric value.
- */
-#define NLA_PUT_U8(msg, attrtype, value) \
-	NLA_PUT_TYPE(msg, uint8_t, attrtype, value)
-
-/**
- * Add 16 bit integer attribute to netlink message.
- * @arg msg		Netlink message.
- * @arg attrtype	Attribute type.
- * @arg value		Numeric value.
- */
-#define NLA_PUT_U16(msg, attrtype, value) \
-	NLA_PUT_TYPE(msg, uint16_t, attrtype, value)
-
-/**
- * Add 32 bit integer attribute to netlink message.
- * @arg msg		Netlink message.
- * @arg attrtype	Attribute type.
- * @arg value		Numeric value.
- */
-#define NLA_PUT_U32(msg, attrtype, value) \
-	NLA_PUT_TYPE(msg, uint32_t, attrtype, value)
-
-/**
- * Add 64 bit integer attribute to netlink message.
- * @arg msg		Netlink message.
- * @arg attrtype	Attribute type.
- * @arg value		Numeric value.
- */
-#define NLA_PUT_U64(msg, attrtype, value) \
-	NLA_PUT_TYPE(msg, uint64_t, attrtype, value)
-
-/**
- * Add string attribute to netlink message.
- * @arg msg		Netlink message.
- * @arg attrtype	Attribute type.
- * @arg value		NUL terminated character string.
- */
-#define NLA_PUT_STRING(msg, attrtype, value) \
-	NLA_PUT(msg, attrtype, strlen(value) + 1, value)
-
-/**
- * Add flag attribute to netlink message.
- * @arg msg		Netlink message.
- * @arg attrtype	Attribute type.
- */
-#define NLA_PUT_FLAG(msg, attrtype) \
-	NLA_PUT(msg, attrtype, 0, NULL)
-
-/**
- * Add msecs attribute to netlink message.
- * @arg msg		Netlink message.
- * @arg attrtype	Attribute type.
- * @arg msecs		Numeric value in micro seconds.
- */
-#define NLA_PUT_MSECS(msg, attrtype, msecs) \
-	NLA_PUT_U64(msg, attrtype, msecs)
-
-/**
- * Add address attribute to netlink message.
- * @arg msg		Netlink message.
- * @arg attrtype	Attribute type.
- * @arg addr		Abstract address object.
- */
-#define NLA_PUT_ADDR(msg, attrtype, addr) \
-	NLA_PUT(msg, attrtype, nl_addr_get_len(addr), \
-		nl_addr_get_binary_addr(addr))
-
-/**
- * Add abstract data attribute to netlink message.
- * @arg msg		Netlink message.
- * @arg attrtype	Attribute type.
- * @arg data		Abstract data object.
- */
-#define NLA_PUT_DATA(msg, attrtype, data) \
-	NLA_PUT(msg, attrtype, nl_data_get_size(data), \
-		nl_data_get(data))
-
-/** @} */
-
-/**
- * @name Iterators
- * @{
- */
-
-/**
- * @ingroup attr
- * Iterate over a stream of attributes
- * @arg pos	loop counter, set to current attribute
- * @arg head	head of attribute stream
- * @arg len	length of attribute stream
- * @arg rem	initialized to len, holds bytes currently remaining in stream
- */
-#define nla_for_each_attr(pos, head, len, rem) \
-	for (pos = head, rem = len; \
-	     nla_ok(pos, rem); \
-	     pos = nla_next(pos, &(rem)))
-
-/**
- * @ingroup attr
- * Iterate over a stream of nested attributes
- * @arg pos	loop counter, set to current attribute
- * @arg nla	attribute containing the nested attributes
- * @arg rem	initialized to len, holds bytes currently remaining in stream
- */
-#define nla_for_each_nested(pos, nla, rem) \
-	for (pos = nla_data(nla), rem = nla_len(nla); \
-	     nla_ok(pos, rem); \
-	     pos = nla_next(pos, &(rem)))
-
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/cache-api.h b/libnl_2/include/netlink/cache-api.h
deleted file mode 100644
index 22fc449..0000000
--- a/libnl_2/include/netlink/cache-api.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * netlink/cache-api.h		Caching API
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_CACHE_API_H_
-#define NETLINK_CACHE_API_H_
-
-#include <netlink/netlink.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @ingroup cache
- * @defgroup cache_api Cache Implementation
- * @brief
- *
- * @par 1) Cache Definition
- * @code
- * struct nl_cache_ops my_cache_ops = {
- * 	.co_name		= "route/link",
- * 	.co_protocol		= NETLINK_ROUTE,
- * 	.co_hdrsize		= sizeof(struct ifinfomsg),
- * 	.co_obj_ops		= &my_obj_ops,
- * };
- * @endcode
- *
- * @par 2) 
- * @code
- * // The simplest way to fill a cache is by providing a request-update
- * // function which must trigger a complete dump on the kernel-side of
- * // whatever the cache covers.
- * static int my_request_update(struct nl_cache *cache,
- * 				struct nl_sock *socket)
- * {
- * 	// In this example, we request a full dump of the interface table
- * 	return nl_rtgen_request(socket, RTM_GETLINK, AF_UNSPEC, NLM_F_DUMP);
- * }
- *
- * // The resulting netlink messages sent back will be fed into a message
- * // parser one at a time. The message parser has to extract all relevant
- * // information from the message and create an object reflecting the
- * // contents of the message and pass it on to the parser callback function
- * // provide which will add the object to the cache.
- * static int my_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who,
- * 			    struct nlmsghdr *nlh, struct nl_parser_param *pp)
- * {
- * 	struct my_obj *obj;
- *
- * 	obj = my_obj_alloc();
- * 	obj->ce_msgtype = nlh->nlmsg_type;
- *
- * 	// Parse the netlink message and continue creating the object.
- *
- * 	err = pp->pp_cb((struct nl_object *) obj, pp);
- * 	if (err < 0)
- * 		goto errout;
- * }
- *
- * struct nl_cache_ops my_cache_ops = {
- * 	...
- * 	.co_request_update	= my_request_update,
- * 	.co_msg_parser		= my_msg_parser,
- * };
- * @endcode
- *
- * @par 3) Notification based Updates
- * @code
- * // Caches can be kept up-to-date based on notifications if the kernel
- * // sends out notifications whenever an object is added/removed/changed.
- * //
- * // It is trivial to support this, first a list of groups needs to be
- * // defined which are required to join in order to receive all necessary
- * // notifications. The groups are separated by address family to support
- * // the common situation where a separate group is used for each address
- * // family. If there is only one group, simply specify AF_UNSPEC.
- * static struct nl_af_group addr_groups[] = {
- * 	{ AF_INET,	RTNLGRP_IPV4_IFADDR },
- * 	{ AF_INET6,	RTNLGRP_IPV6_IFADDR },
- * 	{ END_OF_GROUP_LIST },
- * };
- *
- * // In order for the caching system to know the meaning of each message
- * // type it requires a table which maps each supported message type to
- * // a cache action, e.g. RTM_NEWADDR means address has been added or
- * // updated, RTM_DELADDR means address has been removed.
- * static struct nl_cache_ops rtnl_addr_ops = {
- * 	...
- * 	.co_msgtypes		= {
- * 					{ RTM_NEWADDR, NL_ACT_NEW, "new" },
- * 					{ RTM_DELADDR, NL_ACT_DEL, "del" },
- * 					{ RTM_GETADDR, NL_ACT_GET, "get" },
- * 					END_OF_MSGTYPES_LIST,
- * 				},
- * 	.co_groups		= addr_groups,
- * };
- *
- * // It is now possible to keep the cache up-to-date using the cache manager.
- * @endcode
- * @{
- */
-
-enum {
-	NL_ACT_UNSPEC,
-	NL_ACT_NEW,
-	NL_ACT_DEL,
-	NL_ACT_GET,
-	NL_ACT_SET,
-	NL_ACT_CHANGE,
-	__NL_ACT_MAX,
-};
-
-#define NL_ACT_MAX (__NL_ACT_MAX - 1)
-
-#define END_OF_MSGTYPES_LIST	{ -1, -1, NULL }
-
-/**
- * Message type to cache action association
- */
-struct nl_msgtype
-{
-	/** Netlink message type */
-	int			mt_id;
-
-	/** Cache action to take */
-	int			mt_act;
-
-	/** Name of operation for human-readable printing */
-	char *			mt_name;
-};
-
-/**
- * Address family to netlink group association
- */
-struct nl_af_group
-{
-	/** Address family */
-	int			ag_family;
-
-	/** Netlink group identifier */
-	int			ag_group;
-};
-
-#define END_OF_GROUP_LIST AF_UNSPEC, 0
-
-struct nl_parser_param
-{
-	int             (*pp_cb)(struct nl_object *, struct nl_parser_param *);
-	void *            pp_arg;
-};
-
-/**
- * Cache Operations
- */
-struct nl_cache_ops
-{
-	char  *			co_name;
-
-	int			co_hdrsize;
-	int			co_protocol;
-	struct nl_af_group *	co_groups;
-	
-	/**
-	 * Called whenever an update of the cache is required. Must send
-	 * a request message to the kernel requesting a complete dump.
-	 */
-	int   (*co_request_update)(struct nl_cache *, struct nl_sock *);
-
-	/**
-	 * Called whenever a message was received that needs to be parsed.
-	 * Must parse the message and call the paser callback function
-	 * (nl_parser_param) provided via the argument.
-	 */
-	int   (*co_msg_parser)(struct nl_cache_ops *, struct sockaddr_nl *,
-			       struct nlmsghdr *, struct nl_parser_param *);
-
-	struct nl_object_ops *	co_obj_ops;
-
-	struct nl_cache_ops *co_next;
-	struct nl_cache *co_major_cache;
-	struct genl_ops *	co_genl;
-	struct nl_msgtype	co_msgtypes[];
-};
-
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/cache.h b/libnl_2/include/netlink/cache.h
deleted file mode 100644
index c752920..0000000
--- a/libnl_2/include/netlink/cache.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * netlink/cache.h		Caching Module
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_CACHE_H_
-#define NETLINK_CACHE_H_
-
-#include <netlink/netlink.h>
-#include <netlink/msg.h>
-#include <netlink/utils.h>
-#include <netlink/object.h>
-#include <netlink/cache-api.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nl_cache;
-
-typedef void (*change_func_t)(struct nl_cache *, struct nl_object *, int, void *);
-
-/* Access Functions */
-extern int			nl_cache_nitems(struct nl_cache *);
-extern int			nl_cache_nitems_filter(struct nl_cache *,
-						       struct nl_object *);
-extern struct nl_cache_ops *	nl_cache_get_ops(struct nl_cache *);
-extern struct nl_object *	nl_cache_get_first(struct nl_cache *);
-extern struct nl_object *	nl_cache_get_last(struct nl_cache *);
-extern struct nl_object *	nl_cache_get_next(struct nl_object *);
-extern struct nl_object *	nl_cache_get_prev(struct nl_object *);
-
-extern struct nl_cache *	nl_cache_alloc(struct nl_cache_ops *);
-extern int			nl_cache_alloc_and_fill(struct nl_cache_ops *,
-							struct nl_sock *,
-							struct nl_cache **);
-extern int			nl_cache_alloc_name(const char *,
-						    struct nl_cache **);
-extern struct nl_cache *	nl_cache_subset(struct nl_cache *,
-						struct nl_object *);
-extern void			nl_cache_clear(struct nl_cache *);
-extern void			nl_cache_free(struct nl_cache *);
-
-/* Cache modification */
-extern int			nl_cache_add(struct nl_cache *,
-					     struct nl_object *);
-extern int			nl_cache_parse_and_add(struct nl_cache *,
-						       struct nl_msg *);
-extern void			nl_cache_remove(struct nl_object *);
-extern int			nl_cache_refill(struct nl_sock *,
-						struct nl_cache *);
-extern int			nl_cache_pickup(struct nl_sock *,
-						struct nl_cache *);
-extern int			nl_cache_resync(struct nl_sock *,
-						struct nl_cache *,
-						change_func_t,
-						void *);
-extern int			nl_cache_include(struct nl_cache *,
-						 struct nl_object *,
-						 change_func_t,
-						 void *);
-
-/* General */
-extern int			nl_cache_is_empty(struct nl_cache *);
-extern void			nl_cache_mark_all(struct nl_cache *);
-
-/* Dumping */
-extern void			nl_cache_dump(struct nl_cache *,
-					      struct nl_dump_params *);
-extern void			nl_cache_dump_filter(struct nl_cache *,
-						     struct nl_dump_params *,
-						     struct nl_object *);
-
-/* Iterators */
-extern void			nl_cache_foreach(struct nl_cache *,
-						 void (*cb)(struct nl_object *,
-							    void *),
-						 void *arg);
-extern void			nl_cache_foreach_filter(struct nl_cache *,
-							struct nl_object *,
-							void (*cb)(struct
-								   nl_object *,
-								   void *),
-							void *arg);
-
-/* --- cache management --- */
-
-/* Cache type management */
-extern struct nl_cache_ops *	nl_cache_ops_lookup(const char *);
-extern struct nl_cache_ops *	nl_cache_ops_associate(int, int);
-extern struct nl_msgtype *	nl_msgtype_lookup(struct nl_cache_ops *, int);
-extern void			nl_cache_ops_foreach(void (*cb)(struct nl_cache_ops *, void *), void *);
-extern int			nl_cache_mngt_register(struct nl_cache_ops *);
-extern int			nl_cache_mngt_unregister(struct nl_cache_ops *);
-
-/* Global cache provisioning/requiring */
-extern void			nl_cache_mngt_provide(struct nl_cache *);
-extern void			nl_cache_mngt_unprovide(struct nl_cache *);
-extern struct nl_cache *	nl_cache_mngt_require(const char *);
-
-struct nl_cache_mngr;
-
-#define NL_AUTO_PROVIDE		1
-
-extern int			nl_cache_mngr_alloc(struct nl_sock *,
-						    int, int,
-						    struct nl_cache_mngr **);
-extern int			nl_cache_mngr_add(struct nl_cache_mngr *,
-						  const char *,
-						  change_func_t,
-						  void *,
-						  struct nl_cache **);
-extern int			nl_cache_mngr_get_fd(struct nl_cache_mngr *);
-extern int			nl_cache_mngr_poll(struct nl_cache_mngr *,
-						   int);
-extern int			nl_cache_mngr_data_ready(struct nl_cache_mngr *);
-extern void			nl_cache_mngr_free(struct nl_cache_mngr *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/cli/utils.h b/libnl_2/include/netlink/cli/utils.h
deleted file mode 100644
index 2a23208..0000000
--- a/libnl_2/include/netlink/cli/utils.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * src/utils.h		Utilities
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2009 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef __NETLINK_CLI_UTILS_H_
-#define __NETLINK_CLI_UTILS_H_
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <limits.h>
-#include <inttypes.h>
-#include <errno.h>
-#include <stdint.h>
-#include <ctype.h>
-#include <getopt.h>
-#include <dlfcn.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <netlink/netlink.h>
-#include <netlink/utils.h>
-#include <netlink/addr.h>
-#include <netlink/list.h>
-#include <netlink/route/rtnl.h>
-#include <netlink/route/link.h>
-#include <netlink/route/addr.h>
-#include <netlink/route/neighbour.h>
-#include <netlink/route/neightbl.h>
-#include <netlink/route/route.h>
-#include <netlink/route/rule.h>
-#include <netlink/route/qdisc.h>
-#include <netlink/route/class.h>
-#include <netlink/route/classifier.h>
-#include <netlink/route/cls/ematch.h>
-#include <netlink/fib_lookup/lookup.h>
-#include <netlink/fib_lookup/request.h>
-#include <netlink/genl/genl.h>
-#include <netlink/genl/ctrl.h>
-#include <netlink/genl/mngt.h>
-#include <netlink/netfilter/ct.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef __init
-#define __init __attribute__((constructor))
-#endif
-
-#ifndef __exit
-#define __exit __attribute__((destructor))
-#endif
-
-extern uint32_t		nl_cli_parse_u32(const char *);
-extern void		nl_cli_print_version(void);
-extern void		nl_cli_fatal(int, const char *, ...);
-extern struct nl_addr *	nl_cli_addr_parse(const char *, int);
-extern int		nl_cli_connect(struct nl_sock *, int);
-extern struct nl_sock *	nl_cli_alloc_socket(void);
-extern int		nl_cli_parse_dumptype(const char *);
-extern int		nl_cli_confirm(struct nl_object *,
-				       struct nl_dump_params *, int);
-
-extern struct nl_cache *nl_cli_alloc_cache(struct nl_sock *, const char *,
-			     int (*ac)(struct nl_sock *, struct nl_cache **));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/data.h b/libnl_2/include/netlink/data.h
deleted file mode 100644
index 071159e..0000000
--- a/libnl_2/include/netlink/data.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * netlink/data.h	Abstract Data
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_DATA_H_
-#define NETLINK_DATA_H_
-
-#include <netlink/netlink.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nl_data;
-
-/* General */
-extern struct nl_data *	nl_data_alloc(void *, size_t);
-extern struct nl_data * nl_data_alloc_attr(struct nlattr *);
-extern struct nl_data *	nl_data_clone(struct nl_data *);
-extern int		nl_data_append(struct nl_data *, void *, size_t);
-extern void		nl_data_free(struct nl_data *);
-
-/* Access Functions */
-extern void *		nl_data_get(struct nl_data *);
-extern size_t		nl_data_get_size(struct nl_data *);
-
-/* Misc */
-extern int		nl_data_cmp(struct nl_data *, struct nl_data *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/errno.h b/libnl_2/include/netlink/errno.h
deleted file mode 100644
index c8a376e..0000000
--- a/libnl_2/include/netlink/errno.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * netlink/errno.h		Error Numbers
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_ERRNO_H_
-#define NETLINK_ERRNO_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define NLE_SUCCESS		0
-#define NLE_FAILURE		1
-#define NLE_INTR		2
-#define NLE_BAD_SOCK		3
-#define NLE_AGAIN		4
-#define NLE_NOMEM		5
-#define NLE_EXIST		6
-#define NLE_INVAL		7
-#define NLE_RANGE		8
-#define NLE_MSGSIZE		9
-#define NLE_OPNOTSUPP		10
-#define NLE_AF_NOSUPPORT	11
-#define NLE_OBJ_NOTFOUND	12
-#define NLE_NOATTR		13
-#define NLE_MISSING_ATTR	14
-#define NLE_AF_MISMATCH		15
-#define NLE_SEQ_MISMATCH	16
-#define NLE_MSG_OVERFLOW	17
-#define NLE_MSG_TRUNC		18
-#define NLE_NOADDR		19
-#define NLE_SRCRT_NOSUPPORT	20
-#define NLE_MSG_TOOSHORT	21
-#define NLE_MSGTYPE_NOSUPPORT	22
-#define NLE_OBJ_MISMATCH	23
-#define NLE_NOCACHE		24
-#define NLE_BUSY		25
-#define NLE_PROTO_MISMATCH	26
-#define NLE_NOACCESS		27
-#define NLE_PERM		28
-#define NLE_PKTLOC_FILE		29
-
-#define NLE_MAX			NLE_PKTLOC_FILE
-
-extern const char *	nl_geterror(int);
-extern void		nl_perror(int, const char *);
-extern int		nl_syserr2nlerr(int);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/fib_lookup/lookup.h b/libnl_2/include/netlink/fib_lookup/lookup.h
deleted file mode 100644
index 8bf27b8..0000000
--- a/libnl_2/include/netlink/fib_lookup/lookup.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * netlink/fib_lookup/fib_lookup.h	FIB Lookup
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_FIB_LOOKUP_H_
-#define NETLINK_FIB_LOOKUP_H_
-
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-#include <netlink/addr.h>
-#include <netlink/fib_lookup/request.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct flnl_result;
-
-extern struct flnl_result *	flnl_result_alloc(void);
-extern void			flnl_result_put(struct flnl_result *);
-
-extern struct nl_cache *	flnl_result_alloc_cache(void);
-
-extern int			flnl_lookup_build_request(struct flnl_request *,
-							  int,
-							  struct nl_msg **);
-extern int			flnl_lookup(struct nl_sock *,
-					    struct flnl_request *,
-					    struct nl_cache *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/fib_lookup/request.h b/libnl_2/include/netlink/fib_lookup/request.h
deleted file mode 100644
index 60e8820..0000000
--- a/libnl_2/include/netlink/fib_lookup/request.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * netlink/fib_lookup/request.h		FIB Lookup Request	
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_FIB_LOOKUP_REQUEST_H_
-#define NETLINK_FIB_LOOKUP_REQUEST_H_
-
-#include <netlink/netlink.h>
-#include <netlink/addr.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct flnl_request;
-
-#define REQUEST_CAST(ptr)	((struct flnl_request *) (ptr))
-
-extern struct flnl_request *	flnl_request_alloc(void);
-
-extern void			flnl_request_set_fwmark(struct flnl_request *,
-							uint64_t);
-extern uint64_t			flnl_request_get_fwmark(struct flnl_request *);
-extern void			flnl_request_set_tos(struct flnl_request *,
-						     int);
-extern int			flnl_request_get_tos(struct flnl_request *);
-extern void			flnl_request_set_scope(struct flnl_request *,
-						       int);
-extern int			flnl_request_get_scope(struct flnl_request *);
-extern void			flnl_request_set_table(struct flnl_request *,
-						       int);
-extern int			flnl_request_get_table(struct flnl_request *);
-extern int			flnl_request_set_addr(struct flnl_request *,
-						      struct nl_addr *);
-extern struct nl_addr *		flnl_request_get_addr(struct flnl_request *);
-
-extern int			flnl_request_cmp(struct flnl_request *,
-						 struct flnl_request *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/genl/ctrl.h b/libnl_2/include/netlink/genl/ctrl.h
deleted file mode 100644
index 1ae62f4..0000000
--- a/libnl_2/include/netlink/genl/ctrl.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * netlink/genl/ctrl.h		Generic Netlink Controller
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_GENL_CTRL_H_
-#define NETLINK_GENL_CTRL_H_
-
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-#include <netlink/addr.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct genl_family;
-
-extern int			genl_ctrl_alloc_cache(struct nl_sock *,
-						      struct nl_cache **);
-extern struct genl_family *	genl_ctrl_search(struct nl_cache *, int);
-extern struct genl_family *	genl_ctrl_search_by_name(struct nl_cache *,
-							 const char *);
-extern int			genl_ctrl_resolve(struct nl_sock *,
-						  const char *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/genl/family.h b/libnl_2/include/netlink/genl/family.h
deleted file mode 100644
index 74319e5..0000000
--- a/libnl_2/include/netlink/genl/family.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * netlink/genl/family.h	Generic Netlink Family
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_GENL_FAMILY_H_
-#define NETLINK_GENL_FAMILY_H_
-
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct genl_family;
-
-extern struct genl_family *	genl_family_alloc(void);
-extern void			genl_family_put(struct genl_family *);
-
-extern unsigned int		genl_family_get_id(struct genl_family *);
-extern void			genl_family_set_id(struct genl_family *,
-						   unsigned int);
-extern char *			genl_family_get_name(struct genl_family *);
-extern void			genl_family_set_name(struct genl_family *,
-						     const char *name);
-extern uint8_t			genl_family_get_version(struct genl_family *);
-extern void			genl_family_set_version(struct genl_family *,
-							uint8_t);
-extern uint32_t			genl_family_get_hdrsize(struct genl_family *);
-extern void			genl_family_set_hdrsize(struct genl_family *,
-							uint32_t);
-extern uint32_t			genl_family_get_maxattr(struct genl_family *);
-extern void			genl_family_set_maxattr(struct genl_family *,
-							uint32_t);
-
-extern int			genl_family_add_op(struct genl_family *,
-						   int, int);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/genl/genl.h b/libnl_2/include/netlink/genl/genl.h
deleted file mode 100644
index 3f3340c..0000000
--- a/libnl_2/include/netlink/genl/genl.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * netlink/genl/genl.h		Generic Netlink
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_GENL_H_
-#define NETLINK_GENL_H_
-
-#include <netlink/netlink.h>
-#include <netlink/msg.h>
-#include <netlink/attr.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern int		genl_connect(struct nl_sock *);
-
-extern int		genl_send_simple(struct nl_sock *, int, int,
-					 int, int);
-
-extern void *		genlmsg_put(struct nl_msg *, uint32_t, uint32_t,
-				    int, int, int, uint8_t, uint8_t);
-
-extern int		genlmsg_valid_hdr(struct nlmsghdr *, int);
-extern int		genlmsg_validate(struct nlmsghdr *, int, int,
-					 struct nla_policy *);
-extern int		genlmsg_parse(struct nlmsghdr *, int, struct nlattr **,
-				      int, struct nla_policy *);
-extern void *		genlmsg_data(const struct genlmsghdr *);
-extern int		genlmsg_len(const struct genlmsghdr *);
-extern struct nlattr *	genlmsg_attrdata(const struct genlmsghdr *, int);
-extern int		genlmsg_attrlen(const struct genlmsghdr *, int);
-
-extern char *		genl_op2name(int, int, char *, size_t);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/genl/mngt.h b/libnl_2/include/netlink/genl/mngt.h
deleted file mode 100644
index 8b0244f..0000000
--- a/libnl_2/include/netlink/genl/mngt.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * netlink/genl/mngt.h		Generic Netlink Management
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_GENL_MNGT_H_
-#define NETLINK_GENL_MNGT_H_
-
-#include <netlink/netlink.h>
-#include <netlink/attr.h>
-#include <netlink/list.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nl_cache_ops;
-
-struct genl_info
-{
-	struct sockaddr_nl *    who;
-	struct nlmsghdr *       nlh;
-	struct genlmsghdr *     genlhdr;
-	void *                  userhdr;
-	struct nlattr **        attrs;
-};
-
-/**
- * @ingroup genl_mngt
- * Generic Netlink Command
- */
-struct genl_cmd
-{
-	/** Unique command identifier */
-	int			c_id;
-
-	/** Name/description of command */
-	char *			c_name;
-
-	/**
-	 * Maximum attribute identifier, must be provided if
-	 * a message parser is available.
-	 */
-	int			c_maxattr;
-
-	int		      (*c_msg_parser)(struct nl_cache_ops *,
-					      struct genl_cmd *,
-					      struct genl_info *, void *);
-
-	/**
-	 * Attribute validation policy (optional)
-	 */
-	struct nla_policy *	c_attr_policy;
-};
-
-/**
- * @ingroup genl_mngt
- * Generic Netlink Operations
- */
-struct genl_ops
-{
-	int			o_family;
-	int			o_id;
-	char *			o_name;
-	struct nl_cache_ops *	o_cache_ops;
-	struct genl_cmd	*	o_cmds;
-	int			o_ncmds;
-
-	/* linked list of all genl cache operations */
-	struct nl_list_head	o_list;
-};
-
-
-extern int		genl_register(struct nl_cache_ops *);
-extern void		genl_unregister(struct nl_cache_ops *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/handlers.h b/libnl_2/include/netlink/handlers.h
deleted file mode 100644
index f373f58..0000000
--- a/libnl_2/include/netlink/handlers.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * netlink/handlers.c	default netlink message handlers
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_HANDLERS_H_
-#define NETLINK_HANDLERS_H_
-
-#include <stdio.h>
-#include <stdint.h>
-#include <sys/types.h>
-#include <netlink/netlink-compat.h>
-#include <netlink/netlink-kernel.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nl_cb;
-struct nl_sock;
-struct nl_msg;
-struct ucred;
-
-/**
- * @name Callback Typedefs
- * @{
- */
-
-/**
- * nl_recvmsgs() callback for message processing customization
- * @ingroup cb
- * @arg msg		netlink message being processed
- * @arg arg		argument passwd on through caller
- */
-typedef int (*nl_recvmsg_msg_cb_t)(struct nl_msg *msg, void *arg);
-
-/**
- * nl_recvmsgs() callback for error message processing customization
- * @ingroup cb
- * @arg nla		netlink address of the peer
- * @arg nlerr		netlink error message being processed
- * @arg arg		argument passed on through caller
- */
-typedef int (*nl_recvmsg_err_cb_t)(struct sockaddr_nl *nla,
-				   struct nlmsgerr *nlerr, void *arg);
-
-/** @} */
-
-/**
- * Callback actions
- * @ingroup cb
- */
-enum nl_cb_action {
-	/** Proceed with wathever would come next */
-	NL_OK,
-	/** Skip this message */
-	NL_SKIP,
-	/** Stop parsing altogether and discard remaining messages */
-	NL_STOP,
-};
-
-/**
- * Callback kinds
- * @ingroup cb
- */
-enum nl_cb_kind {
-	/** Default handlers (quiet) */
-	NL_CB_DEFAULT,
-	/** Verbose default handlers (error messages printed) */
-	NL_CB_VERBOSE,
-	/** Debug handlers for debugging */
-	NL_CB_DEBUG,
-	/** Customized handler specified by the user */
-	NL_CB_CUSTOM,
-	__NL_CB_KIND_MAX,
-};
-
-#define NL_CB_KIND_MAX (__NL_CB_KIND_MAX - 1)
-
-/**
- * Callback types
- * @ingroup cb
- */
-enum nl_cb_type {
-	/** Message is valid */
-	NL_CB_VALID,
-	/** Last message in a series of multi part messages received */
-	NL_CB_FINISH,
-	/** Report received that data was lost */
-	NL_CB_OVERRUN,
-	/** Message wants to be skipped */
-	NL_CB_SKIPPED,
-	/** Message is an acknowledge */
-	NL_CB_ACK,
-	/** Called for every message received */
-	NL_CB_MSG_IN,
-	/** Called for every message sent out except for nl_sendto() */
-	NL_CB_MSG_OUT,
-	/** Message is malformed and invalid */
-	NL_CB_INVALID,
-	/** Called instead of internal sequence number checking */
-	NL_CB_SEQ_CHECK,
-	/** Sending of an acknowledge message has been requested */
-	NL_CB_SEND_ACK,
-	__NL_CB_TYPE_MAX,
-};
-
-#define NL_CB_TYPE_MAX (__NL_CB_TYPE_MAX - 1)
-
-extern struct nl_cb *	nl_cb_alloc(enum nl_cb_kind);
-extern struct nl_cb *	nl_cb_clone(struct nl_cb *);
-extern struct nl_cb *	nl_cb_get(struct nl_cb *);
-extern void		nl_cb_put(struct nl_cb *);
-
-extern int  nl_cb_set(struct nl_cb *, enum nl_cb_type, enum nl_cb_kind,
-		      nl_recvmsg_msg_cb_t, void *);
-extern int  nl_cb_set_all(struct nl_cb *, enum nl_cb_kind,
-			  nl_recvmsg_msg_cb_t, void *);
-extern int  nl_cb_err(struct nl_cb *, enum nl_cb_kind, nl_recvmsg_err_cb_t,
-		      void *);
-
-extern void nl_cb_overwrite_recvmsgs(struct nl_cb *,
-				     int (*func)(struct nl_sock *,
-						 struct nl_cb *));
-extern void nl_cb_overwrite_recv(struct nl_cb *,
-				 int (*func)(struct nl_sock *,
-					     struct sockaddr_nl *,
-					     unsigned char **,
-					     struct ucred **));
-extern void nl_cb_overwrite_send(struct nl_cb *,
-				 int (*func)(struct nl_sock *,
-					     struct nl_msg *));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/list.h b/libnl_2/include/netlink/list.h
deleted file mode 100644
index 28712ed..0000000
--- a/libnl_2/include/netlink/list.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * netlink/list.h	Netlink List Utilities
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_LIST_H_
-#define NETLINK_LIST_H_
-
-struct nl_list_head
-{
-	struct nl_list_head *	next;
-	struct nl_list_head *	prev;
-};
-
-static inline void NL_INIT_LIST_HEAD(struct nl_list_head *list)
-{
-	list->next = list;
-	list->prev = list;
-}
-
-static inline void __nl_list_add(struct nl_list_head *obj,
-				 struct nl_list_head *prev,
-				 struct nl_list_head *next)
-{
-	prev->next = obj;
-	obj->prev = prev;
-	next->prev = obj;
-	obj->next = next;
-}
-
-static inline void nl_list_add_tail(struct nl_list_head *obj,
-				    struct nl_list_head *head)
-{
-	__nl_list_add(obj, head->prev, head);
-}
-
-static inline void nl_list_add_head(struct nl_list_head *obj,
-				    struct nl_list_head *head)
-{
-	__nl_list_add(obj, head, head->next);
-}
-
-static inline void nl_list_del(struct nl_list_head *obj)
-{
-	obj->next->prev = obj->prev;
-	obj->prev->next = obj->next;
-}
-
-static inline int nl_list_empty(struct nl_list_head *head)
-{
-	return head->next == head;
-}
-
-#define nl_container_of(ptr, type, member) ({			\
-        const typeof( ((type *)0)->member ) *__mptr = (ptr);	\
-        (type *)( (char *)__mptr - ((size_t) &((type *)0)->member));})
-
-#define nl_list_entry(ptr, type, member) \
-	nl_container_of(ptr, type, member)
-
-#define nl_list_at_tail(pos, head, member) \
-	((pos)->member.next == (head))
-
-#define nl_list_at_head(pos, head, member) \
-	((pos)->member.prev == (head))
-
-#define NL_LIST_HEAD(name) \
-	struct nl_list_head name = { &(name), &(name) }
-
-#define nl_list_first_entry(head, type, member)			\
-	nl_list_entry((head)->next, type, member)
-
-#define nl_list_for_each_entry(pos, head, member)				\
-	for (pos = nl_list_entry((head)->next, typeof(*pos), member);	\
-	     &(pos)->member != (head); 	\
-	     (pos) = nl_list_entry((pos)->member.next, typeof(*(pos)), member))
-
-#define nl_list_for_each_entry_safe(pos, n, head, member)			\
-	for (pos = nl_list_entry((head)->next, typeof(*pos), member),	\
-		n = nl_list_entry(pos->member.next, typeof(*pos), member);	\
-	     &(pos)->member != (head); 					\
-	     pos = n, n = nl_list_entry(n->member.next, typeof(*n), member))
-
-#define nl_init_list_head(head) \
-	do { (head)->next = (head); (head)->prev = (head); } while (0)
-
-#endif
diff --git a/libnl_2/include/netlink/msg.h b/libnl_2/include/netlink/msg.h
deleted file mode 100644
index e9be456..0000000
--- a/libnl_2/include/netlink/msg.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * netlink/msg.c		Netlink Messages Interface
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_MSG_H_
-#define NETLINK_MSG_H_
-
-#include <netlink/netlink.h>
-#include <netlink/object.h>
-#include <netlink/attr.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define NL_DONTPAD	0
-
-/**
- * @ingroup msg
- * @brief
- * Will cause the netlink pid to be set to the pid assigned to
- * the netlink handle (socket) just before sending the message off.
- * @note Requires the use of nl_send_auto_complete()!
- */
-#define NL_AUTO_PID	0
-
-/**
- * @ingroup msg
- * @brief
- * May be used to refer to a sequence number which should be
- * automatically set just before sending the message off.
- * @note Requires the use of nl_send_auto_complete()!
- */
-#define NL_AUTO_SEQ	0
-
-struct nl_msg;
-struct nl_tree;
-struct ucred;
-
-/* size calculations */
-extern int		  nlmsg_msg_size(int);
-extern int		  nlmsg_total_size(int);
-extern int		  nlmsg_padlen(int);
-
-/* payload access */
-extern void *		  nlmsg_data(const struct nlmsghdr *);
-extern int		  nlmsg_datalen(const struct nlmsghdr *);
-extern int		  nlmsg_len(const struct nlmsghdr *);
-extern void *		  nlmsg_tail(const struct nlmsghdr *);
-
-/* attribute access */
-extern struct nlattr *	  nlmsg_attrdata(const struct nlmsghdr *, int);
-extern int		  nlmsg_attrlen(const struct nlmsghdr *, int);
-
-/* message parsing */
-extern int		  nlmsg_valid_hdr(const struct nlmsghdr *, int);
-extern int		  nlmsg_ok(const struct nlmsghdr *, int);
-extern struct nlmsghdr *  nlmsg_next(struct nlmsghdr *, int *);
-extern int		  nlmsg_parse(struct nlmsghdr *, int, struct nlattr **,
-				      int, struct nla_policy *);
-extern struct nlattr *	  nlmsg_find_attr(struct nlmsghdr *, int, int);
-extern int		  nlmsg_validate(struct nlmsghdr *, int, int,
-					 struct nla_policy *);
-
-extern struct nl_msg *	  nlmsg_alloc(void);
-extern struct nl_msg *	  nlmsg_alloc_size(size_t);
-extern struct nl_msg *	  nlmsg_alloc_simple(int, int);
-extern void		  nlmsg_set_default_size(size_t);
-extern struct nl_msg *	  nlmsg_inherit(struct nlmsghdr *);
-extern struct nl_msg *	  nlmsg_convert(struct nlmsghdr *);
-extern void *		  nlmsg_reserve(struct nl_msg *, size_t, int);
-extern int		  nlmsg_append(struct nl_msg *, void *, size_t, int);
-extern int		  nlmsg_expand(struct nl_msg *, size_t);
-
-extern struct nlmsghdr *  nlmsg_put(struct nl_msg *, uint32_t, uint32_t,
-				    int, int, int);
-extern struct nlmsghdr *  nlmsg_hdr(struct nl_msg *);
-extern void		  nlmsg_get(struct nl_msg *);
-extern void		  nlmsg_free(struct nl_msg *);
-
-/* attribute modification */
-extern void		  nlmsg_set_proto(struct nl_msg *, int);
-extern int		  nlmsg_get_proto(struct nl_msg *);
-extern size_t		  nlmsg_get_max_size(struct nl_msg *);
-extern void		  nlmsg_set_src(struct nl_msg *, struct sockaddr_nl *);
-extern struct sockaddr_nl *nlmsg_get_src(struct nl_msg *);
-extern void		  nlmsg_set_dst(struct nl_msg *, struct sockaddr_nl *);
-extern struct sockaddr_nl *nlmsg_get_dst(struct nl_msg *);
-extern void		  nlmsg_set_creds(struct nl_msg *, struct ucred *);
-extern struct ucred *	  nlmsg_get_creds(struct nl_msg *);
-
-extern char *		  nl_nlmsgtype2str(int, char *, size_t);
-extern int		  nl_str2nlmsgtype(const char *);
-
-extern char *		  nl_nlmsg_flags2str(int, char *, size_t);
-
-extern int		  nl_msg_parse(struct nl_msg *,
-				       void (*cb)(struct nl_object *, void *),
-				       void *);
-
-extern void		nl_msg_dump(struct nl_msg *, FILE *);
-
-/**
- * @name Iterators
- * @{
- */
-
-/**
- * @ingroup msg
- * Iterate over a stream of attributes in a message
- * @arg pos	loop counter, set to current attribute
- * @arg nlh	netlink message header
- * @arg hdrlen	length of family header
- * @arg rem	initialized to len, holds bytes currently remaining in stream
- */
-#define nlmsg_for_each_attr(pos, nlh, hdrlen, rem) \
-	nla_for_each_attr(pos, nlmsg_attrdata(nlh, hdrlen), \
-			  nlmsg_attrlen(nlh, hdrlen), rem)
-
-/**
- * Iterate over a stream of messages
- * @arg pos	loop counter, set to current message
- * @arg head	head of message stream
- * @arg len	length of message stream
- * @arg rem	initialized to len, holds bytes currently remaining in stream
- */
-#define nlmsg_for_each_msg(pos, head, len, rem) \
-	for (pos = head, rem = len; \
-	     nlmsg_ok(pos, rem); \
-	     pos = nlmsg_next(pos, &(rem)))
-
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/netfilter/ct.h b/libnl_2/include/netlink/netfilter/ct.h
deleted file mode 100644
index c4402b3..0000000
--- a/libnl_2/include/netlink/netfilter/ct.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * netlink/netfilter/ct.h	Conntrack
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- * Copyright (c) 2007 Philip Craig <philipc@snapgear.com>
- * Copyright (c) 2007 Secure Computing Corporation
- */
-
-#ifndef NETLINK_CT_H_
-#define NETLINK_CT_H_
-
-#include <netlink/netlink.h>
-#include <netlink/addr.h>
-#include <netlink/cache.h>
-#include <netlink/msg.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nfnl_ct;
-
-extern struct nl_object_ops ct_obj_ops;
-
-extern struct nfnl_ct *	nfnl_ct_alloc(void);
-extern int	nfnl_ct_alloc_cache(struct nl_sock *, struct nl_cache **);
-
-extern int	nfnlmsg_ct_group(struct nlmsghdr *);
-extern int	nfnlmsg_ct_parse(struct nlmsghdr *, struct nfnl_ct **);
-
-extern void	nfnl_ct_get(struct nfnl_ct *);
-extern void	nfnl_ct_put(struct nfnl_ct *);
-
-extern int	nfnl_ct_dump_request(struct nl_sock *);
-
-extern int	nfnl_ct_build_add_request(const struct nfnl_ct *, int,
-					  struct nl_msg **);
-extern int	nfnl_ct_add(struct nl_sock *, const struct nfnl_ct *, int);
-
-extern int	nfnl_ct_build_delete_request(const struct nfnl_ct *, int,
-					     struct nl_msg **);
-extern int	nfnl_ct_delete(struct nl_sock *, const struct nfnl_ct *, int);
-
-extern int	nfnl_ct_build_query_request(const struct nfnl_ct *, int,
-					    struct nl_msg **);
-extern int	nfnl_ct_query(struct nl_sock *, const struct nfnl_ct *, int);
-
-extern void	nfnl_ct_set_family(struct nfnl_ct *, uint8_t);
-extern uint8_t	nfnl_ct_get_family(const struct nfnl_ct *);
-
-extern void	nfnl_ct_set_proto(struct nfnl_ct *, uint8_t);
-extern int	nfnl_ct_test_proto(const struct nfnl_ct *);
-extern uint8_t	nfnl_ct_get_proto(const struct nfnl_ct *);
-
-extern void	nfnl_ct_set_tcp_state(struct nfnl_ct *, uint8_t);
-extern int	nfnl_ct_test_tcp_state(const struct nfnl_ct *);
-extern uint8_t	nfnl_ct_get_tcp_state(const struct nfnl_ct *);
-extern char *	nfnl_ct_tcp_state2str(uint8_t, char *, size_t);
-extern int	nfnl_ct_str2tcp_state(const char *name);
-
-extern void	nfnl_ct_set_status(struct nfnl_ct *, uint32_t);
-extern void	nfnl_ct_unset_status(struct nfnl_ct *, uint32_t);
-extern uint32_t	nfnl_ct_get_status(const struct nfnl_ct *);
-extern char *	nfnl_ct_status2str(int, char *, size_t);
-extern int	nfnl_ct_str2status(const char *);
-
-extern void	nfnl_ct_set_timeout(struct nfnl_ct *, uint32_t);
-extern int	nfnl_ct_test_timeout(const struct nfnl_ct *);
-extern uint32_t	nfnl_ct_get_timeout(const struct nfnl_ct *);
-
-extern void	nfnl_ct_set_mark(struct nfnl_ct *, uint32_t);
-extern int	nfnl_ct_test_mark(const struct nfnl_ct *);
-extern uint32_t	nfnl_ct_get_mark(const struct nfnl_ct *);
-
-extern void	nfnl_ct_set_use(struct nfnl_ct *, uint32_t);
-extern int	nfnl_ct_test_use(const struct nfnl_ct *);
-extern uint32_t	nfnl_ct_get_use(const struct nfnl_ct *);
-
-extern void	nfnl_ct_set_id(struct nfnl_ct *, uint32_t);
-extern int	nfnl_ct_test_id(const struct nfnl_ct *);
-extern uint32_t	nfnl_ct_get_id(const struct nfnl_ct *);
-
-extern int	nfnl_ct_set_src(struct nfnl_ct *, int, struct nl_addr *);
-extern struct nl_addr *	nfnl_ct_get_src(const struct nfnl_ct *, int);
-
-extern int	nfnl_ct_set_dst(struct nfnl_ct *, int, struct nl_addr *);
-extern struct nl_addr *	nfnl_ct_get_dst(const struct nfnl_ct *, int);
-
-extern void	nfnl_ct_set_src_port(struct nfnl_ct *, int, uint16_t);
-extern int	nfnl_ct_test_src_port(const struct nfnl_ct *, int);
-extern uint16_t	nfnl_ct_get_src_port(const struct nfnl_ct *, int);
-
-extern void	nfnl_ct_set_dst_port(struct nfnl_ct *, int, uint16_t);
-extern int	nfnl_ct_test_dst_port(const struct nfnl_ct *, int);
-extern uint16_t	nfnl_ct_get_dst_port(const struct nfnl_ct *, int);
-
-extern void	nfnl_ct_set_icmp_id(struct nfnl_ct *, int, uint16_t);
-extern int	nfnl_ct_test_icmp_id(const struct nfnl_ct *, int);
-extern uint16_t	nfnl_ct_get_icmp_id(const struct nfnl_ct *, int);
-
-extern void	nfnl_ct_set_icmp_type(struct nfnl_ct *, int, uint8_t);
-extern int	nfnl_ct_test_icmp_type(const struct nfnl_ct *, int);
-extern uint8_t	nfnl_ct_get_icmp_type(const struct nfnl_ct *, int);
-
-extern void	nfnl_ct_set_icmp_code(struct nfnl_ct *, int, uint8_t);
-extern int	nfnl_ct_test_icmp_code(const struct nfnl_ct *, int);
-extern uint8_t	nfnl_ct_get_icmp_code(const struct nfnl_ct *, int);
-
-extern void	nfnl_ct_set_packets(struct nfnl_ct *, int, uint64_t);
-extern int	nfnl_ct_test_packets(const struct nfnl_ct *, int);
-extern uint64_t	nfnl_ct_get_packets(const struct nfnl_ct *,int);
-
-extern void	nfnl_ct_set_bytes(struct nfnl_ct *, int, uint64_t);
-extern int	nfnl_ct_test_bytes(const struct nfnl_ct *, int);
-extern uint64_t	nfnl_ct_get_bytes(const struct nfnl_ct *, int);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/netlink-compat.h b/libnl_2/include/netlink/netlink-compat.h
deleted file mode 100644
index 17ec9fc..0000000
--- a/libnl_2/include/netlink/netlink-compat.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * netlink/netlink-compat.h	Netlink Compatability
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_COMPAT_H_
-#define NETLINK_COMPAT_H_
-
-#if !defined _LINUX_SOCKET_H && !defined _BITS_SOCKADDR_H
-typedef unsigned short  sa_family_t;
-#endif
-
-#ifndef IFNAMSIZ 
-/** Maximum length of a interface name */
-#define IFNAMSIZ 16
-#endif
-
-/* patch 2.4.x if_arp */
-#ifndef ARPHRD_INFINIBAND
-#define ARPHRD_INFINIBAND 32
-#endif
-
-/* patch 2.4.x eth header file */
-#ifndef ETH_P_MPLS_UC
-#define ETH_P_MPLS_UC  0x8847 
-#endif
-
-#ifndef ETH_P_MPLS_MC
-#define ETH_P_MPLS_MC   0x8848
-#endif
-
-#ifndef  ETH_P_EDP2
-#define ETH_P_EDP2      0x88A2
-#endif
-
-#ifndef ETH_P_HDLC
-#define ETH_P_HDLC      0x0019 
-#endif
-
-#ifndef AF_LLC
-#define AF_LLC		26
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/netlink-kernel.h b/libnl_2/include/netlink/netlink-kernel.h
deleted file mode 100644
index a0f5535..0000000
--- a/libnl_2/include/netlink/netlink-kernel.h
+++ /dev/null
@@ -1,196 +0,0 @@
-#ifndef __LINUX_NETLINK_H
-#define __LINUX_NETLINK_H
-
-/**
- * Netlink socket address
- * @ingroup nl
- */
-struct sockaddr_nl
-{
-	/** socket family (AF_NETLINK) */
-	sa_family_t     nl_family;
-
-	/** Padding (unused) */
-	unsigned short  nl_pad;
-
-	/** Unique process ID  */
-	uint32_t        nl_pid;
-
-	/** Multicast group subscriptions */
-	uint32_t        nl_groups;
-};
-
-/**
- * Netlink message header
- * @ingroup msg
- */
-struct nlmsghdr
-{
-	/**
-	 * Length of message including header.
-	 */
-	uint32_t	nlmsg_len;
-
-	/**
-	 * Message type (content type)
-	 */
-	uint16_t	nlmsg_type;
-
-	/**
-	 * Message flags
-	 */
-	uint16_t	nlmsg_flags;
-
-	/**
-	 * Sequence number
-	 */
-	uint32_t	nlmsg_seq;
-
-	/**
-	 * Netlink PID of the proccess sending the message.
-	 */
-	uint32_t	nlmsg_pid;
-};
-
-/**
- * @name Standard message flags
- * @{
- */
-
-/**
- * Must be set on all request messages (typically from user space to
- * kernel space).
- * @ingroup msg
- */
-#define NLM_F_REQUEST		1
-
-/**
- * Indicates the message is part of a multipart message terminated
- * by NLMSG_DONE.
- */
-#define NLM_F_MULTI		2
-
-/**
- * Request for an acknowledgment on success.
- */
-#define NLM_F_ACK		4
-
-/**
- * Echo this request
- */
-#define NLM_F_ECHO		8
-
-/** @} */
-
-/**
- * @name Additional message flags for GET requests
- * @{
- */
-
-/**
- * Return the complete table instead of a single entry.
- * @ingroup msg
- */
-#define NLM_F_ROOT	0x100
-
-/**
- * Return all entries matching criteria passed in message content.
- */
-#define NLM_F_MATCH	0x200
-
-/**
- * Return an atomic snapshot of the table being referenced. This
- * may require special privileges because it has the potential to
- * interrupt service in the FE for a longer time.
- */
-#define NLM_F_ATOMIC	0x400
-
-/**
- * Dump all entries
- */
-#define NLM_F_DUMP	(NLM_F_ROOT|NLM_F_MATCH)
-
-/** @} */
-
-/**
- * @name Additional messsage flags for NEW requests
- * @{
- */
-
-/**
- * Replace existing matching config object with this request.
- * @ingroup msg
- */
-#define NLM_F_REPLACE	0x100
-
-/**
- * Don't replace the config object if it already exists.
- */
-#define NLM_F_EXCL	0x200
-
-/**
- * Create config object if it doesn't already exist.
- */
-#define NLM_F_CREATE	0x400
-
-/**
- * Add to the end of the object list.
- */
-#define NLM_F_APPEND	0x800
-
-/** @} */
-
-/**
- * @name Standard Message types
- * @{
- */
-
-/**
- * No operation, message must be ignored
- * @ingroup msg
- */
-#define NLMSG_NOOP		0x1
-
-/**
- * The message signals an error and the payload contains a nlmsgerr
- * structure. This can be looked at as a NACK and typically it is
- * from FEC to CPC.
- */
-#define NLMSG_ERROR		0x2
-
-/**
- * Message terminates a multipart message.
- */
-#define NLMSG_DONE		0x3
-
-/**
- * The message signals that data got lost
- */
-#define NLMSG_OVERRUN		0x4
-
-/**
- * Lower limit of reserved message types
- */
-#define NLMSG_MIN_TYPE		0x10
-
-/** @} */
-
-/**
- * Netlink error message
- * @ingroup msg
- */
-struct nlmsgerr
-{
-	/** Error code (errno number) */
-	int		error;
-
-	/** Original netlink message causing the error */
-	struct nlmsghdr	msg;
-};
-
-struct nl_pktinfo
-{
-	__u32	group;
-};
-
-#endif	/* __LINUX_NETLINK_H */
diff --git a/libnl_2/include/netlink/netlink.h b/libnl_2/include/netlink/netlink.h
deleted file mode 100644
index 1cfe220..0000000
--- a/libnl_2/include/netlink/netlink.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * netlink/netlink.h		Netlink Interface
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_NETLINK_H_
-#define NETLINK_NETLINK_H_
-
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/poll.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <netdb.h>
-#include <netlink/netlink-compat.h>
-#include <linux/netlink.h>
-#include <linux/rtnetlink.h>
-#include <linux/genetlink.h>
-#include <linux/netfilter/nfnetlink.h>
-#include <netlink/version.h>
-#include <netlink/errno.h>
-#include <netlink/types.h>
-#include <netlink/handlers.h>
-#include <netlink/socket.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct ucred;
-
-extern int nl_debug;
-extern struct nl_dump_params nl_debug_dp;
-
-/* Connection Management */
-extern int			nl_connect(struct nl_sock *, int);
-extern void			nl_close(struct nl_sock *);
-
-/* Send */
-extern int			nl_sendto(struct nl_sock *, void *, size_t);
-extern int			nl_sendmsg(struct nl_sock *, struct nl_msg *,
-					   struct msghdr *);
-extern int			nl_send(struct nl_sock *, struct nl_msg *);
-extern int			nl_send_iovec(struct nl_sock *, struct nl_msg *,
-					      struct iovec *, unsigned);
-extern void			nl_auto_complete(struct nl_sock *,
-						      struct nl_msg *);
-extern int			nl_send_auto_complete(struct nl_sock *,
-						      struct nl_msg *);
-extern int			nl_send_simple(struct nl_sock *, int, int,
-					       void *, size_t);
-
-/* Receive */
-extern int			nl_recv(struct nl_sock *,
-					struct sockaddr_nl *, unsigned char **,
-					struct ucred **);
-
-extern int			nl_recvmsgs(struct nl_sock *, struct nl_cb *);
-
-extern int			nl_recvmsgs_default(struct nl_sock *);
-
-extern int			nl_wait_for_ack(struct nl_sock *);
-
-/* Netlink Family Translations */
-extern char *			nl_nlfamily2str(int, char *, size_t);
-extern int			nl_str2nlfamily(const char *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/object-api.h b/libnl_2/include/netlink/object-api.h
deleted file mode 100644
index b3337f0..0000000
--- a/libnl_2/include/netlink/object-api.h
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * netlink/object-api.c		Object API
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2007 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_OBJECT_API_H_
-#define NETLINK_OBJECT_API_H_
-
-#include <netlink/netlink.h>
-#include <netlink/utils.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @ingroup object
- * @defgroup object_api Object API
- * @brief
- *
- * @par 1) Object Definition
- * @code
- * // Define your object starting with the common object header
- * struct my_obj {
- * 	NLHDR_COMMON
- * 	int		my_data;
- * };
- *
- * // Fill out the object operations structure
- * struct nl_object_ops my_ops = {
- * 	.oo_name	= "my_obj",
- * 	.oo_size	= sizeof(struct my_obj),
- * };
- *
- * // At this point the object can be allocated, you may want to provide a
- * // separate _alloc() function to ease allocting objects of this kind.
- * struct nl_object *obj = nl_object_alloc(&my_ops);
- *
- * // And release it again...
- * nl_object_put(obj);
- * @endcode
- *
- * @par 2) Allocating additional data
- * @code
- * // You may require to allocate additional data and store it inside
- * // object, f.e. assuming there is a field `ptr'.
- * struct my_obj {
- * 	NLHDR_COMMON
- * 	void *		ptr;
- * };
- *
- * // And at some point you may assign allocated data to this field:
- * my_obj->ptr = calloc(1, ...);
- *
- * // In order to not introduce any memory leaks you have to release
- * // this data again when the last reference is given back.
- * static void my_obj_free_data(struct nl_object *obj)
- * {
- * 	struct my_obj *my_obj = nl_object_priv(obj);
- *
- * 	free(my_obj->ptr);
- * }
- *
- * // Also when the object is cloned, you must ensure for your pointer
- * // stay valid even if one of the clones is freed by either making
- * // a clone as well or increase the reference count.
- * static int my_obj_clone(struct nl_object *src, struct nl_object *dst)
- * {
- * 	struct my_obj *my_src = nl_object_priv(src);
- * 	struct my_obj *my_dst = nl_object_priv(dst);
- *
- * 	if (src->ptr) {
- * 		dst->ptr = calloc(1, ...);
- * 		memcpy(dst->ptr, src->ptr, ...);
- * 	}
- * }
- *
- * struct nl_object_ops my_ops = {
- * 	...
- * 	.oo_free_data	= my_obj_free_data,
- * 	.oo_clone	= my_obj_clone,
- * };
- * @endcode
- *
- * @par 3) Object Dumping
- * @code
- * static int my_obj_dump_detailed(struct nl_object *obj,
- * 				   struct nl_dump_params *params)
- * {
- * 	struct my_obj *my_obj = nl_object_priv(obj);
- *
- * 	// It is absolutely essential to use nl_dump() when printing
- *	// any text to make sure the dumping parameters are respected.
- * 	nl_dump(params, "Obj Integer: %d\n", my_obj->my_int);
- *
- * 	// Before we can dump the next line, make sure to prefix
- *	// this line correctly.
- * 	nl_new_line(params);
- *
- * 	// You may also split a line into multiple nl_dump() calls.
- * 	nl_dump(params, "String: %s ", my_obj->my_string);
- * 	nl_dump(params, "String-2: %s\n", my_obj->another_string);
- * }
- *
- * struct nl_object_ops my_ops = {
- * 	...
- * 	.oo_dump[NL_DUMP_FULL]	= my_obj_dump_detailed,
- * };
- * @endcode
- *
- * @par 4) Object Attributes
- * @code
- * // The concept of object attributes is optional but can ease the typical
- * // case of objects that have optional attributes, e.g. a route may have a
- * // nexthop assigned but it is not required to.
- *
- * // The first step to define your object specific bitmask listing all
- * // attributes
- * #define MY_ATTR_FOO		(1<<0)
- * #define MY_ATTR_BAR		(1<<1)
- *
- * // When assigning an optional attribute to the object, make sure
- * // to mark its availability.
- * my_obj->foo = 123123;
- * my_obj->ce_mask |= MY_ATTR_FOO;
- *
- * // At any time you may use this mask to check for the availability
- * // of the attribute, e.g. while dumping
- * if (my_obj->ce_mask & MY_ATTR_FOO)
- * 	nl_dump(params, "foo %d ", my_obj->foo);
- *
- * // One of the big advantages of this concept is that it allows for
- * // standardized comparisons which make it trivial for caches to
- * // identify unique objects by use of unified comparison functions.
- * // In order for it to work, your object implementation must provide
- * // a comparison function and define a list of attributes which
- * // combined together make an object unique.
- *
- * static int my_obj_compare(struct nl_object *_a, struct nl_object *_b,
- * 			     uint32_t attrs, int flags)
- * {
- * 	struct my_obj *a = nl_object_priv(_a):
- * 	struct my_obj *b = nl_object_priv(_b):
- * 	int diff = 0;
- *
- * 	// We help ourselves in defining our own DIFF macro which will
- *	// call ATTR_DIFF() on both objects which will make sure to only
- *	// compare the attributes if required.
- * 	#define MY_DIFF(ATTR, EXPR) ATTR_DIFF(attrs, MY_ATTR_##ATTR, a, b, EXPR)
- *
- * 	// Call our own diff macro for each attribute to build a bitmask
- *	// representing the attributes which mismatch.
- * 	diff |= MY_DIFF(FOO, a->foo != b->foo)
- * 	diff |= MY_DIFF(BAR, strcmp(a->bar, b->bar))
- *
- * 	return diff;
- * }
- *
- * // In order to identify identical objects with differing attributes
- * // you must specify the attributes required to uniquely identify
- * // your object. Make sure to not include too many attributes, this
- * // list is used when caches look for an old version of an object.
- * struct nl_object_ops my_ops = {
- * 	...
- * 	.oo_id_attrs		= MY_ATTR_FOO,
- * 	.oo_compare		= my_obj_compare,
- * };
- * @endcode
- * @{
- */
-
-/**
- * Common Object Header
- *
- * This macro must be included as first member in every object
- * definition to allow objects to be cached.
- */
-#define NLHDR_COMMON				\
-	int			ce_refcnt;	\
-	struct nl_object_ops *	ce_ops;		\
-	struct nl_cache *	ce_cache;	\
-	struct nl_list_head	ce_list;	\
-	int			ce_msgtype;	\
-	int			ce_flags;	\
-	uint32_t		ce_mask;
-
-/**
- * Return true if attribute is available in both objects
- * @arg A		an object
- * @arg B		another object
- * @arg ATTR		attribute bit
- *
- * @return True if the attribute is available, otherwise false is returned.
- */
-#define AVAILABLE(A, B, ATTR)		(((A)->ce_mask & (B)->ce_mask) & (ATTR))
-
-/**
- * Return true if attribute is available in only one of both objects
- * @arg A		an object
- * @arg B		another object
- * @arg ATTR		attribute bit
- *
- * @return True if the attribute is available in only one of both objects,
- * otherwise false is returned.
- */
-#define AVAILABLE_MISMATCH(A, B, ATTR)	(((A)->ce_mask ^ (B)->ce_mask) & (ATTR))
-
-/**
- * Return true if attributes mismatch
- * @arg A		an object
- * @arg B		another object
- * @arg ATTR		attribute bit
- * @arg EXPR		Comparison expression
- *
- * This function will check if the attribute in question is available
- * in both objects, if not this will count as a mismatch.
- *
- * If available the function will execute the expression which must
- * return true if the attributes mismatch.
- *
- * @return True if the attribute mismatch, or false if they match.
- */
-#define ATTR_MISMATCH(A, B, ATTR, EXPR)	(AVAILABLE_MISMATCH(A, B, ATTR) || \
-					 (AVAILABLE(A, B, ATTR) && (EXPR)))
-
-/**
- * Return attribute bit if attribute does not match
- * @arg LIST		list of attributes to be compared
- * @arg ATTR		attribute bit
- * @arg A		an object
- * @arg B		another object
- * @arg EXPR		Comparison expression
- *
- * This function will check if the attribute in question is available
- * in both objects, if not this will count as a mismatch.
- *
- * If available the function will execute the expression which must
- * return true if the attributes mismatch.
- *
- * In case the attributes mismatch, the attribute is returned, otherwise
- * 0 is returned.
- *
- * @code
- * diff |= ATTR_DIFF(attrs, MY_ATTR_FOO, a, b, a->foo != b->foo);
- * @endcode
- */
-#define ATTR_DIFF(LIST, ATTR, A, B, EXPR) \
-({	int diff = 0; \
-	if (((LIST) & (ATTR)) && ATTR_MISMATCH(A, B, ATTR, EXPR)) \
-		diff = ATTR; \
-	diff; })
-
-/**
- * Object Operations
- */
-struct nl_object_ops
-{
-	/**
-	 * Unique name of object type
-	 *
-	 * Must be in the form family/name, e.g. "route/addr"
-	 */
-	char *		oo_name;
-
-	/** Size of object including its header */
-	size_t		oo_size;
-
-	/* List of attributes needed to uniquely identify the object */
-	uint32_t	oo_id_attrs;
-
-	/**
-	 * Constructor function
-	 *
-	 * Will be called when a new object of this type is allocated.
-	 * Can be used to initialize members such as lists etc.
-	 */
-	void  (*oo_constructor)(struct nl_object *);
-
-	/**
-	 * Destructor function
-	 *
-	 * Will be called when an object is freed. Must free all
-	 * resources which may have been allocated as part of this
-	 * object.
-	 */
-	void  (*oo_free_data)(struct nl_object *);
-
-	/**
-	 * Cloning function
-	 *
-	 * Will be called when an object needs to be cloned. Please
-	 * note that the generic object code will make an exact
-	 * copy of the object first, therefore you only need to take
-	 * care of members which require reference counting etc.
-	 *
-	 * May return a negative error code to abort cloning.
-	 */
-	int  (*oo_clone)(struct nl_object *, struct nl_object *);
-
-	/**
-	 * Dumping functions
-	 *
-	 * Will be called when an object is dumped. The implementations
-	 * have to use nl_dump(), nl_dump_line(), and nl_new_line() to
-	 * dump objects.
-	 *
-	 * The functions must return the number of lines printed.
-	 */
-	void (*oo_dump[NL_DUMP_MAX+1])(struct nl_object *,
-				       struct nl_dump_params *);
-
-	/**
-	 * Comparison function
-	 *
-	 * Will be called when two objects of the same type are
-	 * compared. It takes the two objects in question, an object
-	 * specific bitmask defining which attributes should be
-	 * compared and flags to control the behaviour.
-	 *
-	 * The function must return a bitmask with the relevant bit
-	 * set for each attribute that mismatches.
-	 */
-	int   (*oo_compare)(struct nl_object *, struct nl_object *,
-			    uint32_t, int);
-
-
-	char *(*oo_attrs2str)(int, char *, size_t);
-};
-
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/object.h b/libnl_2/include/netlink/object.h
deleted file mode 100644
index ef1ed9f..0000000
--- a/libnl_2/include/netlink/object.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * netlink/object.c	Generic Cacheable Object
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_OBJECT_H_
-#define NETLINK_OBJECT_H_
-
-#include <netlink/netlink.h>
-#include <netlink/utils.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct nl_cache;
-struct nl_object;
-struct nl_object_ops;
-
-#define OBJ_CAST(ptr)		((struct nl_object *) (ptr))
-
-/* General */
-extern struct nl_object *	nl_object_alloc(struct nl_object_ops *);
-extern int			nl_object_alloc_name(const char *,
-						     struct nl_object **);
-extern void			nl_object_free(struct nl_object *);
-extern struct nl_object *	nl_object_clone(struct nl_object *obj);
-extern void			nl_object_get(struct nl_object *);
-extern void			nl_object_put(struct nl_object *);
-extern int			nl_object_shared(struct nl_object *);
-extern void			nl_object_dump(struct nl_object *,
-					       struct nl_dump_params *);
-extern int			nl_object_identical(struct nl_object *,
-						    struct nl_object *);
-extern uint32_t			nl_object_diff(struct nl_object *,
-					       struct nl_object *);
-extern int			nl_object_match_filter(struct nl_object *,
-						       struct nl_object *);
-extern char *			nl_object_attrs2str(struct nl_object *,
-						    uint32_t attrs, char *buf,
-						    size_t);
-extern char *			nl_object_attr_list(struct nl_object *,
-						    char *, size_t);
-
-/* Marks */
-extern void			nl_object_mark(struct nl_object *);
-extern void			nl_object_unmark(struct nl_object *);
-extern int			nl_object_is_marked(struct nl_object *);
-
-/* Access Functions */
-extern int			nl_object_get_refcnt(struct nl_object *);
-extern struct nl_cache *	nl_object_get_cache(struct nl_object *);
-static inline void *		nl_object_priv(struct nl_object *obj)
-{
-	return obj;
-}
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/route/addr.h b/libnl_2/include/netlink/route/addr.h
deleted file mode 100644
index 1381486..0000000
--- a/libnl_2/include/netlink/route/addr.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * netlink/route/addr.c		rtnetlink addr layer
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- * Copyright (c) 2003-2006 Baruch Even <baruch@ev-en.org>,
- *                         Mediatrix Telecom, inc. <ericb@mediatrix.com>
- */
-
-#ifndef NETADDR_ADDR_H_
-#define NETADDR_ADDR_H_
-
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-#include <netlink/addr.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct rtnl_addr;
-
-/* General */
-extern struct rtnl_addr *rtnl_addr_alloc(void);
-extern void	rtnl_addr_put(struct rtnl_addr *);
-
-extern int	rtnl_addr_alloc_cache(struct nl_sock *, struct nl_cache **);
-
-extern int	rtnl_addr_build_add_request(struct rtnl_addr *, int,
-					    struct nl_msg **);
-extern int	rtnl_addr_add(struct nl_sock *, struct rtnl_addr *, int);
-
-extern int	rtnl_addr_build_delete_request(struct rtnl_addr *, int,
-					       struct nl_msg **);
-extern int	rtnl_addr_delete(struct nl_sock *,
-				 struct rtnl_addr *, int);
-
-extern char *	rtnl_addr_flags2str(int, char *, size_t);
-extern int	rtnl_addr_str2flags(const char *);
-
-extern int	rtnl_addr_set_label(struct rtnl_addr *, const char *);
-extern char *	rtnl_addr_get_label(struct rtnl_addr *);
-
-extern void	rtnl_addr_set_ifindex(struct rtnl_addr *, int);
-extern int	rtnl_addr_get_ifindex(struct rtnl_addr *);
-
-extern void	rtnl_addr_set_family(struct rtnl_addr *, int);
-extern int	rtnl_addr_get_family(struct rtnl_addr *);
-
-extern void	rtnl_addr_set_prefixlen(struct rtnl_addr *, int);
-extern int	rtnl_addr_get_prefixlen(struct rtnl_addr *);
-
-extern void	rtnl_addr_set_scope(struct rtnl_addr *, int);
-extern int	rtnl_addr_get_scope(struct rtnl_addr *);
-
-extern void	rtnl_addr_set_flags(struct rtnl_addr *, unsigned int);
-extern void	rtnl_addr_unset_flags(struct rtnl_addr *, unsigned int);
-extern unsigned int rtnl_addr_get_flags(struct rtnl_addr *);
-
-extern int	rtnl_addr_set_local(struct rtnl_addr *,
-					    struct nl_addr *);
-extern struct nl_addr *rtnl_addr_get_local(struct rtnl_addr *);
-
-extern int	rtnl_addr_set_peer(struct rtnl_addr *, struct nl_addr *);
-extern struct nl_addr *rtnl_addr_get_peer(struct rtnl_addr *);
-
-extern int	rtnl_addr_set_broadcast(struct rtnl_addr *, struct nl_addr *);
-extern struct nl_addr *rtnl_addr_get_broadcast(struct rtnl_addr *);
-
-extern int	rtnl_addr_set_multicast(struct rtnl_addr *, struct nl_addr *);
-extern struct nl_addr *rtnl_addr_get_multicast(struct rtnl_addr *);
-
-extern int	rtnl_addr_set_anycast(struct rtnl_addr *, struct nl_addr *);
-extern struct nl_addr *rtnl_addr_get_anycast(struct rtnl_addr *);
-
-extern uint32_t rtnl_addr_get_valid_lifetime(struct rtnl_addr *);
-extern void	rtnl_addr_set_valid_lifetime(struct rtnl_addr *, uint32_t);
-extern uint32_t rtnl_addr_get_preferred_lifetime(struct rtnl_addr *);
-extern void	rtnl_addr_set_preferred_lifetime(struct rtnl_addr *, uint32_t);
-extern uint32_t rtnl_addr_get_create_time(struct rtnl_addr *);
-extern uint32_t rtnl_addr_get_last_update_time(struct rtnl_addr *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/route/class.h b/libnl_2/include/netlink/route/class.h
deleted file mode 100644
index 480095e..0000000
--- a/libnl_2/include/netlink/route/class.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * netlink/route/class.h       Classes
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_CLASS_H_
-#define NETLINK_CLASS_H_
-
-#include <netlink/netlink.h>
-#include <netlink/route/tc.h>
-#include <netlink/route/qdisc.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct rtnl_class;
-
-extern struct nl_object_ops class_obj_ops;
-
-extern struct rtnl_class *	rtnl_class_alloc(void);
-extern void		rtnl_class_put(struct rtnl_class *);
-extern int		rtnl_class_alloc_cache(struct nl_sock *, int,
-					       struct nl_cache **);
-extern struct rtnl_class *rtnl_class_get(struct nl_cache *, int, uint32_t);
-
-/* leaf qdisc access */
-extern struct rtnl_qdisc *	rtnl_class_leaf_qdisc(struct rtnl_class *,
-						      struct nl_cache *);
-
-extern int		rtnl_class_build_add_request(struct rtnl_class *, int,
-						     struct nl_msg **);
-extern int		rtnl_class_add(struct nl_sock *, struct rtnl_class *,
-				       int);
-
-extern int	rtnl_class_build_delete_request(struct rtnl_class *,
-											struct nl_msg **);
-extern int	rtnl_class_delete(struct nl_sock *, struct rtnl_class *);
-
-extern void		rtnl_class_set_ifindex(struct rtnl_class *, int);
-extern int		rtnl_class_get_ifindex(struct rtnl_class *);
-extern void		rtnl_class_set_handle(struct rtnl_class *, uint32_t);
-extern uint32_t		rtnl_class_get_handle(struct rtnl_class *);
-extern void		rtnl_class_set_parent(struct rtnl_class *, uint32_t);
-extern uint32_t		rtnl_class_get_parent(struct rtnl_class *);
-extern void		rtnl_class_set_kind(struct rtnl_class *, const char *);
-extern char *		rtnl_class_get_kind(struct rtnl_class *);
-extern uint64_t		rtnl_class_get_stat(struct rtnl_class *,
-					    enum rtnl_tc_stats_id);
-
-/* iterators */
-extern void		rtnl_class_foreach_child(struct rtnl_class *,
-						 struct nl_cache *,
-						 void (*cb)(struct nl_object *,
-						 	    void *),
-						 void *);
-extern void		rtnl_class_foreach_cls(struct rtnl_class *,
-					       struct nl_cache *,
-					       void (*cb)(struct nl_object *,
-							  void *),
-					       void *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/route/classifier.h b/libnl_2/include/netlink/route/classifier.h
deleted file mode 100644
index d9c3d21..0000000
--- a/libnl_2/include/netlink/route/classifier.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * netlink/route/classifier.h       Classifiers
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2009 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_CLASSIFIER_H_
-#define NETLINK_CLASSIFIER_H_
-
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-#include <netlink/route/tc.h>
-#include <netlink/utils.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern struct nl_object_ops cls_obj_ops;
-
-extern struct rtnl_cls *rtnl_cls_alloc(void);
-extern void	rtnl_cls_put(struct rtnl_cls *);
-
-extern int	rtnl_cls_alloc_cache(struct nl_sock *, int, uint32_t,
-				     struct nl_cache **);
-
-extern int	rtnl_cls_build_add_request(struct rtnl_cls *, int,
-					   struct nl_msg **);
-extern int	rtnl_cls_add(struct nl_sock *, struct rtnl_cls *, int);
-
-extern int	rtnl_cls_build_change_request(struct rtnl_cls *, int,
-					      struct nl_msg **);
-extern int	rtnl_cls_build_delete_request(struct rtnl_cls *, int,
-					      struct nl_msg **);
-extern int	rtnl_cls_delete(struct nl_sock *, struct rtnl_cls *, int);
-
-extern void rtnl_cls_set_ifindex(struct rtnl_cls *, int);
-extern int rtnl_cls_get_ifindex(struct rtnl_cls *);
-extern void rtnl_cls_set_handle(struct rtnl_cls *, uint32_t);
-extern void rtnl_cls_set_parent(struct rtnl_cls *, uint32_t);
-extern uint32_t rtnl_cls_get_parent(struct rtnl_cls *);
-extern int rtnl_cls_set_kind(struct rtnl_cls *, const char *);
-extern struct rtnl_cls_ops *rtnl_cls_get_ops(struct rtnl_cls *);
-
-extern void rtnl_cls_set_prio(struct rtnl_cls *, uint16_t);
-extern uint16_t rtnl_cls_get_prio(struct rtnl_cls *);
-
-extern void rtnl_cls_set_protocol(struct rtnl_cls *, uint16_t);
-extern uint16_t rtnl_cls_get_protocol(struct rtnl_cls *);
-
-extern void *rtnl_cls_data(struct rtnl_cls *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/route/cls/ematch.h b/libnl_2/include/netlink/route/cls/ematch.h
deleted file mode 100644
index c4292bf..0000000
--- a/libnl_2/include/netlink/route/cls/ematch.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * netlink/route/cls/ematch.h		Extended Matches
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_CLS_EMATCH_H_
-#define NETLINK_CLS_EMATCH_H_
-
-#include <netlink/netlink.h>
-#include <netlink/route/classifier.h>
-#include <linux/pkt_cls.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct rtnl_ematch;
-struct rtnl_ematch_tree;
-
-struct rtnl_ematch_ops
-{
-	int				eo_kind;
-	const char *			eo_name;
-	size_t				eo_datalen;
-
-	int			      (*eo_parse)(struct rtnl_ematch *,
-						  void *, size_t);
-	void			      (*eo_dump)(struct rtnl_ematch *,
-						 struct nl_dump_params *);
-	struct nl_list_head		eo_list;
-};
-
-extern int	rtnl_ematch_register(struct rtnl_ematch_ops *);
-extern int	rtnl_ematch_unregister(struct rtnl_ematch_ops *);
-
-extern struct rtnl_ematch_ops *
-		rtnl_ematch_lookup_ops(int);
-extern struct rtnl_ematch_ops *
-		rtnl_ematch_lookup_ops_name(const char *);
-
-extern struct rtnl_ematch *
-		rtnl_ematch_alloc(struct rtnl_ematch_ops *);
-extern void	rtnl_ematch_add_child(struct rtnl_ematch *,
-				      struct rtnl_ematch *);
-extern void	rtnl_ematch_unlink(struct rtnl_ematch *);
-extern void	rtnl_ematch_free(struct rtnl_ematch *);
-
-extern void *	rtnl_ematch_data(struct rtnl_ematch *);
-extern void	rtnl_ematch_set_flags(struct rtnl_ematch *, uint16_t);
-extern void	rtnl_ematch_unset_flags(struct rtnl_ematch *, uint16_t);
-extern uint16_t	rtnl_ematch_get_flags(struct rtnl_ematch *);
-
-extern struct rtnl_ematch_tree *
-		rtnl_ematch_tree_alloc(uint16_t);
-extern void	rtnl_ematch_tree_free(struct rtnl_ematch_tree *);
-
-extern int	rtnl_ematch_parse(struct nlattr *, struct rtnl_ematch_tree **);
-extern void	rtnl_ematch_tree_add_tail(struct rtnl_ematch_tree *,
-					  struct rtnl_ematch *);
-extern void	rtnl_ematch_tree_dump(struct rtnl_ematch_tree *,
-				      struct nl_dump_params *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/route/link.h b/libnl_2/include/netlink/route/link.h
deleted file mode 100644
index 4b630f7..0000000
--- a/libnl_2/include/netlink/route/link.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * netlink/route/link.h		Links (Interfaces)
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_LINK_H_
-#define NETLINK_LINK_H_
-
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-#include <netlink/addr.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct rtnl_link;
-
-enum rtnl_link_st {
-	RTNL_LINK_RX_PACKETS,
-	RTNL_LINK_TX_PACKETS,
-	RTNL_LINK_RX_BYTES,
-	RTNL_LINK_TX_BYTES,
-	RTNL_LINK_RX_ERRORS,
-	RTNL_LINK_TX_ERRORS,
-	RTNL_LINK_RX_DROPPED,
-	RTNL_LINK_TX_DROPPED,
-	RTNL_LINK_RX_COMPRESSED,
-	RTNL_LINK_TX_COMPRESSED,
-	RTNL_LINK_RX_FIFO_ERR,
-	RTNL_LINK_TX_FIFO_ERR,
-	RTNL_LINK_RX_LEN_ERR,
-	RTNL_LINK_RX_OVER_ERR,
-	RTNL_LINK_RX_CRC_ERR,
-	RTNL_LINK_RX_FRAME_ERR,
-	RTNL_LINK_RX_MISSED_ERR,
-	RTNL_LINK_TX_ABORT_ERR,
-	RTNL_LINK_TX_CARRIER_ERR,
-	RTNL_LINK_TX_HBEAT_ERR,
-	RTNL_LINK_TX_WIN_ERR,
-	RTNL_LINK_TX_COLLISIONS,
-	RTNL_LINK_MULTICAST,
-	__RTNL_LINK_STATS_MAX,
-};
-
-#define RTNL_LINK_STATS_MAX (__RTNL_LINK_STATS_MAX - 1)
-
-/* link object allocation/freeage */
-extern struct rtnl_link *rtnl_link_alloc(void);
-extern void	rtnl_link_put(struct rtnl_link *);
-extern void	rtnl_link_free(struct rtnl_link *);
-
-/* link cache management */
-extern int	rtnl_link_alloc_cache(struct nl_sock *, struct nl_cache **);
-extern struct rtnl_link *rtnl_link_get(struct nl_cache *, int);
-extern struct rtnl_link *rtnl_link_get_by_name(struct nl_cache *, const char *);
-
-
-extern int	rtnl_link_build_change_request(struct rtnl_link *,
-					       struct rtnl_link *, int,
-					       struct nl_msg **);
-extern int	rtnl_link_change(struct nl_sock *, struct rtnl_link *,
-				 struct rtnl_link *, int);
-
-/* Name <-> Index Translations */
-extern char * 	rtnl_link_i2name(struct nl_cache *, int, char *, size_t);
-extern int	rtnl_link_name2i(struct nl_cache *, const char *);
-
-/* Name <-> Statistic Translations */
-extern char *	rtnl_link_stat2str(int, char *, size_t);
-extern int	rtnl_link_str2stat(const char *);
-
-/* Link Flags Translations */
-extern char *	rtnl_link_flags2str(int, char *, size_t);
-extern int	rtnl_link_str2flags(const char *);
-
-extern char *	rtnl_link_operstate2str(int, char *, size_t);
-extern int	rtnl_link_str2operstate(const char *);
-
-extern char *	rtnl_link_mode2str(int, char *, size_t);
-extern int	rtnl_link_str2mode(const char *);
-
-/* Access Functions */
-extern void	rtnl_link_set_qdisc(struct rtnl_link *, const char *);
-extern char *	rtnl_link_get_qdisc(struct rtnl_link *);
-
-extern void	rtnl_link_set_name(struct rtnl_link *, const char *);
-extern char *	rtnl_link_get_name(struct rtnl_link *);
-
-extern void	rtnl_link_set_flags(struct rtnl_link *, unsigned int);
-extern void	rtnl_link_unset_flags(struct rtnl_link *, unsigned int);
-extern unsigned int rtnl_link_get_flags(struct rtnl_link *);
-
-extern void	rtnl_link_set_mtu(struct rtnl_link *, unsigned int);
-extern unsigned int rtnl_link_get_mtu(struct rtnl_link *);
-
-extern void	rtnl_link_set_txqlen(struct rtnl_link *, unsigned int);
-extern unsigned int rtnl_link_get_txqlen(struct rtnl_link *);
-
-extern void	rtnl_link_set_weight(struct rtnl_link *, unsigned int);
-extern unsigned int rtnl_link_get_weight(struct rtnl_link *);
-
-extern void	rtnl_link_set_ifindex(struct rtnl_link *, int);
-extern int	rtnl_link_get_ifindex(struct rtnl_link *);
-
-extern void	rtnl_link_set_family(struct rtnl_link *, int);
-extern int	rtnl_link_get_family(struct rtnl_link *);
-
-extern void	rtnl_link_set_arptype(struct rtnl_link *, unsigned int);
-extern unsigned int rtnl_link_get_arptype(struct rtnl_link *);
-
-extern void	rtnl_link_set_addr(struct rtnl_link *, struct nl_addr *);
-extern struct nl_addr *rtnl_link_get_addr(struct rtnl_link *);
-
-extern void	rtnl_link_set_broadcast(struct rtnl_link *, struct nl_addr *);
-extern struct nl_addr *rtnl_link_get_broadcast(struct rtnl_link *);
-
-extern void	rtnl_link_set_link(struct rtnl_link *, int);
-extern int	rtnl_link_get_link(struct rtnl_link *);
-
-extern void	rtnl_link_set_master(struct rtnl_link *, int);
-extern int	rtnl_link_get_master(struct rtnl_link *);
-
-extern void	rtnl_link_set_operstate(struct rtnl_link *, uint8_t);
-extern uint8_t	rtnl_link_get_operstate(struct rtnl_link *);
-
-extern void	rtnl_link_set_linkmode(struct rtnl_link *, uint8_t);
-extern uint8_t	rtnl_link_get_linkmode(struct rtnl_link *);
-
-extern uint64_t rtnl_link_get_stat(struct rtnl_link *, int);
-
-extern int	rtnl_link_set_info_type(struct rtnl_link *, const char *);
-extern char *	rtnl_link_get_info_type(struct rtnl_link *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/route/neighbour.h b/libnl_2/include/netlink/route/neighbour.h
deleted file mode 100644
index 698539a..0000000
--- a/libnl_2/include/netlink/route/neighbour.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * netlink/route/neighbour.h	Neighbours
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_NEIGHBOUR_H_
-#define NETLINK_NEIGHBOUR_H_
-
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-#include <netlink/addr.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct rtnl_neigh;
-
-extern struct rtnl_neigh *rtnl_neigh_alloc(void);
-extern void	rtnl_neigh_put(struct rtnl_neigh *);
-
-extern int	rtnl_neigh_alloc_cache(struct nl_sock *, struct nl_cache **);
-extern struct rtnl_neigh *rtnl_neigh_get(struct nl_cache *, int,
-					       struct nl_addr *);
-
-extern char *	rtnl_neigh_state2str(int, char *, size_t);
-extern int	rtnl_neigh_str2state(const char *);
-
-extern char *	rtnl_neigh_flags2str(int, char *, size_t);
-extern int	rtnl_neigh_str2flag(const char *);
-
-extern int	rtnl_neigh_add(struct nl_sock *, struct rtnl_neigh *, int);
-extern int	rtnl_neigh_build_add_request(struct rtnl_neigh *, int,
-					     struct nl_msg **);
-
-extern int	rtnl_neigh_delete(struct nl_sock *, struct rtnl_neigh *, int);
-extern int	rtnl_neigh_build_delete_request(struct rtnl_neigh *, int,
-						struct nl_msg **);
-
-extern void			rtnl_neigh_set_state(struct rtnl_neigh *, int);
-extern int			rtnl_neigh_get_state(struct rtnl_neigh *);
-extern void			rtnl_neigh_unset_state(struct rtnl_neigh *,
-						       int);
-
-extern void			rtnl_neigh_set_flags(struct rtnl_neigh *,
-						     unsigned int);
-extern void			rtnl_neigh_unset_flags(struct rtnl_neigh *,
-						       unsigned int);
-extern unsigned int		rtnl_neigh_get_flags(struct rtnl_neigh *);
-
-extern void			rtnl_neigh_set_ifindex(struct rtnl_neigh *,
-						       int);
-extern int			rtnl_neigh_get_ifindex(struct rtnl_neigh *);
-
-extern void			rtnl_neigh_set_lladdr(struct rtnl_neigh *,
-						      struct nl_addr *);
-extern struct nl_addr *		rtnl_neigh_get_lladdr(struct rtnl_neigh *);
-
-extern int			rtnl_neigh_set_dst(struct rtnl_neigh *,
-						   struct nl_addr *);
-extern struct nl_addr *		rtnl_neigh_get_dst(struct rtnl_neigh *);
-
-extern void			rtnl_neigh_set_type(struct rtnl_neigh *, int);
-extern int			rtnl_neigh_get_type(struct rtnl_neigh *);
-
-extern void			rtnl_neigh_set_family(struct rtnl_neigh *, int);
-extern int			rtnl_neigh_get_family(struct rtnl_neigh *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/route/neightbl.h b/libnl_2/include/netlink/route/neightbl.h
deleted file mode 100644
index 412c3e9..0000000
--- a/libnl_2/include/netlink/route/neightbl.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * netlink/route/neightbl.h	Neighbour Tables
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_NEIGHTBL_H_
-#define NETLINK_NEIGHTBL_H_
-
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-#include <netlink/addr.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct rtnl_neightbl;
-
-extern struct rtnl_neightbl *rtnl_neightbl_alloc(void);
-extern void rtnl_neightbl_put(struct rtnl_neightbl *);
-extern void rtnl_neightbl_free(struct rtnl_neightbl *);
-extern int rtnl_neightbl_alloc_cache(struct nl_sock *, struct nl_cache **);
-extern struct rtnl_neightbl *rtnl_neightbl_get(struct nl_cache *,
-					       const char *, int);
-extern void rtnl_neightbl_dump(struct rtnl_neightbl *, FILE *,
-			       struct nl_dump_params *);
-
-extern int rtnl_neightbl_build_change_request(struct rtnl_neightbl *,
-					      struct rtnl_neightbl *,
-					      struct nl_msg **);
-extern int rtnl_neightbl_change(struct nl_sock *, struct rtnl_neightbl *,
-				struct rtnl_neightbl *);
-
-extern void rtnl_neightbl_set_family(struct rtnl_neightbl *, int);
-extern void rtnl_neightbl_set_gc_tresh1(struct rtnl_neightbl *, int);
-extern void rtnl_neightbl_set_gc_tresh2(struct rtnl_neightbl *, int);
-extern void rtnl_neightbl_set_gc_tresh3(struct rtnl_neightbl *, int);
-extern void rtnl_neightbl_set_name(struct rtnl_neightbl *, const char *);
-extern void rtnl_neightbl_set_dev(struct rtnl_neightbl *, int);
-extern void rtnl_neightbl_set_queue_len(struct rtnl_neightbl *, int);
-extern void rtnl_neightbl_set_proxy_queue_len(struct rtnl_neightbl *, int);
-extern void rtnl_neightbl_set_app_probes(struct rtnl_neightbl *, int);
-extern void rtnl_neightbl_set_ucast_probes(struct rtnl_neightbl *, int);
-extern void rtnl_neightbl_set_mcast_probes(struct rtnl_neightbl *, int);
-extern void rtnl_neightbl_set_base_reachable_time(struct rtnl_neightbl *,
-						  uint64_t);
-extern void rtnl_neightbl_set_retrans_time(struct rtnl_neightbl *, uint64_t);
-extern void rtnl_neightbl_set_gc_stale_time(struct rtnl_neightbl *, uint64_t);
-extern void rtnl_neightbl_set_delay_probe_time(struct rtnl_neightbl *,
-					       uint64_t);
-extern void rtnl_neightbl_set_anycast_delay(struct rtnl_neightbl *, uint64_t);
-extern void rtnl_neightbl_set_proxy_delay(struct rtnl_neightbl *, uint64_t);
-extern void rtnl_neightbl_set_locktime(struct rtnl_neightbl *, uint64_t);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/route/nexthop.h b/libnl_2/include/netlink/route/nexthop.h
deleted file mode 100644
index 2aa44dc..0000000
--- a/libnl_2/include/netlink/route/nexthop.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * netlink/route/nexthop.h	Routing Nexthop
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_ROUTE_NEXTHOP_H_
-#define NETLINK_ROUTE_NEXTHOP_H_
-
-#include <netlink/netlink.h>
-#include <netlink/addr.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct rtnl_nexthop;
-
-enum {
-	NH_DUMP_FROM_ONELINE = -2,
-	NH_DUMP_FROM_DETAILS = -1,
-	NH_DUMP_FROM_ENV = 0,
-	/* > 0 reserved for nexthop index */
-};
-
-extern struct rtnl_nexthop * rtnl_route_nh_alloc(void);
-extern struct rtnl_nexthop * rtnl_route_nh_clone(struct rtnl_nexthop *);
-extern void		rtnl_route_nh_free(struct rtnl_nexthop *);
-
-extern int		rtnl_route_nh_compare(struct rtnl_nexthop *,
-					      struct rtnl_nexthop *,
-					      uint32_t, int);
-
-extern void		rtnl_route_nh_dump(struct rtnl_nexthop *,
-					   struct nl_dump_params *);
-
-extern void		rtnl_route_nh_set_weight(struct rtnl_nexthop *, uint8_t);
-extern uint8_t		rtnl_route_nh_get_weight(struct rtnl_nexthop *);
-extern void		rtnl_route_nh_set_ifindex(struct rtnl_nexthop *, int);
-extern int		rtnl_route_nh_get_ifindex(struct rtnl_nexthop *);
-extern void		rtnl_route_nh_set_gateway(struct rtnl_nexthop *,
-						  struct nl_addr *);
-extern struct nl_addr *	rtnl_route_nh_get_gateway(struct rtnl_nexthop *);
-extern void		rtnl_route_nh_set_flags(struct rtnl_nexthop *,
-						unsigned int);
-extern void		rtnl_route_nh_unset_flags(struct rtnl_nexthop *,
-						  unsigned int);
-extern unsigned int	rtnl_route_nh_get_flags(struct rtnl_nexthop *);
-extern void		rtnl_route_nh_set_realms(struct rtnl_nexthop *,
-						 uint32_t);
-extern uint32_t		rtnl_route_nh_get_realms(struct rtnl_nexthop *);
-
-extern char *		rtnl_route_nh_flags2str(int, char *, size_t);
-extern int		rtnl_route_nh_str2flags(const char *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/route/qdisc.h b/libnl_2/include/netlink/route/qdisc.h
deleted file mode 100644
index 5acd6e1..0000000
--- a/libnl_2/include/netlink/route/qdisc.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * netlink/route/qdisc.h         Queueing Disciplines
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_QDISC_H_
-#define NETLINK_QDISC_H_
-
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-#include <netlink/route/tc.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct rtnl_qdisc;
-
-extern struct nl_object_ops qdisc_obj_ops;
-
-extern struct rtnl_qdisc *rtnl_qdisc_alloc(void);
-extern void	rtnl_qdisc_put(struct rtnl_qdisc *);
-
-extern int	rtnl_qdisc_alloc_cache(struct nl_sock *, struct nl_cache **);
-extern struct rtnl_qdisc *rtnl_qdisc_get(struct nl_cache *, int, uint32_t);
-extern struct rtnl_qdisc *rtnl_qdisc_get_by_parent(struct nl_cache *,
-						   int, uint32_t);
-
-extern int	rtnl_qdisc_build_add_request(struct rtnl_qdisc *, int,
-					     struct nl_msg **);
-extern int	rtnl_qdisc_add(struct nl_sock *, struct rtnl_qdisc *, int);
-
-extern int	rtnl_qdisc_build_change_request(struct rtnl_qdisc *,
-						struct rtnl_qdisc *,
-						struct nl_msg **);
-extern int	rtnl_qdisc_change(struct nl_sock *, struct rtnl_qdisc *,
-				  struct rtnl_qdisc *);
-
-extern int	rtnl_qdisc_build_delete_request(struct rtnl_qdisc *,
-						struct nl_msg **);
-extern int	rtnl_qdisc_delete(struct nl_sock *, struct rtnl_qdisc *);
-
-extern void	rtnl_qdisc_set_ifindex(struct rtnl_qdisc *, int);
-extern int	rtnl_qdisc_get_ifindex(struct rtnl_qdisc *);
-extern void	rtnl_qdisc_set_handle(struct rtnl_qdisc *, uint32_t);
-extern uint32_t	rtnl_qdisc_get_handle(struct rtnl_qdisc *);
-extern void	rtnl_qdisc_set_parent(struct rtnl_qdisc *, uint32_t);
-extern uint32_t	rtnl_qdisc_get_parent(struct rtnl_qdisc *);
-extern void	rtnl_qdisc_set_kind(struct rtnl_qdisc *, const char *);
-extern char *	rtnl_qdisc_get_kind(struct rtnl_qdisc *);
-extern uint64_t	rtnl_qdisc_get_stat(struct rtnl_qdisc *, enum rtnl_tc_stats_id);
-
-extern void	rtnl_qdisc_foreach_child(struct rtnl_qdisc *, struct nl_cache *,
-					 void (*cb)(struct nl_object *, void *),
-					 void *);
-
-extern void	rtnl_qdisc_foreach_cls(struct rtnl_qdisc *, struct nl_cache *,
-				       void (*cb)(struct nl_object *, void *),
-				       void *);
-
-extern struct nl_msg *	rtnl_qdisc_get_opts(struct rtnl_qdisc *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/route/route.h b/libnl_2/include/netlink/route/route.h
deleted file mode 100644
index 5729cd7..0000000
--- a/libnl_2/include/netlink/route/route.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * netlink/route/route.h	Routes
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_ROUTE_H_
-#define NETLINK_ROUTE_H_
-
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-#include <netlink/addr.h>
-#include <netlink/data.h>
-#include <netlink/route/nexthop.h>
-#include <netlink/route/rtnl.h>
-#include <linux/in_route.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* flags */
-#define ROUTE_CACHE_CONTENT	1
-
-struct rtnl_route;
-
-struct rtnl_rtcacheinfo
-{
-	uint32_t	rtci_clntref;
-	uint32_t	rtci_last_use;
-	uint32_t	rtci_expires;
-	int32_t		rtci_error;
-	uint32_t	rtci_used;
-	uint32_t	rtci_id;
-	uint32_t	rtci_ts;
-	uint32_t	rtci_tsage;
-};
-
-extern struct nl_object_ops route_obj_ops;
-
-extern struct rtnl_route *	rtnl_route_alloc(void);
-extern void	rtnl_route_put(struct rtnl_route *);
-extern int	rtnl_route_alloc_cache(struct nl_sock *, int, int,
-				       struct nl_cache **);
-
-extern void	rtnl_route_get(struct rtnl_route *);
-extern void	rtnl_route_put(struct rtnl_route *);
-
-extern int	rtnl_route_parse(struct nlmsghdr *, struct rtnl_route **);
-extern int	rtnl_route_build_msg(struct nl_msg *, struct rtnl_route *);
-
-extern int	rtnl_route_build_add_request(struct rtnl_route *, int,
-					     struct nl_msg **);
-extern int	rtnl_route_add(struct nl_sock *, struct rtnl_route *, int);
-extern int	rtnl_route_build_del_request(struct rtnl_route *, int,
-					     struct nl_msg **);
-extern int	rtnl_route_delete(struct nl_sock *, struct rtnl_route *, int);
-
-extern void	rtnl_route_set_table(struct rtnl_route *, uint32_t);
-extern uint32_t	rtnl_route_get_table(struct rtnl_route *);
-extern void	rtnl_route_set_scope(struct rtnl_route *, uint8_t);
-extern uint8_t	rtnl_route_get_scope(struct rtnl_route *);
-extern void	rtnl_route_set_tos(struct rtnl_route *, uint8_t);
-extern uint8_t	rtnl_route_get_tos(struct rtnl_route *);
-extern void	rtnl_route_set_protocol(struct rtnl_route *, uint8_t);
-extern uint8_t	rtnl_route_get_protocol(struct rtnl_route *);
-extern void	rtnl_route_set_priority(struct rtnl_route *, uint32_t);
-extern uint32_t	rtnl_route_get_priority(struct rtnl_route *);
-extern int	rtnl_route_set_family(struct rtnl_route *, uint8_t);
-extern uint8_t	rtnl_route_get_family(struct rtnl_route *);
-extern int	rtnl_route_set_type(struct rtnl_route *, uint8_t);
-extern uint8_t	rtnl_route_get_type(struct rtnl_route *);
-extern void	rtnl_route_set_flags(struct rtnl_route *, uint32_t);
-extern void	rtnl_route_unset_flags(struct rtnl_route *, uint32_t);
-extern uint32_t	rtnl_route_get_flags(struct rtnl_route *);
-extern int	rtnl_route_set_metric(struct rtnl_route *, int, unsigned int);
-extern int	rtnl_route_unset_metric(struct rtnl_route *, int);
-extern int	rtnl_route_get_metric(struct rtnl_route *, int, uint32_t *);
-extern int	rtnl_route_set_dst(struct rtnl_route *, struct nl_addr *);
-extern struct nl_addr *rtnl_route_get_dst(struct rtnl_route *);
-extern int	rtnl_route_set_src(struct rtnl_route *, struct nl_addr *);
-extern struct nl_addr *rtnl_route_get_src(struct rtnl_route *);
-extern int	rtnl_route_set_pref_src(struct rtnl_route *, struct nl_addr *);
-extern struct nl_addr *rtnl_route_get_pref_src(struct rtnl_route *);
-extern void	rtnl_route_set_iif(struct rtnl_route *, int);
-extern int	rtnl_route_get_iif(struct rtnl_route *);
-extern int	rtnl_route_get_src_len(struct rtnl_route *);
-
-extern void	rtnl_route_add_nexthop(struct rtnl_route *,
-				       struct rtnl_nexthop *);
-extern void	rtnl_route_remove_nexthop(struct rtnl_route *,
-					  struct rtnl_nexthop *);
-extern struct nl_list_head *rtnl_route_get_nexthops(struct rtnl_route *);
-extern int	rtnl_route_get_nnexthops(struct rtnl_route *);
-
-extern void	rtnl_route_foreach_nexthop(struct rtnl_route *r,
-                                 void (*cb)(struct rtnl_nexthop *, void *),
-                                 void *arg);
-
-extern struct rtnl_nexthop * rtnl_route_nexthop_n(struct rtnl_route *r, int n);
-
-extern int	rtnl_route_guess_scope(struct rtnl_route *);
-
-extern char *	rtnl_route_table2str(int, char *, size_t);
-extern int	rtnl_route_str2table(const char *);
-extern int	rtnl_route_read_table_names(const char *);
-
-extern char *	rtnl_route_proto2str(int, char *, size_t);
-extern int	rtnl_route_str2proto(const char *);
-extern int	rtnl_route_read_protocol_names(const char *);
-
-extern char *	rtnl_route_metric2str(int, char *, size_t);
-extern int	rtnl_route_str2metric(const char *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/route/rtnl.h b/libnl_2/include/netlink/route/rtnl.h
deleted file mode 100644
index f551a5d..0000000
--- a/libnl_2/include/netlink/route/rtnl.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * netlink/route/rtnl.h		Routing Netlink
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_RTNL_H_
-#define NETLINK_RTNL_H_
-
-#include <netlink/netlink.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @name Realms
- * @{
- */
-
-/**
- * Mask specying the size of each realm part
- * @ingroup rtnl
- */
-#define RTNL_REALM_MASK (0xFFFF)
-
-/**
- * Extract FROM realm from a realms field
- */
-#define RTNL_REALM_FROM(realm) ((realm) >> 16)
-
-/**
- * Extract TO realm from a realms field
- */
-#define RTNL_REALM_TO(realm) ((realm) & RTNL_REALM_MASK)
-
-/**
- * Build a realms field
- */
-#define RTNL_MAKE_REALM(from, to) \
-	((RTNL_REALM_TO(from) << 16) & RTNL_REALM_TO(to))
-
-/** @} */
-
-
-/* General */
-extern int		nl_rtgen_request(struct nl_sock *, int, int, int);
-
-/* Routing Type Translations */
-extern char *		nl_rtntype2str(int, char *, size_t);
-extern int		nl_str2rtntype(const char *);
-
-/* Scope Translations */
-extern char *		rtnl_scope2str(int, char *, size_t);
-extern int		rtnl_str2scope(const char *);
-
-/* Realms Translations */
-extern char *		rtnl_realms2str(uint32_t, char *, size_t);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/route/rule.h b/libnl_2/include/netlink/route/rule.h
deleted file mode 100644
index 928dc0f..0000000
--- a/libnl_2/include/netlink/route/rule.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * netlink/route/rule.h		Rules
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_RULE_H_
-#define NETLINK_RULE_H_
-
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-#include <netlink/addr.h>
-#include <netlink/route/route.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct rtnl_rule;
-
-/* General */
-extern struct rtnl_rule *	rtnl_rule_alloc(void);
-extern void			rtnl_rule_put(struct rtnl_rule *);
-
-extern int	rtnl_rule_alloc_cache(struct nl_sock *, int,
-				      struct nl_cache **);
-extern void rtnl_rule_dump(struct rtnl_rule *, FILE *, struct nl_dump_params *);
-
-extern int	rtnl_rule_build_add_request(struct rtnl_rule *, int,
-					    struct nl_msg **);
-extern int rtnl_rule_add(struct nl_sock *, struct rtnl_rule *, int);
-extern int	rtnl_rule_build_delete_request(struct rtnl_rule *, int,
-					       struct nl_msg **);
-extern int rtnl_rule_delete(struct nl_sock *, struct rtnl_rule *, int);
-
-
-/* attribute modification */
-extern void		rtnl_rule_set_family(struct rtnl_rule *, int);
-extern int		rtnl_rule_get_family(struct rtnl_rule *);
-extern void		rtnl_rule_set_prio(struct rtnl_rule *, int);
-extern int		rtnl_rule_get_prio(struct rtnl_rule *);
-extern void		rtnl_rule_set_mark(struct rtnl_rule *, uint64_t);
-extern uint64_t		rtnl_rule_get_mark(struct rtnl_rule *);
-extern void		rtnl_rule_set_table(struct rtnl_rule *, int);
-extern int		rtnl_rule_get_table(struct rtnl_rule *);
-extern void		rtnl_rule_set_dsfield(struct rtnl_rule *, int);
-extern int		rtnl_rule_get_dsfield(struct rtnl_rule *);
-extern int		rtnl_rule_set_src(struct rtnl_rule *, struct nl_addr *);
-extern struct nl_addr *	rtnl_rule_get_src(struct rtnl_rule *);
-extern int		rtnl_rule_set_dst(struct rtnl_rule *, struct nl_addr *);
-extern struct nl_addr *	rtnl_rule_get_dst(struct rtnl_rule *);
-extern void		rtnl_rule_set_src_len(struct rtnl_rule *, int);
-extern int		rtnl_rule_get_src_len(struct rtnl_rule *);
-extern void		rtnl_rule_set_dst_len(struct rtnl_rule *, int);
-extern int		rtnl_rule_get_dst_len(struct rtnl_rule *);
-
-extern void		rtnl_rule_set_action(struct rtnl_rule *, int);
-extern int		rtnl_rule_get_action(struct rtnl_rule *);
-
-extern int		rtnl_rule_set_iif(struct rtnl_rule *, const char *);
-extern char *		rtnl_rule_get_iif(struct rtnl_rule *);
-
-extern void		rtnl_rule_set_classid(struct rtnl_rule *, uint32_t);
-extern uint32_t		rtnl_rule_get_classid(struct rtnl_rule *);
-
-extern void		rtnl_rule_set_realms(struct rtnl_rule *, uint32_t);
-extern uint32_t		rtnl_rule_get_realms(struct rtnl_rule *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/route/tc.h b/libnl_2/include/netlink/route/tc.h
deleted file mode 100644
index 3cb876f..0000000
--- a/libnl_2/include/netlink/route/tc.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * netlink/route/tc.h		Traffic Control
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_TC_H_
-#define NETLINK_TC_H_
-
-#include <netlink/netlink.h>
-#include <netlink/cache.h>
-#include <netlink/data.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * TC statistics identifiers
- * @ingroup tc
- */
-enum rtnl_tc_stats_id {
-	RTNL_TC_PACKETS,	/**< Packets seen */
-	RTNL_TC_BYTES,		/**< Bytes seen */
-	RTNL_TC_RATE_BPS,	/**< Current bits/s (rate estimator) */
-	RTNL_TC_RATE_PPS,	/**< Current packet/s (rate estimator) */
-	RTNL_TC_QLEN,		/**< Queue length */
-	RTNL_TC_BACKLOG,	/**< Backlog length */
-	RTNL_TC_DROPS,		/**< Packets dropped */
-	RTNL_TC_REQUEUES,	/**< Number of requeues */
-	RTNL_TC_OVERLIMITS,	/**< Number of overlimits */
-	__RTNL_TC_STATS_MAX,
-};
-
-#define RTNL_TC_STATS_MAX (__RTNL_TC_STATS_MAX - 1)
-
-extern int rtnl_tc_calc_txtime(int, int);
-extern int rtnl_tc_calc_bufsize(int, int);
-extern int rtnl_tc_calc_cell_log(int);
-
-/**
- * Number of entries in a transmission time lookup table
- * @ingroup tc
- */
-#define RTNL_TC_RTABLE_SIZE	256
-
-extern int rtnl_tc_build_rate_table(uint32_t *, uint8_t, uint8_t, int, int);
-
-
-/* TC Handle Translations */
-extern char *		rtnl_tc_handle2str(uint32_t, char *, size_t);
-extern int		rtnl_tc_str2handle(const char *, uint32_t *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/socket.h b/libnl_2/include/netlink/socket.h
deleted file mode 100644
index 7e71aed..0000000
--- a/libnl_2/include/netlink/socket.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * netlink/socket.h		Netlink Socket
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_SOCKET_H_
-#define NETLINK_SOCKET_H_
-
-#include <netlink/types.h>
-#include <netlink/handlers.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern struct nl_sock *	nl_socket_alloc(void);
-extern struct nl_sock *	nl_socket_alloc_cb(struct nl_cb *);
-extern void		nl_socket_free(struct nl_sock *);
-
-extern uint32_t		nl_socket_get_local_port(struct nl_sock *);
-extern void		nl_socket_set_local_port(struct nl_sock *, uint32_t);
-
-extern int		nl_socket_add_memberships(struct nl_sock *, int, ...);
-extern int		nl_socket_add_membership(struct nl_sock *, int);
-extern int		nl_socket_drop_memberships(struct nl_sock *, int, ...);
-extern int		nl_socket_drop_membership(struct nl_sock *,
-							  int);
-extern void		nl_join_groups(struct nl_sock *, int);
-
-
-extern uint32_t		nl_socket_get_peer_port(struct nl_sock *);
-extern void		nl_socket_set_peer_port(struct nl_sock *,
-							uint32_t);
-
-extern struct nl_cb *	nl_socket_get_cb(struct nl_sock *);
-extern void		nl_socket_set_cb(struct nl_sock *,
-						 struct nl_cb *);
-extern int		nl_socket_modify_cb(struct nl_sock *, enum nl_cb_type,
-					    enum nl_cb_kind,
-					    nl_recvmsg_msg_cb_t, void *);
-
-extern int		nl_socket_set_buffer_size(struct nl_sock *, int, int);
-extern int		nl_socket_set_passcred(struct nl_sock *, int);
-extern int		nl_socket_recv_pktinfo(struct nl_sock *, int);
-
-extern void		nl_socket_disable_seq_check(struct nl_sock *);
-extern unsigned int	nl_socket_use_seq(struct nl_sock *);
-extern void		nl_socket_disable_auto_ack(struct nl_sock *);
-extern void		nl_socket_enable_auto_ack(struct nl_sock *);
-
-extern int		nl_socket_get_fd(struct nl_sock *);
-extern int		nl_socket_set_nonblocking(struct nl_sock *);
-extern void		nl_socket_enable_msg_peek(struct nl_sock *);
-extern void		nl_socket_disable_msg_peek(struct nl_sock *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/types.h b/libnl_2/include/netlink/types.h
deleted file mode 100644
index 2e0b9c3..0000000
--- a/libnl_2/include/netlink/types.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * netlink/netlink-types.h	Netlink Types
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef __NETLINK_TYPES_H_
-#define __NETLINK_TYPES_H_
-
-#include <stdio.h>
-
-/**
- * Dumping types (dp_type)
- * @ingroup utils
- */
-enum nl_dump_type {
-	NL_DUMP_LINE,		/**< Dump object briefly on one line */
-	NL_DUMP_DETAILS,	/**< Dump all attributes but no statistics */
-	NL_DUMP_STATS,		/**< Dump all attributes including statistics */
-	NL_DUMP_ENV,		/**< Dump all attribtues as env variables */
-	__NL_DUMP_MAX,
-};
-#define NL_DUMP_MAX (__NL_DUMP_MAX - 1)
-
-/**
- * Dumping parameters
- * @ingroup utils
- */
-struct nl_dump_params
-{
-	/**
-	 * Specifies the type of dump that is requested.
-	 */
-	enum nl_dump_type	dp_type;
-
-	/**
-	 * Specifies the number of whitespaces to be put in front
-	 * of every new line (indentation).
-	 */
-	int			dp_prefix;
-
-	/**
-	 * Causes the cache index to be printed for each element.
-	 */
-	int			dp_print_index;
-
-	/**
-	 * Causes each element to be prefixed with the message type.
-	 */
-	int			dp_dump_msgtype;
-
-	/**
-	 * A callback invoked for output
-	 *
-	 * Passed arguments are:
-	 *  - dumping parameters
-	 *  - string to append to the output
-	 */
-	void			(*dp_cb)(struct nl_dump_params *, char *);
-
-	/**
-	 * A callback invoked for every new line, can be used to
-	 * customize the indentation.
-	 *
-	 * Passed arguments are:
-	 *  - dumping parameters
-	 *  - line number starting from 0
-	 */
-	void			(*dp_nl_cb)(struct nl_dump_params *, int);
-
-	/**
-	 * User data pointer, can be used to pass data to callbacks.
-	 */
-	void			*dp_data;
-
-	/**
-	 * File descriptor the dumping output should go to
-	 */
-	FILE *			dp_fd;
-
-	/**
-	 * Alternatively the output may be redirected into a buffer
-	 */
-	char *			dp_buf;
-
-	/**
-	 * Length of the buffer dp_buf
-	 */
-	size_t			dp_buflen;
-
-	/**
-	 * PRIVATE
-	 * Set if a dump was performed prior to the actual dump handler.
-	 */
-	int			dp_pre_dump;
-
-	/**
-	 * PRIVATE
-	 * Owned by the current caller
-	 */
-	int			dp_ivar;
-
-	unsigned int		dp_line;
-};
-
-#endif
diff --git a/libnl_2/include/netlink/utils.h b/libnl_2/include/netlink/utils.h
deleted file mode 100644
index 480bab6..0000000
--- a/libnl_2/include/netlink/utils.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * netlink/utils.h		Utility Functions
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_UTILS_H_
-#define NETLINK_UTILS_H_
-
-#include <netlink/netlink.h>
-#include <netlink/list.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @name Probability Constants
- * @{
- */
-
-/**
- * Lower probability limit
- * @ingroup utils
- */
-#define NL_PROB_MIN 0x0
-
-/**
- * Upper probability limit
- * @ingroup utils
- */
-#define NL_PROB_MAX 0xffffffff
-
-/** @} */
-
-/* unit pretty-printing */
-extern double	nl_cancel_down_bytes(unsigned long long, char **);
-extern double	nl_cancel_down_bits(unsigned long long, char **);
-extern double	nl_cancel_down_us(uint32_t, char **);
-
-/* generic unit translations */
-extern long	nl_size2int(const char *);
-extern long	nl_prob2int(const char *);
-
-/* time translations */
-extern int	nl_get_hz(void);
-extern uint32_t	nl_us2ticks(uint32_t);
-extern uint32_t	nl_ticks2us(uint32_t);
-extern int	nl_str2msec(const char *, uint64_t *);
-extern char *	nl_msec2str(uint64_t, char *, size_t);
-
-/* link layer protocol translations */
-extern char *	nl_llproto2str(int, char *, size_t);
-extern int	nl_str2llproto(const char *);
-
-/* ethernet protocol translations */
-extern char *	nl_ether_proto2str(int, char *, size_t);
-extern int	nl_str2ether_proto(const char *);
-
-/* IP protocol translations */
-extern char *	nl_ip_proto2str(int, char *, size_t);
-extern int	nl_str2ip_proto(const char *);
-
-/* Dumping helpers */
-extern void	nl_new_line(struct nl_dump_params *);
-extern void	nl_dump(struct nl_dump_params *, const char *, ...);
-extern void	nl_dump_line(struct nl_dump_params *, const char *, ...);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/libnl_2/include/netlink/version.h b/libnl_2/include/netlink/version.h
deleted file mode 100644
index 84af8f3..0000000
--- a/libnl_2/include/netlink/version.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * netlink/version.h	Compile Time Versioning Information
- *
- *	This library is free software; you can redistribute it and/or
- *	modify it under the terms of the GNU Lesser General Public
- *	License as published by the Free Software Foundation version 2.1
- *	of the License.
- *
- * Copyright (c) 2008 Thomas Graf <tgraf@suug.ch>
- */
-
-#ifndef NETLINK_VERSION_H_
-#define NETLINK_VERSION_H_
-
-#define LIBNL_STRING "libnl 2.0"
-#define LIBNL_VERSION "2.0"
-
-#endif
diff --git a/libnl_2/msg.c b/libnl_2/msg.c
index d7276b7..283da6e 100644
--- a/libnl_2/msg.c
+++ b/libnl_2/msg.c
@@ -91,39 +91,41 @@
 struct nlattr *nlmsg_attrdata(const struct nlmsghdr *nlh, int hdrlen)
 {
 	unsigned char *data = nlmsg_data(nlh);
-	return (struct nlattr *) (data + NLMSG_ALIGN(hdrlen));
+	return (struct nlattr *)(data + NLMSG_ALIGN(hdrlen));
 }
 
 /* Returns pointer to end of netlink message */
 void *nlmsg_tail(const struct nlmsghdr *nlh)
 {
-	return (void *)((char *) nlh + nlh->nlmsg_len);
+	return (void *)((char *)nlh + NLMSG_ALIGN(nlh->nlmsg_len));
 }
 
 /* Next netlink message in message stream */
 struct nlmsghdr *nlmsg_next(struct nlmsghdr *nlh, int *remaining)
 {
 	struct nlmsghdr *next_nlh = NULL;
-	if (*remaining > 0 &&
-		nlmsg_len(nlh) <= *remaining &&
-		nlmsg_len(nlh) >= (int) sizeof(struct nlmsghdr)) {
-		next_nlh = (struct nlmsghdr *) \
-			((char *) nlh + nlmsg_len(nlh));
+	int len = nlmsg_len(nlh);
 
-		if (next_nlh && nlmsg_len(nlh) <= *remaining) {
-			*remaining -= nlmsg_len(nlh);
-			next_nlh = (struct nlmsghdr *) \
-				((char *) nlh + nlmsg_len(nlh));
-		}
+	len = NLMSG_ALIGN(len);
+	if (*remaining > 0 &&
+	    len <= *remaining &&
+	    len >= (int) sizeof(struct nlmsghdr)) {
+		next_nlh = (struct nlmsghdr *)((char *)nlh + len);
+		*remaining -= len;
 	}
 
 	return next_nlh;
 }
 
+int nlmsg_datalen(const struct nlmsghdr *nlh)
+{
+	return nlh->nlmsg_len - NLMSG_HDRLEN;
+}
+
 /* Length of attributes data */
 int nlmsg_attrlen(const struct nlmsghdr *nlh, int hdrlen)
 {
-	return nlmsg_len(nlh) - NLMSG_HDRLEN - hdrlen;
+	return nlmsg_datalen(nlh) - NLMSG_ALIGN(hdrlen);
 }
 
 /* Length of netlink message */
@@ -145,9 +147,3 @@
 {
 	return NLMSG_ALIGN(payload) - payload;
 }
-
-int nlmsg_datalen(const struct nlmsghdr *nlh)
-{
-	return nlh->nlmsg_len - NLMSG_HDRLEN;
-}
-
diff --git a/rootdir/init.lowmem.rc b/rootdir/init.lowmem.rc
deleted file mode 100644
index 7c08054..0000000
--- a/rootdir/init.lowmem.rc
+++ /dev/null
@@ -1,19 +0,0 @@
-# Adjustments to the out-of-memory killer, for devices that are
-# tight on memory.  These should not be used if not needed, as they
-# can result in more paging.
-
-on early-boot
-
-    setprop ro.FOREGROUND_APP_MEM 1536
-    setprop ro.VISIBLE_APP_MEM 2048
-    setprop ro.PERCEPTIBLE_APP_MEM 2048
-    setprop ro.HEAVY_WEIGHT_APP_MEM 2048
-    setprop ro.SECONDARY_SERVER_MEM 4096
-    setprop ro.BACKUP_APP_MEM 4096
-    setprop ro.HOME_APP_MEM 4096
-    setprop ro.HIDDEN_APP_MEM 5120
-    setprop ro.EMPTY_APP_MEM 6144
-
-on boot
-
-    write /sys/module/lowmemorykiller/parameters/minfree 1536,2048,3072,4096,5120,6144
diff --git a/rootdir/init.rc b/rootdir/init.rc
index f843824..e2832d8 100644
--- a/rootdir/init.rc
+++ b/rootdir/init.rc
@@ -190,54 +190,17 @@
 # set RLIMIT_NICE to allow priorities from 19 to -20
     setrlimit 13 40 40
 
-# Define the oom_adj values for the classes of processes that can be
-# killed by the kernel.  These are used in ActivityManagerService.
-    setprop ro.FOREGROUND_APP_ADJ 0
-    setprop ro.VISIBLE_APP_ADJ 1
-    setprop ro.PERCEPTIBLE_APP_ADJ 2
-    setprop ro.HEAVY_WEIGHT_APP_ADJ 3
-    setprop ro.SECONDARY_SERVER_ADJ 4
-    setprop ro.BACKUP_APP_ADJ 5
-    setprop ro.HOME_APP_ADJ 6
-    setprop ro.HIDDEN_APP_MIN_ADJ 7
-    setprop ro.EMPTY_APP_ADJ 15
-
-# Define the memory thresholds at which the above process classes will
-# be killed.  These numbers are in pages (4k).
-    # These are currently tuned for tablets with approx 1GB RAM.
-    setprop ro.FOREGROUND_APP_MEM 8192
-    setprop ro.VISIBLE_APP_MEM 10240
-    setprop ro.PERCEPTIBLE_APP_MEM 12288
-    setprop ro.HEAVY_WEIGHT_APP_MEM 12288
-    setprop ro.SECONDARY_SERVER_MEM 14336
-    setprop ro.BACKUP_APP_MEM 14336
-    setprop ro.HOME_APP_MEM 14336
-    setprop ro.HIDDEN_APP_MEM 16384
-    setprop ro.EMPTY_APP_MEM 20480
-
-    # Old values for phones.  Should probably be adjusted up for the next
-    # phone version.
-    #setprop ro.FOREGROUND_APP_MEM 2048
-    #setprop ro.VISIBLE_APP_MEM 3072
-    #setprop ro.PERCEPTIBLE_APP_MEM 4096
-    #setprop ro.HEAVY_WEIGHT_APP_MEM 4096
-    #setprop ro.SECONDARY_SERVER_MEM 6144
-    #setprop ro.BACKUP_APP_MEM 6144
-    #setprop ro.HOME_APP_MEM 6144
-    #setprop ro.HIDDEN_APP_MEM 7168
-    #setprop ro.EMPTY_APP_MEM 8192
-
-# Write value must be consistent with the above properties.
-# Note that the driver only supports 6 slots, so we have combined some of
-# the classes into the same memory level; the associated processes of higher
-# classes will still be killed first.
-    write /sys/module/lowmemorykiller/parameters/adj 0,1,2,4,7,15
-
+# Memory management.  Basic kernel parameters, and allow the high
+# level system server to be able to adjust the kernel OOM driver
+# paramters to match how it is managing things.
     write /proc/sys/vm/overcommit_memory 1
     write /proc/sys/vm/min_free_order_shift 4
-    write /sys/module/lowmemorykiller/parameters/minfree 8192,10240,12288,14336,16384,20480
+    chown root system /sys/module/lowmemorykiller/parameters/adj
+    chmod 0664 /sys/module/lowmemorykiller/parameters/adj
+    chown root system /sys/module/lowmemorykiller/parameters/minfree
+    chmod 0664 /sys/module/lowmemorykiller/parameters/minfree
 
-    # Set init its forked children's oom_adj.
+    # Set init and its forked children's oom_adj.
     write /proc/1/oom_adj -16
 
     # Tweak background writeout
@@ -487,7 +450,7 @@
     class main
     socket racoon stream 600 system system
     # IKE uses UDP port 500. Racoon will setuid to vpn after binding the port.
-    group vpn net_admin
+    group vpn net_admin inet
     disabled
     oneshot
 
@@ -495,7 +458,7 @@
     class main
     socket mtpd stream 600 system system
     user vpn
-    group vpn net_admin net_raw
+    group vpn net_admin inet net_raw
     disabled
     oneshot
 
