From 5c40780440c0e8661fc7cfcec72dab48b934631d Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Fri, 20 Mar 2009 08:12:18 +0100 Subject: Add support for scoping and symbol binding As a first step towards stand-alone sets, add support for scoping and binding symbols. This will be used for user-defined constants, as well as declarations of modifiable (stand-alone) sets once the kernel side is ready. Scopes are currently limited to three nesting levels: the global scope, table block scopes and chain block scopes. Signed-off-by: Patrick McHardy --- include/rule.h | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'include/rule.h') diff --git a/include/rule.h b/include/rule.h index 991d1125..4e5da064 100644 --- a/include/rule.h +++ b/include/rule.h @@ -23,6 +23,37 @@ struct handle { extern void handle_merge(struct handle *dst, const struct handle *src); extern void handle_free(struct handle *h); +/** + * struct scope + * + * @parent: pointer to parent scope + * @symbols: symbols bound in the scope + */ +struct scope { + const struct scope *parent; + struct list_head symbols; +}; + +extern struct scope *scope_init(struct scope *scope, const struct scope *parent); + +/** + * struct symbol + * + * @list: scope symbol list node + * @identifier: identifier + * @expr: initializer + */ +struct symbol { + struct list_head list; + const char *identifier; + struct expr *expr; +}; + +extern void symbol_bind(struct scope *scope, const char *identifier, + struct expr *expr); +extern struct symbol *symbol_lookup(const struct scope *scope, + const char *identifier); + /** * struct table - nftables table * @@ -33,6 +64,7 @@ extern void handle_free(struct handle *h); struct table { struct list_head list; struct handle handle; + struct scope scope; struct list_head chains; }; @@ -55,6 +87,7 @@ struct chain { struct handle handle; unsigned int hooknum; unsigned int priority; + struct scope scope; struct list_head rules; }; -- cgit v1.2.3