Skip to content

Commit

Permalink
ipv4: arp announce, arp_proxy and windows ip conflict verification
Browse files Browse the repository at this point in the history
Windows (XP at least) hosts on boot, with configured static ip, performing 
address conflict detection, which is defined in RFC3927.
Here is quote of important information:

"
An ARP announcement is identical to the ARP Probe described above, 
except    that now the sender and target IP addresses are both set 
to the host's newly selected IPv4 address. 
"

But it same time this goes wrong with RFC5227.
"
The 'sender IP address' field MUST be set to all zeroes; this is to avoid
polluting ARP caches in other hosts on the same link in the case
where the address turns out to be already in use by another host.
"

When ARP proxy configured, it must not answer to both cases, because 
it is address conflict verification in any case. For Windows it is just 
causing to detect false "ip conflict". Already there is code for RFC5227, so 
just trivially we just check also if source ip == target ip.

Signed-off-by: Denys Fedoryshchenko <denys@visp.net.lb>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Denys Fedoryshchenko authored and David S. Miller committed Mar 13, 2009
1 parent 1f8ae0a commit 73ce7b0
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions net/ipv4/arp.c
Original file line number Diff line number Diff line change
Expand Up @@ -801,8 +801,11 @@ static int arp_process(struct sk_buff *skb)
* cache.
*/

/* Special case: IPv4 duplicate address detection packet (RFC2131) */
if (sip == 0) {
/*
* Special case: IPv4 duplicate address detection packet (RFC2131)
* and Gratuitous ARP/ARP Announce. (RFC3927, Section 2.4)
*/
if (sip == 0 || tip == sip) {
if (arp->ar_op == htons(ARPOP_REQUEST) &&
inet_addr_type(net, tip) == RTN_LOCAL &&
!arp_ignore(in_dev, sip, tip))
Expand Down

0 comments on commit 73ce7b0

Please sign in to comment.