Do not enable/disable our own sync tunnel

This commit is contained in:
Martin Willi
2010-04-07 13:55:14 +02:00
committed by Martin Willi
parent 9fdf5f712e
commit b7f15be136
3 changed files with 24 additions and 10 deletions
+3 -3
View File
@@ -171,12 +171,12 @@ plugin_t *plugin_create()
return NULL; return NULL;
} }
this->segments = ha_sync_segments_create(this->socket, this->kernel,
count, active);
if (secret) if (secret)
{ {
this->tunnel = ha_sync_tunnel_create(secret, local, remote); this->tunnel = ha_sync_tunnel_create(local, remote, secret);
} }
this->segments = ha_sync_segments_create(this->socket, this->kernel,
this->tunnel, count, active);
if (fifo) if (fifo)
{ {
this->ctl = ha_sync_ctl_create(this->segments); this->ctl = ha_sync_ctl_create(this->segments);
+19 -7
View File
@@ -35,6 +35,11 @@ struct private_ha_sync_segments_t {
*/ */
ha_sync_socket_t *socket; ha_sync_socket_t *socket;
/**
* Sync tunnel, if any
*/
ha_sync_tunnel_t *tunnel;
/** /**
* Interface to control segments at kernel level * Interface to control segments at kernel level
*/ */
@@ -110,15 +115,20 @@ static void enable_disable(private_ha_sync_segments_t *this, u_int segment,
enumerator = charon->ike_sa_manager->create_enumerator(charon->ike_sa_manager); enumerator = charon->ike_sa_manager->create_enumerator(charon->ike_sa_manager);
while (enumerator->enumerate(enumerator, &ike_sa)) while (enumerator->enumerate(enumerator, &ike_sa))
{ {
if (ike_sa->get_state(ike_sa) == old) if (ike_sa->get_state(ike_sa) != old)
{ {
for (i = segment; i < limit; i++) continue;
}
if (this->tunnel && this->tunnel->is_sync_sa(this->tunnel, ike_sa))
{
continue;
}
for (i = segment; i < limit; i++)
{
if (this->kernel->in_segment(this->kernel,
ike_sa->get_other_host(ike_sa), i))
{ {
if (this->kernel->in_segment(this->kernel, ike_sa->set_state(ike_sa, new);
ike_sa->get_other_host(ike_sa), i))
{
ike_sa->set_state(ike_sa, new);
}
} }
} }
} }
@@ -305,6 +315,7 @@ static void destroy(private_ha_sync_segments_t *this)
*/ */
ha_sync_segments_t *ha_sync_segments_create(ha_sync_socket_t *socket, ha_sync_segments_t *ha_sync_segments_create(ha_sync_socket_t *socket,
ha_sync_kernel_t *kernel, ha_sync_kernel_t *kernel,
ha_sync_tunnel_t *tunnel,
u_int count, segment_mask_t active) u_int count, segment_mask_t active)
{ {
private_ha_sync_segments_t *this = malloc_thing(private_ha_sync_segments_t); private_ha_sync_segments_t *this = malloc_thing(private_ha_sync_segments_t);
@@ -317,6 +328,7 @@ ha_sync_segments_t *ha_sync_segments_create(ha_sync_socket_t *socket,
this->public.destroy = (void(*)(ha_sync_segments_t*))destroy; this->public.destroy = (void(*)(ha_sync_segments_t*))destroy;
this->socket = socket; this->socket = socket;
this->tunnel = tunnel;
this->kernel = kernel; this->kernel = kernel;
this->lock = rwlock_create(RWLOCK_TYPE_DEFAULT); this->lock = rwlock_create(RWLOCK_TYPE_DEFAULT);
this->active = active; this->active = active;
@@ -38,6 +38,7 @@ typedef u_int16_t segment_mask_t;
#define SEGMENTS_BIT(segment) (0x01 << (segment - 1)) #define SEGMENTS_BIT(segment) (0x01 << (segment - 1))
#include "ha_sync_socket.h" #include "ha_sync_socket.h"
#include "ha_sync_tunnel.h"
#include "ha_sync_kernel.h" #include "ha_sync_kernel.h"
/** /**
@@ -95,6 +96,7 @@ struct ha_sync_segments_t {
*/ */
ha_sync_segments_t *ha_sync_segments_create(ha_sync_socket_t *socket, ha_sync_segments_t *ha_sync_segments_create(ha_sync_socket_t *socket,
ha_sync_kernel_t *kernel, ha_sync_kernel_t *kernel,
ha_sync_tunnel_t *tunnel,
u_int count, segment_mask_t active); u_int count, segment_mask_t active);
#endif /* HA_SYNC_SEGMENTS_ @}*/ #endif /* HA_SYNC_SEGMENTS_ @}*/