Lines Matching defs:sctp

37 #include <netinet/sctp.h>
171 sctp_asconf_unrec_parm(sctp_t *sctp, sctp_parm_hdr_t *ph, uint32_t cid,
225 sctp_asconf_ack_unrec_parm(sctp_t *sctp, sctp_parm_hdr_t *ph,
229 sctp_error_event(sctp, (sctp_chunk_hdr_t *)ph, B_TRUE);
270 sctp_asconf_send(sctp_t *sctp, sctp_asconf_t *asc, sctp_faddr_t *fp,
280 isv4 = (fp != NULL) ? fp->sf_isv4 : sctp->sctp_current->sf_isv4;
320 if (sctp->sctp_cxmit_list == NULL) {
321 sctp->sctp_cxmit_list = nmp;
323 linkb(sctp->sctp_cxmit_list, nmp);
326 BUMP_LOCAL(sctp->sctp_obchunks);
329 sctp_wput_asconf(sctp, fp);
343 sctp_asconf_free_cxmit(sctp_t *sctp, sctp_chunk_hdr_t *ch)
349 if (sctp->sctp_cxmit_list == NULL) {
354 mp = sctp->sctp_cxmit_list;
368 sctp->sctp_cxmit_list = NULL;
372 sctp_input_asconf(sctp_t *sctp, sctp_chunk_hdr_t *ch, sctp_faddr_t *fp)
393 sctp_stack_t *sctps = sctp->sctp_sctps;
407 if (*idp == (sctp->sctp_fcsn + 1)) {
409 } else if (*idp == sctp->sctp_fcsn) {
417 hmp = sctp_make_mp(sctp, fp, sizeof (*ach) + sizeof (*idp));
523 mp = dp->asconf(sctp, ph, *idp, fp, &cont, act, &addr);
573 (*cl_sctp_assoc_change)(sctp->sctp_connp->conn_family,
576 (cl_sctp_handle_t)sctp);
581 sctp->sctp_fcsn++;
583 BUMP_LOCAL(sctp->sctp_obchunks);
586 ach->sch_len = htons(msgdsize(hmp) - sctp->sctp_hdr_len);
588 ach->sch_len = htons(msgdsize(hmp) - sctp->sctp_hdr6_len);
590 sctp_set_iplen(sctp, hmp, fp->sf_ixa);
592 BUMP_LOCAL(sctp->sctp_opkts);
593 sctp_validate_peer(sctp);
614 sctp_input_asconf_ack(sctp_t *sctp, sctp_chunk_hdr_t *ch, sctp_faddr_t *fp)
647 if (sctp->sctp_cxmit_list == NULL || *snp != (sctp->sctp_lcsn - 1)) {
651 sctp->sctp_cchunk_pend = 0;
654 mp = sctp->sctp_cxmit_list;
674 och = (sctp_chunk_hdr_t *)sctp->sctp_cxmit_list->b_rptr;
699 dp->asconf_ack(sctp, ph, oph, fp, &addr);
756 dp->asconf_ack(sctp, NULL, oph, fp, &addr);
795 sctp->sctp_cxmit_list = mp->b_cont;
813 (*cl_sctp_assoc_change)(sctp->sctp_connp->conn_family, alist,
815 dcount, SCTP_CL_LADDR, (cl_sctp_handle_t)sctp);
824 if (sctp->sctp_cxmit_list != NULL)
825 sctp_wput_asconf(sctp, NULL);
839 sctp_redo_faddr_srcs(sctp);
843 sctp_rc_timer(sctp_t *sctp, sctp_faddr_t *fp)
848 sctp_stack_t *sctps = sctp->sctp_sctps;
854 if (sctp->sctp_state != SCTPS_ESTABLISHED ||
855 sctp->sctp_cxmit_list == NULL) {
862 if (!SCTP_CHUNK_ISSENT(sctp->sctp_cxmit_list)) {
863 sctp_wput_asconf(sctp, fp);
869 SCTP_CLR_SENT_FLAG(sctp->sctp_cxmit_list);
871 if (sctp->sctp_strikes >= sctp->sctp_pa_max_rxt) {
874 sctp_assoc_event(sctp, SCTP_COMM_LOST, 0, NULL);
875 sctp_clean_death(sctp, ETIMEDOUT);
879 if (sctp_faddr_dead(sctp, fp, SCTP_FADDRS_DOWN) == -1)
884 sctp->sctp_strikes++;
885 SCTP_CALC_RXT(sctp, fp, sctp->sctp_rto_max);
887 nfp = sctp_rotate_faddr(sctp, fp);
888 sctp->sctp_cchunk_pend = 0;
889 ofp = SCTP_CHUNK_DEST(sctp->sctp_cxmit_list);
890 SCTP_SET_CHUNK_DEST(sctp->sctp_cxmit_list, NULL);
892 ASSERT(ofp->sf_suna >= MBLKL(sctp->sctp_cxmit_list));
902 ofp->sf_suna -= MBLKL(sctp->sctp_cxmit_list);
907 if (!SCTP_CHUNK_WANT_REXMIT(sctp->sctp_cxmit_list))
908 SCTP_CHUNK_REXMIT(sctp, sctp->sctp_cxmit_list);
909 sctp_wput_asconf(sctp, nfp);
914 sctp_wput_asconf(sctp_t *sctp, sctp_faddr_t *fp)
923 sctp_stack_t *sctps = sctp->sctp_sctps;
926 if (sctp->sctp_cchunk_pend || sctp->sctp_cxmit_list == NULL ||
928 sctp->sctp_state < SCTPS_ESTABLISHED) {
931 sctp->sctp_cchunk_pend, sctp->sctp_cxmit_list == NULL ?
932 "yes" : "no", sctp->sctp_state));
937 fp = sctp->sctp_current;
940 ipmp = sctp_make_mp(sctp, fp, 0);
942 SCTP_FADDR_RC_TIMER_RESTART(sctp, fp, fp->sf_rto);
946 mp = sctp->sctp_cxmit_list;
948 isv4 = (fp != NULL) ? fp->sf_isv4 : sctp->sctp_current->sf_isv4;
961 ipaddr = sctp_get_valid_addr(sctp, B_FALSE, &saddr_set);
967 SCTP_FADDR_RC_TIMER_RESTART(sctp, fp,
984 ipaddr = sctp_get_valid_addr(sctp, B_TRUE, &saddr_set);
990 SCTP_FADDR_RC_TIMER_RESTART(sctp, fp,
1001 ((mp = dupb(sctp->sctp_cxmit_list)) == NULL)) {
1002 SCTP_FADDR_RC_TIMER_RESTART(sctp, fp, fp->sf_rto);
1010 *snp = htonl(sctp->sctp_lcsn++);
1016 sctp->sctp_cchunk_pend = 1;
1018 SCTP_SET_SENT_FLAG(sctp->sctp_cxmit_list);
1019 SCTP_SET_CHUNK_DEST(sctp->sctp_cxmit_list, fp);
1020 sctp_set_iplen(sctp, ipmp, fp->sf_ixa);
1022 BUMP_LOCAL(sctp->sctp_opkts);
1023 SCTP_FADDR_RC_TIMER_RESTART(sctp, fp, fp->sf_rto);
1150 sctp_addip_req(sctp_t *sctp, sctp_parm_hdr_t *ph, uint32_t cid,
1159 sctp_stack_t *sctps = sctp->sctp_sctps;
1183 if (sctp_lookup_faddr(sctp, &addr) != NULL) {
1195 mutex_enter(&sctp->sctp_conn_tfp->tf_lock);
1196 err = sctp_add_faddr(sctp, &addr, KM_NOSLEEP, B_FALSE);
1197 mutex_exit(&sctp->sctp_conn_tfp->tf_lock);
1207 sctp_intf_event(sctp, addr, SCTP_ADDR_ADDED, 0);
1209 nfp = sctp_lookup_faddr(sctp, &addr);
1220 if (sctp->sctp_faddrs == nfp && nfp->sf_next == NULL) {
1238 sctp_unlink_faddr(sctp, nfp);
1240 if (sctp->sctp_primary == nfp) {
1241 sctp->sctp_primary = fp;
1243 if (sctp->sctp_current == nfp) {
1244 sctp_set_faddr_current(sctp, fp);
1246 if (sctp->sctp_lastdata == nfp) {
1247 sctp->sctp_lastdata = fp;
1249 if (sctp->sctp_shutdown_faddr == nfp) {
1250 sctp->sctp_shutdown_faddr = nfp;
1252 if (sctp->sctp_lastfaddr == nfp) {
1253 for (fp = sctp->sctp_faddrs; fp->sf_next;
1256 sctp->sctp_lastfaddr = fp;
1258 sctp_intf_event(sctp, addr, SCTP_ADDR_REMOVED, 0);
1278 sctp_addip_ack(sctp_t *sctp, sctp_parm_hdr_t *ph, sctp_parm_hdr_t *oph,
1294 sctp->sctp_understands_addip = B_FALSE;
1304 sctp_error_event(sctp, (sctp_chunk_hdr_t *)ph, B_TRUE);
1321 sp = sctp_saddr_lookup(sctp, &addr, 0);
1326 sctp_del_saddr(sctp, sp);
1335 sctp_del_saddr(sctp, sp);
1345 sctp_setprim_req(sctp_t *sctp, sctp_parm_hdr_t *ph, uint32_t cid,
1356 if (!sctp->sctp_understands_asconf || !sctp->sctp_understands_addip) {
1381 nfp = sctp_lookup_faddr(sctp, &addr);
1396 sctp_intf_event(sctp, addr, SCTP_ADDR_MADE_PRIM, 0);
1397 sctp->sctp_primary = nfp;
1398 if (nfp->sf_state != SCTP_FADDRS_ALIVE || nfp == sctp->sctp_current) {
1401 sctp_set_faddr_current(sctp, nfp);
1407 sctp_setprim_ack(sctp_t *sctp, sctp_parm_hdr_t *ph, sctp_parm_hdr_t *oph,
1413 sctp->sctp_understands_addip = B_FALSE;
1415 sctp_error_event(sctp, (sctp_chunk_hdr_t *)ph, B_TRUE);
1422 sctp_add_ip(sctp_t *sctp, const void *addrs, uint32_t cnt)
1435 conn_t *connp = sctp->sctp_connp;
1438 if (!sctp->sctp_understands_asconf || !sctp->sctp_understands_addip)
1517 error = sctp_asconf_send(sctp, asc, sctp->sctp_current, ainfo);
1534 sctp_del_ip(sctp_t *sctp, const void *addrs, uint32_t cnt, uchar_t *ulist,
1555 sctp_stack_t *sctps = sctp->sctp_sctps;
1556 conn_t *connp = sctp->sctp_connp;
1559 if (sctp->sctp_state <= SCTPS_LISTEN || !sctps->sctps_addip_enabled ||
1560 !sctp->sctp_understands_asconf || !sctp->sctp_understands_addip) {
1564 if (sctp->sctp_state > SCTPS_BOUND)
1619 nsp = sctp_saddr_lookup(sctp, &addr, ifindex);
1675 sctp_del_saddr_list(sctp, addrs, cnt, B_FALSE);
1678 error = sctp_asconf_send(sctp, asc, sctp->sctp_current, ainfo);
1681 sctp_redo_faddr_srcs(sctp);
1706 nsp = sctp_saddr_lookup(sctp, &addr, ifindex);
1717 sctp_set_peerprim(sctp_t *sctp, const void *inp)
1733 if (!sctp->sctp_understands_asconf || !sctp->sctp_understands_addip) {
1738 if (sctp->sctp_state != SCTPS_ESTABLISHED)
1754 sp = sctp_saddr_lookup(sctp, &addr, ifindex);
1793 error = sctp_asconf_send(sctp, asc, sctp->sctp_current, NULL);