summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Sutter <phil@nwl.cc>2018-09-25 14:24:12 +0200
committerFlorian Westphal <fw@strlen.de>2018-09-26 10:32:07 +0200
commit3ab636b9ffd3f072d84e0f501aa50d1524ae45ea (patch)
tree79df2724443309e9225d4e20781ea081f65391d9
parent57c2b152c5f0866be5bf1acda2f341ba26ba9448 (diff)
parser_bison: Fix for chain prio name 'out'
Since 'out' is defined as a keyword in scanner.l, using it as a chain priority name without quotes is not possible. Fix this by introducing 'extended_prio_name' in bison which may be either a string (as before) or OUT, which is then converted into a string. Fixes: c8a0e8c90e2d1 ("src: Set/print standard chain prios with textual names") Signed-off-by: Phil Sutter <phil@nwl.cc> Signed-off-by: Florian Westphal <fw@strlen.de>
-rw-r--r--src/parser_bison.y15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/parser_bison.y b/src/parser_bison.y
index 1c68b4f4..831090b6 100644
--- a/src/parser_bison.y
+++ b/src/parser_bison.y
@@ -541,6 +541,8 @@ int nft_lex(void *, void *, void *);
%destructor { handle_free(&$$); } set_spec setid_spec set_identifier obj_spec objid_spec obj_identifier
%type <val> family_spec family_spec_explicit chain_policy int_num
%type <prio_spec> extended_prio_spec prio_spec
+%type <string> extended_prio_name
+%destructor { xfree($$); } extended_prio_name
%type <string> dev_spec quota_unit
%destructor { xfree($$); } dev_spec quota_unit
@@ -1861,26 +1863,33 @@ prio_spec : PRIORITY extended_prio_spec
}
;
+extended_prio_name : OUT
+ {
+ $$ = strdup("out");
+ }
+ | STRING
+ ;
+
extended_prio_spec : int_num
{
struct prio_spec spec = {0};
spec.num = $1;
$$ = spec;
}
- | STRING
+ | extended_prio_name
{
struct prio_spec spec = {0};
spec.str = $1;
$$ = spec;
}
- | STRING PLUS NUM
+ | extended_prio_name PLUS NUM
{
struct prio_spec spec = {0};
spec.num = $3;
spec.str = $1;
$$ = spec;
}
- | STRING DASH NUM
+ | extended_prio_name DASH NUM
{
struct prio_spec spec = {0};
spec.num = -$3;