diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..a9b072f
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,5 @@
+include $(top_srcdir)/Make_global.am
+lib_LTLIBRARIES = libgtpnl.la
+
+libgtpnl_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libgtpnl.map -version-info $(LIBVERSION)
+libgtpnl_la_SOURCES = genl.c gtp-genl.c gtp-rtnl.c libgtpnl.map
diff --git a/src/genl.c b/src/genl.c
new file mode 100644
index 0000000..099b317
--- /dev/null
+++ b/src/genl.c
@@ -0,0 +1,146 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <time.h>
+
+#include <libmnl/libmnl.h>
+#include <linux/genetlink.h>
+
+#include <libgtpnl/gtpnl.h>
+
+#include "internal.h"
+
+struct nlmsghdr *
+genl_nlmsg_build_hdr(char *buf, uint16_t type, uint16_t flags, uint32_t seq,
+		     uint8_t cmd)
+{
+	struct nlmsghdr *nlh;
+	struct genlmsghdr *genl;
+
+	nlh = mnl_nlmsg_put_header(buf);
+	nlh->nlmsg_type = type;
+	nlh->nlmsg_flags = NLM_F_REQUEST | flags;
+	nlh->nlmsg_seq = seq;
+
+	genl = mnl_nlmsg_put_extra_header(nlh, sizeof(struct genlmsghdr));
+	genl->cmd = cmd;
+	genl->version = 0;
+
+	return nlh;
+}
+EXPORT_SYMBOL(genl_nlmsg_build_hdr);
+
+static int genl_ctrl_validate_cb(const struct nlattr *attr, void *data)
+{
+	const struct nlattr **tb = data;
+	int type = mnl_attr_get_type(attr);
+
+	if (mnl_attr_type_valid(attr, CTRL_ATTR_MAX) < 0)
+		return MNL_CB_OK;
+
+	switch(type) {
+	case CTRL_ATTR_FAMILY_ID:
+		if (mnl_attr_validate(attr, MNL_TYPE_U16) < 0) {
+			perror("mnl_attr_validate");
+			return MNL_CB_ERROR;
+		}
+		break;
+	}
+	tb[type] = attr;
+	return MNL_CB_OK;
+}
+
+static int genl_ctrl_cb(const struct nlmsghdr *nlh, void *data)
+{
+	struct nlattr *tb[CTRL_ATTR_MAX + 1] = {};
+	struct genlmsghdr *genl = mnl_nlmsg_get_payload(nlh);
+	int32_t *genl_id = data;
+
+	mnl_attr_parse(nlh, sizeof(*genl), genl_ctrl_validate_cb, tb);
+	if (tb[CTRL_ATTR_FAMILY_ID])
+		*genl_id = mnl_attr_get_u16(tb[CTRL_ATTR_FAMILY_ID]);
+	else
+		*genl_id = -1;
+
+	return MNL_CB_OK;
+}
+
+struct mnl_socket *genl_socket_open(void)
+{
+	struct mnl_socket *nl;
+
+	nl = mnl_socket_open(NETLINK_GENERIC);
+	if (nl == NULL) {
+		perror("mnl_socket_open");
+		return NULL;
+	}
+
+	if (mnl_socket_bind(nl, 0, MNL_SOCKET_AUTOPID) < 0) {
+		perror("mnl_socket_bind");
+		return NULL;
+	}
+
+	return nl;
+}
+EXPORT_SYMBOL(genl_socket_open);
+
+int genl_socket_talk(struct mnl_socket *nl, struct nlmsghdr *nlh, uint32_t seq,
+		     int (*cb)(const struct nlmsghdr *nlh, void *data),
+		     void *data)
+{
+	char buf[MNL_SOCKET_BUFFER_SIZE];
+	int ret;
+
+	if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0) {
+		perror("mnl_socket_send");
+		return -1;
+	}
+
+	ret = mnl_socket_recvfrom(nl, buf, sizeof(buf));
+	while (ret > 0) {
+		ret = mnl_cb_run(buf, ret, seq, mnl_socket_get_portid(nl),
+				 cb, data);
+		if (ret <= 0)
+			break;
+		ret = mnl_socket_recvfrom(nl, buf, sizeof(buf));
+	}
+
+	return ret;
+}
+EXPORT_SYMBOL(genl_socket_talk);
+
+static struct nlmsghdr *
+genl_nlmsg_build_lookup(char *buf, const char *subsys_name)
+{
+	struct nlmsghdr *nlh;
+	struct genlmsghdr *genl;
+
+	nlh = mnl_nlmsg_put_header(buf);
+	nlh->nlmsg_type	= GENL_ID_CTRL;
+	nlh->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
+	nlh->nlmsg_seq = time(NULL);
+
+	genl = mnl_nlmsg_put_extra_header(nlh, sizeof(struct genlmsghdr));
+	genl->cmd = CTRL_CMD_GETFAMILY;
+	genl->version = 1;
+
+	mnl_attr_put_u32(nlh, CTRL_ATTR_FAMILY_ID, GENL_ID_CTRL);
+	mnl_attr_put_strz(nlh, CTRL_ATTR_FAMILY_NAME, subsys_name);
+
+	return nlh;
+}
+
+int genl_lookup_family(struct mnl_socket *nl, const char *family)
+{
+	int32_t genl_id;
+	char buf[MNL_SOCKET_BUFFER_SIZE];
+	struct nlmsghdr *nlh = genl_nlmsg_build_lookup(buf, "gtp");
+	int err;
+
+	err = genl_socket_talk(nl, nlh, nlh->nlmsg_seq, genl_ctrl_cb, &genl_id);
+	if (err < 0)
+		return -1;
+
+	return genl_id;
+}
+EXPORT_SYMBOL(genl_lookup_family);
diff --git a/src/gtp-genl.c b/src/gtp-genl.c
new file mode 100644
index 0000000..0dd5473
--- /dev/null
+++ b/src/gtp-genl.c
@@ -0,0 +1,177 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <time.h>
+#include <arpa/inet.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <inttypes.h>
+
+#include <libmnl/libmnl.h>
+#include <linux/genetlink.h>
+
+#include <libgtpnl/gtpnl.h>
+
+#include <net/if.h>
+#include <linux/gtp_nl.h>
+
+#include "internal.h"
+
+static void gtp_build_payload(struct nlmsghdr *nlh, uint64_t tid,
+			      uint32_t ifidx, uint32_t sgsn_addr,
+			      uint32_t ms_addr, uint32_t version)
+{
+	mnl_attr_put_u32(nlh, GTPA_VERSION, version);
+	mnl_attr_put_u32(nlh, GTPA_LINK, ifidx);
+	mnl_attr_put_u32(nlh, GTPA_SGSN_ADDRESS, sgsn_addr);
+	mnl_attr_put_u32(nlh, GTPA_MS_ADDRESS, ms_addr);
+	mnl_attr_put_u64(nlh, GTPA_TID, tid);
+}
+
+int gtp_add_tunnel(int genl_id, struct mnl_socket *nl, const char *ifname,
+		   const char *ms_addr, const char *sgsn_addr, uint64_t tid,
+		   int gtp_version)
+{
+	uint32_t gtp_ifidx;
+	struct in_addr ms, sgsn;
+	struct nlmsghdr *nlh;
+	char buf[MNL_SOCKET_BUFFER_SIZE];
+	uint32_t seq = time(NULL);
+
+	gtp_ifidx = if_nametoindex(ifname);
+	if (gtp_ifidx == 0){
+		fprintf(stderr, "wrong GTP interface %s\n", ifname);
+		return -1;
+	}
+
+	if (inet_aton(ms_addr, &ms) < 0) {
+		perror("bad address for ms");
+		return -1;
+	}
+
+	if (inet_aton(sgsn_addr, &sgsn) < 0) {
+		perror("bad address for sgsn");
+		return -1;
+	}
+
+	if (gtp_version > GTP_V1) {
+		fprintf(stderr, "wrong GTP version %u, use v0 or v1\n",
+			gtp_version);
+		return -1;
+	}
+
+	nlh = genl_nlmsg_build_hdr(buf, genl_id, NLM_F_EXCL | NLM_F_ACK, ++seq,
+				   GTP_CMD_TUNNEL_NEW);
+	gtp_build_payload(nlh, tid, gtp_ifidx, sgsn.s_addr,
+			  ms.s_addr, gtp_version);
+
+	if (genl_socket_talk(nl, nlh, seq, NULL, NULL) < 0)
+		perror("genl_socket_talk");
+
+	return 0;
+}
+EXPORT_SYMBOL(gtp_add_tunnel);
+
+int gtp_del_tunnel(int genl_id, struct mnl_socket *nl, const char *ifname,
+		   uint64_t tid, uint32_t gtp_version)
+{
+	uint32_t gtp_ifidx;
+	char buf[MNL_SOCKET_BUFFER_SIZE];
+	struct nlmsghdr *nlh;
+	uint32_t seq = time(NULL);
+
+	gtp_ifidx = if_nametoindex(ifname);
+
+	nlh = genl_nlmsg_build_hdr(buf, genl_id, NLM_F_ACK, ++seq,
+				   GTP_CMD_TUNNEL_DELETE);
+	gtp_build_payload(nlh, tid, gtp_ifidx, 0, 0, gtp_version);
+
+	if (genl_socket_talk(nl, nlh, seq, NULL, NULL) < 0)
+		perror("genl_socket_talk");
+
+	return 0;
+}
+EXPORT_SYMBOL(gtp_del_tunnel);
+
+struct gtp_pdp {
+	uint32_t	version;
+	uint64_t	tid;
+	struct in_addr	sgsn_addr;
+	struct in_addr	ms_addr;
+};
+
+static int genl_gtp_validate_cb(const struct nlattr *attr, void *data)
+{
+	const struct nlattr **tb = data;
+	int type = mnl_attr_get_type(attr);
+
+	if (mnl_attr_type_valid(attr, CTRL_ATTR_MAX) < 0)
+		return MNL_CB_OK;
+
+	switch(type) {
+	case GTPA_TID:
+		if (mnl_attr_validate(attr, MNL_TYPE_U64) < 0) {
+			perror("mnl_attr_validate");
+			return MNL_CB_ERROR;
+		}
+		break;
+	case GTPA_SGSN_ADDRESS:
+	case GTPA_MS_ADDRESS:
+	case GTPA_VERSION:
+		if (mnl_attr_validate(attr, MNL_TYPE_U32) < 0) {
+			perror("mnl_attr_validate");
+			return MNL_CB_ERROR;
+		}
+		break;
+	default:
+		break;
+	}
+	tb[type] = attr;
+	return MNL_CB_OK;
+}
+
+static int genl_gtp_attr_cb(const struct nlmsghdr *nlh, void *data)
+{
+	struct nlattr *tb[GTPA_MAX + 1] = {};
+	struct gtp_pdp pdp;
+	struct genlmsghdr *genl;
+
+	mnl_attr_parse(nlh, sizeof(*genl), genl_gtp_validate_cb, tb);
+	if (tb[GTPA_TID])
+		pdp.tid = mnl_attr_get_u64(tb[GTPA_TID]);
+	if (tb[GTPA_SGSN_ADDRESS]) {
+		pdp.sgsn_addr.s_addr =
+			mnl_attr_get_u32(tb[GTPA_SGSN_ADDRESS]);
+	}
+	if (tb[GTPA_MS_ADDRESS]) {
+		pdp.ms_addr.s_addr = mnl_attr_get_u32(tb[GTPA_MS_ADDRESS]);
+	}
+	if (tb[GTPA_VERSION]) {
+		pdp.version = mnl_attr_get_u32(tb[GTPA_VERSION]);
+	}
+
+	printf("version %u ", pdp.version);
+	printf("tid %"PRIu64" ms_addr %s ", pdp.tid, inet_ntoa(pdp.sgsn_addr));
+	printf("sgsn_addr %s\n", inet_ntoa(pdp.ms_addr));
+
+	return MNL_CB_OK;
+}
+
+int gtp_list_tunnel(int genl_id, struct mnl_socket *nl)
+{
+	char buf[MNL_SOCKET_BUFFER_SIZE];
+	struct nlmsghdr *nlh;
+	uint32_t seq = time(NULL);
+
+	nlh = genl_nlmsg_build_hdr(buf, genl_id, NLM_F_DUMP, 0,
+				   GTP_CMD_TUNNEL_GET);
+
+	if (genl_socket_talk(nl, nlh, seq, genl_gtp_attr_cb, NULL) < 0) {
+		perror("genl_socket_talk");
+		return 0;
+	}
+
+	return 0;
+}
+EXPORT_SYMBOL(gtp_list_tunnel);
diff --git a/src/gtp-rtnl.c b/src/gtp-rtnl.c
new file mode 100644
index 0000000..2cd43ef
--- /dev/null
+++ b/src/gtp-rtnl.c
@@ -0,0 +1,82 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <time.h>
+
+#include <libmnl/libmnl.h>
+#include <net/if.h>
+#include <linux/if_link.h>
+#include <linux/rtnetlink.h>
+
+#include <libgtpnl/gtpnl.h>
+
+#include <linux/gtp_nl.h>
+
+#include "internal.h"
+
+int gtp_dev_create(const char *ifname)
+{
+	struct mnl_socket *nl;
+	char buf[MNL_SOCKET_BUFFER_SIZE];
+	struct nlmsghdr *nlh;
+	struct ifinfomsg *ifm;
+	int ret;
+	unsigned int seq, portid;
+	struct nlattr *nest, *nest2;
+
+	nlh = mnl_nlmsg_put_header(buf);
+	nlh->nlmsg_type	= RTM_NEWLINK;
+	nlh->nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE | NLM_F_ACK;
+	nlh->nlmsg_seq = seq = time(NULL);
+	ifm = mnl_nlmsg_put_extra_header(nlh, sizeof(*ifm));
+	ifm->ifi_family = AF_INET;
+	ifm->ifi_change |= IFF_UP;
+	ifm->ifi_flags |= IFF_UP;
+
+	mnl_attr_put_u32(nlh, IFLA_LINK, if_nametoindex(ifname));
+	nest = mnl_attr_nest_start(nlh, IFLA_LINKINFO);
+	mnl_attr_put_str(nlh, IFLA_INFO_KIND, "gtp");
+	nest2 = mnl_attr_nest_start(nlh, IFLA_INFO_DATA);
+	mnl_attr_put_u32(nlh, IFLA_GTP_LOCAL_ADDR_IPV4, 0);
+	mnl_attr_put_u32(nlh, IFLA_GTP_HASHSIZE, 131072);
+	mnl_attr_nest_end(nlh, nest2);
+	mnl_attr_nest_end(nlh, nest);
+
+	nl = mnl_socket_open(NETLINK_ROUTE);
+	if (nl == NULL) {
+		perror("mnl_socket_open");
+		return -1;
+	}
+
+	if (mnl_socket_bind(nl, 0, MNL_SOCKET_AUTOPID) < 0) {
+		perror("mnl_socket_bind");
+		return -1;
+	}
+	portid = mnl_socket_get_portid(nl);
+
+	mnl_nlmsg_fprintf(stdout, nlh, nlh->nlmsg_len,
+			  sizeof(struct ifinfomsg));
+
+	if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0) {
+		perror("mnl_socket_send");
+		return -1;
+	}
+
+	ret = mnl_socket_recvfrom(nl, buf, sizeof(buf));
+	if (ret == -1) {
+		perror("read");
+		return -1;
+	}
+
+	ret = mnl_cb_run(buf, ret, seq, portid, NULL, NULL);
+	if (ret == -1){
+		perror("callback");
+		return -1;
+	}
+
+	mnl_socket_close(nl);
+
+	return 0;
+}
+EXPORT_SYMBOL(gtp_dev_create);
diff --git a/src/internal.h b/src/internal.h
new file mode 100644
index 0000000..3a88d1a
--- /dev/null
+++ b/src/internal.h
@@ -0,0 +1,12 @@
+#ifndef INTERNAL_H
+#define INTERNAL_H 1
+
+#include "config.h"
+#ifdef HAVE_VISIBILITY_HIDDEN
+#	define __visible	__attribute__((visibility("default")))
+#	define EXPORT_SYMBOL(x)	typeof(x) (x) __visible
+#else
+#	define EXPORT_SYMBOL
+#endif
+
+#endif
diff --git a/src/libgtpnl.map b/src/libgtpnl.map
new file mode 100644
index 0000000..ead02e0
--- /dev/null
+++ b/src/libgtpnl.map
@@ -0,0 +1,13 @@
+LIBGTPNL_1.0 {
+global:
+  genl_socket_open;
+  genl_nlmsg_build_hdr;
+  genl_socket_talk;
+  genl_lookup_family;
+  gtp_dev_create;
+  gtp_add_tunnel;
+  gtp_del_tunnel;
+  gtp_list_tunnel;
+
+local: *;
+};
