]> git.ipfire.org Git - thirdparty/libnftnl.git/commitdiff
src: add notrack expression
authorPablo Neira Ayuso <pablo@netfilter.org>
Thu, 20 Oct 2016 15:43:26 +0000 (17:43 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Thu, 20 Oct 2016 16:03:00 +0000 (18:03 +0200)
Register this simple expression with no attributes. Make sure libnftnl
doesn't crash when no build and parse indirections are defined, as it
is the case for this expression.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/expr.c
src/expr_ops.c

index 51413ab70397820f97f9d6036faad8cc48c61520..2779b3c42217dffeac8fab29c7095eeb11261a69 100644 (file)
@@ -213,13 +213,15 @@ bool nftnl_expr_cmp(const struct nftnl_expr *e1, const struct nftnl_expr *e2)
 }
 EXPORT_SYMBOL(nftnl_expr_cmp);
 
-void
-nftnl_expr_build_payload(struct nlmsghdr *nlh, struct nftnl_expr *expr)
+void nftnl_expr_build_payload(struct nlmsghdr *nlh, struct nftnl_expr *expr)
 {
        struct nlattr *nest;
 
        mnl_attr_put_strz(nlh, NFTA_EXPR_NAME, expr->ops->name);
 
+       if (!expr->ops->build)
+               return;
+
        nest = mnl_attr_nest_start(nlh, NFTA_EXPR_DATA);
        expr->ops->build(nlh, expr);
        mnl_attr_nest_end(nlh, nest);
@@ -261,6 +263,7 @@ struct nftnl_expr *nftnl_expr_parse(struct nlattr *attr)
                goto err1;
 
        if (tb[NFTA_EXPR_DATA] &&
+           expr->ops->parse &&
            expr->ops->parse(expr, tb[NFTA_EXPR_DATA]) < 0)
                goto err2;
 
index 55748d64989a71f9703b67be60adfe781075f7d8..96b1f8df9d3b9785e1921612c80faddaf95a70b4 100644 (file)
@@ -31,6 +31,10 @@ extern struct expr_ops expr_ops_target;
 extern struct expr_ops expr_ops_dynset;
 extern struct expr_ops expr_ops_hash;
 
+static struct expr_ops expr_ops_notrack = {
+       .name   = "notrack",
+};
+
 static struct expr_ops *expr_ops[] = {
        &expr_ops_bitwise,
        &expr_ops_byteorder,
@@ -49,6 +53,7 @@ static struct expr_ops *expr_ops[] = {
        &expr_ops_meta,
        &expr_ops_ng,
        &expr_ops_nat,
+       &expr_ops_notrack,
        &expr_ops_payload,
        &expr_ops_range,
        &expr_ops_redir,