[prev in list] [next in list] [prev in thread] [next in thread] 

List:       freedesktop-avahi
Subject:    [avahi] [PATCH] avahi-autoipd: only consider ARP Probe packets
From:       Christian Hitz <christian.hitz () digitalstrom ! com>
Date:       2014-03-12 12:57:47
Message-ID: 532059CB.9050803 () digitalstrom ! com
[Download RAW message or body]

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

["avahi-autoipd-probe-check.patch" (text/x-patch)]

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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic