diff options
Diffstat (limited to 'src/parser.y')
-rw-r--r-- | src/parser.y | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/parser.y b/src/parser.y index 86dfe3e8..038282ec 100644 --- a/src/parser.y +++ b/src/parser.y @@ -450,7 +450,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 @@ -1312,12 +1312,22 @@ 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; } | 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; } @@ -1334,6 +1344,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 |