summaryrefslogtreecommitdiffstats
path: root/src/expr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/expr.c')
-rw-r--r--src/expr.c7
1 files changed, 5 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;