Commit c604cc69 authored by Pablo Neira Ayuso's avatar Pablo Neira Ayuso

netfilter: nf_tables: move nft_expr_clone() to nf_tables_api.c

Move the nft_expr_clone() helper function to the core.
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent 79e28519
...@@ -846,6 +846,7 @@ static inline void *nft_expr_priv(const struct nft_expr *expr) ...@@ -846,6 +846,7 @@ static inline void *nft_expr_priv(const struct nft_expr *expr)
return (void *)expr->data; return (void *)expr->data;
} }
int nft_expr_clone(struct nft_expr *dst, struct nft_expr *src);
void nft_expr_destroy(const struct nft_ctx *ctx, struct nft_expr *expr); void nft_expr_destroy(const struct nft_ctx *ctx, struct nft_expr *expr);
int nft_expr_dump(struct sk_buff *skb, unsigned int attr, int nft_expr_dump(struct sk_buff *skb, unsigned int attr,
const struct nft_expr *expr); const struct nft_expr *expr);
......
...@@ -2557,6 +2557,24 @@ static struct nft_expr *nft_expr_init(const struct nft_ctx *ctx, ...@@ -2557,6 +2557,24 @@ static struct nft_expr *nft_expr_init(const struct nft_ctx *ctx,
return ERR_PTR(err); return ERR_PTR(err);
} }
int nft_expr_clone(struct nft_expr *dst, struct nft_expr *src)
{
int err;
if (src->ops->clone) {
dst->ops = src->ops;
err = src->ops->clone(dst, src);
if (err < 0)
return err;
} else {
memcpy(dst, src, src->ops->size);
}
__module_get(src->ops->type->owner);
return 0;
}
void nft_expr_destroy(const struct nft_ctx *ctx, struct nft_expr *expr) void nft_expr_destroy(const struct nft_ctx *ctx, struct nft_expr *expr)
{ {
nf_tables_expr_destroy(ctx, expr); nf_tables_expr_destroy(ctx, expr);
......
...@@ -24,23 +24,6 @@ struct nft_dynset { ...@@ -24,23 +24,6 @@ struct nft_dynset {
struct nft_set_binding binding; struct nft_set_binding binding;
}; };
static int nft_expr_clone(struct nft_expr *dst, struct nft_expr *src)
{
int err;
if (src->ops->clone) {
dst->ops = src->ops;
err = src->ops->clone(dst, src);
if (err < 0)
return err;
} else {
memcpy(dst, src, src->ops->size);
}
__module_get(src->ops->type->owner);
return 0;
}
static void *nft_dynset_new(struct nft_set *set, const struct nft_expr *expr, static void *nft_dynset_new(struct nft_set *set, const struct nft_expr *expr,
struct nft_regs *regs) struct nft_regs *regs)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment