ikev2: Skip peer addresses we can't send packets to when looking for valid paths
This commit is contained in:
@@ -1911,11 +1911,29 @@ static bool is_any_path_valid(private_ike_sa_t *this)
|
|||||||
bool valid = FALSE;
|
bool valid = FALSE;
|
||||||
enumerator_t *enumerator;
|
enumerator_t *enumerator;
|
||||||
host_t *src = NULL, *addr;
|
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");
|
DBG1(DBG_IKE, "old path is not available anymore, try to find another");
|
||||||
enumerator = create_peer_address_enumerator(this);
|
enumerator = create_peer_address_enumerator(this);
|
||||||
while (enumerator->enumerate(enumerator, &addr))
|
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);
|
DBG1(DBG_IKE, "looking for a route to %H ...", addr);
|
||||||
src = hydra->kernel_interface->get_source_addr(
|
src = hydra->kernel_interface->get_source_addr(
|
||||||
hydra->kernel_interface, addr, NULL);
|
hydra->kernel_interface, addr, NULL);
|
||||||
|
|||||||
Reference in New Issue
Block a user