]> git.ipfire.org Git - thirdparty/libnftnl.git/commitdiff
set_elem: missing set and build for NFTNL_SET_ELEM_EXPR
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 11 Mar 2020 13:23:33 +0000 (14:23 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 11 Mar 2020 13:31:04 +0000 (14:31 +0100)
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>
src/set_elem.c

index 22031938ebbc1df1ffcaf9b4ca1c7b563206b025..44213228d8276c40d014309977380d9d64f7c31b 100644 (file)
@@ -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,