diff options
Diffstat (limited to 'net/tipc/node.c')
-rw-r--r-- | net/tipc/node.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/net/tipc/node.c b/net/tipc/node.c index db46e5d1d156..06f642abdf38 100644 --- a/net/tipc/node.c +++ b/net/tipc/node.c | |||
@@ -334,6 +334,33 @@ bool tipc_node_is_up(struct tipc_node *n) | |||
334 | return n->active_links[0]; | 334 | return n->active_links[0]; |
335 | } | 335 | } |
336 | 336 | ||
337 | void tipc_node_check_dest(struct tipc_node *n, struct tipc_bearer *b, | ||
338 | bool *link_up, bool *addr_match, | ||
339 | struct tipc_media_addr *maddr) | ||
340 | { | ||
341 | struct tipc_link *l = n->links[b->identity].link; | ||
342 | struct tipc_media_addr *curr = &n->links[b->identity].maddr; | ||
343 | |||
344 | *link_up = l && tipc_link_is_up(l); | ||
345 | *addr_match = l && !memcmp(curr, maddr, sizeof(*maddr)); | ||
346 | } | ||
347 | |||
348 | bool tipc_node_update_dest(struct tipc_node *n, struct tipc_bearer *b, | ||
349 | struct tipc_media_addr *maddr) | ||
350 | { | ||
351 | struct tipc_link *l = n->links[b->identity].link; | ||
352 | struct tipc_media_addr *curr = &n->links[b->identity].maddr; | ||
353 | |||
354 | if (!l) | ||
355 | l = tipc_link_create(n, b, maddr); | ||
356 | if (!l) | ||
357 | return false; | ||
358 | memcpy(&l->media_addr, maddr, sizeof(*maddr)); | ||
359 | memcpy(curr, maddr, sizeof(*maddr)); | ||
360 | tipc_link_reset(l); | ||
361 | return true; | ||
362 | } | ||
363 | |||
337 | void tipc_node_attach_link(struct tipc_node *n_ptr, struct tipc_link *l_ptr) | 364 | void tipc_node_attach_link(struct tipc_node *n_ptr, struct tipc_link *l_ptr) |
338 | { | 365 | { |
339 | n_ptr->links[l_ptr->bearer_id].link = l_ptr; | 366 | n_ptr->links[l_ptr->bearer_id].link = l_ptr; |