summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/expr.c7
-rw-r--r--src/expr_ops.c5
2 files changed, 10 insertions, 2 deletions
diff --git a/src/expr.c b/src/expr.c
index 51413ab..2779b3c 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -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;
diff --git a/src/expr_ops.c b/src/expr_ops.c
index 55748d6..96b1f8d 100644
--- a/src/expr_ops.c
+++ b/src/expr_ops.c
@@ -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,