]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
netfilter: nftables: add helper function to flush set elements
authorPablo Neira Ayuso <pablo@netfilter.org>
Tue, 27 Apr 2021 16:05:45 +0000 (18:05 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 27 Apr 2021 16:05:45 +0000 (18:05 +0200)
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

index 502240fbb08733966f77f3bc6bbc1d006c23eacb..3342f260d534c3858204ee15375b773ec3b4e0e4 100644 (file)
@@ -5839,10 +5839,10 @@ fail_elem:
        return err;
 }
 
-static int nft_flush_set(const struct nft_ctx *ctx,
-                        struct nft_set *set,
-                        const struct nft_set_iter *iter,
-                        struct nft_set_elem *elem)
+static int nft_setelem_flush(const struct nft_ctx *ctx,
+                            struct nft_set *set,
+                            const struct nft_set_iter *iter,
+                            struct nft_set_elem *elem)
 {
        struct nft_trans *trans;
        int err;
@@ -5869,6 +5869,18 @@ err1:
        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_setelem_flush,
+       };
+
+       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,15 +5904,8 @@ 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])
+               return nft_set_flush(&ctx, set, genmask);
 
        nla_for_each_nested(attr, nla[NFTA_SET_ELEM_LIST_ELEMENTS], rem) {
                err = nft_del_setelem(&ctx, set, attr);