]> git.ipfire.org Git - thirdparty/libnftnl.git/commitdiff
object: define nftnl_obj_unset()
authorPablo Neira Ayuso <pablo@netfilter.org>
Tue, 2 Jan 2024 13:22:50 +0000 (14:22 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 8 Jan 2024 16:22:27 +0000 (17:22 +0100)
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>
src/object.c

index 9e768610cddb20497de452c436eb2ed0e3e6c4e0..0814be744448bc894e319ad93d8c74d85a087965 100644 (file)
@@ -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),