parser_bison: Introduce tokens for log levels

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>
This commit is contained in:
Phil Sutter 2025-11-21 17:49:02 +01:00
parent 6c984ef1ef
commit 7d6d805b61
2 changed files with 27 additions and 28 deletions

View 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

View 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;}