diff options
author | Tobias Brunner <tobias@strongswan.org> | 2014-07-28 12:04:40 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2014-09-12 10:29:36 +0200 |
commit | ff601341572b0d38b4ddde3846a145f252d1e282 (patch) | |
tree | 9bb348cdf2aed143a2b842c0ed0fef53e9a4386d /src | |
parent | 3293d146289d7c05e6c6089ae1f7cdbcea378e63 (diff) | |
download | strongswan-ff601341572b0d38b4ddde3846a145f252d1e282.tar.bz2 strongswan-ff601341572b0d38b4ddde3846a145f252d1e282.tar.xz |
ikev2: Skip peer addresses we can't send packets to when looking for valid paths
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/sa/ike_sa.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/libcharon/sa/ike_sa.c b/src/libcharon/sa/ike_sa.c index e63e0fa6c..516b2435b 100644 --- a/src/libcharon/sa/ike_sa.c +++ b/src/libcharon/sa/ike_sa.c @@ -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); |