kernel-listener: Use a struct to pass data from acquires

This commit is contained in:
Tobias Brunner
2022-04-14 18:42:01 +02:00
parent 9983326b20
commit 3b699c720f
12 changed files with 81 additions and 63 deletions
+4 -5
View File
@@ -53,20 +53,19 @@ static inline protocol_id_t proto_ip2ike(uint8_t protocol)
}
METHOD(kernel_listener_t, acquire, bool,
private_kernel_handler_t *this, uint32_t reqid,
traffic_selector_t *src_ts, traffic_selector_t *dst_ts)
private_kernel_handler_t *this, uint32_t reqid, kernel_acquire_data_t *data)
{
if (src_ts && dst_ts)
if (data->src && data->dst)
{
DBG1(DBG_KNL, "creating acquire job for policy %R === %R with "
"reqid {%u}", src_ts, dst_ts, reqid);
"reqid {%u}", data->src, data->dst, reqid);
}
else
{
DBG1(DBG_KNL, "creating acquire job for policy with reqid {%u}", reqid);
}
lib->processor->queue_job(lib->processor,
(job_t*)acquire_job_create(reqid, src_ts, dst_ts));
(job_t*)acquire_job_create(reqid, data));
return TRUE;
}
+2 -3
View File
@@ -827,7 +827,7 @@ METHOD(kernel_interface_t, remove_listener, void,
METHOD(kernel_interface_t, acquire, void,
private_kernel_interface_t *this, uint32_t reqid,
traffic_selector_t *src_ts, traffic_selector_t *dst_ts)
kernel_acquire_data_t *data)
{
kernel_listener_t *listener;
enumerator_t *enumerator;
@@ -835,8 +835,7 @@ METHOD(kernel_interface_t, acquire, void,
enumerator = this->listeners->create_enumerator(this->listeners);
while (enumerator->enumerate(enumerator, &listener))
{
if (listener->acquire &&
!listener->acquire(listener, reqid, src_ts, dst_ts))
if (listener->acquire && !listener->acquire(listener, reqid, data))
{
this->listeners->remove_at(this->listeners, enumerator);
}
+2 -3
View File
@@ -513,11 +513,10 @@ struct kernel_interface_t {
* Raise an acquire event.
*
* @param reqid reqid of the policy to acquire
* @param src_ts source traffic selector
* @param dst_ts destination traffic selector
* @param data data from the acquire
*/
void (*acquire)(kernel_interface_t *this, uint32_t reqid,
traffic_selector_t *src_ts, traffic_selector_t *dst_ts);
kernel_acquire_data_t *data);
/**
* Raise an expire event.
+13 -3
View File
@@ -22,12 +22,23 @@
#define KERNEL_LISTENER_H_
typedef struct kernel_listener_t kernel_listener_t;
typedef struct kernel_acquire_data_t kernel_acquire_data_t;
#include <networking/host.h>
#include <networking/tun_device.h>
#include <selectors/traffic_selector.h>
#include <kernel/kernel_ipsec.h>
/**
* Data received with a kernel's acquire, has to be cloned/copied by listener.
*/
struct kernel_acquire_data_t {
/** Optional source of the triggering packet */
traffic_selector_t *src;
/** Optional destination of the triggering packet */
traffic_selector_t *dst;
};
/**
* Interface for components interested in kernel events.
*
@@ -39,12 +50,11 @@ struct kernel_listener_t {
* Hook called if an acquire event for a policy is received.
*
* @param reqid reqid of the policy to acquire
* @param src_ts source traffic selector
* @param dst_ts destination traffic selector
* @param data data from the acquire
* @return TRUE to remain registered, FALSE to unregister
*/
bool (*acquire)(kernel_listener_t *this, uint32_t reqid,
traffic_selector_t *src_ts, traffic_selector_t *dst_ts);
kernel_acquire_data_t *data);
/**
* Hook called if an expire event for an IPsec SA is received.