]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
kernel-listener: Add helpers to clone/destroy acquire data
authorTobias Brunner <tobias@strongswan.org>
Mon, 24 Mar 2025 14:53:00 +0000 (15:53 +0100)
committerTobias Brunner <tobias@strongswan.org>
Wed, 28 May 2025 08:11:53 +0000 (10:11 +0200)
src/libcharon/Android.mk
src/libcharon/Makefile.am
src/libcharon/kernel/kernel_listener.c [new file with mode: 0644]
src/libcharon/kernel/kernel_listener.h

index 11ea960494b8ff77fcbf0492f0fecb41b60ce47b..c6a794ebc12f0ab6b408f19987de0d73625be3c4 100644 (file)
@@ -50,7 +50,8 @@ encoding/payloads/fragment_payload.c encoding/payloads/fragment_payload.h \
 kernel/kernel_interface.c kernel/kernel_interface.h \
 kernel/kernel_ipsec.c kernel/kernel_ipsec.h \
 kernel/kernel_net.c kernel/kernel_net.h \
-kernel/kernel_listener.h kernel/kernel_handler.c kernel/kernel_handler.h \
+kernel/kernel_listener.c kernel/kernel_listener.h \
+kernel/kernel_handler.c kernel/kernel_handler.h \
 network/receiver.c network/receiver.h network/sender.c network/sender.h \
 network/socket.c network/socket.h \
 network/socket_manager.c network/socket_manager.h \
index f53bb4c47708ed6a848c4e305fd1a2482938209f..86011c5b0d9520cde3aa91c7851170f8efda53d4 100644 (file)
@@ -48,7 +48,8 @@ encoding/payloads/fragment_payload.c encoding/payloads/fragment_payload.h \
 kernel/kernel_interface.c kernel/kernel_interface.h \
 kernel/kernel_ipsec.c kernel/kernel_ipsec.h \
 kernel/kernel_net.c kernel/kernel_net.h \
-kernel/kernel_listener.h kernel/kernel_handler.c kernel/kernel_handler.h \
+kernel/kernel_listener.c kernel/kernel_listener.h \
+kernel/kernel_handler.c kernel/kernel_handler.h \
 network/receiver.c network/receiver.h network/sender.c network/sender.h \
 network/socket.c network/socket.h \
 network/socket_manager.c network/socket_manager.h \
diff --git a/src/libcharon/kernel/kernel_listener.c b/src/libcharon/kernel/kernel_listener.c
new file mode 100644 (file)
index 0000000..6605253
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2025 Tobias Brunner
+ *
+ * Copyright (C) secunet Security Networks AG
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ */
+
+#include "kernel_listener.h"
+
+/*
+ * Described in header
+ */
+kernel_acquire_data_t *kernel_acquire_data_clone(kernel_acquire_data_t *data)
+{
+       kernel_acquire_data_t *clone;
+
+       INIT(clone);
+
+       *clone = *data;
+
+       if (clone->src)
+       {
+               clone->src = clone->src->clone(clone->src);
+       }
+       if (clone->dst)
+       {
+               clone->dst = clone->dst->clone(clone->dst);
+       }
+       if (clone->label)
+       {
+               clone->label = clone->label->clone(clone->label);
+       }
+       return clone;
+}
+
+/*
+ * Described in header
+ */
+void kernel_acquire_data_destroy(kernel_acquire_data_t *data)
+{
+       if (data)
+       {
+               DESTROY_IF(data->src);
+               DESTROY_IF(data->dst);
+               DESTROY_IF(data->label);
+               free(data);
+       }
+}
index a0dcddfc0fd108c3c58793e41d8dad13fbfc1ca2..55f952a1712d118b859bb7ba955a508963dab685 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010-2013 Tobias Brunner
+ * Copyright (C) 2010-2025 Tobias Brunner
  *
  * Copyright (C) secunet Security Networks AG
  *
@@ -119,4 +119,21 @@ struct kernel_listener_t {
        bool (*tun)(kernel_listener_t *this, tun_device_t *tun, bool created);
 };
 
+/**
+ * Clone the given acquire data received from the kernel.
+ *
+ * @param data                         data to clone
+ * @return                                     clone of the original object and all associated data
+ */
+kernel_acquire_data_t *kernel_acquire_data_clone(kernel_acquire_data_t *data);
+
+/**
+ * Destroy the given previously cloned acquire data.
+ *
+ * @note This must not be used on the original data from the kernel interface.
+ *
+ * @param data                         cloned data to destroy
+ */
+void kernel_acquire_data_destroy(kernel_acquire_data_t *data);
+
 #endif /** KERNEL_LISTENER_H_ @}*/