]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
scanner: dup, fwd, tproxy: Move to own scopes
authorPhil Sutter <phil@nwl.cc>
Fri, 30 Jul 2021 16:11:51 +0000 (18:11 +0200)
committerPhil Sutter <phil@nwl.cc>
Tue, 1 Mar 2022 09:54:03 +0000 (10:54 +0100)
With these three scopes in place, keyword 'to' may be isolated.

Signed-off-by: Phil Sutter <phil@nwl.cc>
include/parser.h
src/parser_bison.y
src/scanner.l

index bc42229c1a83b2fdc167792117d1457f6e0188fb..f32154cca44d32983df9346ff5c61ff72cc527c3 100644 (file)
@@ -75,10 +75,13 @@ enum startcond_type {
        PARSER_SC_EXPR_UDP,
        PARSER_SC_EXPR_UDPLITE,
 
+       PARSER_SC_STMT_DUP,
+       PARSER_SC_STMT_FWD,
        PARSER_SC_STMT_LOG,
        PARSER_SC_STMT_NAT,
        PARSER_SC_STMT_REJECT,
        PARSER_SC_STMT_SYNPROXY,
+       PARSER_SC_STMT_TPROXY,
 };
 
 struct mnl_socket;
index 428df69055eaa28c2310f7f8d03c1a81876367dc..ca5c488cd5ffecef2248671b1f0a8a365d05f90f 100644 (file)
@@ -937,12 +937,14 @@ close_scope_ct            : { scanner_pop_start_cond(nft->scanner, PARSER_SC_CT); };
 close_scope_counter    : { scanner_pop_start_cond(nft->scanner, PARSER_SC_COUNTER); };
 close_scope_dccp       : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_DCCP); };
 close_scope_dst                : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_DST); };
+close_scope_dup                : { scanner_pop_start_cond(nft->scanner, PARSER_SC_STMT_DUP); };
 close_scope_esp                : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_ESP); };
 close_scope_eth                : { scanner_pop_start_cond(nft->scanner, PARSER_SC_ETH); };
 close_scope_export     : { scanner_pop_start_cond(nft->scanner, PARSER_SC_CMD_EXPORT); };
 close_scope_fib                : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_FIB); };
 close_scope_flags      : { scanner_pop_start_cond(nft->scanner, PARSER_SC_FLAGS); };
 close_scope_frag       : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_FRAG); };
+close_scope_fwd                : { scanner_pop_start_cond(nft->scanner, PARSER_SC_STMT_FWD); };
 close_scope_hash       : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_HASH); };
 close_scope_hbh                : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_HBH); };
 close_scope_ip         : { scanner_pop_start_cond(nft->scanner, PARSER_SC_IP); };
@@ -971,6 +973,7 @@ close_scope_sctp_chunk      : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_S
 close_scope_secmark    : { scanner_pop_start_cond(nft->scanner, PARSER_SC_SECMARK); };
 close_scope_socket     : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_SOCKET); }
 close_scope_tcp                : { scanner_pop_start_cond(nft->scanner, PARSER_SC_TCP); };
+close_scope_tproxy     : { scanner_pop_start_cond(nft->scanner, PARSER_SC_STMT_TPROXY); };
 close_scope_type       : { scanner_pop_start_cond(nft->scanner, PARSER_SC_TYPE); };
 close_scope_th         : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_TH); };
 close_scope_udp                : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_UDP); };
@@ -2846,13 +2849,13 @@ stmt                    :       verdict_stmt
                        |       log_stmt        close_scope_log
                        |       reject_stmt     close_scope_reject
                        |       nat_stmt        close_scope_nat
-                       |       tproxy_stmt
+                       |       tproxy_stmt     close_scope_tproxy
                        |       queue_stmt
                        |       ct_stmt
                        |       masq_stmt       close_scope_nat
                        |       redir_stmt      close_scope_nat
-                       |       dup_stmt
-                       |       fwd_stmt
+                       |       dup_stmt        close_scope_dup
+                       |       fwd_stmt        close_scope_fwd
                        |       set_stmt
                        |       map_stmt
                        |       synproxy_stmt   close_scope_synproxy
index be01c6f3b3bc6fd2193cc375bf2941fea75205a3..fd1cf059a608ff510f1498cda959c399007ba4ca 100644 (file)
@@ -241,10 +241,13 @@ addrstring        ({macaddr}|{ip4addr}|{ip6addr})
 %s SCANSTATE_EXPR_UDP
 %s SCANSTATE_EXPR_UDPLITE
 
+%s SCANSTATE_STMT_DUP
+%s SCANSTATE_STMT_FWD
 %s SCANSTATE_STMT_LOG
 %s SCANSTATE_STMT_NAT
 %s SCANSTATE_STMT_REJECT
 %s SCANSTATE_STMT_SYNPROXY
+%s SCANSTATE_STMT_TPROXY
 
 %%
 
@@ -328,7 +331,7 @@ addrstring  ({macaddr}|{ip4addr}|{ip6addr})
        "cgroupv2"              { return CGROUPV2; }
        "level"                 { return LEVEL; }
 }
-"tproxy"               { return TPROXY; }
+"tproxy"               { scanner_push_start_cond(yyscanner, SCANSTATE_STMT_TPROXY); return TPROXY; }
 
 "accept"               { return ACCEPT; }
 "drop"                 { return DROP; }
@@ -336,7 +339,7 @@ addrstring  ({macaddr}|{ip4addr}|{ip6addr})
 "jump"                 { return JUMP; }
 "goto"                 { return GOTO; }
 "return"               { return RETURN; }
-"to"                   { return TO; }
+<SCANSTATE_EXPR_QUEUE,SCANSTATE_STMT_DUP,SCANSTATE_STMT_FWD,SCANSTATE_STMT_NAT,SCANSTATE_STMT_TPROXY,SCANSTATE_FLAGS,SCANSTATE_IP,SCANSTATE_IP6>"to"                   { return TO; } /* XXX: SCANSTATE_FLAGS and SCANSTATE_IP here are workarounds */
 
 "inet"                 { return INET; }
 "netdev"               { return NETDEV; }
@@ -759,8 +762,8 @@ addrstring  ({macaddr}|{ip4addr}|{ip6addr})
        "mod"           { return MOD; }
        "offset"        { return OFFSET; }
 }
-"dup"                  { return DUP; }
-"fwd"                  { return FWD; }
+"dup"                  { scanner_push_start_cond(yyscanner, SCANSTATE_STMT_DUP); return DUP; }
+"fwd"                  { scanner_push_start_cond(yyscanner, SCANSTATE_STMT_FWD); return FWD; }
 
 "fib"                  { scanner_push_start_cond(yyscanner, SCANSTATE_EXPR_FIB); return FIB; }