ikev2: Skip peer addresses we can't send packets to when looking for valid paths

This commit is contained in:
Tobias Brunner 2014-07-28 12:04:40 +02:00
parent 3293d14628
commit ff60134157
1 changed files with 18 additions and 0 deletions

View File

@ -1911,11 +1911,29 @@ static bool is_any_path_valid(private_ike_sa_t *this)
bool valid = FALSE;
enumerator_t *enumerator;
host_t *src = NULL, *addr;
int family = AF_UNSPEC;
switch (charon->socket->supported_families(charon->socket))
{
case SOCKET_FAMILY_IPV4:
family = AF_INET;
break;
case SOCKET_FAMILY_IPV6:
family = AF_INET6;
break;
case SOCKET_FAMILY_BOTH:
case SOCKET_FAMILY_NONE:
break;
}
DBG1(DBG_IKE, "old path is not available anymore, try to find another");
enumerator = create_peer_address_enumerator(this);
while (enumerator->enumerate(enumerator, &addr))
{
if (family != AF_UNSPEC && addr->get_family(addr) != family)
{
continue;
}
DBG1(DBG_IKE, "looking for a route to %H ...", addr);
src = hydra->kernel_interface->get_source_addr(
hydra->kernel_interface, addr, NULL);