From: Patrick McHardy <kaber@trash.net>
To: pablo@netfilter.org
Cc: netfilter-devel@vger.kernel.org
Subject: [PATCH nftables] make set initializer parsable
Date: Thu, 16 Jan 2014 19:39:52 +0000 [thread overview]
Message-ID: <20140116193951.GA19036@macbook.localnet> (raw)
In-Reply-To: <20140116192249.GA18252@macbook.localnet>
commit 92dfa9b19853c367efbb083d5ad1b7cb56ce3d8a
Author: Patrick McHardy <kaber@trash.net>
Date: Thu Jan 16 19:37:53 2014 +0000
set: make set initializer parsable
If a set contains elements, the output is not parsable since the
elements = { ... } is not understood by the parser. Fix this and
also add support for creating constant sets (which only makes sense
when using an initializer).
Signed-off-by: Patrick McHardy <kaber@trash.net>
diff --git a/src/parser.y b/src/parser.y
index eab973c..34d14ec 100644
--- a/src/parser.y
+++ b/src/parser.y
@@ -183,7 +183,9 @@ static void location_update(struct location *loc, struct location *rhs, int n)
%token RETURN "return"
%token QUEUE "queue"
+%token CONSTANT "constant"
%token INTERVAL "interval"
+%token ELEMENTS "elements"
%token <val> NUM "number"
%token <string> STRING "string"
@@ -747,6 +749,11 @@ set_block : /* empty */ { $$ = $<set>-1; }
$1->flags = $3;
$$ = $1;
}
+ | set_block ELEMENTS '=' set_expr
+ {
+ $1->init = $4;
+ $$ = $1;
+ }
;
set_flag_list : set_flag_list COMMA set_flag
@@ -756,7 +763,8 @@ set_flag_list : set_flag_list COMMA set_flag
| set_flag
;
-set_flag : INTERVAL { $$ = SET_F_INTERVAL; }
+set_flag : CONSTANT { $$ = SET_F_CONSTANT; }
+ | INTERVAL { $$ = SET_F_INTERVAL; }
;
map_block_alloc : /* empty */
@@ -794,6 +802,11 @@ map_block : /* empty */ { $$ = $<set>-1; }
$1->flags = $3;
$$ = $1;
}
+ | map_block ELEMENTS '=' set_expr
+ {
+ $1->init = $4;
+ $$ = $1;
+ }
;
hook_spec : TYPE STRING HOOK STRING PRIORITY NUM
diff --git a/src/rule.c b/src/rule.c
index f1fe355..acdddcb 100644
--- a/src/rule.c
+++ b/src/rule.c
@@ -100,8 +100,12 @@ void set_print(const struct set *set)
printf(" => %s", set->datatype->name);
printf("\n");
- if (set->flags & (SET_F_INTERVAL)) {
+ if (set->flags & (SET_F_CONSTANT | SET_F_INTERVAL)) {
printf("\t\tflags ");
+ if (set->flags & SET_F_CONSTANT) {
+ printf("%sconstant", delim);
+ delim = ",";
+ }
if (set->flags & SET_F_INTERVAL) {
printf("%sinterval", delim);
delim = ",";
diff --git a/src/scanner.l b/src/scanner.l
index f22fbe8..721b551 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -257,7 +257,9 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr})
"position" { return POSITION; }
+"constant" { return CONSTANT; }
"interval" { return INTERVAL; }
+"elements" { return ELEMENTS; }
"counter" { return COUNTER; }
"packets" { return PACKETS; }
prev parent reply other threads:[~2014-01-16 19:39 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-16 19:22 [PATCH nftables] make set flags output parsable Patrick McHardy
2014-01-16 19:39 ` Patrick McHardy [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140116193951.GA19036@macbook.localnet \
--to=kaber@trash.net \
--cc=netfilter-devel@vger.kernel.org \
--cc=pablo@netfilter.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.