]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
scanner: add fib scope
authorFlorian Westphal <fw@strlen.de>
Thu, 11 Mar 2021 13:23:05 +0000 (14:23 +0100)
committerFlorian Westphal <fw@strlen.de>
Tue, 16 Mar 2021 22:59:40 +0000 (23:59 +0100)
makes no sense as-is because all keywords need to stay
in the INITIAL scope.

This can be changed after all saddr/daddr users have been scoped.

Signed-off-by: Florian Westphal <fw@strlen.de>
include/parser.h
src/parser_bison.y
src/scanner.l

index 586a984875c4a4656f931a550a88abf9fc3707d9..e338713dad322eae4462d2bc7d7a676fb8fa870f 100644 (file)
@@ -31,6 +31,7 @@ enum startcond_type {
        PARSER_SC_CT,
        PARSER_SC_IP,
        PARSER_SC_IP6,
+       PARSER_SC_EXPR_FIB,
        PARSER_SC_EXPR_HASH,
        PARSER_SC_EXPR_IPSEC,
        PARSER_SC_EXPR_NUMGEN,
index 9ef2602e22bdb65034a8927aa43ffd4562ddb2aa..74ab69dd882065de9afcbe4ee4e1201c070fc15c 100644 (file)
@@ -862,6 +862,7 @@ opt_newline         :       NEWLINE
                        ;
 
 close_scope_ct         : { scanner_pop_start_cond(nft->scanner, PARSER_SC_CT); };
+close_scope_fib                : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_FIB); };
 close_scope_hash       : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_HASH); };
 close_scope_ip         : { scanner_pop_start_cond(nft->scanner, PARSER_SC_IP); };
 close_scope_ip6                : { scanner_pop_start_cond(nft->scanner, PARSER_SC_IP6); };
@@ -3873,7 +3874,7 @@ primary_expr              :       symbol_expr                     { $$ = $1; }
                        |       '('     basic_expr      ')'     { $$ = $2; }
                        ;
 
-fib_expr               :       FIB     fib_tuple       fib_result
+fib_expr               :       FIB     fib_tuple       fib_result      close_scope_fib
                        {
                                if (($2 & (NFTA_FIB_F_SADDR|NFTA_FIB_F_DADDR)) == 0) {
                                        erec_queue(error(&@2, "fib: need either saddr or daddr"), state->msgs);
index 15d1beca601d6902485d32b0ea5fa58ea3b41b0a..c78f34b625c25bd14ba09f2cbb44ff240b5d5a57 100644 (file)
@@ -199,6 +199,7 @@ addrstring  ({macaddr}|{ip4addr}|{ip6addr})
 %s SCANSTATE_CT
 %s SCANSTATE_IP
 %s SCANSTATE_IP6
+%s SCANSTATE_EXPR_FIB
 %s SCANSTATE_EXPR_HASH
 %s SCANSTATE_EXPR_IPSEC
 %s SCANSTATE_EXPR_NUMGEN
@@ -588,7 +589,7 @@ addrstring  ({macaddr}|{ip4addr}|{ip6addr})
 "dup"                  { return DUP; }
 "fwd"                  { return FWD; }
 
-"fib"                  { return FIB; }
+"fib"                  { scanner_push_start_cond(yyscanner, SCANSTATE_EXPR_FIB); return FIB; }
 
 "osf"                  { return OSF; }