]> git.baikalelectronics.ru Git - kernel.git/commit
tipc: allow closest-first lookup algorithm when legacy address is configured
authorJon Maloy <jon.maloy@ericsson.com>
Thu, 22 Mar 2018 19:42:48 +0000 (20:42 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 23 Mar 2018 17:12:18 +0000 (13:12 -0400)
commit9fccb7bdd3a0309b905460382e14564ebbc7eefd
tree966e4f18e0330334a3dd534b2a82da56f7dc7005
parent5cd8f500eba440271faa1d9bd3c62c9790ef3ca4
tipc: allow closest-first lookup algorithm when legacy address is configured

The removal of an internal structure of the node address has an unwanted
side effect.
- Currently, if a user is sending an anycast message with destination
  domain 0, the tipc_namebl_translate() function will use the 'closest-
  first' algorithm to first look for a node local destination, and only
  when no such is found, will it resort to the cluster global 'round-
  robin' lookup algorithm.
- Current users can get around this, and enforce unconditional use of
  global round-robin by indicating a destination as Z.0.0 or Z.C.0.
- This option disappears when we make the node address flat, since the
  lookup algorithm has no way of recognizing this case. So, as long as
  there are node local destinations, the algorithm will always select
  one of those, and there is nothing the sender can do to change this.

We solve this by eliminating the 'closest-first' option, which was never
a good idea anyway, for non-legacy users, but only for those. To
distinguish between legacy users and non-legacy users we introduce a new
flag 'legacy_addr_format' in struct tipc_core, to be set when the user
configures a legacy-style Z.C.N node address. Hence, when a legacy user
indicates a zero lookup domain 'closest-first' is selected, and in all
other cases we use 'round-robin'.

Acked-by: Ying Xue <ying.xue@windriver.com>
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tipc/addr.c
net/tipc/addr.h
net/tipc/core.h
net/tipc/discover.c
net/tipc/name_table.c
net/tipc/net.c