diff options
author | Phil Sutter <phil@nwl.cc> | 2021-07-23 17:11:47 +0200 |
---|---|---|
committer | Phil Sutter <phil@nwl.cc> | 2022-03-01 10:54:03 +0100 |
commit | 4e215fdf569bbcb0db71365b204f7ae7e63afb0d (patch) | |
tree | dd14657a8d01e15f8e547290e36bc68c218f7589 | |
parent | 5166b29816c4681a9ff0ee9ecc10304da786cfbe (diff) |
scanner: osf: Move to own scope
It shares two keywords with PARSER_SC_IP.
Signed-off-by: Phil Sutter <phil@nwl.cc>
-rw-r--r-- | include/parser.h | 1 | ||||
-rw-r--r-- | src/parser_bison.y | 5 | ||||
-rw-r--r-- | src/scanner.l | 13 |
3 files changed, 13 insertions, 6 deletions
diff --git a/include/parser.h b/include/parser.h index ab372ad0..82402dbc 100644 --- a/include/parser.h +++ b/include/parser.h @@ -51,6 +51,7 @@ enum startcond_type { PARSER_SC_EXPR_HASH, PARSER_SC_EXPR_IPSEC, PARSER_SC_EXPR_NUMGEN, + PARSER_SC_EXPR_OSF, PARSER_SC_EXPR_QUEUE, PARSER_SC_EXPR_RT, PARSER_SC_EXPR_SCTP_CHUNK, diff --git a/src/parser_bison.y b/src/parser_bison.y index d7b2d250..e98553bb 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -946,6 +946,7 @@ 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); }; close_scope_numgen : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_NUMGEN); }; +close_scope_osf : { scanner_pop_start_cond(nft->scanner, PARSER_SC_EXPR_OSF); }; 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); }; @@ -4108,11 +4109,11 @@ fib_tuple : fib_flag DOT fib_tuple | fib_flag ; -osf_expr : OSF osf_ttl HDRVERSION +osf_expr : OSF osf_ttl HDRVERSION close_scope_osf { $$ = osf_expr_alloc(&@$, $2, NFT_OSF_F_VERSION); } - | OSF osf_ttl NAME + | OSF osf_ttl NAME close_scope_osf { $$ = osf_expr_alloc(&@$, $2, 0); } diff --git a/src/scanner.l b/src/scanner.l index ed26811c..65640ebb 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -217,6 +217,7 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr}) %s SCANSTATE_EXPR_HASH %s SCANSTATE_EXPR_IPSEC %s SCANSTATE_EXPR_NUMGEN +%s SCANSTATE_EXPR_OSF %s SCANSTATE_EXPR_QUEUE %s SCANSTATE_EXPR_RT %s SCANSTATE_EXPR_SCTP_CHUNK @@ -367,7 +368,7 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr}) } "counter" { scanner_push_start_cond(yyscanner, SCANSTATE_COUNTER); return COUNTER; } -"name" { return NAME; } +<SCANSTATE_COUNTER,SCANSTATE_LIMIT,SCANSTATE_QUOTA,SCANSTATE_STMT_SYNPROXY,SCANSTATE_EXPR_OSF>"name" { return NAME; } <SCANSTATE_COUNTER,SCANSTATE_CT,SCANSTATE_LIMIT>"packets" { return PACKETS; } <SCANSTATE_COUNTER,SCANSTATE_CT,SCANSTATE_LIMIT,SCANSTATE_QUOTA>"bytes" { return BYTES; } @@ -456,13 +457,17 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr}) } "ip" { scanner_push_start_cond(yyscanner, SCANSTATE_IP); return IP; } -"version" { return HDRVERSION; } +<SCANSTATE_IP,SCANSTATE_IP6,SCANSTATE_EXPR_OSF>{ + "version" { return HDRVERSION; } +} "hdrlength" { return HDRLENGTH; } "dscp" { return DSCP; } "ecn" { return ECN; } "length" { return LENGTH; } "frag-off" { return FRAG_OFF; } -"ttl" { return TTL; } +<SCANSTATE_EXPR_OSF,SCANSTATE_IP>{ + "ttl" { return TTL; } +} "protocol" { return PROTOCOL; } "checksum" { return CHECKSUM; } @@ -705,7 +710,7 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr}) "fib" { scanner_push_start_cond(yyscanner, SCANSTATE_EXPR_FIB); return FIB; } -"osf" { return OSF; } +"osf" { scanner_push_start_cond(yyscanner, SCANSTATE_EXPR_OSF); return OSF; } "synproxy" { scanner_push_start_cond(yyscanner, SCANSTATE_STMT_SYNPROXY); return SYNPROXY; } <SCANSTATE_STMT_SYNPROXY>{ |