@@ -5869,6 +5869,18 @@ static int nft_flush_set(const struct nft_ctx *ctx,
return err;
}
+static int nft_set_flush(struct nft_ctx *ctx, struct nft_set *set, u8 genmask)
+{
+ struct nft_set_iter iter = {
+ .genmask = genmask,
+ .fn = nft_flush_set,
+ };
+
+ set->ops->walk(ctx, set, &iter);
+
+ return iter.err;
+}
+
static int nf_tables_delsetelem(struct sk_buff *skb,
const struct nfnl_info *info,
const struct nlattr * const nla[])
@@ -5892,14 +5904,10 @@ static int nf_tables_delsetelem(struct sk_buff *skb,
if (!list_empty(&set->bindings) && set->flags & NFT_SET_CONSTANT)
return -EBUSY;
- if (nla[NFTA_SET_ELEM_LIST_ELEMENTS] == NULL) {
- struct nft_set_iter iter = {
- .genmask = genmask,
- .fn = nft_flush_set,
- };
- set->ops->walk(&ctx, set, &iter);
-
- return iter.err;
+ if (!nla[NFTA_SET_ELEM_LIST_ELEMENTS]) {
+ err = nft_set_flush(&ctx, set, genmask);
+ if (err < 0)
+ return err;
}
nla_for_each_nested(attr, nla[NFTA_SET_ELEM_LIST_ELEMENTS], rem) {
This patch adds nft_set_flush() which prepares for the catch-all element support. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> --- net/netfilter/nf_tables_api.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-)