]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
src: add rule_stmt_append() and use it
authorPablo Neira Ayuso <pablo@netfilter.org>
Tue, 5 May 2020 18:12:46 +0000 (20:12 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 5 May 2020 18:21:27 +0000 (20:21 +0200)
This helper function adds a statement at the end of the rule statement
list and it updates the rule statement counter.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/rule.h
src/netlink_delinearize.c
src/parser_json.c
src/rule.c
src/xt.c

index 5311b56301651248d74f0255db5e86fb44038439..1a4ec3d8bc375b03159a7fabe52e8c754a87654d 100644 (file)
@@ -280,6 +280,7 @@ extern void rule_print(const struct rule *rule, struct output_ctx *octx);
 extern struct rule *rule_lookup(const struct chain *chain, uint64_t handle);
 extern struct rule *rule_lookup_by_index(const struct chain *chain,
                                         uint64_t index);
+void rule_stmt_append(struct rule *rule, struct stmt *stmt);
 void rule_stmt_insert_at(struct rule *rule, struct stmt *nstmt,
                         struct stmt *stmt);
 
index f721d15c330fda6b0309094042503508f7873df7..7f7ad2626e14b3d02ac3418e3bf55c67828bff7e 100644 (file)
@@ -563,8 +563,7 @@ static void netlink_parse_payload_stmt(struct netlink_parse_ctx *ctx,
        payload_init_raw(expr, base, offset, len);
 
        stmt = payload_stmt_alloc(loc, expr, val);
-
-       list_add_tail(&stmt->list, &ctx->rule->stmts);
+       rule_stmt_append(ctx->rule, stmt);
 }
 
 static void netlink_parse_payload(struct netlink_parse_ctx *ctx,
@@ -615,7 +614,7 @@ static void netlink_parse_exthdr(struct netlink_parse_ctx *ctx,
                expr_set_type(val, expr->dtype, expr->byteorder);
 
                stmt = exthdr_stmt_alloc(loc, expr, val);
-               list_add_tail(&stmt->list, &ctx->rule->stmts);
+               rule_stmt_append(ctx->rule, stmt);
        }
 }
 
@@ -1672,7 +1671,7 @@ static int netlink_parse_rule_expr(struct nftnl_expr *nle, void *arg)
        if (err < 0)
                return err;
        if (ctx->stmt != NULL) {
-               list_add_tail(&ctx->stmt->list, &ctx->rule->stmts);
+               rule_stmt_append(ctx->rule, ctx->stmt);
                ctx->stmt = NULL;
        }
        return 0;
index a1765027fdf3cca0654027343ff27a467ebdce83..4468407b0ecd07b5e456fedc30cad98b82c8bd9f 100644 (file)
@@ -2731,8 +2731,7 @@ static struct cmd *json_parse_cmd_add_rule(struct json_ctx *ctx, json_t *root,
                        return NULL;
                }
 
-               rule->num_stmts++;
-               list_add_tail(&stmt->list, &rule->stmts);
+               rule_stmt_append(rule, stmt);
        }
 
        if (op == CMD_ADD)
@@ -3404,8 +3403,7 @@ static struct cmd *json_parse_cmd_replace(struct json_ctx *ctx,
                        return NULL;
                }
 
-               rule->num_stmts++;
-               list_add_tail(&stmt->list, &rule->stmts);
+               rule_stmt_append(rule, stmt);
        }
 
        if (op == CMD_REPLACE)
index 0759bec5f1a03f477f997e173c4fc45b6d97adaf..c58aa359259e2c4c416981c8e1fdbcc3e33f6fcd 100644 (file)
@@ -686,6 +686,12 @@ struct rule *rule_lookup_by_index(const struct chain *chain, uint64_t index)
        return NULL;
 }
 
+void rule_stmt_append(struct rule *rule, struct stmt *stmt)
+{
+       list_add_tail(&stmt->list, &rule->stmts);
+       rule->num_stmts++;
+}
+
 void rule_stmt_insert_at(struct rule *rule, struct stmt *nstmt,
                         struct stmt *stmt)
 {
index b0f5a30c46b5855637e58f9187551a0be34ef34f..f39acf30275a16499f5d1ed9ce40868f027433ac 100644 (file)
--- a/src/xt.c
+++ b/src/xt.c
@@ -238,7 +238,7 @@ void netlink_parse_match(struct netlink_parse_ctx *ctx,
        stmt->xt.name = strdup(name);
        stmt->xt.type = NFT_XT_MATCH;
 #endif
-       list_add_tail(&stmt->list, &ctx->rule->stmts);
+       rule_stmt_append(ctx->rule, stmt);
 }
 
 void netlink_parse_target(struct netlink_parse_ctx *ctx,
@@ -283,7 +283,7 @@ void netlink_parse_target(struct netlink_parse_ctx *ctx,
        stmt->xt.name = strdup(name);
        stmt->xt.type = NFT_XT_TARGET;
 #endif
-       list_add_tail(&stmt->list, &ctx->rule->stmts);
+       rule_stmt_append(ctx->rule, stmt);
 }
 
 #ifdef HAVE_LIBXTABLES