summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2020-03-11 14:23:33 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2020-03-11 14:31:04 +0100
commit92705574380f7ffd9f244b4cb69422a85269ab41 (patch)
treeb6406d1f3ae917594a993b166356cf5f933b9d41
parent4c8abad760f659827c8d681642f51a3b6852f6ee (diff)
set_elem: missing set and build for NFTNL_SET_ELEM_EXPR
Extend nftnl_set_elem_set() and nftnl_set_elem_nlmsg_build_payload() to support for the NFTNL_SET_ELEM_EXPR attribute. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--src/set_elem.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/set_elem.c b/src/set_elem.c
index 2203193..4421322 100644
--- a/src/set_elem.c
+++ b/src/set_elem.c
@@ -162,6 +162,12 @@ int nftnl_set_elem_set(struct nftnl_set_elem *s, uint16_t attr,
if (!s->objref)
return -1;
break;
+ case NFTNL_SET_ELEM_EXPR:
+ if (s->flags & (1 << NFTNL_SET_ELEM_EXPR))
+ nftnl_expr_free(s->expr);
+
+ s->expr = (void *)data;
+ break;
}
s->flags |= (1 << attr);
return 0;
@@ -326,6 +332,13 @@ void nftnl_set_elem_nlmsg_build_payload(struct nlmsghdr *nlh,
mnl_attr_put(nlh, NFTA_SET_ELEM_USERDATA, e->user.len, e->user.data);
if (e->flags & (1 << NFTNL_SET_ELEM_OBJREF))
mnl_attr_put_strz(nlh, NFTA_SET_ELEM_OBJREF, e->objref);
+ if (e->flags & (1 << NFTNL_SET_ELEM_EXPR)) {
+ struct nlattr *nest1;
+
+ nest1 = mnl_attr_nest_start(nlh, NFTA_SET_ELEM_EXPR);
+ nftnl_expr_build_payload(nlh, e->expr);
+ mnl_attr_nest_end(nlh, nest1);
+ }
}
static void nftnl_set_elem_nlmsg_build_def(struct nlmsghdr *nlh,