summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2013-07-24 19:13:24 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2013-07-24 19:13:24 +0200
commit95491f3b7e800b3b0e58ea4eaf35e8270b46470f (patch)
tree74b1b749171e1e0de69925c3020a83d67a7c6be2
parent69659bce9718d27a379e60bad2979ec94340b707 (diff)
downloadfastd-95491f3b7e800b3b0e58ea4eaf35e8270b46470f.tar
fastd-95491f3b7e800b3b0e58ea4eaf35e8270b46470f.zip
Fix fastd_peer_claim_address for peers with different addresses
-rw-r--r--src/peer.c16
1 files changed, 9 insertions, 7 deletions
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;
+ }
}
}