AARP probe packets are broadcast to dynamically discover if an Appletalk
node address is in use. The definition of AARP requires interpreting the
receipt of probe requests for the address being tested as the address being
in use, and then trying the next address. However, the node receives its own
Ethertalk broadcast, and incorrectly interprets that as another node trying
to claim the address.

Signed-off-by: Craig McGeachie <slap...@gmail.com>
---
 net/appletalk/aarp.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/net/appletalk/aarp.c b/net/appletalk/aarp.c
index 49a16cee..f966cc01 100644
--- a/net/appletalk/aarp.c
+++ b/net/appletalk/aarp.c
@@ -757,6 +757,10 @@ static int aarp_rcv(struct sk_buff *skb, struct net_device 
*dev,
        if (!ifa)
                goto out1;
 
+       /* Ignore packets from myself. */
+       if (ether_addr_equal(ea->hw_src, dev->dev_addr))
+               goto out1;
+
        if (ifa->status & ATIF_PROBE &&
            ifa->address.s_node == ea->pa_dst_node &&
            ifa->address.s_net == ea->pa_dst_net) {
-- 
2.17.1

Reply via email to