diff options
Diffstat (limited to 'net/tipc/discover.c')
-rw-r--r-- | net/tipc/discover.c | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/net/tipc/discover.c b/net/tipc/discover.c index dba47673124d..3cb232d1f5dc 100644 --- a/net/tipc/discover.c +++ b/net/tipc/discover.c | |||
@@ -53,6 +53,7 @@ | |||
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 | * @domain: network domain to which links can be established |
56 | * @num_nodes: number of nodes currently discovered (i.e. with an active link) | ||
56 | * @buf: request message to be (repeatedly) sent | 57 | * @buf: request message to be (repeatedly) sent |
57 | * @timer: timer governing period between requests | 58 | * @timer: timer governing period between requests |
58 | * @timer_intv: current interval between requests (in ms) | 59 | * @timer_intv: current interval between requests (in ms) |
@@ -61,6 +62,7 @@ struct link_req { | |||
61 | struct tipc_bearer *bearer; | 62 | struct tipc_bearer *bearer; |
62 | struct tipc_media_addr dest; | 63 | struct tipc_media_addr dest; |
63 | u32 domain; | 64 | u32 domain; |
65 | int num_nodes; | ||
64 | struct sk_buff *buf; | 66 | struct sk_buff *buf; |
65 | struct timer_list timer; | 67 | struct timer_list timer; |
66 | unsigned int timer_intv; | 68 | unsigned int timer_intv; |
@@ -216,15 +218,12 @@ void tipc_disc_recv_msg(struct sk_buff *buf, struct tipc_bearer *b_ptr) | |||
216 | } | 218 | } |
217 | 219 | ||
218 | /** | 220 | /** |
219 | * tipc_disc_update_link_req - update frequency of periodic link setup requests | 221 | * disc_update - update frequency of periodic link setup requests |
220 | * @req: ptr to link request structure | 222 | * @req: ptr to link request structure |
221 | */ | 223 | */ |
222 | 224 | ||
223 | void tipc_disc_update_link_req(struct link_req *req) | 225 | static void disc_update(struct link_req *req) |
224 | { | 226 | { |
225 | if (!req) | ||
226 | return; | ||
227 | |||
228 | if (req->timer_intv == TIPC_LINK_REQ_SLOW) { | 227 | if (req->timer_intv == TIPC_LINK_REQ_SLOW) { |
229 | if (!req->bearer->nodes.count) { | 228 | if (!req->bearer->nodes.count) { |
230 | req->timer_intv = TIPC_LINK_REQ_FAST; | 229 | req->timer_intv = TIPC_LINK_REQ_FAST; |
@@ -241,6 +240,28 @@ void tipc_disc_update_link_req(struct link_req *req) | |||
241 | } | 240 | } |
242 | 241 | ||
243 | /** | 242 | /** |
243 | * tipc_disc_add_dest - increment set of discovered nodes | ||
244 | * @req: ptr to link request structure | ||
245 | */ | ||
246 | |||
247 | void tipc_disc_add_dest(struct link_req *req) | ||
248 | { | ||
249 | req->num_nodes++; | ||
250 | disc_update(req); | ||
251 | } | ||
252 | |||
253 | /** | ||
254 | * tipc_disc_remove_dest - decrement set of discovered nodes | ||
255 | * @req: ptr to link request structure | ||
256 | */ | ||
257 | |||
258 | void tipc_disc_remove_dest(struct link_req *req) | ||
259 | { | ||
260 | req->num_nodes--; | ||
261 | disc_update(req); | ||
262 | } | ||
263 | |||
264 | /** | ||
244 | * disc_send_msg - send link setup request message | 265 | * disc_send_msg - send link setup request message |
245 | * @req: ptr to link request structure | 266 | * @req: ptr to link request structure |
246 | */ | 267 | */ |
@@ -307,6 +328,7 @@ int tipc_disc_create(struct tipc_bearer *b_ptr, | |||
307 | memcpy(&req->dest, dest, sizeof(*dest)); | 328 | memcpy(&req->dest, dest, sizeof(*dest)); |
308 | req->bearer = b_ptr; | 329 | req->bearer = b_ptr; |
309 | req->domain = dest_domain; | 330 | req->domain = dest_domain; |
331 | req->num_nodes = 0; | ||
310 | req->timer_intv = TIPC_LINK_REQ_INIT; | 332 | req->timer_intv = TIPC_LINK_REQ_INIT; |
311 | k_init_timer(&req->timer, (Handler)disc_timeout, (unsigned long)req); | 333 | k_init_timer(&req->timer, (Handler)disc_timeout, (unsigned long)req); |
312 | k_start_timer(&req->timer, req->timer_intv); | 334 | k_start_timer(&req->timer, req->timer_intv); |