diff -uprN net-next-2.6/net/ipv4/arp.c net-next-2.6.my2/net/ipv4/arp.c --- net-next-2.6/net/ipv4/arp.c 2009-07-01 01:00:58.000000000 +0300 +++ net-next-2.6.my2/net/ipv4/arp.c 2009-07-01 01:25:38.000000000 +0300 @@ -811,7 +811,10 @@ static int arp_process(struct sk_buff *s !arp_ignore(in_dev, sip, tip)) arp_send(ARPOP_REPLY, ETH_P_ARP, sip, dev, tip, sha, dev->dev_addr, sha); - goto out; + if (tip == sip) + goto update; + else + goto out; } if (arp->ar_op == htons(ARPOP_REQUEST) && @@ -858,6 +861,7 @@ static int arp_process(struct sk_buff *s /* Update our ARP tables */ +update: n = __neigh_lookup(&arp_tbl, &sip, dev, 0); if (IPV4_DEVCONF_ALL(dev_net(dev), ARP_ACCEPT)) {