split connections with different virtual IPs in different peer_cfgs
respect different peer_cfg's when initiating a CHILD_SA within an existing IKE_SA
This commit is contained in:
@@ -171,14 +171,11 @@ static bool initiate_listener(interface_bus_listener_t *this, signal_t signal,
|
||||
static status_t initiate_execute(interface_job_t *job)
|
||||
{
|
||||
ike_sa_t *ike_sa;
|
||||
ike_cfg_t *ike_cfg;
|
||||
interface_bus_listener_t *listener = &job->listener;
|
||||
peer_cfg_t *peer_cfg = listener->peer_cfg;
|
||||
|
||||
ike_cfg = peer_cfg->get_ike_cfg(peer_cfg);
|
||||
ike_sa = charon->ike_sa_manager->checkout_by_peer(charon->ike_sa_manager,
|
||||
ike_cfg->get_my_host(ike_cfg), ike_cfg->get_other_host(ike_cfg),
|
||||
peer_cfg->get_my_id(peer_cfg), peer_cfg->get_other_id(peer_cfg));
|
||||
ike_sa = charon->ike_sa_manager->checkout_by_config(charon->ike_sa_manager,
|
||||
peer_cfg);
|
||||
listener->ike_sa = ike_sa;
|
||||
|
||||
if (ike_sa->get_peer_cfg(ike_sa) == NULL)
|
||||
@@ -435,15 +432,11 @@ static bool route_listener(interface_bus_listener_t *this, signal_t signal,
|
||||
static status_t route_execute(interface_job_t *job)
|
||||
{
|
||||
ike_sa_t *ike_sa;
|
||||
ike_cfg_t *ike_cfg;
|
||||
interface_bus_listener_t *listener = &job->listener;
|
||||
peer_cfg_t *peer_cfg = listener->peer_cfg;
|
||||
|
||||
ike_cfg = peer_cfg->get_ike_cfg(peer_cfg);
|
||||
|
||||
ike_sa = charon->ike_sa_manager->checkout_by_peer(charon->ike_sa_manager,
|
||||
ike_cfg->get_my_host(ike_cfg), ike_cfg->get_other_host(ike_cfg),
|
||||
peer_cfg->get_my_id(peer_cfg), peer_cfg->get_other_id(peer_cfg));
|
||||
ike_sa = charon->ike_sa_manager->checkout_by_config(charon->ike_sa_manager,
|
||||
peer_cfg);
|
||||
listener->ike_sa = ike_sa;
|
||||
|
||||
if (ike_sa->get_peer_cfg(ike_sa) == NULL)
|
||||
|
||||
@@ -535,6 +535,24 @@ static void stroke_add_conn(stroke_msg_t *msg, FILE *out)
|
||||
iterator = charon->backends->create_iterator(charon->backends);
|
||||
while (iterator->iterate(iterator, (void**)&peer_cfg))
|
||||
{
|
||||
host_t *my_vip_conf, *other_vip_conf;
|
||||
bool my_vip_equals = FALSE, other_vip_equals = FALSE;
|
||||
|
||||
my_vip_conf = peer_cfg->get_my_virtual_ip(peer_cfg);
|
||||
if ((my_vip && my_vip_conf && my_vip->equals(my_vip, my_vip_conf)) ||
|
||||
(!my_vip_conf && !my_vip))
|
||||
{
|
||||
my_vip_equals = TRUE;
|
||||
}
|
||||
DESTROY_IF(my_vip_conf);
|
||||
other_vip_conf = peer_cfg->get_other_virtual_ip(peer_cfg, NULL);
|
||||
if ((other_vip && other_vip_conf && other_vip->equals(other_vip, other_vip_conf)) ||
|
||||
(!other_vip_conf && !other_vip))
|
||||
{
|
||||
other_vip_equals = TRUE;
|
||||
}
|
||||
DESTROY_IF(other_vip_conf);
|
||||
|
||||
ike_cfg = peer_cfg->get_ike_cfg(peer_cfg);
|
||||
if (my_id->equals(my_id, peer_cfg->get_my_id(peer_cfg))
|
||||
&& other_id->equals(other_id, peer_cfg->get_other_id(peer_cfg))
|
||||
@@ -545,7 +563,8 @@ static void stroke_add_conn(stroke_msg_t *msg, FILE *out)
|
||||
&& peer_cfg->get_ike_version(peer_cfg) == (msg->add_conn.ikev2 ? 2 : 1)
|
||||
&& peer_cfg->get_auth_method(peer_cfg) == msg->add_conn.auth_method
|
||||
&& peer_cfg->get_eap_type(peer_cfg, &vendor) == msg->add_conn.eap_type
|
||||
&& vendor == msg->add_conn.eap_vendor)
|
||||
&& vendor == msg->add_conn.eap_vendor
|
||||
&& my_vip_equals && other_vip_equals)
|
||||
{
|
||||
DBG1(DBG_CFG, "reusing existing configuration '%s'",
|
||||
peer_cfg->get_name(peer_cfg));
|
||||
|
||||
Reference in New Issue
Block a user