On Tue, Mar 22, 2016 at 08:46:24PM +0100, Carlos Falgueras García wrote: > These functions allow to create a buffer (nftnl_udata_buf) of TLV objects > (nftnl_udata). It is inspired by libmnl/src/attr.c. It can be used to store > several variable length user data into an object. > > Example usage: > ``` > struct nftnl_udata_buf *buf; > struct nftnl_udata *attr; > const char str[] = "Hello World!"; > > buf = nftnl_udata_buf_alloc(UDATA_SIZE); > if (!buf) { > perror("OOM"); > exit(EXIT_FAILURE); > } > > if (!nftnl_udata_put_strz(buf, MY_TYPE, str)) { > perror("Can't put attribute \"%s\"", str); > exit(EXIT_FAILURE); > } > > nftnl_udata_for_each(buf, attr) { > printf("%s\n", (char *)nftnl_udata_attr_value(attr)); > } > > nftnl_udata_buf_free(buf); > ``` > > Signed-off-by: Carlos Falgueras García <carlosfg@xxxxxxxxxx> > --- > include/Makefile.am | 1 + > include/libnftnl/Makefile.am | 1 + > include/libnftnl/udata.h | 54 ++++++++++++++++++ > include/udata.h | 40 +++++++++++++ > src/Makefile.am | 1 + > src/libnftnl.map | 16 ++++++ > src/udata.c | 131 +++++++++++++++++++++++++++++++++++++++++++ > 7 files changed, 244 insertions(+) > create mode 100644 include/libnftnl/udata.h > create mode 100644 include/udata.h > create mode 100644 src/udata.c > > diff --git a/include/Makefile.am b/include/Makefile.am > index be9eb9b..9f55737 100644 > --- a/include/Makefile.am > +++ b/include/Makefile.am > @@ -12,4 +12,5 @@ noinst_HEADERS = internal.h \ > expr.h \ > json.h \ > set_elem.h \ > + udata.h \ > utils.h > diff --git a/include/libnftnl/Makefile.am b/include/libnftnl/Makefile.am > index 84f01b6..457ec95 100644 > --- a/include/libnftnl/Makefile.am > +++ b/include/libnftnl/Makefile.am > @@ -7,4 +7,5 @@ pkginclude_HEADERS = batch.h \ > set.h \ > ruleset.h \ > common.h \ > + udata.h \ > gen.h > diff --git a/include/libnftnl/udata.h b/include/libnftnl/udata.h > new file mode 100644 > index 0000000..166bb06 > --- /dev/null > +++ b/include/libnftnl/udata.h > @@ -0,0 +1,54 @@ > +#ifndef _LIBNFTNL_UDATA_H_ > +#define _LIBNFTNL_UDATA_H_ > + > +#include <stdio.h> > +#include <stdint.h> > +#include <stdbool.h> > + > +/* > + * nftnl user data attributes API > + */ > +struct nftnl_udata; > +struct nftnl_udata_buf; > + > +/* nftnl_udata_buf */ > +struct nftnl_udata_buf *nftnl_udata_buf_alloc(uint32_t data_size); > +void nftnl_udata_buf_free(struct nftnl_udata_buf *buf); > +uint32_t nftnl_udata_buf_len(const struct nftnl_udata_buf *buf); > +uint32_t nftnl_udata_buf_size(const struct nftnl_udata_buf *buf); Do we need nftnl_udata_buf_size? If not, please remove this. We should only expose the interfaces that are strictly necessary. -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html