diff options
author | Phil Sutter <phil@nwl.cc> | 2018-09-25 14:24:12 +0200 |
---|---|---|
committer | Florian Westphal <fw@strlen.de> | 2018-09-26 10:32:07 +0200 |
commit | 3ab636b9ffd3f072d84e0f501aa50d1524ae45ea (patch) | |
tree | 79df2724443309e9225d4e20781ea081f65391d9 | |
parent | 57c2b152c5f0866be5bf1acda2f341ba26ba9448 (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.y | 15 |
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; |