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); |
