Lines Matching refs:fp

63 sctp_set_saddr(sctp_t *sctp, sctp_faddr_t *fp)  in sctp_set_saddr()  argument
65 boolean_t v6 = !fp->sf_isv4; in sctp_set_saddr()
68 fp->sf_saddr = sctp_get_valid_addr(sctp, v6, &addr_set); in sctp_set_saddr()
76 fp->sf_state = SCTP_FADDRS_UNREACH; in sctp_set_saddr()
86 sctp_get_dest(sctp_t *sctp, sctp_faddr_t *fp) in sctp_get_dest() argument
104 fp->sf_saddr = ipv6_all_zeros; in sctp_get_dest()
111 if (fp->sf_state == SCTP_FADDRS_UNREACH) { in sctp_get_dest()
112 fp->sf_state = SCTP_FADDRS_UNCONFIRMED; in sctp_get_dest()
119 fp->sf_ixa->ixa_flags |= IXAF_PMTU_DISCOVERY; in sctp_get_dest()
121 ip_attr_nexthop(&connp->conn_xmit_ipp, fp->sf_ixa, &fp->sf_faddr, in sctp_get_dest()
124 laddr = fp->sf_saddr; in sctp_get_dest()
125 error = ip_attr_connect(connp, fp->sf_ixa, &laddr, &fp->sf_faddr, in sctp_get_dest()
130 SCTP_PRINTADDR(fp->sf_faddr))); in sctp_get_dest()
148 sctp_set_saddr(sctp, fp); in sctp_get_dest()
149 if (fp->sf_state == SCTP_FADDRS_UNREACH) in sctp_get_dest()
153 ASSERT(fp->sf_ixa->ixa_ire != NULL); in sctp_get_dest()
154 ASSERT(!(fp->sf_ixa->ixa_ire->ire_flags & (RTF_REJECT|RTF_BLACKHOLE))); in sctp_get_dest()
165 fp->sf_saddr = laddr; in sctp_get_dest()
177 sctp_set_saddr(sctp, fp); in sctp_get_dest()
178 if (fp->sf_state == SCTP_FADDRS_UNREACH) { in sctp_get_dest()
187 if (fp->sf_srtt == -1 && uinfo.iulp_rtt != 0) { in sctp_get_dest()
189 fp->sf_srtt = MSEC_TO_TICK(uinfo.iulp_rtt); in sctp_get_dest()
190 fp->sf_rttvar = MSEC_TO_TICK(uinfo.iulp_rtt_sd); in sctp_get_dest()
191 fp->sf_rto = 3 * fp->sf_srtt; 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()
208 if (fp->sf_isv4) { in sctp_get_dest()
213 if ((fp->sf_pmss + hdrlen) != pmtu) { in sctp_get_dest()
215 fp->sf_pmss = (pmtu - hdrlen) & ~(SCTP_ALIGN - 1); in sctp_get_dest()
216 if (fp->sf_cwnd < (fp->sf_pmss * 2)) { in sctp_get_dest()
217 SET_CWND(fp, fp->sf_pmss, 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()
230 sctp_faddr_t *fp; in sctp_update_dce() local
236 for (fp = sctp->sctp_faddrs; fp != NULL; fp = fp->sf_next) { in sctp_update_dce()
243 if (fp->sf_pmtu_discovered) { in sctp_update_dce()
244 if (fp->sf_isv4) { in sctp_update_dce()
245 uinfo.iulp_mtu = fp->sf_pmss + in sctp_update_dce()
248 uinfo.iulp_mtu = fp->sf_pmss + in sctp_update_dce()
253 fp->sf_rtt_updates >= sctps->sctps_rtt_updates) { in sctp_update_dce()
258 uinfo.iulp_rtt = TICK_TO_MSEC(fp->sf_srtt); in sctp_update_dce()
259 uinfo.iulp_rtt_sd = TICK_TO_MSEC(fp->sf_rttvar); in sctp_update_dce()
260 fp->sf_rtt_updates = 0; in sctp_update_dce()
263 if (IN6_IS_ADDR_LINKSCOPE(&fp->sf_faddr)) { in sctp_update_dce()
268 if (fp->sf_ixa->ixa_nce != NULL) { in sctp_update_dce()
269 ifindex = fp->sf_ixa->ixa_nce->nce_common-> in sctp_update_dce()
276 (void) dce_update_uinfo(&fp->sf_faddr, ifindex, &uinfo, ipst); in sctp_update_dce()
284 sctp_make_mp(sctp_t *sctp, sctp_faddr_t *fp, int trailer) in sctp_make_mp() argument
292 ASSERT(fp != NULL); in sctp_make_mp()
293 isv4 = fp->sf_isv4; in sctp_make_mp()
295 if (SCTP_IS_ADDR_UNSPEC(isv4, fp->sf_saddr) || in sctp_make_mp()
296 (fp->sf_ixa->ixa_ire->ire_flags & (RTF_REJECT|RTF_BLACKHOLE))) { in sctp_make_mp()
298 sctp_get_dest(sctp, fp); in sctp_make_mp()
308 if (fp->sf_state == SCTP_FADDRS_UNREACH) in sctp_make_mp()
311 ASSERT(fp->sf_ixa->ixa_ire != NULL); in sctp_make_mp()
312 ASSERT(!SCTP_IS_ADDR_UNSPEC(isv4, fp->sf_saddr)); in sctp_make_mp()
334 if (fp != sctp->sctp_current || src_changed) { in sctp_make_mp()
336 IN6_V4MAPPED_TO_IPADDR(&fp->sf_faddr, iph->ipha_dst); in sctp_make_mp()
337 IN6_V4MAPPED_TO_IPADDR(&fp->sf_saddr, iph->ipha_src); in sctp_make_mp()
340 if (fp->sf_df) { in sctp_make_mp()
347 if (fp != sctp->sctp_current || src_changed) { in sctp_make_mp()
349 ((ip6_t *)(mp->b_rptr))->ip6_dst = fp->sf_faddr; in sctp_make_mp()
350 ((ip6_t *)(mp->b_rptr))->ip6_src = fp->sf_saddr; in sctp_make_mp()
556 sctp_faddr_t *fp; in sctp_lookup_faddr() local
558 for (fp = sctp->sctp_faddrs; fp != NULL; fp = fp->sf_next) { in sctp_lookup_faddr()
559 if (IN6_ARE_ADDR_EQUAL(&fp->sf_faddr, addr)) in sctp_lookup_faddr()
563 return (fp); in sctp_lookup_faddr()
567 sctp_lookup_faddr_nosctp(sctp_faddr_t *fp, in6_addr_t *addr) in sctp_lookup_faddr_nosctp() argument
569 for (; fp; fp = fp->sf_next) { in sctp_lookup_faddr_nosctp()
570 if (IN6_ARE_ADDR_EQUAL(&fp->sf_faddr, addr)) { in sctp_lookup_faddr_nosctp()
575 return (fp); in sctp_lookup_faddr_nosctp()
582 sctp_set_faddr_current(sctp_t *sctp, sctp_faddr_t *fp) in sctp_set_faddr_current() argument
585 if (fp->sf_isv4) { in sctp_set_faddr_current()
586 IN6_V4MAPPED_TO_IPADDR(&fp->sf_faddr, in sctp_set_faddr_current()
588 IN6_V4MAPPED_TO_IPADDR(&fp->sf_saddr, in sctp_set_faddr_current()
591 if (fp->sf_df) { 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()
613 sctp_faddr_t *fp; in sctp_redo_faddr_srcs() local
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
635 fp->sf_strikes = 0; in sctp_faddr_alive()
636 fp->sf_lastactive = now; in sctp_faddr_alive()
637 fp->sf_hb_expiry = now + SET_HB_INTVL(fp); in sctp_faddr_alive()
638 fp->sf_hb_pending = B_FALSE; in sctp_faddr_alive()
639 if (fp->sf_state != SCTP_FADDRS_ALIVE) { in sctp_faddr_alive()
640 fp->sf_state = SCTP_FADDRS_ALIVE; 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()
653 fp->sf_state != SCTP_FADDRS_UNREACH) { in sctp_faddr_alive()
654 sctp_set_faddr_current(sctp, fp); in sctp_faddr_alive()
667 sctp_faddr_t *fp; in sctp_is_a_faddr_clean() local
669 for (fp = sctp->sctp_faddrs; fp; fp = fp->sf_next) { in sctp_is_a_faddr_clean()
670 if (fp->sf_state == SCTP_FADDRS_ALIVE && fp->sf_strikes == 0) { in sctp_is_a_faddr_clean()
686 sctp_faddr_dead(sctp_t *sctp, sctp_faddr_t *fp, int newstate) in sctp_faddr_dead() argument
691 if (fp->sf_state == SCTP_FADDRS_ALIVE) { in sctp_faddr_dead()
692 sctp_intf_event(sctp, fp->sf_faddr, SCTP_ADDR_UNREACHABLE, 0); in sctp_faddr_dead()
694 fp->sf_state = newstate; in sctp_faddr_dead()
697 SCTP_PRINTADDR(fp->sf_faddr), newstate)); in sctp_faddr_dead()
699 if (fp == sctp->sctp_current) { in sctp_faddr_dead()
705 ofp = fp; in sctp_faddr_dead()
706 for (fp = fp->sf_next; fp != NULL; fp = fp->sf_next) { in sctp_faddr_dead()
707 if (fp->sf_state == SCTP_FADDRS_ALIVE) { in sctp_faddr_dead()
712 if (fp == NULL) { in sctp_faddr_dead()
714 for (fp = sctp->sctp_faddrs; fp != ofp; fp = fp->sf_next) { in sctp_faddr_dead()
715 if (fp->sf_state == SCTP_FADDRS_ALIVE) { in sctp_faddr_dead()
725 if (fp != ofp) { in sctp_faddr_dead()
728 SCTP_PRINTADDR(fp->sf_faddr))); in sctp_faddr_dead()
733 sctp_set_faddr_current(sctp, fp); in sctp_faddr_dead()
803 sctp_unlink_faddr(sctp_t *sctp, sctp_faddr_t *fp) in sctp_unlink_faddr() argument
813 if (fp->sf_timer_mp != NULL) { in sctp_unlink_faddr()
814 sctp_timer_free(fp->sf_timer_mp); in sctp_unlink_faddr()
815 fp->sf_timer_mp = NULL; in sctp_unlink_faddr()
816 fp->sf_timer_running = 0; in sctp_unlink_faddr()
818 if (fp->sf_rc_timer_mp != NULL) { in sctp_unlink_faddr()
819 sctp_timer_free(fp->sf_rc_timer_mp); in sctp_unlink_faddr()
820 fp->sf_rc_timer_mp = NULL; in sctp_unlink_faddr()
821 fp->sf_rc_timer_running = 0; in sctp_unlink_faddr()
823 if (fp->sf_ixa != NULL) { in sctp_unlink_faddr()
824 ixa_refrele(fp->sf_ixa); in sctp_unlink_faddr()
825 fp->sf_ixa = NULL; 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()
838 if (fp == sctp->sctp_faddrs) { in sctp_unlink_faddr()
839 sctp->sctp_faddrs = fp->sf_next; in sctp_unlink_faddr()
841 fpp->sf_next = fp->sf_next; in sctp_unlink_faddr()
844 kmem_cache_free(sctp_kmem_faddr_cache, fp); in sctp_unlink_faddr()
851 sctp_faddr_t *fp, *fpn; in sctp_zap_faddrs() local
870 for (fp = sctp->sctp_faddrs; fp; fp = fpn) { in sctp_zap_faddrs()
871 fpn = fp->sf_next; in sctp_zap_faddrs()
872 if (fp->sf_ixa != NULL) { in sctp_zap_faddrs()
873 ixa_refrele(fp->sf_ixa); in sctp_zap_faddrs()
874 fp->sf_ixa = NULL; in sctp_zap_faddrs()
876 kmem_cache_free(sctp_kmem_faddr_cache, fp); in sctp_zap_faddrs()
1041 sctp_v4_label(sctp_t *sctp, sctp_faddr_t *fp) in sctp_v4_label() argument
1045 ASSERT(fp->sf_ixa->ixa_flags & IXAF_IS_IPV4); in sctp_v4_label()
1046 return (conn_update_label(connp, fp->sf_ixa, &fp->sf_faddr, in sctp_v4_label()
1051 sctp_v6_label(sctp_t *sctp, sctp_faddr_t *fp) in sctp_v6_label() argument
1055 ASSERT(!(fp->sf_ixa->ixa_flags & IXAF_IS_IPV4)); in sctp_v6_label()
1056 return (conn_update_label(connp, fp->sf_ixa, &fp->sf_faddr, in sctp_v6_label()
1071 sctp_faddr_t *fp; in sctp_set_hdraddrs() local
1099 for (fp = sctp->sctp_faddrs; fp; fp = fp->sf_next) { in sctp_set_hdraddrs()
1100 if (!gotv4 && IN6_IS_ADDR_V4MAPPED(&fp->sf_faddr)) { in sctp_set_hdraddrs()
1102 sctp_v4_label(sctp, fp) == 0) { in sctp_set_hdraddrs()
1108 } else if (!gotv6 && !IN6_IS_ADDR_V4MAPPED(&fp->sf_faddr)) { in sctp_set_hdraddrs()
1110 sctp_v6_label(sctp, fp) == 0) { in sctp_set_hdraddrs()
1268 sctp_faddr_t *fp; in sctp_get_addrparams() local
1314 fp = sctp_lookup_faddr(sctp, hdrsaddr); in sctp_get_addrparams()
1315 if (fp == NULL) { in sctp_get_addrparams()
1322 fp = sctp->sctp_faddrs; 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()
1513 sctp_faddr_t *fp, *fphead = NULL; in sctp_secure_restart_check() local
1600 fp = sctp_lookup_faddr_nosctp(fphead, hdraddr); in sctp_secure_restart_check()
1601 if (fp == NULL) { in sctp_secure_restart_check()
1603 fp = kmem_cache_alloc(sctp_kmem_faddr_cache, sleep); in sctp_secure_restart_check()
1604 if (fp == NULL) { in sctp_secure_restart_check()
1607 bzero(fp, sizeof (*fp)); in sctp_secure_restart_check()
1608 fp->sf_faddr = *hdraddr; in sctp_secure_restart_check()
1609 fp->sf_next = fphead; in sctp_secure_restart_check()
1610 fphead = fp; in sctp_secure_restart_check()
1648 for (fp = fphead; fp; fp = fp->sf_next) { in sctp_secure_restart_check()
1649 if (sctp_lookup_faddr(sctp, &fp->sf_faddr)) { in sctp_secure_restart_check()
1650 fp->sf_rto = 0; in sctp_secure_restart_check()
1652 fp->sf_rto = 1; in sctp_secure_restart_check()
1678 for (fp = fphead; fp; fp = fp->sf_next) { in sctp_secure_restart_check()
1679 if (fp->sf_rto == 0) { in sctp_secure_restart_check()
1682 if (IN6_IS_ADDR_V4MAPPED(&fp->sf_faddr)) { in sctp_secure_restart_check()
1687 IN6_V4MAPPED_TO_IPADDR(&fp->sf_faddr, addr4); in sctp_secure_restart_check()
1697 bcopy(&fp->sf_faddr, ph, sizeof (fp->sf_faddr)); in sctp_secure_restart_check()
1699 ((char *)ph + sizeof (fp->sf_faddr)); in sctp_secure_restart_check()
1716 for (fp = fphead; fp; fp = fpn) { in sctp_secure_restart_check()
1717 fpn = fp->sf_next; in sctp_secure_restart_check()
1718 if (fp->sf_ixa != NULL) { in sctp_secure_restart_check()
1719 ixa_refrele(fp->sf_ixa); in sctp_secure_restart_check()
1720 fp->sf_ixa = NULL; in sctp_secure_restart_check()
1722 kmem_cache_free(sctp_kmem_faddr_cache, fp); in sctp_secure_restart_check()
1735 sctp_faddr_t *fp; in sctp_congest_reset() local
1739 for (fp = sctp->sctp_faddrs; fp != NULL; fp = fp->sf_next) { in sctp_congest_reset()
1740 fp->sf_ssthresh = sctps->sctps_initial_mtu; in sctp_congest_reset()
1741 SET_CWND(fp, fp->sf_pmss, sctps->sctps_slow_start_initial); in sctp_congest_reset()
1742 fp->sf_suna = 0; in sctp_congest_reset()
1743 fp->sf_pba = 0; in sctp_congest_reset()
1780 sctp_init_faddr(sctp_t *sctp, sctp_faddr_t *fp, in6_addr_t *addr, in sctp_init_faddr() argument
1785 ASSERT(fp->sf_ixa != NULL); in sctp_init_faddr()
1787 bcopy(addr, &fp->sf_faddr, sizeof (*addr)); in sctp_init_faddr()
1789 fp->sf_isv4 = 1; in sctp_init_faddr()
1791 fp->sf_pmss = in sctp_init_faddr()
1794 fp->sf_ixa->ixa_flags |= IXAF_IS_IPV4; in sctp_init_faddr()
1796 fp->sf_isv4 = 0; in sctp_init_faddr()
1797 fp->sf_pmss = in sctp_init_faddr()
1800 fp->sf_ixa->ixa_flags &= ~IXAF_IS_IPV4; in sctp_init_faddr()
1802 fp->sf_cwnd = sctps->sctps_slow_start_initial * fp->sf_pmss; 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()
1805 fp->sf_srtt = -1; in sctp_init_faddr()
1806 fp->sf_rtt_updates = 0; in sctp_init_faddr()
1807 fp->sf_strikes = 0; in sctp_init_faddr()
1808 fp->sf_max_retr = sctp->sctp_pp_max_rxt; in sctp_init_faddr()
1810 fp->sf_state = SCTP_FADDRS_UNCONFIRMED; in sctp_init_faddr()
1811 fp->sf_hb_interval = sctp->sctp_hb_interval; in sctp_init_faddr()
1812 fp->sf_ssthresh = sctps->sctps_initial_ssthresh; in sctp_init_faddr()
1813 fp->sf_suna = 0; in sctp_init_faddr()
1814 fp->sf_pba = 0; in sctp_init_faddr()
1815 fp->sf_acked = 0; in sctp_init_faddr()
1816 fp->sf_lastactive = fp->sf_hb_expiry = ddi_get_lbolt64(); in sctp_init_faddr()
1817 fp->sf_timer_mp = timer_mp; in sctp_init_faddr()
1818 fp->sf_hb_pending = B_FALSE; in sctp_init_faddr()
1819 fp->sf_hb_enabled = B_TRUE; in sctp_init_faddr()
1820 fp->sf_df = 1; in sctp_init_faddr()
1821 fp->sf_pmtu_discovered = 0; in sctp_init_faddr()
1822 fp->sf_next = NULL; in sctp_init_faddr()
1823 fp->sf_T3expire = 0; in sctp_init_faddr()
1824 (void) random_get_pseudo_bytes((uint8_t *)&fp->sf_hb_secret, in sctp_init_faddr()
1825 sizeof (fp->sf_hb_secret)); in sctp_init_faddr()
1826 fp->sf_rxt_unacked = 0; in sctp_init_faddr()
1828 sctp_get_dest(sctp, fp); in sctp_init_faddr()
1835 sctp_faddr_t *fp = buf; in faddr_constructor() local
1837 fp->sf_timer_mp = NULL; in faddr_constructor()
1838 fp->sf_timer_running = 0; in faddr_constructor()
1840 fp->sf_rc_timer_mp = NULL; in faddr_constructor()
1841 fp->sf_rc_timer_running = 0; in faddr_constructor()
1850 sctp_faddr_t *fp = buf; in faddr_destructor() local
1852 ASSERT(fp->sf_timer_mp == NULL); in faddr_destructor()
1853 ASSERT(fp->sf_timer_running == 0); in faddr_destructor()
1855 ASSERT(fp->sf_rc_timer_mp == NULL); in faddr_destructor()
1856 ASSERT(fp->sf_rc_timer_running == 0); in faddr_destructor()