]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
parser_bison: Introduce tokens for log levels
authorPhil Sutter <phil@nwl.cc>
Fri, 21 Nov 2025 16:49:02 +0000 (17:49 +0100)
committerPhil Sutter <phil@nwl.cc>
Tue, 20 Jan 2026 15:03:07 +0000 (16:03 +0100)
Since log statement is scoped already, it's just a matter of declaring
the tokens in that scope and using them. This eliminates the redundant
copy of log level string parsing in parser_bison.y - the remaining one,
namely log_level_parse() in statement.c is used by JSON parser.

Signed-off-by: Phil Sutter <phil@nwl.cc>
Reviewed-by: Florian Westphal <fw@strlen.de>
src/parser_bison.y
src/scanner.l

index ba485a8c25b50766bd150af9119421bc25a41463..8e07671cb80e96495d20c8e8e19970861485c752 100644 (file)
@@ -643,6 +643,15 @@ int nft_lex(void *, void *, void *);
 %token SNAPLEN                 "snaplen"
 %token QUEUE_THRESHOLD         "queue-threshold"
 %token LEVEL                   "level"
+%token EMERG                   "emerg"
+%token ALERT                   "alert"
+%token CRIT                    "crit"
+%token ERR                     "err"
+%token WARN                    "warn"
+%token NOTICE                  "notice"
+%token INFO                    "info"
+%token DEBUG_TOKEN             "debug"
+%token AUDIT                   "audit"
 
 %token LIMIT                   "limit"
 %token RATE                    "rate"
@@ -3490,34 +3499,15 @@ log_arg                 :       PREFIX                  string
                        }
                        ;
 
-level_type             :       string
-                       {
-                               if (!strcmp("emerg", $1))
-                                       $$ = NFT_LOGLEVEL_EMERG;
-                               else if (!strcmp("alert", $1))
-                                       $$ = NFT_LOGLEVEL_ALERT;
-                               else if (!strcmp("crit", $1))
-                                       $$ = NFT_LOGLEVEL_CRIT;
-                               else if (!strcmp("err", $1))
-                                       $$ = NFT_LOGLEVEL_ERR;
-                               else if (!strcmp("warn", $1))
-                                       $$ = NFT_LOGLEVEL_WARNING;
-                               else if (!strcmp("notice", $1))
-                                       $$ = NFT_LOGLEVEL_NOTICE;
-                               else if (!strcmp("info", $1))
-                                       $$ = NFT_LOGLEVEL_INFO;
-                               else if (!strcmp("debug", $1))
-                                       $$ = NFT_LOGLEVEL_DEBUG;
-                               else if (!strcmp("audit", $1))
-                                       $$ = NFT_LOGLEVEL_AUDIT;
-                               else {
-                                       erec_queue(error(&@1, "invalid log level"),
-                                                  state->msgs);
-                                       free_const($1);
-                                       YYERROR;
-                               }
-                               free_const($1);
-                       }
+level_type             :       EMERG           { $$ = NFT_LOGLEVEL_EMERG; }
+                       |       ALERT           { $$ = NFT_LOGLEVEL_ALERT; }
+                       |       CRIT            { $$ = NFT_LOGLEVEL_CRIT; }
+                       |       ERR             { $$ = NFT_LOGLEVEL_ERR; }
+                       |       WARN            { $$ = NFT_LOGLEVEL_WARNING; }
+                       |       NOTICE          { $$ = NFT_LOGLEVEL_NOTICE; }
+                       |       INFO            { $$ = NFT_LOGLEVEL_INFO; }
+                       |       DEBUG_TOKEN     { $$ = NFT_LOGLEVEL_DEBUG; }
+                       |       AUDIT           { $$ = NFT_LOGLEVEL_AUDIT; }
                        ;
 
 log_flags              :       TCP     log_flags_tcp   close_scope_tcp
index e0f0aabb683a32b4e2036f4bf0b59071dd5b5239..ca570e2bfe066375ce16ed147614348a29b19ae5 100644 (file)
@@ -433,6 +433,15 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr})
        "queue-threshold"       { return QUEUE_THRESHOLD; }
        "level"                 { return LEVEL; }
        "group"                 { return GROUP; }
+       "emerg"                 { return EMERG; }
+       "alert"                 { return ALERT; }
+       "crit"                  { return CRIT; }
+       "err"                   { return ERR; }
+       "warn"                  { return WARN; }
+       "notice"                { return NOTICE; }
+       "info"                  { return INFO; }
+       "debug"                 { return DEBUG_TOKEN; }
+       "audit"                 { return AUDIT; }
 }
 
 "queue"                        { scanner_push_start_cond(yyscanner, SCANSTATE_EXPR_QUEUE); return QUEUE;}