diff options
author | Vlad Yasevich <vladislav.yasevich@hp.com> | 2009-11-23 15:54:00 -0500 |
---|---|---|
committer | Vlad Yasevich <vladislav.yasevich@hp.com> | 2009-11-23 15:54:00 -0500 |
commit | 46d5a808558181e03a4760d2188cc9879445738a (patch) | |
tree | a51cc59d64042f61518d25ef4ecc71924f243084 /net/sctp/output.c | |
parent | a5b03ad2143c5bc9ae76533e8321fe66258b4f35 (diff) |
sctp: Update max.burst implementation
Current implementation of max.burst ends up limiting new
data during cwnd decay period. The decay is happening becuase
the connection is idle and we are allowed to fill the congestion
window. The point of max.burst is to limit micro-bursts in response
to large acks. This still happens, as max.burst is still applied
to each transmit opportunity. It will also apply if a very large
send is made (greater then allowed by burst).
Tested-by: Florian Niederbacher <florian.niederbacher@student.uibk.ac.at>
Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Diffstat (limited to 'net/sctp/output.c')
-rw-r--r-- | net/sctp/output.c | 23 |
1 files changed, 0 insertions, 23 deletions
diff --git a/net/sctp/output.c b/net/sctp/output.c index 9e8e0ea844be..b210d2077e28 100644 --- a/net/sctp/output.c +++ b/net/sctp/output.c | |||
@@ -615,7 +615,6 @@ static sctp_xmit_t sctp_packet_can_append_data(struct sctp_packet *packet, | |||
615 | sctp_xmit_t retval = SCTP_XMIT_OK; | 615 | sctp_xmit_t retval = SCTP_XMIT_OK; |
616 | size_t datasize, rwnd, inflight, flight_size; | 616 | size_t datasize, rwnd, inflight, flight_size; |
617 | struct sctp_transport *transport = packet->transport; | 617 | struct sctp_transport *transport = packet->transport; |
618 | __u32 max_burst_bytes; | ||
619 | struct sctp_association *asoc = transport->asoc; | 618 | struct sctp_association *asoc = transport->asoc; |
620 | struct sctp_outq *q = &asoc->outqueue; | 619 | struct sctp_outq *q = &asoc->outqueue; |
621 | 620 | ||
@@ -648,28 +647,6 @@ static sctp_xmit_t sctp_packet_can_append_data(struct sctp_packet *packet, | |||
648 | } | 647 | } |
649 | } | 648 | } |
650 | 649 | ||
651 | /* sctpimpguide-05 2.14.2 | ||
652 | * D) When the time comes for the sender to | ||
653 | * transmit new DATA chunks, the protocol parameter Max.Burst MUST | ||
654 | * first be applied to limit how many new DATA chunks may be sent. | ||
655 | * The limit is applied by adjusting cwnd as follows: | ||
656 | * if ((flightsize + Max.Burst * MTU) < cwnd) | ||
657 | * cwnd = flightsize + Max.Burst * MTU | ||
658 | */ | ||
659 | max_burst_bytes = asoc->max_burst * asoc->pathmtu; | ||
660 | if ((flight_size + max_burst_bytes) < transport->cwnd) { | ||
661 | transport->cwnd = flight_size + max_burst_bytes; | ||
662 | SCTP_DEBUG_PRINTK("%s: cwnd limited by max_burst: " | ||
663 | "transport: %p, cwnd: %d, " | ||
664 | "ssthresh: %d, flight_size: %d, " | ||
665 | "pba: %d\n", | ||
666 | __func__, transport, | ||
667 | transport->cwnd, | ||
668 | transport->ssthresh, | ||
669 | transport->flight_size, | ||
670 | transport->partial_bytes_acked); | ||
671 | } | ||
672 | |||
673 | /* RFC 2960 6.1 Transmission of DATA Chunks | 650 | /* RFC 2960 6.1 Transmission of DATA Chunks |
674 | * | 651 | * |
675 | * B) At any given time, the sender MUST NOT transmit new data | 652 | * B) At any given time, the sender MUST NOT transmit new data |