]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
scanner: sctp: Move to own scope
authorPhil Sutter <phil@nwl.cc>
Tue, 4 May 2021 11:06:32 +0000 (13:06 +0200)
committerPhil Sutter <phil@nwl.cc>
Wed, 19 May 2021 09:51:18 +0000 (11:51 +0200)
This isolates only "vtag" token for now.

Signed-off-by: Phil Sutter <phil@nwl.cc>
Reviewed-by: Florian Westphal <fw@strlen.de>
include/parser.h
src/parser_bison.y
src/scanner.l

index d890ab223c524127629eec775d356ce63f0d91db..e3f48078385bb0fd6fae1505f2dd93ba207b210a 100644 (file)
@@ -38,6 +38,7 @@ enum startcond_type {
        PARSER_SC_IP6,
        PARSER_SC_LIMIT,
        PARSER_SC_QUOTA,
+       PARSER_SC_SCTP,
        PARSER_SC_SECMARK,
        PARSER_SC_VLAN,
        PARSER_SC_EXPR_FIB,
index cdb04fa8d19b08c9390bb7565a03ef5be639fb13..cc440c69d24eb780ce31adcaf572360eecc2241c 100644 (file)
@@ -880,6 +880,7 @@ close_scope_numgen  : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_NUMGE
 close_scope_quota      : { scanner_pop_start_cond(nft->scanner, PARSER_SC_QUOTA); };
 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_sctp       : { scanner_pop_start_cond(nft->scanner, PARSER_SC_SCTP); };
 close_scope_secmark    : { scanner_pop_start_cond(nft->scanner, PARSER_SC_SECMARK); };
 close_scope_socket     : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_SOCKET); }
 
@@ -4665,7 +4666,7 @@ primary_rhs_expr  :       symbol_expr             { $$ = $1; }
                                                         BYTEORDER_HOST_ENDIAN,
                                                         sizeof(data) * BITS_PER_BYTE, &data);
                        }
-                       |       SCTP
+                       |       SCTP    close_scope_sctp
                        {
                                uint8_t data = IPPROTO_SCTP;
                                $$ = constant_expr_alloc(&@$, &inet_protocol_type,
@@ -5395,7 +5396,7 @@ dccp_hdr_field            :       SPORT           { $$ = DCCPHDR_SPORT; }
                        |       TYPE            { $$ = DCCPHDR_TYPE; }
                        ;
 
-sctp_hdr_expr          :       SCTP    sctp_hdr_field
+sctp_hdr_expr          :       SCTP    sctp_hdr_field  close_scope_sctp
                        {
                                $$ = payload_expr_alloc(&@$, &proto_sctp, $2);
                        }
index 72469b4e07b055dc57cb506535fb0983b491ceb7..d568847dc10b120d94bd03224185bea1e7a4a38c 100644 (file)
@@ -204,6 +204,7 @@ addrstring  ({macaddr}|{ip4addr}|{ip6addr})
 %s SCANSTATE_IP6
 %s SCANSTATE_LIMIT
 %s SCANSTATE_QUOTA
+%s SCANSTATE_SCTP
 %s SCANSTATE_SECMARK
 %s SCANSTATE_VLAN
 %s SCANSTATE_EXPR_FIB
@@ -526,8 +527,11 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr})
 
 "dccp"                 { return DCCP; }
 
-"sctp"                 { return SCTP; }
-"vtag"                 { return VTAG; }
+"sctp"                 { scanner_push_start_cond(yyscanner, SCANSTATE_SCTP); return SCTP; }
+
+<SCANSTATE_SCTP>{
+       "vtag"                  { return VTAG; }
+}
 
 "rt"                   { scanner_push_start_cond(yyscanner, SCANSTATE_EXPR_RT); return RT; }
 "rt0"                  { return RT0; }