diff options
-rw-r--r-- | net/tipc/bearer.c | 11 | ||||
-rw-r--r-- | net/tipc/discover.c | 7 |
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 @@ | |||
59 | struct link_req { | 60 | struct 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); |