* [PATCH nft] parser: compact list of rhs keyword expressions
@ 2016-07-27 16:18 Florian Westphal
2016-08-01 12:57 ` Pablo Neira Ayuso
0 siblings, 1 reply; 2+ messages in thread
From: Florian Westphal @ 2016-07-27 16:18 UTC (permalink / raw)
To: netfilter-devel; +Cc: Florian Westphal
Condenses the copy/pastry via a define, will make it less of a hassle
to extend this list later if needed.
Based on earlier patch from Pablo.
Suggested-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Florian Westphal <fw@strlen.de>
---
src/parser_bison.y | 65 +++++++++++++-----------------------------------------
1 file changed, 15 insertions(+), 50 deletions(-)
diff --git a/src/parser_bison.y b/src/parser_bison.y
index 119fd09..31257fd 100644
--- a/src/parser_bison.y
+++ b/src/parser_bison.y
@@ -96,6 +96,8 @@ static void location_update(struct location *loc, struct location *rhs, int n)
#define YYLLOC_DEFAULT(Current, Rhs, N) location_update(&Current, Rhs, N)
+#define symbol_value(loc, str) \
+ symbol_expr_alloc(loc, SYMBOL_VALUE, current_scope(state), str)
%}
/* Declaration section */
@@ -529,8 +531,8 @@ static void location_update(struct location *loc, struct location *rhs, int n)
%type <expr> flow_key_expr flow_key_expr_alloc
%destructor { expr_free($$); } flow_key_expr flow_key_expr_alloc
-%type <expr> expr initializer_expr
-%destructor { expr_free($$); } expr initializer_expr
+%type <expr> expr initializer_expr keyword_expr
+%destructor { expr_free($$); } expr initializer_expr keyword_expr
%type <expr> rhs_expr concat_rhs_expr basic_rhs_expr
%destructor { expr_free($$); } rhs_expr concat_rhs_expr basic_rhs_expr
@@ -2166,38 +2168,19 @@ concat_rhs_expr : basic_rhs_expr
}
;
+keyword_expr : ETHER { $$ = symbol_value(&@$, "ether"); }
+ | IP { $$ = symbol_value(&@$, "ip"); }
+ | IP6 { $$ = symbol_value(&@$, "ip6"); }
+ | VLAN { $$ = symbol_value(&@$, "vlan"); }
+ | ARP { $$ = symbol_value(&@$, "arp"); }
+ | DNAT { $$ = symbol_value(&@$, "dnat"); }
+ | SNAT { $$ = symbol_value(&@$, "snat"); }
+ | ECN { $$ = symbol_value(&@$, "ecn"); }
+ ;
+
primary_rhs_expr : symbol_expr { $$ = $1; }
| integer_expr { $$ = $1; }
- | ETHER
- {
- $$ = symbol_expr_alloc(&@$, SYMBOL_VALUE,
- current_scope(state),
- "ether");
- }
- | IP
- {
- $$ = symbol_expr_alloc(&@$, SYMBOL_VALUE,
- current_scope(state),
- "ip");
- }
- | IP6
- {
- $$ = symbol_expr_alloc(&@$, SYMBOL_VALUE,
- current_scope(state),
- "ip6");
- }
- | VLAN
- {
- $$ = symbol_expr_alloc(&@$, SYMBOL_VALUE,
- current_scope(state),
- "vlan");
- }
- | ARP
- {
- $$ = symbol_expr_alloc(&@$, SYMBOL_VALUE,
- current_scope(state),
- "arp");
- }
+ | keyword_expr { $$ = $1; }
| TCP
{
uint8_t data = IPPROTO_TCP;
@@ -2275,24 +2258,6 @@ primary_rhs_expr : symbol_expr { $$ = $1; }
BYTEORDER_HOST_ENDIAN,
sizeof(data) * BITS_PER_BYTE, &data);
}
- | SNAT
- {
- $$ = symbol_expr_alloc(&@$, SYMBOL_VALUE,
- current_scope(state),
- "snat");
- }
- | DNAT
- {
- $$ = symbol_expr_alloc(&@$, SYMBOL_VALUE,
- current_scope(state),
- "dnat");
- }
- | ECN
- {
- $$ = symbol_expr_alloc(&@$, SYMBOL_VALUE,
- current_scope(state),
- "ecn");
- }
;
relational_op : EQ { $$ = OP_EQ; }
--
2.7.3
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH nft] parser: compact list of rhs keyword expressions
2016-07-27 16:18 [PATCH nft] parser: compact list of rhs keyword expressions Florian Westphal
@ 2016-08-01 12:57 ` Pablo Neira Ayuso
0 siblings, 0 replies; 2+ messages in thread
From: Pablo Neira Ayuso @ 2016-08-01 12:57 UTC (permalink / raw)
To: Florian Westphal; +Cc: netfilter-devel
On Wed, Jul 27, 2016 at 06:18:16PM +0200, Florian Westphal wrote:
> Condenses the copy/pastry via a define, will make it less of a hassle
> to extend this list later if needed.
So the main goal of this is to find a solution for meta skuid, ct
label and such that allow any arbitrary string as value.
I continued a patch on top of this to place in the keyword_expr rule
the remaining keywords and return a symbol expression here.
I didn't finish this, but still MAP and SET tokens cannot be used from
there as they are valid to show after the selectors (bison detects
this by complaining on shift/reduce conflicts), so still the user
cannot create a gid whose name is 'map'.
Another possibility to display this values using quotes, so the
scanner always handles them as arbitrary values. So the syntax looks
like:
meta skuid "daemon"
or
ct label "http"
>From a user side, it would be also visible that these are an arbitrary
user-defined string.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-08-01 12:57 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-27 16:18 [PATCH nft] parser: compact list of rhs keyword expressions Florian Westphal
2016-08-01 12:57 ` Pablo Neira Ayuso
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.