Hi, we noticed that avahi-autoipd selects a new IP when it receives an ARP request during the probe phase.
According to RFC3927, Section 2.2.1. Probe details: > An ARP Request constructed this way with an all-zero 'sender IP > address' is referred to as an "ARP Probe". and > In addition, if during this period [checking if an address is already > in use] the host receives any ARP Probe where the packet's 'target IP > address' is the address being probed for, and the packet's 'sender > hardware address' is not the hardware address of the interface the > host is attempting to configure, then the host MUST similarly treat > this as an address conflict and select a new address as above. When receiving an ARP packet during probe avahi-autoipd does not check if the 'sender IP address' is all-zero and therefore if the packet is an ARP Probe. The attached patch adds this check. Regards, Christian -- Christian Hitz digitalSTROM ag, Schlieren, Switzerland Software Development http://www.digitalstrom.com
diff -Naur avahi-0.6.31-prog/avahi-autoipd/main.c avahi-0.6.31/avahi-autoipd/main.c --- avahi-0.6.31-prog/avahi-autoipd/main.c 2010-08-26 02:51:38.961153000 +0200 +++ avahi-0.6.31/avahi-autoipd/main.c 2014-03-12 11:27:00.551821502 +0100 @@ -1230,7 +1230,7 @@ } else if (state == STATE_WAITING_PROBE || state == STATE_PROBING || state == STATE_WAITING_ANNOUNCE) { /* Probe conflict */ - conflict = info.target_ip_address == addr && memcmp(hw_address, info.sender_hw_address, ETHER_ADDRLEN); + conflict = info.target_ip_address == addr && memcmp(hw_address, info.sender_hw_address, ETHER_ADDRLEN) && info.sender_ip_address == 0; if (conflict) daemon_log(LOG_INFO, "Received conflicting probe ARP packet.");
_______________________________________________ avahi mailing list avahi@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/avahi