tipc: make node number calculation reproducible
authorJon Maloy <jmaloy@redhat.com>
Wed, 25 Nov 2020 18:29:14 +0000 (13:29 -0500)
committerJakub Kicinski <kuba@kernel.org>
Sat, 28 Nov 2020 01:34:01 +0000 (17:34 -0800)
commit5f75e0a0e92a6c6ef93d61fb4d1d2a185cdbc2f9
treeac8ba77cffe46b36e41b4c40eb55402209ae559c
parent60c102eedea0e487c897dd23cc7fefecf4449769
tipc: make node number calculation reproducible

The 32-bit node number, aka node hash or node address, is calculated
based on the 128-bit node identity when it is not set explicitly by
the user. In future commits we will need to perform this hash operation
on peer nodes while feeling safe that we obtain the same result.

We do this by interpreting the initial hash as a network byte order
number. Whenever we need to use the number locally on a node
we must therefore translate it to host byte order to obtain an
architecure independent result.

Furthermore, given the context where we use this number, we must not
allow it to be zero unless the node identity also is zero. Hence, in
the rare cases when the xor-ed hash value may end up as zero we replace
it with a fix number, knowing that the code anyway is capable of
handling hash collisions.

Acked-by: Ying Xue <ying.xue@windriver.com>
Signed-off-by: Jon Maloy <jmaloy@redhat.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/tipc/addr.c
net/tipc/addr.h
net/tipc/core.h