]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
scanner: igmp: Move to own scope
authorPhil Sutter <phil@nwl.cc>
Fri, 23 Jul 2021 11:09:57 +0000 (13:09 +0200)
committerPhil Sutter <phil@nwl.cc>
Tue, 1 Mar 2022 09:54:03 +0000 (10:54 +0100)
At least isolates 'mrt' and 'group' keywords, the latter is shared with
log statement.

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

index ba955c9160581c7f128cff9a085c358f263e0998..16e02a1ffe12931ce48dd37206bb7d8885e5baee 100644 (file)
@@ -35,6 +35,7 @@ enum startcond_type {
        PARSER_SC_COUNTER,
        PARSER_SC_ETH,
        PARSER_SC_ICMP,
+       PARSER_SC_IGMP,
        PARSER_SC_IP,
        PARSER_SC_IP6,
        PARSER_SC_LIMIT,
index 0e1045ed49b4c01ad556749eb054dea3bcc8f0be..fc52747e408dc19d9e8c70a9582937d642e0be07 100644 (file)
@@ -939,6 +939,7 @@ 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_icmp       : { scanner_pop_start_cond(nft->scanner, PARSER_SC_ICMP); };
+close_scope_igmp       : { scanner_pop_start_cond(nft->scanner, PARSER_SC_IGMP); };
 close_scope_ipsec      : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_IPSEC); };
 close_scope_list       : { scanner_pop_start_cond(nft->scanner, PARSER_SC_CMD_LIST); };
 close_scope_limit      : { scanner_pop_start_cond(nft->scanner, PARSER_SC_LIMIT); };
@@ -5399,7 +5400,7 @@ icmp_hdr_field            :       TYPE            { $$ = ICMPHDR_TYPE; }
                        |       MTU             { $$ = ICMPHDR_MTU; }
                        ;
 
-igmp_hdr_expr          :       IGMP    igmp_hdr_field
+igmp_hdr_expr          :       IGMP    igmp_hdr_field  close_scope_igmp
                        {
                                $$ = payload_expr_alloc(&@$, &proto_igmp, $2);
                        }
index e8ec352f88698a55cc5d1c25d3f5d36bc01f54d1..a584b5fba39b4a74acd095c06a739a6190ee0c39 100644 (file)
@@ -201,6 +201,7 @@ addrstring  ({macaddr}|{ip4addr}|{ip6addr})
 %s SCANSTATE_COUNTER
 %s SCANSTATE_ETH
 %s SCANSTATE_ICMP
+%s SCANSTATE_IGMP
 %s SCANSTATE_IP
 %s SCANSTATE_IP6
 %s SCANSTATE_LIMIT
@@ -369,11 +370,11 @@ addrstring        ({macaddr}|{ip4addr}|{ip6addr})
 
 "log"                  { scanner_push_start_cond(yyscanner, SCANSTATE_STMT_LOG); return LOG; }
 "prefix"               { return PREFIX; }
-"group"                        { return GROUP; }
 <SCANSTATE_STMT_LOG>{
        "snaplen"               { return SNAPLEN; }
        "queue-threshold"       { return QUEUE_THRESHOLD; }
        "level"                 { return LEVEL; }
+       "group"                 { return GROUP; }
 }
 
 "queue"                        { scanner_push_start_cond(yyscanner, SCANSTATE_EXPR_QUEUE); return QUEUE;}
@@ -508,8 +509,11 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr})
 }
 "sequence"             { return SEQUENCE; }
 
-"igmp"                 { return IGMP; }
-"mrt"                  { return MRT; }
+"igmp"                 { scanner_push_start_cond(yyscanner, SCANSTATE_IGMP); return IGMP; }
+<SCANSTATE_IGMP>{
+       "mrt"                   { return MRT; }
+       "group"                 { return GROUP; }
+}
 
 "ip6"                  { scanner_push_start_cond(yyscanner, SCANSTATE_IP6); return IP6; }
 "priority"             { return PRIORITY; }