diff options
author | Arturo Borrero Gonzalez <arturo.borrero.glez@gmail.com> | 2013-06-07 00:52:17 +0000 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2013-06-07 14:00:20 +0200 |
commit | dde20393f929f22636dcedd82e5a2fe81394139e (patch) | |
tree | ae5f46c3a934bc88d188d1c7d1dd11934709287d /src/rule.c | |
parent | 0be2e081db4b6adf2e7fb16fe528c28c35a1f0c2 (diff) |
src: add nft_*_unset functions
These functions unset the given attribute in each object and
release the data if needed.
Signed-off-by: Arturo Borrero Gonzalez <arturo.borrero.glez@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/rule.c')
-rw-r--r-- | src/rule.c | 25 |
1 files changed, 25 insertions, 0 deletions
@@ -71,6 +71,31 @@ void nft_rule_free(struct nft_rule *r) } EXPORT_SYMBOL(nft_rule_free); +void nft_rule_attr_unset(struct nft_rule *r, uint16_t attr) +{ + switch (attr) { + case NFT_RULE_ATTR_TABLE: + if (r->flags & (1 << NFT_RULE_ATTR_TABLE)) + if (r->table) { + free(r->table); + r->table = NULL; + } + break; + case NFT_RULE_ATTR_CHAIN: + if (r->flags & (1 << NFT_RULE_ATTR_CHAIN)) + if (r->chain) { + free(r->chain); + r->chain = NULL; + } + break; + default: + return; + } + + r->flags &= ~(1 << attr); +} +EXPORT_SYMBOL(nft_rule_attr_unset); + void nft_rule_attr_set(struct nft_rule *r, uint16_t attr, const void *data) { switch(attr) { |