diff options
| -rw-r--r-- | net/tipc/bearer.c | 4 | ||||
| -rw-r--r-- | net/tipc/discover.c | 32 | ||||
| -rw-r--r-- | net/tipc/discover.h | 3 |
3 files changed, 31 insertions, 8 deletions
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c index 5fcd1c1214fd..85209eadfae6 100644 --- a/net/tipc/bearer.c +++ b/net/tipc/bearer.c | |||
| @@ -344,15 +344,15 @@ struct sk_buff *tipc_bearer_get_names(void) | |||
| 344 | void tipc_bearer_add_dest(struct tipc_bearer *b_ptr, u32 dest) | 344 | void tipc_bearer_add_dest(struct tipc_bearer *b_ptr, u32 dest) |
| 345 | { | 345 | { |
| 346 | tipc_nmap_add(&b_ptr->nodes, dest); | 346 | tipc_nmap_add(&b_ptr->nodes, dest); |
| 347 | tipc_disc_update_link_req(b_ptr->link_req); | ||
| 348 | tipc_bcbearer_sort(); | 347 | tipc_bcbearer_sort(); |
| 348 | tipc_disc_add_dest(b_ptr->link_req); | ||
| 349 | } | 349 | } |
| 350 | 350 | ||
| 351 | void tipc_bearer_remove_dest(struct tipc_bearer *b_ptr, u32 dest) | 351 | void tipc_bearer_remove_dest(struct tipc_bearer *b_ptr, u32 dest) |
| 352 | { | 352 | { |
| 353 | tipc_nmap_remove(&b_ptr->nodes, dest); | 353 | tipc_nmap_remove(&b_ptr->nodes, dest); |
| 354 | tipc_disc_update_link_req(b_ptr->link_req); | ||
| 355 | tipc_bcbearer_sort(); | 354 | tipc_bcbearer_sort(); |
| 355 | tipc_disc_remove_dest(b_ptr->link_req); | ||
| 356 | } | 356 | } |
| 357 | 357 | ||
| 358 | /* | 358 | /* |
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); |
diff --git a/net/tipc/discover.h b/net/tipc/discover.h index d6e44e3dcdbc..a3af595b86cb 100644 --- a/net/tipc/discover.h +++ b/net/tipc/discover.h | |||
| @@ -42,7 +42,8 @@ struct link_req; | |||
| 42 | int tipc_disc_create(struct tipc_bearer *b_ptr, struct tipc_media_addr *dest, | 42 | int tipc_disc_create(struct tipc_bearer *b_ptr, struct tipc_media_addr *dest, |
| 43 | u32 dest_domain); | 43 | u32 dest_domain); |
| 44 | void tipc_disc_delete(struct link_req *req); | 44 | void tipc_disc_delete(struct link_req *req); |
| 45 | void tipc_disc_update_link_req(struct link_req *req); | 45 | void tipc_disc_add_dest(struct link_req *req); |
| 46 | void tipc_disc_remove_dest(struct link_req *req); | ||
| 46 | void tipc_disc_recv_msg(struct sk_buff *buf, struct tipc_bearer *b_ptr); | 47 | void tipc_disc_recv_msg(struct sk_buff *buf, struct tipc_bearer *b_ptr); |
| 47 | 48 | ||
| 48 | #endif | 49 | #endif |
