netfilter: nf_tables: add nft_set_is_anonymous() helper
authorPablo Neira Ayuso <pablo@netfilter.org>
Fri, 24 Nov 2017 12:39:57 +0000 (13:39 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 8 Jan 2018 17:01:16 +0000 (18:01 +0100)
Add helper function to test for the NFT_SET_ANONYMOUS flag.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/net/netfilter/nf_tables.h
net/netfilter/nf_tables_api.c
net/netfilter/nft_dynset.c

index f6e4325..169b562 100644 (file)
@@ -416,6 +416,11 @@ struct nft_set {
                __attribute__((aligned(__alignof__(u64))));
 };
 
+static inline bool nft_set_is_anonymous(const struct nft_set *set)
+{
+       return set->flags & NFT_SET_ANONYMOUS;
+}
+
 static inline void *nft_set_priv(const struct nft_set *set)
 {
        return (void *)set->data;
index 36d38f8..7bc1b0c 100644 (file)
@@ -774,7 +774,7 @@ static int nft_flush_table(struct nft_ctx *ctx)
                if (!nft_is_active_next(ctx->net, set))
                        continue;
 
-               if (set->flags & NFT_SET_ANONYMOUS &&
+               if (nft_set_is_anonymous(set) &&
                    !list_empty(&set->bindings))
                        continue;
 
@@ -3284,7 +3284,7 @@ int nf_tables_bind_set(const struct nft_ctx *ctx, struct nft_set *set,
        struct nft_set_binding *i;
        struct nft_set_iter iter;
 
-       if (!list_empty(&set->bindings) && set->flags & NFT_SET_ANONYMOUS)
+       if (!list_empty(&set->bindings) && nft_set_is_anonymous(set))
                return -EBUSY;
 
        if (binding->flags & NFT_SET_MAP) {
@@ -3319,7 +3319,7 @@ void nf_tables_unbind_set(const struct nft_ctx *ctx, struct nft_set *set,
 {
        list_del_rcu(&binding->list);
 
-       if (list_empty(&set->bindings) && set->flags & NFT_SET_ANONYMOUS &&
+       if (list_empty(&set->bindings) && nft_set_is_anonymous(set) &&
            nft_is_active(ctx->net, set))
                nf_tables_set_destroy(ctx, set);
 }
@@ -5157,7 +5157,7 @@ static int nf_tables_commit(struct net *net, struct sk_buff *skb)
                        /* This avoids hitting -EBUSY when deleting the table
                         * from the transaction.
                         */
-                       if (nft_trans_set(trans)->flags & NFT_SET_ANONYMOUS &&
+                       if (nft_set_is_anonymous(nft_trans_set(trans)) &&
                            !list_empty(&nft_trans_set(trans)->bindings))
                                trans->ctx.table->use--;
 
index 66221ad..ec0fd78 100644 (file)
@@ -184,7 +184,7 @@ static int nft_dynset_init(const struct nft_ctx *ctx,
        if (tb[NFTA_DYNSET_EXPR] != NULL) {
                if (!(set->flags & NFT_SET_EVAL))
                        return -EINVAL;
-               if (!(set->flags & NFT_SET_ANONYMOUS))
+               if (!nft_set_is_anonymous(set))
                        return -EOPNOTSUPP;
 
                priv->expr = nft_expr_init(ctx, tb[NFTA_DYNSET_EXPR]);