]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
scanner: socket: move to own scope
authorFlorian Westphal <fw@strlen.de>
Mon, 8 Mar 2021 17:18:37 +0000 (18:18 +0100)
committerFlorian Westphal <fw@strlen.de>
Thu, 11 Mar 2021 12:43:34 +0000 (13:43 +0100)
Signed-off-by: Florian Westphal <fw@strlen.de>
include/parser.h
src/parser_bison.y
src/scanner.l

index 2cdccaf5fb3d9afaa92351753c4ccce25000f11b..fd5006d35c0d099c9cef07354cfad564f62baa2e 100644 (file)
@@ -33,6 +33,7 @@ enum startcond_type {
        PARSER_SC_EXPR_NUMGEN,
        PARSER_SC_EXPR_QUEUE,
        PARSER_SC_EXPR_RT,
+       PARSER_SC_EXPR_SOCKET,
 };
 
 struct mnl_socket;
index 0f4d51ad30bc0c3b124b17daa5d2dbd28a5444ed..2a8ac215a284facec39c11ff13c19a6fce199559 100644 (file)
@@ -866,6 +866,7 @@ close_scope_ipsec   : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_IPSEC)
 close_scope_numgen     : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_NUMGEN); };
 close_scope_queue      : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_QUEUE); };
 close_scope_rt         : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_RT); };
+close_scope_socket     : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_SOCKET); }
 
 common_block           :       INCLUDE         QUOTED_STRING   stmt_separator
                        {
@@ -4798,7 +4799,7 @@ meta_stmt         :       META    meta_key        SET     stmt_expr
                        }
                        ;
 
-socket_expr            :       SOCKET  socket_key
+socket_expr            :       SOCKET  socket_key      close_scope_socket
                        {
                                $$ = socket_expr_alloc(&@$, $2);
                        }
index faf180ca4701e51d7cf8ca68b07d40ed80fc199e..6a909e928bf463046e0b92420ecca5afdc16d39f 100644 (file)
@@ -201,6 +201,7 @@ addrstring  ({macaddr}|{ip4addr}|{ip6addr})
 %s SCANSTATE_EXPR_NUMGEN
 %s SCANSTATE_EXPR_QUEUE
 %s SCANSTATE_EXPR_RT
+%s SCANSTATE_EXPR_SOCKET
 
 %%
 
@@ -274,10 +275,11 @@ addrstring        ({macaddr}|{ip4addr}|{ip6addr})
 "ruleset"              { return RULESET; }
 "trace"                        { return TRACE; }
 
-"socket"               { return SOCKET; }
-"transparent"          { return TRANSPARENT; }
-"wildcard"             { return WILDCARD; }
-
+"socket"               { scanner_push_start_cond(yyscanner, SCANSTATE_EXPR_SOCKET); return SOCKET; }
+<SCANSTATE_EXPR_SOCKET>{
+       "transparent"           { return TRANSPARENT; }
+       "wildcard"              { return WILDCARD; }
+}
 "tproxy"               { return TPROXY; }
 
 "accept"               { return ACCEPT; }