This series of patches follows a discussion brought here about adding support
for deeper variable scopes especially in the flat notation. These patches add
a new variable scope to each include statement. The new scope is a child of
the parent scope (script in which the include resides). All variables in the
parent are still accessible in the child but the parent cannot access child
variables. This effectively creates a tree hierarchy and with the support of
redefine, one can even mask inherited variables in the child scopes. Sibling
scopes are not accessible from each other.
If one wants to have some global definitions in a separate script and not
pollute the top-level script, one can use a new keyword global in the define
like:
global define global_var=eth0
This puts $global_var to the top-level scope which is accessible from
everywhere and it survives any include. Global re-definitions and undefines
are also supported.
This verion of the patch changes the order of global and define in the syntax
to maintain backwards compatibility with older scripts which may have tried
to define a variable called global.
David Fabian (4):
Added implicit variable scope to each include command to support local
variables
Added support for global variable definitions. Global variables live
only in the top-level scope and can be accessed from anywhere. They
are unloaded at the end of parsing.
Refactoring of indesc hierarchy. Indesc structure is now bound to
scopes. Fixed issues with glob includes incorrectly increase the
inclusion depth value. The entire scope tree gets cleaned up at the
end of parsing now to properly support displaying of error messages.
Added tests for nested file-based scopes
include/nftables.h | 10 +-
include/parser.h | 19 +-
include/rule.h | 20 +-
src/libnftables.c | 2 +
src/parser_bison.y | 399 ++++++++++++++++++++-
src/rule.c | 72 +++-
src/scanner.l | 109 +++---
tests/shell/testcases/include/0016sibling_scopes_0 | 33 ++
.../shell/testcases/include/0017scope_hierarchy_0 | 39 ++
tests/shell/testcases/include/0018global_define_0 | 38 ++
tests/shell/testcases/include/0019global_define_1 | 20 ++
.../include/dumps/0016sibling_scopes_0.nft | 0
.../include/dumps/0017scope_hierarchy_0.nft | 0
.../include/dumps/0018global_define_0.nft | 0
14 files changed, 654 insertions(+), 107 deletions(-)
mode change 100644 => 100755 src/parser_bison.y
mode change 100644 => 100755 src/scanner.l
create mode 100755 tests/shell/testcases/include/0016sibling_scopes_0
create mode 100755 tests/shell/testcases/include/0017scope_hierarchy_0
create mode 100755 tests/shell/testcases/include/0018global_define_0
create mode 100755 tests/shell/testcases/include/0019global_define_1
create mode 100644 tests/shell/testcases/include/dumps/0016sibling_scopes_0.nft
create mode 100644
tests/shell/testcases/include/dumps/0017scope_hierarchy_0.nft
create mode 100644 tests/shell/testcases/include/dumps/0018global_define_0.nft
--
2.13.6
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html