}
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);
goto err1;
if (tb[NFTA_EXPR_DATA] &&
+ expr->ops->parse &&
expr->ops->parse(expr, tb[NFTA_EXPR_DATA]) < 0)
goto err2;
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,
&expr_ops_meta,
&expr_ops_ng,
&expr_ops_nat,
+ &expr_ops_notrack,
&expr_ops_payload,
&expr_ops_range,
&expr_ops_redir,