From 95491f3b7e800b3b0e58ea4eaf35e8270b46470f Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Wed, 24 Jul 2013 19:13:24 +0200 Subject: Fix fastd_peer_claim_address for peers with different addresses --- src/peer.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/peer.c b/src/peer.c index d50fdec..fa48b8d 100644 --- a/src/peer.c +++ b/src/peer.c @@ -363,19 +363,21 @@ bool fastd_peer_claim_address(fastd_context_t *ctx, fastd_peer_t *new_peer, fast else { fastd_peer_t *peer; for (peer = ctx->peers; peer; peer = peer->next) { - if (!fastd_peer_address_equal(&peer->address, remote_addr)) - continue; - if (peer == new_peer) - break; + continue; - if (!fastd_peer_is_floating(peer)) { + if (fastd_peer_owns_address(ctx, peer, remote_addr)) { reset_peer_address(ctx, new_peer); return false; } - reset_peer_address(ctx, peer); - break; + if (fastd_peer_address_equal(&peer->address, remote_addr)) { + if (fastd_peer_is_established(peer)) + return false; + + reset_peer_address(ctx, peer); + break; + } } } -- cgit v1.2.3