]> git.ipfire.org Git - thirdparty/libnftnl.git/commitdiff
src: add nftnl_*_{get,set}_array()
authorPablo Neira Ayuso <pablo@netfilter.org>
Tue, 18 Feb 2020 13:09:23 +0000 (14:09 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 19 Feb 2020 17:26:42 +0000 (18:26 +0100)
The original intention in eb58f53372e7 ("src: add flowtable support")
was to introduce this helper function. Add helper to set and to get
array of strings.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Acked-by: Phil Sutter <phil@nwl.cc>
include/libnftnl/chain.h
include/libnftnl/flowtable.h
src/chain.c
src/flowtable.c
src/libnftnl.map

index 33d04e19b05fad6ef1c9c1cd3d6e94e2b5423680..2eb22cc4bc9469fcfbad3ef5cc77cc9c80b7435d 100644 (file)
@@ -46,6 +46,7 @@ void nftnl_chain_set_u32(struct nftnl_chain *t, uint16_t attr, uint32_t data);
 void nftnl_chain_set_s32(struct nftnl_chain *t, uint16_t attr, int32_t data);
 void nftnl_chain_set_u64(struct nftnl_chain *t, uint16_t attr, uint64_t data);
 int nftnl_chain_set_str(struct nftnl_chain *t, uint16_t attr, const char *str);
+int nftnl_chain_set_array(struct nftnl_chain *t, uint16_t attr, const char **data);
 
 const void *nftnl_chain_get(const struct nftnl_chain *c, uint16_t attr);
 const void *nftnl_chain_get_data(const struct nftnl_chain *c, uint16_t attr,
@@ -55,6 +56,7 @@ uint8_t nftnl_chain_get_u8(const struct nftnl_chain *c, uint16_t attr);
 uint32_t nftnl_chain_get_u32(const struct nftnl_chain *c, uint16_t attr);
 int32_t nftnl_chain_get_s32(const struct nftnl_chain *c, uint16_t attr);
 uint64_t nftnl_chain_get_u64(const struct nftnl_chain *c, uint16_t attr);
+const char *const *nftnl_chain_get_array(const struct nftnl_chain *c, uint16_t attr);
 
 void nftnl_chain_rule_add(struct nftnl_rule *rule, struct nftnl_chain *c);
 void nftnl_chain_rule_del(struct nftnl_rule *rule);
index bdff114aba54aa09e7f4bbd7f5ec5a9227c3e3b3..168f8334cdb13b07c09ca2a2ce4925d4df1f782e 100644 (file)
@@ -41,7 +41,7 @@ void nftnl_flowtable_set_u32(struct nftnl_flowtable *t, uint16_t attr, uint32_t
 void nftnl_flowtable_set_s32(struct nftnl_flowtable *t, uint16_t attr, int32_t data);
 void nftnl_flowtable_set_u64(struct nftnl_flowtable *t, uint16_t attr, uint64_t data);
 int nftnl_flowtable_set_str(struct nftnl_flowtable *t, uint16_t attr, const char *str);
-void nftnl_flowtable_set_array(struct nftnl_flowtable *t, uint16_t attr, const char **data);
+int nftnl_flowtable_set_array(struct nftnl_flowtable *t, uint16_t attr, const char **data);
 
 const void *nftnl_flowtable_get(const struct nftnl_flowtable *c, uint16_t attr);
 const void *nftnl_flowtable_get_data(const struct nftnl_flowtable *c, uint16_t attr,
@@ -50,7 +50,7 @@ const char *nftnl_flowtable_get_str(const struct nftnl_flowtable *c, uint16_t at
 uint32_t nftnl_flowtable_get_u32(const struct nftnl_flowtable *c, uint16_t attr);
 int32_t nftnl_flowtable_get_s32(const struct nftnl_flowtable *c, uint16_t attr);
 uint64_t nftnl_flowtable_get_u64(const struct nftnl_flowtable *c, uint16_t attr);
-const char **nftnl_flowtable_get_array(const struct nftnl_flowtable *t, uint16_t attr);
+const char *const *nftnl_flowtable_get_array(const struct nftnl_flowtable *t, uint16_t attr);
 
 struct nlmsghdr;
 
index 94a9e43a17548bbfbfc89ad48697ae2530c8d283..c43ba2236673e9020d4580f35dc07dd2b0754b42 100644 (file)
@@ -319,6 +319,13 @@ int nftnl_chain_set_str(struct nftnl_chain *c, uint16_t attr, const char *str)
        return nftnl_chain_set_data(c, attr, str, strlen(str) + 1);
 }
 
+EXPORT_SYMBOL(nftnl_chain_set_array);
+int nftnl_chain_set_array(struct nftnl_chain *c, uint16_t attr,
+                         const char **data)
+{
+       return nftnl_chain_set_data(c, attr, data, 0);
+}
+
 EXPORT_SYMBOL(nftnl_chain_get_data);
 const void *nftnl_chain_get_data(const struct nftnl_chain *c, uint16_t attr,
                                 uint32_t *data_len)
@@ -427,6 +434,17 @@ uint8_t nftnl_chain_get_u8(const struct nftnl_chain *c, uint16_t attr)
        return val ? *val : 0;
 }
 
+EXPORT_SYMBOL(nftnl_chain_get_array);
+const char *const *nftnl_chain_get_array(const struct nftnl_chain *c, uint16_t attr)
+{
+       uint32_t data_len;
+       const char * const *val = nftnl_chain_get_data(c, attr, &data_len);
+
+       nftnl_assert(val, attr, attr == NFTNL_CHAIN_DEVICES);
+
+       return val;
+}
+
 EXPORT_SYMBOL(nftnl_chain_nlmsg_build_payload);
 void nftnl_chain_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nftnl_chain *c)
 {
index 635322d7fa56305f723fed6feb8521d734181db2..19e288247e341923410629e67d2292e7bbddf67a 100644 (file)
@@ -206,6 +206,13 @@ void nftnl_flowtable_set_u64(struct nftnl_flowtable *c, uint16_t attr, uint64_t
        nftnl_flowtable_set_data(c, attr, &data, sizeof(uint64_t));
 }
 
+EXPORT_SYMBOL(nftnl_flowtable_set_array);
+int nftnl_flowtable_set_array(struct nftnl_flowtable *c, uint16_t attr,
+                             const char **data)
+{
+       return nftnl_flowtable_set_data(c, attr, data, 0);
+}
+
 EXPORT_SYMBOL(nftnl_flowtable_get_data);
 const void *nftnl_flowtable_get_data(const struct nftnl_flowtable *c,
                                     uint16_t attr, uint32_t *data_len)
@@ -291,6 +298,17 @@ int32_t nftnl_flowtable_get_s32(const struct nftnl_flowtable *c, uint16_t attr)
        return val ? *val : 0;
 }
 
+EXPORT_SYMBOL(nftnl_flowtable_get_array);
+const char *const *nftnl_flowtable_get_array(const struct nftnl_flowtable *c, uint16_t attr)
+{
+       uint32_t data_len;
+       const char * const *val = nftnl_flowtable_get_data(c, attr, &data_len);
+
+       nftnl_assert(val, attr, attr == NFTNL_FLOWTABLE_DEVICES);
+
+       return val;
+}
+
 EXPORT_SYMBOL(nftnl_flowtable_nlmsg_build_payload);
 void nftnl_flowtable_nlmsg_build_payload(struct nlmsghdr *nlh,
                                         const struct nftnl_flowtable *c)
index 5ba8d995440e008dafc0b26b5f648e8655ad560a..f62640f83e6b56b1ee3f20c2b43432e94cef544c 100644 (file)
@@ -363,4 +363,8 @@ LIBNFTNL_13 {
 LIBNFTNL_14 {
   nftnl_udata_nest_start;
   nftnl_udata_nest_end;
+  nftnl_chain_set_array;
+  nftnl_chain_get_array;
+  nftnl_flowtable_set_array;
+  nftnl_flowtable_get_array;
 } LIBNFTNL_13;