]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
scanner: rt: move to own scope
authorFlorian Westphal <fw@strlen.de>
Mon, 8 Mar 2021 17:18:36 +0000 (18:18 +0100)
committerFlorian Westphal <fw@strlen.de>
Thu, 11 Mar 2021 12:43:33 +0000 (13:43 +0100)
classid and nexthop can be moved out of INIT scope.
Rest are still needed because tehy are used by other expressions as
well.

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

index 001698db259ba2d6028b8f3166854376a4a91bd2..2cdccaf5fb3d9afaa92351753c4ccce25000f11b 100644 (file)
@@ -32,6 +32,7 @@ enum startcond_type {
        PARSER_SC_EXPR_IPSEC,
        PARSER_SC_EXPR_NUMGEN,
        PARSER_SC_EXPR_QUEUE,
+       PARSER_SC_EXPR_RT,
 };
 
 struct mnl_socket;
index 83d78a23b2ac74f08ca6b27910cb18f3670eea16..0f4d51ad30bc0c3b124b17daa5d2dbd28a5444ed 100644 (file)
@@ -865,6 +865,7 @@ close_scope_hash    : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_HASH);
 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); };
 
 common_block           :       INCLUDE         QUOTED_STRING   stmt_separator
                        {
@@ -4893,11 +4894,11 @@ nf_key_proto            :       IP              { $$ = NFPROTO_IPV4; }
                        |       IP6             { $$ = NFPROTO_IPV6; }
                        ;
 
-rt_expr                        :       RT      rt_key
+rt_expr                        :       RT      rt_key  close_scope_rt
                        {
                                $$ = rt_expr_alloc(&@$, $2, true);
                        }
-                       |       RT      nf_key_proto    rt_key
+                       |       RT      nf_key_proto    rt_key  close_scope_rt
                        {
                                enum nft_rt_keys rtk = $3;
 
@@ -5391,7 +5392,7 @@ hbh_hdr_field             :       NEXTHDR         { $$ = HBHHDR_NEXTHDR; }
                        |       HDRLENGTH       { $$ = HBHHDR_HDRLENGTH; }
                        ;
 
-rt_hdr_expr            :       RT      rt_hdr_field
+rt_hdr_expr            :       RT      rt_hdr_field    close_scope_rt
                        {
                                $$ = exthdr_expr_alloc(&@$, &exthdr_rt, $2);
                        }
index cf3d7d52b4c55f001a7ced4a53e64d73d9fa4a1d..faf180ca4701e51d7cf8ca68b07d40ed80fc199e 100644 (file)
@@ -200,6 +200,7 @@ addrstring  ({macaddr}|{ip4addr}|{ip6addr})
 %s SCANSTATE_EXPR_IPSEC
 %s SCANSTATE_EXPR_NUMGEN
 %s SCANSTATE_EXPR_QUEUE
+%s SCANSTATE_EXPR_RT
 
 %%
 
@@ -494,7 +495,7 @@ addrstring  ({macaddr}|{ip4addr}|{ip6addr})
 "sctp"                 { return SCTP; }
 "vtag"                 { return VTAG; }
 
-"rt"                   { return RT; }
+"rt"                   { scanner_push_start_cond(yyscanner, SCANSTATE_EXPR_RT); return RT; }
 "rt0"                  { return RT0; }
 "rt2"                  { return RT2; }
 "srh"                  { return RT4; }
@@ -536,8 +537,10 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr})
 "oifgroup"             { return OIFGROUP; }
 "cgroup"               { return CGROUP; }
 
-"classid"              { return CLASSID; }
-"nexthop"              { return NEXTHOP; }
+<SCANSTATE_EXPR_RT>{
+       "classid"               { return CLASSID; }
+       "nexthop"               { return NEXTHOP; }
+}
 
 "ct"                   { return CT; }
 "l3proto"              { return L3PROTOCOL; }