kernel-listener: Add helpers to clone/destroy acquire data

This commit is contained in:
Tobias Brunner 2025-03-24 15:53:00 +01:00
parent 6ae29af18b
commit c563b0d930
4 changed files with 79 additions and 3 deletions

View 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 \

View 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 \

View File

@ -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);
}
}

View 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_ @}*/