]> 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:11:14 +0000 (11:11 +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>
src/meta.c
src/parser.y

index 6d4252555954ff3ae4b5f20e397a1adc77ff6b42..098728bbe69de409a5ef2b27341e8853bb52a239 100644 (file)
@@ -335,7 +335,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 2e5f6c12e1861ac753fcaf13d9fbd48ddf03d2ab..632970b27e9492cd4191f0546c414a4cad768340 100644 (file)
@@ -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