Lines Matching full:peer

170 	asoc->peer.rwnd = SCTP_DEFAULT_MAXWINDOW;  in sctp_association_init()
206 INIT_LIST_HEAD(&asoc->peer.transport_addr_list); in sctp_association_init()
219 asoc->peer.sack_needed = 1; in sctp_association_init()
220 asoc->peer.sack_generation = 1; in sctp_association_init()
239 /* Assume that peer would support both address types unless we are in sctp_association_init()
242 asoc->peer.ipv4_address = 1; in sctp_association_init()
244 asoc->peer.ipv6_address = 1; in sctp_association_init()
349 sctp_tsnmap_free(&asoc->peer.tsn_map); in sctp_association_free()
370 /* Free peer's cached cookie. */ in sctp_association_free()
371 kfree(asoc->peer.cookie); in sctp_association_free()
372 kfree(asoc->peer.peer_random); in sctp_association_free()
373 kfree(asoc->peer.peer_chunks); in sctp_association_free()
374 kfree(asoc->peer.peer_hmacs); in sctp_association_free()
377 list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) { in sctp_association_free()
384 asoc->peer.transport_count = 0; in sctp_association_free()
423 /* Change the primary destination address for the peer. */
432 if (asoc->peer.primary_path != NULL && in sctp_assoc_set_primary()
433 asoc->peer.primary_path != transport) in sctp_assoc_set_primary()
436 asoc->peer.primary_path = transport; in sctp_assoc_set_primary()
441 memcpy(&asoc->peer.primary_addr, &transport->ipaddr, in sctp_assoc_set_primary()
449 asoc->peer.active_path = transport; in sctp_assoc_set_primary()
484 struct sctp_transport *peer) in sctp_assoc_rm_peer() argument
491 __func__, asoc, &peer->ipaddr.sa); in sctp_assoc_rm_peer()
494 * to the next peer before removing this peer from the list. in sctp_assoc_rm_peer()
496 if (asoc->peer.retran_path == peer) in sctp_assoc_rm_peer()
499 /* Remove this peer from the list. */ in sctp_assoc_rm_peer()
500 list_del_rcu(&peer->transports); in sctp_assoc_rm_peer()
501 /* Remove this peer from the transport hashtable */ in sctp_assoc_rm_peer()
502 sctp_unhash_transport(peer); in sctp_assoc_rm_peer()
505 pos = asoc->peer.transport_addr_list.next; in sctp_assoc_rm_peer()
508 /* Update any entries that match the peer to be deleted. */ in sctp_assoc_rm_peer()
509 if (asoc->peer.primary_path == peer) in sctp_assoc_rm_peer()
511 if (asoc->peer.active_path == peer) in sctp_assoc_rm_peer()
512 asoc->peer.active_path = transport; in sctp_assoc_rm_peer()
513 if (asoc->peer.retran_path == peer) in sctp_assoc_rm_peer()
514 asoc->peer.retran_path = transport; in sctp_assoc_rm_peer()
515 if (asoc->peer.last_data_from == peer) in sctp_assoc_rm_peer()
516 asoc->peer.last_data_from = transport; in sctp_assoc_rm_peer()
519 asoc->strreset_chunk->transport == peer) { in sctp_assoc_rm_peer()
529 if (asoc->init_last_sent_to == peer) in sctp_assoc_rm_peer()
537 if (asoc->shutdown_last_sent_to == peer) in sctp_assoc_rm_peer()
544 asoc->addip_last_asconf->transport == peer) in sctp_assoc_rm_peer()
550 if (!list_empty(&peer->transmitted)) { in sctp_assoc_rm_peer()
551 struct sctp_transport *active = asoc->peer.active_path; in sctp_assoc_rm_peer()
554 list_for_each_entry(ch, &peer->transmitted, in sctp_assoc_rm_peer()
560 list_splice_tail_init(&peer->transmitted, in sctp_assoc_rm_peer()
574 if (ch->transport == peer) in sctp_assoc_rm_peer()
577 asoc->peer.transport_count--; in sctp_assoc_rm_peer()
579 sctp_ulpevent_notify_peer_addr_change(peer, SCTP_ADDR_REMOVED, 0); in sctp_assoc_rm_peer()
580 sctp_transport_free(peer); in sctp_assoc_rm_peer()
589 struct sctp_transport *peer; in sctp_assoc_add_peer() local
602 if (0 == asoc->peer.port) in sctp_assoc_add_peer()
603 asoc->peer.port = port; in sctp_assoc_add_peer()
606 peer = sctp_assoc_lookup_paddr(asoc, addr); in sctp_assoc_add_peer()
607 if (peer) { in sctp_assoc_add_peer()
612 if (peer->state == SCTP_UNKNOWN) { in sctp_assoc_add_peer()
613 peer->state = SCTP_ACTIVE; in sctp_assoc_add_peer()
615 return peer; in sctp_assoc_add_peer()
618 peer = sctp_transport_new(asoc->base.net, addr, gfp); in sctp_assoc_add_peer()
619 if (!peer) in sctp_assoc_add_peer()
622 sctp_transport_set_owner(peer, asoc); in sctp_assoc_add_peer()
624 /* Initialize the peer's heartbeat interval based on the in sctp_assoc_add_peer()
627 peer->hbinterval = asoc->hbinterval; in sctp_assoc_add_peer()
628 peer->probe_interval = asoc->probe_interval; in sctp_assoc_add_peer()
630 peer->encap_port = asoc->encap_port; in sctp_assoc_add_peer()
633 peer->pathmaxrxt = asoc->pathmaxrxt; in sctp_assoc_add_peer()
636 peer->pf_retrans = asoc->pf_retrans; in sctp_assoc_add_peer()
638 peer->ps_retrans = asoc->ps_retrans; in sctp_assoc_add_peer()
640 /* Initialize the peer's SACK delay timeout based on the in sctp_assoc_add_peer()
643 peer->sackdelay = asoc->sackdelay; in sctp_assoc_add_peer()
644 peer->sackfreq = asoc->sackfreq; in sctp_assoc_add_peer()
650 peer->flowlabel = ntohl(info & IPV6_FLOWLABEL_MASK); in sctp_assoc_add_peer()
651 peer->flowlabel |= SCTP_FLOWLABEL_SET_MASK; in sctp_assoc_add_peer()
653 peer->flowlabel = asoc->flowlabel; in sctp_assoc_add_peer()
656 peer->dscp = asoc->dscp; in sctp_assoc_add_peer()
661 peer->param_flags = asoc->param_flags; in sctp_assoc_add_peer()
664 sctp_transport_route(peer, NULL, sp); in sctp_assoc_add_peer()
667 * initialize the association PMTU to the peer's PMTU. in sctp_assoc_add_peer()
669 * peer's PMTU, reset the association PMTU to the new peer's PMTU. in sctp_assoc_add_peer()
672 min_t(int, peer->pathmtu, asoc->pathmtu) : in sctp_assoc_add_peer()
673 peer->pathmtu); in sctp_assoc_add_peer()
675 peer->pmtu_pending = 0; in sctp_assoc_add_peer()
677 /* The asoc->peer.port might not be meaningful yet, but in sctp_assoc_add_peer()
680 sctp_packet_init(&peer->packet, peer, asoc->base.bind_addr.port, in sctp_assoc_add_peer()
681 asoc->peer.port); in sctp_assoc_add_peer()
693 peer->cwnd = min(4*asoc->pathmtu, max_t(__u32, 2*asoc->pathmtu, 4380)); in sctp_assoc_add_peer()
699 peer->ssthresh = SCTP_DEFAULT_MAXWINDOW; in sctp_assoc_add_peer()
701 peer->partial_bytes_acked = 0; in sctp_assoc_add_peer()
702 peer->flight_size = 0; in sctp_assoc_add_peer()
703 peer->burst_limited = 0; in sctp_assoc_add_peer()
706 peer->rto = asoc->rto_initial; in sctp_assoc_add_peer()
707 sctp_max_rto(asoc, peer); in sctp_assoc_add_peer()
709 /* Set the peer's active state. */ in sctp_assoc_add_peer()
710 peer->state = peer_state; in sctp_assoc_add_peer()
712 /* Add this peer into the transport hashtable */ in sctp_assoc_add_peer()
713 if (sctp_hash_transport(peer)) { in sctp_assoc_add_peer()
714 sctp_transport_free(peer); in sctp_assoc_add_peer()
718 sctp_transport_pl_reset(peer); in sctp_assoc_add_peer()
721 list_add_tail_rcu(&peer->transports, &asoc->peer.transport_addr_list); in sctp_assoc_add_peer()
722 asoc->peer.transport_count++; in sctp_assoc_add_peer()
724 sctp_ulpevent_notify_peer_addr_change(peer, SCTP_ADDR_ADDED, 0); in sctp_assoc_add_peer()
727 if (!asoc->peer.primary_path) { in sctp_assoc_add_peer()
728 sctp_assoc_set_primary(asoc, peer); in sctp_assoc_add_peer()
729 asoc->peer.retran_path = peer; in sctp_assoc_add_peer()
732 if (asoc->peer.active_path == asoc->peer.retran_path && in sctp_assoc_add_peer()
733 peer->state != SCTP_UNCONFIRMED) { in sctp_assoc_add_peer()
734 asoc->peer.retran_path = peer; in sctp_assoc_add_peer()
737 return peer; in sctp_assoc_add_peer()
748 list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) { in sctp_assoc_del_peer()
751 /* Do book keeping for removing the peer and free it. */ in sctp_assoc_del_peer()
765 /* Cycle through all transports searching for a peer address. */ in sctp_assoc_lookup_paddr()
767 list_for_each_entry(t, &asoc->peer.transport_addr_list, in sctp_assoc_lookup_paddr()
783 list_for_each_entry_safe(t, temp, &asoc->peer.transport_addr_list, in sctp_assoc_del_nonprimary_peers()
950 active = asoc->peer.active_path; in sctp_assoc_lookup_tsn()
962 list_for_each_entry(transport, &asoc->peer.transport_addr_list, in sctp_assoc_lookup_tsn()
1030 * been sent to the peer during the association setup. It in sctp_assoc_bh_rcv()
1041 asoc->peer.last_data_from = chunk->transport; in sctp_assoc_bh_rcv()
1110 /* Copy in new parameters of peer. */ in sctp_assoc_update()
1112 asoc->peer.rwnd = new->peer.rwnd; in sctp_assoc_update()
1113 asoc->peer.sack_needed = new->peer.sack_needed; in sctp_assoc_update()
1114 asoc->peer.auth_capable = new->peer.auth_capable; in sctp_assoc_update()
1115 asoc->peer.i = new->peer.i; in sctp_assoc_update()
1117 if (!sctp_tsnmap_init(&asoc->peer.tsn_map, SCTP_TSN_MAP_INITIAL, in sctp_assoc_update()
1118 asoc->peer.i.initial_tsn, GFP_ATOMIC)) in sctp_assoc_update()
1121 /* Remove any peer addresses not present in the new association. */ in sctp_assoc_update()
1122 list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) { in sctp_assoc_update()
1135 * current next_tsn in case data sent to peer in sctp_assoc_update()
1144 * and peer's streams. in sctp_assoc_update()
1161 /* Add any peer addresses from the new association. */ in sctp_assoc_update()
1162 list_for_each_entry(trans, &new->peer.transport_addr_list, in sctp_assoc_update()
1180 /* SCTP-AUTH: Save the peer parameters from the new associations in sctp_assoc_update()
1183 kfree(asoc->peer.peer_random); in sctp_assoc_update()
1184 asoc->peer.peer_random = new->peer.peer_random; in sctp_assoc_update()
1185 new->peer.peer_random = NULL; in sctp_assoc_update()
1187 kfree(asoc->peer.peer_chunks); in sctp_assoc_update()
1188 asoc->peer.peer_chunks = new->peer.peer_chunks; in sctp_assoc_update()
1189 new->peer.peer_chunks = NULL; in sctp_assoc_update()
1191 kfree(asoc->peer.peer_hmacs); in sctp_assoc_update()
1192 asoc->peer.peer_hmacs = new->peer.peer_hmacs; in sctp_assoc_update()
1193 new->peer.peer_hmacs = NULL; in sctp_assoc_update()
1279 struct sctp_transport *trans = asoc->peer.retran_path; in sctp_assoc_update_retran_path()
1283 if (asoc->peer.transport_count == 1) in sctp_assoc_update_retran_path()
1288 if (asoc->peer.active_path == asoc->peer.retran_path && in sctp_assoc_update_retran_path()
1289 asoc->peer.active_path->state == SCTP_ACTIVE) in sctp_assoc_update_retran_path()
1296 if (&trans->transports == &asoc->peer.transport_addr_list) in sctp_assoc_update_retran_path()
1305 if (trans == asoc->peer.retran_path) in sctp_assoc_update_retran_path()
1309 asoc->peer.retran_path = trans_next; in sctp_assoc_update_retran_path()
1312 __func__, asoc, &asoc->peer.retran_path->ipaddr.sa); in sctp_assoc_update_retran_path()
1321 list_for_each_entry(trans, &asoc->peer.transport_addr_list, in sctp_select_active_and_retran_path()
1355 if ((asoc->peer.primary_path->state == SCTP_ACTIVE || in sctp_select_active_and_retran_path()
1356 asoc->peer.primary_path->state == SCTP_UNKNOWN) && in sctp_select_active_and_retran_path()
1357 asoc->peer.primary_path != trans_pri) { in sctp_select_active_and_retran_path()
1359 trans_pri = asoc->peer.primary_path; in sctp_select_active_and_retran_path()
1373 trans_pri = sctp_trans_elect_best(asoc->peer.active_path, trans_pf); in sctp_select_active_and_retran_path()
1378 asoc->peer.active_path = trans_pri; in sctp_select_active_and_retran_path()
1379 asoc->peer.retran_path = trans_sec; in sctp_select_active_and_retran_path()
1391 return asoc->peer.active_path; in sctp_assoc_choose_alter_transport()
1393 if (last_sent_to == asoc->peer.retran_path) in sctp_assoc_choose_alter_transport()
1396 return asoc->peer.retran_path; in sctp_assoc_choose_alter_transport()
1437 list_for_each_entry(t, &asoc->peer.transport_addr_list, transports) { in sctp_assoc_sync_pmtu()
1450 /* Should we send a SACK to update our peer? */
1520 asoc->peer.sack_needed = 0; in sctp_assoc_rwnd_increase()
1572 * local endpoint and the remote peer.
1586 if (asoc->peer.ipv4_address) in sctp_assoc_set_bind_addr_from_ep()
1588 if (asoc->peer.ipv6_address) in sctp_assoc_set_bind_addr_from_ep()
1684 * the "Peer-Sequence-Number". in sctp_assoc_clean_asconf_ack_cache()
1689 htonl(asoc->peer.addip_serial)) in sctp_assoc_clean_asconf_ack_cache()