summaryrefslogtreecommitdiffstats
path: root/src/rule.c
diff options
context:
space:
mode:
authorArturo Borrero Gonzalez <arturo.borrero.glez@gmail.com>2013-06-07 00:52:17 +0000
committerPablo Neira Ayuso <pablo@netfilter.org>2013-06-07 14:00:20 +0200
commitdde20393f929f22636dcedd82e5a2fe81394139e (patch)
treeae5f46c3a934bc88d188d1c7d1dd11934709287d /src/rule.c
parent0be2e081db4b6adf2e7fb16fe528c28c35a1f0c2 (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.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/rule.c b/src/rule.c
index 698bf89..b3e21d8 100644
--- a/src/rule.c
+++ b/src/rule.c
@@ -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) {