diff --git a/include/re_dns.h b/include/re_dns.h
new file mode 100644
index 0000000..73ecd08
--- /dev/null
+++ b/include/re_dns.h
@@ -0,0 +1,218 @@
+/**
+ * @file re_dns.h  Interface to DNS module
+ *
+ * Copyright (C) 2010 Creytiv.com
+ */
+
+
+enum {
+	DNS_PORT = 53,
+	DNS_HEADER_SIZE = 12
+};
+
+
+/** DNS Opcodes */
+enum {
+	DNS_OPCODE_QUERY  = 0,
+	DNS_OPCODE_IQUERY = 1,
+	DNS_OPCODE_STATUS = 2,
+	DNS_OPCODE_NOTIFY = 4
+};
+
+
+/** DNS Response codes */
+enum {
+	DNS_RCODE_OK       = 0,
+	DNS_RCODE_FMT_ERR  = 1,
+	DNS_RCODE_SRV_FAIL = 2,
+	DNS_RCODE_NAME_ERR = 3,
+	DNS_RCODE_NOT_IMPL = 4,
+	DNS_RCODE_REFUSED  = 5,
+	DNS_RCODE_NOT_AUTH = 9
+};
+
+
+/** DNS Resource Record types */
+enum {
+	DNS_TYPE_A     = 0x0001,
+	DNS_TYPE_NS    = 0x0002,
+	DNS_TYPE_CNAME = 0x0005,
+	DNS_TYPE_SOA   = 0x0006,
+	DNS_TYPE_PTR   = 0x000c,
+	DNS_TYPE_MX    = 0x000f,
+	DNS_TYPE_AAAA  = 0x001c,
+	DNS_TYPE_SRV   = 0x0021,
+	DNS_TYPE_NAPTR = 0x0023,
+	DNS_QTYPE_IXFR = 0x00fb,
+	DNS_QTYPE_AXFR = 0x00fc,
+	DNS_QTYPE_ANY  = 0x00ff
+};
+
+
+/** DNS Classes */
+enum {
+	DNS_CLASS_IN   = 0x0001,
+	DNS_QCLASS_ANY = 0x00ff
+};
+
+
+/** Defines a DNS Header */
+struct dnshdr {
+	uint16_t id;
+	bool qr;
+	uint8_t opcode;
+	bool aa;
+	bool tc;
+	bool rd;
+	bool ra;
+	uint8_t z;
+	uint8_t rcode;
+	uint16_t nq;
+	uint16_t nans;
+	uint16_t nauth;
+	uint16_t nadd;
+};
+
+
+/** Defines a DNS Resource Record (RR) */
+struct dnsrr {
+	struct le le;
+	struct le le_priv;
+	char *name;
+	uint16_t type;
+	uint16_t dnsclass;
+	int64_t ttl;
+	uint16_t rdlen;
+	union {
+		struct {
+			uint32_t addr;
+		} a;
+		struct {
+			char *nsdname;
+		} ns;
+		struct {
+			char *cname;
+		} cname;
+		struct {
+			char *mname;
+			char *rname;
+			uint32_t serial;
+			uint32_t refresh;
+			uint32_t retry;
+			uint32_t expire;
+			uint32_t ttlmin;
+		} soa;
+		struct {
+			char *ptrdname;
+		} ptr;
+		struct {
+			uint16_t pref;
+			char *exchange;
+		} mx;
+		struct {
+			uint8_t addr[16];
+		} aaaa;
+		struct {
+			uint16_t pri;
+			uint16_t weight;
+			uint16_t port;
+			char *target;
+		} srv;
+		struct {
+			uint16_t order;
+			uint16_t pref;
+			char *flags;
+			char *services;
+			char *regexp;
+			char *replace;
+		} naptr;
+	} rdata;
+};
+
+struct hash;
+
+/**
+ * Defines the DNS Query handler
+ *
+ * @param err   0 if success, otherwise errorcode
+ * @param hdr   DNS Header
+ * @param ansl  List of Answer records
+ * @param authl List of Authoritive records
+ * @param addl  List of Additional records
+ * @param arg   Handler argument
+ */
+typedef void(dns_query_h)(int err, const struct dnshdr *hdr,
+			  struct list *ansl, struct list *authl,
+			  struct list *addl, void *arg);
+
+/**
+ * Defines the DNS Resource Record list handler
+ *
+ * @param rr  DNS Resource Record
+ * @param arg Handler argument
+ *
+ * @return True to stop traversing, False to continue
+ */
+typedef bool(dns_rrlist_h)(struct dnsrr *rr, void *arg);
+
+int  dns_hdr_encode(struct mbuf *mb, const struct dnshdr *hdr);
+int  dns_hdr_decode(struct mbuf *mb, struct dnshdr *hdr);
+const char *dns_hdr_opcodename(uint8_t opcode);
+const char *dns_hdr_rcodename(uint8_t rcode);
+struct dnsrr *dns_rr_alloc(void);
+int  dns_rr_encode(struct mbuf *mb, const struct dnsrr *rr, int64_t ttl_offs,
+		   struct hash *ht_dname, size_t start);
+int  dns_rr_decode(struct mbuf *mb, struct dnsrr **rr, size_t start);
+bool dns_rr_cmp(const struct dnsrr *rr1, const struct dnsrr *rr2, bool rdata);
+const char *dns_rr_typename(uint16_t type);
+const char *dns_rr_classname(uint16_t dnsclass);
+int  dns_rr_print(struct re_printf *pf, const struct dnsrr *rr);
+int  dns_dname_encode(struct mbuf *mb, const char *name,
+		      struct hash *ht_dname, size_t start, bool comp);
+int  dns_dname_decode(struct mbuf *mb, char **name, size_t start);
+int  dns_cstr_encode(struct mbuf *mb, const char *str);
+int  dns_cstr_decode(struct mbuf *mb, char **str);
+void dns_rrlist_sort(struct list *rrl, uint16_t type, size_t key);
+void dns_rrlist_sort_addr(struct list *rrl, size_t key);
+struct dnsrr *dns_rrlist_apply(struct list *rrl, const char *name,
+			       uint16_t type, uint16_t dnsclass,
+			       bool recurse, dns_rrlist_h *rrlh, void *arg);
+struct dnsrr *dns_rrlist_apply2(struct list *rrl, const char *name,
+				uint16_t type1, uint16_t type2,
+				uint16_t dnsclass, bool recurse,
+				dns_rrlist_h *rrlh, void *arg);
+struct dnsrr *dns_rrlist_find(struct list *rrl, const char *name,
+			      uint16_t type, uint16_t dnsclass, bool recurse);
+
+
+/* DNS Client */
+struct sa;
+struct dnsc;
+struct dns_query;
+
+/** DNS Client configuration */
+struct dnsc_conf {
+	uint32_t query_hash_size;
+	uint32_t tcp_hash_size;
+	uint32_t conn_timeout;  /* in [ms] */
+	uint32_t idle_timeout;  /* in [ms] */
+};
+
+int  dnsc_alloc(struct dnsc **dcpp, const struct dnsc_conf *conf,
+		const struct sa *srvv, uint32_t srvc);
+int  dnsc_srv_set(struct dnsc *dnsc, const struct sa *srvv, uint32_t srvc);
+int  dnsc_query(struct dns_query **qp, struct dnsc *dnsc, const char *name,
+		uint16_t type, uint16_t dnsclass,
+		bool rd, dns_query_h *qh, void *arg);
+int  dnsc_query_srv(struct dns_query **qp, struct dnsc *dnsc, const char *name,
+		    uint16_t type, uint16_t dnsclass, int proto,
+		    const struct sa *srvv, const uint32_t *srvc,
+		    bool rd, dns_query_h *qh, void *arg);
+int  dnsc_notify(struct dns_query **qp, struct dnsc *dnsc, const char *name,
+		 uint16_t type, uint16_t dnsclass, const struct dnsrr *ans_rr,
+		 int proto, const struct sa *srvv, const uint32_t *srvc,
+		 dns_query_h *qh, void *arg);
+
+
+/* DNS System functions */
+int dns_srv_get(char *domain, size_t dsize, struct sa *srvv, uint32_t *n);
