From: Tobias Brunner Date: Mon, 24 Mar 2025 14:53:00 +0000 (+0100) Subject: kernel-listener: Add helpers to clone/destroy acquire data X-Git-Tag: 6.0.2dr1~6^2~12 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c563b0d9303301970ab8a9bf89ea4c220f5a6dfb;p=thirdparty%2Fstrongswan.git kernel-listener: Add helpers to clone/destroy acquire data --- diff --git a/src/libcharon/Android.mk b/src/libcharon/Android.mk index 11ea960494..c6a794ebc1 100644 --- a/src/libcharon/Android.mk +++ b/src/libcharon/Android.mk @@ -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 \ diff --git a/src/libcharon/Makefile.am b/src/libcharon/Makefile.am index f53bb4c477..86011c5b0d 100644 --- a/src/libcharon/Makefile.am +++ b/src/libcharon/Makefile.am @@ -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 index 0000000000..66052530ea --- /dev/null +++ b/src/libcharon/kernel/kernel_listener.c @@ -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 . + * + * 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); + } +} diff --git a/src/libcharon/kernel/kernel_listener.h b/src/libcharon/kernel/kernel_listener.h index a0dcddfc0f..55f952a171 100644 --- a/src/libcharon/kernel/kernel_listener.h +++ b/src/libcharon/kernel/kernel_listener.h @@ -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_ @}*/