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 \
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 \
--- /dev/null
+/*
+ * 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);
+ }
+}
/*
- * Copyright (C) 2010-2013 Tobias Brunner
+ * Copyright (C) 2010-2025 Tobias Brunner
*
* Copyright (C) secunet Security Networks AG
*
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_ @}*/