]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
evaluate: refactor CMD_OBJ_QUOTA/COUNTER handling
authorFlorian Westphal <fw@strlen.de>
Mon, 27 Feb 2017 14:11:42 +0000 (15:11 +0100)
committerFlorian Westphal <fw@strlen.de>
Thu, 16 Mar 2017 09:09:57 +0000 (10:09 +0100)
... to make adding CMD_OBJ_CT_HELPER support easier.

Signed-off-by: Florian Westphal <fw@strlen.de>
Acked-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/evaluate.c

index 7ddbb658f96fa72c21a8479172a6487e1f98dd00..ae30bc9bb3b9cca0bbb6c26f9073b18cb07c3c7a 100644 (file)
@@ -2940,12 +2940,29 @@ static int cmd_evaluate_delete(struct eval_ctx *ctx, struct cmd *cmd)
        }
 }
 
+static int cmd_evaluate_list_obj(struct eval_ctx *ctx, const struct cmd *cmd,
+                                uint32_t obj_type)
+{
+       const struct table *table;
+
+       if (obj_type == NFT_OBJECT_UNSPEC)
+               obj_type = NFT_OBJECT_COUNTER;
+
+       table = table_lookup(&cmd->handle);
+       if (table == NULL)
+               return cmd_error(ctx, "Could not process rule: Table '%s' does not exist",
+                                cmd->handle.table);
+       if (obj_lookup(table, cmd->handle.obj, obj_type) == NULL)
+               return cmd_error(ctx, "Could not process rule: Object '%s' does not exist",
+                                        cmd->handle.obj);
+       return 0;
+}
+
 static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd)
 {
        struct table *table;
        struct set *set;
        int ret;
-       uint32_t obj_type = NFT_OBJECT_UNSPEC;
 
        ret = cache_update(cmd->op, ctx->msgs);
        if (ret < 0)
@@ -3001,18 +3018,9 @@ static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd)
                                         cmd->handle.chain);
                return 0;
        case CMD_OBJ_QUOTA:
-               obj_type = NFT_OBJECT_QUOTA;
+               return cmd_evaluate_list_obj(ctx, cmd, NFT_OBJECT_QUOTA);
        case CMD_OBJ_COUNTER:
-               if (obj_type == NFT_OBJECT_UNSPEC)
-                       obj_type = NFT_OBJECT_COUNTER;
-               table = table_lookup(&cmd->handle);
-               if (table == NULL)
-                       return cmd_error(ctx, "Could not process rule: Table '%s' does not exist",
-                                        cmd->handle.table);
-               if (obj_lookup(table, cmd->handle.obj, obj_type) == NULL)
-                       return cmd_error(ctx, "Could not process rule: Object '%s' does not exist",
-                                        cmd->handle.obj);
-               return 0;
+               return cmd_evaluate_list_obj(ctx, cmd, NFT_OBJECT_COUNTER);
        case CMD_OBJ_COUNTERS:
        case CMD_OBJ_QUOTAS:
                if (cmd->handle.table == NULL)