aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/plugins/kernel_libipsec/kernel_libipsec_ipsec.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcharon/plugins/kernel_libipsec/kernel_libipsec_ipsec.c')
-rw-r--r--src/libcharon/plugins/kernel_libipsec/kernel_libipsec_ipsec.c80
1 files changed, 38 insertions, 42 deletions
diff --git a/src/libcharon/plugins/kernel_libipsec/kernel_libipsec_ipsec.c b/src/libcharon/plugins/kernel_libipsec/kernel_libipsec_ipsec.c
index e6274e846..f1340320a 100644
--- a/src/libcharon/plugins/kernel_libipsec/kernel_libipsec_ipsec.c
+++ b/src/libcharon/plugins/kernel_libipsec/kernel_libipsec_ipsec.c
@@ -248,42 +248,38 @@ METHOD(kernel_ipsec_t, get_cpi, status_t,
}
METHOD(kernel_ipsec_t, add_sa, status_t,
- private_kernel_libipsec_ipsec_t *this, host_t *src, host_t *dst,
- uint32_t spi, uint8_t protocol, uint32_t reqid, mark_t mark,
- uint32_t tfc, lifetime_cfg_t *lifetime, uint16_t enc_alg, chunk_t enc_key,
- uint16_t int_alg, chunk_t int_key, ipsec_mode_t mode,
- uint16_t ipcomp, uint16_t cpi, uint32_t replay_window,
- bool initiator, bool encap, bool esn, bool inbound, bool update,
- linked_list_t *src_ts, linked_list_t *dst_ts)
+ private_kernel_libipsec_ipsec_t *this, kernel_ipsec_sa_id_t *id,
+ kernel_ipsec_add_sa_t *data)
{
- return ipsec->sas->add_sa(ipsec->sas, src, dst, spi, protocol, reqid, mark,
- tfc, lifetime, enc_alg, enc_key, int_alg, int_key,
- mode, ipcomp, cpi, initiator, encap, esn,
- inbound, update);
+ return ipsec->sas->add_sa(ipsec->sas, id->src, id->dst, id->spi, id->proto,
+ data->reqid, id->mark, data->tfc, data->lifetime,
+ data->enc_alg, data->enc_key, data->int_alg, data->int_key,
+ data->mode, data->ipcomp, data->cpi, data->initiator,
+ data->encap, data->esn, data->inbound, data->update);
}
METHOD(kernel_ipsec_t, update_sa, status_t,
- private_kernel_libipsec_ipsec_t *this, uint32_t spi, uint8_t protocol,
- uint16_t cpi, host_t *src, host_t *dst, host_t *new_src, host_t *new_dst,
- bool encap, bool new_encap, mark_t mark)
+ private_kernel_libipsec_ipsec_t *this, kernel_ipsec_sa_id_t *id,
+ kernel_ipsec_update_sa_t *data)
{
return NOT_SUPPORTED;
}
METHOD(kernel_ipsec_t, query_sa, status_t,
- private_kernel_libipsec_ipsec_t *this, host_t *src, host_t *dst,
- uint32_t spi, uint8_t protocol, mark_t mark, uint64_t *bytes,
- uint64_t *packets, time_t *time)
+ private_kernel_libipsec_ipsec_t *this, kernel_ipsec_sa_id_t *id,
+ kernel_ipsec_query_sa_t *data, uint64_t *bytes, uint64_t *packets,
+ time_t *time)
{
- return ipsec->sas->query_sa(ipsec->sas, src, dst, spi, protocol, mark,
- bytes, packets, time);
+ return ipsec->sas->query_sa(ipsec->sas, id->src, id->dst, id->spi,
+ id->proto, id->mark, bytes, packets, time);
}
METHOD(kernel_ipsec_t, del_sa, status_t,
- private_kernel_libipsec_ipsec_t *this, host_t *src, host_t *dst,
- uint32_t spi, uint8_t protocol, uint16_t cpi, mark_t mark)
+ private_kernel_libipsec_ipsec_t *this, kernel_ipsec_sa_id_t *id,
+ kernel_ipsec_del_sa_t *data)
{
- return ipsec->sas->del_sa(ipsec->sas, src, dst, spi, protocol, cpi, mark);
+ return ipsec->sas->del_sa(ipsec->sas, id->src, id->dst, id->spi, id->proto,
+ data->cpi, id->mark);
}
METHOD(kernel_ipsec_t, flush_sas, status_t,
@@ -509,22 +505,22 @@ static bool install_route(private_kernel_libipsec_ipsec_t *this,
}
METHOD(kernel_ipsec_t, add_policy, status_t,
- private_kernel_libipsec_ipsec_t *this, host_t *src, host_t *dst,
- traffic_selector_t *src_ts, traffic_selector_t *dst_ts,
- policy_dir_t direction, policy_type_t type, ipsec_sa_cfg_t *sa, mark_t mark,
- policy_priority_t priority)
+ private_kernel_libipsec_ipsec_t *this, kernel_ipsec_policy_id_t *id,
+ kernel_ipsec_manage_policy_t *data)
{
policy_entry_t *policy, *found = NULL;
status_t status;
- status = ipsec->policies->add_policy(ipsec->policies, src, dst, src_ts,
- dst_ts, direction, type, sa, mark, priority);
+ status = ipsec->policies->add_policy(ipsec->policies, data->src, data->dst,
+ id->src_ts, id->dst_ts, id->dir,
+ data->type, data->sa, id->mark,
+ data->prio);
if (status != SUCCESS)
{
return status;
}
/* we track policies in order to install routes */
- policy = create_policy_entry(src_ts, dst_ts, direction);
+ policy = create_policy_entry(id->src_ts, id->dst_ts, id->dir);
this->mutex->lock(this->mutex);
if (this->policies->find_first(this->policies,
@@ -540,7 +536,8 @@ METHOD(kernel_ipsec_t, add_policy, status_t,
}
policy->refs++;
- if (!install_route(this, src, dst, src_ts, dst_ts, policy))
+ if (!install_route(this, data->src, data->dst, id->src_ts, id->dst_ts,
+ policy))
{
return FAILED;
}
@@ -548,26 +545,25 @@ METHOD(kernel_ipsec_t, add_policy, status_t,
}
METHOD(kernel_ipsec_t, query_policy, status_t,
- private_kernel_libipsec_ipsec_t *this, traffic_selector_t *src_ts,
- traffic_selector_t *dst_ts, policy_dir_t direction, mark_t mark,
- time_t *use_time)
+ private_kernel_libipsec_ipsec_t *this, kernel_ipsec_policy_id_t *id,
+ kernel_ipsec_query_policy_t *data, time_t *use_time)
{
return NOT_SUPPORTED;
}
METHOD(kernel_ipsec_t, del_policy, status_t,
- private_kernel_libipsec_ipsec_t *this, host_t *src, host_t *dst,
- traffic_selector_t *src_ts, traffic_selector_t *dst_ts,
- policy_dir_t direction, policy_type_t type, ipsec_sa_cfg_t *sa,
- mark_t mark, policy_priority_t priority)
+ private_kernel_libipsec_ipsec_t *this, kernel_ipsec_policy_id_t *id,
+ kernel_ipsec_manage_policy_t *data)
{
policy_entry_t *policy, *found = NULL;
status_t status;
- status = ipsec->policies->del_policy(ipsec->policies, src, dst, src_ts,
- dst_ts, direction, type, sa, mark, priority);
+ status = ipsec->policies->del_policy(ipsec->policies, data->src, data->dst,
+ id->src_ts, id->dst_ts, id->dir,
+ data->type, data->sa, id->mark,
+ data->prio);
- policy = create_policy_entry(src_ts, dst_ts, direction);
+ policy = create_policy_entry(id->src_ts, id->dst_ts, id->dir);
this->mutex->lock(this->mutex);
if (this->policies->find_first(this->policies,
@@ -596,8 +592,8 @@ METHOD(kernel_ipsec_t, del_policy, status_t,
route->src_ip, route->if_name) != SUCCESS)
{
DBG1(DBG_KNL, "error uninstalling route installed with "
- "policy %R === %R %N", src_ts, dst_ts,
- policy_dir_names, direction);
+ "policy %R === %R %N", id->src_ts, id->dst_ts,
+ policy_dir_names, id->dir);
}
remove_exclude_route(this, route);
}