All used keywords are shared with others, so no separation for now apart from 'csumcov' which was actually missing from scanner.l. Signed-off-by: Phil Sutter <phil@xxxxxx> --- include/parser.h | 2 ++ src/parser_bison.y | 12 +++++++----- src/scanner.l | 9 +++++++-- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/include/parser.h b/include/parser.h index c16f210121040..e80a7753ea715 100644 --- a/include/parser.h +++ b/include/parser.h @@ -54,6 +54,8 @@ enum startcond_type { PARSER_SC_EXPR_RT, PARSER_SC_EXPR_SCTP_CHUNK, PARSER_SC_EXPR_SOCKET, + PARSER_SC_EXPR_UDP, + PARSER_SC_EXPR_UDPLITE, PARSER_SC_STMT_LOG, PARSER_SC_STMT_SYNPROXY, diff --git a/src/parser_bison.y b/src/parser_bison.y index 7a02eaf88a58f..39789b30f41ab 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -950,6 +950,8 @@ close_scope_sctp_chunk : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_S 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); } close_scope_tcp : { scanner_pop_start_cond(nft->scanner, PARSER_SC_TCP); }; +close_scope_udp : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_UDP); }; +close_scope_udplite : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_UDPLITE); }; close_scope_log : { scanner_pop_start_cond(nft->scanner, PARSER_SC_STMT_LOG); } close_scope_synproxy : { scanner_pop_start_cond(nft->scanner, PARSER_SC_STMT_SYNPROXY); } @@ -4485,7 +4487,7 @@ ct_cmd_type : HELPERS { $$ = CMD_OBJ_CT_HELPERS; } ; ct_l4protoname : TCP close_scope_tcp { $$ = IPPROTO_TCP; } - | UDP { $$ = IPPROTO_UDP; } + | UDP close_scope_udp { $$ = IPPROTO_UDP; } ; ct_helper_config : TYPE QUOTED_STRING PROTOCOL ct_l4protoname stmt_separator @@ -4765,14 +4767,14 @@ primary_rhs_expr : symbol_expr { $$ = $1; } BYTEORDER_HOST_ENDIAN, sizeof(data) * BITS_PER_BYTE, &data); } - | UDP + | UDP close_scope_udp { uint8_t data = IPPROTO_UDP; $$ = constant_expr_alloc(&@$, &inet_protocol_type, BYTEORDER_HOST_ENDIAN, sizeof(data) * BITS_PER_BYTE, &data); } - | UDPLITE + | UDPLITE close_scope_udplite { uint8_t data = IPPROTO_UDPLITE; $$ = constant_expr_alloc(&@$, &inet_protocol_type, @@ -5476,7 +5478,7 @@ comp_hdr_field : NEXTHDR { $$ = COMPHDR_NEXTHDR; } | CPI { $$ = COMPHDR_CPI; } ; -udp_hdr_expr : UDP udp_hdr_field +udp_hdr_expr : UDP udp_hdr_field close_scope_udp { $$ = payload_expr_alloc(&@$, &proto_udp, $2); } @@ -5488,7 +5490,7 @@ udp_hdr_field : SPORT { $$ = UDPHDR_SPORT; } | CHECKSUM { $$ = UDPHDR_CHECKSUM; } ; -udplite_hdr_expr : UDPLITE udplite_hdr_field +udplite_hdr_expr : UDPLITE udplite_hdr_field close_scope_udplite { $$ = payload_expr_alloc(&@$, &proto_udplite, $2); } diff --git a/src/scanner.l b/src/scanner.l index a27df6c7e3915..d6fb91bd102b2 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -220,6 +220,8 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr}) %s SCANSTATE_EXPR_RT %s SCANSTATE_EXPR_SCTP_CHUNK %s SCANSTATE_EXPR_SOCKET +%s SCANSTATE_EXPR_UDP +%s SCANSTATE_EXPR_UDPLITE %s SCANSTATE_STMT_LOG %s SCANSTATE_STMT_SYNPROXY @@ -551,8 +553,11 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr}) } "flags" { return FLAGS; } -"udp" { return UDP; } -"udplite" { return UDPLITE; } +"udp" { scanner_push_start_cond(yyscanner, SCANSTATE_EXPR_UDP); return UDP; } +"udplite" { scanner_push_start_cond(yyscanner, SCANSTATE_EXPR_UDPLITE); return UDPLITE; } +<SCANSTATE_EXPR_UDPLITE>{ + "csumcov" { return CSUMCOV; } +} "sport" { return SPORT; } "dport" { return DPORT; } "port" { return PORT; } -- 2.34.1