summaryrefslogtreecommitdiffstats
path: root/src/parser.y
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2014-01-15 07:35:20 +0000
committerPatrick McHardy <kaber@trash.net>2014-01-15 11:11:14 +0000
commita4da57bde3330aa2d84815e16d8cf238cebf8d70 (patch)
tree26396c1eb62d691bebea29dfc5a8353a75524760 /src/parser.y
parente71137847f6f1220abfb418590b2a8b1847fc4c6 (diff)
meta: don't require "meta" keyword for a subset of meta expressions
Don't require the meta keyword for mark, iif, oif, iifname, oifname, skuid, skgid, nftrace, rtclassid and secmark. The protocol and length types still need the meta keyword to avoid grammar conflicts. Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'src/parser.y')
-rw-r--r--src/parser.y20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/parser.y b/src/parser.y
index 2e5f6c12..632970b2 100644
--- a/src/parser.y
+++ b/src/parser.y
@@ -463,7 +463,7 @@ static void location_update(struct location *loc, struct location *rhs, int n)
%type <expr> meta_expr
%destructor { expr_free($$); } meta_expr
-%type <val> meta_key
+%type <val> meta_key meta_key_qualified meta_key_unqualified
%type <expr> ct_expr
%destructor { expr_free($$); } ct_expr
@@ -1374,14 +1374,24 @@ meta_expr : META meta_key
{
$$ = meta_expr_alloc(&@$, $2);
}
+ | meta_key_unqualified
+ {
+ $$ = meta_expr_alloc(&@$, $1);
+ }
+ ;
+
+meta_key : meta_key_qualified
+ | meta_key_unqualified
;
-meta_key : LENGTH { $$ = NFT_META_LEN; }
+meta_key_qualified : LENGTH { $$ = NFT_META_LEN; }
| NFPROTO { $$ = NFT_META_NFPROTO; }
| L4PROTO { $$ = NFT_META_L4PROTO; }
| PROTOCOL { $$ = NFT_META_PROTOCOL; }
| PRIORITY { $$ = NFT_META_PRIORITY; }
- | MARK { $$ = NFT_META_MARK; }
+ ;
+
+meta_key_unqualified : MARK { $$ = NFT_META_MARK; }
| IIF { $$ = NFT_META_IIF; }
| IIFNAME { $$ = NFT_META_IIFNAME; }
| IIFTYPE { $$ = NFT_META_IIFTYPE; }
@@ -1398,6 +1408,10 @@ meta_stmt : META meta_key SET expr
{
$$ = meta_stmt_alloc(&@$, $2, $4);
}
+ | meta_key_unqualified SET expr
+ {
+ $$ = meta_stmt_alloc(&@$, $1, $3);
+ }
;
ct_expr : CT ct_key