netfilter-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH libnftnl 0/3] use nftnl_ prefix
@ 2015-09-02 14:44 Pablo Neira Ayuso
  2015-09-02 14:44 ` [PATCH libnftnl 1/3] src: introduce nftnl_* aliases for all existing functions Pablo Neira Ayuso
  2015-09-02 15:02 ` [PATCH libnftnl 0/3] use nftnl_ prefix Pablo Neira Ayuso
  0 siblings, 2 replies; 6+ messages in thread
From: Pablo Neira Ayuso @ 2015-09-02 14:44 UTC (permalink / raw)
  To: netfilter-devel; +Cc: kaber

This patchset renames the existing functions and definitions to use the nftnl_
prefix to prepare the introduction of the higher level library, which will use
the nft_ prefix.

The patchset does not break backward compatibility: Neither compilation not
existing binaries.

The patchset keeps the nft_ symbols around as aliases for the nftnl_ symbols.
Moreover, the header files contain the old nft_ definitions so clients of this
library don't break all of a sudden.

Please, let me know if you observe any problem with this. I would like that
this changes are pushed to master before the next release.

Thanks.

Pablo Neira Ayuso (3):
  src: introduce nftnl_* aliases for all existing functions
  src: rename existing functions to use the nftnl_ prefix
  src: add compat header file definitions

 examples/nft-chain-add.c          |   28 +-
 examples/nft-chain-del.c          |   24 +-
 examples/nft-chain-get.c          |   28 +-
 examples/nft-chain-parse-add.c    |   38 +-
 examples/nft-events.c             |   72 ++--
 examples/nft-rule-add.c           |   68 +--
 examples/nft-rule-del.c           |   22 +-
 examples/nft-rule-get.c           |   18 +-
 examples/nft-rule-parse-add.c     |   40 +-
 examples/nft-ruleset-get.c        |  146 +++----
 examples/nft-ruleset-parse-file.c |  186 ++++----
 examples/nft-set-add.c            |   32 +-
 examples/nft-set-del.c            |   14 +-
 examples/nft-set-elem-add.c       |   28 +-
 examples/nft-set-elem-del.c       |   28 +-
 examples/nft-set-elem-get.c       |   26 +-
 examples/nft-set-get.c            |   24 +-
 examples/nft-set-parse-add.c      |   38 +-
 examples/nft-table-add.c          |   26 +-
 examples/nft-table-del.c          |   26 +-
 examples/nft-table-get.c          |   26 +-
 examples/nft-table-parse-add.c    |   36 +-
 examples/nft-table-upd.c          |   14 +-
 include/buffer.h                  |   34 +-
 include/common.h                  |   18 +-
 include/data_reg.h                |    8 +-
 include/expr.h                    |    6 +-
 include/expr_ops.h                |   26 +-
 include/json.h                    |   86 ++--
 include/libnftnl/batch.h          |   16 +
 include/libnftnl/chain.h          |   77 ++++
 include/libnftnl/common.h         |   53 +++
 include/libnftnl/expr.h           |  168 ++++++++
 include/libnftnl/gen.h            |   36 ++
 include/libnftnl/rule.h           |   83 ++++
 include/libnftnl/ruleset.h        |   61 +++
 include/libnftnl/set.h            |  136 ++++++
 include/libnftnl/table.h          |   65 +++
 include/set.h                     |    8 +-
 include/set_elem.h                |    8 +-
 include/utils.h                   |   54 +--
 include/xml.h                     |   74 ++--
 src/batch.c                       |   69 +--
 src/buffer.c                      |  114 ++---
 src/chain.c                       |  663 ++++++++++++++---------------
 src/common.c                      |  108 +++--
 src/expr.c                        |  108 ++---
 src/expr/bitwise.c                |  202 ++++-----
 src/expr/byteorder.c              |  192 ++++-----
 src/expr/cmp.c                    |  152 +++----
 src/expr/counter.c                |  120 +++---
 src/expr/ct.c                     |  174 ++++----
 src/expr/data_reg.c               |  150 +++----
 src/expr/dynset.c                 |  218 +++++-----
 src/expr/exthdr.c                 |  168 ++++----
 src/expr/immediate.c              |  196 ++++-----
 src/expr/limit.c                  |  120 +++---
 src/expr/log.c                    |  222 +++++-----
 src/expr/lookup.c                 |  148 +++----
 src/expr/masq.c                   |  100 ++---
 src/expr/match.c                  |  114 ++---
 src/expr/meta.c                   |  150 +++----
 src/expr/nat.c                    |  250 +++++------
 src/expr/payload.c                |  168 ++++----
 src/expr/queue.c                  |  150 +++----
 src/expr/redir.c                  |  148 +++----
 src/expr/reject.c                 |  120 +++---
 src/expr/target.c                 |  114 ++---
 src/expr_ops.c                    |    2 +-
 src/gen.c                         |  106 ++---
 src/jansson.c                     |  114 ++---
 src/libnftnl.map                  |  260 ++++++++++++
 src/mxml.c                        |   86 ++--
 src/rule.c                        |  612 +++++++++++++-------------
 src/ruleset.c                     |  848 ++++++++++++++++++-------------------
 src/set.c                         |  712 +++++++++++++++----------------
 src/set_elem.c                    |  462 ++++++++++----------
 src/table.c                       |  376 ++++++++--------
 src/utils.c                       |  125 +++---
 tests/nft-chain-test.c            |   92 ++--
 tests/nft-expr_bitwise-test.c     |   78 ++--
 tests/nft-expr_byteorder-test.c   |   78 ++--
 tests/nft-expr_cmp-test.c         |   66 +--
 tests/nft-expr_counter-test.c     |   60 +--
 tests/nft-expr_ct-test.c          |   66 +--
 tests/nft-expr_exthdr-test.c      |   72 ++--
 tests/nft-expr_immediate-test.c   |   72 ++--
 tests/nft-expr_limit-test.c       |   60 +--
 tests/nft-expr_log-test.c         |   72 ++--
 tests/nft-expr_lookup-test.c      |   66 +--
 tests/nft-expr_masq-test.c        |   54 +--
 tests/nft-expr_match-test.c       |   66 +--
 tests/nft-expr_meta-test.c        |   60 +--
 tests/nft-expr_nat-test.c         |   90 ++--
 tests/nft-expr_payload-test.c     |   72 ++--
 tests/nft-expr_queue-test.c       |   62 +--
 tests/nft-expr_redir-test.c       |   66 +--
 tests/nft-expr_reject-test.c      |   60 +--
 tests/nft-expr_target-test.c      |   66 +--
 tests/nft-parsing-test.c          |   50 +--
 tests/nft-rule-test.c             |   62 +--
 tests/nft-set-test.c              |   62 +--
 tests/nft-table-test.c            |   40 +-
 103 files changed, 6346 insertions(+), 5392 deletions(-)

-- 
1.7.10.4


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH libnftnl 1/3] src: introduce nftnl_* aliases for all existing functions
  2015-09-02 14:44 [PATCH libnftnl 0/3] use nftnl_ prefix Pablo Neira Ayuso
@ 2015-09-02 14:44 ` Pablo Neira Ayuso
  2015-09-02 15:02 ` [PATCH libnftnl 0/3] use nftnl_ prefix Pablo Neira Ayuso
  1 sibling, 0 replies; 6+ messages in thread
From: Pablo Neira Ayuso @ 2015-09-02 14:44 UTC (permalink / raw)
  To: netfilter-devel; +Cc: kaber

This patch introduces the nftnl_ symbols as aliases for the existing nft_
symbols through the EXPORT_SYMBOL(...) macro.

We would like to use the nft_* prefix from our upcoming higher level library,
meanwhile with this move we avoid that old binaries break because of missing
symbol dependencies.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
---
 include/utils.h  |    2 +-
 src/batch.c      |   14 +--
 src/chain.c      |   68 +++++++-------
 src/common.c     |   14 +--
 src/expr.c       |   32 +++----
 src/gen.c        |   26 +++---
 src/libnftnl.map |  260 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/rule.c       |   74 ++++++++--------
 src/ruleset.c    |   32 +++----
 src/set.c        |   64 +++++++-------
 src/set_elem.c   |   48 +++++-----
 src/table.c      |   60 ++++++-------
 12 files changed, 477 insertions(+), 217 deletions(-)

diff --git a/include/utils.h b/include/utils.h
index 380b020..fad64e8 100644
--- a/include/utils.h
+++ b/include/utils.h
@@ -10,7 +10,7 @@
 #include "config.h"
 #ifdef HAVE_VISIBILITY_HIDDEN
 #	define __visible	__attribute__((visibility("default")))
-#	define EXPORT_SYMBOL(x)	typeof(x) (x) __visible
+#	define EXPORT_SYMBOL(y, x)	typeof(x) (x) __visible; __typeof (x) y __attribute ((alias (#x), visibility ("default")))
 #else
 #	define EXPORT_SYMBOL
 #endif
diff --git a/src/batch.c b/src/batch.c
index ec9f728..3f53218 100644
--- a/src/batch.c
+++ b/src/batch.c
@@ -80,7 +80,7 @@ err1:
 	free(batch);
 	return NULL;
 }
-EXPORT_SYMBOL(nft_batch_alloc);
+EXPORT_SYMBOL(nftnl_batch_alloc, nft_batch_alloc);
 
 void nft_batch_free(struct nft_batch *batch)
 {
@@ -94,7 +94,7 @@ void nft_batch_free(struct nft_batch *batch)
 
 	free(batch);
 }
-EXPORT_SYMBOL(nft_batch_free);
+EXPORT_SYMBOL(nftnl_batch_free, nft_batch_free);
 
 int nft_batch_update(struct nft_batch *batch)
 {
@@ -119,19 +119,19 @@ int nft_batch_update(struct nft_batch *batch)
 err1:
 	return -1;
 }
-EXPORT_SYMBOL(nft_batch_update);
+EXPORT_SYMBOL(nftnl_batch_update, nft_batch_update);
 
 void *nft_batch_buffer(struct nft_batch *batch)
 {
 	return mnl_nlmsg_batch_current(batch->current_page->batch);
 }
-EXPORT_SYMBOL(nft_batch_buffer);
+EXPORT_SYMBOL(nftnl_batch_buffer, nft_batch_buffer);
 
 uint32_t nft_batch_buffer_len(struct nft_batch *batch)
 {
 	return mnl_nlmsg_batch_size(batch->current_page->batch);
 }
-EXPORT_SYMBOL(nft_batch_buffer_len);
+EXPORT_SYMBOL(nftnl_batch_buffer_len, nft_batch_buffer_len);
 
 int nft_batch_iovec_len(struct nft_batch *batch)
 {
@@ -143,7 +143,7 @@ int nft_batch_iovec_len(struct nft_batch *batch)
 
 	return num_pages;
 }
-EXPORT_SYMBOL(nft_batch_iovec_len);
+EXPORT_SYMBOL(nftnl_batch_iovec_len, nft_batch_iovec_len);
 
 void nft_batch_iovec(struct nft_batch *batch, struct iovec *iov, uint32_t iovlen)
 {
@@ -159,4 +159,4 @@ void nft_batch_iovec(struct nft_batch *batch, struct iovec *iov, uint32_t iovlen
 		i++;
 	}
 }
-EXPORT_SYMBOL(nft_batch_iovec);
+EXPORT_SYMBOL(nftnl_batch_iovec, nft_batch_iovec);
diff --git a/src/chain.c b/src/chain.c
index 4f9c6b7..bb9fe90 100644
--- a/src/chain.c
+++ b/src/chain.c
@@ -91,7 +91,7 @@ struct nft_chain *nft_chain_alloc(void)
 {
 	return calloc(1, sizeof(struct nft_chain));
 }
-EXPORT_SYMBOL(nft_chain_alloc);
+EXPORT_SYMBOL(nftnl_chain_alloc, nft_chain_alloc);
 
 void nft_chain_free(struct nft_chain *c)
 {
@@ -104,13 +104,13 @@ void nft_chain_free(struct nft_chain *c)
 
 	xfree(c);
 }
-EXPORT_SYMBOL(nft_chain_free);
+EXPORT_SYMBOL(nftnl_chain_free, nft_chain_free);
 
 bool nft_chain_attr_is_set(const struct nft_chain *c, uint16_t attr)
 {
 	return c->flags & (1 << attr);
 }
-EXPORT_SYMBOL(nft_chain_attr_is_set);
+EXPORT_SYMBOL(nftnl_chain_attr_is_set, nft_chain_attr_is_set);
 
 void nft_chain_attr_unset(struct nft_chain *c, uint16_t attr)
 {
@@ -153,7 +153,7 @@ void nft_chain_attr_unset(struct nft_chain *c, uint16_t attr)
 
 	c->flags &= ~(1 << attr);
 }
-EXPORT_SYMBOL(nft_chain_attr_unset);
+EXPORT_SYMBOL(nftnl_chain_attr_unset, nft_chain_attr_unset);
 
 static uint32_t nft_chain_attr_validate[NFT_CHAIN_ATTR_MAX + 1] = {
 	[NFT_CHAIN_ATTR_HOOKNUM]	= sizeof(uint32_t),
@@ -222,43 +222,43 @@ void nft_chain_attr_set_data(struct nft_chain *c, uint16_t attr,
 	}
 	c->flags |= (1 << attr);
 }
-EXPORT_SYMBOL(nft_chain_attr_set_data);
+EXPORT_SYMBOL(nftnl_chain_attr_set_data, nft_chain_attr_set_data);
 
 void nft_chain_attr_set(struct nft_chain *c, uint16_t attr, const void *data)
 {
 	nft_chain_attr_set_data(c, attr, data, nft_chain_attr_validate[attr]);
 }
-EXPORT_SYMBOL(nft_chain_attr_set);
+EXPORT_SYMBOL(nftnl_chain_attr_set, nft_chain_attr_set);
 
 void nft_chain_attr_set_u32(struct nft_chain *c, uint16_t attr, uint32_t data)
 {
 	nft_chain_attr_set_data(c, attr, &data, sizeof(uint32_t));
 }
-EXPORT_SYMBOL(nft_chain_attr_set_u32);
+EXPORT_SYMBOL(nftnl_chain_attr_set_u32, nft_chain_attr_set_u32);
 
 void nft_chain_attr_set_s32(struct nft_chain *c, uint16_t attr, int32_t data)
 {
 	nft_chain_attr_set_data(c, attr, &data, sizeof(int32_t));
 }
-EXPORT_SYMBOL(nft_chain_attr_set_s32);
+EXPORT_SYMBOL(nftnl_chain_attr_set_s32, nft_chain_attr_set_s32);
 
 void nft_chain_attr_set_u64(struct nft_chain *c, uint16_t attr, uint64_t data)
 {
 	nft_chain_attr_set_data(c, attr, &data, sizeof(uint64_t));
 }
-EXPORT_SYMBOL(nft_chain_attr_set_u64);
+EXPORT_SYMBOL(nftnl_chain_attr_set_u64, nft_chain_attr_set_u64);
 
 void nft_chain_attr_set_u8(struct nft_chain *c, uint16_t attr, uint8_t data)
 {
 	nft_chain_attr_set_data(c, attr, &data, sizeof(uint8_t));
 }
-EXPORT_SYMBOL(nft_chain_attr_set_u8);
+EXPORT_SYMBOL(nftnl_chain_attr_set_u8, nft_chain_attr_set_u8);
 
 void nft_chain_attr_set_str(struct nft_chain *c, uint16_t attr, const char *str)
 {
 	nft_chain_attr_set_data(c, attr, str, strlen(str));
 }
-EXPORT_SYMBOL(nft_chain_attr_set_str);
+EXPORT_SYMBOL(nftnl_chain_attr_set_str, nft_chain_attr_set_str);
 
 const void *nft_chain_attr_get_data(struct nft_chain *c, uint16_t attr,
 				    uint32_t *data_len)
@@ -303,20 +303,20 @@ const void *nft_chain_attr_get_data(struct nft_chain *c, uint16_t attr,
 	}
 	return NULL;
 }
-EXPORT_SYMBOL(nft_chain_attr_get_data);
+EXPORT_SYMBOL(nftnl_chain_attr_get_data, nft_chain_attr_get_data);
 
 const void *nft_chain_attr_get(struct nft_chain *c, uint16_t attr)
 {
 	uint32_t data_len;
 	return nft_chain_attr_get_data(c, attr, &data_len);
 }
-EXPORT_SYMBOL(nft_chain_attr_get);
+EXPORT_SYMBOL(nftnl_chain_attr_get, nft_chain_attr_get);
 
 const char *nft_chain_attr_get_str(struct nft_chain *c, uint16_t attr)
 {
 	return nft_chain_attr_get(c, attr);
 }
-EXPORT_SYMBOL(nft_chain_attr_get_str);
+EXPORT_SYMBOL(nftnl_chain_attr_get_str, nft_chain_attr_get_str);
 
 uint32_t nft_chain_attr_get_u32(struct nft_chain *c, uint16_t attr)
 {
@@ -327,7 +327,7 @@ uint32_t nft_chain_attr_get_u32(struct nft_chain *c, uint16_t attr)
 
 	return val ? *val : 0;
 }
-EXPORT_SYMBOL(nft_chain_attr_get_u32);
+EXPORT_SYMBOL(nftnl_chain_attr_get_u32, nft_chain_attr_get_u32);
 
 int32_t nft_chain_attr_get_s32(struct nft_chain *c, uint16_t attr)
 {
@@ -338,7 +338,7 @@ int32_t nft_chain_attr_get_s32(struct nft_chain *c, uint16_t attr)
 
 	return val ? *val : 0;
 }
-EXPORT_SYMBOL(nft_chain_attr_get_s32);
+EXPORT_SYMBOL(nftnl_chain_attr_get_s32, nft_chain_attr_get_s32);
 
 uint64_t nft_chain_attr_get_u64(struct nft_chain *c, uint16_t attr)
 {
@@ -349,7 +349,7 @@ uint64_t nft_chain_attr_get_u64(struct nft_chain *c, uint16_t attr)
 
 	return val ? *val : 0;
 }
-EXPORT_SYMBOL(nft_chain_attr_get_u64);
+EXPORT_SYMBOL(nftnl_chain_attr_get_u64, nft_chain_attr_get_u64);
 
 uint8_t nft_chain_attr_get_u8(struct nft_chain *c, uint16_t attr)
 {
@@ -360,7 +360,7 @@ uint8_t nft_chain_attr_get_u8(struct nft_chain *c, uint16_t attr)
 
 	return val ? *val : 0;
 }
-EXPORT_SYMBOL(nft_chain_attr_get_u8);
+EXPORT_SYMBOL(nftnl_chain_attr_get_u8, nft_chain_attr_get_u8);
 
 void nft_chain_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nft_chain *c)
 {
@@ -397,7 +397,7 @@ void nft_chain_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nft_chain
 	if (c->flags & (1 << NFT_CHAIN_ATTR_TYPE))
 		mnl_attr_put_strz(nlh, NFTA_CHAIN_TYPE, c->type);
 }
-EXPORT_SYMBOL(nft_chain_nlmsg_build_payload);
+EXPORT_SYMBOL(nftnl_chain_nlmsg_build_payload, nft_chain_nlmsg_build_payload);
 
 static int nft_chain_parse_attr_cb(const struct nlattr *attr, void *data)
 {
@@ -571,7 +571,7 @@ int nft_chain_nlmsg_parse(const struct nlmsghdr *nlh, struct nft_chain *c)
 
 	return ret;
 }
-EXPORT_SYMBOL(nft_chain_nlmsg_parse);
+EXPORT_SYMBOL(nftnl_chain_nlmsg_parse, nft_chain_nlmsg_parse);
 
 static inline int nft_str2hooknum(int family, const char *hook)
 {
@@ -823,14 +823,14 @@ int nft_chain_parse(struct nft_chain *c, enum nft_parse_type type,
 {
 	return nft_chain_do_parse(c, type, data, err, NFT_PARSE_BUFFER);
 }
-EXPORT_SYMBOL(nft_chain_parse);
+EXPORT_SYMBOL(nftnl_chain_parse, nft_chain_parse);
 
 int nft_chain_parse_file(struct nft_chain *c, enum nft_parse_type type,
 			 FILE *fp, struct nft_parse_err *err)
 {
 	return nft_chain_do_parse(c, type, fp, err, NFT_PARSE_FILE);
 }
-EXPORT_SYMBOL(nft_chain_parse_file);
+EXPORT_SYMBOL(nftnl_chain_parse_file, nft_chain_parse_file);
 
 static int nft_chain_export(char *buf, size_t size, struct nft_chain *c,
 			    int type)
@@ -932,7 +932,7 @@ int nft_chain_snprintf(char *buf, size_t size, struct nft_chain *c,
 	return nft_chain_cmd_snprintf(buf, size, c, nft_flag2cmd(flags), type,
 				      flags);
 }
-EXPORT_SYMBOL(nft_chain_snprintf);
+EXPORT_SYMBOL(nftnl_chain_snprintf, nft_chain_snprintf);
 
 static inline int nft_chain_do_snprintf(char *buf, size_t size, void *c,
 					uint32_t cmd, uint32_t type,
@@ -947,7 +947,7 @@ int nft_chain_fprintf(FILE *fp, struct nft_chain *c, uint32_t type,
 	return nft_fprintf(fp, c, NFT_CMD_UNSPEC, type, flags,
 			   nft_chain_do_snprintf);
 }
-EXPORT_SYMBOL(nft_chain_fprintf);
+EXPORT_SYMBOL(nftnl_chain_fprintf, nft_chain_fprintf);
 
 struct nft_chain_list {
 	struct list_head list;
@@ -965,7 +965,7 @@ struct nft_chain_list *nft_chain_list_alloc(void)
 
 	return list;
 }
-EXPORT_SYMBOL(nft_chain_list_alloc);
+EXPORT_SYMBOL(nftnl_chain_list_alloc, nft_chain_list_alloc);
 
 void nft_chain_list_free(struct nft_chain_list *list)
 {
@@ -977,31 +977,31 @@ void nft_chain_list_free(struct nft_chain_list *list)
 	}
 	xfree(list);
 }
-EXPORT_SYMBOL(nft_chain_list_free);
+EXPORT_SYMBOL(nftnl_chain_list_free, nft_chain_list_free);
 
 int nft_chain_list_is_empty(struct nft_chain_list *list)
 {
 	return list_empty(&list->list);
 }
-EXPORT_SYMBOL(nft_chain_list_is_empty);
+EXPORT_SYMBOL(nftnl_chain_list_is_empty, nft_chain_list_is_empty);
 
 void nft_chain_list_add(struct nft_chain *r, struct nft_chain_list *list)
 {
 	list_add(&r->head, &list->list);
 }
-EXPORT_SYMBOL(nft_chain_list_add);
+EXPORT_SYMBOL(nftnl_chain_list_add, nft_chain_list_add);
 
 void nft_chain_list_add_tail(struct nft_chain *r, struct nft_chain_list *list)
 {
 	list_add_tail(&r->head, &list->list);
 }
-EXPORT_SYMBOL(nft_chain_list_add_tail);
+EXPORT_SYMBOL(nftnl_chain_list_add_tail, nft_chain_list_add_tail);
 
 void nft_chain_list_del(struct nft_chain *r)
 {
 	list_del(&r->head);
 }
-EXPORT_SYMBOL(nft_chain_list_del);
+EXPORT_SYMBOL(nftnl_chain_list_del, nft_chain_list_del);
 
 int nft_chain_list_foreach(struct nft_chain_list *chain_list,
 			   int (*cb)(struct nft_chain *r, void *data),
@@ -1017,7 +1017,7 @@ int nft_chain_list_foreach(struct nft_chain_list *chain_list,
 	}
 	return 0;
 }
-EXPORT_SYMBOL(nft_chain_list_foreach);
+EXPORT_SYMBOL(nftnl_chain_list_foreach, nft_chain_list_foreach);
 
 struct nft_chain_list_iter {
 	struct nft_chain_list	*list;
@@ -1040,7 +1040,7 @@ struct nft_chain_list_iter *nft_chain_list_iter_create(struct nft_chain_list *l)
 
 	return iter;
 }
-EXPORT_SYMBOL(nft_chain_list_iter_create);
+EXPORT_SYMBOL(nftnl_chain_list_iter_create, nft_chain_list_iter_create);
 
 struct nft_chain *nft_chain_list_iter_next(struct nft_chain_list_iter *iter)
 {
@@ -1056,10 +1056,10 @@ struct nft_chain *nft_chain_list_iter_next(struct nft_chain_list_iter *iter)
 
 	return r;
 }
-EXPORT_SYMBOL(nft_chain_list_iter_next);
+EXPORT_SYMBOL(nftnl_chain_list_iter_next, nft_chain_list_iter_next);
 
 void nft_chain_list_iter_destroy(struct nft_chain_list_iter *iter)
 {
 	xfree(iter);
 }
-EXPORT_SYMBOL(nft_chain_list_iter_destroy);
+EXPORT_SYMBOL(nftnl_chain_list_iter_destroy, nft_chain_list_iter_destroy);
diff --git a/src/common.c b/src/common.c
index d69b522..27f9177 100644
--- a/src/common.c
+++ b/src/common.c
@@ -40,7 +40,7 @@ struct nlmsghdr *nft_nlmsg_build_hdr(char *buf, uint16_t cmd, uint16_t family,
 
 	return nlh;
 }
-EXPORT_SYMBOL(nft_nlmsg_build_hdr);
+EXPORT_SYMBOL(nftnl_nlmsg_build_hdr, nft_nlmsg_build_hdr);
 
 struct nft_parse_err *nft_parse_err_alloc(void)
 {
@@ -54,13 +54,13 @@ struct nft_parse_err *nft_parse_err_alloc(void)
 
 	return err;
 }
-EXPORT_SYMBOL(nft_parse_err_alloc);
+EXPORT_SYMBOL(nftnl_parse_err_alloc, nft_parse_err_alloc);
 
 void nft_parse_err_free(struct nft_parse_err *err)
 {
 	xfree(err);
 }
-EXPORT_SYMBOL(nft_parse_err_free);
+EXPORT_SYMBOL(nftnl_parse_err_free, nft_parse_err_free);
 
 int nft_parse_perror(const char *msg, struct nft_parse_err *err)
 {
@@ -80,7 +80,7 @@ int nft_parse_perror(const char *msg, struct nft_parse_err *err)
 		return fprintf(stderr, "%s: Undefined error\n", msg);
 	}
 }
-EXPORT_SYMBOL(nft_parse_perror);
+EXPORT_SYMBOL(nftnl_parse_perror, nft_parse_perror);
 
 int nft_cmd_header_snprintf(char *buf, size_t size, uint32_t cmd, uint32_t type,
 			    uint32_t flags)
@@ -178,13 +178,13 @@ void nft_batch_begin(char *buf, uint32_t seq)
 {
 	nft_batch_build_hdr(buf, NFNL_MSG_BATCH_BEGIN, seq);
 }
-EXPORT_SYMBOL(nft_batch_begin);
+EXPORT_SYMBOL(nftnl_batch_begin, nft_batch_begin);
 
 void nft_batch_end(char *buf, uint32_t seq)
 {
 	nft_batch_build_hdr(buf, NFNL_MSG_BATCH_END, seq);
 }
-EXPORT_SYMBOL(nft_batch_end);
+EXPORT_SYMBOL(nftnl_batch_end, nft_batch_end);
 
 int nft_batch_is_supported(void)
 {
@@ -243,4 +243,4 @@ err:
 	mnl_nlmsg_batch_stop(b);
 	return -1;
 }
-EXPORT_SYMBOL(nft_batch_is_supported);
+EXPORT_SYMBOL(nftnl_batch_is_supported, nft_batch_is_supported);
diff --git a/src/expr.c b/src/expr.c
index 4109495..7731a85 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -43,7 +43,7 @@ struct nft_rule_expr *nft_rule_expr_alloc(const char *name)
 
 	return expr;
 }
-EXPORT_SYMBOL(nft_rule_expr_alloc);
+EXPORT_SYMBOL(nftnl_rule_expr_alloc, nft_rule_expr_alloc);
 
 void nft_rule_expr_free(struct nft_rule_expr *expr)
 {
@@ -52,13 +52,13 @@ void nft_rule_expr_free(struct nft_rule_expr *expr)
 
 	xfree(expr);
 }
-EXPORT_SYMBOL(nft_rule_expr_free);
+EXPORT_SYMBOL(nftnl_rule_expr_free, nft_rule_expr_free);
 
 bool nft_rule_expr_is_set(const struct nft_rule_expr *expr, uint16_t type)
 {
 	return expr->flags & (1 << type);
 }
-EXPORT_SYMBOL(nft_rule_expr_is_set);
+EXPORT_SYMBOL(nftnl_rule_expr_is_set, nft_rule_expr_is_set);
 
 void
 nft_rule_expr_set(struct nft_rule_expr *expr, uint16_t type,
@@ -73,42 +73,42 @@ nft_rule_expr_set(struct nft_rule_expr *expr, uint16_t type,
 	}
 	expr->flags |= (1 << type);
 }
-EXPORT_SYMBOL(nft_rule_expr_set);
+EXPORT_SYMBOL(nftnl_rule_expr_set, nft_rule_expr_set);
 
 void
 nft_rule_expr_set_u8(struct nft_rule_expr *expr, uint16_t type, uint8_t data)
 {
 	nft_rule_expr_set(expr, type, &data, sizeof(uint8_t));
 }
-EXPORT_SYMBOL(nft_rule_expr_set_u8);
+EXPORT_SYMBOL(nftnl_rule_expr_set_u8, nft_rule_expr_set_u8);
 
 void
 nft_rule_expr_set_u16(struct nft_rule_expr *expr, uint16_t type, uint16_t data)
 {
 	nft_rule_expr_set(expr, type, &data, sizeof(uint16_t));
 }
-EXPORT_SYMBOL(nft_rule_expr_set_u16);
+EXPORT_SYMBOL(nftnl_rule_expr_set_u16, nft_rule_expr_set_u16);
 
 void
 nft_rule_expr_set_u32(struct nft_rule_expr *expr, uint16_t type, uint32_t data)
 {
 	nft_rule_expr_set(expr, type, &data, sizeof(uint32_t));
 }
-EXPORT_SYMBOL(nft_rule_expr_set_u32);
+EXPORT_SYMBOL(nftnl_rule_expr_set_u32, nft_rule_expr_set_u32);
 
 void
 nft_rule_expr_set_u64(struct nft_rule_expr *expr, uint16_t type, uint64_t data)
 {
 	nft_rule_expr_set(expr, type, &data, sizeof(uint64_t));
 }
-EXPORT_SYMBOL(nft_rule_expr_set_u64);
+EXPORT_SYMBOL(nftnl_rule_expr_set_u64, nft_rule_expr_set_u64);
 
 void
 nft_rule_expr_set_str(struct nft_rule_expr *expr, uint16_t type, const char *str)
 {
 	nft_rule_expr_set(expr, type, str, strlen(str)+1);
 }
-EXPORT_SYMBOL(nft_rule_expr_set_str);
+EXPORT_SYMBOL(nftnl_rule_expr_set_str, nft_rule_expr_set_str);
 
 const void *nft_rule_expr_get(const struct nft_rule_expr *expr,
 			      uint16_t type, uint32_t *data_len)
@@ -129,7 +129,7 @@ const void *nft_rule_expr_get(const struct nft_rule_expr *expr,
 
 	return ret;
 }
-EXPORT_SYMBOL(nft_rule_expr_get);
+EXPORT_SYMBOL(nftnl_rule_expr_get, nft_rule_expr_get);
 
 uint8_t nft_rule_expr_get_u8(const struct nft_rule_expr *expr, uint16_t type)
 {
@@ -145,7 +145,7 @@ uint8_t nft_rule_expr_get_u8(const struct nft_rule_expr *expr, uint16_t type)
 
 	return *((uint8_t *)data);
 }
-EXPORT_SYMBOL(nft_rule_expr_get_u8);
+EXPORT_SYMBOL(nftnl_rule_expr_get_u8, nft_rule_expr_get_u8);
 
 uint16_t nft_rule_expr_get_u16(const struct nft_rule_expr *expr, uint16_t type)
 {
@@ -161,7 +161,7 @@ uint16_t nft_rule_expr_get_u16(const struct nft_rule_expr *expr, uint16_t type)
 
 	return *((uint16_t *)data);
 }
-EXPORT_SYMBOL(nft_rule_expr_get_u16);
+EXPORT_SYMBOL(nftnl_rule_expr_get_u16, nft_rule_expr_get_u16);
 
 uint32_t nft_rule_expr_get_u32(const struct nft_rule_expr *expr, uint16_t type)
 {
@@ -177,7 +177,7 @@ uint32_t nft_rule_expr_get_u32(const struct nft_rule_expr *expr, uint16_t type)
 
 	return *((uint32_t *)data);
 }
-EXPORT_SYMBOL(nft_rule_expr_get_u32);
+EXPORT_SYMBOL(nftnl_rule_expr_get_u32, nft_rule_expr_get_u32);
 
 uint64_t nft_rule_expr_get_u64(const struct nft_rule_expr *expr, uint16_t type)
 {
@@ -193,7 +193,7 @@ uint64_t nft_rule_expr_get_u64(const struct nft_rule_expr *expr, uint16_t type)
 
 	return *((uint64_t *)data);
 }
-EXPORT_SYMBOL(nft_rule_expr_get_u64);
+EXPORT_SYMBOL(nftnl_rule_expr_get_u64, nft_rule_expr_get_u64);
 
 const char *nft_rule_expr_get_str(const struct nft_rule_expr *expr, uint16_t type)
 {
@@ -201,7 +201,7 @@ const char *nft_rule_expr_get_str(const struct nft_rule_expr *expr, uint16_t typ
 
 	return (const char *)nft_rule_expr_get(expr, type, &data_len);
 }
-EXPORT_SYMBOL(nft_rule_expr_get_str);
+EXPORT_SYMBOL(nftnl_rule_expr_get_str, nft_rule_expr_get_str);
 
 void
 nft_rule_expr_build_payload(struct nlmsghdr *nlh, struct nft_rule_expr *expr)
@@ -273,4 +273,4 @@ int nft_rule_expr_snprintf(char *buf, size_t size, struct nft_rule_expr *expr,
 
 	return offset;
 }
-EXPORT_SYMBOL(nft_rule_expr_snprintf);
+EXPORT_SYMBOL(nftnl_rule_expr_snprintf, nft_rule_expr_snprintf);
diff --git a/src/gen.c b/src/gen.c
index 10a647a..2c9e561 100644
--- a/src/gen.c
+++ b/src/gen.c
@@ -33,19 +33,19 @@ struct nft_gen *nft_gen_alloc(void)
 {
 	return calloc(1, sizeof(struct nft_gen));
 }
-EXPORT_SYMBOL(nft_gen_alloc);
+EXPORT_SYMBOL(nftnl_gen_alloc, nft_gen_alloc);
 
 void nft_gen_free(struct nft_gen *gen)
 {
 	xfree(gen);
 }
-EXPORT_SYMBOL(nft_gen_free);
+EXPORT_SYMBOL(nftnl_gen_free, nft_gen_free);
 
 bool nft_gen_attr_is_set(const struct nft_gen *gen, uint16_t attr)
 {
 	return gen->flags & (1 << attr);
 }
-EXPORT_SYMBOL(nft_gen_attr_is_set);
+EXPORT_SYMBOL(nftnl_gen_attr_is_set, nft_gen_attr_is_set);
 
 void nft_gen_attr_unset(struct nft_gen *gen, uint16_t attr)
 {
@@ -58,7 +58,7 @@ void nft_gen_attr_unset(struct nft_gen *gen, uint16_t attr)
 	}
 	gen->flags &= ~(1 << attr);
 }
-EXPORT_SYMBOL(nft_gen_attr_unset);
+EXPORT_SYMBOL(nftnl_gen_attr_unset, nft_gen_attr_unset);
 
 static uint32_t nft_gen_attr_validate[NFT_GEN_MAX + 1] = {
 	[NFT_GEN_ID]	= sizeof(uint32_t),
@@ -79,19 +79,19 @@ void nft_gen_attr_set_data(struct nft_gen *gen, uint16_t attr,
 	}
 	gen->flags |= (1 << attr);
 }
-EXPORT_SYMBOL(nft_gen_attr_set_data);
+EXPORT_SYMBOL(nftnl_gen_attr_set_data, nft_gen_attr_set_data);
 
 void nft_gen_attr_set(struct nft_gen *gen, uint16_t attr, const void *data)
 {
 	nft_gen_attr_set_data(gen, attr, data, nft_gen_attr_validate[attr]);
 }
-EXPORT_SYMBOL(nft_gen_attr_set);
+EXPORT_SYMBOL(nftnl_gen_attr_set, nft_gen_attr_set);
 
 void nft_gen_attr_set_u32(struct nft_gen *gen, uint16_t attr, uint32_t val)
 {
 	nft_gen_attr_set_data(gen, attr, &val, sizeof(uint32_t));
 }
-EXPORT_SYMBOL(nft_gen_attr_set_u32);
+EXPORT_SYMBOL(nftnl_gen_attr_set_u32, nft_gen_attr_set_u32);
 
 const void *nft_gen_attr_get_data(struct nft_gen *gen, uint16_t attr,
 				  uint32_t *data_len)
@@ -105,21 +105,21 @@ const void *nft_gen_attr_get_data(struct nft_gen *gen, uint16_t attr,
 	}
 	return NULL;
 }
-EXPORT_SYMBOL(nft_gen_attr_get_data);
+EXPORT_SYMBOL(nftnl_gen_attr_get_data, nft_gen_attr_get_data);
 
 const void *nft_gen_attr_get(struct nft_gen *gen, uint16_t attr)
 {
 	uint32_t data_len;
 	return nft_gen_attr_get_data(gen, attr, &data_len);
 }
-EXPORT_SYMBOL(nft_gen_attr_get);
+EXPORT_SYMBOL(nftnl_gen_attr_get, nft_gen_attr_get);
 
 uint32_t nft_gen_attr_get_u32(struct nft_gen *gen, uint16_t attr)
 {
 	const void *ret = nft_gen_attr_get(gen, attr);
 	return ret == NULL ? 0 : *((uint32_t *)ret);
 }
-EXPORT_SYMBOL(nft_gen_attr_get_u32);
+EXPORT_SYMBOL(nftnl_gen_attr_get_u32, nft_gen_attr_get_u32);
 
 static int nft_gen_parse_attr_cb(const struct nlattr *attr, void *data)
 {
@@ -154,7 +154,7 @@ int nft_gen_nlmsg_parse(const struct nlmsghdr *nlh, struct nft_gen *gen)
 	}
 	return 0;
 }
-EXPORT_SYMBOL(nft_gen_nlmsg_parse);
+EXPORT_SYMBOL(nftnl_gen_nlmsg_parse, nft_gen_nlmsg_parse);
 
 static int nft_gen_snprintf_default(char *buf, size_t size, struct nft_gen *gen)
 {
@@ -190,7 +190,7 @@ int nft_gen_snprintf(char *buf, size_t size, struct nft_gen *gen, uint32_t type,
 	return nft_gen_cmd_snprintf(buf, size, gen, nft_flag2cmd(flags), type,
 				    flags);
 }
-EXPORT_SYMBOL(nft_gen_snprintf);
+EXPORT_SYMBOL(nftnl_gen_snprintf, nft_gen_snprintf);
 
 static inline int nft_gen_do_snprintf(char *buf, size_t size, void *gen,
 				      uint32_t cmd, uint32_t type,
@@ -205,4 +205,4 @@ int nft_gen_fprintf(FILE *fp, struct nft_gen *gen, uint32_t type,
 	return nft_fprintf(fp, gen, NFT_CMD_UNSPEC, type, flags,
 			   nft_gen_do_snprintf);
 }
-EXPORT_SYMBOL(nft_gen_fprintf);
+EXPORT_SYMBOL(nftnl_gen_fprintf, nft_gen_fprintf);
diff --git a/src/libnftnl.map b/src/libnftnl.map
index 4cd5982..3e069c8 100644
--- a/src/libnftnl.map
+++ b/src/libnftnl.map
@@ -196,6 +196,207 @@ global:
   nft_parse_err_free;
   nft_parse_perror;
 
+#
+# aliases
+#
+
+  nftnl_table_alloc;
+  nftnl_table_free;
+  nftnl_table_attr_is_set;
+  nftnl_table_attr_unset;
+  nftnl_table_attr_set;
+  nftnl_table_attr_get;
+  nftnl_table_attr_set_u8;
+  nftnl_table_attr_set_u32;
+  nftnl_table_attr_set_str;
+  nftnl_table_attr_get_u8;
+  nftnl_table_attr_get_u32;
+  nftnl_table_attr_get_str;
+  nftnl_table_parse;
+  nftnl_table_parse_file;
+  nftnl_table_snprintf;
+  nftnl_table_fprintf;
+  nftnl_table_nlmsg_build_payload;
+  nftnl_table_nlmsg_parse;
+  nftnl_table_list_alloc;
+  nftnl_table_list_free;
+  nftnl_table_list_is_empty;
+  nftnl_table_list_foreach;
+  nftnl_table_list_add;
+  nftnl_table_list_add_tail;
+  nftnl_table_list_del;
+  nftnl_table_list_iter_create;
+  nftnl_table_list_iter_next;
+  nftnl_table_list_iter_destroy;
+
+  nftnl_chain_alloc;
+  nftnl_chain_free;
+  nftnl_chain_attr_is_set;
+  nftnl_chain_attr_unset;
+  nftnl_chain_attr_set;
+  nftnl_chain_attr_set_u8;
+  nftnl_chain_attr_set_u32;
+  nftnl_chain_attr_set_s32;
+  nftnl_chain_attr_set_u64;
+  nftnl_chain_attr_set_str;
+  nftnl_chain_attr_get;
+  nftnl_chain_attr_get_u8;
+  nftnl_chain_attr_get_u32;
+  nftnl_chain_attr_get_s32;
+  nftnl_chain_attr_get_u64;
+  nftnl_chain_attr_get_str;
+  nftnl_chain_parse;
+  nftnl_chain_parse_file;
+  nftnl_chain_snprintf;
+  nftnl_chain_fprintf;
+  nftnl_chain_nlmsg_build_payload;
+  nftnl_chain_nlmsg_parse;
+  nftnl_chain_list_alloc;
+  nftnl_chain_list_free;
+  nftnl_chain_list_is_empty;
+  nftnl_chain_list_add;
+  nftnl_chain_list_add_tail;
+  nftnl_chain_list_del;
+  nftnl_chain_list_foreach;
+  nftnl_chain_list_iter_create;
+  nftnl_chain_list_iter_next;
+  nftnl_chain_list_iter_destroy;
+
+  nftnl_rule_alloc;
+  nftnl_rule_free;
+  nftnl_rule_attr_is_set;
+  nftnl_rule_attr_unset;
+  nftnl_rule_attr_set;
+  nftnl_rule_attr_set_u32;
+  nftnl_rule_attr_set_u64;
+  nftnl_rule_attr_set_str;
+  nftnl_rule_attr_get;
+  nftnl_rule_attr_get_u8;
+  nftnl_rule_attr_get_u32;
+  nftnl_rule_attr_get_u64;
+  nftnl_rule_attr_get_str;
+  nftnl_rule_parse;
+  nftnl_rule_parse_file;
+  nftnl_rule_snprintf;
+  nftnl_rule_fprintf;
+  nftnl_rule_nlmsg_build_payload;
+  nftnl_rule_nlmsg_parse;
+  nftnl_rule_add_expr;
+
+  nftnl_rule_expr_foreach;
+  nftnl_rule_expr_iter_create;
+  nftnl_rule_expr_iter_next;
+  nftnl_rule_expr_iter_destroy;
+
+  nftnl_rule_expr_alloc;
+  nftnl_rule_expr_is_set;
+  nftnl_rule_expr_set;
+  nftnl_rule_expr_set_u8;
+  nftnl_rule_expr_set_u16;
+  nftnl_rule_expr_set_u32;
+  nftnl_rule_expr_set_u64;
+  nftnl_rule_expr_set_str;
+  nftnl_rule_expr_get;
+  nftnl_rule_expr_get_u8;
+  nftnl_rule_expr_get_u16;
+  nftnl_rule_expr_get_u32;
+  nftnl_rule_expr_get_u64;
+  nftnl_rule_expr_get_str;
+  nftnl_rule_expr_snprintf;
+  nftnl_rule_expr_free;
+
+  nftnl_rule_list_alloc;
+  nftnl_rule_list_free;
+  nftnl_rule_list_is_empty;
+  nftnl_rule_list_add;
+  nftnl_rule_list_add_tail;
+  nftnl_rule_list_del;
+  nftnl_rule_list_foreach;
+  nftnl_rule_list_iter_create;
+  nftnl_rule_list_iter_cur;
+  nftnl_rule_list_iter_next;
+  nftnl_rule_list_iter_destroy;
+
+  nftnl_set_alloc;
+  nftnl_set_free;
+  nftnl_set_attr_unset;
+  nftnl_set_attr_is_set;
+  nftnl_set_attr_set;
+  nftnl_set_attr_set_u32;
+  nftnl_set_attr_set_u64;
+  nftnl_set_attr_set_str;
+  nftnl_set_attr_get;
+  nftnl_set_attr_get_str;
+  nftnl_set_attr_get_u32;
+  nftnl_set_attr_get_u64;
+  nftnl_set_nlmsg_build_payload;
+  nftnl_set_nlmsg_parse;
+  nftnl_set_parse;
+  nftnl_set_parse_file;
+  nftnl_set_snprintf;
+  nftnl_set_fprintf;
+
+  nftnl_set_list_alloc;
+  nftnl_set_list_free;
+  nftnl_set_list_add;
+  nftnl_set_list_add_tail;
+  nftnl_set_list_del;
+  nftnl_set_list_is_empty;
+  nftnl_set_list_foreach;
+
+  nftnl_set_list_iter_create;
+  nftnl_set_list_iter_cur;
+  nftnl_set_list_iter_next;
+  nftnl_set_list_iter_destroy;
+
+  nftnl_set_elem_alloc;
+  nftnl_set_elem_free;
+  nftnl_set_elem_add;
+  nftnl_set_elem_foreach;
+  nftnl_set_elem_attr_is_set;
+  nftnl_set_elem_attr_unset;
+  nftnl_set_elem_attr_set;
+  nftnl_set_elem_attr_set_u32;
+  nftnl_set_elem_attr_set_u64;
+  nftnl_set_elem_attr_set_str;
+  nftnl_set_elem_attr_get;
+  nftnl_set_elem_attr_get_str;
+  nftnl_set_elem_attr_get_u32;
+  nftnl_set_elem_attr_get_u64;
+  nftnl_set_elem_nlmsg_build_payload;
+  nftnl_set_elem_parse;
+  nftnl_set_elem_parse_file;
+  nftnl_set_elem_snprintf;
+  nftnl_set_elem_fprinf;
+
+  nftnl_set_elems_nlmsg_build_payload;
+  nftnl_set_elems_nlmsg_parse;
+
+  nftnl_set_elems_foreach;
+
+  nftnl_set_elems_iter_create;
+  nftnl_set_elems_iter_cur;
+  nftnl_set_elems_iter_next;
+  nftnl_set_elems_iter_destroy;
+
+  nftnl_ruleset_alloc;
+  nftnl_ruleset_free;
+  nftnl_ruleset_attr_is_set;
+  nftnl_ruleset_attr_unset;
+  nftnl_ruleset_attr_set;
+  nftnl_ruleset_attr_get;
+  nftnl_ruleset_parse;
+  nftnl_ruleset_parse_file;
+  nftnl_ruleset_snprintf;
+  nftnl_ruleset_fprintf;
+
+  nftnl_nlmsg_build_hdr;
+
+  nftnl_parse_err_alloc;
+  nftnl_parse_err_free;
+  nftnl_parse_perror;
+
+
 local: *;
 };
 
@@ -208,6 +409,20 @@ LIBNFTNL_1.1 {
   nft_rule_attr_get_data;
   nft_set_attr_set_data;
   nft_set_attr_get_data;
+
+#
+# aliases
+#
+
+  nftnl_table_attr_set_data;
+  nftnl_table_attr_get_data;
+  nftnl_chain_attr_set_data;
+  nftnl_chain_attr_get_data;
+  nftnl_rule_attr_set_data;
+  nftnl_rule_attr_get_data;
+  nftnl_set_attr_set_data;
+  nftnl_set_attr_get_data;
+
 } LIBNFTNL_1.0;
 
 LIBNFTNL_1.2 {
@@ -229,6 +444,31 @@ LIBNFTNL_1.2 {
   nft_gen_nlmsg_parse;
   nft_gen_snprintf;
   nft_gen_fprintf;
+
+#
+# aliases
+#
+
+  nftnl_set_elems_nlmsg_build_payload_iter;
+  nftnl_batch_is_supported;
+  nftnl_batch_begin;
+  nftnl_batch_end;
+
+  nftnl_gen_alloc;
+  nftnl_gen_free;
+  nftnl_gen_attr_is_set;
+  nftnl_gen_attr_unset;
+  nftnl_gen_attr_set_data;
+  nftnl_gen_attr_set;
+  nftnl_gen_attr_set_u32;
+  nftnl_gen_attr_get_data;
+  nftnl_gen_attr_get;
+  nftnl_gen_attr_get_u32;
+  nftnl_gen_nlmsg_parse;
+  nftnl_gen_snprintf;
+  nftnl_gen_fprintf;
+
+
 } LIBNFTNL_1.1;
 
 LIBNFTNL_1.2.0 {
@@ -246,4 +486,24 @@ LIBNFTNL_1.2.0 {
   nft_batch_buffer_len;
   nft_batch_iovec_len;
   nft_batch_iovec;
+
+#
+# aliases
+#
+
+  nftnl_ruleset_ctx_is_set;
+  nftnl_ruleset_ctx_get;
+  nftnl_ruleset_ctx_get_u32;
+  nftnl_ruleset_parse_file_cb;
+  nftnl_ruleset_parse_buffer_cb;
+  nftnl_ruleset_ctx_free;
+
+  nftnl_batch_alloc;
+  nftnl_batch_update;
+  nftnl_batch_free;
+  nftnl_batch_buffer;
+  nftnl_batch_buffer_len;
+  nftnl_batch_iovec_len;
+  nftnl_batch_iovec;
+
 } LIBNFTNL_1.2;
diff --git a/src/rule.c b/src/rule.c
index ebaa3ed..d47bc2c 100644
--- a/src/rule.c
+++ b/src/rule.c
@@ -62,7 +62,7 @@ struct nft_rule *nft_rule_alloc(void)
 
 	return r;
 }
-EXPORT_SYMBOL(nft_rule_alloc);
+EXPORT_SYMBOL(nftnl_rule_alloc, nft_rule_alloc);
 
 void nft_rule_free(struct nft_rule *r)
 {
@@ -78,13 +78,13 @@ void nft_rule_free(struct nft_rule *r)
 
 	xfree(r);
 }
-EXPORT_SYMBOL(nft_rule_free);
+EXPORT_SYMBOL(nftnl_rule_free, nft_rule_free);
 
 bool nft_rule_attr_is_set(const struct nft_rule *r, uint16_t attr)
 {
 	return r->flags & (1 << attr);
 }
-EXPORT_SYMBOL(nft_rule_attr_is_set);
+EXPORT_SYMBOL(nftnl_rule_attr_is_set, nft_rule_attr_is_set);
 
 void nft_rule_attr_unset(struct nft_rule *r, uint16_t attr)
 {
@@ -115,7 +115,7 @@ void nft_rule_attr_unset(struct nft_rule *r, uint16_t attr)
 
 	r->flags &= ~(1 << attr);
 }
-EXPORT_SYMBOL(nft_rule_attr_unset);
+EXPORT_SYMBOL(nftnl_rule_attr_unset, nft_rule_attr_unset);
 
 static uint32_t nft_rule_attr_validate[NFT_RULE_ATTR_MAX + 1] = {
 	[NFT_RULE_ATTR_HANDLE]		= sizeof(uint64_t),
@@ -168,31 +168,31 @@ void nft_rule_attr_set_data(struct nft_rule *r, uint16_t attr,
 	}
 	r->flags |= (1 << attr);
 }
-EXPORT_SYMBOL(nft_rule_attr_set_data);
+EXPORT_SYMBOL(nftnl_rule_attr_set_data, nft_rule_attr_set_data);
 
 void nft_rule_attr_set(struct nft_rule *r, uint16_t attr, const void *data)
 {
 	nft_rule_attr_set_data(r, attr, data, nft_rule_attr_validate[attr]);
 }
-EXPORT_SYMBOL(nft_rule_attr_set);
+EXPORT_SYMBOL(nftnl_rule_attr_set, nft_rule_attr_set);
 
 void nft_rule_attr_set_u32(struct nft_rule *r, uint16_t attr, uint32_t val)
 {
 	nft_rule_attr_set_data(r, attr, &val, sizeof(uint32_t));
 }
-EXPORT_SYMBOL(nft_rule_attr_set_u32);
+EXPORT_SYMBOL(nftnl_rule_attr_set_u32, nft_rule_attr_set_u32);
 
 void nft_rule_attr_set_u64(struct nft_rule *r, uint16_t attr, uint64_t val)
 {
 	nft_rule_attr_set_data(r, attr, &val, sizeof(uint64_t));
 }
-EXPORT_SYMBOL(nft_rule_attr_set_u64);
+EXPORT_SYMBOL(nftnl_rule_attr_set_u64, nft_rule_attr_set_u64);
 
 void nft_rule_attr_set_str(struct nft_rule *r, uint16_t attr, const char *str)
 {
 	nft_rule_attr_set_data(r, attr, str, strlen(str));
 }
-EXPORT_SYMBOL(nft_rule_attr_set_str);
+EXPORT_SYMBOL(nftnl_rule_attr_set_str, nft_rule_attr_set_str);
 
 const void *nft_rule_attr_get_data(const struct nft_rule *r, uint16_t attr,
 				   uint32_t *data_len)
@@ -226,20 +226,20 @@ const void *nft_rule_attr_get_data(const struct nft_rule *r, uint16_t attr,
 	}
 	return NULL;
 }
-EXPORT_SYMBOL(nft_rule_attr_get_data);
+EXPORT_SYMBOL(nftnl_rule_attr_get_data, nft_rule_attr_get_data);
 
 const void *nft_rule_attr_get(const struct nft_rule *r, uint16_t attr)
 {
 	uint32_t data_len;
 	return nft_rule_attr_get_data(r, attr, &data_len);
 }
-EXPORT_SYMBOL(nft_rule_attr_get);
+EXPORT_SYMBOL(nftnl_rule_attr_get, nft_rule_attr_get);
 
 const char *nft_rule_attr_get_str(const struct nft_rule *r, uint16_t attr)
 {
 	return nft_rule_attr_get(r, attr);
 }
-EXPORT_SYMBOL(nft_rule_attr_get_str);
+EXPORT_SYMBOL(nftnl_rule_attr_get_str, nft_rule_attr_get_str);
 
 uint32_t nft_rule_attr_get_u32(const struct nft_rule *r, uint16_t attr)
 {
@@ -250,7 +250,7 @@ uint32_t nft_rule_attr_get_u32(const struct nft_rule *r, uint16_t attr)
 
 	return val ? *val : 0;
 }
-EXPORT_SYMBOL(nft_rule_attr_get_u32);
+EXPORT_SYMBOL(nftnl_rule_attr_get_u32, nft_rule_attr_get_u32);
 
 uint64_t nft_rule_attr_get_u64(const struct nft_rule *r, uint16_t attr)
 {
@@ -261,7 +261,7 @@ uint64_t nft_rule_attr_get_u64(const struct nft_rule *r, uint16_t attr)
 
 	return val ? *val : 0;
 }
-EXPORT_SYMBOL(nft_rule_attr_get_u64);
+EXPORT_SYMBOL(nftnl_rule_attr_get_u64, nft_rule_attr_get_u64);
 
 uint8_t nft_rule_attr_get_u8(const struct nft_rule *r, uint16_t attr)
 {
@@ -272,7 +272,7 @@ uint8_t nft_rule_attr_get_u8(const struct nft_rule *r, uint16_t attr)
 
 	return val ? *val : 0;
 }
-EXPORT_SYMBOL(nft_rule_attr_get_u8);
+EXPORT_SYMBOL(nftnl_rule_attr_get_u8, nft_rule_attr_get_u8);
 
 void nft_rule_nlmsg_build_payload(struct nlmsghdr *nlh, struct nft_rule *r)
 {
@@ -313,13 +313,13 @@ void nft_rule_nlmsg_build_payload(struct nlmsghdr *nlh, struct nft_rule *r)
 		mnl_attr_nest_end(nlh, nest);
 	}
 }
-EXPORT_SYMBOL(nft_rule_nlmsg_build_payload);
+EXPORT_SYMBOL(nftnl_rule_nlmsg_build_payload, nft_rule_nlmsg_build_payload);
 
 void nft_rule_add_expr(struct nft_rule *r, struct nft_rule_expr *expr)
 {
 	list_add_tail(&expr->head, &r->expr_list);
 }
-EXPORT_SYMBOL(nft_rule_add_expr);
+EXPORT_SYMBOL(nftnl_rule_add_expr, nft_rule_add_expr);
 
 static int nft_rule_parse_attr_cb(const struct nlattr *attr, void *data)
 {
@@ -468,7 +468,7 @@ int nft_rule_nlmsg_parse(const struct nlmsghdr *nlh, struct nft_rule *r)
 
 	return ret;
 }
-EXPORT_SYMBOL(nft_rule_nlmsg_parse);
+EXPORT_SYMBOL(nftnl_rule_nlmsg_parse, nft_rule_nlmsg_parse);
 
 #ifdef JSON_PARSING
 int nft_jansson_parse_rule(struct nft_rule *r, json_t *tree,
@@ -702,14 +702,14 @@ int nft_rule_parse(struct nft_rule *r, enum nft_parse_type type,
 {
 	return nft_rule_do_parse(r, type, data, err, NFT_PARSE_BUFFER);
 }
-EXPORT_SYMBOL(nft_rule_parse);
+EXPORT_SYMBOL(nftnl_rule_parse, nft_rule_parse);
 
 int nft_rule_parse_file(struct nft_rule *r, enum nft_parse_type type,
 			FILE *fp, struct nft_parse_err *err)
 {
 	return nft_rule_do_parse(r, type, fp, err, NFT_PARSE_FILE);
 }
-EXPORT_SYMBOL(nft_rule_parse_file);
+EXPORT_SYMBOL(nftnl_rule_parse_file, nft_rule_parse_file);
 
 static int nft_rule_snprintf_json(char *buf, size_t size, struct nft_rule *r,
 					 uint32_t type, uint32_t flags)
@@ -967,7 +967,7 @@ int nft_rule_snprintf(char *buf, size_t size, struct nft_rule *r,
 	return nft_rule_cmd_snprintf(buf, size, r, nft_flag2cmd(flags), type,
 				     flags);
 }
-EXPORT_SYMBOL(nft_rule_snprintf);
+EXPORT_SYMBOL(nftnl_rule_snprintf, nft_rule_snprintf);
 
 static inline int nft_rule_do_snprintf(char *buf, size_t size, void *r,
 				       uint32_t cmd, uint32_t type,
@@ -982,7 +982,7 @@ int nft_rule_fprintf(FILE *fp, struct nft_rule *r, uint32_t type,
 	return nft_fprintf(fp, r, NFT_CMD_UNSPEC, type, flags,
 			   nft_rule_do_snprintf);
 }
-EXPORT_SYMBOL(nft_rule_fprintf);
+EXPORT_SYMBOL(nftnl_rule_fprintf, nft_rule_fprintf);
 
 int nft_rule_expr_foreach(struct nft_rule *r,
                           int (*cb)(struct nft_rule_expr *e, void *data),
@@ -998,7 +998,7 @@ int nft_rule_expr_foreach(struct nft_rule *r,
        }
        return 0;
 }
-EXPORT_SYMBOL(nft_rule_expr_foreach);
+EXPORT_SYMBOL(nftnl_rule_expr_foreach, nft_rule_expr_foreach);
 
 struct nft_rule_expr_iter {
 	struct nft_rule		*r;
@@ -1022,7 +1022,7 @@ struct nft_rule_expr_iter *nft_rule_expr_iter_create(struct nft_rule *r)
 
 	return iter;
 }
-EXPORT_SYMBOL(nft_rule_expr_iter_create);
+EXPORT_SYMBOL(nftnl_rule_expr_iter_create, nft_rule_expr_iter_create);
 
 struct nft_rule_expr *nft_rule_expr_iter_next(struct nft_rule_expr_iter *iter)
 {
@@ -1038,13 +1038,13 @@ struct nft_rule_expr *nft_rule_expr_iter_next(struct nft_rule_expr_iter *iter)
 
 	return expr;
 }
-EXPORT_SYMBOL(nft_rule_expr_iter_next);
+EXPORT_SYMBOL(nftnl_rule_expr_iter_next, nft_rule_expr_iter_next);
 
 void nft_rule_expr_iter_destroy(struct nft_rule_expr_iter *iter)
 {
 	xfree(iter);
 }
-EXPORT_SYMBOL(nft_rule_expr_iter_destroy);
+EXPORT_SYMBOL(nftnl_rule_expr_iter_destroy, nft_rule_expr_iter_destroy);
 
 struct nft_rule_list {
 	struct list_head list;
@@ -1062,7 +1062,7 @@ struct nft_rule_list *nft_rule_list_alloc(void)
 
 	return list;
 }
-EXPORT_SYMBOL(nft_rule_list_alloc);
+EXPORT_SYMBOL(nftnl_rule_list_alloc, nft_rule_list_alloc);
 
 void nft_rule_list_free(struct nft_rule_list *list)
 {
@@ -1074,31 +1074,31 @@ void nft_rule_list_free(struct nft_rule_list *list)
 	}
 	xfree(list);
 }
-EXPORT_SYMBOL(nft_rule_list_free);
+EXPORT_SYMBOL(nftnl_rule_list_free, nft_rule_list_free);
 
 int nft_rule_list_is_empty(struct nft_rule_list *list)
 {
 	return list_empty(&list->list);
 }
-EXPORT_SYMBOL(nft_rule_list_is_empty);
+EXPORT_SYMBOL(nftnl_rule_list_is_empty, nft_rule_list_is_empty);
 
 void nft_rule_list_add(struct nft_rule *r, struct nft_rule_list *list)
 {
 	list_add(&r->head, &list->list);
 }
-EXPORT_SYMBOL(nft_rule_list_add);
+EXPORT_SYMBOL(nftnl_rule_list_add, nft_rule_list_add);
 
 void nft_rule_list_add_tail(struct nft_rule *r, struct nft_rule_list *list)
 {
 	list_add_tail(&r->head, &list->list);
 }
-EXPORT_SYMBOL(nft_rule_list_add_tail);
+EXPORT_SYMBOL(nftnl_rule_list_add_tail, nft_rule_list_add_tail);
 
 void nft_rule_list_del(struct nft_rule *r)
 {
 	list_del(&r->head);
 }
-EXPORT_SYMBOL(nft_rule_list_del);
+EXPORT_SYMBOL(nftnl_rule_list_del, nft_rule_list_del);
 
 int nft_rule_list_foreach(struct nft_rule_list *rule_list,
 			  int (*cb)(struct nft_rule *r, void *data),
@@ -1114,7 +1114,7 @@ int nft_rule_list_foreach(struct nft_rule_list *rule_list,
 	}
 	return 0;
 }
-EXPORT_SYMBOL(nft_rule_list_foreach);
+EXPORT_SYMBOL(nftnl_rule_list_foreach, nft_rule_list_foreach);
 
 struct nft_rule_list_iter {
 	struct nft_rule_list	*list;
@@ -1137,13 +1137,13 @@ struct nft_rule_list_iter *nft_rule_list_iter_create(struct nft_rule_list *l)
 
 	return iter;
 }
-EXPORT_SYMBOL(nft_rule_list_iter_create);
+EXPORT_SYMBOL(nftnl_rule_list_iter_create, nft_rule_list_iter_create);
 
 struct nft_rule *nft_rule_list_iter_cur(struct nft_rule_list_iter *iter)
 {
 	return iter->cur;
 }
-EXPORT_SYMBOL(nft_rule_list_iter_cur);
+EXPORT_SYMBOL(nftnl_rule_list_iter_cur, nft_rule_list_iter_cur);
 
 struct nft_rule *nft_rule_list_iter_next(struct nft_rule_list_iter *iter)
 {
@@ -1159,10 +1159,10 @@ struct nft_rule *nft_rule_list_iter_next(struct nft_rule_list_iter *iter)
 
 	return r;
 }
-EXPORT_SYMBOL(nft_rule_list_iter_next);
+EXPORT_SYMBOL(nftnl_rule_list_iter_next, nft_rule_list_iter_next);
 
 void nft_rule_list_iter_destroy(struct nft_rule_list_iter *iter)
 {
 	xfree(iter);
 }
-EXPORT_SYMBOL(nft_rule_list_iter_destroy);
+EXPORT_SYMBOL(nftnl_rule_list_iter_destroy, nft_rule_list_iter_destroy);
diff --git a/src/ruleset.c b/src/ruleset.c
index e7f9204..42fe9e6 100644
--- a/src/ruleset.c
+++ b/src/ruleset.c
@@ -62,7 +62,7 @@ struct nft_ruleset *nft_ruleset_alloc(void)
 {
 	return calloc(1, sizeof(struct nft_ruleset));
 }
-EXPORT_SYMBOL(nft_ruleset_alloc);
+EXPORT_SYMBOL(nftnl_ruleset_alloc, nft_ruleset_alloc);
 
 void nft_ruleset_free(struct nft_ruleset *r)
 {
@@ -76,13 +76,13 @@ void nft_ruleset_free(struct nft_ruleset *r)
 		nft_rule_list_free(r->rule_list);
 	xfree(r);
 }
-EXPORT_SYMBOL(nft_ruleset_free);
+EXPORT_SYMBOL(nftnl_ruleset_free, nft_ruleset_free);
 
 bool nft_ruleset_attr_is_set(const struct nft_ruleset *r, uint16_t attr)
 {
 	return r->flags & (1 << attr);
 }
-EXPORT_SYMBOL(nft_ruleset_attr_is_set);
+EXPORT_SYMBOL(nftnl_ruleset_attr_is_set, nft_ruleset_attr_is_set);
 
 void nft_ruleset_attr_unset(struct nft_ruleset *r, uint16_t attr)
 {
@@ -109,7 +109,7 @@ void nft_ruleset_attr_unset(struct nft_ruleset *r, uint16_t attr)
 	}
 	r->flags &= ~(1 << attr);
 }
-EXPORT_SYMBOL(nft_ruleset_attr_unset);
+EXPORT_SYMBOL(nftnl_ruleset_attr_unset, nft_ruleset_attr_unset);
 
 void nft_ruleset_attr_set(struct nft_ruleset *r, uint16_t attr, void *data)
 {
@@ -135,7 +135,7 @@ void nft_ruleset_attr_set(struct nft_ruleset *r, uint16_t attr, void *data)
 	}
 	r->flags |= (1 << attr);
 }
-EXPORT_SYMBOL(nft_ruleset_attr_set);
+EXPORT_SYMBOL(nftnl_ruleset_attr_set, nft_ruleset_attr_set);
 
 void *nft_ruleset_attr_get(const struct nft_ruleset *r, uint16_t attr)
 {
@@ -155,7 +155,7 @@ void *nft_ruleset_attr_get(const struct nft_ruleset *r, uint16_t attr)
 		return NULL;
 	}
 }
-EXPORT_SYMBOL(nft_ruleset_attr_get);
+EXPORT_SYMBOL(nftnl_ruleset_attr_get, nft_ruleset_attr_get);
 
 void nft_ruleset_ctx_free(const struct nft_parse_ctx *ctx)
 {
@@ -178,13 +178,13 @@ void nft_ruleset_ctx_free(const struct nft_parse_ctx *ctx)
 		break;
 	}
 }
-EXPORT_SYMBOL(nft_ruleset_ctx_free);
+EXPORT_SYMBOL(nftnl_ruleset_ctx_free, nft_ruleset_ctx_free);
 
 bool nft_ruleset_ctx_is_set(const struct nft_parse_ctx *ctx, uint16_t attr)
 {
 	return ctx->flags & (1 << attr);
 }
-EXPORT_SYMBOL(nft_ruleset_ctx_is_set);
+EXPORT_SYMBOL(nftnl_ruleset_ctx_is_set, nft_ruleset_ctx_is_set);
 
 void *nft_ruleset_ctx_get(const struct nft_parse_ctx *ctx, uint16_t attr)
 {
@@ -210,14 +210,14 @@ void *nft_ruleset_ctx_get(const struct nft_parse_ctx *ctx, uint16_t attr)
 		return NULL;
 	}
 }
-EXPORT_SYMBOL(nft_ruleset_ctx_get);
+EXPORT_SYMBOL(nftnl_ruleset_ctx_get, nft_ruleset_ctx_get);
 
 uint32_t nft_ruleset_ctx_get_u32(const struct nft_parse_ctx *ctx, uint16_t attr)
 {
 	const void *ret = nft_ruleset_ctx_get(ctx, attr);
 	return ret == NULL ? 0 : *((uint32_t *)ret);
 }
-EXPORT_SYMBOL(nft_ruleset_ctx_get_u32);
+EXPORT_SYMBOL(nftnl_ruleset_ctx_get_u32, nft_ruleset_ctx_get_u32);
 
 #if defined(JSON_PARSING) || defined(XML_PARSING)
 static void nft_ruleset_ctx_set(struct nft_parse_ctx *ctx, uint16_t attr,
@@ -751,7 +751,7 @@ int nft_ruleset_parse_file_cb(enum nft_parse_type type, FILE *fp,
 {
 	return nft_ruleset_do_parse(type, fp, err, NFT_PARSE_FILE, data, cb);
 }
-EXPORT_SYMBOL(nft_ruleset_parse_file_cb);
+EXPORT_SYMBOL(nftnl_ruleset_parse_file_cb, nft_ruleset_parse_file_cb);
 
 int nft_ruleset_parse_buffer_cb(enum nft_parse_type type, const char *buffer,
 				struct nft_parse_err *err, void *data,
@@ -760,7 +760,7 @@ int nft_ruleset_parse_buffer_cb(enum nft_parse_type type, const char *buffer,
 	return nft_ruleset_do_parse(type, buffer, err, NFT_PARSE_BUFFER, data,
 				    cb);
 }
-EXPORT_SYMBOL(nft_ruleset_parse_buffer_cb);
+EXPORT_SYMBOL(nftnl_ruleset_parse_buffer_cb, nft_ruleset_parse_buffer_cb);
 
 static int nft_ruleset_cb(const struct nft_parse_ctx *ctx)
 {
@@ -828,14 +828,14 @@ int nft_ruleset_parse(struct nft_ruleset *r, enum nft_parse_type type,
 {
 	return nft_ruleset_parse_buffer_cb(type, data, err, r, nft_ruleset_cb);
 }
-EXPORT_SYMBOL(nft_ruleset_parse);
+EXPORT_SYMBOL(nftnl_ruleset_parse, nft_ruleset_parse);
 
 int nft_ruleset_parse_file(struct nft_ruleset *rs, enum nft_parse_type type,
 			   FILE *fp, struct nft_parse_err *err)
 {
 	return nft_ruleset_parse_file_cb(type, fp, err, rs, nft_ruleset_cb);
 }
-EXPORT_SYMBOL(nft_ruleset_parse_file);
+EXPORT_SYMBOL(nftnl_ruleset_parse_file, nft_ruleset_parse_file);
 
 static const char *nft_ruleset_o_opentag(uint32_t type)
 {
@@ -1097,7 +1097,7 @@ int nft_ruleset_snprintf(char *buf, size_t size, const struct nft_ruleset *r,
 		return -1;
 	}
 }
-EXPORT_SYMBOL(nft_ruleset_snprintf);
+EXPORT_SYMBOL(nftnl_ruleset_snprintf, nft_ruleset_snprintf);
 
 static int nft_ruleset_fprintf_tables(FILE *fp, const struct nft_ruleset *rs,
 				      uint32_t type, uint32_t flags)
@@ -1317,4 +1317,4 @@ int nft_ruleset_fprintf(FILE *fp, const struct nft_ruleset *rs, uint32_t type,
 	return nft_ruleset_cmd_fprintf(fp, rs, nft_flag2cmd(flags), type,
 				       flags);
 }
-EXPORT_SYMBOL(nft_ruleset_fprintf);
+EXPORT_SYMBOL(nftnl_ruleset_fprintf, nft_ruleset_fprintf);
diff --git a/src/set.c b/src/set.c
index 1782f72..2df6b93 100644
--- a/src/set.c
+++ b/src/set.c
@@ -38,7 +38,7 @@ struct nft_set *nft_set_alloc(void)
 	INIT_LIST_HEAD(&s->element_list);
 	return s;
 }
-EXPORT_SYMBOL(nft_set_alloc);
+EXPORT_SYMBOL(nftnl_set_alloc, nft_set_alloc);
 
 void nft_set_free(struct nft_set *s)
 {
@@ -55,13 +55,13 @@ void nft_set_free(struct nft_set *s)
 	}
 	xfree(s);
 }
-EXPORT_SYMBOL(nft_set_free);
+EXPORT_SYMBOL(nftnl_set_free, nft_set_free);
 
 bool nft_set_attr_is_set(const struct nft_set *s, uint16_t attr)
 {
 	return s->flags & (1 << attr);
 }
-EXPORT_SYMBOL(nft_set_attr_is_set);
+EXPORT_SYMBOL(nftnl_set_attr_is_set, nft_set_attr_is_set);
 
 void nft_set_attr_unset(struct nft_set *s, uint16_t attr)
 {
@@ -98,7 +98,7 @@ void nft_set_attr_unset(struct nft_set *s, uint16_t attr)
 
 	s->flags &= ~(1 << attr);
 }
-EXPORT_SYMBOL(nft_set_attr_unset);
+EXPORT_SYMBOL(nftnl_set_attr_unset, nft_set_attr_unset);
 
 static uint32_t nft_set_attr_validate[NFT_SET_ATTR_MAX + 1] = {
 	[NFT_SET_ATTR_FLAGS]		= sizeof(uint32_t),
@@ -170,31 +170,31 @@ void nft_set_attr_set_data(struct nft_set *s, uint16_t attr, const void *data,
 	}
 	s->flags |= (1 << attr);
 }
-EXPORT_SYMBOL(nft_set_attr_set_data);
+EXPORT_SYMBOL(nftnl_set_attr_set_data, nft_set_attr_set_data);
 
 void nft_set_attr_set(struct nft_set *s, uint16_t attr, const void *data)
 {
 	nft_set_attr_set_data(s, attr, data, nft_set_attr_validate[attr]);
 }
-EXPORT_SYMBOL(nft_set_attr_set);
+EXPORT_SYMBOL(nftnl_set_attr_set, nft_set_attr_set);
 
 void nft_set_attr_set_u32(struct nft_set *s, uint16_t attr, uint32_t val)
 {
 	nft_set_attr_set(s, attr, &val);
 }
-EXPORT_SYMBOL(nft_set_attr_set_u32);
+EXPORT_SYMBOL(nftnl_set_attr_set_u32, nft_set_attr_set_u32);
 
 void nft_set_attr_set_u64(struct nft_set *s, uint16_t attr, uint64_t val)
 {
 	nft_set_attr_set(s, attr, &val);
 }
-EXPORT_SYMBOL(nft_set_attr_set_u64);
+EXPORT_SYMBOL(nftnl_set_attr_set_u64, nft_set_attr_set_u64);
 
 void nft_set_attr_set_str(struct nft_set *s, uint16_t attr, const char *str)
 {
 	nft_set_attr_set(s, attr, str);
 }
-EXPORT_SYMBOL(nft_set_attr_set_str);
+EXPORT_SYMBOL(nftnl_set_attr_set_str, nft_set_attr_set_str);
 
 const void *nft_set_attr_get_data(struct nft_set *s, uint16_t attr,
 				  uint32_t *data_len)
@@ -243,20 +243,20 @@ const void *nft_set_attr_get_data(struct nft_set *s, uint16_t attr,
 	}
 	return NULL;
 }
-EXPORT_SYMBOL(nft_set_attr_get_data);
+EXPORT_SYMBOL(nftnl_set_attr_get_data, nft_set_attr_get_data);
 
 const void *nft_set_attr_get(struct nft_set *s, uint16_t attr)
 {
 	uint32_t data_len;
 	return nft_set_attr_get_data(s, attr, &data_len);
 }
-EXPORT_SYMBOL(nft_set_attr_get);
+EXPORT_SYMBOL(nftnl_set_attr_get, nft_set_attr_get);
 
 const char *nft_set_attr_get_str(struct nft_set *s, uint16_t attr)
 {
 	return nft_set_attr_get(s, attr);
 }
-EXPORT_SYMBOL(nft_set_attr_get_str);
+EXPORT_SYMBOL(nftnl_set_attr_get_str, nft_set_attr_get_str);
 
 uint32_t nft_set_attr_get_u32(struct nft_set *s, uint16_t attr)
 {
@@ -267,7 +267,7 @@ uint32_t nft_set_attr_get_u32(struct nft_set *s, uint16_t attr)
 
 	return val ? *val : 0;
 }
-EXPORT_SYMBOL(nft_set_attr_get_u32);
+EXPORT_SYMBOL(nftnl_set_attr_get_u32, nft_set_attr_get_u32);
 
 uint64_t nft_set_attr_get_u64(struct nft_set *s, uint16_t attr)
 {
@@ -278,7 +278,7 @@ uint64_t nft_set_attr_get_u64(struct nft_set *s, uint16_t attr)
 
 	return val ? *val : 0;
 }
-EXPORT_SYMBOL(nft_set_attr_get_u64);
+EXPORT_SYMBOL(nftnl_set_attr_get_u64, nft_set_attr_get_u64);
 
 struct nft_set *nft_set_clone(const struct nft_set *set)
 {
@@ -349,7 +349,7 @@ void nft_set_nlmsg_build_payload(struct nlmsghdr *nlh, struct nft_set *s)
 	if (s->flags & (1 << NFT_SET_ATTR_GC_INTERVAL))
 		mnl_attr_put_u32(nlh, NFTA_SET_GC_INTERVAL, htonl(s->gc_interval));
 }
-EXPORT_SYMBOL(nft_set_nlmsg_build_payload);
+EXPORT_SYMBOL(nftnl_set_nlmsg_build_payload, nft_set_nlmsg_build_payload);
 
 static int nft_set_parse_attr_cb(const struct nlattr *attr, void *data)
 {
@@ -488,7 +488,7 @@ int nft_set_nlmsg_parse(const struct nlmsghdr *nlh, struct nft_set *s)
 
 	return ret;
 }
-EXPORT_SYMBOL(nft_set_nlmsg_parse);
+EXPORT_SYMBOL(nftnl_set_nlmsg_parse, nft_set_nlmsg_parse);
 
 #ifdef JSON_PARSING
 static int nft_jansson_parse_set_info(struct nft_set *s, json_t *tree,
@@ -762,14 +762,14 @@ int nft_set_parse(struct nft_set *s, enum nft_parse_type type,
 {
 	return nft_set_do_parse(s, type, data, err, NFT_PARSE_BUFFER);
 }
-EXPORT_SYMBOL(nft_set_parse);
+EXPORT_SYMBOL(nftnl_set_parse, nft_set_parse);
 
 int nft_set_parse_file(struct nft_set *s, enum nft_parse_type type,
 		       FILE *fp, struct nft_parse_err *err)
 {
 	return nft_set_do_parse(s, type, fp, err, NFT_PARSE_FILE);
 }
-EXPORT_SYMBOL(nft_set_parse_file);
+EXPORT_SYMBOL(nftnl_set_parse_file, nft_set_parse_file);
 
 static int nft_set_snprintf_json(char *buf, size_t size, struct nft_set *s,
 				  uint32_t type, uint32_t flags)
@@ -1036,7 +1036,7 @@ int nft_set_snprintf(char *buf, size_t size, struct nft_set *s,
 	return nft_set_cmd_snprintf(buf, size, s, nft_flag2cmd(flags), type,
 				    flags);
 }
-EXPORT_SYMBOL(nft_set_snprintf);
+EXPORT_SYMBOL(nftnl_set_snprintf, nft_set_snprintf);
 
 static inline int nft_set_do_snprintf(char *buf, size_t size, void *s,
 				      uint32_t cmd, uint32_t type,
@@ -1051,13 +1051,13 @@ int nft_set_fprintf(FILE *fp, struct nft_set *s, uint32_t type,
 	return nft_fprintf(fp, s, NFT_CMD_UNSPEC, type, flags,
 			   nft_set_do_snprintf);
 }
-EXPORT_SYMBOL(nft_set_fprintf);
+EXPORT_SYMBOL(nftnl_set_fprintf, nft_set_fprintf);
 
 void nft_set_elem_add(struct nft_set *s, struct nft_set_elem *elem)
 {
 	list_add_tail(&elem->head, &s->element_list);
 }
-EXPORT_SYMBOL(nft_set_elem_add);
+EXPORT_SYMBOL(nftnl_set_elem_add, nft_set_elem_add);
 
 struct nft_set_list {
 	struct list_head list;
@@ -1075,7 +1075,7 @@ struct nft_set_list *nft_set_list_alloc(void)
 
 	return list;
 }
-EXPORT_SYMBOL(nft_set_list_alloc);
+EXPORT_SYMBOL(nftnl_set_list_alloc, nft_set_list_alloc);
 
 void nft_set_list_free(struct nft_set_list *list)
 {
@@ -1087,31 +1087,31 @@ void nft_set_list_free(struct nft_set_list *list)
 	}
 	xfree(list);
 }
-EXPORT_SYMBOL(nft_set_list_free);
+EXPORT_SYMBOL(nftnl_set_list_free, nft_set_list_free);
 
 int nft_set_list_is_empty(struct nft_set_list *list)
 {
 	return list_empty(&list->list);
 }
-EXPORT_SYMBOL(nft_set_list_is_empty);
+EXPORT_SYMBOL(nftnl_set_list_is_empty, nft_set_list_is_empty);
 
 void nft_set_list_add(struct nft_set *s, struct nft_set_list *list)
 {
 	list_add(&s->head, &list->list);
 }
-EXPORT_SYMBOL(nft_set_list_add);
+EXPORT_SYMBOL(nftnl_set_list_add, nft_set_list_add);
 
 void nft_set_list_add_tail(struct nft_set *s, struct nft_set_list *list)
 {
 	list_add_tail(&s->head, &list->list);
 }
-EXPORT_SYMBOL(nft_set_list_add_tail);
+EXPORT_SYMBOL(nftnl_set_list_add_tail, nft_set_list_add_tail);
 
 void nft_set_list_del(struct nft_set *s)
 {
 	list_del(&s->head);
 }
-EXPORT_SYMBOL(nft_set_list_del);
+EXPORT_SYMBOL(nftnl_set_list_del, nft_set_list_del);
 
 int nft_set_list_foreach(struct nft_set_list *set_list,
 			 int (*cb)(struct nft_set *t, void *data), void *data)
@@ -1126,7 +1126,7 @@ int nft_set_list_foreach(struct nft_set_list *set_list,
 	}
 	return 0;
 }
-EXPORT_SYMBOL(nft_set_list_foreach);
+EXPORT_SYMBOL(nftnl_set_list_foreach, nft_set_list_foreach);
 
 struct nft_set_list_iter {
 	struct nft_set_list	*list;
@@ -1149,13 +1149,13 @@ struct nft_set_list_iter *nft_set_list_iter_create(struct nft_set_list *l)
 
 	return iter;
 }
-EXPORT_SYMBOL(nft_set_list_iter_create);
+EXPORT_SYMBOL(nftnl_set_list_iter_create, nft_set_list_iter_create);
 
 struct nft_set *nft_set_list_iter_cur(struct nft_set_list_iter *iter)
 {
 	return iter->cur;
 }
-EXPORT_SYMBOL(nft_set_list_iter_cur);
+EXPORT_SYMBOL(nftnl_set_list_iter_cur, nft_set_list_iter_cur);
 
 struct nft_set *nft_set_list_iter_next(struct nft_set_list_iter *iter)
 {
@@ -1171,13 +1171,13 @@ struct nft_set *nft_set_list_iter_next(struct nft_set_list_iter *iter)
 
 	return s;
 }
-EXPORT_SYMBOL(nft_set_list_iter_next);
+EXPORT_SYMBOL(nftnl_set_list_iter_next, nft_set_list_iter_next);
 
 void nft_set_list_iter_destroy(struct nft_set_list_iter *iter)
 {
 	xfree(iter);
 }
-EXPORT_SYMBOL(nft_set_list_iter_destroy);
+EXPORT_SYMBOL(nftnl_set_list_iter_destroy, nft_set_list_iter_destroy);
 
 static struct nft_set *nft_set_lookup(const char *this_set_name,
 				      struct nft_set_list *set_list)
diff --git a/src/set_elem.c b/src/set_elem.c
index 643dd76..a130cc3 100644
--- a/src/set_elem.c
+++ b/src/set_elem.c
@@ -37,7 +37,7 @@ struct nft_set_elem *nft_set_elem_alloc(void)
 
 	return s;
 }
-EXPORT_SYMBOL(nft_set_elem_alloc);
+EXPORT_SYMBOL(nftnl_set_elem_alloc, nft_set_elem_alloc);
 
 void nft_set_elem_free(struct nft_set_elem *s)
 {
@@ -53,13 +53,13 @@ void nft_set_elem_free(struct nft_set_elem *s)
 
 	xfree(s);
 }
-EXPORT_SYMBOL(nft_set_elem_free);
+EXPORT_SYMBOL(nftnl_set_elem_free, nft_set_elem_free);
 
 bool nft_set_elem_attr_is_set(const struct nft_set_elem *s, uint16_t attr)
 {
 	return s->flags & (1 << attr);
 }
-EXPORT_SYMBOL(nft_set_elem_attr_is_set);
+EXPORT_SYMBOL(nftnl_set_elem_attr_is_set, nft_set_elem_attr_is_set);
 
 void nft_set_elem_attr_unset(struct nft_set_elem *s, uint16_t attr)
 {
@@ -92,7 +92,7 @@ void nft_set_elem_attr_unset(struct nft_set_elem *s, uint16_t attr)
 
 	s->flags &= ~(1 << attr);
 }
-EXPORT_SYMBOL(nft_set_elem_attr_unset);
+EXPORT_SYMBOL(nftnl_set_elem_attr_unset, nft_set_elem_attr_unset);
 
 void nft_set_elem_attr_set(struct nft_set_elem *s, uint16_t attr,
 			   const void *data, uint32_t data_len)
@@ -130,25 +130,25 @@ void nft_set_elem_attr_set(struct nft_set_elem *s, uint16_t attr,
 	}
 	s->flags |= (1 << attr);
 }
-EXPORT_SYMBOL(nft_set_elem_attr_set);
+EXPORT_SYMBOL(nftnl_set_elem_attr_set, nft_set_elem_attr_set);
 
 void nft_set_elem_attr_set_u32(struct nft_set_elem *s, uint16_t attr, uint32_t val)
 {
 	nft_set_elem_attr_set(s, attr, &val, sizeof(uint32_t));
 }
-EXPORT_SYMBOL(nft_set_elem_attr_set_u32);
+EXPORT_SYMBOL(nftnl_set_elem_attr_set_u32, nft_set_elem_attr_set_u32);
 
 void nft_set_elem_attr_set_u64(struct nft_set_elem *s, uint16_t attr, uint64_t val)
 {
 	nft_set_elem_attr_set(s, attr, &val, sizeof(uint64_t));
 }
-EXPORT_SYMBOL(nft_set_elem_attr_set_u64);
+EXPORT_SYMBOL(nftnl_set_elem_attr_set_u64, nft_set_elem_attr_set_u64);
 
 void nft_set_elem_attr_set_str(struct nft_set_elem *s, uint16_t attr, const char *str)
 {
 	nft_set_elem_attr_set(s, attr, str, strlen(str));
 }
-EXPORT_SYMBOL(nft_set_elem_attr_set_str);
+EXPORT_SYMBOL(nftnl_set_elem_attr_set_str, nft_set_elem_attr_set_str);
 
 const void *nft_set_elem_attr_get(struct nft_set_elem *s, uint16_t attr, uint32_t *data_len)
 {
@@ -180,7 +180,7 @@ const void *nft_set_elem_attr_get(struct nft_set_elem *s, uint16_t attr, uint32_
 	}
 	return NULL;
 }
-EXPORT_SYMBOL(nft_set_elem_attr_get);
+EXPORT_SYMBOL(nftnl_set_elem_attr_get, nft_set_elem_attr_get);
 
 const char *nft_set_elem_attr_get_str(struct nft_set_elem *s, uint16_t attr)
 {
@@ -188,7 +188,7 @@ const char *nft_set_elem_attr_get_str(struct nft_set_elem *s, uint16_t attr)
 
 	return nft_set_elem_attr_get(s, attr, &size);
 }
-EXPORT_SYMBOL(nft_set_elem_attr_get_str);
+EXPORT_SYMBOL(nftnl_set_elem_attr_get_str, nft_set_elem_attr_get_str);
 
 uint32_t nft_set_elem_attr_get_u32(struct nft_set_elem *s, uint16_t attr)
 {
@@ -196,7 +196,7 @@ uint32_t nft_set_elem_attr_get_u32(struct nft_set_elem *s, uint16_t attr)
 	uint32_t val = *((uint32_t *)nft_set_elem_attr_get(s, attr, &size));
 	return val;
 }
-EXPORT_SYMBOL(nft_set_elem_attr_get_u32);
+EXPORT_SYMBOL(nftnl_set_elem_attr_get_u32, nft_set_elem_attr_get_u32);
 
 uint64_t nft_set_elem_attr_get_u64(struct nft_set_elem *s, uint16_t attr)
 {
@@ -204,7 +204,7 @@ uint64_t nft_set_elem_attr_get_u64(struct nft_set_elem *s, uint16_t attr)
 	uint64_t val = *((uint64_t *)nft_set_elem_attr_get(s, attr, &size));
 	return val;
 }
-EXPORT_SYMBOL(nft_set_elem_attr_get_u64);
+EXPORT_SYMBOL(nftnl_set_elem_attr_get_u64, nft_set_elem_attr_get_u64);
 
 struct nft_set_elem *nft_set_elem_clone(struct nft_set_elem *elem)
 {
@@ -296,7 +296,7 @@ void nft_set_elems_nlmsg_build_payload(struct nlmsghdr *nlh, struct nft_set *s)
 
 	mnl_attr_nest_end(nlh, nest1);
 }
-EXPORT_SYMBOL(nft_set_elems_nlmsg_build_payload);
+EXPORT_SYMBOL(nftnl_set_elems_nlmsg_build_payload, nft_set_elems_nlmsg_build_payload);
 
 static int nft_set_elem_parse_attr_cb(const struct nlattr *attr, void *data)
 {
@@ -485,7 +485,7 @@ int nft_set_elems_nlmsg_parse(const struct nlmsghdr *nlh, struct nft_set *s)
 
 	return ret;
 }
-EXPORT_SYMBOL(nft_set_elems_nlmsg_parse);
+EXPORT_SYMBOL(nftnl_set_elems_nlmsg_parse, nft_set_elems_nlmsg_parse);
 
 #ifdef XML_PARSING
 int nft_mxml_set_elem_parse(mxml_node_t *tree, struct nft_set_elem *e,
@@ -589,14 +589,14 @@ int nft_set_elem_parse(struct nft_set_elem *e, enum nft_parse_type type,
 {
 	return nft_set_elem_do_parse(e, type, data, err, NFT_PARSE_BUFFER);
 }
-EXPORT_SYMBOL(nft_set_elem_parse);
+EXPORT_SYMBOL(nftnl_set_elem_parse, nft_set_elem_parse);
 
 int nft_set_elem_parse_file(struct nft_set_elem *e, enum nft_parse_type type,
 			    FILE *fp, struct nft_parse_err *err)
 {
 	return nft_set_elem_do_parse(e, type, fp, err, NFT_PARSE_FILE);
 }
-EXPORT_SYMBOL(nft_set_elem_parse_file);
+EXPORT_SYMBOL(nftnl_set_elem_parse_file, nft_set_elem_parse_file);
 
 static int nft_set_elem_snprintf_json(char *buf, size_t size,
 				      struct nft_set_elem *e, uint32_t flags)
@@ -771,7 +771,7 @@ int nft_set_elem_snprintf(char *buf, size_t size, struct nft_set_elem *e,
 	return nft_set_elem_cmd_snprintf(buf, size, e, nft_flag2cmd(flags),
 					 type, flags);
 }
-EXPORT_SYMBOL(nft_set_elem_snprintf);
+EXPORT_SYMBOL(nftnl_set_elem_snprintf, nft_set_elem_snprintf);
 
 static inline int nft_set_elem_do_snprintf(char *buf, size_t size, void *e,
 					   uint32_t cmd, uint32_t type,
@@ -786,7 +786,7 @@ int nft_set_elem_fprintf(FILE *fp, struct nft_set_elem *se, uint32_t type,
 	return nft_fprintf(fp, se, NFT_CMD_UNSPEC, type, flags,
 			   nft_set_elem_do_snprintf);
 }
-EXPORT_SYMBOL(nft_set_elem_fprintf);
+EXPORT_SYMBOL(nftnl_set_elem_fprintf, nft_set_elem_fprintf);
 
 int nft_set_elem_foreach(struct nft_set *s,
 			 int (*cb)(struct nft_set_elem *e, void *data),
@@ -802,7 +802,7 @@ int nft_set_elem_foreach(struct nft_set *s,
 	}
 	return 0;
 }
-EXPORT_SYMBOL(nft_set_elem_foreach);
+EXPORT_SYMBOL(nftnl_set_elem_foreach, nft_set_elem_foreach);
 
 struct nft_set_elems_iter {
 	struct nft_set			*set;
@@ -828,13 +828,13 @@ struct nft_set_elems_iter *nft_set_elems_iter_create(struct nft_set *s)
 
 	return iter;
 }
-EXPORT_SYMBOL(nft_set_elems_iter_create);
+EXPORT_SYMBOL(nftnl_set_elems_iter_create, nft_set_elems_iter_create);
 
 struct nft_set_elem *nft_set_elems_iter_cur(struct nft_set_elems_iter *iter)
 {
 	return iter->cur;
 }
-EXPORT_SYMBOL(nft_set_elems_iter_cur);
+EXPORT_SYMBOL(nftnl_set_elems_iter_cur, nft_set_elems_iter_cur);
 
 struct nft_set_elem *nft_set_elems_iter_next(struct nft_set_elems_iter *iter)
 {
@@ -849,13 +849,13 @@ struct nft_set_elem *nft_set_elems_iter_next(struct nft_set_elems_iter *iter)
 
 	return s;
 }
-EXPORT_SYMBOL(nft_set_elems_iter_next);
+EXPORT_SYMBOL(nftnl_set_elems_iter_next, nft_set_elems_iter_next);
 
 void nft_set_elems_iter_destroy(struct nft_set_elems_iter *iter)
 {
 	xfree(iter);
 }
-EXPORT_SYMBOL(nft_set_elems_iter_destroy);
+EXPORT_SYMBOL(nftnl_set_elems_iter_destroy, nft_set_elems_iter_destroy);
 
 static bool nft_attr_nest_overflow(struct nlmsghdr *nlh,
 				   const struct nlattr *from,
@@ -900,4 +900,4 @@ int nft_set_elems_nlmsg_build_payload_iter(struct nlmsghdr *nlh,
 
 	return ret;
 }
-EXPORT_SYMBOL(nft_set_elems_nlmsg_build_payload_iter);
+EXPORT_SYMBOL(nftnl_set_elems_nlmsg_build_payload_iter, nft_set_elems_nlmsg_build_payload_iter);
diff --git a/src/table.c b/src/table.c
index 09470e0..543ea8d 100644
--- a/src/table.c
+++ b/src/table.c
@@ -40,7 +40,7 @@ struct nft_table *nft_table_alloc(void)
 {
 	return calloc(1, sizeof(struct nft_table));
 }
-EXPORT_SYMBOL(nft_table_alloc);
+EXPORT_SYMBOL(nftnl_table_alloc, nft_table_alloc);
 
 void nft_table_free(struct nft_table *t)
 {
@@ -49,13 +49,13 @@ void nft_table_free(struct nft_table *t)
 
 	xfree(t);
 }
-EXPORT_SYMBOL(nft_table_free);
+EXPORT_SYMBOL(nftnl_table_free, nft_table_free);
 
 bool nft_table_attr_is_set(const struct nft_table *t, uint16_t attr)
 {
 	return t->flags & (1 << attr);
 }
-EXPORT_SYMBOL(nft_table_attr_is_set);
+EXPORT_SYMBOL(nftnl_table_attr_is_set, nft_table_attr_is_set);
 
 void nft_table_attr_unset(struct nft_table *t, uint16_t attr)
 {
@@ -77,7 +77,7 @@ void nft_table_attr_unset(struct nft_table *t, uint16_t attr)
 	}
 	t->flags &= ~(1 << attr);
 }
-EXPORT_SYMBOL(nft_table_attr_unset);
+EXPORT_SYMBOL(nftnl_table_attr_unset, nft_table_attr_unset);
 
 static uint32_t nft_table_attr_validate[NFT_TABLE_ATTR_MAX + 1] = {
 	[NFT_TABLE_ATTR_FLAGS]	= sizeof(uint32_t),
@@ -111,31 +111,31 @@ void nft_table_attr_set_data(struct nft_table *t, uint16_t attr,
 	}
 	t->flags |= (1 << attr);
 }
-EXPORT_SYMBOL(nft_table_attr_set_data);
+EXPORT_SYMBOL(nftnl_table_attr_set_data, nft_table_attr_set_data);
 
 void nft_table_attr_set(struct nft_table *t, uint16_t attr, const void *data)
 {
 	nft_table_attr_set_data(t, attr, data, nft_table_attr_validate[attr]);
 }
-EXPORT_SYMBOL(nft_table_attr_set);
+EXPORT_SYMBOL(nftnl_table_attr_set, nft_table_attr_set);
 
 void nft_table_attr_set_u32(struct nft_table *t, uint16_t attr, uint32_t val)
 {
 	nft_table_attr_set_data(t, attr, &val, sizeof(uint32_t));
 }
-EXPORT_SYMBOL(nft_table_attr_set_u32);
+EXPORT_SYMBOL(nftnl_table_attr_set_u32, nft_table_attr_set_u32);
 
 void nft_table_attr_set_u8(struct nft_table *t, uint16_t attr, uint8_t val)
 {
 	nft_table_attr_set_data(t, attr, &val, sizeof(uint8_t));
 }
-EXPORT_SYMBOL(nft_table_attr_set_u8);
+EXPORT_SYMBOL(nftnl_table_attr_set_u8, nft_table_attr_set_u8);
 
 void nft_table_attr_set_str(struct nft_table *t, uint16_t attr, const char *str)
 {
 	nft_table_attr_set_data(t, attr, str, 0);
 }
-EXPORT_SYMBOL(nft_table_attr_set_str);
+EXPORT_SYMBOL(nftnl_table_attr_set_str, nft_table_attr_set_str);
 
 const void *nft_table_attr_get_data(struct nft_table *t, uint16_t attr,
 				    uint32_t *data_len)
@@ -158,34 +158,34 @@ const void *nft_table_attr_get_data(struct nft_table *t, uint16_t attr,
 	}
 	return NULL;
 }
-EXPORT_SYMBOL(nft_table_attr_get_data);
+EXPORT_SYMBOL(nftnl_table_attr_get_data, nft_table_attr_get_data);
 
 const void *nft_table_attr_get(struct nft_table *t, uint16_t attr)
 {
 	uint32_t data_len;
 	return nft_table_attr_get_data(t, attr, &data_len);
 }
-EXPORT_SYMBOL(nft_table_attr_get);
+EXPORT_SYMBOL(nftnl_table_attr_get, nft_table_attr_get);
 
 uint32_t nft_table_attr_get_u32(struct nft_table *t, uint16_t attr)
 {
 	const void *ret = nft_table_attr_get(t, attr);
 	return ret == NULL ? 0 : *((uint32_t *)ret);
 }
-EXPORT_SYMBOL(nft_table_attr_get_u32);
+EXPORT_SYMBOL(nftnl_table_attr_get_u32, nft_table_attr_get_u32);
 
 uint8_t nft_table_attr_get_u8(struct nft_table *t, uint16_t attr)
 {
 	const void *ret = nft_table_attr_get(t, attr);
 	return ret == NULL ? 0 : *((uint8_t *)ret);
 }
-EXPORT_SYMBOL(nft_table_attr_get_u8);
+EXPORT_SYMBOL(nftnl_table_attr_get_u8, nft_table_attr_get_u8);
 
 const char *nft_table_attr_get_str(struct nft_table *t, uint16_t attr)
 {
 	return nft_table_attr_get(t, attr);
 }
-EXPORT_SYMBOL(nft_table_attr_get_str);
+EXPORT_SYMBOL(nftnl_table_attr_get_str, nft_table_attr_get_str);
 
 void nft_table_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nft_table *t)
 {
@@ -194,7 +194,7 @@ void nft_table_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nft_table
 	if (t->flags & (1 << NFT_TABLE_ATTR_FLAGS))
 		mnl_attr_put_u32(nlh, NFTA_TABLE_FLAGS, htonl(t->table_flags));
 }
-EXPORT_SYMBOL(nft_table_nlmsg_build_payload);
+EXPORT_SYMBOL(nftnl_table_nlmsg_build_payload, nft_table_nlmsg_build_payload);
 
 static int nft_table_parse_attr_cb(const struct nlattr *attr, void *data)
 {
@@ -247,7 +247,7 @@ int nft_table_nlmsg_parse(const struct nlmsghdr *nlh, struct nft_table *t)
 
 	return 0;
 }
-EXPORT_SYMBOL(nft_table_nlmsg_parse);
+EXPORT_SYMBOL(nftnl_table_nlmsg_parse, nft_table_nlmsg_parse);
 
 #ifdef XML_PARSING
 int nft_mxml_table_parse(mxml_node_t *tree, struct nft_table *t,
@@ -384,14 +384,14 @@ int nft_table_parse(struct nft_table *t, enum nft_parse_type type,
 {
 	return nft_table_do_parse(t, type, data, err, NFT_PARSE_BUFFER);
 }
-EXPORT_SYMBOL(nft_table_parse);
+EXPORT_SYMBOL(nftnl_table_parse, nft_table_parse);
 
 int nft_table_parse_file(struct nft_table *t, enum nft_parse_type type,
 			 FILE *fp, struct nft_parse_err *err)
 {
 	return nft_table_do_parse(t, type, fp, err, NFT_PARSE_FILE);
 }
-EXPORT_SYMBOL(nft_table_parse_file);
+EXPORT_SYMBOL(nftnl_table_parse_file, nft_table_parse_file);
 
 static int nft_table_export(char *buf, size_t size, struct nft_table *t,
 			    int type)
@@ -453,7 +453,7 @@ int nft_table_snprintf(char *buf, size_t size, struct nft_table *t,
 	return nft_table_cmd_snprintf(buf, size, t, nft_flag2cmd(flags), type,
 				      flags);
 }
-EXPORT_SYMBOL(nft_table_snprintf);
+EXPORT_SYMBOL(nftnl_table_snprintf, nft_table_snprintf);
 
 static inline int nft_table_do_snprintf(char *buf, size_t size, void *t,
 					uint32_t cmd, uint32_t type,
@@ -468,7 +468,7 @@ int nft_table_fprintf(FILE *fp, struct nft_table *t, uint32_t type,
 	return nft_fprintf(fp, t, NFT_CMD_UNSPEC, type, flags,
 			   nft_table_do_snprintf);
 }
-EXPORT_SYMBOL(nft_table_fprintf);
+EXPORT_SYMBOL(nftnl_table_fprintf, nft_table_fprintf);
 
 struct nft_table_list {
 	struct list_head list;
@@ -486,7 +486,7 @@ struct nft_table_list *nft_table_list_alloc(void)
 
 	return list;
 }
-EXPORT_SYMBOL(nft_table_list_alloc);
+EXPORT_SYMBOL(nftnl_table_list_alloc, nft_table_list_alloc);
 
 void nft_table_list_free(struct nft_table_list *list)
 {
@@ -498,31 +498,31 @@ void nft_table_list_free(struct nft_table_list *list)
 	}
 	xfree(list);
 }
-EXPORT_SYMBOL(nft_table_list_free);
+EXPORT_SYMBOL(nftnl_table_list_free, nft_table_list_free);
 
 int nft_table_list_is_empty(struct nft_table_list *list)
 {
 	return list_empty(&list->list);
 }
-EXPORT_SYMBOL(nft_table_list_is_empty);
+EXPORT_SYMBOL(nftnl_table_list_is_empty, nft_table_list_is_empty);
 
 void nft_table_list_add(struct nft_table *r, struct nft_table_list *list)
 {
 	list_add(&r->head, &list->list);
 }
-EXPORT_SYMBOL(nft_table_list_add);
+EXPORT_SYMBOL(nftnl_table_list_add, nft_table_list_add);
 
 void nft_table_list_add_tail(struct nft_table *r, struct nft_table_list *list)
 {
 	list_add_tail(&r->head, &list->list);
 }
-EXPORT_SYMBOL(nft_table_list_add_tail);
+EXPORT_SYMBOL(nftnl_table_list_add_tail, nft_table_list_add_tail);
 
 void nft_table_list_del(struct nft_table *t)
 {
 	list_del(&t->head);
 }
-EXPORT_SYMBOL(nft_table_list_del);
+EXPORT_SYMBOL(nftnl_table_list_del, nft_table_list_del);
 
 int nft_table_list_foreach(struct nft_table_list *table_list,
 			   int (*cb)(struct nft_table *t, void *data),
@@ -538,7 +538,7 @@ int nft_table_list_foreach(struct nft_table_list *table_list,
 	}
 	return 0;
 }
-EXPORT_SYMBOL(nft_table_list_foreach);
+EXPORT_SYMBOL(nftnl_table_list_foreach, nft_table_list_foreach);
 
 struct nft_table_list_iter {
 	struct nft_table_list	*list;
@@ -561,7 +561,7 @@ struct nft_table_list_iter *nft_table_list_iter_create(struct nft_table_list *l)
 
 	return iter;
 }
-EXPORT_SYMBOL(nft_table_list_iter_create);
+EXPORT_SYMBOL(nftnl_table_list_iter_create, nft_table_list_iter_create);
 
 struct nft_table *nft_table_list_iter_next(struct nft_table_list_iter *iter)
 {
@@ -577,10 +577,10 @@ struct nft_table *nft_table_list_iter_next(struct nft_table_list_iter *iter)
 
 	return r;
 }
-EXPORT_SYMBOL(nft_table_list_iter_next);
+EXPORT_SYMBOL(nftnl_table_list_iter_next, nft_table_list_iter_next);
 
 void nft_table_list_iter_destroy(struct nft_table_list_iter *iter)
 {
 	xfree(iter);
 }
-EXPORT_SYMBOL(nft_table_list_iter_destroy);
+EXPORT_SYMBOL(nftnl_table_list_iter_destroy, nft_table_list_iter_destroy);
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH libnftnl 0/3] use nftnl_ prefix
  2015-09-02 14:44 [PATCH libnftnl 0/3] use nftnl_ prefix Pablo Neira Ayuso
  2015-09-02 14:44 ` [PATCH libnftnl 1/3] src: introduce nftnl_* aliases for all existing functions Pablo Neira Ayuso
@ 2015-09-02 15:02 ` Pablo Neira Ayuso
  2015-09-07 18:14   ` Pablo Neira Ayuso
  1 sibling, 1 reply; 6+ messages in thread
From: Pablo Neira Ayuso @ 2015-09-02 15:02 UTC (permalink / raw)
  To: netfilter-devel; +Cc: kaber

On Wed, Sep 02, 2015 at 04:44:23PM +0200, Pablo Neira Ayuso wrote:
> This patchset renames the existing functions and definitions to use the nftnl_
> prefix to prepare the introduction of the higher level library, which will use
> the nft_ prefix.
> 
> The patchset does not break backward compatibility: Neither compilation not
> existing binaries.
> 
> The patchset keeps the nft_ symbols around as aliases for the nftnl_ symbols.
> Moreover, the header files contain the old nft_ definitions so clients of this
> library don't break all of a sudden.
> 
> Please, let me know if you observe any problem with this. I would like that
> this changes are pushed to master before the next release.

Just pushed out this branch:

http://git.netfilter.org/libnftnl/log/?h=nftnl

Just in case the largest Patch 2/3 does not reach the list.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH libnftnl 0/3] use nftnl_ prefix
  2015-09-02 15:02 ` [PATCH libnftnl 0/3] use nftnl_ prefix Pablo Neira Ayuso
@ 2015-09-07 18:14   ` Pablo Neira Ayuso
  2015-09-08  6:58     ` Arturo Borrero Gonzalez
  2015-09-15 15:35     ` Pablo Neira Ayuso
  0 siblings, 2 replies; 6+ messages in thread
From: Pablo Neira Ayuso @ 2015-09-07 18:14 UTC (permalink / raw)
  To: netfilter-devel; +Cc: kaber, fw, arturo.borrero.glez

Hi,

On Wed, Sep 02, 2015 at 05:02:55PM +0200, Pablo Neira Ayuso wrote:
> On Wed, Sep 02, 2015 at 04:44:23PM +0200, Pablo Neira Ayuso wrote:
> > This patchset renames the existing functions and definitions to use the nftnl_
> > prefix to prepare the introduction of the higher level library, which will use
> > the nft_ prefix.
> > 
> > The patchset does not break backward compatibility: Neither compilation not
> > existing binaries.
> > 
> > The patchset keeps the nft_ symbols around as aliases for the nftnl_ symbols.
> > Moreover, the header files contain the old nft_ definitions so clients of this
> > library don't break all of a sudden.
> > 
> > Please, let me know if you observe any problem with this. I would like that
> > this changes are pushed to master before the next release.
> 
> Just pushed out this branch:
> 
> http://git.netfilter.org/libnftnl/log/?h=nftnl

I'm pushing four more patches into this branch before we make the next
release on top of the brand new patches to use the nftnl_ prefix
instead as Patrick suggested.

Not sending them to the mailing list, they are large as the previous
and they are renaming things:

1) src: rename nftnl_rule_expr to nftnl_expr

The nftnl_rule_expr is not restricted anymore to the scope of rules
since it can be used from sets, so let's get rid of the _rule_ infix
to get it shorter.

2) src: rename NFTNL_RULE_EXPR_ATTR to NFTNL_EXPR_

Same as 1, but for constants.

3) src: get rid of _ATTR_ infix in new nfntl_ definitions

Remove the infix _ATTR_, the constant definitions have a large name,
so let's reduce it a bit.

4) src: get rid of _attr_ infix in new nftnl_ definitions

Similar to 3. Note that after this we've got things like:

        nft_set_set_u32(...)

Please, let me know if you have more renaming suggestions since
libnftnl will be out soon and it would be great if we can avoid this
stuff in the future.

Thanks.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH libnftnl 0/3] use nftnl_ prefix
  2015-09-07 18:14   ` Pablo Neira Ayuso
@ 2015-09-08  6:58     ` Arturo Borrero Gonzalez
  2015-09-15 15:35     ` Pablo Neira Ayuso
  1 sibling, 0 replies; 6+ messages in thread
From: Arturo Borrero Gonzalez @ 2015-09-08  6:58 UTC (permalink / raw)
  To: Pablo Neira Ayuso; +Cc: Netfilter Development Mailing list, Patrick McHardy, fw

On 7 September 2015 at 20:14, Pablo Neira Ayuso <pablo@netfilter.org> wrote:
>
> Please, let me know if you have more renaming suggestions since
> libnftnl will be out soon and it would be great if we can avoid this
> stuff in the future.
>

Perhaps:

 nftnl_rule_u64_set(...)
 nftnl_rule_u64_get(...)
 nftnl_set_u32_set(...)
 nftnl_set_u32_get(...)
 ...


-- 
Arturo Borrero González
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH libnftnl 0/3] use nftnl_ prefix
  2015-09-07 18:14   ` Pablo Neira Ayuso
  2015-09-08  6:58     ` Arturo Borrero Gonzalez
@ 2015-09-15 15:35     ` Pablo Neira Ayuso
  1 sibling, 0 replies; 6+ messages in thread
From: Pablo Neira Ayuso @ 2015-09-15 15:35 UTC (permalink / raw)
  To: netfilter-devel; +Cc: kaber, fw, arturo.borrero.glez

On Mon, Sep 07, 2015 at 08:14:28PM +0200, Pablo Neira Ayuso wrote:
> Hi,
> 
> On Wed, Sep 02, 2015 at 05:02:55PM +0200, Pablo Neira Ayuso wrote:
> > On Wed, Sep 02, 2015 at 04:44:23PM +0200, Pablo Neira Ayuso wrote:
> > > This patchset renames the existing functions and definitions to use the nftnl_
> > > prefix to prepare the introduction of the higher level library, which will use
> > > the nft_ prefix.
> > > 
> > > The patchset does not break backward compatibility: Neither compilation not
> > > existing binaries.
> > > 
> > > The patchset keeps the nft_ symbols around as aliases for the nftnl_ symbols.
> > > Moreover, the header files contain the old nft_ definitions so clients of this
> > > library don't break all of a sudden.
> > > 
> > > Please, let me know if you observe any problem with this. I would like that
> > > this changes are pushed to master before the next release.
> > 
> > Just pushed out this branch:
> > 
> > http://git.netfilter.org/libnftnl/log/?h=nftnl
> 
> I'm pushing four more patches into this branch before we make the next
> release on top of the brand new patches to use the nftnl_ prefix
> instead as Patrick suggested.

I have pushed these two patches to the 'nftnl' branch in both cases:

http://git.netfilter.org/nftables/commit/?h=nftnl&id=830693fe7b02aae554178dfd7220b6e779434eef
http://git.netfilter.org/iptables/commit/?h=nftnl&id=7babe09c9cfaa288c8502613340c9b35b29617bc

They are adapting the code to use the new symbols in libnftnl. They
are slightly large, so I preferred to send it in this way.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-09-15 15:29 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-02 14:44 [PATCH libnftnl 0/3] use nftnl_ prefix Pablo Neira Ayuso
2015-09-02 14:44 ` [PATCH libnftnl 1/3] src: introduce nftnl_* aliases for all existing functions Pablo Neira Ayuso
2015-09-02 15:02 ` [PATCH libnftnl 0/3] use nftnl_ prefix Pablo Neira Ayuso
2015-09-07 18:14   ` Pablo Neira Ayuso
2015-09-08  6:58     ` Arturo Borrero Gonzalez
2015-09-15 15:35     ` Pablo Neira Ayuso

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).