Lines Matching refs:peer

49  * @ack_gen: most recent generation of self's domain acked by peer
63 /* struct tipc_peer: state of a peer node and its domain
64 * @addr: tipc node identity of peer
65 * @head_map: shows which other nodes currently consider peer 'up'
66 * @domain: most recent domain record from peer
70 * @is_up: peer is up as seen from this node
71 * @is_head: peer is assigned domain head as seen from this node
72 * @is_local: peer is in local domain and should be continuously monitored
136 static struct tipc_peer *peer_prev(struct tipc_peer *peer)
138 return list_last_entry(&peer->list, struct tipc_peer, list);
141 static struct tipc_peer *peer_nxt(struct tipc_peer *peer)
143 return list_first_entry(&peer->list, struct tipc_peer, list);
146 static struct tipc_peer *peer_head(struct tipc_peer *peer)
148 while (!peer->is_head)
149 peer = peer_prev(peer);
150 return peer;
155 struct tipc_peer *peer;
158 hlist_for_each_entry(peer, &mon->peers[thash], hash) {
159 if (peer->addr == addr)
160 return peer;
181 static void mon_identify_lost_members(struct tipc_peer *peer,
185 struct tipc_peer *member = peer;
186 struct tipc_mon_domain *dom_aft = peer->domain;
187 int applied_aft = peer->applied;
193 /* Do nothing if self or peer already see member as down */
213 /* mon_apply_domain() : match a peer's domain record against monitor list
216 struct tipc_peer *peer)
218 struct tipc_mon_domain *dom = peer->domain;
223 if (!dom || !peer->is_up)
227 peer->applied = 0;
228 member = peer_nxt(peer);
233 peer->applied++;
238 /* mon_update_local_domain() : update after peer addition/removal/up/down
245 struct tipc_peer *peer = self;
259 peer = peer_nxt(peer);
260 diff |= dom->members[i] != peer->addr;
261 dom->members[i] = peer->addr;
262 map_set(&dom->up_map, i, peer->is_up);
263 cache->members[i] = htonl(peer->addr);
276 /* mon_update_neighbors() : update preceding neighbors of added/removed peer
279 struct tipc_peer *peer)
285 mon_apply_domain(mon, peer);
286 peer = peer_prev(peer);
290 /* mon_assign_roles() : reassign peer roles after a network change
291 * The monitor list is consistent at this stage; i.e., each peer is monitoring
296 struct tipc_peer *peer = peer_nxt(head);
300 for (; peer != self; peer = peer_nxt(peer)) {
301 peer->is_local = false;
305 peer->is_head = false;
307 peer->is_local = true;
311 if (!peer->is_up)
313 if (peer->is_head)
315 head = peer;
326 struct tipc_peer *peer, *prev, *head;
333 peer = get_peer(mon, addr);
334 if (!peer)
336 prev = peer_prev(peer);
337 list_del(&peer->list);
338 hlist_del(&peer->hash);
339 kfree(peer->domain);
340 kfree(peer);
349 list_for_each_entry(peer, &self->list, list) {
350 kfree(peer->domain);
351 peer->domain = NULL;
352 peer->applied = 0;
361 struct tipc_peer **peer)
367 *peer = p;
372 /* Add new peer to lookup list */
376 /* Sort new peer into iterator list, in ascending circular order */
396 struct tipc_peer *peer, *head;
399 peer = get_peer(mon, addr);
400 if (!peer && !tipc_mon_add_peer(mon, addr, &peer))
402 peer->is_up = true;
403 head = peer_head(peer);
415 struct tipc_peer *peer, *head;
424 peer = get_peer(mon, addr);
425 if (!peer) {
429 applied = peer->applied;
430 peer->applied = 0;
431 dom = peer->domain;
432 peer->domain = NULL;
433 if (peer->is_head)
434 mon_identify_lost_members(peer, dom, applied);
436 peer->is_up = false;
437 peer->is_head = false;
438 peer->is_local = false;
439 peer->down_cnt = 0;
440 head = peer_head(peer);
457 struct tipc_peer *peer;
477 /* Synch generation numbers with peer if link just came up */
492 peer = get_peer(mon, addr);
493 if (!peer || !peer->is_up)
497 peer->down_cnt = 0;
507 dom = peer->domain;
515 peer->domain = dom;
527 applied_bef = peer->applied;
528 mon_apply_domain(mon, peer);
529 mon_identify_lost_members(peer, &dom_bef, applied_bef);
530 mon_assign_roles(mon, peer_head(peer));
549 /* Send only a dummy record with ack if peer has acked our last sent */
573 struct tipc_peer *peer;
588 peer = get_peer(mon, addr);
589 if (peer) {
591 state->probing |= peer->down_cnt;
592 state->reset |= peer->down_cnt >= MAX_PEER_DOWN_EVENTS;
593 state->monitoring = peer->is_local;
594 state->monitoring |= peer->is_head;
656 struct tipc_peer *peer, *tmp;
664 list_for_each_entry_safe(peer, tmp, &self->list, list) {
665 list_del(&peer->list);
666 hlist_del(&peer->hash);
667 kfree(peer->domain);
668 kfree(peer);
712 static int __tipc_nl_add_monitor_peer(struct tipc_peer *peer,
715 struct tipc_mon_domain *dom = peer->domain;
728 if (nla_put_u32(msg->skb, TIPC_NLA_MON_PEER_ADDR, peer->addr))
730 if (nla_put_u32(msg->skb, TIPC_NLA_MON_PEER_APPLIED, peer->applied))
733 if (peer->is_up)
736 if (peer->is_local)
739 if (peer->is_head)
770 struct tipc_peer *peer;
776 peer = mon->self;
779 if (peer->addr == *prev_node)
784 if (__tipc_nl_add_monitor_peer(peer, msg)) {
785 *prev_node = peer->addr;
789 } while ((peer = peer_nxt(peer)) != mon->self);