]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
scanner: vlan: move to own scope
authorFlorian Westphal <fw@strlen.de>
Thu, 11 Mar 2021 13:23:09 +0000 (14:23 +0100)
committerFlorian Westphal <fw@strlen.de>
Tue, 16 Mar 2021 22:59:43 +0000 (23:59 +0100)
ID needs to remain exposed as its used by ct, icmp, icmp6 and so on.

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

index 38039677cd1dfdd0bb2ce6422b55fa8dfbf43331..889f9418a86474d8b0ff42cfd702692087d97f45 100644 (file)
@@ -33,6 +33,7 @@ enum startcond_type {
        PARSER_SC_ETH,
        PARSER_SC_IP,
        PARSER_SC_IP6,
+       PARSER_SC_VLAN,
        PARSER_SC_EXPR_FIB,
        PARSER_SC_EXPR_HASH,
        PARSER_SC_EXPR_IPSEC,
index a22f61c4c99b5b9628b507f6fb779c7f28205eef..a6ce506bf5b5f744410eea2bf3f7538141dbd918 100644 (file)
@@ -868,6 +868,7 @@ 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); };
+close_scope_vlan       : { scanner_pop_start_cond(nft->scanner, PARSER_SC_VLAN); };
 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); };
@@ -4544,7 +4545,7 @@ boolean_expr              :       boolean_keys
 keyword_expr           :       ETHER   close_scope_eth { $$ = symbol_value(&@$, "ether"); }
                        |       IP      close_scope_ip  { $$ = symbol_value(&@$, "ip"); }
                        |       IP6     close_scope_ip6 { $$ = symbol_value(&@$, "ip6"); }
-                       |       VLAN                    { $$ = symbol_value(&@$, "vlan"); }
+                       |       VLAN    close_scope_vlan { $$ = symbol_value(&@$, "vlan"); }
                        |       ARP     close_scope_arp { $$ = symbol_value(&@$, "arp"); }
                        |       DNAT                    { $$ = symbol_value(&@$, "dnat"); }
                        |       SNAT                    { $$ = symbol_value(&@$, "snat"); }
@@ -5093,7 +5094,7 @@ eth_hdr_field             :       SADDR           { $$ = ETHHDR_SADDR; }
                        |       TYPE            { $$ = ETHHDR_TYPE; }
                        ;
 
-vlan_hdr_expr          :       VLAN    vlan_hdr_field
+vlan_hdr_expr          :       VLAN    vlan_hdr_field  close_scope_vlan
                        {
                                $$ = payload_expr_alloc(&@$, &proto_vlan, $2);
                        }
index 728b2c79b395825e373f2fae38f402f1cab502ef..b664a794184f2d46507a58798e9450d820371a33 100644 (file)
@@ -201,6 +201,7 @@ addrstring  ({macaddr}|{ip4addr}|{ip6addr})
 %s SCANSTATE_ETH
 %s SCANSTATE_IP
 %s SCANSTATE_IP6
+%s SCANSTATE_VLAN
 %s SCANSTATE_EXPR_FIB
 %s SCANSTATE_EXPR_HASH
 %s SCANSTATE_EXPR_IPSEC
@@ -403,10 +404,12 @@ addrstring        ({macaddr}|{ip4addr}|{ip6addr})
 "type"                 { return TYPE; }
 "typeof"               { return TYPEOF; }
 
-"vlan"                 { return VLAN; }
+"vlan"                 { scanner_push_start_cond(yyscanner, SCANSTATE_VLAN); return VLAN; }
 "id"                   { return ID; }
-"cfi"                  { return CFI; }
-"pcp"                  { return PCP; }
+<SCANSTATE_VLAN>{
+       "cfi"           { return CFI; }
+       "pcp"           { return PCP; }
+}
 
 "arp"                  { scanner_push_start_cond(yyscanner, SCANSTATE_ARP); return ARP; }
 <SCANSTATE_ARP>{