tipc: rename binding table lookup functions

The binding table provides four different lookup functions, which
purpose is not obvious neither by their names nor by the (lack of)
descriptions.

We now give these functions names that better match their purposes,
and improve the comments that describe what they are doing.

Signed-off-by: Jon Maloy <jmaloy@redhat.com>
Acked-by: Ying Xue <ying.xue@windriver.com>
Acked-by: Hoang Le <hoang.h.le@dektech.com.au>
Acked-by: Tung Nguyen <tung.q.nguyen@dektech.com.au>
Acked-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Jon Maloy 2021-03-16 22:06:14 -04:00 committed by David S. Miller
parent 2c98da0790
commit 66db239c48
4 changed files with 56 additions and 37 deletions

View File

@ -723,8 +723,8 @@ bool tipc_msg_lookup_dest(struct net *net, struct sk_buff *skb, int *err)
if (msg_reroute_cnt(msg))
return false;
dnode = tipc_scope2node(net, msg_lookup_scope(msg));
dport = tipc_nametbl_translate(net, msg_nametype(msg),
msg_nameinst(msg), &dnode);
dport = tipc_nametbl_lookup_anycast(net, msg_nametype(msg),
msg_nameinst(msg), &dnode);
if (!dport)
return false;
msg_incr_reroute_cnt(msg);

View File

@ -544,24 +544,26 @@ struct publication *tipc_nametbl_remove_publ(struct net *net,
}
/**
* tipc_nametbl_translate - perform service instance to socket translation
* tipc_nametbl_lookup_anycast - perform service instance to socket translation
* @net: network namespace
* @type: message type
* @instance: message instance
* @dnode: the search domain used during translation
*
* On entry, 'dnode' is the search domain used during the lookup
*
* On exit:
* - if translation is deferred to another node, leave 'dnode' unchanged and
* return 0
* - if translation is attempted and succeeds, set 'dnode' to the publishing
* node and return the published (non-zero) port number
* - if translation is attempted and fails, set 'dnode' to 0 and return 0
* - if lookup is deferred to another node, leave 'dnode' unchanged and return 0
* - if lookup is attempted and succeeds, set 'dnode' to the publishing node and
* return the published (non-zero) port number
* - if lookup is attempted and fails, set 'dnode' to 0 and return 0
*
* Note that for legacy users (node configured with Z.C.N address format) the
* 'closest-first' lookup algorithm must be maintained, i.e., if dnode is 0
* we must look in the local binding list first
*/
u32 tipc_nametbl_translate(struct net *net, u32 type, u32 instance, u32 *dnode)
u32 tipc_nametbl_lookup_anycast(struct net *net, u32 type,
u32 instance, u32 *dnode)
{
struct tipc_net *tn = tipc_net(net);
bool legacy = tn->legacy_addr_format;
@ -617,9 +619,15 @@ u32 tipc_nametbl_translate(struct net *net, u32 type, u32 instance, u32 *dnode)
return port;
}
bool tipc_nametbl_lookup(struct net *net, u32 type, u32 instance, u32 scope,
struct list_head *dsts, int *dstcnt, u32 exclude,
bool all)
/* tipc_nametbl_lookup_group(): lookup destinaton(s) in a communication group
* Returns a list of one (== group anycast) or more (== group multicast)
* destination socket/node pairs matching the given address.
* The requester may or may not want to exclude himself from the list.
*/
bool tipc_nametbl_lookup_group(struct net *net, u32 type, u32 instance,
u32 scope, struct list_head *dsts,
int *dstcnt, u32 exclude,
bool mcast)
{
u32 self = tipc_own_addr(net);
struct service_range *sr;
@ -646,7 +654,7 @@ bool tipc_nametbl_lookup(struct net *net, u32 type, u32 instance, u32 scope,
continue;
tipc_dest_push(dsts, p->sk.node, p->sk.ref);
(*dstcnt)++;
if (all)
if (mcast)
continue;
list_move_tail(&p->all_publ, &sr->all_publ);
break;
@ -658,8 +666,14 @@ bool tipc_nametbl_lookup(struct net *net, u32 type, u32 instance, u32 scope,
return !list_empty(dsts);
}
void tipc_nametbl_mc_lookup(struct net *net, u32 type, u32 lower, u32 upper,
u32 scope, bool exact, struct list_head *dports)
/* tipc_nametbl_lookup_mcast_sockets(): look up node local destinaton sockets
* matching the given address
* Used on nodes which have received a multicast/broadcast message
* Returns a list of local sockets
*/
void tipc_nametbl_lookup_mcast_sockets(struct net *net, u32 type, u32 lower,
u32 upper, u32 scope, bool exact,
struct list_head *dports)
{
struct service_range *sr;
struct tipc_service *sc;
@ -682,12 +696,13 @@ void tipc_nametbl_mc_lookup(struct net *net, u32 type, u32 lower, u32 upper,
rcu_read_unlock();
}
/* tipc_nametbl_lookup_dst_nodes - find broadcast destination nodes
* - Creates list of nodes that overlap the given multicast address
* - Determines if any node local destinations overlap
/* tipc_nametbl_lookup_mcast_nodes(): look up all destination nodes matching
* the given address. Used in sending node.
* Used on nodes which are sending out a multicast/broadcast message
* Returns a list of nodes, including own node if applicable
*/
void tipc_nametbl_lookup_dst_nodes(struct net *net, u32 type, u32 lower,
u32 upper, struct tipc_nlist *nodes)
void tipc_nametbl_lookup_mcast_nodes(struct net *net, u32 type, u32 lower,
u32 upper, struct tipc_nlist *nodes)
{
struct service_range *sr;
struct tipc_service *sc;

View File

@ -111,16 +111,19 @@ struct name_table {
int tipc_nl_name_table_dump(struct sk_buff *skb, struct netlink_callback *cb);
u32 tipc_nametbl_translate(struct net *net, u32 type, u32 instance, u32 *node);
void tipc_nametbl_mc_lookup(struct net *net, u32 type, u32 lower, u32 upper,
u32 scope, bool exact, struct list_head *dports);
u32 tipc_nametbl_lookup_anycast(struct net *net, u32 type, u32 instance,
u32 *node);
void tipc_nametbl_lookup_mcast_sockets(struct net *net, u32 type, u32 lower,
u32 upper, u32 scope, bool exact,
struct list_head *dports);
void tipc_nametbl_lookup_mcast_nodes(struct net *net, u32 type, u32 lower,
u32 upper, struct tipc_nlist *nodes);
bool tipc_nametbl_lookup_group(struct net *net, u32 type, u32 instance,
u32 domain, struct list_head *dsts,
int *dstcnt, u32 exclude,
bool all);
void tipc_nametbl_build_group(struct net *net, struct tipc_group *grp,
u32 type, u32 domain);
void tipc_nametbl_lookup_dst_nodes(struct net *net, u32 type, u32 lower,
u32 upper, struct tipc_nlist *nodes);
bool tipc_nametbl_lookup(struct net *net, u32 type, u32 instance, u32 domain,
struct list_head *dsts, int *dstcnt, u32 exclude,
bool all);
struct publication *tipc_nametbl_publish(struct net *net, struct tipc_uaddr *ua,
struct tipc_socket_addr *sk, u32 key);
void tipc_nametbl_withdraw(struct net *net, struct tipc_uaddr *ua,

View File

@ -863,8 +863,8 @@ static int tipc_sendmcast(struct socket *sock, struct tipc_service_range *seq,
/* Lookup destination nodes */
tipc_nlist_init(&dsts, tipc_own_addr(net));
tipc_nametbl_lookup_dst_nodes(net, seq->type, seq->lower,
seq->upper, &dsts);
tipc_nametbl_lookup_mcast_nodes(net, seq->type, seq->lower,
seq->upper, &dsts);
if (!dsts.local && !dsts.remote)
return -EHOSTUNREACH;
@ -1032,8 +1032,9 @@ static int tipc_send_group_anycast(struct socket *sock, struct msghdr *m,
/* Look for a non-congested destination member, if any */
while (1) {
if (!tipc_nametbl_lookup(net, type, inst, scope, &dsts,
&dstcnt, exclude, false))
if (!tipc_nametbl_lookup_group(net, type, inst, scope,
&dsts, &dstcnt, exclude,
false))
return -EHOSTUNREACH;
tipc_dest_pop(&dsts, &node, &port);
cong = tipc_group_cong(tsk->group, node, port, blks,
@ -1179,8 +1180,8 @@ static int tipc_send_group_mcast(struct socket *sock, struct msghdr *m,
scope = msg_lookup_scope(hdr);
exclude = tipc_group_exclude(grp);
if (!tipc_nametbl_lookup(net, type, inst, scope, &dsts,
&dstcnt, exclude, true))
if (!tipc_nametbl_lookup_group(net, type, inst, scope, &dsts,
&dstcnt, exclude, true))
return -EHOSTUNREACH;
if (dstcnt == 1) {
@ -1254,8 +1255,8 @@ void tipc_sk_mcast_rcv(struct net *net, struct sk_buff_head *arrvq,
}
/* Create destination port list: */
tipc_nametbl_mc_lookup(net, type, lower, upper,
scope, exact, &dports);
tipc_nametbl_lookup_mcast_sockets(net, type, lower, upper,
scope, exact, &dports);
/* Clone message per destination */
while (tipc_dest_pop(&dports, NULL, &portid)) {
@ -1485,7 +1486,7 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dlen)
type = dest->addr.name.name.type;
inst = dest->addr.name.name.instance;
dnode = dest->addr.name.domain;
dport = tipc_nametbl_translate(net, type, inst, &dnode);
dport = tipc_nametbl_lookup_anycast(net, type, inst, &dnode);
if (unlikely(!dport && !dnode))
return -EHOSTUNREACH;
} else if (dest->addrtype == TIPC_SOCKET_ADDR) {