Message ID | 20190821032000.10540-1-liudongxu3@huawei.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | net: Add the same IP detection for duplicate address. | expand |
From: Dongxu Liu <liudongxu3@huawei.com> Date: Wed, 21 Aug 2019 11:20:00 +0800 > The network sends an ARP REQUEST packet to determine > whether there is a host with the same IP. > Windows and some other hosts may send the source IP > address instead of 0. > When IN_DEV_ORCONF(in_dev, DROP_GRATUITOUS_ARP) is enable, > the REQUEST will be dropped. > When IN_DEV_ORCONF(in_dev, DROP_GRATUITOUS_ARP) is disable, > The case should be added to the IP conflict handling process. > > Signed-off-by: Dongxu Liu <liudongxu3@huawei.com> Even documents like RFC 5227 talk about there being a zero source protocol address here (read the last two paragraphis of section 1.2. "relationship to 826"): ==================== An ARP Probe with an all-zero 'sender IP address' may ostensibly be merely asking an innocent question ("Is anyone using this address?"), but an intelligent implementation that knows how IPv4 Address Conflict Detection works should be able to recognize this question as the precursor to claiming the address. ==================== I do not understand why we have to add a special case for an implementation that has decided, after so many decades of our existing behavior, to put something of than zero in the source protocol address. I'm not applying this, I do not see a legitimate justification for this change at all. Sorry.
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c index 05eb42f..a51c921 100644 --- a/net/ipv4/arp.c +++ b/net/ipv4/arp.c @@ -801,7 +801,7 @@ static int arp_process(struct net *net, struct sock *sk, struct sk_buff *skb) GFP_ATOMIC); /* Special case: IPv4 duplicate address detection packet (RFC2131) */ - if (sip == 0) { + if (sip == 0 || sip == tip) { if (arp->ar_op == htons(ARPOP_REQUEST) && inet_addr_type_dev_table(net, dev, tip) == RTN_LOCAL && !arp_ignore(in_dev, sip, tip))
The network sends an ARP REQUEST packet to determine whether there is a host with the same IP. Windows and some other hosts may send the source IP address instead of 0. When IN_DEV_ORCONF(in_dev, DROP_GRATUITOUS_ARP) is enable, the REQUEST will be dropped. When IN_DEV_ORCONF(in_dev, DROP_GRATUITOUS_ARP) is disable, The case should be added to the IP conflict handling process. Signed-off-by: Dongxu Liu <liudongxu3@huawei.com> --- net/ipv4/arp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)