diff options
author | George Shepherd <George.Shepherd@Sun.COM> | 2010-06-02 11:03:00 -0700 |
---|---|---|
committer | George Shepherd <George.Shepherd@Sun.COM> | 2010-06-02 11:03:00 -0700 |
commit | 481845d830b7316f6899f39897e6a09d8dec8613 (patch) | |
tree | 7a309bffccd25657eab7e11dea1f1d8b883af67e | |
parent | d88af7610f00512b386cb6ea0907b568db460c51 (diff) | |
download | illumos-gate-481845d830b7316f6899f39897e6a09d8dec8613.tar.gz |
6922123 under sctp proto-stress testing an ASSERT in sctp_connect() is tripped.
6922175 under sctp proto-stress testing an ASSERT in ip_output_simple_v4() is tripped
6922550 under sctp proto-stress testing an ASSERT in sctp_output() is tripped
-rw-r--r-- | usr/src/uts/common/inet/sctp/sctp_conn.c | 6 | ||||
-rw-r--r-- | usr/src/uts/common/inet/sctp/sctp_output.c | 13 | ||||
-rw-r--r-- | usr/src/uts/common/inet/sctp/sctp_shutdown.c | 6 |
3 files changed, 13 insertions, 12 deletions
diff --git a/usr/src/uts/common/inet/sctp/sctp_conn.c b/usr/src/uts/common/inet/sctp/sctp_conn.c index 44524907eb..9dc8255f50 100644 --- a/usr/src/uts/common/inet/sctp/sctp_conn.c +++ b/usr/src/uts/common/inet/sctp/sctp_conn.c @@ -20,8 +20,7 @@ */ /* - * Copyright 2010 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. */ #include <sys/types.h> @@ -502,9 +501,6 @@ sctp_connect(sctp_t *sctp, const struct sockaddr *dst, uint32_t addrlen, /* XXX check for attempt to connect to self */ connp->conn_fport = dstport; - ASSERT(sctp->sctp_iphc); - ASSERT(sctp->sctp_iphc6); - /* * Don't allow this connection to completely duplicate * an existing connection. diff --git a/usr/src/uts/common/inet/sctp/sctp_output.c b/usr/src/uts/common/inet/sctp/sctp_output.c index 5b739286ac..b1ae0e58f9 100644 --- a/usr/src/uts/common/inet/sctp/sctp_output.c +++ b/usr/src/uts/common/inet/sctp/sctp_output.c @@ -1004,6 +1004,7 @@ sctp_output(sctp_t *sctp, uint_t num_pkt) int error; boolean_t notsent = B_TRUE; sctp_stack_t *sctps = sctp->sctp_sctps; + uint32_t tsn; if (sctp->sctp_ftsn == sctp->sctp_lastacked + 1) { sacklen = 0; @@ -1171,11 +1172,15 @@ sctp_output(sctp_t *sctp, uint_t num_pkt) SCTP_CHUNK_SENT(sctp, mp, sdc, fp, chunklen, meta); mp = mp->b_next; - /* Use this chunk to measure RTT? */ - if (sctp->sctp_out_time == 0) { + /* + * Use this chunk to measure RTT? + * Must not be a retransmision of an earlier chunk, + * ensure the tsn is current. + */ + tsn = ntohl(sdc->sdh_tsn); + if (sctp->sctp_out_time == 0 && tsn == (sctp->sctp_ltsn - 1)) { sctp->sctp_out_time = now; - sctp->sctp_rtt_tsn = sctp->sctp_ltsn - 1; - ASSERT(sctp->sctp_rtt_tsn == ntohl(sdc->sdh_tsn)); + sctp->sctp_rtt_tsn = tsn; } if (extra > 0) { fill = sctp_get_padding(sctp, extra); diff --git a/usr/src/uts/common/inet/sctp/sctp_shutdown.c b/usr/src/uts/common/inet/sctp/sctp_shutdown.c index 87a56db9ac..c1b648a4b8 100644 --- a/usr/src/uts/common/inet/sctp/sctp_shutdown.c +++ b/usr/src/uts/common/inet/sctp/sctp_shutdown.c @@ -20,8 +20,7 @@ */ /* - * Copyright 2010 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. */ #include <sys/types.h> @@ -297,7 +296,6 @@ sctp_ootb_shutdown_ack(mblk_t *mp, uint_t ip_hdr_len, ip_recv_attr_t *ira, return; } mp1->b_rptr += sctps->sctps_wroff_xtra; - mp1->b_wptr = mp1->b_rptr + MBLKL(mp); bcopy(mp->b_rptr, mp1->b_rptr, MBLKL(mp)); freeb(mp); mp = mp1; @@ -307,6 +305,8 @@ sctp_ootb_shutdown_ack(mblk_t *mp, uint_t ip_hdr_len, ip_recv_attr_t *ira, ixas.ixa_pktlen = ip_hdr_len + sizeof (*insctph) + sizeof (*scch); ixas.ixa_ip_hdr_length = ip_hdr_len; + mp->b_wptr = (mp->b_rptr + ixas.ixa_pktlen); + /* * We follow the logic in tcp_xmit_early_reset() in that we skip * reversing source route (i.e. replace all IP options with EOL). |