]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
meta: don't require "meta" keyword for a subset of meta expressions
authorPatrick McHardy <kaber@trash.net>
Wed, 15 Jan 2014 07:35:20 +0000 (07:35 +0000)
committerPatrick McHardy <kaber@trash.net>
Wed, 15 Jan 2014 11:52:50 +0000 (11:52 +0000)
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>
Conflicts:
src/parser.y

src/meta.c
src/parser.y

index 3d84c509e5683b40a2db4c5fa0ee8b9778b3daec..063e641eed4d0c39069fd526a186c2c146798210 100644 (file)
@@ -331,7 +331,18 @@ static const struct meta_template meta_templates[] = {
 
 static void meta_expr_print(const struct expr *expr)
 {
-       printf("meta %s", meta_templates[expr->meta.key].token);
+       switch (expr->meta.key) {
+       case NFT_META_LEN:
+       case NFT_META_NFPROTO:
+       case NFT_META_L4PROTO:
+       case NFT_META_PROTOCOL:
+       case NFT_META_PRIORITY:
+               printf("meta %s", meta_templates[expr->meta.key].token);
+               break;
+       default:
+               printf("%s", meta_templates[expr->meta.key].token);
+               break;
+       }
 }
 
 static void meta_expr_clone(struct expr *new, const struct expr *expr)
index 86dfe3e81f8f95bcdf9f4e58b9bba39433415d66..038282ece1265d702d29340a8f0797df37892cc8 100644 (file)
@@ -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