]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
evaluate: display expression, statement and command name on debug
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 31 Aug 2016 16:27:13 +0000 (18:27 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 5 Sep 2016 17:15:30 +0000 (19:15 +0200)
Extend debugging knob for evaluation to display the command, the
expression and statement names.

 # nft --debug=eval add rule x y ip saddr 1.1.1.1 counter
 <cmdline>:1:1-37: Evaluate add
 add rule x y ip saddr 1.1.1.1 counter
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

 <cmdline>:1:14-29: Evaluate expression
 add rule x y ip saddr 1.1.1.1 counter
              ^^^^^^^^^^^^^^^^
 ip saddr $1.1.1.1

 <cmdline>:1:14-29: Evaluate relational
 add rule x y ip saddr 1.1.1.1 counter
              ^^^^^^^^^^^^^^^^
 ip saddr $1.1.1.1

 <cmdline>:1:14-21: Evaluate payload
 add rule x y ip saddr 1.1.1.1 counter
              ^^^^^^^^
 ip saddr

 <cmdline>:1:23-29: Evaluate symbol
 add rule x y ip saddr 1.1.1.1 counter
                       ^^^^^^^

 <cmdline>:1:23-29: Evaluate value
 add rule x y ip saddr 1.1.1.1 counter
                       ^^^^^^^
 1.1.1.1

 <cmdline>:1:31-37: Evaluate counter
 add rule x y ip saddr 1.1.1.1 counter
                               ^^^^^^^
 counter packets 0 bytes 0

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/evaluate.c

index c1ee6b19295512bbb8eabdcf7d211bf984fd1977..45af3298537c3572a2d1eeb7626e56e3adca11a2 100644 (file)
@@ -1589,7 +1589,8 @@ static int expr_evaluate(struct eval_ctx *ctx, struct expr **expr)
 #ifdef DEBUG
        if (debug_level & DEBUG_EVALUATION) {
                struct error_record *erec;
-               erec = erec_create(EREC_INFORMATIONAL, &(*expr)->location, "Evaluate");
+               erec = erec_create(EREC_INFORMATIONAL, &(*expr)->location,
+                                  "Evaluate %s", (*expr)->ops->name);
                erec_print(stdout, erec); expr_print(*expr); printf("\n\n");
        }
 #endif
@@ -2432,7 +2433,8 @@ int stmt_evaluate(struct eval_ctx *ctx, struct stmt *stmt)
 #ifdef DEBUG
        if (debug_level & DEBUG_EVALUATION) {
                struct error_record *erec;
-               erec = erec_create(EREC_INFORMATIONAL, &stmt->location, "Evaluate");
+               erec = erec_create(EREC_INFORMATIONAL, &stmt->location,
+                                  "Evaluate %s", stmt->ops->name);
                erec_print(stdout, erec); stmt_print(stmt); printf("\n\n");
        }
 #endif
@@ -2934,12 +2936,38 @@ static int cmd_evaluate_export(struct eval_ctx *ctx, struct cmd *cmd)
        return cache_update(cmd->op, ctx->msgs);
 }
 
+#ifdef DEBUG
+static const char *cmd_op_name[] = {
+       [CMD_INVALID]   = "invalid",
+       [CMD_ADD]       = "add",
+       [CMD_REPLACE]   = "replace",
+       [CMD_CREATE]    = "create",
+       [CMD_INSERT]    = "insert",
+       [CMD_DELETE]    = "delete",
+       [CMD_LIST]      = "list",
+       [CMD_FLUSH]     = "flush",
+       [CMD_RENAME]    = "rename",
+       [CMD_EXPORT]    = "export",
+       [CMD_MONITOR]   = "monitor",
+       [CMD_DESCRIBE]  = "describe",
+};
+
+static const char *cmd_op_to_name(enum cmd_ops op)
+{
+       if (op > CMD_DESCRIBE)
+               return "unknown";
+
+       return cmd_op_name[op];
+}
+#endif
+
 int cmd_evaluate(struct eval_ctx *ctx, struct cmd *cmd)
 {
 #ifdef DEBUG
        if (debug_level & DEBUG_EVALUATION) {
                struct error_record *erec;
-               erec = erec_create(EREC_INFORMATIONAL, &cmd->location, "Evaluate");
+               erec = erec_create(EREC_INFORMATIONAL, &cmd->location,
+                                  "Evaluate %s", cmd_op_to_name(cmd->op));
                erec_print(stdout, erec); printf("\n\n");
        }
 #endif