From ec38e5ed61a088a1fbd2922742c9125aa1c63a7c Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Mon, 27 Feb 2017 15:11:42 +0100 Subject: evaluate: refactor CMD_OBJ_QUOTA/COUNTER handling ... to make adding CMD_OBJ_CT_HELPER support easier. Signed-off-by: Florian Westphal Acked-by: Pablo Neira Ayuso --- src/evaluate.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) (limited to 'src/evaluate.c') diff --git a/src/evaluate.c b/src/evaluate.c index 7ddbb658..ae30bc9b 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -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) -- cgit v1.2.3