aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/tipc/bearer.c11
-rw-r--r--net/tipc/discover.c7
2 files changed, 14 insertions, 4 deletions
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c
index 411719feb803..f7c29af4ab81 100644
--- a/net/tipc/bearer.c
+++ b/net/tipc/bearer.c
@@ -493,8 +493,15 @@ int tipc_enable_bearer(const char *name, u32 disc_domain, u32 priority)
493 warn("Bearer <%s> rejected, illegal name\n", name); 493 warn("Bearer <%s> rejected, illegal name\n", name);
494 return -EINVAL; 494 return -EINVAL;
495 } 495 }
496 if (!tipc_addr_domain_valid(disc_domain) || 496 if (tipc_addr_domain_valid(disc_domain) &&
497 !tipc_in_scope(disc_domain, tipc_own_addr)) { 497 (disc_domain != tipc_own_addr)) {
498 if (tipc_in_scope(disc_domain, tipc_own_addr)) {
499 disc_domain = tipc_own_addr & TIPC_CLUSTER_MASK;
500 res = 0; /* accept any node in own cluster */
501 } else if (in_own_cluster(disc_domain))
502 res = 0; /* accept specified node in own cluster */
503 }
504 if (res) {
498 warn("Bearer <%s> rejected, illegal discovery domain\n", name); 505 warn("Bearer <%s> rejected, illegal discovery domain\n", name);
499 return -EINVAL; 506 return -EINVAL;
500 } 507 }
diff --git a/net/tipc/discover.c b/net/tipc/discover.c
index 491eff56b9da..d2163bd99e59 100644
--- a/net/tipc/discover.c
+++ b/net/tipc/discover.c
@@ -52,6 +52,7 @@
52 * struct link_req - information about an ongoing link setup request 52 * struct link_req - information about an ongoing link setup request
53 * @bearer: bearer issuing requests 53 * @bearer: bearer issuing requests
54 * @dest: destination address for request messages 54 * @dest: destination address for request messages
55 * @domain: network domain to which links can be established
55 * @buf: request message to be (repeatedly) sent 56 * @buf: request message to be (repeatedly) sent
56 * @timer: timer governing period between requests 57 * @timer: timer governing period between requests
57 * @timer_intv: current interval between requests (in ms) 58 * @timer_intv: current interval between requests (in ms)
@@ -59,6 +60,7 @@
59struct link_req { 60struct link_req {
60 struct tipc_bearer *bearer; 61 struct tipc_bearer *bearer;
61 struct tipc_media_addr dest; 62 struct tipc_media_addr dest;
63 u32 domain;
62 struct sk_buff *buf; 64 struct sk_buff *buf;
63 struct timer_list timer; 65 struct timer_list timer;
64 unsigned int timer_intv; 66 unsigned int timer_intv;
@@ -147,7 +149,7 @@ void tipc_disc_recv_msg(struct sk_buff *buf, struct tipc_bearer *b_ptr)
147 } 149 }
148 if (!tipc_in_scope(dest, tipc_own_addr)) 150 if (!tipc_in_scope(dest, tipc_own_addr))
149 return; 151 return;
150 if (!in_own_cluster(orig)) 152 if (!tipc_in_scope(b_ptr->link_req->domain, orig))
151 return; 153 return;
152 154
153 /* Locate structure corresponding to requesting node */ 155 /* Locate structure corresponding to requesting node */
@@ -287,7 +289,7 @@ static void disc_timeout(struct link_req *req)
287 * tipc_disc_init_link_req - start sending periodic link setup requests 289 * tipc_disc_init_link_req - start sending periodic link setup requests
288 * @b_ptr: ptr to bearer issuing requests 290 * @b_ptr: ptr to bearer issuing requests
289 * @dest: destination address for request messages 291 * @dest: destination address for request messages
290 * @dest_domain: network domain of node(s) which should respond to message 292 * @dest_domain: network domain to which links can be established
291 * 293 *
292 * Returns pointer to link request structure, or NULL if unable to create. 294 * Returns pointer to link request structure, or NULL if unable to create.
293 */ 295 */
@@ -310,6 +312,7 @@ struct link_req *tipc_disc_init_link_req(struct tipc_bearer *b_ptr,
310 312
311 memcpy(&req->dest, dest, sizeof(*dest)); 313 memcpy(&req->dest, dest, sizeof(*dest));
312 req->bearer = b_ptr; 314 req->bearer = b_ptr;
315 req->domain = dest_domain;
313 req->timer_intv = TIPC_LINK_REQ_INIT; 316 req->timer_intv = TIPC_LINK_REQ_INIT;
314 k_init_timer(&req->timer, (Handler)disc_timeout, (unsigned long)req); 317 k_init_timer(&req->timer, (Handler)disc_timeout, (unsigned long)req);
315 k_start_timer(&req->timer, req->timer_intv); 318 k_start_timer(&req->timer, req->timer_intv);