linux/net/sctp/outqueue.c
<<
>>
Prefs
   1/* SCTP kernel implementation
   2 * (C) Copyright IBM Corp. 2001, 2004
   3 * Copyright (c) 1999-2000 Cisco, Inc.
   4 * Copyright (c) 1999-2001 Motorola, Inc.
   5 * Copyright (c) 2001-2003 Intel Corp.
   6 *
   7 * This file is part of the SCTP kernel implementation
   8 *
   9 * These functions implement the sctp_outq class.   The outqueue handles
  10 * bundling and queueing of outgoing SCTP chunks.
  11 *
  12 * This SCTP implementation is free software;
  13 * you can redistribute it and/or modify it under the terms of
  14 * the GNU General Public License as published by
  15 * the Free Software Foundation; either version 2, or (at your option)
  16 * any later version.
  17 *
  18 * This SCTP implementation is distributed in the hope that it
  19 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
  20 *                 ************************
  21 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  22 * See the GNU General Public License for more details.
  23 *
  24 * You should have received a copy of the GNU General Public License
  25 * along with GNU CC; see the file COPYING.  If not, write to
  26 * the Free Software Foundation, 59 Temple Place - Suite 330,
  27 * Boston, MA 02111-1307, USA.
  28 *
  29 * Please send any bug reports or fixes you make to the
  30 * email address(es):
  31 *    lksctp developers <lksctp-developers@lists.sourceforge.net>
  32 *
  33 * Or submit a bug report through the following website:
  34 *    http://www.sf.net/projects/lksctp
  35 *
  36 * Written or modified by:
  37 *    La Monte H.P. Yarroll <piggy@acm.org>
  38 *    Karl Knutson          <karl@athena.chicago.il.us>
  39 *    Perry Melange         <pmelange@null.cc.uic.edu>
  40 *    Xingang Guo           <xingang.guo@intel.com>
  41 *    Hui Huang             <hui.huang@nokia.com>
  42 *    Sridhar Samudrala     <sri@us.ibm.com>
  43 *    Jon Grimm             <jgrimm@us.ibm.com>
  44 *
  45 * Any bugs reported given to us we will try to fix... any fixes shared will
  46 * be incorporated into the next SCTP release.
  47 */
  48
  49#include <linux/types.h>
  50#include <linux/list.h>   /* For struct list_head */
  51#include <linux/socket.h>
  52#include <linux/ip.h>
  53#include <net/sock.h>     /* For skb_set_owner_w */
  54
  55#include <net/sctp/sctp.h>
  56#include <net/sctp/sm.h>
  57
  58/* Declare internal functions here.  */
  59static int sctp_acked(struct sctp_sackhdr *sack, __u32 tsn);
  60static void sctp_check_transmitted(struct sctp_outq *q,
  61                                   struct list_head *transmitted_queue,
  62                                   struct sctp_transport *transport,
  63                                   struct sctp_sackhdr *sack,
  64                                   __u32 highest_new_tsn);
  65
  66static void sctp_mark_missing(struct sctp_outq *q,
  67                              struct list_head *transmitted_queue,
  68                              struct sctp_transport *transport,
  69                              __u32 highest_new_tsn,
  70                              int count_of_newacks);
  71
  72static void sctp_generate_fwdtsn(struct sctp_outq *q, __u32 sack_ctsn);
  73
  74static int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout);
  75
  76/* Add data to the front of the queue. */
  77static inline void sctp_outq_head_data(struct sctp_outq *q,
  78                                        struct sctp_chunk *ch)
  79{
  80        list_add(&ch->list, &q->out_chunk_list);
  81        q->out_qlen += ch->skb->len;
  82        return;
  83}
  84
  85/* Take data from the front of the queue. */
  86static inline struct sctp_chunk *sctp_outq_dequeue_data(struct sctp_outq *q)
  87{
  88        struct sctp_chunk *ch = NULL;
  89
  90        if (!list_empty(&q->out_chunk_list)) {
  91                struct list_head *entry = q->out_chunk_list.next;
  92
  93                ch = list_entry(entry, struct sctp_chunk, list);
  94                list_del_init(entry);
  95                q->out_qlen -= ch->skb->len;
  96        }
  97        return ch;
  98}
  99/* Add data chunk to the end of the queue. */
 100static inline void sctp_outq_tail_data(struct sctp_outq *q,
 101                                       struct sctp_chunk *ch)
 102{
 103        list_add_tail(&ch->list, &q->out_chunk_list);
 104        q->out_qlen += ch->skb->len;
 105        return;
 106}
 107
 108/*
 109 * SFR-CACC algorithm:
 110 * D) If count_of_newacks is greater than or equal to 2
 111 * and t was not sent to the current primary then the
 112 * sender MUST NOT increment missing report count for t.
 113 */
 114static inline int sctp_cacc_skip_3_1_d(struct sctp_transport *primary,
 115                                       struct sctp_transport *transport,
 116                                       int count_of_newacks)
 117{
 118        if (count_of_newacks >=2 && transport != primary)
 119                return 1;
 120        return 0;
 121}
 122
 123/*
 124 * SFR-CACC algorithm:
 125 * F) If count_of_newacks is less than 2, let d be the
 126 * destination to which t was sent. If cacc_saw_newack
 127 * is 0 for destination d, then the sender MUST NOT
 128 * increment missing report count for t.
 129 */
 130static inline int sctp_cacc_skip_3_1_f(struct sctp_transport *transport,
 131                                       int count_of_newacks)
 132{
 133        if (count_of_newacks < 2 && !transport->cacc.cacc_saw_newack)
 134                return 1;
 135        return 0;
 136}
 137
 138/*
 139 * SFR-CACC algorithm:
 140 * 3.1) If CYCLING_CHANGEOVER is 0, the sender SHOULD
 141 * execute steps C, D, F.
 142 *
 143 * C has been implemented in sctp_outq_sack
 144 */
 145static inline int sctp_cacc_skip_3_1(struct sctp_transport *primary,
 146                                     struct sctp_transport *transport,
 147                                     int count_of_newacks)
 148{
 149        if (!primary->cacc.cycling_changeover) {
 150                if (sctp_cacc_skip_3_1_d(primary, transport, count_of_newacks))
 151                        return 1;
 152                if (sctp_cacc_skip_3_1_f(transport, count_of_newacks))
 153                        return 1;
 154                return 0;
 155        }
 156        return 0;
 157}
 158
 159/*
 160 * SFR-CACC algorithm:
 161 * 3.2) Else if CYCLING_CHANGEOVER is 1, and t is less
 162 * than next_tsn_at_change of the current primary, then
 163 * the sender MUST NOT increment missing report count
 164 * for t.
 165 */
 166static inline int sctp_cacc_skip_3_2(struct sctp_transport *primary, __u32 tsn)
 167{
 168        if (primary->cacc.cycling_changeover &&
 169            TSN_lt(tsn, primary->cacc.next_tsn_at_change))
 170                return 1;
 171        return 0;
 172}
 173
 174/*
 175 * SFR-CACC algorithm:
 176 * 3) If the missing report count for TSN t is to be
 177 * incremented according to [RFC2960] and
 178 * [SCTP_STEWART-2002], and CHANGEOVER_ACTIVE is set,
 179 * then the sender MUST futher execute steps 3.1 and
 180 * 3.2 to determine if the missing report count for
 181 * TSN t SHOULD NOT be incremented.
 182 *
 183 * 3.3) If 3.1 and 3.2 do not dictate that the missing
 184 * report count for t should not be incremented, then
 185 * the sender SOULD increment missing report count for
 186 * t (according to [RFC2960] and [SCTP_STEWART_2002]).
 187 */
 188static inline int sctp_cacc_skip(struct sctp_transport *primary,
 189                                 struct sctp_transport *transport,
 190                                 int count_of_newacks,
 191                                 __u32 tsn)
 192{
 193        if (primary->cacc.changeover_active &&
 194            (sctp_cacc_skip_3_1(primary, transport, count_of_newacks)
 195             || sctp_cacc_skip_3_2(primary, tsn)))
 196                return 1;
 197        return 0;
 198}
 199
 200/* Initialize an existing sctp_outq.  This does the boring stuff.
 201 * You still need to define handlers if you really want to DO
 202 * something with this structure...
 203 */
 204void sctp_outq_init(struct sctp_association *asoc, struct sctp_outq *q)
 205{
 206        q->asoc = asoc;
 207        INIT_LIST_HEAD(&q->out_chunk_list);
 208        INIT_LIST_HEAD(&q->control_chunk_list);
 209        INIT_LIST_HEAD(&q->retransmit);
 210        INIT_LIST_HEAD(&q->sacked);
 211        INIT_LIST_HEAD(&q->abandoned);
 212
 213        q->fast_rtx = 0;
 214        q->outstanding_bytes = 0;
 215        q->empty = 1;
 216        q->cork  = 0;
 217
 218        q->malloced = 0;
 219        q->out_qlen = 0;
 220}
 221
 222/* Free the outqueue structure and any related pending chunks.
 223 */
 224void sctp_outq_teardown(struct sctp_outq *q)
 225{
 226        struct sctp_transport *transport;
 227        struct list_head *lchunk, *temp;
 228        struct sctp_chunk *chunk, *tmp;
 229
 230        /* Throw away unacknowledged chunks. */
 231        list_for_each_entry(transport, &q->asoc->peer.transport_addr_list,
 232                        transports) {
 233                while ((lchunk = sctp_list_dequeue(&transport->transmitted)) != NULL) {
 234                        chunk = list_entry(lchunk, struct sctp_chunk,
 235                                           transmitted_list);
 236                        /* Mark as part of a failed message. */
 237                        sctp_chunk_fail(chunk, q->error);
 238                        sctp_chunk_free(chunk);
 239                }
 240        }
 241
 242        /* Throw away chunks that have been gap ACKed.  */
 243        list_for_each_safe(lchunk, temp, &q->sacked) {
 244                list_del_init(lchunk);
 245                chunk = list_entry(lchunk, struct sctp_chunk,
 246                                   transmitted_list);
 247                sctp_chunk_fail(chunk, q->error);
 248                sctp_chunk_free(chunk);
 249        }
 250
 251        /* Throw away any chunks in the retransmit queue. */
 252        list_for_each_safe(lchunk, temp, &q->retransmit) {
 253                list_del_init(lchunk);
 254                chunk = list_entry(lchunk, struct sctp_chunk,
 255                                   transmitted_list);
 256                sctp_chunk_fail(chunk, q->error);
 257                sctp_chunk_free(chunk);
 258        }
 259
 260        /* Throw away any chunks that are in the abandoned queue. */
 261        list_for_each_safe(lchunk, temp, &q->abandoned) {
 262                list_del_init(lchunk);
 263                chunk = list_entry(lchunk, struct sctp_chunk,
 264                                   transmitted_list);
 265                sctp_chunk_fail(chunk, q->error);
 266                sctp_chunk_free(chunk);
 267        }
 268
 269        /* Throw away any leftover data chunks. */
 270        while ((chunk = sctp_outq_dequeue_data(q)) != NULL) {
 271
 272                /* Mark as send failure. */
 273                sctp_chunk_fail(chunk, q->error);
 274                sctp_chunk_free(chunk);
 275        }
 276
 277        q->error = 0;
 278
 279        /* Throw away any leftover control chunks. */
 280        list_for_each_entry_safe(chunk, tmp, &q->control_chunk_list, list) {
 281                list_del_init(&chunk->list);
 282                sctp_chunk_free(chunk);
 283        }
 284}
 285
 286/* Free the outqueue structure and any related pending chunks.  */
 287void sctp_outq_free(struct sctp_outq *q)
 288{
 289        /* Throw away leftover chunks. */
 290        sctp_outq_teardown(q);
 291
 292        /* If we were kmalloc()'d, free the memory.  */
 293        if (q->malloced)
 294                kfree(q);
 295}
 296
 297/* Put a new chunk in an sctp_outq.  */
 298int sctp_outq_tail(struct sctp_outq *q, struct sctp_chunk *chunk)
 299{
 300        int error = 0;
 301
 302        SCTP_DEBUG_PRINTK("sctp_outq_tail(%p, %p[%s])\n",
 303                          q, chunk, chunk && chunk->chunk_hdr ?
 304                          sctp_cname(SCTP_ST_CHUNK(chunk->chunk_hdr->type))
 305                          : "Illegal Chunk");
 306
 307        /* If it is data, queue it up, otherwise, send it
 308         * immediately.
 309         */
 310        if (SCTP_CID_DATA == chunk->chunk_hdr->type) {
 311                /* Is it OK to queue data chunks?  */
 312                /* From 9. Termination of Association
 313                 *
 314                 * When either endpoint performs a shutdown, the
 315                 * association on each peer will stop accepting new
 316                 * data from its user and only deliver data in queue
 317                 * at the time of sending or receiving the SHUTDOWN
 318                 * chunk.
 319                 */
 320                switch (q->asoc->state) {
 321                case SCTP_STATE_EMPTY:
 322                case SCTP_STATE_CLOSED:
 323                case SCTP_STATE_SHUTDOWN_PENDING:
 324                case SCTP_STATE_SHUTDOWN_SENT:
 325                case SCTP_STATE_SHUTDOWN_RECEIVED:
 326                case SCTP_STATE_SHUTDOWN_ACK_SENT:
 327                        /* Cannot send after transport endpoint shutdown */
 328                        error = -ESHUTDOWN;
 329                        break;
 330
 331                default:
 332                        SCTP_DEBUG_PRINTK("outqueueing (%p, %p[%s])\n",
 333                          q, chunk, chunk && chunk->chunk_hdr ?
 334                          sctp_cname(SCTP_ST_CHUNK(chunk->chunk_hdr->type))
 335                          : "Illegal Chunk");
 336
 337                        sctp_outq_tail_data(q, chunk);
 338                        if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED)
 339                                SCTP_INC_STATS(SCTP_MIB_OUTUNORDERCHUNKS);
 340                        else
 341                                SCTP_INC_STATS(SCTP_MIB_OUTORDERCHUNKS);
 342                        q->empty = 0;
 343                        break;
 344                }
 345        } else {
 346                list_add_tail(&chunk->list, &q->control_chunk_list);
 347                SCTP_INC_STATS(SCTP_MIB_OUTCTRLCHUNKS);
 348        }
 349
 350        if (error < 0)
 351                return error;
 352
 353        if (!q->cork)
 354                error = sctp_outq_flush(q, 0);
 355
 356        return error;
 357}
 358
 359/* Insert a chunk into the sorted list based on the TSNs.  The retransmit list
 360 * and the abandoned list are in ascending order.
 361 */
 362static void sctp_insert_list(struct list_head *head, struct list_head *new)
 363{
 364        struct list_head *pos;
 365        struct sctp_chunk *nchunk, *lchunk;
 366        __u32 ntsn, ltsn;
 367        int done = 0;
 368
 369        nchunk = list_entry(new, struct sctp_chunk, transmitted_list);
 370        ntsn = ntohl(nchunk->subh.data_hdr->tsn);
 371
 372        list_for_each(pos, head) {
 373                lchunk = list_entry(pos, struct sctp_chunk, transmitted_list);
 374                ltsn = ntohl(lchunk->subh.data_hdr->tsn);
 375                if (TSN_lt(ntsn, ltsn)) {
 376                        list_add(new, pos->prev);
 377                        done = 1;
 378                        break;
 379                }
 380        }
 381        if (!done)
 382                list_add_tail(new, head);
 383}
 384
 385/* Mark all the eligible packets on a transport for retransmission.  */
 386void sctp_retransmit_mark(struct sctp_outq *q,
 387                          struct sctp_transport *transport,
 388                          __u8 reason)
 389{
 390        struct list_head *lchunk, *ltemp;
 391        struct sctp_chunk *chunk;
 392
 393        /* Walk through the specified transmitted queue.  */
 394        list_for_each_safe(lchunk, ltemp, &transport->transmitted) {
 395                chunk = list_entry(lchunk, struct sctp_chunk,
 396                                   transmitted_list);
 397
 398                /* If the chunk is abandoned, move it to abandoned list. */
 399                if (sctp_chunk_abandoned(chunk)) {
 400                        list_del_init(lchunk);
 401                        sctp_insert_list(&q->abandoned, lchunk);
 402
 403                        /* If this chunk has not been previousely acked,
 404                         * stop considering it 'outstanding'.  Our peer
 405                         * will most likely never see it since it will
 406                         * not be retransmitted
 407                         */
 408                        if (!chunk->tsn_gap_acked) {
 409                                if (chunk->transport)
 410                                        chunk->transport->flight_size -=
 411                                                        sctp_data_size(chunk);
 412                                q->outstanding_bytes -= sctp_data_size(chunk);
 413                                q->asoc->peer.rwnd += (sctp_data_size(chunk) +
 414                                                        sizeof(struct sk_buff));
 415                        }
 416                        continue;
 417                }
 418
 419                /* If we are doing  retransmission due to a timeout or pmtu
 420                 * discovery, only the  chunks that are not yet acked should
 421                 * be added to the retransmit queue.
 422                 */
 423                if ((reason == SCTP_RTXR_FAST_RTX  &&
 424                            (chunk->fast_retransmit == SCTP_NEED_FRTX)) ||
 425                    (reason != SCTP_RTXR_FAST_RTX  && !chunk->tsn_gap_acked)) {
 426                        /* RFC 2960 6.2.1 Processing a Received SACK
 427                         *
 428                         * C) Any time a DATA chunk is marked for
 429                         * retransmission (via either T3-rtx timer expiration
 430                         * (Section 6.3.3) or via fast retransmit
 431                         * (Section 7.2.4)), add the data size of those
 432                         * chunks to the rwnd.
 433                         */
 434                        q->asoc->peer.rwnd += (sctp_data_size(chunk) +
 435                                                sizeof(struct sk_buff));
 436                        q->outstanding_bytes -= sctp_data_size(chunk);
 437                        if (chunk->transport)
 438                                transport->flight_size -= sctp_data_size(chunk);
 439
 440                        /* sctpimpguide-05 Section 2.8.2
 441                         * M5) If a T3-rtx timer expires, the
 442                         * 'TSN.Missing.Report' of all affected TSNs is set
 443                         * to 0.
 444                         */
 445                        chunk->tsn_missing_report = 0;
 446
 447                        /* If a chunk that is being used for RTT measurement
 448                         * has to be retransmitted, we cannot use this chunk
 449                         * anymore for RTT measurements. Reset rto_pending so
 450                         * that a new RTT measurement is started when a new
 451                         * data chunk is sent.
 452                         */
 453                        if (chunk->rtt_in_progress) {
 454                                chunk->rtt_in_progress = 0;
 455                                transport->rto_pending = 0;
 456                        }
 457
 458                        /* Move the chunk to the retransmit queue. The chunks
 459                         * on the retransmit queue are always kept in order.
 460                         */
 461                        list_del_init(lchunk);
 462                        sctp_insert_list(&q->retransmit, lchunk);
 463                }
 464        }
 465
 466        SCTP_DEBUG_PRINTK("%s: transport: %p, reason: %d, "
 467                          "cwnd: %d, ssthresh: %d, flight_size: %d, "
 468                          "pba: %d\n", __func__,
 469                          transport, reason,
 470                          transport->cwnd, transport->ssthresh,
 471                          transport->flight_size,
 472                          transport->partial_bytes_acked);
 473
 474}
 475
 476/* Mark all the eligible packets on a transport for retransmission and force
 477 * one packet out.
 478 */
 479void sctp_retransmit(struct sctp_outq *q, struct sctp_transport *transport,
 480                     sctp_retransmit_reason_t reason)
 481{
 482        int error = 0;
 483
 484        switch(reason) {
 485        case SCTP_RTXR_T3_RTX:
 486                SCTP_INC_STATS(SCTP_MIB_T3_RETRANSMITS);
 487                sctp_transport_lower_cwnd(transport, SCTP_LOWER_CWND_T3_RTX);
 488                /* Update the retran path if the T3-rtx timer has expired for
 489                 * the current retran path.
 490                 */
 491                if (transport == transport->asoc->peer.retran_path)
 492                        sctp_assoc_update_retran_path(transport->asoc);
 493                transport->asoc->rtx_data_chunks +=
 494                        transport->asoc->unack_data;
 495                break;
 496        case SCTP_RTXR_FAST_RTX:
 497                SCTP_INC_STATS(SCTP_MIB_FAST_RETRANSMITS);
 498                sctp_transport_lower_cwnd(transport, SCTP_LOWER_CWND_FAST_RTX);
 499                q->fast_rtx = 1;
 500                break;
 501        case SCTP_RTXR_PMTUD:
 502                SCTP_INC_STATS(SCTP_MIB_PMTUD_RETRANSMITS);
 503                break;
 504        case SCTP_RTXR_T1_RTX:
 505                SCTP_INC_STATS(SCTP_MIB_T1_RETRANSMITS);
 506                transport->asoc->init_retries++;
 507                break;
 508        default:
 509                BUG();
 510        }
 511
 512        sctp_retransmit_mark(q, transport, reason);
 513
 514        /* PR-SCTP A5) Any time the T3-rtx timer expires, on any destination,
 515         * the sender SHOULD try to advance the "Advanced.Peer.Ack.Point" by
 516         * following the procedures outlined in C1 - C5.
 517         */
 518        if (reason == SCTP_RTXR_T3_RTX)
 519                sctp_generate_fwdtsn(q, q->asoc->ctsn_ack_point);
 520
 521        /* Flush the queues only on timeout, since fast_rtx is only
 522         * triggered during sack processing and the queue
 523         * will be flushed at the end.
 524         */
 525        if (reason != SCTP_RTXR_FAST_RTX)
 526                error = sctp_outq_flush(q, /* rtx_timeout */ 1);
 527
 528        if (error)
 529                q->asoc->base.sk->sk_err = -error;
 530}
 531
 532/*
 533 * Transmit DATA chunks on the retransmit queue.  Upon return from
 534 * sctp_outq_flush_rtx() the packet 'pkt' may contain chunks which
 535 * need to be transmitted by the caller.
 536 * We assume that pkt->transport has already been set.
 537 *
 538 * The return value is a normal kernel error return value.
 539 */
 540static int sctp_outq_flush_rtx(struct sctp_outq *q, struct sctp_packet *pkt,
 541                               int rtx_timeout, int *start_timer)
 542{
 543        struct list_head *lqueue;
 544        struct sctp_transport *transport = pkt->transport;
 545        sctp_xmit_t status;
 546        struct sctp_chunk *chunk, *chunk1;
 547        struct sctp_association *asoc;
 548        int fast_rtx;
 549        int error = 0;
 550        int timer = 0;
 551        int done = 0;
 552
 553        asoc = q->asoc;
 554        lqueue = &q->retransmit;
 555        fast_rtx = q->fast_rtx;
 556
 557        /* This loop handles time-out retransmissions, fast retransmissions,
 558         * and retransmissions due to opening of whindow.
 559         *
 560         * RFC 2960 6.3.3 Handle T3-rtx Expiration
 561         *
 562         * E3) Determine how many of the earliest (i.e., lowest TSN)
 563         * outstanding DATA chunks for the address for which the
 564         * T3-rtx has expired will fit into a single packet, subject
 565         * to the MTU constraint for the path corresponding to the
 566         * destination transport address to which the retransmission
 567         * is being sent (this may be different from the address for
 568         * which the timer expires [see Section 6.4]). Call this value
 569         * K. Bundle and retransmit those K DATA chunks in a single
 570         * packet to the destination endpoint.
 571         *
 572         * [Just to be painfully clear, if we are retransmitting
 573         * because a timeout just happened, we should send only ONE
 574         * packet of retransmitted data.]
 575         *
 576         * For fast retransmissions we also send only ONE packet.  However,
 577         * if we are just flushing the queue due to open window, we'll
 578         * try to send as much as possible.
 579         */
 580        list_for_each_entry_safe(chunk, chunk1, lqueue, transmitted_list) {
 581
 582                /* Make sure that Gap Acked TSNs are not retransmitted.  A
 583                 * simple approach is just to move such TSNs out of the
 584                 * way and into a 'transmitted' queue and skip to the
 585                 * next chunk.
 586                 */
 587                if (chunk->tsn_gap_acked) {
 588                        list_del(&chunk->transmitted_list);
 589                        list_add_tail(&chunk->transmitted_list,
 590                                        &transport->transmitted);
 591                        continue;
 592                }
 593
 594                /* If we are doing fast retransmit, ignore non-fast_rtransmit
 595                 * chunks
 596                 */
 597                if (fast_rtx && !chunk->fast_retransmit)
 598                        continue;
 599
 600                /* Attempt to append this chunk to the packet. */
 601                status = sctp_packet_append_chunk(pkt, chunk);
 602
 603                switch (status) {
 604                case SCTP_XMIT_PMTU_FULL:
 605                        /* Send this packet.  */
 606                        error = sctp_packet_transmit(pkt);
 607
 608                        /* If we are retransmitting, we should only
 609                         * send a single packet.
 610                         */
 611                        if (rtx_timeout || fast_rtx)
 612                                done = 1;
 613
 614                        /* Bundle next chunk in the next round.  */
 615                        break;
 616
 617                case SCTP_XMIT_RWND_FULL:
 618                        /* Send this packet. */
 619                        error = sctp_packet_transmit(pkt);
 620
 621                        /* Stop sending DATA as there is no more room
 622                         * at the receiver.
 623                         */
 624                        done = 1;
 625                        break;
 626
 627                case SCTP_XMIT_NAGLE_DELAY:
 628                        /* Send this packet. */
 629                        error = sctp_packet_transmit(pkt);
 630
 631                        /* Stop sending DATA because of nagle delay. */
 632                        done = 1;
 633                        break;
 634
 635                default:
 636                        /* The append was successful, so add this chunk to
 637                         * the transmitted list.
 638                         */
 639                        list_del(&chunk->transmitted_list);
 640                        list_add_tail(&chunk->transmitted_list,
 641                                        &transport->transmitted);
 642
 643                        /* Mark the chunk as ineligible for fast retransmit
 644                         * after it is retransmitted.
 645                         */
 646                        if (chunk->fast_retransmit == SCTP_NEED_FRTX)
 647                                chunk->fast_retransmit = SCTP_DONT_FRTX;
 648
 649                        /* Force start T3-rtx timer when fast retransmitting
 650                         * the earliest outstanding TSN
 651                         */
 652                        if (!timer && fast_rtx &&
 653                            ntohl(chunk->subh.data_hdr->tsn) ==
 654                                             asoc->ctsn_ack_point + 1)
 655                                timer = 2;
 656
 657                        q->empty = 0;
 658                        break;
 659                }
 660
 661                /* Set the timer if there were no errors */
 662                if (!error && !timer)
 663                        timer = 1;
 664
 665                if (done)
 666                        break;
 667        }
 668
 669        /* If we are here due to a retransmit timeout or a fast
 670         * retransmit and if there are any chunks left in the retransmit
 671         * queue that could not fit in the PMTU sized packet, they need
 672         * to be marked as ineligible for a subsequent fast retransmit.
 673         */
 674        if (rtx_timeout || fast_rtx) {
 675                list_for_each_entry(chunk1, lqueue, transmitted_list) {
 676                        if (chunk1->fast_retransmit == SCTP_NEED_FRTX)
 677                                chunk1->fast_retransmit = SCTP_DONT_FRTX;
 678                }
 679        }
 680
 681        *start_timer = timer;
 682
 683        /* Clear fast retransmit hint */
 684        if (fast_rtx)
 685                q->fast_rtx = 0;
 686
 687        return error;
 688}
 689
 690/* Cork the outqueue so queued chunks are really queued. */
 691int sctp_outq_uncork(struct sctp_outq *q)
 692{
 693        int error = 0;
 694        if (q->cork)
 695                q->cork = 0;
 696        error = sctp_outq_flush(q, 0);
 697        return error;
 698}
 699
 700
 701/*
 702 * Try to flush an outqueue.
 703 *
 704 * Description: Send everything in q which we legally can, subject to
 705 * congestion limitations.
 706 * * Note: This function can be called from multiple contexts so appropriate
 707 * locking concerns must be made.  Today we use the sock lock to protect
 708 * this function.
 709 */
 710static int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout)
 711{
 712        struct sctp_packet *packet;
 713        struct sctp_packet singleton;
 714        struct sctp_association *asoc = q->asoc;
 715        __u16 sport = asoc->base.bind_addr.port;
 716        __u16 dport = asoc->peer.port;
 717        __u32 vtag = asoc->peer.i.init_tag;
 718        struct sctp_transport *transport = NULL;
 719        struct sctp_transport *new_transport;
 720        struct sctp_chunk *chunk, *tmp;
 721        sctp_xmit_t status;
 722        int error = 0;
 723        int start_timer = 0;
 724        int one_packet = 0;
 725
 726        /* These transports have chunks to send. */
 727        struct list_head transport_list;
 728        struct list_head *ltransport;
 729
 730        INIT_LIST_HEAD(&transport_list);
 731        packet = NULL;
 732
 733        /*
 734         * 6.10 Bundling
 735         *   ...
 736         *   When bundling control chunks with DATA chunks, an
 737         *   endpoint MUST place control chunks first in the outbound
 738         *   SCTP packet.  The transmitter MUST transmit DATA chunks
 739         *   within a SCTP packet in increasing order of TSN.
 740         *   ...
 741         */
 742
 743        list_for_each_entry_safe(chunk, tmp, &q->control_chunk_list, list) {
 744                list_del_init(&chunk->list);
 745
 746                /* Pick the right transport to use. */
 747                new_transport = chunk->transport;
 748
 749                if (!new_transport) {
 750                        /*
 751                         * If we have a prior transport pointer, see if
 752                         * the destination address of the chunk
 753                         * matches the destination address of the
 754                         * current transport.  If not a match, then
 755                         * try to look up the transport with a given
 756                         * destination address.  We do this because
 757                         * after processing ASCONFs, we may have new
 758                         * transports created.
 759                         */
 760                        if (transport &&
 761                            sctp_cmp_addr_exact(&chunk->dest,
 762                                                &transport->ipaddr))
 763                                        new_transport = transport;
 764                        else
 765                                new_transport = sctp_assoc_lookup_paddr(asoc,
 766                                                                &chunk->dest);
 767
 768                        /* if we still don't have a new transport, then
 769                         * use the current active path.
 770                         */
 771                        if (!new_transport)
 772                                new_transport = asoc->peer.active_path;
 773                } else if ((new_transport->state == SCTP_INACTIVE) ||
 774                           (new_transport->state == SCTP_UNCONFIRMED)) {
 775                        /* If the chunk is Heartbeat or Heartbeat Ack,
 776                         * send it to chunk->transport, even if it's
 777                         * inactive.
 778                         *
 779                         * 3.3.6 Heartbeat Acknowledgement:
 780                         * ...
 781                         * A HEARTBEAT ACK is always sent to the source IP
 782                         * address of the IP datagram containing the
 783                         * HEARTBEAT chunk to which this ack is responding.
 784                         * ...
 785                         *
 786                         * ASCONF_ACKs also must be sent to the source.
 787                         */
 788                        if (chunk->chunk_hdr->type != SCTP_CID_HEARTBEAT &&
 789                            chunk->chunk_hdr->type != SCTP_CID_HEARTBEAT_ACK &&
 790                            chunk->chunk_hdr->type != SCTP_CID_ASCONF_ACK)
 791                                new_transport = asoc->peer.active_path;
 792                }
 793
 794                /* Are we switching transports?
 795                 * Take care of transport locks.
 796                 */
 797                if (new_transport != transport) {
 798                        transport = new_transport;
 799                        if (list_empty(&transport->send_ready)) {
 800                                list_add_tail(&transport->send_ready,
 801                                              &transport_list);
 802                        }
 803                        packet = &transport->packet;
 804                        sctp_packet_config(packet, vtag,
 805                                           asoc->peer.ecn_capable);
 806                }
 807
 808                switch (chunk->chunk_hdr->type) {
 809                /*
 810                 * 6.10 Bundling
 811                 *   ...
 812                 *   An endpoint MUST NOT bundle INIT, INIT ACK or SHUTDOWN
 813                 *   COMPLETE with any other chunks.  [Send them immediately.]
 814                 */
 815                case SCTP_CID_INIT:
 816                case SCTP_CID_INIT_ACK:
 817                case SCTP_CID_SHUTDOWN_COMPLETE:
 818                        sctp_packet_init(&singleton, transport, sport, dport);
 819                        sctp_packet_config(&singleton, vtag, 0);
 820                        sctp_packet_append_chunk(&singleton, chunk);
 821                        error = sctp_packet_transmit(&singleton);
 822                        if (error < 0)
 823                                return error;
 824                        break;
 825
 826                case SCTP_CID_ABORT:
 827                        if (sctp_test_T_bit(chunk)) {
 828                                packet->vtag = asoc->c.my_vtag;
 829                        }
 830                /* The following chunks are "response" chunks, i.e.
 831                 * they are generated in response to something we
 832                 * received.  If we are sending these, then we can
 833                 * send only 1 packet containing these chunks.
 834                 */
 835                case SCTP_CID_HEARTBEAT_ACK:
 836                case SCTP_CID_SHUTDOWN_ACK:
 837                case SCTP_CID_COOKIE_ACK:
 838                case SCTP_CID_COOKIE_ECHO:
 839                case SCTP_CID_ERROR:
 840                case SCTP_CID_ECN_CWR:
 841                case SCTP_CID_ASCONF_ACK:
 842                        one_packet = 1;
 843                        /* Fall throught */
 844
 845                case SCTP_CID_SACK:
 846                case SCTP_CID_HEARTBEAT:
 847                case SCTP_CID_SHUTDOWN:
 848                case SCTP_CID_ECN_ECNE:
 849                case SCTP_CID_ASCONF:
 850                case SCTP_CID_FWD_TSN:
 851                        status = sctp_packet_transmit_chunk(packet, chunk,
 852                                                            one_packet);
 853                        if (status  != SCTP_XMIT_OK) {
 854                                /* put the chunk back */
 855                                list_add(&chunk->list, &q->control_chunk_list);
 856                        }
 857                        break;
 858
 859                default:
 860                        /* We built a chunk with an illegal type! */
 861                        BUG();
 862                }
 863        }
 864
 865        /* Is it OK to send data chunks?  */
 866        switch (asoc->state) {
 867        case SCTP_STATE_COOKIE_ECHOED:
 868                /* Only allow bundling when this packet has a COOKIE-ECHO
 869                 * chunk.
 870                 */
 871                if (!packet || !packet->has_cookie_echo)
 872                        break;
 873
 874                /* fallthru */
 875        case SCTP_STATE_ESTABLISHED:
 876        case SCTP_STATE_SHUTDOWN_PENDING:
 877        case SCTP_STATE_SHUTDOWN_RECEIVED:
 878                /*
 879                 * RFC 2960 6.1  Transmission of DATA Chunks
 880                 *
 881                 * C) When the time comes for the sender to transmit,
 882                 * before sending new DATA chunks, the sender MUST
 883                 * first transmit any outstanding DATA chunks which
 884                 * are marked for retransmission (limited by the
 885                 * current cwnd).
 886                 */
 887                if (!list_empty(&q->retransmit)) {
 888                        if (transport == asoc->peer.retran_path)
 889                                goto retran;
 890
 891                        /* Switch transports & prepare the packet.  */
 892
 893                        transport = asoc->peer.retran_path;
 894
 895                        if (list_empty(&transport->send_ready)) {
 896                                list_add_tail(&transport->send_ready,
 897                                              &transport_list);
 898                        }
 899
 900                        packet = &transport->packet;
 901                        sctp_packet_config(packet, vtag,
 902                                           asoc->peer.ecn_capable);
 903                retran:
 904                        error = sctp_outq_flush_rtx(q, packet,
 905                                                    rtx_timeout, &start_timer);
 906
 907                        if (start_timer)
 908                                sctp_transport_reset_timers(transport,
 909                                                            start_timer-1);
 910
 911                        /* This can happen on COOKIE-ECHO resend.  Only
 912                         * one chunk can get bundled with a COOKIE-ECHO.
 913                         */
 914                        if (packet->has_cookie_echo)
 915                                goto sctp_flush_out;
 916
 917                        /* Don't send new data if there is still data
 918                         * waiting to retransmit.
 919                         */
 920                        if (!list_empty(&q->retransmit))
 921                                goto sctp_flush_out;
 922                }
 923
 924                /* Finally, transmit new packets.  */
 925                while ((chunk = sctp_outq_dequeue_data(q)) != NULL) {
 926                        /* RFC 2960 6.5 Every DATA chunk MUST carry a valid
 927                         * stream identifier.
 928                         */
 929                        if (chunk->sinfo.sinfo_stream >=
 930                            asoc->c.sinit_num_ostreams) {
 931
 932                                /* Mark as failed send. */
 933                                sctp_chunk_fail(chunk, SCTP_ERROR_INV_STRM);
 934                                sctp_chunk_free(chunk);
 935                                continue;
 936                        }
 937
 938                        /* Has this chunk expired? */
 939                        if (sctp_chunk_abandoned(chunk)) {
 940                                sctp_chunk_fail(chunk, 0);
 941                                sctp_chunk_free(chunk);
 942                                continue;
 943                        }
 944
 945                        /* If there is a specified transport, use it.
 946                         * Otherwise, we want to use the active path.
 947                         */
 948                        new_transport = chunk->transport;
 949                        if (!new_transport ||
 950                            ((new_transport->state == SCTP_INACTIVE) ||
 951                             (new_transport->state == SCTP_UNCONFIRMED)))
 952                                new_transport = asoc->peer.active_path;
 953
 954                        /* Change packets if necessary.  */
 955                        if (new_transport != transport) {
 956                                transport = new_transport;
 957
 958                                /* Schedule to have this transport's
 959                                 * packet flushed.
 960                                 */
 961                                if (list_empty(&transport->send_ready)) {
 962                                        list_add_tail(&transport->send_ready,
 963                                                      &transport_list);
 964                                }
 965
 966                                packet = &transport->packet;
 967                                sctp_packet_config(packet, vtag,
 968                                                   asoc->peer.ecn_capable);
 969                        }
 970
 971                        SCTP_DEBUG_PRINTK("sctp_outq_flush(%p, %p[%s]), ",
 972                                          q, chunk,
 973                                          chunk && chunk->chunk_hdr ?
 974                                          sctp_cname(SCTP_ST_CHUNK(
 975                                                  chunk->chunk_hdr->type))
 976                                          : "Illegal Chunk");
 977
 978                        SCTP_DEBUG_PRINTK("TX TSN 0x%x skb->head "
 979                                        "%p skb->users %d.\n",
 980                                        ntohl(chunk->subh.data_hdr->tsn),
 981                                        chunk->skb ?chunk->skb->head : NULL,
 982                                        chunk->skb ?
 983                                        atomic_read(&chunk->skb->users) : -1);
 984
 985                        /* Add the chunk to the packet.  */
 986                        status = sctp_packet_transmit_chunk(packet, chunk, 0);
 987
 988                        switch (status) {
 989                        case SCTP_XMIT_PMTU_FULL:
 990                        case SCTP_XMIT_RWND_FULL:
 991                        case SCTP_XMIT_NAGLE_DELAY:
 992                                /* We could not append this chunk, so put
 993                                 * the chunk back on the output queue.
 994                                 */
 995                                SCTP_DEBUG_PRINTK("sctp_outq_flush: could "
 996                                        "not transmit TSN: 0x%x, status: %d\n",
 997                                        ntohl(chunk->subh.data_hdr->tsn),
 998                                        status);
 999                                sctp_outq_head_data(q, chunk);
1000                                goto sctp_flush_out;
1001                                break;
1002
1003                        case SCTP_XMIT_OK:
1004                                break;
1005
1006                        default:
1007                                BUG();
1008                        }
1009
1010                        /* BUG: We assume that the sctp_packet_transmit()
1011                         * call below will succeed all the time and add the
1012                         * chunk to the transmitted list and restart the
1013                         * timers.
1014                         * It is possible that the call can fail under OOM
1015                         * conditions.
1016                         *
1017                         * Is this really a problem?  Won't this behave
1018                         * like a lost TSN?
1019                         */
1020                        list_add_tail(&chunk->transmitted_list,
1021                                      &transport->transmitted);
1022
1023                        sctp_transport_reset_timers(transport, 0);
1024
1025                        q->empty = 0;
1026
1027                        /* Only let one DATA chunk get bundled with a
1028                         * COOKIE-ECHO chunk.
1029                         */
1030                        if (packet->has_cookie_echo)
1031                                goto sctp_flush_out;
1032                }
1033                break;
1034
1035        default:
1036                /* Do nothing.  */
1037                break;
1038        }
1039
1040sctp_flush_out:
1041
1042        /* Before returning, examine all the transports touched in
1043         * this call.  Right now, we bluntly force clear all the
1044         * transports.  Things might change after we implement Nagle.
1045         * But such an examination is still required.
1046         *
1047         * --xguo
1048         */
1049        while ((ltransport = sctp_list_dequeue(&transport_list)) != NULL ) {
1050                struct sctp_transport *t = list_entry(ltransport,
1051                                                      struct sctp_transport,
1052                                                      send_ready);
1053                packet = &t->packet;
1054                if (!sctp_packet_empty(packet))
1055                        error = sctp_packet_transmit(packet);
1056        }
1057
1058        return error;
1059}
1060
1061/* Update unack_data based on the incoming SACK chunk */
1062static void sctp_sack_update_unack_data(struct sctp_association *assoc,
1063                                        struct sctp_sackhdr *sack)
1064{
1065        sctp_sack_variable_t *frags;
1066        __u16 unack_data;
1067        int i;
1068
1069        unack_data = assoc->next_tsn - assoc->ctsn_ack_point - 1;
1070
1071        frags = sack->variable;
1072        for (i = 0; i < ntohs(sack->num_gap_ack_blocks); i++) {
1073                unack_data -= ((ntohs(frags[i].gab.end) -
1074                                ntohs(frags[i].gab.start) + 1));
1075        }
1076
1077        assoc->unack_data = unack_data;
1078}
1079
1080/* Return the highest new tsn that is acknowledged by the given SACK chunk. */
1081static __u32 sctp_highest_new_tsn(struct sctp_sackhdr *sack,
1082                                  struct sctp_association *asoc)
1083{
1084        struct sctp_transport *transport;
1085        struct sctp_chunk *chunk;
1086        __u32 highest_new_tsn, tsn;
1087        struct list_head *transport_list = &asoc->peer.transport_addr_list;
1088
1089        highest_new_tsn = ntohl(sack->cum_tsn_ack);
1090
1091        list_for_each_entry(transport, transport_list, transports) {
1092                list_for_each_entry(chunk, &transport->transmitted,
1093                                transmitted_list) {
1094                        tsn = ntohl(chunk->subh.data_hdr->tsn);
1095
1096                        if (!chunk->tsn_gap_acked &&
1097                            TSN_lt(highest_new_tsn, tsn) &&
1098                            sctp_acked(sack, tsn))
1099                                highest_new_tsn = tsn;
1100                }
1101        }
1102
1103        return highest_new_tsn;
1104}
1105
1106/* This is where we REALLY process a SACK.
1107 *
1108 * Process the SACK against the outqueue.  Mostly, this just frees
1109 * things off the transmitted queue.
1110 */
1111int sctp_outq_sack(struct sctp_outq *q, struct sctp_sackhdr *sack)
1112{
1113        struct sctp_association *asoc = q->asoc;
1114        struct sctp_transport *transport;
1115        struct sctp_chunk *tchunk = NULL;
1116        struct list_head *lchunk, *transport_list, *temp;
1117        sctp_sack_variable_t *frags = sack->variable;
1118        __u32 sack_ctsn, ctsn, tsn;
1119        __u32 highest_tsn, highest_new_tsn;
1120        __u32 sack_a_rwnd;
1121        unsigned outstanding;
1122        struct sctp_transport *primary = asoc->peer.primary_path;
1123        int count_of_newacks = 0;
1124        int gap_ack_blocks;
1125
1126        /* Grab the association's destination address list. */
1127        transport_list = &asoc->peer.transport_addr_list;
1128
1129        sack_ctsn = ntohl(sack->cum_tsn_ack);
1130        gap_ack_blocks = ntohs(sack->num_gap_ack_blocks);
1131        /*
1132         * SFR-CACC algorithm:
1133         * On receipt of a SACK the sender SHOULD execute the
1134         * following statements.
1135         *
1136         * 1) If the cumulative ack in the SACK passes next tsn_at_change
1137         * on the current primary, the CHANGEOVER_ACTIVE flag SHOULD be
1138         * cleared. The CYCLING_CHANGEOVER flag SHOULD also be cleared for
1139         * all destinations.
1140         * 2) If the SACK contains gap acks and the flag CHANGEOVER_ACTIVE
1141         * is set the receiver of the SACK MUST take the following actions:
1142         *
1143         * A) Initialize the cacc_saw_newack to 0 for all destination
1144         * addresses.
1145         *
1146         * Only bother if changeover_active is set. Otherwise, this is
1147         * totally suboptimal to do on every SACK.
1148         */
1149        if (primary->cacc.changeover_active) {
1150                u8 clear_cycling = 0;
1151
1152                if (TSN_lte(primary->cacc.next_tsn_at_change, sack_ctsn)) {
1153                        primary->cacc.changeover_active = 0;
1154                        clear_cycling = 1;
1155                }
1156
1157                if (clear_cycling || gap_ack_blocks) {
1158                        list_for_each_entry(transport, transport_list,
1159                                        transports) {
1160                                if (clear_cycling)
1161                                        transport->cacc.cycling_changeover = 0;
1162                                if (gap_ack_blocks)
1163                                        transport->cacc.cacc_saw_newack = 0;
1164                        }
1165                }
1166        }
1167
1168        /* Get the highest TSN in the sack. */
1169        highest_tsn = sack_ctsn;
1170        if (gap_ack_blocks)
1171                highest_tsn += ntohs(frags[gap_ack_blocks - 1].gab.end);
1172
1173        if (TSN_lt(asoc->highest_sacked, highest_tsn)) {
1174                highest_new_tsn = highest_tsn;
1175                asoc->highest_sacked = highest_tsn;
1176        } else {
1177                highest_new_tsn = sctp_highest_new_tsn(sack, asoc);
1178        }
1179
1180
1181        /* Run through the retransmit queue.  Credit bytes received
1182         * and free those chunks that we can.
1183         */
1184        sctp_check_transmitted(q, &q->retransmit, NULL, sack, highest_new_tsn);
1185
1186        /* Run through the transmitted queue.
1187         * Credit bytes received and free those chunks which we can.
1188         *
1189         * This is a MASSIVE candidate for optimization.
1190         */
1191        list_for_each_entry(transport, transport_list, transports) {
1192                sctp_check_transmitted(q, &transport->transmitted,
1193                                       transport, sack, highest_new_tsn);
1194                /*
1195                 * SFR-CACC algorithm:
1196                 * C) Let count_of_newacks be the number of
1197                 * destinations for which cacc_saw_newack is set.
1198                 */
1199                if (transport->cacc.cacc_saw_newack)
1200                        count_of_newacks ++;
1201        }
1202
1203        if (gap_ack_blocks) {
1204                list_for_each_entry(transport, transport_list, transports)
1205                        sctp_mark_missing(q, &transport->transmitted, transport,
1206                                          highest_new_tsn, count_of_newacks);
1207        }
1208
1209        /* Move the Cumulative TSN Ack Point if appropriate.  */
1210        if (TSN_lt(asoc->ctsn_ack_point, sack_ctsn))
1211                asoc->ctsn_ack_point = sack_ctsn;
1212
1213        /* Update unack_data field in the assoc. */
1214        sctp_sack_update_unack_data(asoc, sack);
1215
1216        ctsn = asoc->ctsn_ack_point;
1217
1218        /* Throw away stuff rotting on the sack queue.  */
1219        list_for_each_safe(lchunk, temp, &q->sacked) {
1220                tchunk = list_entry(lchunk, struct sctp_chunk,
1221                                    transmitted_list);
1222                tsn = ntohl(tchunk->subh.data_hdr->tsn);
1223                if (TSN_lte(tsn, ctsn)) {
1224                        list_del_init(&tchunk->transmitted_list);
1225                        sctp_chunk_free(tchunk);
1226                }
1227        }
1228
1229        /* ii) Set rwnd equal to the newly received a_rwnd minus the
1230         *     number of bytes still outstanding after processing the
1231         *     Cumulative TSN Ack and the Gap Ack Blocks.
1232         */
1233
1234        sack_a_rwnd = ntohl(sack->a_rwnd);
1235        outstanding = q->outstanding_bytes;
1236
1237        if (outstanding < sack_a_rwnd)
1238                sack_a_rwnd -= outstanding;
1239        else
1240                sack_a_rwnd = 0;
1241
1242        asoc->peer.rwnd = sack_a_rwnd;
1243
1244        sctp_generate_fwdtsn(q, sack_ctsn);
1245
1246        SCTP_DEBUG_PRINTK("%s: sack Cumulative TSN Ack is 0x%x.\n",
1247                          __func__, sack_ctsn);
1248        SCTP_DEBUG_PRINTK("%s: Cumulative TSN Ack of association, "
1249                          "%p is 0x%x. Adv peer ack point: 0x%x\n",
1250                          __func__, asoc, ctsn, asoc->adv_peer_ack_point);
1251
1252        /* See if all chunks are acked.
1253         * Make sure the empty queue handler will get run later.
1254         */
1255        q->empty = (list_empty(&q->out_chunk_list) &&
1256                    list_empty(&q->retransmit));
1257        if (!q->empty)
1258                goto finish;
1259
1260        list_for_each_entry(transport, transport_list, transports) {
1261                q->empty = q->empty && list_empty(&transport->transmitted);
1262                if (!q->empty)
1263                        goto finish;
1264        }
1265
1266        SCTP_DEBUG_PRINTK("sack queue is empty.\n");
1267finish:
1268        return q->empty;
1269}
1270
1271/* Is the outqueue empty?  */
1272int sctp_outq_is_empty(const struct sctp_outq *q)
1273{
1274        return q->empty;
1275}
1276
1277/********************************************************************
1278 * 2nd Level Abstractions
1279 ********************************************************************/
1280
1281/* Go through a transport's transmitted list or the association's retransmit
1282 * list and move chunks that are acked by the Cumulative TSN Ack to q->sacked.
1283 * The retransmit list will not have an associated transport.
1284 *
1285 * I added coherent debug information output.   --xguo
1286 *
1287 * Instead of printing 'sacked' or 'kept' for each TSN on the
1288 * transmitted_queue, we print a range: SACKED: TSN1-TSN2, TSN3, TSN4-TSN5.
1289 * KEPT TSN6-TSN7, etc.
1290 */
1291static void sctp_check_transmitted(struct sctp_outq *q,
1292                                   struct list_head *transmitted_queue,
1293                                   struct sctp_transport *transport,
1294                                   struct sctp_sackhdr *sack,
1295                                   __u32 highest_new_tsn_in_sack)
1296{
1297        struct list_head *lchunk;
1298        struct sctp_chunk *tchunk;
1299        struct list_head tlist;
1300        __u32 tsn;
1301        __u32 sack_ctsn;
1302        __u32 rtt;
1303        __u8 restart_timer = 0;
1304        int bytes_acked = 0;
1305        int migrate_bytes = 0;
1306
1307        /* These state variables are for coherent debug output. --xguo */
1308
1309#if SCTP_DEBUG
1310        __u32 dbg_ack_tsn = 0;  /* An ACKed TSN range starts here... */
1311        __u32 dbg_last_ack_tsn = 0;  /* ...and finishes here.        */
1312        __u32 dbg_kept_tsn = 0; /* An un-ACKed range starts here...  */
1313        __u32 dbg_last_kept_tsn = 0; /* ...and finishes here.        */
1314
1315        /* 0 : The last TSN was ACKed.
1316         * 1 : The last TSN was NOT ACKed (i.e. KEPT).
1317         * -1: We need to initialize.
1318         */
1319        int dbg_prt_state = -1;
1320#endif /* SCTP_DEBUG */
1321
1322        sack_ctsn = ntohl(sack->cum_tsn_ack);
1323
1324        INIT_LIST_HEAD(&tlist);
1325
1326        /* The while loop will skip empty transmitted queues. */
1327        while (NULL != (lchunk = sctp_list_dequeue(transmitted_queue))) {
1328                tchunk = list_entry(lchunk, struct sctp_chunk,
1329                                    transmitted_list);
1330
1331                if (sctp_chunk_abandoned(tchunk)) {
1332                        /* Move the chunk to abandoned list. */
1333                        sctp_insert_list(&q->abandoned, lchunk);
1334
1335                        /* If this chunk has not been acked, stop
1336                         * considering it as 'outstanding'.
1337                         */
1338                        if (!tchunk->tsn_gap_acked) {
1339                                if (tchunk->transport)
1340                                        tchunk->transport->flight_size -=
1341                                                        sctp_data_size(tchunk);
1342                                q->outstanding_bytes -= sctp_data_size(tchunk);
1343                        }
1344                        continue;
1345                }
1346
1347                tsn = ntohl(tchunk->subh.data_hdr->tsn);
1348                if (sctp_acked(sack, tsn)) {
1349                        /* If this queue is the retransmit queue, the
1350                         * retransmit timer has already reclaimed
1351                         * the outstanding bytes for this chunk, so only
1352                         * count bytes associated with a transport.
1353                         */
1354                        if (transport) {
1355                                /* If this chunk is being used for RTT
1356                                 * measurement, calculate the RTT and update
1357                                 * the RTO using this value.
1358                                 *
1359                                 * 6.3.1 C5) Karn's algorithm: RTT measurements
1360                                 * MUST NOT be made using packets that were
1361                                 * retransmitted (and thus for which it is
1362                                 * ambiguous whether the reply was for the
1363                                 * first instance of the packet or a later
1364                                 * instance).
1365                                 */
1366                                if (!tchunk->tsn_gap_acked &&
1367                                    !tchunk->resent &&
1368                                    tchunk->rtt_in_progress) {
1369                                        tchunk->rtt_in_progress = 0;
1370                                        rtt = jiffies - tchunk->sent_at;
1371                                        sctp_transport_update_rto(transport,
1372                                                                  rtt);
1373                                }
1374                        }
1375
1376                        /* If the chunk hasn't been marked as ACKED,
1377                         * mark it and account bytes_acked if the
1378                         * chunk had a valid transport (it will not
1379                         * have a transport if ASCONF had deleted it
1380                         * while DATA was outstanding).
1381                         */
1382                        if (!tchunk->tsn_gap_acked) {
1383                                tchunk->tsn_gap_acked = 1;
1384                                bytes_acked += sctp_data_size(tchunk);
1385                                if (!tchunk->transport)
1386                                        migrate_bytes += sctp_data_size(tchunk);
1387                        }
1388
1389                        if (TSN_lte(tsn, sack_ctsn)) {
1390                                /* RFC 2960  6.3.2 Retransmission Timer Rules
1391                                 *
1392                                 * R3) Whenever a SACK is received
1393                                 * that acknowledges the DATA chunk
1394                                 * with the earliest outstanding TSN
1395                                 * for that address, restart T3-rtx
1396                                 * timer for that address with its
1397                                 * current RTO.
1398                                 */
1399                                restart_timer = 1;
1400
1401                                if (!tchunk->tsn_gap_acked) {
1402                                        /*
1403                                         * SFR-CACC algorithm:
1404                                         * 2) If the SACK contains gap acks
1405                                         * and the flag CHANGEOVER_ACTIVE is
1406                                         * set the receiver of the SACK MUST
1407                                         * take the following action:
1408                                         *
1409                                         * B) For each TSN t being acked that
1410                                         * has not been acked in any SACK so
1411                                         * far, set cacc_saw_newack to 1 for
1412                                         * the destination that the TSN was
1413                                         * sent to.
1414                                         */
1415                                        if (transport &&
1416                                            sack->num_gap_ack_blocks &&
1417                                            q->asoc->peer.primary_path->cacc.
1418                                            changeover_active)
1419                                                transport->cacc.cacc_saw_newack
1420                                                        = 1;
1421                                }
1422
1423                                list_add_tail(&tchunk->transmitted_list,
1424                                              &q->sacked);
1425                        } else {
1426                                /* RFC2960 7.2.4, sctpimpguide-05 2.8.2
1427                                 * M2) Each time a SACK arrives reporting
1428                                 * 'Stray DATA chunk(s)' record the highest TSN
1429                                 * reported as newly acknowledged, call this
1430                                 * value 'HighestTSNinSack'. A newly
1431                                 * acknowledged DATA chunk is one not
1432                                 * previously acknowledged in a SACK.
1433                                 *
1434                                 * When the SCTP sender of data receives a SACK
1435                                 * chunk that acknowledges, for the first time,
1436                                 * the receipt of a DATA chunk, all the still
1437                                 * unacknowledged DATA chunks whose TSN is
1438                                 * older than that newly acknowledged DATA
1439                                 * chunk, are qualified as 'Stray DATA chunks'.
1440                                 */
1441                                list_add_tail(lchunk, &tlist);
1442                        }
1443
1444#if SCTP_DEBUG
1445                        switch (dbg_prt_state) {
1446                        case 0: /* last TSN was ACKed */
1447                                if (dbg_last_ack_tsn + 1 == tsn) {
1448                                        /* This TSN belongs to the
1449                                         * current ACK range.
1450                                         */
1451                                        break;
1452                                }
1453
1454                                if (dbg_last_ack_tsn != dbg_ack_tsn) {
1455                                        /* Display the end of the
1456                                         * current range.
1457                                         */
1458                                        SCTP_DEBUG_PRINTK("-%08x",
1459                                                          dbg_last_ack_tsn);
1460                                }
1461
1462                                /* Start a new range.  */
1463                                SCTP_DEBUG_PRINTK(",%08x", tsn);
1464                                dbg_ack_tsn = tsn;
1465                                break;
1466
1467                        case 1: /* The last TSN was NOT ACKed. */
1468                                if (dbg_last_kept_tsn != dbg_kept_tsn) {
1469                                        /* Display the end of current range. */
1470                                        SCTP_DEBUG_PRINTK("-%08x",
1471                                                          dbg_last_kept_tsn);
1472                                }
1473
1474                                SCTP_DEBUG_PRINTK("\n");
1475
1476                                /* FALL THROUGH... */
1477                        default:
1478                                /* This is the first-ever TSN we examined.  */
1479                                /* Start a new range of ACK-ed TSNs.  */
1480                                SCTP_DEBUG_PRINTK("ACKed: %08x", tsn);
1481                                dbg_prt_state = 0;
1482                                dbg_ack_tsn = tsn;
1483                        }
1484
1485                        dbg_last_ack_tsn = tsn;
1486#endif /* SCTP_DEBUG */
1487
1488                } else {
1489                        if (tchunk->tsn_gap_acked) {
1490                                SCTP_DEBUG_PRINTK("%s: Receiver reneged on "
1491                                                  "data TSN: 0x%x\n",
1492                                                  __func__,
1493                                                  tsn);
1494                                tchunk->tsn_gap_acked = 0;
1495
1496                                if (tchunk->transport)
1497                                        bytes_acked -= sctp_data_size(tchunk);
1498
1499                                /* RFC 2960 6.3.2 Retransmission Timer Rules
1500                                 *
1501                                 * R4) Whenever a SACK is received missing a
1502                                 * TSN that was previously acknowledged via a
1503                                 * Gap Ack Block, start T3-rtx for the
1504                                 * destination address to which the DATA
1505                                 * chunk was originally
1506                                 * transmitted if it is not already running.
1507                                 */
1508                                restart_timer = 1;
1509                        }
1510
1511                        list_add_tail(lchunk, &tlist);
1512
1513#if SCTP_DEBUG
1514                        /* See the above comments on ACK-ed TSNs. */
1515                        switch (dbg_prt_state) {
1516                        case 1:
1517                                if (dbg_last_kept_tsn + 1 == tsn)
1518                                        break;
1519
1520                                if (dbg_last_kept_tsn != dbg_kept_tsn)
1521                                        SCTP_DEBUG_PRINTK("-%08x",
1522                                                          dbg_last_kept_tsn);
1523
1524                                SCTP_DEBUG_PRINTK(",%08x", tsn);
1525                                dbg_kept_tsn = tsn;
1526                                break;
1527
1528                        case 0:
1529                                if (dbg_last_ack_tsn != dbg_ack_tsn)
1530                                        SCTP_DEBUG_PRINTK("-%08x",
1531                                                          dbg_last_ack_tsn);
1532                                SCTP_DEBUG_PRINTK("\n");
1533
1534                                /* FALL THROUGH... */
1535                        default:
1536                                SCTP_DEBUG_PRINTK("KEPT: %08x",tsn);
1537                                dbg_prt_state = 1;
1538                                dbg_kept_tsn = tsn;
1539                        }
1540
1541                        dbg_last_kept_tsn = tsn;
1542#endif /* SCTP_DEBUG */
1543                }
1544        }
1545
1546#if SCTP_DEBUG
1547        /* Finish off the last range, displaying its ending TSN.  */
1548        switch (dbg_prt_state) {
1549        case 0:
1550                if (dbg_last_ack_tsn != dbg_ack_tsn) {
1551                        SCTP_DEBUG_PRINTK("-%08x\n", dbg_last_ack_tsn);
1552                } else {
1553                        SCTP_DEBUG_PRINTK("\n");
1554                }
1555        break;
1556
1557        case 1:
1558                if (dbg_last_kept_tsn != dbg_kept_tsn) {
1559                        SCTP_DEBUG_PRINTK("-%08x\n", dbg_last_kept_tsn);
1560                } else {
1561                        SCTP_DEBUG_PRINTK("\n");
1562                }
1563        }
1564#endif /* SCTP_DEBUG */
1565        if (transport) {
1566                if (bytes_acked) {
1567                        /* We may have counted DATA that was migrated
1568                         * to this transport due to DEL-IP operation.
1569                         * Subtract those bytes, since the were never
1570                         * send on this transport and shouldn't be
1571                         * credited to this transport.
1572                         */
1573                        bytes_acked -= migrate_bytes;
1574
1575                        /* 8.2. When an outstanding TSN is acknowledged,
1576                         * the endpoint shall clear the error counter of
1577                         * the destination transport address to which the
1578                         * DATA chunk was last sent.
1579                         * The association's overall error counter is
1580                         * also cleared.
1581                         */
1582                        transport->error_count = 0;
1583                        transport->asoc->overall_error_count = 0;
1584
1585                        /* Mark the destination transport address as
1586                         * active if it is not so marked.
1587                         */
1588                        if ((transport->state == SCTP_INACTIVE) ||
1589                            (transport->state == SCTP_UNCONFIRMED)) {
1590                                sctp_assoc_control_transport(
1591                                        transport->asoc,
1592                                        transport,
1593                                        SCTP_TRANSPORT_UP,
1594                                        SCTP_RECEIVED_SACK);
1595                        }
1596
1597                        sctp_transport_raise_cwnd(transport, sack_ctsn,
1598                                                  bytes_acked);
1599
1600                        transport->flight_size -= bytes_acked;
1601                        if (transport->flight_size == 0)
1602                                transport->partial_bytes_acked = 0;
1603                        q->outstanding_bytes -= bytes_acked + migrate_bytes;
1604                } else {
1605                        /* RFC 2960 6.1, sctpimpguide-06 2.15.2
1606                         * When a sender is doing zero window probing, it
1607                         * should not timeout the association if it continues
1608                         * to receive new packets from the receiver. The
1609                         * reason is that the receiver MAY keep its window
1610                         * closed for an indefinite time.
1611                         * A sender is doing zero window probing when the
1612                         * receiver's advertised window is zero, and there is
1613                         * only one data chunk in flight to the receiver.
1614                         */
1615                        if (!q->asoc->peer.rwnd &&
1616                            !list_empty(&tlist) &&
1617                            (sack_ctsn+2 == q->asoc->next_tsn)) {
1618                                SCTP_DEBUG_PRINTK("%s: SACK received for zero "
1619                                                  "window probe: %u\n",
1620                                                  __func__, sack_ctsn);
1621                                q->asoc->overall_error_count = 0;
1622                                transport->error_count = 0;
1623                        }
1624                }
1625
1626                /* RFC 2960 6.3.2 Retransmission Timer Rules
1627                 *
1628                 * R2) Whenever all outstanding data sent to an address have
1629                 * been acknowledged, turn off the T3-rtx timer of that
1630                 * address.
1631                 */
1632                if (!transport->flight_size) {
1633                        if (timer_pending(&transport->T3_rtx_timer) &&
1634                            del_timer(&transport->T3_rtx_timer)) {
1635                                sctp_transport_put(transport);
1636                        }
1637                } else if (restart_timer) {
1638                        if (!mod_timer(&transport->T3_rtx_timer,
1639                                       jiffies + transport->rto))
1640                                sctp_transport_hold(transport);
1641                }
1642        }
1643
1644        list_splice(&tlist, transmitted_queue);
1645}
1646
1647/* Mark chunks as missing and consequently may get retransmitted. */
1648static void sctp_mark_missing(struct sctp_outq *q,
1649                              struct list_head *transmitted_queue,
1650                              struct sctp_transport *transport,
1651                              __u32 highest_new_tsn_in_sack,
1652                              int count_of_newacks)
1653{
1654        struct sctp_chunk *chunk;
1655        __u32 tsn;
1656        char do_fast_retransmit = 0;
1657        struct sctp_transport *primary = q->asoc->peer.primary_path;
1658
1659        list_for_each_entry(chunk, transmitted_queue, transmitted_list) {
1660
1661                tsn = ntohl(chunk->subh.data_hdr->tsn);
1662
1663                /* RFC 2960 7.2.4, sctpimpguide-05 2.8.2 M3) Examine all
1664                 * 'Unacknowledged TSN's', if the TSN number of an
1665                 * 'Unacknowledged TSN' is smaller than the 'HighestTSNinSack'
1666                 * value, increment the 'TSN.Missing.Report' count on that
1667                 * chunk if it has NOT been fast retransmitted or marked for
1668                 * fast retransmit already.
1669                 */
1670                if (chunk->fast_retransmit == SCTP_CAN_FRTX &&
1671                    !chunk->tsn_gap_acked &&
1672                    TSN_lt(tsn, highest_new_tsn_in_sack)) {
1673
1674                        /* SFR-CACC may require us to skip marking
1675                         * this chunk as missing.
1676                         */
1677                        if (!transport || !sctp_cacc_skip(primary, transport,
1678                                            count_of_newacks, tsn)) {
1679                                chunk->tsn_missing_report++;
1680
1681                                SCTP_DEBUG_PRINTK(
1682                                        "%s: TSN 0x%x missing counter: %d\n",
1683                                        __func__, tsn,
1684                                        chunk->tsn_missing_report);
1685                        }
1686                }
1687                /*
1688                 * M4) If any DATA chunk is found to have a
1689                 * 'TSN.Missing.Report'
1690                 * value larger than or equal to 3, mark that chunk for
1691                 * retransmission and start the fast retransmit procedure.
1692                 */
1693
1694                if (chunk->tsn_missing_report >= 3) {
1695                        chunk->fast_retransmit = SCTP_NEED_FRTX;
1696                        do_fast_retransmit = 1;
1697                }
1698        }
1699
1700        if (transport) {
1701                if (do_fast_retransmit)
1702                        sctp_retransmit(q, transport, SCTP_RTXR_FAST_RTX);
1703
1704                SCTP_DEBUG_PRINTK("%s: transport: %p, cwnd: %d, "
1705                                  "ssthresh: %d, flight_size: %d, pba: %d\n",
1706                                  __func__, transport, transport->cwnd,
1707                                  transport->ssthresh, transport->flight_size,
1708                                  transport->partial_bytes_acked);
1709        }
1710}
1711
1712/* Is the given TSN acked by this packet?  */
1713static int sctp_acked(struct sctp_sackhdr *sack, __u32 tsn)
1714{
1715        int i;
1716        sctp_sack_variable_t *frags;
1717        __u16 gap;
1718        __u32 ctsn = ntohl(sack->cum_tsn_ack);
1719
1720        if (TSN_lte(tsn, ctsn))
1721                goto pass;
1722
1723        /* 3.3.4 Selective Acknowledgement (SACK) (3):
1724         *
1725         * Gap Ack Blocks:
1726         *  These fields contain the Gap Ack Blocks. They are repeated
1727         *  for each Gap Ack Block up to the number of Gap Ack Blocks
1728         *  defined in the Number of Gap Ack Blocks field. All DATA
1729         *  chunks with TSNs greater than or equal to (Cumulative TSN
1730         *  Ack + Gap Ack Block Start) and less than or equal to
1731         *  (Cumulative TSN Ack + Gap Ack Block End) of each Gap Ack
1732         *  Block are assumed to have been received correctly.
1733         */
1734
1735        frags = sack->variable;
1736        gap = tsn - ctsn;
1737        for (i = 0; i < ntohs(sack->num_gap_ack_blocks); ++i) {
1738                if (TSN_lte(ntohs(frags[i].gab.start), gap) &&
1739                    TSN_lte(gap, ntohs(frags[i].gab.end)))
1740                        goto pass;
1741        }
1742
1743        return 0;
1744pass:
1745        return 1;
1746}
1747
1748static inline int sctp_get_skip_pos(struct sctp_fwdtsn_skip *skiplist,
1749                                    int nskips, __be16 stream)
1750{
1751        int i;
1752
1753        for (i = 0; i < nskips; i++) {
1754                if (skiplist[i].stream == stream)
1755                        return i;
1756        }
1757        return i;
1758}
1759
1760/* Create and add a fwdtsn chunk to the outq's control queue if needed. */
1761static void sctp_generate_fwdtsn(struct sctp_outq *q, __u32 ctsn)
1762{
1763        struct sctp_association *asoc = q->asoc;
1764        struct sctp_chunk *ftsn_chunk = NULL;
1765        struct sctp_fwdtsn_skip ftsn_skip_arr[10];
1766        int nskips = 0;
1767        int skip_pos = 0;
1768        __u32 tsn;
1769        struct sctp_chunk *chunk;
1770        struct list_head *lchunk, *temp;
1771
1772        if (!asoc->peer.prsctp_capable)
1773                return;
1774
1775        /* PR-SCTP C1) Let SackCumAck be the Cumulative TSN ACK carried in the
1776         * received SACK.
1777         *
1778         * If (Advanced.Peer.Ack.Point < SackCumAck), then update
1779         * Advanced.Peer.Ack.Point to be equal to SackCumAck.
1780         */
1781        if (TSN_lt(asoc->adv_peer_ack_point, ctsn))
1782                asoc->adv_peer_ack_point = ctsn;
1783
1784        /* PR-SCTP C2) Try to further advance the "Advanced.Peer.Ack.Point"
1785         * locally, that is, to move "Advanced.Peer.Ack.Point" up as long as
1786         * the chunk next in the out-queue space is marked as "abandoned" as
1787         * shown in the following example:
1788         *
1789         * Assuming that a SACK arrived with the Cumulative TSN ACK 102
1790         * and the Advanced.Peer.Ack.Point is updated to this value:
1791         *
1792         *   out-queue at the end of  ==>   out-queue after Adv.Ack.Point
1793         *   normal SACK processing           local advancement
1794         *                ...                           ...
1795         *   Adv.Ack.Pt-> 102 acked                     102 acked
1796         *                103 abandoned                 103 abandoned
1797         *                104 abandoned     Adv.Ack.P-> 104 abandoned
1798         *                105                           105
1799         *                106 acked                     106 acked
1800         *                ...                           ...
1801         *
1802         * In this example, the data sender successfully advanced the
1803         * "Advanced.Peer.Ack.Point" from 102 to 104 locally.
1804         */
1805        list_for_each_safe(lchunk, temp, &q->abandoned) {
1806                chunk = list_entry(lchunk, struct sctp_chunk,
1807                                        transmitted_list);
1808                tsn = ntohl(chunk->subh.data_hdr->tsn);
1809
1810                /* Remove any chunks in the abandoned queue that are acked by
1811                 * the ctsn.
1812                 */
1813                if (TSN_lte(tsn, ctsn)) {
1814                        list_del_init(lchunk);
1815                        sctp_chunk_free(chunk);
1816                } else {
1817                        if (TSN_lte(tsn, asoc->adv_peer_ack_point+1)) {
1818                                asoc->adv_peer_ack_point = tsn;
1819                                if (chunk->chunk_hdr->flags &
1820                                         SCTP_DATA_UNORDERED)
1821                                        continue;
1822                                skip_pos = sctp_get_skip_pos(&ftsn_skip_arr[0],
1823                                                nskips,
1824                                                chunk->subh.data_hdr->stream);
1825                                ftsn_skip_arr[skip_pos].stream =
1826                                        chunk->subh.data_hdr->stream;
1827                                ftsn_skip_arr[skip_pos].ssn =
1828                                         chunk->subh.data_hdr->ssn;
1829                                if (skip_pos == nskips)
1830                                        nskips++;
1831                                if (nskips == 10)
1832                                        break;
1833                        } else
1834                                break;
1835                }
1836        }
1837
1838        /* PR-SCTP C3) If, after step C1 and C2, the "Advanced.Peer.Ack.Point"
1839         * is greater than the Cumulative TSN ACK carried in the received
1840         * SACK, the data sender MUST send the data receiver a FORWARD TSN
1841         * chunk containing the latest value of the
1842         * "Advanced.Peer.Ack.Point".
1843         *
1844         * C4) For each "abandoned" TSN the sender of the FORWARD TSN SHOULD
1845         * list each stream and sequence number in the forwarded TSN. This
1846         * information will enable the receiver to easily find any
1847         * stranded TSN's waiting on stream reorder queues. Each stream
1848         * SHOULD only be reported once; this means that if multiple
1849         * abandoned messages occur in the same stream then only the
1850         * highest abandoned stream sequence number is reported. If the
1851         * total size of the FORWARD TSN does NOT fit in a single MTU then
1852         * the sender of the FORWARD TSN SHOULD lower the
1853         * Advanced.Peer.Ack.Point to the last TSN that will fit in a
1854         * single MTU.
1855         */
1856        if (asoc->adv_peer_ack_point > ctsn)
1857                ftsn_chunk = sctp_make_fwdtsn(asoc, asoc->adv_peer_ack_point,
1858                                              nskips, &ftsn_skip_arr[0]);
1859
1860        if (ftsn_chunk) {
1861                list_add_tail(&ftsn_chunk->list, &q->control_chunk_list);
1862                SCTP_INC_STATS(SCTP_MIB_OUTCTRLCHUNKS);
1863        }
1864}
1865