warn("Bearer <%s> rejected, illegal name\n", name);
                return -EINVAL;
        }
-       if (!tipc_addr_domain_valid(disc_domain) ||
-           !tipc_in_scope(disc_domain, tipc_own_addr)) {
+       if (tipc_addr_domain_valid(disc_domain) &&
+           (disc_domain != tipc_own_addr)) {
+               if (tipc_in_scope(disc_domain, tipc_own_addr)) {
+                       disc_domain = tipc_own_addr & TIPC_CLUSTER_MASK;
+                       res = 0;   /* accept any node in own cluster */
+               } else if (in_own_cluster(disc_domain))
+                       res = 0;   /* accept specified node in own cluster */
+       }
+       if (res) {
                warn("Bearer <%s> rejected, illegal discovery domain\n", name);
                return -EINVAL;
        }
 
  * struct link_req - information about an ongoing link setup request
  * @bearer: bearer issuing requests
  * @dest: destination address for request messages
+ * @domain: network domain to which links can be established
  * @buf: request message to be (repeatedly) sent
  * @timer: timer governing period between requests
  * @timer_intv: current interval between requests (in ms)
 struct link_req {
        struct tipc_bearer *bearer;
        struct tipc_media_addr dest;
+       u32 domain;
        struct sk_buff *buf;
        struct timer_list timer;
        unsigned int timer_intv;
        }
        if (!tipc_in_scope(dest, tipc_own_addr))
                return;
-       if (!in_own_cluster(orig))
+       if (!tipc_in_scope(b_ptr->link_req->domain, orig))
                return;
 
        /* Locate structure corresponding to requesting node */
  * tipc_disc_init_link_req - start sending periodic link setup requests
  * @b_ptr: ptr to bearer issuing requests
  * @dest: destination address for request messages
- * @dest_domain: network domain of node(s) which should respond to message
+ * @dest_domain: network domain to which links can be established
  *
  * Returns pointer to link request structure, or NULL if unable to create.
  */
 
        memcpy(&req->dest, dest, sizeof(*dest));
        req->bearer = b_ptr;
+       req->domain = dest_domain;
        req->timer_intv = TIPC_LINK_REQ_INIT;
        k_init_timer(&req->timer, (Handler)disc_timeout, (unsigned long)req);
        k_start_timer(&req->timer, req->timer_intv);