]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
parser_bison: Introduce tokens for osf ttl values
authorPhil Sutter <phil@nwl.cc>
Fri, 21 Nov 2025 16:14:26 +0000 (17:14 +0100)
committerPhil Sutter <phil@nwl.cc>
Tue, 20 Jan 2026 15:03:00 +0000 (16:03 +0100)
Eliminate the open-coded string parsing and error handling.

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

index 405fe8f2690ca516e3d4439d72a88f4039c31626..ba485a8c25b50766bd150af9119421bc25a41463 100644 (file)
@@ -719,6 +719,9 @@ int nft_lex(void *, void *, void *);
 %token NAT             "nat"
 %token ROUTE           "route"
 
+%token LOOSE           "loose"
+%token SKIP            "skip"
+
 %type <limit_rate>             limit_rate_pkts
 %type <limit_rate>             limit_rate_bytes
 
@@ -4485,24 +4488,9 @@ osf_expr         :       OSF     osf_ttl         HDRVERSION      close_scope_osf
                        }
                        ;
 
-osf_ttl                        :       /* empty */
-                       {
-                               $$ = NF_OSF_TTL_TRUE;
-                       }
-                       |       TTL     STRING
-                       {
-                               if (!strcmp($2, "loose"))
-                                       $$ = NF_OSF_TTL_LESS;
-                               else if (!strcmp($2, "skip"))
-                                       $$ = NF_OSF_TTL_NOCHECK;
-                               else {
-                                       erec_queue(error(&@2, "invalid ttl option"),
-                                                  state->msgs);
-                                       free_const($2);
-                                       YYERROR;
-                               }
-                               free_const($2);
-                       }
+osf_ttl                        :       /* empty */     { $$ = NF_OSF_TTL_TRUE; }
+                       |       TTL     LOOSE   { $$ = NF_OSF_TTL_LESS; }
+                       |       TTL     SKIP    { $$ = NF_OSF_TTL_NOCHECK; }
                        ;
 
 shift_expr             :       primary_expr
index b397a147ef9bd3659f05715d408b56afa8299a0a..e0f0aabb683a32b4e2036f4bf0b59071dd5b5239 100644 (file)
@@ -533,6 +533,12 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr})
 <SCANSTATE_EXPR_OSF,SCANSTATE_IP>{
        "ttl"                   { return TTL; }
 }
+
+<SCANSTATE_EXPR_OSF>{
+       "loose"                 { return LOOSE; }
+       "skip"                  { return SKIP; }
+}
+
 <SCANSTATE_CT,SCANSTATE_IP,SCANSTATE_META,SCANSTATE_TYPE,SCANSTATE_GRE>"protocol"              { return PROTOCOL; }
 <SCANSTATE_EXPR_MH,SCANSTATE_EXPR_UDP,SCANSTATE_EXPR_UDPLITE,SCANSTATE_ICMP,SCANSTATE_IGMP,SCANSTATE_IP,SCANSTATE_SCTP,SCANSTATE_TCP>{
        "checksum"              { return CHECKSUM; }