diff options
author | Martin Willi <martin@revosec.ch> | 2012-06-05 15:32:28 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-06-08 10:22:03 +0200 |
commit | 7a5f372c57925d0d13d9c9d599b4accbec499a0f (patch) | |
tree | 9f832160470cfb7245911674c8a8c6f069e39cb9 /src | |
parent | d61f2906d4543de716d26634bc3a5d75ecf2aa34 (diff) | |
download | strongswan-7a5f372c57925d0d13d9c9d599b4accbec499a0f.tar.bz2 strongswan-7a5f372c57925d0d13d9c9d599b4accbec499a0f.tar.xz |
Initiate quick mode rekeying with narrowed traffic selectors
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/sa/ikev1/task_manager_v1.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/libcharon/sa/ikev1/task_manager_v1.c b/src/libcharon/sa/ikev1/task_manager_v1.c index 9fa2c9b2f..244aa13b0 100644 --- a/src/libcharon/sa/ikev1/task_manager_v1.c +++ b/src/libcharon/sa/ikev1/task_manager_v1.c @@ -1394,6 +1394,22 @@ static bool is_redundant(private_task_manager_t *this, child_sa_t *child_sa) return redundant; } +/** + * Get the first traffic selector of a CHILD_SA, local or remote + */ +static traffic_selector_t* get_first_ts(child_sa_t *child_sa, bool local) +{ + traffic_selector_t *ts = NULL; + linked_list_t *list; + + list = child_sa->get_traffic_selectors(child_sa, local); + if (list->get_first(list, (void**)&ts) == SUCCESS) + { + return ts; + } + return NULL; +} + METHOD(task_manager_t, queue_child_rekey, void, private_task_manager_t *this, protocol_id_t protocol, u_int32_t spi) { @@ -1417,7 +1433,8 @@ METHOD(task_manager_t, queue_child_rekey, void, { child_sa->set_state(child_sa, CHILD_REKEYING); cfg = child_sa->get_config(child_sa); - task = quick_mode_create(this->ike_sa, cfg->get_ref(cfg), NULL, NULL); + task = quick_mode_create(this->ike_sa, cfg->get_ref(cfg), + get_first_ts(child_sa, TRUE), get_first_ts(child_sa, FALSE)); task->use_reqid(task, child_sa->get_reqid(child_sa)); task->rekey(task, child_sa->get_spi(child_sa, TRUE)); |