From: Lennart Poettering Date: Sun, 10 Aug 2014 20:48:16 +0000 (+0200) Subject: resolved: actually, the peer with the lower IP address wins conflicts X-Git-Tag: v216~216 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=4d91eec42d3ba547c4e2578df0d6fd568075647b resolved: actually, the peer with the lower IP address wins conflicts --- diff --git a/src/resolve/resolved-dns-transaction.c b/src/resolve/resolved-dns-transaction.c index dfed74dc9..990b1f2e4 100644 --- a/src/resolve/resolved-dns-transaction.c +++ b/src/resolve/resolved-dns-transaction.c @@ -137,12 +137,12 @@ static void dns_transaction_tentative(DnsTransaction *t, DnsPacket *p) { /* RFC 4795, Section 4.1 says that the peer with the * lexicographically smaller IP address loses */ - if (memcmp(&p->sender, &p->destination, FAMILY_ADDRESS_SIZE(p->family)) < 0) { - log_debug("Peer has lexicographically smaller IP address and thus lost in the conflict."); + if (memcmp(&p->sender, &p->destination, FAMILY_ADDRESS_SIZE(p->family)) >= 0) { + log_debug("Peer has lexicographically larger IP address and thus lost in the conflict."); return; } - log_debug("We have the lexicographically smaller IP address and thus lost in the conflict."); + log_debug("We have the lexicographically larger IP address and thus lost in the conflict."); t->block_gc++; while ((z = set_first(t->zone_items))) { diff --git a/src/resolve/resolved-dns-zone.c b/src/resolve/resolved-dns-zone.c index ebbd1e2bf..370ecefd7 100644 --- a/src/resolve/resolved-dns-zone.c +++ b/src/resolve/resolved-dns-zone.c @@ -527,7 +527,7 @@ void dns_zone_item_ready(DnsZoneItem *i) { /* The probe got a successful reply. If we so far * weren't established we just give up. If we already * were established, and the peer has the - * lexicographically smaller IP address we continue + * lexicographically larger IP address we continue * and defend it. */ if (!IN_SET(i->state, DNS_ZONE_ITEM_ESTABLISHED, DNS_ZONE_ITEM_VERIFYING)) { @@ -535,9 +535,9 @@ void dns_zone_item_ready(DnsZoneItem *i) { we_lost = true; } else { assert(i->probe_transaction->received); - we_lost = memcmp(&i->probe_transaction->received->sender, &i->probe_transaction->received->destination, FAMILY_ADDRESS_SIZE(i->probe_transaction->received->family)) > 0; + we_lost = memcmp(&i->probe_transaction->received->sender, &i->probe_transaction->received->destination, FAMILY_ADDRESS_SIZE(i->probe_transaction->received->family)) < 0; if (we_lost) - log_debug("Got a successful probe reply for an established RR, and we have a lexicographically lower IP address and thus lost."); + log_debug("Got a successful probe reply for an established RR, and we have a lexicographically larger IP address and thus lost."); } if (we_lost) {