[openib-general] IPoIB question/problem

Michael S. Tsirkin mst at mellanox.co.il
Mon Nov 7 09:02:44 PST 2005


Hello, Roland!
While debugging a (gen1) problem with IPoIB,
I have noticed the following code in function neigh_update:

net/core/neighbour.c:1015

        if (lladdr != neigh->ha) {
                memcpy(&neigh->ha, lladdr, dev->addr_len);
                neigh_update_hhs(neigh);
                if (!(new & NUD_CONNECTED))
                        neigh->confirmed = jiffies -
                                      (neigh->parms->base_reachable_time << 1);
#ifdef CONFIG_ARPD
                notify = 1;
#endif
        }

It appears, therefore, that the neighbour ha field may get updated
without destroying the neighbour.

Assuming that a remote node is replaced and its address changes
(e.g. gid change), it seems that the ha field will gets out of sync with
the address handle stored in ipoib_neigh->ah, with the result that the
ah field would point to an incorrect path, resulting in all packets being lost.

Does this analysis make sense? If yes, what would be the best way to fix this?

Thanks,
MST



More information about the general mailing list