diff options
author | Phil Sutter <phil@nwl.cc> | 2021-05-04 13:06:32 +0200 |
---|---|---|
committer | Phil Sutter <phil@nwl.cc> | 2021-05-19 11:51:18 +0200 |
commit | 0925d7e214825628e7db4a86d5ebbad578ab0777 (patch) | |
tree | f143cff6bccacd056b270b6c7c621691a0bd860c | |
parent | ed4882794e0f9153423dd933da8ec15bba734933 (diff) |
scanner: sctp: Move to own scope
This isolates only "vtag" token for now.
Signed-off-by: Phil Sutter <phil@nwl.cc>
Reviewed-by: Florian Westphal <fw@strlen.de>
-rw-r--r-- | include/parser.h | 1 | ||||
-rw-r--r-- | src/parser_bison.y | 5 | ||||
-rw-r--r-- | src/scanner.l | 8 |
3 files changed, 10 insertions, 4 deletions
diff --git a/include/parser.h b/include/parser.h index d890ab22..e3f48078 100644 --- a/include/parser.h +++ b/include/parser.h @@ -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, diff --git a/src/parser_bison.y b/src/parser_bison.y index cdb04fa8..cc440c69 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -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); } diff --git a/src/scanner.l b/src/scanner.l index 72469b4e..d568847d 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -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; } |