Select requested virtual IP family based on remote TS, if no local TS available

This commit is contained in:
Martin Willi
2012-06-20 10:02:01 +02:00
parent f2fc138e8e
commit e2dd114f37
+12 -1
View File
@@ -705,7 +705,7 @@ static peer_cfg_t *build_peer_cfg(private_stroke_config_t *this,
if (!vip) if (!vip)
{ /* if it is set to something like %poolname, request an address */ { /* if it is set to something like %poolname, request an address */
if (msg->add_conn.me.subnets) if (msg->add_conn.me.subnets)
{ /* use the same address as in subnet, if any */ { /* use the same family as in local subnet, if any */
if (strchr(msg->add_conn.me.subnets, '.')) if (strchr(msg->add_conn.me.subnets, '.'))
{ {
vip = host_create_any(AF_INET); vip = host_create_any(AF_INET);
@@ -715,6 +715,17 @@ static peer_cfg_t *build_peer_cfg(private_stroke_config_t *this,
vip = host_create_any(AF_INET6); vip = host_create_any(AF_INET6);
} }
} }
else if (msg->add_conn.other.subnets)
{ /* use the same family as in remote subnet, if any */
if (strchr(msg->add_conn.other.subnets, '.'))
{
vip = host_create_any(AF_INET);
}
else
{
vip = host_create_any(AF_INET6);
}
}
else else
{ {
if (strchr(ike_cfg->get_my_addr(ike_cfg, NULL), ':')) if (strchr(ike_cfg->get_my_addr(ike_cfg, NULL), ':'))