aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
authorJon Maloy <jon.maloy@ericsson.com>2018-03-15 11:48:51 -0400
committerDavid S. Miller <davem@davemloft.net>2018-03-17 17:11:46 -0400
commit928df1880e24bcd47d6359ff86df24db3dfba3c3 (patch)
treeb191aaca13f510bfd7409089d47f5346403a68e3 /net/tipc
parent4f1aec01fcb84faf79bb6fabb82a5c850b186e03 (diff)
tipc: obsolete TIPC_ZONE_SCOPE
Publications for TIPC_CLUSTER_SCOPE and TIPC_ZONE_SCOPE are in all aspects handled the same way, both on the publishing node and on the receiving nodes. Despite previous ambitions to the contrary, this is never going to change, so we take the conseqeunce of this and obsolete TIPC_ZONE_SCOPE and related macros/functions. Whenever a user is doing a bind() or a sendmsg() attempt using ZONE_SCOPE we translate this internally to CLUSTER_SCOPE, while we remain compatible with users and remote nodes still using ZONE_SCOPE. Furthermore, the non-formalized scope value 0 has always been permitted for use during lookup, with the same meaning as ZONE_SCOPE/CLUSTER_SCOPE. We now permit it even as binding scope, but for compatibility reasons we choose to not change the value of TIPC_CLUSTER_SCOPE. 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>
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/addr.c31
-rw-r--r--net/tipc/addr.h10
-rw-r--r--net/tipc/msg.c2
-rw-r--r--net/tipc/name_table.c3
-rw-r--r--net/tipc/net.c2
-rw-r--r--net/tipc/socket.c15
6 files changed, 23 insertions, 40 deletions
diff --git a/net/tipc/addr.c b/net/tipc/addr.c
index 48fd3b5a73fb..97cd857d7f43 100644
--- a/net/tipc/addr.c
+++ b/net/tipc/addr.c
@@ -64,23 +64,6 @@ int in_own_node(struct net *net, u32 addr)
64} 64}
65 65
66/** 66/**
67 * addr_domain - convert 2-bit scope value to equivalent message lookup domain
68 *
69 * Needed when address of a named message must be looked up a second time
70 * after a network hop.
71 */
72u32 addr_domain(struct net *net, u32 sc)
73{
74 struct tipc_net *tn = net_generic(net, tipc_net_id);
75
76 if (likely(sc == TIPC_NODE_SCOPE))
77 return tn->own_addr;
78 if (sc == TIPC_CLUSTER_SCOPE)
79 return tipc_cluster_mask(tn->own_addr);
80 return tipc_zone_mask(tn->own_addr);
81}
82
83/**
84 * tipc_addr_domain_valid - validates a network domain address 67 * tipc_addr_domain_valid - validates a network domain address
85 * 68 *
86 * Accepts <Z.C.N>, <Z.C.0>, <Z.0.0>, and <0.0.0>, 69 * Accepts <Z.C.N>, <Z.C.0>, <Z.0.0>, and <0.0.0>,
@@ -124,20 +107,6 @@ int tipc_in_scope(u32 domain, u32 addr)
124 return 0; 107 return 0;
125} 108}
126 109
127/**
128 * tipc_addr_scope - convert message lookup domain to a 2-bit scope value
129 */
130int tipc_addr_scope(u32 domain)
131{
132 if (likely(!domain))
133 return TIPC_ZONE_SCOPE;
134 if (tipc_node(domain))
135 return TIPC_NODE_SCOPE;
136 if (tipc_cluster(domain))
137 return TIPC_CLUSTER_SCOPE;
138 return TIPC_ZONE_SCOPE;
139}
140
141char *tipc_addr_string_fill(char *string, u32 addr) 110char *tipc_addr_string_fill(char *string, u32 addr)
142{ 111{
143 snprintf(string, 16, "<%u.%u.%u>", 112 snprintf(string, 16, "<%u.%u.%u>",
diff --git a/net/tipc/addr.h b/net/tipc/addr.h
index bebb347803ce..2ecf5a5d40dd 100644
--- a/net/tipc/addr.h
+++ b/net/tipc/addr.h
@@ -60,6 +60,16 @@ static inline u32 tipc_cluster_mask(u32 addr)
60 return addr & TIPC_ZONE_CLUSTER_MASK; 60 return addr & TIPC_ZONE_CLUSTER_MASK;
61} 61}
62 62
63static inline int tipc_node2scope(u32 node)
64{
65 return node ? TIPC_NODE_SCOPE : TIPC_CLUSTER_SCOPE;
66}
67
68static inline int tipc_scope2node(struct net *net, int sc)
69{
70 return sc != TIPC_NODE_SCOPE ? 0 : tipc_own_addr(net);
71}
72
63u32 tipc_own_addr(struct net *net); 73u32 tipc_own_addr(struct net *net);
64int in_own_cluster(struct net *net, u32 addr); 74int in_own_cluster(struct net *net, u32 addr);
65int in_own_cluster_exact(struct net *net, u32 addr); 75int in_own_cluster_exact(struct net *net, u32 addr);
diff --git a/net/tipc/msg.c b/net/tipc/msg.c
index 4e1c6f6450bb..b6c45dccba3d 100644
--- a/net/tipc/msg.c
+++ b/net/tipc/msg.c
@@ -580,7 +580,7 @@ bool tipc_msg_lookup_dest(struct net *net, struct sk_buff *skb, int *err)
580 msg = buf_msg(skb); 580 msg = buf_msg(skb);
581 if (msg_reroute_cnt(msg)) 581 if (msg_reroute_cnt(msg))
582 return false; 582 return false;
583 dnode = addr_domain(net, msg_lookup_scope(msg)); 583 dnode = tipc_scope2node(net, msg_lookup_scope(msg));
584 dport = tipc_nametbl_translate(net, msg_nametype(msg), 584 dport = tipc_nametbl_translate(net, msg_nametype(msg),
585 msg_nameinst(msg), &dnode); 585 msg_nameinst(msg), &dnode);
586 if (!dport) 586 if (!dport)
diff --git a/net/tipc/name_table.c b/net/tipc/name_table.c
index e01c9c691ba2..6772390fcb00 100644
--- a/net/tipc/name_table.c
+++ b/net/tipc/name_table.c
@@ -473,8 +473,7 @@ struct publication *tipc_nametbl_insert_publ(struct net *net, u32 type,
473 struct name_seq *seq = nametbl_find_seq(net, type); 473 struct name_seq *seq = nametbl_find_seq(net, type);
474 int index = hash(type); 474 int index = hash(type);
475 475
476 if ((scope < TIPC_ZONE_SCOPE) || (scope > TIPC_NODE_SCOPE) || 476 if (scope > TIPC_NODE_SCOPE || lower > upper) {
477 (lower > upper)) {
478 pr_debug("Failed to publish illegal {%u,%u,%u} with scope %u\n", 477 pr_debug("Failed to publish illegal {%u,%u,%u} with scope %u\n",
479 type, lower, upper, scope); 478 type, lower, upper, scope);
480 return NULL; 479 return NULL;
diff --git a/net/tipc/net.c b/net/tipc/net.c
index 1a2fde0d6f61..5c4c4405b78e 100644
--- a/net/tipc/net.c
+++ b/net/tipc/net.c
@@ -118,7 +118,7 @@ int tipc_net_start(struct net *net, u32 addr)
118 tipc_sk_reinit(net); 118 tipc_sk_reinit(net);
119 119
120 tipc_nametbl_publish(net, TIPC_CFG_SRV, tn->own_addr, tn->own_addr, 120 tipc_nametbl_publish(net, TIPC_CFG_SRV, tn->own_addr, tn->own_addr,
121 TIPC_ZONE_SCOPE, 0, tn->own_addr); 121 TIPC_CLUSTER_SCOPE, 0, tn->own_addr);
122 122
123 pr_info("Started in network mode\n"); 123 pr_info("Started in network mode\n");
124 pr_info("Own node address %s, network identity %u\n", 124 pr_info("Own node address %s, network identity %u\n",
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
index 8b04e601311c..910d3827f499 100644
--- a/net/tipc/socket.c
+++ b/net/tipc/socket.c
@@ -644,7 +644,7 @@ static int tipc_bind(struct socket *sock, struct sockaddr *uaddr,
644 goto exit; 644 goto exit;
645 } 645 }
646 646
647 res = (addr->scope > 0) ? 647 res = (addr->scope >= 0) ?
648 tipc_sk_publish(tsk, addr->scope, &addr->addr.nameseq) : 648 tipc_sk_publish(tsk, addr->scope, &addr->addr.nameseq) :
649 tipc_sk_withdraw(tsk, -addr->scope, &addr->addr.nameseq); 649 tipc_sk_withdraw(tsk, -addr->scope, &addr->addr.nameseq);
650exit: 650exit:
@@ -1280,8 +1280,8 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dlen)
1280 struct tipc_msg *hdr = &tsk->phdr; 1280 struct tipc_msg *hdr = &tsk->phdr;
1281 struct tipc_name_seq *seq; 1281 struct tipc_name_seq *seq;
1282 struct sk_buff_head pkts; 1282 struct sk_buff_head pkts;
1283 u32 type, inst, domain;
1284 u32 dnode, dport; 1283 u32 dnode, dport;
1284 u32 type, inst;
1285 int mtu, rc; 1285 int mtu, rc;
1286 1286
1287 if (unlikely(dlen > TIPC_MAX_USER_MSG_SIZE)) 1287 if (unlikely(dlen > TIPC_MAX_USER_MSG_SIZE))
@@ -1332,13 +1332,12 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dlen)
1332 if (dest->addrtype == TIPC_ADDR_NAME) { 1332 if (dest->addrtype == TIPC_ADDR_NAME) {
1333 type = dest->addr.name.name.type; 1333 type = dest->addr.name.name.type;
1334 inst = dest->addr.name.name.instance; 1334 inst = dest->addr.name.name.instance;
1335 domain = dest->addr.name.domain; 1335 dnode = dest->addr.name.domain;
1336 dnode = domain;
1337 msg_set_type(hdr, TIPC_NAMED_MSG); 1336 msg_set_type(hdr, TIPC_NAMED_MSG);
1338 msg_set_hdr_sz(hdr, NAMED_H_SIZE); 1337 msg_set_hdr_sz(hdr, NAMED_H_SIZE);
1339 msg_set_nametype(hdr, type); 1338 msg_set_nametype(hdr, type);
1340 msg_set_nameinst(hdr, inst); 1339 msg_set_nameinst(hdr, inst);
1341 msg_set_lookup_scope(hdr, tipc_addr_scope(domain)); 1340 msg_set_lookup_scope(hdr, tipc_node2scope(dnode));
1342 dport = tipc_nametbl_translate(net, type, inst, &dnode); 1341 dport = tipc_nametbl_translate(net, type, inst, &dnode);
1343 msg_set_destnode(hdr, dnode); 1342 msg_set_destnode(hdr, dnode);
1344 msg_set_destport(hdr, dport); 1343 msg_set_destport(hdr, dport);
@@ -2592,6 +2591,9 @@ static int tipc_sk_publish(struct tipc_sock *tsk, uint scope,
2592 struct publication *publ; 2591 struct publication *publ;
2593 u32 key; 2592 u32 key;
2594 2593
2594 if (scope != TIPC_NODE_SCOPE)
2595 scope = TIPC_CLUSTER_SCOPE;
2596
2595 if (tipc_sk_connected(sk)) 2597 if (tipc_sk_connected(sk))
2596 return -EINVAL; 2598 return -EINVAL;
2597 key = tsk->portid + tsk->pub_count + 1; 2599 key = tsk->portid + tsk->pub_count + 1;
@@ -2617,6 +2619,9 @@ static int tipc_sk_withdraw(struct tipc_sock *tsk, uint scope,
2617 struct publication *safe; 2619 struct publication *safe;
2618 int rc = -EINVAL; 2620 int rc = -EINVAL;
2619 2621
2622 if (scope != TIPC_NODE_SCOPE)
2623 scope = TIPC_CLUSTER_SCOPE;
2624
2620 list_for_each_entry_safe(publ, safe, &tsk->publications, pport_list) { 2625 list_for_each_entry_safe(publ, safe, &tsk->publications, pport_list) {
2621 if (seq) { 2626 if (seq) {
2622 if (publ->scope != scope) 2627 if (publ->scope != scope)