Commit 691a6207 authored by Allan Stephens's avatar Allan Stephens Committed by Paul Gortmaker

tipc: Enhance sending of discovery object link request messages

Augments TIPC's discovery object to send its initial neighbor discovery
request message as soon as the associated bearer is created, rather than
waiting for its first periodic timeout to occur, thereby speeding up the
discovery process. Also adds a check to suppress the initial request or
subsequent requests if the bearer is blocked at the time the request is
scheduled for transmission.
Signed-off-by: default avatarAllan Stephens <Allan.Stephens@windriver.com>
Signed-off-by: default avatarPaul Gortmaker <paul.gortmaker@windriver.com>
parent 3a777ff8
...@@ -240,6 +240,17 @@ void tipc_disc_update_link_req(struct link_req *req) ...@@ -240,6 +240,17 @@ void tipc_disc_update_link_req(struct link_req *req)
} }
} }
/**
* disc_send_msg - send link setup request message
* @req: ptr to link request structure
*/
static void disc_send_msg(struct link_req *req)
{
if (!req->bearer->blocked)
tipc_bearer_send(req->bearer, req->buf, &req->dest);
}
/** /**
* disc_timeout - send a periodic link setup request * disc_timeout - send a periodic link setup request
* @req: ptr to link request structure * @req: ptr to link request structure
...@@ -251,7 +262,7 @@ static void disc_timeout(struct link_req *req) ...@@ -251,7 +262,7 @@ static void disc_timeout(struct link_req *req)
{ {
spin_lock_bh(&req->bearer->lock); spin_lock_bh(&req->bearer->lock);
req->bearer->media->send_msg(req->buf, req->bearer, &req->dest); disc_send_msg(req);
if ((req->timer_intv == TIPC_LINK_REQ_SLOW) || if ((req->timer_intv == TIPC_LINK_REQ_SLOW) ||
(req->timer_intv == TIPC_LINK_REQ_FAST)) { (req->timer_intv == TIPC_LINK_REQ_FAST)) {
...@@ -300,6 +311,7 @@ int tipc_disc_create(struct tipc_bearer *b_ptr, ...@@ -300,6 +311,7 @@ int tipc_disc_create(struct tipc_bearer *b_ptr,
k_init_timer(&req->timer, (Handler)disc_timeout, (unsigned long)req); k_init_timer(&req->timer, (Handler)disc_timeout, (unsigned long)req);
k_start_timer(&req->timer, req->timer_intv); k_start_timer(&req->timer, req->timer_intv);
b_ptr->link_req = req; b_ptr->link_req = req;
disc_send_msg(req);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment