Lines Matching refs:sctp
63 sctp_set_saddr(sctp_t *sctp, sctp_faddr_t *fp) in sctp_set_saddr() argument
68 fp->sf_saddr = sctp_get_valid_addr(sctp, v6, &addr_set); in sctp_set_saddr()
86 sctp_get_dest(sctp_t *sctp, sctp_faddr_t *fp) in sctp_get_dest() argument
92 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_get_dest()
93 conn_t *connp = sctp->sctp_connp; in sctp_get_dest()
148 sctp_set_saddr(sctp, fp); in sctp_get_dest()
156 if (!sctp->sctp_loopback) in sctp_get_dest()
157 sctp->sctp_loopback = uinfo.iulp_loopback; in sctp_get_dest()
160 if ((sp = sctp_saddr_lookup(sctp, &laddr, 0)) != NULL && in sctp_get_dest()
177 sctp_set_saddr(sctp, fp); in sctp_get_dest()
194 if (fp->sf_rto < sctp->sctp_rto_min) { in sctp_get_dest()
195 fp->sf_rto = sctp->sctp_rto_min; in sctp_get_dest()
197 if (fp->sf_rto > sctp->sctp_rto_max) { in sctp_get_dest()
198 fp->sf_rto = sctp->sctp_rto_max; in sctp_get_dest()
200 SCTP_MAX_RTO(sctp, fp); in sctp_get_dest()
209 hdrlen = sctp->sctp_hdr_len; in sctp_get_dest()
211 hdrlen = sctp->sctp_hdr6_len; in sctp_get_dest()
223 if (fp == sctp->sctp_current) in sctp_get_dest()
224 sctp_set_faddr_current(sctp, fp); in sctp_get_dest()
228 sctp_update_dce(sctp_t *sctp) in sctp_update_dce() argument
231 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_update_dce()
236 for (fp = sctp->sctp_faddrs; fp != NULL; fp = fp->sf_next) { in sctp_update_dce()
246 sctp->sctp_hdr_len; in sctp_update_dce()
249 sctp->sctp_hdr6_len; in sctp_update_dce()
284 sctp_make_mp(sctp_t *sctp, sctp_faddr_t *fp, int trailer) in sctp_make_mp() argument
289 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_make_mp()
298 sctp_get_dest(sctp, fp); in sctp_make_mp()
315 ipsctplen = sctp->sctp_hdr_len; in sctp_make_mp()
317 ipsctplen = sctp->sctp_hdr6_len; in sctp_make_mp()
333 bcopy(sctp->sctp_iphc, mp->b_rptr, ipsctplen); in sctp_make_mp()
334 if (fp != sctp->sctp_current || src_changed) { in sctp_make_mp()
346 bcopy(sctp->sctp_iphc6, mp->b_rptr, ipsctplen); in sctp_make_mp()
347 if (fp != sctp->sctp_current || src_changed) { in sctp_make_mp()
353 ASSERT(sctp->sctp_connp != NULL); in sctp_make_mp()
361 sctp_set_ulp_prop(sctp_t *sctp) in sctp_set_ulp_prop() argument
366 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_set_ulp_prop()
368 if (sctp->sctp_current->sf_isv4) { in sctp_set_ulp_prop()
369 hdrlen = sctp->sctp_hdr_len; in sctp_set_ulp_prop()
371 hdrlen = sctp->sctp_hdr6_len; in sctp_set_ulp_prop()
373 ASSERT(sctp->sctp_ulpd); in sctp_set_ulp_prop()
375 sctp->sctp_connp->conn_wroff = sctps->sctps_wroff_xtra + hdrlen + in sctp_set_ulp_prop()
378 ASSERT(sctp->sctp_current->sf_pmss == sctp->sctp_mss); in sctp_set_ulp_prop()
381 sopp.sopp_wroff = sctp->sctp_connp->conn_wroff; in sctp_set_ulp_prop()
382 sopp.sopp_maxblk = sctp->sctp_mss - sizeof (sctp_data_hdr_t); in sctp_set_ulp_prop()
383 sctp->sctp_ulp_prop(sctp->sctp_ulpd, &sopp); in sctp_set_ulp_prop()
390 sctp_set_iplen(sctp_t *sctp, mblk_t *mp, ip_xmit_attr_t *ixa) in sctp_set_iplen() argument
406 ixa->ixa_ip_hdr_length = sctp->sctp_ip_hdr_len; in sctp_set_iplen()
410 ixa->ixa_ip_hdr_length = sctp->sctp_ip_hdr6_len; in sctp_set_iplen()
463 sctp_add_faddr(sctp_t *sctp, in6_addr_t *addr, int sleep, boolean_t first) in sctp_add_faddr() argument
468 conn_t *connp = sctp->sctp_connp; in sctp_add_faddr()
503 if (sctp->sctp_faddrs == NULL && effective_tsl != NULL) { in sctp_add_faddr()
514 timer_mp = sctp_timer_alloc((sctp), sctp_rexmit_timer, sleep); in sctp_add_faddr()
530 sctp_init_faddr(sctp, faddr, addr, timer_mp); in sctp_add_faddr()
536 if (sctp->sctp_faddrs == NULL) { in sctp_add_faddr()
537 ASSERT(sctp->sctp_lastfaddr == NULL); in sctp_add_faddr()
539 sctp->sctp_faddrs = sctp->sctp_lastfaddr = faddr; in sctp_add_faddr()
541 ASSERT(sctp->sctp_lastfaddr != NULL); in sctp_add_faddr()
542 faddr->sf_next = sctp->sctp_faddrs; in sctp_add_faddr()
543 sctp->sctp_faddrs = faddr; in sctp_add_faddr()
545 sctp->sctp_lastfaddr->sf_next = faddr; in sctp_add_faddr()
546 sctp->sctp_lastfaddr = faddr; in sctp_add_faddr()
548 sctp->sctp_nfaddrs++; in sctp_add_faddr()
554 sctp_lookup_faddr(sctp_t *sctp, in6_addr_t *addr) in sctp_lookup_faddr() argument
558 for (fp = sctp->sctp_faddrs; fp != NULL; fp = fp->sf_next) { in sctp_lookup_faddr()
582 sctp_set_faddr_current(sctp_t *sctp, sctp_faddr_t *fp) in sctp_set_faddr_current() argument
587 sctp->sctp_ipha->ipha_dst); in sctp_set_faddr_current()
589 sctp->sctp_ipha->ipha_src); in sctp_set_faddr_current()
592 sctp->sctp_ipha->ipha_fragment_offset_and_flags = in sctp_set_faddr_current()
595 sctp->sctp_ipha->ipha_fragment_offset_and_flags = 0; in sctp_set_faddr_current()
598 sctp->sctp_ip6h->ip6_dst = fp->sf_faddr; in sctp_set_faddr_current()
599 sctp->sctp_ip6h->ip6_src = fp->sf_saddr; in sctp_set_faddr_current()
602 sctp->sctp_current = fp; in sctp_set_faddr_current()
603 sctp->sctp_mss = fp->sf_pmss; in sctp_set_faddr_current()
606 if (!SCTP_IS_DETACHED(sctp)) in sctp_set_faddr_current()
607 sctp_set_ulp_prop(sctp); in sctp_set_faddr_current()
611 sctp_redo_faddr_srcs(sctp_t *sctp) in sctp_redo_faddr_srcs() argument
615 for (fp = sctp->sctp_faddrs; fp != NULL; fp = fp->sf_next) { in sctp_redo_faddr_srcs()
616 sctp_get_dest(sctp, fp); in sctp_redo_faddr_srcs()
621 sctp_faddr_alive(sctp_t *sctp, sctp_faddr_t *fp) in sctp_faddr_alive() argument
632 if (!sctp->sctp_zero_win_probe || !sctp->sctp_sctps->sctps_reclaim) { in sctp_faddr_alive()
633 sctp->sctp_strikes = 0; in sctp_faddr_alive()
641 sctp_intf_event(sctp, fp->sf_faddr, SCTP_ADDR_AVAILABLE, 0); in sctp_faddr_alive()
643 sctp_get_dest(sctp, fp); in sctp_faddr_alive()
652 if (fp == sctp->sctp_primary && in sctp_faddr_alive()
654 sctp_set_faddr_current(sctp, fp); in sctp_faddr_alive()
665 sctp_is_a_faddr_clean(sctp_t *sctp) in sctp_is_a_faddr_clean() argument
669 for (fp = sctp->sctp_faddrs; fp; fp = fp->sf_next) { in sctp_is_a_faddr_clean()
686 sctp_faddr_dead(sctp_t *sctp, sctp_faddr_t *fp, int newstate) in sctp_faddr_dead() argument
689 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_faddr_dead()
692 sctp_intf_event(sctp, fp->sf_faddr, SCTP_ADDR_UNREACHABLE, 0); in sctp_faddr_dead()
699 if (fp == sctp->sctp_current) { in sctp_faddr_dead()
701 sctp->sctp_current = NULL; in sctp_faddr_dead()
714 for (fp = sctp->sctp_faddrs; fp != ofp; fp = fp->sf_next) { in sctp_faddr_dead()
726 if (sctp->sctp_current == NULL) { in sctp_faddr_dead()
733 sctp_set_faddr_current(sctp, fp); in sctp_faddr_dead()
742 sctp_assoc_event(sctp, sctp->sctp_state < SCTPS_ESTABLISHED ? in sctp_faddr_dead()
744 sctp_clean_death(sctp, sctp->sctp_client_errno ? in sctp_faddr_dead()
745 sctp->sctp_client_errno : ETIMEDOUT); in sctp_faddr_dead()
751 sctp_rotate_faddr(sctp_t *sctp, sctp_faddr_t *ofp) in sctp_rotate_faddr() argument
758 ofp = sctp->sctp_current; in sctp_rotate_faddr()
761 if (sctp->sctp_nfaddrs < 2) in sctp_rotate_faddr()
773 nfp = sctp->sctp_faddrs; in sctp_rotate_faddr()
803 sctp_unlink_faddr(sctp_t *sctp, sctp_faddr_t *fp) in sctp_unlink_faddr() argument
809 if (!sctp->sctp_faddrs) { in sctp_unlink_faddr()
828 if (fp == sctp->sctp_faddrs) { in sctp_unlink_faddr()
832 for (fpp = sctp->sctp_faddrs; fpp->sf_next != fp; fpp = fpp->sf_next) in sctp_unlink_faddr()
836 ASSERT(sctp->sctp_conn_tfp != NULL); in sctp_unlink_faddr()
837 mutex_enter(&sctp->sctp_conn_tfp->tf_lock); in sctp_unlink_faddr()
838 if (fp == sctp->sctp_faddrs) { in sctp_unlink_faddr()
839 sctp->sctp_faddrs = fp->sf_next; in sctp_unlink_faddr()
843 mutex_exit(&sctp->sctp_conn_tfp->tf_lock); in sctp_unlink_faddr()
845 sctp->sctp_nfaddrs--; in sctp_unlink_faddr()
849 sctp_zap_faddrs(sctp_t *sctp, int caller_holds_lock) in sctp_zap_faddrs() argument
853 if (sctp->sctp_faddrs == NULL) { in sctp_zap_faddrs()
854 ASSERT(sctp->sctp_lastfaddr == NULL); in sctp_zap_faddrs()
858 ASSERT(sctp->sctp_lastfaddr != NULL); in sctp_zap_faddrs()
859 sctp->sctp_lastfaddr = NULL; in sctp_zap_faddrs()
860 sctp->sctp_current = NULL; in sctp_zap_faddrs()
861 sctp->sctp_primary = NULL; in sctp_zap_faddrs()
863 sctp_free_faddr_timers(sctp); in sctp_zap_faddrs()
865 if (sctp->sctp_conn_tfp != NULL && !caller_holds_lock) { in sctp_zap_faddrs()
867 mutex_enter(&sctp->sctp_conn_tfp->tf_lock); in sctp_zap_faddrs()
870 for (fp = sctp->sctp_faddrs; fp; fp = fpn) { in sctp_zap_faddrs()
877 sctp->sctp_nfaddrs--; in sctp_zap_faddrs()
880 sctp->sctp_faddrs = NULL; in sctp_zap_faddrs()
881 ASSERT(sctp->sctp_nfaddrs == 0); in sctp_zap_faddrs()
882 if (sctp->sctp_conn_tfp != NULL && !caller_holds_lock) { in sctp_zap_faddrs()
883 mutex_exit(&sctp->sctp_conn_tfp->tf_lock); in sctp_zap_faddrs()
889 sctp_zap_addrs(sctp_t *sctp) in sctp_zap_addrs() argument
891 sctp_zap_faddrs(sctp, 0); in sctp_zap_addrs()
892 sctp_free_saddrs(sctp); in sctp_zap_addrs()
916 sctp_build_hdrs(sctp_t *sctp, int sleep) in sctp_build_hdrs() argument
918 conn_t *connp = sctp->sctp_connp; in sctp_build_hdrs()
946 if (hdrs_len != sctp->sctp_iphc_len) { in sctp_build_hdrs()
952 if (sctp->sctp_iphc != NULL) in sctp_build_hdrs()
953 kmem_free(sctp->sctp_iphc, sctp->sctp_iphc_len); in sctp_build_hdrs()
954 sctp->sctp_iphc = hdrs; in sctp_build_hdrs()
955 sctp->sctp_iphc_len = hdrs_len; in sctp_build_hdrs()
957 hdrs = sctp->sctp_iphc; in sctp_build_hdrs()
959 sctp->sctp_hdr_len = sctp->sctp_iphc_len; in sctp_build_hdrs()
960 sctp->sctp_ip_hdr_len = ip_hdr_length; in sctp_build_hdrs()
963 sctp->sctp_sctph = sctph; in sctp_build_hdrs()
966 sctph->sh_verf = sctp->sctp_fvtag; in sctp_build_hdrs()
970 sctp->sctp_ipha = ipha; in sctp_build_hdrs()
986 if (hdrs_len != sctp->sctp_iphc6_len) { in sctp_build_hdrs()
992 if (sctp->sctp_iphc6 != NULL) in sctp_build_hdrs()
993 kmem_free(sctp->sctp_iphc6, sctp->sctp_iphc6_len); in sctp_build_hdrs()
994 sctp->sctp_iphc6 = hdrs; in sctp_build_hdrs()
995 sctp->sctp_iphc6_len = hdrs_len; in sctp_build_hdrs()
997 hdrs = sctp->sctp_iphc6; in sctp_build_hdrs()
999 sctp->sctp_hdr6_len = sctp->sctp_iphc6_len; in sctp_build_hdrs()
1000 sctp->sctp_ip_hdr6_len = ip_hdr_length; in sctp_build_hdrs()
1003 sctp->sctp_sctph6 = sctph; in sctp_build_hdrs()
1006 sctph->sh_verf = sctp->sctp_fvtag; in sctp_build_hdrs()
1010 sctp->sctp_ip6h = ip6h; in sctp_build_hdrs()
1041 sctp_v4_label(sctp_t *sctp, sctp_faddr_t *fp) in sctp_v4_label() argument
1043 conn_t *connp = sctp->sctp_connp; in sctp_v4_label()
1051 sctp_v6_label(sctp_t *sctp, sctp_faddr_t *fp) in sctp_v6_label() argument
1053 conn_t *connp = sctp->sctp_connp; in sctp_v6_label()
1069 sctp_set_hdraddrs(sctp_t *sctp) in sctp_set_hdraddrs() argument
1074 conn_t *connp = sctp->sctp_connp; in sctp_set_hdraddrs()
1076 ASSERT(sctp->sctp_faddrs != NULL); in sctp_set_hdraddrs()
1077 ASSERT(sctp->sctp_nsaddrs > 0); in sctp_set_hdraddrs()
1080 connp->conn_faddr_v6 = sctp->sctp_primary->sf_faddr; in sctp_set_hdraddrs()
1082 connp->conn_saddr_v6 = sctp->sctp_primary->sf_saddr; in sctp_set_hdraddrs()
1084 if (IN6_IS_ADDR_V4MAPPED(&sctp->sctp_primary->sf_faddr)) { in sctp_set_hdraddrs()
1086 sctp_v4_label(sctp, sctp->sctp_primary) == 0) { in sctp_set_hdraddrs()
1094 sctp_v6_label(sctp, sctp->sctp_primary) == 0) { in sctp_set_hdraddrs()
1099 for (fp = sctp->sctp_faddrs; fp; fp = fp->sf_next) { in sctp_set_hdraddrs()
1102 sctp_v4_label(sctp, fp) == 0) { in sctp_set_hdraddrs()
1110 sctp_v6_label(sctp, fp) == 0) { in sctp_set_hdraddrs()
1256 sctp_get_addrparams(sctp_t *sctp, sctp_t *psctp, mblk_t *pkt, in sctp_get_addrparams() argument
1272 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_get_addrparams()
1273 conn_t *connp = sctp->sctp_connp; in sctp_get_addrparams()
1301 ASSERT(sctp->sctp_nsaddrs == 0); in sctp_get_addrparams()
1303 err = sctp_dup_saddrs(psctp, sctp, KM_NOSLEEP); in sctp_get_addrparams()
1314 fp = sctp_lookup_faddr(sctp, hdrsaddr); in sctp_get_addrparams()
1317 err = sctp_add_faddr(sctp, hdrsaddr, KM_NOSLEEP, B_TRUE); in sctp_get_addrparams()
1322 fp = sctp->sctp_faddrs; in sctp_get_addrparams()
1327 curaddr = sctp->sctp_current->sf_faddr; in sctp_get_addrparams()
1329 sctp->sctp_primary = fp; in sctp_get_addrparams()
1330 sctp->sctp_current = fp; in sctp_get_addrparams()
1331 sctp->sctp_mss = fp->sf_pmss; in sctp_get_addrparams()
1334 if (sctp->sctp_loopback || sctp->sctp_linklocal) { in sctp_get_addrparams()
1335 if (sctp->sctp_nsaddrs != 0) in sctp_get_addrparams()
1336 sctp_free_saddrs(sctp); in sctp_get_addrparams()
1337 if ((err = sctp_saddr_add_addr(sctp, hdrdaddr, 0)) != 0) in sctp_get_addrparams()
1340 if (sctp->sctp_loopback) in sctp_get_addrparams()
1350 sctp_check_saddr(sctp, supp_af, psctp == NULL ? in sctp_get_addrparams()
1353 ASSERT(sctp_saddr_lookup(sctp, hdrdaddr, 0) != NULL); in sctp_get_addrparams()
1411 if (sctp_lookup_faddr(sctp, &addr) != NULL) in sctp_get_addrparams()
1415 err = sctp_add_faddr(sctp, &addr, KM_NOSLEEP, in sctp_get_addrparams()
1440 if (sctp_lookup_faddr(sctp, addr6) != NULL) in sctp_get_addrparams()
1443 err = sctp_add_faddr(sctp, in sctp_get_addrparams()
1459 sctp_check_saddr(sctp, supp_af, psctp == NULL ? B_FALSE : in sctp_get_addrparams()
1462 ASSERT(sctp_saddr_lookup(sctp, hdrdaddr, 0) != NULL); in sctp_get_addrparams()
1474 asize = sizeof (in6_addr_t) * sctp->sctp_nfaddrs; in sctp_get_addrparams()
1496 sctp_get_faddr_list(sctp, alist, asize); in sctp_get_addrparams()
1498 sctp->sctp_nfaddrs, dlist, dsize, 1, SCTP_CL_PADDR, in sctp_get_addrparams()
1499 (cl_sctp_handle_t)sctp); in sctp_get_addrparams()
1522 sctp_t *sctp; in sctp_secure_restart_check() local
1625 for (sctp = tf->tf_sctp; sctp; sctp = sctp->sctp_conn_hash_next) { in sctp_secure_restart_check()
1626 if (ports != sctp->sctp_connp->conn_ports) { in sctp_secure_restart_check()
1629 compres = sctp_compare_faddrsets(fphead, sctp->sctp_faddrs); in sctp_secure_restart_check()
1638 SCTP_PRINTADDR(*hdraddr), (void *)sctp)); in sctp_secure_restart_check()
1649 if (sctp_lookup_faddr(sctp, &fp->sf_faddr)) { in sctp_secure_restart_check()
1705 sctp_send_abort(sctp, sctp_init2vtag(ich), in sctp_secure_restart_check()
1733 sctp_congest_reset(sctp_t *sctp) in sctp_congest_reset() argument
1736 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_congest_reset()
1739 for (fp = sctp->sctp_faddrs; fp != NULL; fp = fp->sf_next) { in sctp_congest_reset()
1749 while ((mp = sctp->sctp_xmit_head) != NULL) { in sctp_congest_reset()
1750 sctp->sctp_xmit_head = mp->b_next; in sctp_congest_reset()
1752 if (sctp->sctp_xmit_head != NULL) in sctp_congest_reset()
1753 sctp->sctp_xmit_head->b_prev = NULL; in sctp_congest_reset()
1754 sctp_sendfail_event(sctp, mp, 0, B_TRUE); in sctp_congest_reset()
1756 sctp->sctp_xmit_head = NULL; in sctp_congest_reset()
1757 sctp->sctp_xmit_tail = NULL; in sctp_congest_reset()
1758 sctp->sctp_xmit_unacked = NULL; in sctp_congest_reset()
1760 sctp->sctp_unacked = 0; in sctp_congest_reset()
1767 if (sctp->sctp_cxmit_list != NULL) in sctp_congest_reset()
1768 sctp_asconf_free_cxmit(sctp, NULL); in sctp_congest_reset()
1769 sctp->sctp_cxmit_list = NULL; in sctp_congest_reset()
1770 sctp->sctp_cchunk_pend = 0; in sctp_congest_reset()
1772 sctp->sctp_rexmitting = B_FALSE; in sctp_congest_reset()
1773 sctp->sctp_rxt_nxttsn = 0; in sctp_congest_reset()
1774 sctp->sctp_rxt_maxtsn = 0; in sctp_congest_reset()
1776 sctp->sctp_zero_win_probe = B_FALSE; in sctp_congest_reset()
1780 sctp_init_faddr(sctp_t *sctp, sctp_faddr_t *fp, in6_addr_t *addr, in sctp_init_faddr() argument
1783 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_init_faddr()
1792 (sctps->sctps_initial_mtu - sctp->sctp_hdr_len) & in sctp_init_faddr()
1798 (sctps->sctps_initial_mtu - sctp->sctp_hdr6_len) & in sctp_init_faddr()
1803 fp->sf_rto = MIN(sctp->sctp_rto_initial, sctp->sctp_rto_max_init); in sctp_init_faddr()
1804 SCTP_MAX_RTO(sctp, fp); in sctp_init_faddr()
1808 fp->sf_max_retr = sctp->sctp_pp_max_rxt; in sctp_init_faddr()
1811 fp->sf_hb_interval = sctp->sctp_hb_interval; in sctp_init_faddr()
1828 sctp_get_dest(sctp, fp); in sctp_init_faddr()