]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
scanner: ip6: move to own scope
authorFlorian Westphal <fw@strlen.de>
Thu, 11 Mar 2021 13:23:04 +0000 (14:23 +0100)
committerFlorian Westphal <fw@strlen.de>
Tue, 16 Mar 2021 22:59:39 +0000 (23:59 +0100)
move flowlabel and hoplimit.

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

index a778cb59c2c97d9348d1e27ae44424cb27e87480..586a984875c4a4656f931a550a88abf9fc3707d9 100644 (file)
@@ -30,6 +30,7 @@ enum startcond_type {
        PARSER_SC_BEGIN,
        PARSER_SC_CT,
        PARSER_SC_IP,
+       PARSER_SC_IP6,
        PARSER_SC_EXPR_HASH,
        PARSER_SC_EXPR_IPSEC,
        PARSER_SC_EXPR_NUMGEN,
index ba15366cb3dba85ba5efdf08302939008de315a1..9ef2602e22bdb65034a8927aa43ffd4562ddb2aa 100644 (file)
@@ -864,6 +864,7 @@ opt_newline         :       NEWLINE
 close_scope_ct         : { scanner_pop_start_cond(nft->scanner, PARSER_SC_CT); };
 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_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); };
@@ -2426,11 +2427,11 @@ family_spec             :       /* empty */             { $$ = NFPROTO_IPV4; }
                        ;
 
 family_spec_explicit   :       IP      close_scope_ip  { $$ = NFPROTO_IPV4; }
-                       |       IP6             { $$ = NFPROTO_IPV6; }
-                       |       INET            { $$ = NFPROTO_INET; }
-                       |       ARP             { $$ = NFPROTO_ARP; }
-                       |       BRIDGE          { $$ = NFPROTO_BRIDGE; }
-                       |       NETDEV          { $$ = NFPROTO_NETDEV; }
+                       |       IP6     close_scope_ip6 { $$ = NFPROTO_IPV6; }
+                       |       INET                    { $$ = NFPROTO_INET; }
+                       |       ARP                     { $$ = NFPROTO_ARP; }
+                       |       BRIDGE                  { $$ = NFPROTO_BRIDGE; }
+                       |       NETDEV                  { $$ = NFPROTO_NETDEV; }
                        ;
 
 table_spec             :       family_spec     identifier
@@ -4539,7 +4540,7 @@ boolean_expr              :       boolean_keys
 
 keyword_expr           :       ETHER                   { $$ = symbol_value(&@$, "ether"); }
                        |       IP      close_scope_ip  { $$ = symbol_value(&@$, "ip"); }
-                       |       IP6                     { $$ = symbol_value(&@$, "ip6"); }
+                       |       IP6     close_scope_ip6 { $$ = symbol_value(&@$, "ip6"); }
                        |       VLAN                    { $$ = symbol_value(&@$, "vlan"); }
                        |       ARP                     { $$ = symbol_value(&@$, "arp"); }
                        |       DNAT                    { $$ = symbol_value(&@$, "dnat"); }
@@ -4894,7 +4895,7 @@ hash_expr         :       JHASH           expr    MOD     NUM     SEED    NUM     offset_opt      close_scope_hash
                        ;
 
 nf_key_proto           :       IP      close_scope_ip { $$ = NFPROTO_IPV4; }
-                       |       IP6             { $$ = NFPROTO_IPV6; }
+                       |       IP6     close_scope_ip6 { $$ = NFPROTO_IPV6; }
                        ;
 
 rt_expr                        :       RT      rt_key  close_scope_rt
@@ -4975,8 +4976,8 @@ ct_key_dir                :       SADDR           { $$ = NFT_CT_SRC; }
 
 ct_key_proto_field     :       IP      SADDR   close_scope_ip { $$ = NFT_CT_SRC_IP; }
                        |       IP      DADDR   close_scope_ip { $$ = NFT_CT_DST_IP; }
-                       |       IP6     SADDR   { $$ = NFT_CT_SRC_IP6; }
-                       |       IP6     DADDR   { $$ = NFT_CT_DST_IP6; }
+                       |       IP6     SADDR   close_scope_ip6 { $$ = NFT_CT_SRC_IP6; }
+                       |       IP6     DADDR   close_scope_ip6 { $$ = NFT_CT_DST_IP6; }
                        ;
 
 ct_key_dir_optional    :       BYTES           { $$ = NFT_CT_BYTES; }
@@ -5187,7 +5188,7 @@ igmp_hdr_field            :       TYPE            { $$ = IGMPHDR_TYPE; }
                        |       GROUP           { $$ = IGMPHDR_GROUP; }
                        ;
 
-ip6_hdr_expr           :       IP6     ip6_hdr_field
+ip6_hdr_expr           :       IP6     ip6_hdr_field   close_scope_ip6
                        {
                                $$ = payload_expr_alloc(&@$, &proto_ip6, $2);
                        }
index 262945064e8074dc3322df907c429e3761e2aad2..15d1beca601d6902485d32b0ea5fa58ea3b41b0a 100644 (file)
@@ -198,6 +198,7 @@ addrstring  ({macaddr}|{ip4addr}|{ip6addr})
 %option stack
 %s SCANSTATE_CT
 %s SCANSTATE_IP
+%s SCANSTATE_IP6
 %s SCANSTATE_EXPR_HASH
 %s SCANSTATE_EXPR_IPSEC
 %s SCANSTATE_EXPR_NUMGEN
@@ -462,11 +463,13 @@ addrstring        ({macaddr}|{ip4addr}|{ip6addr})
 "igmp"                 { return IGMP; }
 "mrt"                  { return MRT; }
 
-"ip6"                  { return IP6; }
+"ip6"                  { scanner_push_start_cond(yyscanner, SCANSTATE_IP6); return IP6; }
 "priority"             { return PRIORITY; }
-"flowlabel"            { return FLOWLABEL; }
+<SCANSTATE_IP6>{
+       "flowlabel"             { return FLOWLABEL; }
+       "hoplimit"              { return HOPLIMIT; }
+}
 "nexthdr"              { return NEXTHDR; }
-"hoplimit"             { return HOPLIMIT; }
 
 "icmpv6"               { return ICMP6; }
 "param-problem"                { return PPTR; }