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 Reviewed-by: Florian Westphal --- src/parser_bison.y | 46 ++++++++++++++++++---------------------------- src/scanner.l | 9 +++++++++ 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/src/parser_bison.y b/src/parser_bison.y index ba485a8c25b50..8e07671cb80e9 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -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 diff --git a/src/scanner.l b/src/scanner.l index e0f0aabb683a3..ca570e2bfe066 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -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;} -- 2.51.0