[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