]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
scanner: udp{,lite}: Move to own scope
authorPhil Sutter <phil@nwl.cc>
Fri, 23 Jul 2021 13:05:41 +0000 (15:05 +0200)
committerPhil Sutter <phil@nwl.cc>
Tue, 1 Mar 2022 09:54:03 +0000 (10:54 +0100)
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@nwl.cc>
include/parser.h
src/parser_bison.y
src/scanner.l

index c16f210121040cb7c253730718ceabbe7e82d2ee..e80a7753ea715137d78dff1588c3617c36f013f3 100644 (file)
@@ -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,
index 5689241739cf8d7f1860d738cf4b4d8f80bc0f5f..7ec1c02f9e6af24910baf27de0709d05530e8178 100644 (file)
@@ -953,6 +953,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); }
@@ -4489,7 +4491,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
@@ -4769,14 +4771,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,
@@ -5480,7 +5482,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);
                        }
@@ -5492,7 +5494,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);
                        }
index a27df6c7e3915eb42f72f7b1f28d6618022696fc..d6fb91bd102b2c7004bbfe3c4bd3b4d03545aee5 100644 (file)
@@ -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; }