summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/inet/sctp/sctp_output.c
diff options
context:
space:
mode:
authorchandrasekar marimuthu - Sun Microsystems - Bangalore India <Chandrasekar.Marimuthu@Sun.COM>2010-08-03 22:50:37 -0700
committerchandrasekar marimuthu - Sun Microsystems - Bangalore India <Chandrasekar.Marimuthu@Sun.COM>2010-08-03 22:50:37 -0700
commit6be61d4ea129a94bdfe33533b2bc265d4447f05c (patch)
treed8c613a1dbca052164f956ff107c8d5ee3e44bf6 /usr/src/uts/common/inet/sctp/sctp_output.c
parent32c3e7eeacbc9a513544d1b4f631fd628cec7da3 (diff)
downloadillumos-gate-6be61d4ea129a94bdfe33533b2bc265d4447f05c.tar.gz
6912476 SCTP Observability issues with sctp_faddr_s & sctp_reass_s
6912478 SCTP_COMM_LOST notification is generated even if sctp association is not established
Diffstat (limited to 'usr/src/uts/common/inet/sctp/sctp_output.c')
-rw-r--r--usr/src/uts/common/inet/sctp/sctp_output.c205
1 files changed, 104 insertions, 101 deletions
diff --git a/usr/src/uts/common/inet/sctp/sctp_output.c b/usr/src/uts/common/inet/sctp/sctp_output.c
index 170bec2c8a..e6a991dc1e 100644
--- a/usr/src/uts/common/inet/sctp/sctp_output.c
+++ b/usr/src/uts/common/inet/sctp/sctp_output.c
@@ -342,7 +342,7 @@ sctp_chunkify(sctp_t *sctp, int mss, int firstseg_len, int bytes_to_send)
fp = SCTP_CHUNK_DEST(mdblk);
if (fp == NULL)
fp = sctp->sctp_current;
- if (fp->isv4)
+ if (fp->sf_isv4)
xtralen = sctp->sctp_hdr_len + sctps->sctps_wroff_xtra +
sizeof (*sdc);
else
@@ -377,10 +377,10 @@ nextmsg:
while (mp->b_next != NULL)
mp = mp->b_next;
chunk_len = ntohs(((sctp_data_hdr_t *)mp->b_rptr)->sdh_len);
- if (fp->sfa_pmss - chunk_len > sizeof (*sdc))
- count = chunksize = fp->sfa_pmss - chunk_len;
+ if (fp->sf_pmss - chunk_len > sizeof (*sdc))
+ count = chunksize = fp->sf_pmss - chunk_len;
else
- count = chunksize = fp->sfa_pmss;
+ count = chunksize = fp->sf_pmss;
count = chunksize = count - sizeof (*sdc);
} else {
msg_hdr = (sctp_msg_hdr_t *)mdblk->b_rptr;
@@ -499,7 +499,7 @@ nextchunk:
bytes_to_send -= (chunksize - count);
if (chunk_mp != NULL) {
next:
- count = chunksize = fp->sfa_pmss - sizeof (*sdc);
+ count = chunksize = fp->sf_pmss - sizeof (*sdc);
goto nextchunk;
}
SCTP_DATA_SET_EBIT(sdc);
@@ -527,21 +527,21 @@ try_next:
if (fp == fp1) {
size_t len = MBLKL(mdblk->b_cont);
if ((count > 0) &&
- ((len > fp->sfa_pmss - sizeof (*sdc)) ||
+ ((len > fp->sf_pmss - sizeof (*sdc)) ||
(len <= count))) {
count -= sizeof (*sdc);
count = chunksize = count - (count & 0x3);
} else {
- count = chunksize = fp->sfa_pmss -
+ count = chunksize = fp->sf_pmss -
sizeof (*sdc);
}
} else {
- if (fp1->isv4)
+ if (fp1->sf_isv4)
xtralen = sctp->sctp_hdr_len;
else
xtralen = sctp->sctp_hdr6_len;
xtralen += sctps->sctps_wroff_xtra + sizeof (*sdc);
- count = chunksize = fp1->sfa_pmss - sizeof (*sdc);
+ count = chunksize = fp1->sf_pmss - sizeof (*sdc);
fp = fp1;
}
goto nextmsg;
@@ -570,7 +570,7 @@ sctp_add_proto_hdr(sctp_t *sctp, sctp_faddr_t *fp, mblk_t *mp, int sacklen,
{
int hdrlen;
uchar_t *hdr;
- int isv4 = fp->isv4;
+ int isv4 = fp->sf_isv4;
sctp_stack_t *sctps = sctp->sctp_sctps;
if (error != NULL)
@@ -586,18 +586,18 @@ sctp_add_proto_hdr(sctp_t *sctp, sctp_faddr_t *fp, mblk_t *mp, int sacklen,
/*
* A reject|blackhole could mean that the address is 'down'. Similarly,
* it is possible that the address went down, we tried to send an
- * heartbeat and ended up setting fp->saddr as unspec because we
+ * heartbeat and ended up setting fp->sf_saddr as unspec because we
* didn't have any usable source address. In either case
* sctp_get_dest() will try find an IRE, if available, and set
* the source address, if needed. If we still don't have any
- * usable source address, fp->state will be SCTP_FADDRS_UNREACH and
+ * usable source address, fp->sf_state will be SCTP_FADDRS_UNREACH and
* we return EHOSTUNREACH.
*/
- ASSERT(fp->ixa->ixa_ire != NULL);
- if ((fp->ixa->ixa_ire->ire_flags & (RTF_REJECT|RTF_BLACKHOLE)) ||
- SCTP_IS_ADDR_UNSPEC(fp->isv4, fp->saddr)) {
+ ASSERT(fp->sf_ixa->ixa_ire != NULL);
+ if ((fp->sf_ixa->ixa_ire->ire_flags & (RTF_REJECT|RTF_BLACKHOLE)) ||
+ SCTP_IS_ADDR_UNSPEC(fp->sf_isv4, fp->sf_saddr)) {
sctp_get_dest(sctp, fp);
- if (fp->state == SCTP_FADDRS_UNREACH) {
+ if (fp->sf_state == SCTP_FADDRS_UNREACH) {
if (error != NULL)
*error = EHOSTUNREACH;
return (NULL);
@@ -636,9 +636,9 @@ sctp_add_proto_hdr(sctp_t *sctp, sctp_faddr_t *fp, mblk_t *mp, int sacklen,
if (isv4) {
ipha_t *iph = (ipha_t *)mp->b_rptr;
- IN6_V4MAPPED_TO_IPADDR(&fp->faddr, iph->ipha_dst);
- if (!IN6_IS_ADDR_V4MAPPED_ANY(&fp->saddr)) {
- IN6_V4MAPPED_TO_IPADDR(&fp->saddr,
+ IN6_V4MAPPED_TO_IPADDR(&fp->sf_faddr, iph->ipha_dst);
+ if (!IN6_IS_ADDR_V4MAPPED_ANY(&fp->sf_saddr)) {
+ IN6_V4MAPPED_TO_IPADDR(&fp->sf_saddr,
iph->ipha_src);
} else if (sctp->sctp_bound_to_all) {
iph->ipha_src = INADDR_ANY;
@@ -646,9 +646,9 @@ sctp_add_proto_hdr(sctp_t *sctp, sctp_faddr_t *fp, mblk_t *mp, int sacklen,
} else {
ip6_t *ip6h = (ip6_t *)mp->b_rptr;
- ip6h->ip6_dst = fp->faddr;
- if (!IN6_IS_ADDR_UNSPECIFIED(&fp->saddr)) {
- ip6h->ip6_src = fp->saddr;
+ ip6h->ip6_dst = fp->sf_faddr;
+ if (!IN6_IS_ADDR_UNSPECIFIED(&fp->sf_saddr)) {
+ ip6h->ip6_src = fp->sf_saddr;
} else if (sctp->sctp_bound_to_all) {
ip6h->ip6_src = ipv6_all_zeros;
}
@@ -723,7 +723,8 @@ sctp_find_fast_rexmit_mblks(sctp_t *sctp, int *total, sctp_faddr_t **fp)
chunk_fp = SCTP_CHUNK_DEST(mp);
if (*fp == NULL) {
*fp = chunk_fp;
- if ((*fp)->state != SCTP_FADDRS_ALIVE) {
+ if ((*fp)->sf_state !=
+ SCTP_FADDRS_ALIVE) {
old_fp = *fp;
*fp = sctp->sctp_current;
}
@@ -746,7 +747,7 @@ sctp_find_fast_rexmit_mblks(sctp_t *sctp, int *total, sctp_faddr_t **fp)
* PMTU may have changed.
*/
if (*total + msglen + extra >
- (*fp)->sfa_pmss && start_mp != NULL) {
+ (*fp)->sf_pmss && start_mp != NULL) {
return (start_mp);
}
if ((nmp = dupmsg(mp)) == NULL)
@@ -807,7 +808,7 @@ sctp_verify_chain(mblk_t *head, mblk_t *tail)
* the unsent list, if any, and also as an input to sctp_chunkify() if so.
*
* firstseg_len indicates the space already used, cansend represents remaining
- * space in the window, ((sfa_pmss - firstseg_len) can therefore reasonably
+ * space in the window, ((sf_pmss - firstseg_len) can therefore reasonably
* be used to compute the cansend arg).
*/
mblk_t *
@@ -906,19 +907,19 @@ next_msg:
ASSERT(sctp->sctp_unsent > 0);
if (fp == NULL) {
fp = SCTP_CHUNK_DEST(sctp->sctp_xmit_unsent);
- if (fp == NULL || fp->state != SCTP_FADDRS_ALIVE)
+ if (fp == NULL || fp->sf_state != SCTP_FADDRS_ALIVE)
fp = sctp->sctp_current;
} else {
/*
* If user specified destination, try to honor that.
*/
fp1 = SCTP_CHUNK_DEST(sctp->sctp_xmit_unsent);
- if (fp1 != NULL && fp1->state == SCTP_FADDRS_ALIVE &&
+ if (fp1 != NULL && fp1->sf_state == SCTP_FADDRS_ALIVE &&
fp1 != fp) {
goto chunk_done;
}
}
- meta = sctp_chunkify(sctp, fp->sfa_pmss, firstseg_len, cansend);
+ meta = sctp_chunkify(sctp, fp->sf_pmss, firstseg_len, cansend);
if (meta == NULL)
goto chunk_done;
/*
@@ -969,16 +970,16 @@ sctp_fast_rexmit(sctp_t *sctp)
SCTP_KSTAT(sctps, sctp_fr_add_hdr);
return;
}
- if ((pktlen > fp->sfa_pmss) && fp->isv4) {
+ if ((pktlen > fp->sf_pmss) && fp->sf_isv4) {
ipha_t *iph = (ipha_t *)head->b_rptr;
iph->ipha_fragment_offset_and_flags = 0;
}
- sctp_set_iplen(sctp, head, fp->ixa);
- (void) conn_ip_output(head, fp->ixa);
+ sctp_set_iplen(sctp, head, fp->sf_ixa);
+ (void) conn_ip_output(head, fp->sf_ixa);
BUMP_LOCAL(sctp->sctp_opkts);
- sctp->sctp_active = fp->lastactive = ddi_get_lbolt64();
+ sctp->sctp_active = fp->sf_lastactive = ddi_get_lbolt64();
}
void
@@ -1015,7 +1016,7 @@ sctp_output(sctp_t *sctp, uint_t num_pkt)
(sizeof (sctp_sack_frag_t) * sctp->sctp_sack_gaps);
lfp = sctp->sctp_lastdata;
ASSERT(lfp != NULL);
- if (lfp->state != SCTP_FADDRS_ALIVE)
+ if (lfp->sf_state != SCTP_FADDRS_ALIVE)
lfp = sctp->sctp_current;
}
@@ -1028,9 +1029,9 @@ sctp_output(sctp_t *sctp, uint_t num_pkt)
* trying to send into a zero window. This timer
* ensures the blocked send attempt is retried.
*/
- if ((cansend < sctp->sctp_current->sfa_pmss / 2) &&
+ if ((cansend < sctp->sctp_current->sf_pmss / 2) &&
(sctp->sctp_unacked != 0) &&
- (sctp->sctp_unacked < sctp->sctp_current->sfa_pmss) &&
+ (sctp->sctp_unacked < sctp->sctp_current->sf_pmss) &&
!sctp->sctp_ndelay ||
(cansend == 0 && sctp->sctp_unacked == 0 &&
sctp->sctp_unsent != 0)) {
@@ -1074,7 +1075,7 @@ sctp_output(sctp_t *sctp, uint_t num_pkt)
if (chunklen > cansend) {
head = NULL;
fp = SCTP_CHUNK_DEST(meta);
- if (fp == NULL || fp->state != SCTP_FADDRS_ALIVE)
+ if (fp == NULL || fp->sf_state != SCTP_FADDRS_ALIVE)
fp = sctp->sctp_current;
goto unsent_data;
}
@@ -1084,13 +1085,14 @@ sctp_output(sctp_t *sctp, uint_t num_pkt)
/*
* Pick destination address, and check cwnd.
*/
- if (sacklen > 0 && (seglen + extra <= lfp->cwnd - lfp->suna) &&
- (seglen + sacklen + extra <= lfp->sfa_pmss)) {
+ if (sacklen > 0 && (seglen + extra <= lfp->sf_cwnd -
+ lfp->sf_suna) &&
+ (seglen + sacklen + extra <= lfp->sf_pmss)) {
/*
* Only include SACK chunk if it can be bundled
* with a data chunk, and sent to sctp_lastdata.
*/
- pathmax = lfp->cwnd - lfp->suna;
+ pathmax = lfp->sf_cwnd - lfp->sf_suna;
fp = lfp;
if ((nmp = dupmsg(mp)) == NULL) {
@@ -1124,18 +1126,18 @@ sctp_output(sctp_t *sctp, uint_t num_pkt)
sacklen = 0;
} else {
fp = SCTP_CHUNK_DEST(meta);
- if (fp == NULL || fp->state != SCTP_FADDRS_ALIVE)
+ if (fp == NULL || fp->sf_state != SCTP_FADDRS_ALIVE)
fp = sctp->sctp_current;
/*
* If we haven't sent data to this destination for
* a while, do slow start again.
*/
- if (now - fp->lastactive > fp->rto) {
- SET_CWND(fp, fp->sfa_pmss,
+ if (now - fp->sf_lastactive > fp->sf_rto) {
+ SET_CWND(fp, fp->sf_pmss,
sctps->sctps_slow_start_after_idle);
}
- pathmax = fp->cwnd - fp->suna;
+ pathmax = fp->sf_cwnd - fp->sf_suna;
if (seglen + extra > pathmax) {
head = NULL;
goto unsent_data;
@@ -1166,9 +1168,9 @@ sctp_output(sctp_t *sctp, uint_t num_pkt)
goto unsent_data;
}
}
- fp->lastactive = now;
- if (pathmax > fp->sfa_pmss)
- pathmax = fp->sfa_pmss;
+ fp->sf_lastactive = now;
+ if (pathmax > fp->sf_pmss)
+ pathmax = fp->sf_pmss;
SCTP_CHUNK_SENT(sctp, mp, sdc, fp, chunklen, meta);
mp = mp->b_next;
@@ -1258,7 +1260,7 @@ sctp_output(sctp_t *sctp, uint_t num_pkt)
linkb(head, nmp);
mp = mp->b_next;
}
- if ((seglen > fp->sfa_pmss) && fp->isv4) {
+ if ((seglen > fp->sf_pmss) && fp->sf_isv4) {
ipha_t *iph = (ipha_t *)head->b_rptr;
/*
@@ -1276,20 +1278,20 @@ sctp_output(sctp_t *sctp, uint_t num_pkt)
seglen - xtralen, ntohl(sdc->sdh_tsn),
ntohs(sdc->sdh_ssn), (void *)fp, sctp->sctp_frwnd,
cansend, sctp->sctp_lastack_rxd));
- sctp_set_iplen(sctp, head, fp->ixa);
- (void) conn_ip_output(head, fp->ixa);
+ sctp_set_iplen(sctp, head, fp->sf_ixa);
+ (void) conn_ip_output(head, fp->sf_ixa);
BUMP_LOCAL(sctp->sctp_opkts);
/* arm rto timer (if not set) */
- if (!fp->timer_running)
- SCTP_FADDR_TIMER_RESTART(sctp, fp, fp->rto);
+ if (!fp->sf_timer_running)
+ SCTP_FADDR_TIMER_RESTART(sctp, fp, fp->sf_rto);
notsent = B_FALSE;
}
sctp->sctp_active = now;
return;
unsent_data:
/* arm persist timer (if rto timer not set) */
- if (!fp->timer_running)
- SCTP_FADDR_TIMER_RESTART(sctp, fp, fp->rto);
+ if (!fp->sf_timer_running)
+ SCTP_FADDR_TIMER_RESTART(sctp, fp, fp->sf_rto);
if (head != NULL)
freemsg(head);
}
@@ -1333,7 +1335,7 @@ sctp_free_ftsn_set(sctp_ftsn_set_t *s)
* entry for stream id, sid, for this message already exists, the
* sequence number, ssn, is updated if it is greater than the existing
* one. If an entry for this sid does not exist, one is created if
- * the size does not exceed fp->sfa_pmss. We return false in case
+ * the size does not exceed fp->sf_pmss. We return false in case
* or an error.
*/
boolean_t
@@ -1350,7 +1352,7 @@ sctp_add_ftsn_set(sctp_ftsn_set_t **s, sctp_faddr_t *fp, mblk_t *meta,
ASSERT((*nsets == 0 && *s == NULL) || (*nsets > 0 && *s != NULL));
if (*s == NULL) {
- ASSERT((*slen + sizeof (uint32_t)) <= fp->sfa_pmss);
+ ASSERT((*slen + sizeof (uint32_t)) <= fp->sf_pmss);
*s = kmem_cache_alloc(sctp_kmem_ftsn_set_cache, KM_NOSLEEP);
if (*s == NULL)
return (B_FALSE);
@@ -1373,7 +1375,7 @@ sctp_add_ftsn_set(sctp_ftsn_set_t **s, sctp_faddr_t *fp, mblk_t *meta,
if (SSN_GT(ssn, p->ftsn_entries.ftsn_ssn))
p->ftsn_entries.ftsn_ssn = ssn;
} else {
- if ((*slen + sizeof (uint32_t)) > fp->sfa_pmss)
+ if ((*slen + sizeof (uint32_t)) > fp->sf_pmss)
return (B_FALSE);
p->next = kmem_cache_alloc(sctp_kmem_ftsn_set_cache,
KM_NOSLEEP);
@@ -1408,7 +1410,7 @@ sctp_make_ftsn_chunk(sctp_t *sctp, sctp_faddr_t *fp, sctp_ftsn_set_t *sets,
sctp_stack_t *sctps = sctp->sctp_sctps;
seglen += sizeof (sctp_chunk_hdr_t);
- if (fp->isv4)
+ if (fp->sf_isv4)
xtralen = sctp->sctp_hdr_len + sctps->sctps_wroff_xtra;
else
xtralen = sctp->sctp_hdr6_len + sctps->sctps_wroff_xtra;
@@ -1515,7 +1517,7 @@ ftsn_done:
sacklen = sizeof (sctp_chunk_hdr_t) +
sizeof (sctp_sack_chunk_t) +
(sizeof (sctp_sack_frag_t) * sctp->sctp_sack_gaps);
- if (*seglen + sacklen > sctp->sctp_lastdata->sfa_pmss) {
+ if (*seglen + sacklen > sctp->sctp_lastdata->sf_pmss) {
/* piggybacked SACK doesn't fit */
sacklen = 0;
} else {
@@ -1755,8 +1757,8 @@ window_probe:
* Send a window probe. Inflate frwnd to allow
* sending one segment.
*/
- if (sctp->sctp_frwnd < (oldfp->sfa_pmss - sizeof (*sdc)))
- sctp->sctp_frwnd = oldfp->sfa_pmss - sizeof (*sdc);
+ if (sctp->sctp_frwnd < (oldfp->sf_pmss - sizeof (*sdc)))
+ sctp->sctp_frwnd = oldfp->sf_pmss - sizeof (*sdc);
/* next TSN to send */
sctp->sctp_rxt_nxttsn = sctp->sctp_ltsn;
@@ -1780,7 +1782,7 @@ out:
* After a time out, assume that everything has left the network. So
* we can clear rxt_unacked for the original peer address.
*/
- oldfp->rxt_unacked = 0;
+ oldfp->sf_rxt_unacked = 0;
/*
* If we were probing for zero window, don't adjust retransmission
@@ -1795,13 +1797,13 @@ out:
* and sctp_rxt_maxtsn will specify the ZWP packet.
*/
fp = oldfp;
- if (oldfp->state != SCTP_FADDRS_ALIVE)
+ if (oldfp->sf_state != SCTP_FADDRS_ALIVE)
fp = sctp_rotate_faddr(sctp, oldfp);
pkt = sctp_rexmit_packet(sctp, &meta, &mp, fp, &pkt_len);
if (pkt != NULL) {
- ASSERT(pkt_len <= fp->sfa_pmss);
- sctp_set_iplen(sctp, pkt, fp->ixa);
- (void) conn_ip_output(pkt, fp->ixa);
+ ASSERT(pkt_len <= fp->sf_pmss);
+ sctp_set_iplen(sctp, pkt, fp->sf_ixa);
+ (void) conn_ip_output(pkt, fp->sf_ixa);
BUMP_LOCAL(sctp->sctp_opkts);
} else {
SCTP_KSTAT(sctps, sctp_ss_rexmit_failed);
@@ -1811,13 +1813,13 @@ out:
* The strikes will be clear by sctp_faddr_alive() when the
* other side sends us an ack.
*/
- oldfp->strikes++;
+ oldfp->sf_strikes++;
sctp->sctp_strikes++;
SCTP_CALC_RXT(sctp, oldfp, sctp->sctp_rto_max);
- if (oldfp != fp && oldfp->suna != 0)
- SCTP_FADDR_TIMER_RESTART(sctp, oldfp, fp->rto);
- SCTP_FADDR_TIMER_RESTART(sctp, fp, fp->rto);
+ if (oldfp != fp && oldfp->sf_suna != 0)
+ SCTP_FADDR_TIMER_RESTART(sctp, oldfp, fp->sf_rto);
+ SCTP_FADDR_TIMER_RESTART(sctp, fp, fp->sf_rto);
SCTPS_BUMP_MIB(sctps, sctpOutWinProbe);
return;
}
@@ -1825,11 +1827,11 @@ out:
/*
* Enter slowstart for this destination
*/
- oldfp->ssthresh = oldfp->cwnd / 2;
- if (oldfp->ssthresh < 2 * oldfp->sfa_pmss)
- oldfp->ssthresh = 2 * oldfp->sfa_pmss;
- oldfp->cwnd = oldfp->sfa_pmss;
- oldfp->pba = 0;
+ oldfp->sf_ssthresh = oldfp->sf_cwnd / 2;
+ if (oldfp->sf_ssthresh < 2 * oldfp->sf_pmss)
+ oldfp->sf_ssthresh = 2 * oldfp->sf_pmss;
+ oldfp->sf_cwnd = oldfp->sf_pmss;
+ oldfp->sf_pba = 0;
fp = sctp_rotate_faddr(sctp, oldfp);
ASSERT(fp != NULL);
sdc = (sctp_data_hdr_t *)mp->b_rptr;
@@ -1866,7 +1868,7 @@ out:
sacklen = sizeof (sctp_chunk_hdr_t) +
sizeof (sctp_sack_chunk_t) +
(sizeof (sctp_sack_frag_t) * sctp->sctp_sack_gaps);
- if (seglen + sacklen > sctp->sctp_lastdata->sfa_pmss) {
+ if (seglen + sacklen > sctp->sctp_lastdata->sf_pmss) {
/* piggybacked SACK doesn't fit */
sacklen = 0;
} else {
@@ -1879,7 +1881,8 @@ out:
* the fp is alive.
*/
if (sctp->sctp_lastdata != oldfp &&
- sctp->sctp_lastdata->state == SCTP_FADDRS_ALIVE) {
+ sctp->sctp_lastdata->sf_state ==
+ SCTP_FADDRS_ALIVE) {
fp = sctp->sctp_lastdata;
}
}
@@ -1894,8 +1897,8 @@ out:
sctp->sctp_out_time = 0;
}
/* Clear the counter as the RTT calculation may be off. */
- fp->rtt_updates = 0;
- oldfp->rtt_updates = 0;
+ fp->sf_rtt_updates = 0;
+ oldfp->sf_rtt_updates = 0;
/*
* After a timeout, we should change the current faddr so that
@@ -1931,7 +1934,7 @@ out:
try_bundle:
/* We can at least and at most send 1 packet at timeout. */
- while (seglen < fp->sfa_pmss) {
+ while (seglen < fp->sf_pmss) {
int32_t new_len;
/* Go through the list to find more chunks to be bundled. */
@@ -1961,7 +1964,7 @@ try_bundle:
* could be bundled with this retransmission.
*/
meta = sctp_get_msg_to_send(sctp, &mp, NULL, &error,
- seglen, fp->sfa_pmss - seglen, NULL);
+ seglen, fp->sf_pmss - seglen, NULL);
if (error != 0 || meta == NULL) {
/* No more chunk to be bundled. */
break;
@@ -1976,7 +1979,7 @@ try_bundle:
if ((extra = new_len & (SCTP_ALIGN - 1)) != 0)
extra = SCTP_ALIGN - extra;
- if ((new_len = seglen + new_len + extra) > fp->sfa_pmss)
+ if ((new_len = seglen + new_len + extra) > fp->sf_pmss)
break;
if ((nmp = dupmsg(mp)) == NULL)
break;
@@ -1999,7 +2002,7 @@ try_bundle:
mp = mp->b_next;
}
done_bundle:
- if ((seglen > fp->sfa_pmss) && fp->isv4) {
+ if ((seglen > fp->sf_pmss) && fp->sf_isv4) {
ipha_t *iph = (ipha_t *)head->b_rptr;
/*
@@ -2009,7 +2012,7 @@ done_bundle:
*/
iph->ipha_fragment_offset_and_flags = 0;
}
- fp->rxt_unacked += seglen;
+ fp->sf_rxt_unacked += seglen;
dprint(2, ("sctp_rexmit: Sending packet %d bytes, tsn %x "
"ssn %d to %p (rwnd %d, lastack_rxd %x)\n",
@@ -2019,8 +2022,8 @@ done_bundle:
sctp->sctp_rexmitting = B_TRUE;
sctp->sctp_rxt_nxttsn = first_ua_tsn;
sctp->sctp_rxt_maxtsn = sctp->sctp_ltsn - 1;
- sctp_set_iplen(sctp, head, fp->ixa);
- (void) conn_ip_output(head, fp->ixa);
+ sctp_set_iplen(sctp, head, fp->sf_ixa);
+ (void) conn_ip_output(head, fp->sf_ixa);
BUMP_LOCAL(sctp->sctp_opkts);
/*
@@ -2028,7 +2031,7 @@ done_bundle:
* the new fp timer for the retransmitted chunks.
*/
restart_timer:
- oldfp->strikes++;
+ oldfp->sf_strikes++;
sctp->sctp_strikes++;
SCTP_CALC_RXT(sctp, oldfp, sctp->sctp_rto_max);
/*
@@ -2037,8 +2040,8 @@ restart_timer:
* continue to run so it will do its job in checking the reachability
* of the oldfp.
*/
- if (oldfp != fp && oldfp->suna != 0)
- SCTP_FADDR_TIMER_RESTART(sctp, oldfp, oldfp->rto);
+ if (oldfp != fp && oldfp->sf_suna != 0)
+ SCTP_FADDR_TIMER_RESTART(sctp, oldfp, oldfp->sf_rto);
/*
* Should we restart the timer of the new fp? If there is
@@ -2053,7 +2056,7 @@ restart_timer:
* is the chunk we just retransmitted. So for now, let's
* be conservative and restart the timer of the new fp.
*/
- SCTP_FADDR_TIMER_RESTART(sctp, fp, fp->rto);
+ SCTP_FADDR_TIMER_RESTART(sctp, fp, fp->sf_rto);
sctp->sctp_active = ddi_get_lbolt64();
}
@@ -2114,7 +2117,7 @@ sctp_rexmit_packet(sctp_t *sctp, mblk_t **meta, mblk_t **mp, sctp_faddr_t *fp,
*mp = (*mp)->b_next;
try_bundle:
- while (seglen < fp->sfa_pmss) {
+ while (seglen < fp->sf_pmss) {
int32_t new_len;
/*
@@ -2157,7 +2160,7 @@ try_bundle:
if ((extra = new_len & (SCTP_ALIGN - 1)) != 0)
extra = SCTP_ALIGN - extra;
- if ((new_len = seglen + new_len + extra) > fp->sfa_pmss)
+ if ((new_len = seglen + new_len + extra) > fp->sf_pmss)
break;
if ((nmp = dupmsg(*mp)) == NULL)
break;
@@ -2185,7 +2188,7 @@ try_bundle:
*mp = (*mp)->b_next;
}
*packet_len = seglen;
- fp->rxt_unacked += seglen;
+ fp->sf_rxt_unacked += seglen;
return (head);
}
@@ -2258,10 +2261,10 @@ sctp_ss_rexmit(sctp_t *sctp)
* retransmission, we skip this walk to save some time. This should
* not make the retransmission too aggressive to cause congestion.
*/
- if (fp->cwnd <= fp->rxt_unacked)
- tot_wnd = fp->sfa_pmss;
+ if (fp->sf_cwnd <= fp->sf_rxt_unacked)
+ tot_wnd = fp->sf_pmss;
else
- tot_wnd = fp->cwnd - fp->rxt_unacked;
+ tot_wnd = fp->sf_cwnd - fp->sf_rxt_unacked;
/* Find the first unack'ed chunk */
for (meta = sctp->sctp_xmit_head; meta != NULL; meta = meta->b_next) {
@@ -2286,14 +2289,14 @@ sctp_ss_rexmit(sctp_t *sctp)
return;
found_msg:
- if (!fp->timer_running)
- SCTP_FADDR_TIMER_RESTART(sctp, fp, fp->rto);
+ if (!fp->sf_timer_running)
+ SCTP_FADDR_TIMER_RESTART(sctp, fp, fp->sf_rto);
pkt = sctp_rexmit_packet(sctp, &meta, &mp, fp, &pkt_len);
if (pkt == NULL) {
SCTP_KSTAT(sctps, sctp_ss_rexmit_failed);
return;
}
- if ((pkt_len > fp->sfa_pmss) && fp->isv4) {
+ if ((pkt_len > fp->sf_pmss) && fp->sf_isv4) {
ipha_t *iph = (ipha_t *)pkt->b_rptr;
/*
@@ -2303,12 +2306,12 @@ found_msg:
*/
iph->ipha_fragment_offset_and_flags = 0;
}
- sctp_set_iplen(sctp, pkt, fp->ixa);
- (void) conn_ip_output(pkt, fp->ixa);
+ sctp_set_iplen(sctp, pkt, fp->sf_ixa);
+ (void) conn_ip_output(pkt, fp->sf_ixa);
BUMP_LOCAL(sctp->sctp_opkts);
/* Check and see if there is more chunk to be retransmitted. */
- if (tot_wnd <= pkt_len || tot_wnd - pkt_len < fp->sfa_pmss ||
+ if (tot_wnd <= pkt_len || tot_wnd - pkt_len < fp->sf_pmss ||
meta == NULL)
return;
if (mp == NULL)