• Home
  • Raw
  • Download

Lines Matching refs:n

176 static void __tipc_node_link_down(struct tipc_node *n, int *bearer_id,
179 static void tipc_node_link_down(struct tipc_node *n, int bearer_id,
181 static void node_lost_contact(struct tipc_node *n, struct sk_buff_head *inputq);
184 static void tipc_node_fsm_evt(struct tipc_node *n, int evt);
187 static bool node_is_up(struct tipc_node *n);
197 static struct tipc_link *node_active_link(struct tipc_node *n, int sel) in node_active_link() argument
199 int bearer_id = n->active_links[sel & 1]; in node_active_link()
204 return n->links[bearer_id].link; in node_active_link()
209 struct tipc_node *n; in tipc_node_get_mtu() local
213 n = tipc_node_find(net, addr); in tipc_node_get_mtu()
214 if (unlikely(!n)) in tipc_node_get_mtu()
220 if (n->peer_net && connected) { in tipc_node_get_mtu()
221 tipc_node_put(n); in tipc_node_get_mtu()
225 bearer_id = n->active_links[sel & 1]; in tipc_node_get_mtu()
227 mtu = n->links[bearer_id].mtu; in tipc_node_get_mtu()
228 tipc_node_put(n); in tipc_node_get_mtu()
235 struct tipc_node *n; in tipc_node_get_id() local
244 n = tipc_node_find(net, addr); in tipc_node_get_id()
245 if (!n) in tipc_node_get_id()
248 memcpy(id, &n->peer_id, TIPC_NODEID_LEN); in tipc_node_get_id()
249 tipc_node_put(n); in tipc_node_get_id()
255 struct tipc_node *n; in tipc_node_get_capabilities() local
258 n = tipc_node_find(net, addr); in tipc_node_get_capabilities()
259 if (unlikely(!n)) in tipc_node_get_capabilities()
261 caps = n->capabilities; in tipc_node_get_capabilities()
262 tipc_node_put(n); in tipc_node_get_capabilities()
294 struct tipc_node *n; in tipc_node_crypto_rx_by_addr() local
296 n = tipc_node_find(net, addr); in tipc_node_crypto_rx_by_addr()
297 return (n) ? n->crypto_rx : NULL; in tipc_node_crypto_rx_by_addr()
303 struct tipc_node *n = container_of(rp, struct tipc_node, rcu); in tipc_node_free() local
306 tipc_crypto_stop(&n->crypto_rx); in tipc_node_free()
308 kfree(n); in tipc_node_free()
313 struct tipc_node *n = container_of(kref, struct tipc_node, kref); in tipc_node_kref_release() local
315 kfree(n->bc_entry.link); in tipc_node_kref_release()
316 call_rcu(&n->rcu, tipc_node_free); in tipc_node_kref_release()
357 struct tipc_node *n; in tipc_node_find_by_id() local
361 list_for_each_entry_rcu(n, &tn->node_list, list) { in tipc_node_find_by_id()
362 read_lock_bh(&n->lock); in tipc_node_find_by_id()
363 if (!memcmp(id, n->peer_id, 16) && in tipc_node_find_by_id()
364 kref_get_unless_zero(&n->kref)) in tipc_node_find_by_id()
366 read_unlock_bh(&n->lock); in tipc_node_find_by_id()
371 return found ? n : NULL; in tipc_node_find_by_id()
374 static void tipc_node_read_lock(struct tipc_node *n) in tipc_node_read_lock() argument
375 __acquires(n->lock) in tipc_node_read_lock()
377 read_lock_bh(&n->lock); in tipc_node_read_lock()
380 static void tipc_node_read_unlock(struct tipc_node *n) in tipc_node_read_unlock() argument
381 __releases(n->lock) in tipc_node_read_unlock()
383 read_unlock_bh(&n->lock); in tipc_node_read_unlock()
386 static void tipc_node_write_lock(struct tipc_node *n) in tipc_node_write_lock() argument
387 __acquires(n->lock) in tipc_node_write_lock()
389 write_lock_bh(&n->lock); in tipc_node_write_lock()
392 static void tipc_node_write_unlock_fast(struct tipc_node *n) in tipc_node_write_unlock_fast() argument
393 __releases(n->lock) in tipc_node_write_unlock_fast()
395 write_unlock_bh(&n->lock); in tipc_node_write_unlock_fast()
398 static void tipc_node_write_unlock(struct tipc_node *n) in tipc_node_write_unlock() argument
399 __releases(n->lock) in tipc_node_write_unlock()
402 struct net *net = n->net; in tipc_node_write_unlock()
403 u32 flags = n->action_flags; in tipc_node_write_unlock()
409 write_unlock_bh(&n->lock); in tipc_node_write_unlock()
414 TIPC_LINK_STATE, n->addr, n->addr); in tipc_node_write_unlock()
415 sk.ref = n->link_id; in tipc_node_write_unlock()
417 node = n->addr; in tipc_node_write_unlock()
418 bearer_id = n->link_id & 0xffff; in tipc_node_write_unlock()
419 publ_list = &n->publ_list; in tipc_node_write_unlock()
421 n->action_flags &= ~(TIPC_NOTIFY_NODE_DOWN | TIPC_NOTIFY_NODE_UP | in tipc_node_write_unlock()
424 write_unlock_bh(&n->lock); in tipc_node_write_unlock()
427 tipc_publ_notify(net, publ_list, node, n->capabilities); in tipc_node_write_unlock()
430 tipc_named_node_up(net, node, n->capabilities); in tipc_node_write_unlock()
442 static void tipc_node_assign_peer_net(struct tipc_node *n, u32 hash_mixes) in tipc_node_assign_peer_net() argument
444 int net_id = tipc_netid(n->net); in tipc_node_assign_peer_net()
449 if (n->peer_net) in tipc_node_assign_peer_net()
459 if (memcmp(n->peer_id, tn_peer->node_id, NODE_ID_LEN)) in tipc_node_assign_peer_net()
464 n->peer_net = tmp; in tipc_node_assign_peer_net()
465 n->peer_hash_mix = hash_mixes; in tipc_node_assign_peer_net()
476 struct tipc_node *n, *temp_node; in tipc_node_create() local
482 n = tipc_node_find(net, addr) ?: in tipc_node_create()
484 if (n) { in tipc_node_create()
485 if (!n->preliminary) in tipc_node_create()
490 tipc_node_write_lock(n); in tipc_node_create()
493 n->capabilities, &n->bc_entry.inputq1, in tipc_node_create()
494 &n->bc_entry.namedq, snd_l, &n->bc_entry.link)) { in tipc_node_create()
496 tipc_node_write_unlock_fast(n); in tipc_node_create()
497 tipc_node_put(n); in tipc_node_create()
498 n = NULL; in tipc_node_create()
501 n->preliminary = false; in tipc_node_create()
502 n->addr = addr; in tipc_node_create()
503 hlist_del_rcu(&n->hash); in tipc_node_create()
504 hlist_add_head_rcu(&n->hash, in tipc_node_create()
506 list_del_rcu(&n->list); in tipc_node_create()
508 if (n->addr < temp_node->addr) in tipc_node_create()
511 list_add_tail_rcu(&n->list, &temp_node->list); in tipc_node_create()
512 tipc_node_write_unlock_fast(n); in tipc_node_create()
515 if (n->peer_hash_mix ^ hash_mixes) in tipc_node_create()
516 tipc_node_assign_peer_net(n, hash_mixes); in tipc_node_create()
517 if (n->capabilities == capabilities) in tipc_node_create()
520 tipc_node_write_lock(n); in tipc_node_create()
521 n->capabilities = capabilities; in tipc_node_create()
523 l = n->links[bearer_id].link; in tipc_node_create()
527 tipc_node_write_unlock_fast(n); in tipc_node_create()
540 n = kzalloc(sizeof(*n), GFP_ATOMIC); in tipc_node_create()
541 if (!n) { in tipc_node_create()
545 tipc_nodeid2string(n->peer_id_string, peer_id); in tipc_node_create()
547 if (unlikely(tipc_crypto_start(&n->crypto_rx, net, n))) { in tipc_node_create()
548 pr_warn("Failed to start crypto RX(%s)!\n", n->peer_id_string); in tipc_node_create()
549 kfree(n); in tipc_node_create()
550 n = NULL; in tipc_node_create()
554 n->addr = addr; in tipc_node_create()
555 n->preliminary = preliminary; in tipc_node_create()
556 memcpy(&n->peer_id, peer_id, 16); in tipc_node_create()
557 n->net = net; in tipc_node_create()
558 n->peer_net = NULL; in tipc_node_create()
559 n->peer_hash_mix = 0; in tipc_node_create()
561 tipc_node_assign_peer_net(n, hash_mixes); in tipc_node_create()
562 n->capabilities = capabilities; in tipc_node_create()
563 kref_init(&n->kref); in tipc_node_create()
564 rwlock_init(&n->lock); in tipc_node_create()
565 INIT_HLIST_NODE(&n->hash); in tipc_node_create()
566 INIT_LIST_HEAD(&n->list); in tipc_node_create()
567 INIT_LIST_HEAD(&n->publ_list); in tipc_node_create()
568 INIT_LIST_HEAD(&n->conn_sks); in tipc_node_create()
569 skb_queue_head_init(&n->bc_entry.namedq); in tipc_node_create()
570 skb_queue_head_init(&n->bc_entry.inputq1); in tipc_node_create()
571 __skb_queue_head_init(&n->bc_entry.arrvq); in tipc_node_create()
572 skb_queue_head_init(&n->bc_entry.inputq2); in tipc_node_create()
574 spin_lock_init(&n->links[i].lock); in tipc_node_create()
575 n->state = SELF_DOWN_PEER_LEAVING; in tipc_node_create()
576 n->delete_at = jiffies + msecs_to_jiffies(NODE_CLEANUP_AFTER); in tipc_node_create()
577 n->signature = INVALID_NODE_SIG; in tipc_node_create()
578 n->active_links[0] = INVALID_BEARER_ID; in tipc_node_create()
579 n->active_links[1] = INVALID_BEARER_ID; in tipc_node_create()
583 n->capabilities, &n->bc_entry.inputq1, in tipc_node_create()
584 &n->bc_entry.namedq, snd_l, &n->bc_entry.link)) { in tipc_node_create()
586 tipc_node_put(n); in tipc_node_create()
587 n = NULL; in tipc_node_create()
590 tipc_node_get(n); in tipc_node_create()
591 timer_setup(&n->timer, tipc_node_timeout, 0); in tipc_node_create()
593 n->keepalive_intv = 10000; in tipc_node_create()
594 intv = jiffies + msecs_to_jiffies(n->keepalive_intv); in tipc_node_create()
595 if (!mod_timer(&n->timer, intv)) in tipc_node_create()
596 tipc_node_get(n); in tipc_node_create()
597 hlist_add_head_rcu(&n->hash, &tn->node_htable[tipc_hashfn(addr)]); in tipc_node_create()
599 if (n->addr < temp_node->addr) in tipc_node_create()
602 list_add_tail_rcu(&n->list, &temp_node->list); in tipc_node_create()
609 trace_tipc_node_create(n, true, " "); in tipc_node_create()
612 return n; in tipc_node_create()
615 static void tipc_node_calculate_timer(struct tipc_node *n, struct tipc_link *l) in tipc_node_calculate_timer() argument
621 if (intv < n->keepalive_intv) in tipc_node_calculate_timer()
622 n->keepalive_intv = intv; in tipc_node_calculate_timer()
625 tipc_link_set_abort_limit(l, tol / n->keepalive_intv); in tipc_node_calculate_timer()
660 struct tipc_node *n; in tipc_node_subscribe() local
665 n = tipc_node_find(net, addr); in tipc_node_subscribe()
666 if (!n) { in tipc_node_subscribe()
670 tipc_node_write_lock(n); in tipc_node_subscribe()
671 list_add_tail(subscr, &n->publ_list); in tipc_node_subscribe()
672 tipc_node_write_unlock_fast(n); in tipc_node_subscribe()
673 tipc_node_put(n); in tipc_node_subscribe()
678 struct tipc_node *n; in tipc_node_unsubscribe() local
683 n = tipc_node_find(net, addr); in tipc_node_unsubscribe()
684 if (!n) { in tipc_node_unsubscribe()
688 tipc_node_write_lock(n); in tipc_node_unsubscribe()
690 tipc_node_write_unlock_fast(n); in tipc_node_unsubscribe()
691 tipc_node_put(n); in tipc_node_unsubscribe()
805 struct tipc_node *n = from_timer(n, t, timer); in tipc_node_timeout() local
808 int remains = n->link_cnt; in tipc_node_timeout()
812 trace_tipc_node_timeout(n, false, " "); in tipc_node_timeout()
813 if (!node_is_up(n) && tipc_node_cleanup(n)) { in tipc_node_timeout()
815 tipc_node_put(n); in tipc_node_timeout()
821 tipc_crypto_timeout(n->crypto_rx); in tipc_node_timeout()
828 tipc_node_read_lock(n); in tipc_node_timeout()
829 n->keepalive_intv = 10000; in tipc_node_timeout()
830 tipc_node_read_unlock(n); in tipc_node_timeout()
832 tipc_node_read_lock(n); in tipc_node_timeout()
833 le = &n->links[bearer_id]; in tipc_node_timeout()
837 tipc_node_calculate_timer(n, le->link); in tipc_node_timeout()
842 tipc_node_read_unlock(n); in tipc_node_timeout()
843 tipc_bearer_xmit(n->net, bearer_id, &xmitq, &le->maddr, n); in tipc_node_timeout()
845 tipc_node_link_down(n, bearer_id, false); in tipc_node_timeout()
847 mod_timer(&n->timer, jiffies + msecs_to_jiffies(n->keepalive_intv)); in tipc_node_timeout()
858 static void __tipc_node_link_up(struct tipc_node *n, int bearer_id, in __tipc_node_link_up() argument
861 int *slot0 = &n->active_links[0]; in __tipc_node_link_up()
862 int *slot1 = &n->active_links[1]; in __tipc_node_link_up()
863 struct tipc_link *ol = node_active_link(n, 0); in __tipc_node_link_up()
864 struct tipc_link *nl = n->links[bearer_id].link; in __tipc_node_link_up()
873 n->working_links++; in __tipc_node_link_up()
874 n->action_flags |= TIPC_NOTIFY_LINK_UP; in __tipc_node_link_up()
875 n->link_id = tipc_link_id(nl); in __tipc_node_link_up()
878 n->links[bearer_id].mtu = tipc_link_mss(nl); in __tipc_node_link_up()
880 tipc_bearer_add_dest(n->net, bearer_id, n->addr); in __tipc_node_link_up()
881 tipc_bcast_inc_bearer_dst_cnt(n->net, bearer_id); in __tipc_node_link_up()
885 trace_tipc_node_link_up(n, true, " "); in __tipc_node_link_up()
894 tipc_node_fsm_evt(n, SELF_ESTABL_CONTACT_EVT); in __tipc_node_link_up()
895 n->action_flags |= TIPC_NOTIFY_NODE_UP; in __tipc_node_link_up()
897 tipc_bcast_add_peer(n->net, nl, xmitq); in __tipc_node_link_up()
927 static void tipc_node_link_up(struct tipc_node *n, int bearer_id, in tipc_node_link_up() argument
932 tipc_node_write_lock(n); in tipc_node_link_up()
933 __tipc_node_link_up(n, bearer_id, xmitq); in tipc_node_link_up()
934 maddr = &n->links[bearer_id].maddr; in tipc_node_link_up()
935 tipc_bearer_xmit(n->net, bearer_id, xmitq, maddr, n); in tipc_node_link_up()
936 tipc_node_write_unlock(n); in tipc_node_link_up()
960 static void tipc_node_link_failover(struct tipc_node *n, struct tipc_link *l, in tipc_node_link_failover() argument
973 tipc_node_fsm_evt(n, NODE_SYNCH_END_EVT); in tipc_node_link_failover()
975 n->sync_point = tipc_link_rcv_nxt(tnl) + (U16_MAX / 2 - 1); in tipc_node_link_failover()
980 tipc_node_fsm_evt(n, NODE_FAILOVER_BEGIN_EVT); in tipc_node_link_failover()
990 static void __tipc_node_link_down(struct tipc_node *n, int *bearer_id, in __tipc_node_link_down() argument
994 struct tipc_link_entry *le = &n->links[*bearer_id]; in __tipc_node_link_down()
995 int *slot0 = &n->active_links[0]; in __tipc_node_link_down()
996 int *slot1 = &n->active_links[1]; in __tipc_node_link_down()
1000 l = n->links[*bearer_id].link; in __tipc_node_link_down()
1004 n->working_links--; in __tipc_node_link_down()
1005 n->action_flags |= TIPC_NOTIFY_LINK_DOWN; in __tipc_node_link_down()
1006 n->link_id = tipc_link_id(l); in __tipc_node_link_down()
1008 tipc_bearer_remove_dest(n->net, *bearer_id, n->addr); in __tipc_node_link_down()
1017 _l = n->links[i].link; in __tipc_node_link_down()
1034 if (!node_is_up(n)) { in __tipc_node_link_down()
1036 tipc_node_fsm_evt(n, PEER_LOST_CONTACT_EVT); in __tipc_node_link_down()
1037 tipc_node_fsm_evt(n, SELF_LOST_CONTACT_EVT); in __tipc_node_link_down()
1042 *maddr = &n->links[*bearer_id].maddr; in __tipc_node_link_down()
1043 node_lost_contact(n, &le->inputq); in __tipc_node_link_down()
1044 tipc_bcast_dec_bearer_dst_cnt(n->net, *bearer_id); in __tipc_node_link_down()
1047 tipc_bcast_dec_bearer_dst_cnt(n->net, *bearer_id); in __tipc_node_link_down()
1050 *bearer_id = n->active_links[0]; in __tipc_node_link_down()
1051 tnl = n->links[*bearer_id].link; in __tipc_node_link_down()
1053 tipc_node_fsm_evt(n, NODE_SYNCH_END_EVT); in __tipc_node_link_down()
1054 n->sync_point = tipc_link_rcv_nxt(tnl) + (U16_MAX / 2 - 1); in __tipc_node_link_down()
1060 tipc_node_fsm_evt(n, NODE_FAILOVER_BEGIN_EVT); in __tipc_node_link_down()
1061 *maddr = &n->links[*bearer_id].maddr; in __tipc_node_link_down()
1064 static void tipc_node_link_down(struct tipc_node *n, int bearer_id, bool delete) in tipc_node_link_down() argument
1066 struct tipc_link_entry *le = &n->links[bearer_id]; in tipc_node_link_down()
1077 tipc_node_write_lock(n); in tipc_node_link_down()
1079 __tipc_node_link_down(n, &bearer_id, &xmitq, &maddr); in tipc_node_link_down()
1088 n->link_cnt--; in tipc_node_link_down()
1090 trace_tipc_node_link_down(n, true, "node link down or deleted!"); in tipc_node_link_down()
1091 tipc_node_write_unlock(n); in tipc_node_link_down()
1093 tipc_mon_remove_peer(n->net, n->addr, old_bearer_id); in tipc_node_link_down()
1095 tipc_bearer_xmit(n->net, bearer_id, &xmitq, maddr, n); in tipc_node_link_down()
1096 tipc_sk_rcv(n->net, &le->inputq); in tipc_node_link_down()
1099 static bool node_is_up(struct tipc_node *n) in node_is_up() argument
1101 return n->active_links[0] != INVALID_BEARER_ID; in node_is_up()
1106 struct tipc_node *n; in tipc_node_is_up() local
1112 n = tipc_node_find(net, addr); in tipc_node_is_up()
1113 if (!n) in tipc_node_is_up()
1115 retval = node_is_up(n); in tipc_node_is_up()
1116 tipc_node_put(n); in tipc_node_is_up()
1122 struct tipc_node *n; in tipc_node_suggest_addr() local
1125 while ((n = tipc_node_find(net, addr))) { in tipc_node_suggest_addr()
1126 tipc_node_put(n); in tipc_node_suggest_addr()
1138 struct tipc_node *n; in tipc_node_try_addr() local
1143 n = tipc_node_find(net, addr); in tipc_node_try_addr()
1144 if (n) { in tipc_node_try_addr()
1145 if (!memcmp(n->peer_id, id, NODE_ID_LEN)) in tipc_node_try_addr()
1147 tipc_node_put(n); in tipc_node_try_addr()
1154 n = tipc_node_find_by_id(net, id); in tipc_node_try_addr()
1155 if (n) { in tipc_node_try_addr()
1156 sugg_addr = n->addr; in tipc_node_try_addr()
1157 preliminary = n->preliminary; in tipc_node_try_addr()
1158 tipc_node_put(n); in tipc_node_try_addr()
1176 struct tipc_node *n; in tipc_node_check_dest() local
1192 n = tipc_node_create(net, addr, peer_id, capabilities, hash_mixes, in tipc_node_check_dest()
1194 if (!n) in tipc_node_check_dest()
1197 tipc_node_write_lock(n); in tipc_node_check_dest()
1199 le = &n->links[b->identity]; in tipc_node_check_dest()
1206 sign_match = (signature == n->signature); in tipc_node_check_dest()
1213 if (!n->peer_hash_mix) in tipc_node_check_dest()
1214 n->peer_hash_mix = hash_mixes; in tipc_node_check_dest()
1249 n->signature = signature; in tipc_node_check_dest()
1254 n->signature = signature; in tipc_node_check_dest()
1265 n->signature = signature; in tipc_node_check_dest()
1276 if (n->link_cnt == 2) in tipc_node_check_dest()
1285 n->capabilities, in tipc_node_check_dest()
1286 tipc_bc_sndlink(n->net), n->bc_entry.link, in tipc_node_check_dest()
1288 &n->bc_entry.namedq, &l)) { in tipc_node_check_dest()
1295 if (n->state == NODE_FAILINGOVER) in tipc_node_check_dest()
1299 n->link_cnt++; in tipc_node_check_dest()
1300 tipc_node_calculate_timer(n, l); in tipc_node_check_dest()
1301 if (n->link_cnt == 1) { in tipc_node_check_dest()
1302 intv = jiffies + msecs_to_jiffies(n->keepalive_intv); in tipc_node_check_dest()
1303 if (!mod_timer(&n->timer, intv)) in tipc_node_check_dest()
1304 tipc_node_get(n); in tipc_node_check_dest()
1309 tipc_node_write_unlock(n); in tipc_node_check_dest()
1311 tipc_node_link_down(n, b->identity, false); in tipc_node_check_dest()
1312 tipc_node_put(n); in tipc_node_check_dest()
1318 struct tipc_node *n; in tipc_node_delete_links() local
1321 list_for_each_entry_rcu(n, &tn->node_list, list) { in tipc_node_delete_links()
1322 tipc_node_link_down(n, bearer_id, true); in tipc_node_delete_links()
1327 static void tipc_node_reset_links(struct tipc_node *n) in tipc_node_reset_links() argument
1331 pr_warn("Resetting all links to %x\n", n->addr); in tipc_node_reset_links()
1333 trace_tipc_node_reset_links(n, true, " "); in tipc_node_reset_links()
1335 tipc_node_link_down(n, i, false); in tipc_node_reset_links()
1342 static void tipc_node_fsm_evt(struct tipc_node *n, int evt) in tipc_node_fsm_evt() argument
1344 int state = n->state; in tipc_node_fsm_evt()
1509 trace_tipc_node_fsm(n->peer_id, n->state, state, evt); in tipc_node_fsm_evt()
1510 n->state = state; in tipc_node_fsm_evt()
1515 trace_tipc_node_fsm(n->peer_id, n->state, state, evt); in tipc_node_fsm_evt()
1518 static void node_lost_contact(struct tipc_node *n, in node_lost_contact() argument
1523 struct list_head *conns = &n->conn_sks; in node_lost_contact()
1527 pr_debug("Lost contact with %x\n", n->addr); in node_lost_contact()
1528 n->delete_at = jiffies + msecs_to_jiffies(NODE_CLEANUP_AFTER); in node_lost_contact()
1529 trace_tipc_node_lost_contact(n, true, " "); in node_lost_contact()
1532 tipc_bcast_remove_peer(n->net, n->bc_entry.link); in node_lost_contact()
1533 skb_queue_purge(&n->bc_entry.namedq); in node_lost_contact()
1537 l = n->links[i].link; in node_lost_contact()
1543 n->action_flags |= TIPC_NOTIFY_NODE_DOWN; in node_lost_contact()
1544 n->peer_net = NULL; in node_lost_contact()
1545 n->peer_hash_mix = 0; in node_lost_contact()
1549 SHORT_H_SIZE, 0, tipc_own_addr(n->net), in node_lost_contact()
1693 struct tipc_node *n; in tipc_node_xmit() local
1707 n = tipc_node_find(net, dnode); in tipc_node_xmit()
1708 if (unlikely(!n)) { in tipc_node_xmit()
1714 tipc_node_read_lock(n); in tipc_node_xmit()
1715 node_up = node_is_up(n); in tipc_node_xmit()
1716 peer_net = n->peer_net; in tipc_node_xmit()
1717 tipc_node_read_unlock(n); in tipc_node_xmit()
1723 tipc_node_put(n); in tipc_node_xmit()
1729 tipc_node_read_lock(n); in tipc_node_xmit()
1730 bearer_id = n->active_links[selector & 1]; in tipc_node_xmit()
1732 tipc_node_read_unlock(n); in tipc_node_xmit()
1733 tipc_node_put(n); in tipc_node_xmit()
1739 le = &n->links[bearer_id]; in tipc_node_xmit()
1743 tipc_node_read_unlock(n); in tipc_node_xmit()
1746 tipc_node_link_down(n, bearer_id, false); in tipc_node_xmit()
1748 tipc_bearer_xmit(net, bearer_id, &xmitq, &le->maddr, n); in tipc_node_xmit()
1750 tipc_node_put(n); in tipc_node_xmit()
1792 struct tipc_node *n; in tipc_node_broadcast() local
1806 list_for_each_entry_rcu(n, tipc_nodes(net), list) { in tipc_node_broadcast()
1807 dst = n->addr; in tipc_node_broadcast()
1810 if (!node_is_up(n)) in tipc_node_broadcast()
1822 static void tipc_node_mcast_rcv(struct tipc_node *n) in tipc_node_mcast_rcv() argument
1824 struct tipc_bclink_entry *be = &n->bc_entry; in tipc_node_mcast_rcv()
1832 tipc_sk_mcast_rcv(n->net, &be->arrvq, &be->inputq2); in tipc_node_mcast_rcv()
1835 static void tipc_node_bc_sync_rcv(struct tipc_node *n, struct tipc_msg *hdr, in tipc_node_bc_sync_rcv() argument
1841 rc = tipc_bcast_sync_rcv(n->net, n->bc_entry.link, hdr, xmitq); in tipc_node_bc_sync_rcv()
1844 tipc_node_reset_links(n); in tipc_node_bc_sync_rcv()
1856 tipc_node_read_lock(n); in tipc_node_bc_sync_rcv()
1857 ucl = n->links[bearer_id].link; in tipc_node_bc_sync_rcv()
1860 tipc_node_read_unlock(n); in tipc_node_bc_sync_rcv()
1880 struct tipc_node *n; in tipc_node_bc_rcv() local
1886 n = tipc_node_find(net, dnode); in tipc_node_bc_rcv()
1888 n = tipc_node_find(net, msg_prevnode(hdr)); in tipc_node_bc_rcv()
1889 if (!n) { in tipc_node_bc_rcv()
1893 be = &n->bc_entry; in tipc_node_bc_rcv()
1894 le = &n->links[bearer_id]; in tipc_node_bc_rcv()
1900 tipc_node_read_lock(n); in tipc_node_bc_rcv()
1902 tipc_node_read_unlock(n); in tipc_node_bc_rcv()
1906 tipc_bearer_xmit(net, bearer_id, &xmitq, &le->maddr, n); in tipc_node_bc_rcv()
1909 tipc_node_mcast_rcv(n); in tipc_node_bc_rcv()
1912 if (!skb_queue_empty(&n->bc_entry.namedq)) in tipc_node_bc_rcv()
1913 tipc_named_rcv(net, &n->bc_entry.namedq, in tipc_node_bc_rcv()
1914 &n->bc_entry.named_rcv_nxt, in tipc_node_bc_rcv()
1915 &n->bc_entry.named_open); in tipc_node_bc_rcv()
1919 tipc_node_reset_links(n); in tipc_node_bc_rcv()
1921 tipc_node_put(n); in tipc_node_bc_rcv()
1932 static bool tipc_node_check_state(struct tipc_node *n, struct sk_buff *skb, in tipc_node_check_state() argument
1941 int state = n->state; in tipc_node_check_state()
1948 trace_tipc_node_check_state(n, true, " "); in tipc_node_check_state()
1950 l = n->links[bearer_id].link; in tipc_node_check_state()
1961 if ((pb_id != bearer_id) && n->links[pb_id].link) { in tipc_node_check_state()
1962 pl = n->links[pb_id].link; in tipc_node_check_state()
1979 tipc_node_fsm_evt(n, PEER_ESTABL_CONTACT_EVT); in tipc_node_check_state()
1985 tipc_node_fsm_evt(n, PEER_LOST_CONTACT_EVT); in tipc_node_check_state()
2000 __tipc_node_link_down(n, &pb_id, xmitq, &maddr); in tipc_node_check_state()
2001 trace_tipc_node_link_down(n, true, in tipc_node_check_state()
2013 if (n->state != NODE_FAILINGOVER) in tipc_node_check_state()
2014 tipc_node_link_failover(n, pl, l, xmitq); in tipc_node_check_state()
2017 if (less(syncpt, n->sync_point)) in tipc_node_check_state()
2018 n->sync_point = syncpt; in tipc_node_check_state()
2022 if ((n->state == NODE_FAILINGOVER) && tipc_link_is_up(l)) { in tipc_node_check_state()
2023 if (!more(rcv_nxt, n->sync_point)) in tipc_node_check_state()
2025 tipc_node_fsm_evt(n, NODE_FAILOVER_END_EVT); in tipc_node_check_state()
2037 if (n->capabilities & TIPC_TUNNEL_ENHANCED) in tipc_node_check_state()
2042 __tipc_node_link_up(n, bearer_id, xmitq); in tipc_node_check_state()
2043 if (n->state == SELF_UP_PEER_UP) { in tipc_node_check_state()
2044 n->sync_point = syncpt; in tipc_node_check_state()
2046 tipc_node_fsm_evt(n, NODE_SYNCH_BEGIN_EVT); in tipc_node_check_state()
2051 if (n->state == NODE_SYNCHING) { in tipc_node_check_state()
2060 if (more(dlv_nxt, n->sync_point)) { in tipc_node_check_state()
2062 tipc_node_fsm_evt(n, NODE_SYNCH_END_EVT); in tipc_node_check_state()
2090 struct tipc_node *n; in tipc_rcv() local
2104 n = tipc_node_find(net, ntohl(ehdr->addr)); in tipc_rcv()
2105 if (unlikely(!n)) in tipc_rcv()
2108 n = tipc_node_find_by_id(net, ehdr->id); in tipc_rcv()
2110 tipc_crypto_rcv(net, (n) ? n->crypto_rx : NULL, &skb, b); in tipc_rcv()
2137 n = tipc_node_find(net, msg_prevnode(hdr)); in tipc_rcv()
2138 if (unlikely(!n)) in tipc_rcv()
2140 le = &n->links[bearer_id]; in tipc_rcv()
2145 tipc_node_put(n); in tipc_rcv()
2149 tipc_node_bc_sync_rcv(n, hdr, bearer_id, &xmitq); in tipc_rcv()
2150 } else if (unlikely(tipc_link_acked(n->bc_entry.link) != bc_ack)) { in tipc_rcv()
2151 tipc_bcast_ack_rcv(net, n->bc_entry.link, hdr); in tipc_rcv()
2155 tipc_node_read_lock(n); in tipc_rcv()
2156 if (likely((n->state == SELF_UP_PEER_UP) && (usr != TUNNEL_PROTOCOL))) { in tipc_rcv()
2164 tipc_node_read_unlock(n); in tipc_rcv()
2170 tipc_node_write_lock(n); in tipc_rcv()
2171 if (tipc_node_check_state(n, skb, bearer_id, &xmitq)) { in tipc_rcv()
2177 tipc_node_write_unlock(n); in tipc_rcv()
2181 tipc_node_link_up(n, bearer_id, &xmitq); in tipc_rcv()
2184 tipc_node_link_down(n, bearer_id, false); in tipc_rcv()
2186 if (unlikely(!skb_queue_empty(&n->bc_entry.namedq))) in tipc_rcv()
2187 tipc_named_rcv(net, &n->bc_entry.namedq, in tipc_rcv()
2188 &n->bc_entry.named_rcv_nxt, in tipc_rcv()
2189 &n->bc_entry.named_open); in tipc_rcv()
2191 if (unlikely(!skb_queue_empty(&n->bc_entry.inputq1))) in tipc_rcv()
2192 tipc_node_mcast_rcv(n); in tipc_rcv()
2198 tipc_bearer_xmit(net, bearer_id, &xmitq, &le->maddr, n); in tipc_rcv()
2201 tipc_node_put(n); in tipc_rcv()
2213 struct tipc_node *n; in tipc_node_apply_property() local
2219 list_for_each_entry_rcu(n, &tn->node_list, list) { in tipc_node_apply_property()
2220 tipc_node_write_lock(n); in tipc_node_apply_property()
2221 e = &n->links[bearer_id]; in tipc_node_apply_property()
2233 tipc_node_write_unlock(n); in tipc_node_apply_property()
2392 struct tipc_node *n; in tipc_node_find_by_name() local
2398 list_for_each_entry_rcu(n, &tn->node_list, list) { in tipc_node_find_by_name()
2399 tipc_node_read_lock(n); in tipc_node_find_by_name()
2401 l = n->links[i].link; in tipc_node_find_by_name()
2404 found_node = n; in tipc_node_find_by_name()
2408 tipc_node_read_unlock(n); in tipc_node_find_by_name()
2966 struct tipc_node *n = NULL; in __tipc_nl_node_set_key() local
3011 n = tipc_node_find_by_id(net, id) ?: in __tipc_nl_node_set_key()
3013 if (unlikely(!n)) in __tipc_nl_node_set_key()
3015 c = n->crypto_rx; in __tipc_nl_node_set_key()
3024 if (n) in __tipc_nl_node_set_key()
3025 tipc_node_put(n); in __tipc_nl_node_set_key()
3058 struct tipc_node *n; in __tipc_nl_node_flush_key() local
3062 list_for_each_entry_rcu(n, &tn->node_list, list) in __tipc_nl_node_flush_key()
3063 tipc_crypto_key_flush(n->crypto_rx); in __tipc_nl_node_flush_key()
3089 int tipc_node_dump(struct tipc_node *n, bool more, char *buf) in tipc_node_dump() argument
3094 if (!n) { in tipc_node_dump()
3099 i += scnprintf(buf, sz, "node data: %x", n->addr); in tipc_node_dump()
3100 i += scnprintf(buf + i, sz - i, " %x", n->state); in tipc_node_dump()
3101 i += scnprintf(buf + i, sz - i, " %d", n->active_links[0]); in tipc_node_dump()
3102 i += scnprintf(buf + i, sz - i, " %d", n->active_links[1]); in tipc_node_dump()
3103 i += scnprintf(buf + i, sz - i, " %x", n->action_flags); in tipc_node_dump()
3104 i += scnprintf(buf + i, sz - i, " %u", n->failover_sent); in tipc_node_dump()
3105 i += scnprintf(buf + i, sz - i, " %u", n->sync_point); in tipc_node_dump()
3106 i += scnprintf(buf + i, sz - i, " %d", n->link_cnt); in tipc_node_dump()
3107 i += scnprintf(buf + i, sz - i, " %u", n->working_links); in tipc_node_dump()
3108 i += scnprintf(buf + i, sz - i, " %x", n->capabilities); in tipc_node_dump()
3109 i += scnprintf(buf + i, sz - i, " %lu\n", n->keepalive_intv); in tipc_node_dump()
3115 i += scnprintf(buf + i, sz - i, " mtu: %u\n", n->links[0].mtu); in tipc_node_dump()
3117 i += tipc_media_addr_printf(buf + i, sz - i, &n->links[0].maddr); in tipc_node_dump()
3119 i += tipc_link_dump(n->links[0].link, TIPC_DUMP_NONE, buf + i); in tipc_node_dump()
3121 i += tipc_list_dump(&n->links[0].inputq, false, buf + i); in tipc_node_dump()
3124 i += scnprintf(buf + i, sz - i, " mtu: %u\n", n->links[1].mtu); in tipc_node_dump()
3126 i += tipc_media_addr_printf(buf + i, sz - i, &n->links[1].maddr); in tipc_node_dump()
3128 i += tipc_link_dump(n->links[1].link, TIPC_DUMP_NONE, buf + i); in tipc_node_dump()
3130 i += tipc_list_dump(&n->links[1].inputq, false, buf + i); in tipc_node_dump()
3133 i += tipc_link_dump(n->bc_entry.link, TIPC_DUMP_NONE, buf + i); in tipc_node_dump()
3140 struct tipc_node *n; in tipc_node_pre_cleanup_net() local
3152 list_for_each_entry_rcu(n, &tn->node_list, list) { in tipc_node_pre_cleanup_net()
3153 if (!n->peer_net) in tipc_node_pre_cleanup_net()
3155 if (n->peer_net != exit_net) in tipc_node_pre_cleanup_net()
3157 tipc_node_write_lock(n); in tipc_node_pre_cleanup_net()
3158 n->peer_net = NULL; in tipc_node_pre_cleanup_net()
3159 n->peer_hash_mix = 0; in tipc_node_pre_cleanup_net()
3160 tipc_node_write_unlock_fast(n); in tipc_node_pre_cleanup_net()