diff options
-rw-r--r-- | src/parser_bison.y | 6 | ||||
-rwxr-xr-x | tests/shell/testcases/sets/elem_opts_compat_0 | 29 |
2 files changed, 35 insertions, 0 deletions
diff --git a/src/parser_bison.y b/src/parser_bison.y index c517dc38..f0652ba6 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -4523,6 +4523,12 @@ meter_key_expr_alloc : concat_expr set_elem_expr : set_elem_expr_alloc | set_elem_expr_alloc set_elem_expr_options + | set_elem_expr_alloc set_elem_expr_options set_elem_stmt_list + { + $$ = $1; + list_splice_tail($3, &$$->stmt_list); + xfree($3); + } ; set_elem_key_expr : set_lhs_expr { $$ = $1; } diff --git a/tests/shell/testcases/sets/elem_opts_compat_0 b/tests/shell/testcases/sets/elem_opts_compat_0 new file mode 100755 index 00000000..e0129536 --- /dev/null +++ b/tests/shell/testcases/sets/elem_opts_compat_0 @@ -0,0 +1,29 @@ +#!/bin/sh + +# ordering of element options and expressions has changed, make sure parser +# accepts both ways + +set -e + +$NFT -f - <<EOF +table t { + set s { + type inet_service + counter; + timeout 30s; + } +} +EOF + +check() { + out=$($NFT list ruleset) + secs=$(sed -n 's/.*expires \([0-9]\+\)s.*/\1/p' <<< "$out") + [[ $secs -lt 11 ]] + grep -q 'counter packets 10 bytes 20' <<< "$out" +} + +$NFT add element t s '{ 23 counter packets 10 bytes 20 expires 10s }' +check +$NFT flush set t s +$NFT add element t s '{ 42 expires 10s counter packets 10 bytes 20 }' +check |