summaryrefslogtreecommitdiffstats
path: root/src/object.c
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2024-01-02 14:22:50 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2024-01-08 17:22:27 +0100
commit307ed295f487f671f7b17d96f5d08b90ba834b53 (patch)
treed04648ed4c6ca93340a0defdd5951406e6bf3850 /src/object.c
parentbc2afbde9eae491bcef23ef5b24b25c7605ad911 (diff)
object: define nftnl_obj_unset()
For consistency with existing objects, implement this interface. This is already defined in libnftnl.map so the intention was to provide it. Fixes: 5573d0146c1a ("src: support for stateful objects") Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/object.c')
-rw-r--r--src/object.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/object.c b/src/object.c
index 9e76861..0814be7 100644
--- a/src/object.c
+++ b/src/object.c
@@ -69,6 +69,34 @@ bool nftnl_obj_is_set(const struct nftnl_obj *obj, uint16_t attr)
return obj->flags & (1 << attr);
}
+EXPORT_SYMBOL(nftnl_obj_unset);
+void nftnl_obj_unset(struct nftnl_obj *obj, uint16_t attr)
+{
+ if (!(obj->flags & (1 << attr)))
+ return;
+
+ switch (attr) {
+ case NFTNL_OBJ_TABLE:
+ xfree(obj->table);
+ break;
+ case NFTNL_OBJ_NAME:
+ xfree(obj->name);
+ break;
+ case NFTNL_OBJ_USERDATA:
+ xfree(obj->user.data);
+ break;
+ case NFTNL_OBJ_TYPE:
+ case NFTNL_OBJ_FAMILY:
+ case NFTNL_OBJ_USE:
+ case NFTNL_OBJ_HANDLE:
+ break;
+ default:
+ break;
+ }
+
+ obj->flags &= ~(1 << attr);
+}
+
static uint32_t nftnl_obj_validate[NFTNL_OBJ_MAX + 1] = {
[NFTNL_OBJ_FAMILY] = sizeof(uint32_t),
[NFTNL_OBJ_USE] = sizeof(uint32_t),