linux/net/sctp/associola.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 Intel Corp.
   6 * Copyright (c) 2001 La Monte H.P. Yarroll
   7 *
   8 * This file is part of the SCTP kernel implementation
   9 *
  10 * This module provides the abstraction for an SCTP association.
  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 *    Jon Grimm             <jgrimm@us.ibm.com>
  40 *    Xingang Guo           <xingang.guo@intel.com>
  41 *    Hui Huang             <hui.huang@nokia.com>
  42 *    Sridhar Samudrala     <sri@us.ibm.com>
  43 *    Daisy Chang           <daisyc@us.ibm.com>
  44 *    Ryan Layer            <rmlayer@us.ibm.com>
  45 *    Kevin Gao             <kevin.gao@intel.com>
  46 *
  47 * Any bugs reported given to us we will try to fix... any fixes shared will
  48 * be incorporated into the next SCTP release.
  49 */
  50
  51#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  52
  53#include <linux/types.h>
  54#include <linux/fcntl.h>
  55#include <linux/poll.h>
  56#include <linux/init.h>
  57
  58#include <linux/slab.h>
  59#include <linux/in.h>
  60#include <net/ipv6.h>
  61#include <net/sctp/sctp.h>
  62#include <net/sctp/sm.h>
  63
  64/* Forward declarations for internal functions. */
  65static void sctp_assoc_bh_rcv(struct work_struct *work);
  66static void sctp_assoc_free_asconf_acks(struct sctp_association *asoc);
  67static void sctp_assoc_free_asconf_queue(struct sctp_association *asoc);
  68
  69/* Keep track of the new idr low so that we don't re-use association id
  70 * numbers too fast.  It is protected by they idr spin lock is in the
  71 * range of 1 - INT_MAX.
  72 */
  73static u32 idr_low = 1;
  74
  75
  76/* 1st Level Abstractions. */
  77
  78/* Initialize a new association from provided memory. */
  79static struct sctp_association *sctp_association_init(struct sctp_association *asoc,
  80                                          const struct sctp_endpoint *ep,
  81                                          const struct sock *sk,
  82                                          sctp_scope_t scope,
  83                                          gfp_t gfp)
  84{
  85        struct net *net = sock_net(sk);
  86        struct sctp_sock *sp;
  87        int i;
  88        sctp_paramhdr_t *p;
  89        int err;
  90
  91        /* Retrieve the SCTP per socket area.  */
  92        sp = sctp_sk((struct sock *)sk);
  93
  94        /* Discarding const is appropriate here.  */
  95        asoc->ep = (struct sctp_endpoint *)ep;
  96        sctp_endpoint_hold(asoc->ep);
  97
  98        /* Hold the sock.  */
  99        asoc->base.sk = (struct sock *)sk;
 100        sock_hold(asoc->base.sk);
 101
 102        /* Initialize the common base substructure.  */
 103        asoc->base.type = SCTP_EP_TYPE_ASSOCIATION;
 104
 105        /* Initialize the object handling fields.  */
 106        atomic_set(&asoc->base.refcnt, 1);
 107        asoc->base.dead = 0;
 108        asoc->base.malloced = 0;
 109
 110        /* Initialize the bind addr area.  */
 111        sctp_bind_addr_init(&asoc->base.bind_addr, ep->base.bind_addr.port);
 112
 113        asoc->state = SCTP_STATE_CLOSED;
 114
 115        /* Set these values from the socket values, a conversion between
 116         * millsecons to seconds/microseconds must also be done.
 117         */
 118        asoc->cookie_life.tv_sec = sp->assocparams.sasoc_cookie_life / 1000;
 119        asoc->cookie_life.tv_usec = (sp->assocparams.sasoc_cookie_life % 1000)
 120                                        * 1000;
 121        asoc->frag_point = 0;
 122        asoc->user_frag = sp->user_frag;
 123
 124        /* Set the association max_retrans and RTO values from the
 125         * socket values.
 126         */
 127        asoc->max_retrans = sp->assocparams.sasoc_asocmaxrxt;
 128        asoc->pf_retrans  = net->sctp.pf_retrans;
 129
 130        asoc->rto_initial = msecs_to_jiffies(sp->rtoinfo.srto_initial);
 131        asoc->rto_max = msecs_to_jiffies(sp->rtoinfo.srto_max);
 132        asoc->rto_min = msecs_to_jiffies(sp->rtoinfo.srto_min);
 133
 134        asoc->overall_error_count = 0;
 135
 136        /* Initialize the association's heartbeat interval based on the
 137         * sock configured value.
 138         */
 139        asoc->hbinterval = msecs_to_jiffies(sp->hbinterval);
 140
 141        /* Initialize path max retrans value. */
 142        asoc->pathmaxrxt = sp->pathmaxrxt;
 143
 144        /* Initialize default path MTU. */
 145        asoc->pathmtu = sp->pathmtu;
 146
 147        /* Set association default SACK delay */
 148        asoc->sackdelay = msecs_to_jiffies(sp->sackdelay);
 149        asoc->sackfreq = sp->sackfreq;
 150
 151        /* Set the association default flags controlling
 152         * Heartbeat, SACK delay, and Path MTU Discovery.
 153         */
 154        asoc->param_flags = sp->param_flags;
 155
 156        /* Initialize the maximum mumber of new data packets that can be sent
 157         * in a burst.
 158         */
 159        asoc->max_burst = sp->max_burst;
 160
 161        /* initialize association timers */
 162        asoc->timeouts[SCTP_EVENT_TIMEOUT_NONE] = 0;
 163        asoc->timeouts[SCTP_EVENT_TIMEOUT_T1_COOKIE] = asoc->rto_initial;
 164        asoc->timeouts[SCTP_EVENT_TIMEOUT_T1_INIT] = asoc->rto_initial;
 165        asoc->timeouts[SCTP_EVENT_TIMEOUT_T2_SHUTDOWN] = asoc->rto_initial;
 166        asoc->timeouts[SCTP_EVENT_TIMEOUT_T3_RTX] = 0;
 167        asoc->timeouts[SCTP_EVENT_TIMEOUT_T4_RTO] = 0;
 168
 169        /* sctpimpguide Section 2.12.2
 170         * If the 'T5-shutdown-guard' timer is used, it SHOULD be set to the
 171         * recommended value of 5 times 'RTO.Max'.
 172         */
 173        asoc->timeouts[SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD]
 174                = 5 * asoc->rto_max;
 175
 176        asoc->timeouts[SCTP_EVENT_TIMEOUT_HEARTBEAT] = 0;
 177        asoc->timeouts[SCTP_EVENT_TIMEOUT_SACK] = asoc->sackdelay;
 178        asoc->timeouts[SCTP_EVENT_TIMEOUT_AUTOCLOSE] =
 179                min_t(unsigned long, sp->autoclose, net->sctp.max_autoclose) * HZ;
 180
 181        /* Initializes the timers */
 182        for (i = SCTP_EVENT_TIMEOUT_NONE; i < SCTP_NUM_TIMEOUT_TYPES; ++i)
 183                setup_timer(&asoc->timers[i], sctp_timer_events[i],
 184                                (unsigned long)asoc);
 185
 186        /* Pull default initialization values from the sock options.
 187         * Note: This assumes that the values have already been
 188         * validated in the sock.
 189         */
 190        asoc->c.sinit_max_instreams = sp->initmsg.sinit_max_instreams;
 191        asoc->c.sinit_num_ostreams  = sp->initmsg.sinit_num_ostreams;
 192        asoc->max_init_attempts = sp->initmsg.sinit_max_attempts;
 193
 194        asoc->max_init_timeo =
 195                 msecs_to_jiffies(sp->initmsg.sinit_max_init_timeo);
 196
 197        /* Allocate storage for the ssnmap after the inbound and outbound
 198         * streams have been negotiated during Init.
 199         */
 200        asoc->ssnmap = NULL;
 201
 202        /* Set the local window size for receive.
 203         * This is also the rcvbuf space per association.
 204         * RFC 6 - A SCTP receiver MUST be able to receive a minimum of
 205         * 1500 bytes in one SCTP packet.
 206         */
 207        if ((sk->sk_rcvbuf/2) < SCTP_DEFAULT_MINWINDOW)
 208                asoc->rwnd = SCTP_DEFAULT_MINWINDOW;
 209        else
 210                asoc->rwnd = sk->sk_rcvbuf/2;
 211
 212        asoc->a_rwnd = asoc->rwnd;
 213
 214        asoc->rwnd_over = 0;
 215        asoc->rwnd_press = 0;
 216
 217        /* Use my own max window until I learn something better.  */
 218        asoc->peer.rwnd = SCTP_DEFAULT_MAXWINDOW;
 219
 220        /* Set the sndbuf size for transmit.  */
 221        asoc->sndbuf_used = 0;
 222
 223        /* Initialize the receive memory counter */
 224        atomic_set(&asoc->rmem_alloc, 0);
 225
 226        init_waitqueue_head(&asoc->wait);
 227
 228        asoc->c.my_vtag = sctp_generate_tag(ep);
 229        asoc->peer.i.init_tag = 0;     /* INIT needs a vtag of 0. */
 230        asoc->c.peer_vtag = 0;
 231        asoc->c.my_ttag   = 0;
 232        asoc->c.peer_ttag = 0;
 233        asoc->c.my_port = ep->base.bind_addr.port;
 234
 235        asoc->c.initial_tsn = sctp_generate_tsn(ep);
 236
 237        asoc->next_tsn = asoc->c.initial_tsn;
 238
 239        asoc->ctsn_ack_point = asoc->next_tsn - 1;
 240        asoc->adv_peer_ack_point = asoc->ctsn_ack_point;
 241        asoc->highest_sacked = asoc->ctsn_ack_point;
 242        asoc->last_cwr_tsn = asoc->ctsn_ack_point;
 243        asoc->unack_data = 0;
 244
 245        /* ADDIP Section 4.1 Asconf Chunk Procedures
 246         *
 247         * When an endpoint has an ASCONF signaled change to be sent to the
 248         * remote endpoint it should do the following:
 249         * ...
 250         * A2) a serial number should be assigned to the chunk. The serial
 251         * number SHOULD be a monotonically increasing number. The serial
 252         * numbers SHOULD be initialized at the start of the
 253         * association to the same value as the initial TSN.
 254         */
 255        asoc->addip_serial = asoc->c.initial_tsn;
 256
 257        INIT_LIST_HEAD(&asoc->addip_chunk_list);
 258        INIT_LIST_HEAD(&asoc->asconf_ack_list);
 259
 260        /* Make an empty list of remote transport addresses.  */
 261        INIT_LIST_HEAD(&asoc->peer.transport_addr_list);
 262        asoc->peer.transport_count = 0;
 263
 264        /* RFC 2960 5.1 Normal Establishment of an Association
 265         *
 266         * After the reception of the first data chunk in an
 267         * association the endpoint must immediately respond with a
 268         * sack to acknowledge the data chunk.  Subsequent
 269         * acknowledgements should be done as described in Section
 270         * 6.2.
 271         *
 272         * [We implement this by telling a new association that it
 273         * already received one packet.]
 274         */
 275        asoc->peer.sack_needed = 1;
 276        asoc->peer.sack_cnt = 0;
 277        asoc->peer.sack_generation = 1;
 278
 279        /* Assume that the peer will tell us if he recognizes ASCONF
 280         * as part of INIT exchange.
 281         * The sctp_addip_noauth option is there for backward compatibilty
 282         * and will revert old behavior.
 283         */
 284        asoc->peer.asconf_capable = 0;
 285        if (net->sctp.addip_noauth)
 286                asoc->peer.asconf_capable = 1;
 287        asoc->asconf_addr_del_pending = NULL;
 288        asoc->src_out_of_asoc_ok = 0;
 289        asoc->new_transport = NULL;
 290
 291        /* Create an input queue.  */
 292        sctp_inq_init(&asoc->base.inqueue);
 293        sctp_inq_set_th_handler(&asoc->base.inqueue, sctp_assoc_bh_rcv);
 294
 295        /* Create an output queue.  */
 296        sctp_outq_init(asoc, &asoc->outqueue);
 297
 298        if (!sctp_ulpq_init(&asoc->ulpq, asoc))
 299                goto fail_init;
 300
 301        memset(&asoc->peer.tsn_map, 0, sizeof(struct sctp_tsnmap));
 302
 303        asoc->need_ecne = 0;
 304
 305        asoc->assoc_id = 0;
 306
 307        /* Assume that peer would support both address types unless we are
 308         * told otherwise.
 309         */
 310        asoc->peer.ipv4_address = 1;
 311        if (asoc->base.sk->sk_family == PF_INET6)
 312                asoc->peer.ipv6_address = 1;
 313        INIT_LIST_HEAD(&asoc->asocs);
 314
 315        asoc->autoclose = sp->autoclose;
 316
 317        asoc->default_stream = sp->default_stream;
 318        asoc->default_ppid = sp->default_ppid;
 319        asoc->default_flags = sp->default_flags;
 320        asoc->default_context = sp->default_context;
 321        asoc->default_timetolive = sp->default_timetolive;
 322        asoc->default_rcv_context = sp->default_rcv_context;
 323
 324        /* AUTH related initializations */
 325        INIT_LIST_HEAD(&asoc->endpoint_shared_keys);
 326        err = sctp_auth_asoc_copy_shkeys(ep, asoc, gfp);
 327        if (err)
 328                goto fail_init;
 329
 330        asoc->active_key_id = ep->active_key_id;
 331        asoc->asoc_shared_key = NULL;
 332
 333        asoc->default_hmac_id = 0;
 334        /* Save the hmacs and chunks list into this association */
 335        if (ep->auth_hmacs_list)
 336                memcpy(asoc->c.auth_hmacs, ep->auth_hmacs_list,
 337                        ntohs(ep->auth_hmacs_list->param_hdr.length));
 338        if (ep->auth_chunk_list)
 339                memcpy(asoc->c.auth_chunks, ep->auth_chunk_list,
 340                        ntohs(ep->auth_chunk_list->param_hdr.length));
 341
 342        /* Get the AUTH random number for this association */
 343        p = (sctp_paramhdr_t *)asoc->c.auth_random;
 344        p->type = SCTP_PARAM_RANDOM;
 345        p->length = htons(sizeof(sctp_paramhdr_t) + SCTP_AUTH_RANDOM_LENGTH);
 346        get_random_bytes(p+1, SCTP_AUTH_RANDOM_LENGTH);
 347
 348        return asoc;
 349
 350fail_init:
 351        sctp_endpoint_put(asoc->ep);
 352        sock_put(asoc->base.sk);
 353        return NULL;
 354}
 355
 356/* Allocate and initialize a new association */
 357struct sctp_association *sctp_association_new(const struct sctp_endpoint *ep,
 358                                         const struct sock *sk,
 359                                         sctp_scope_t scope,
 360                                         gfp_t gfp)
 361{
 362        struct sctp_association *asoc;
 363
 364        asoc = t_new(struct sctp_association, gfp);
 365        if (!asoc)
 366                goto fail;
 367
 368        if (!sctp_association_init(asoc, ep, sk, scope, gfp))
 369                goto fail_init;
 370
 371        asoc->base.malloced = 1;
 372        SCTP_DBG_OBJCNT_INC(assoc);
 373        SCTP_DEBUG_PRINTK("Created asoc %p\n", asoc);
 374
 375        return asoc;
 376
 377fail_init:
 378        kfree(asoc);
 379fail:
 380        return NULL;
 381}
 382
 383/* Free this association if possible.  There may still be users, so
 384 * the actual deallocation may be delayed.
 385 */
 386void sctp_association_free(struct sctp_association *asoc)
 387{
 388        struct sock *sk = asoc->base.sk;
 389        struct sctp_transport *transport;
 390        struct list_head *pos, *temp;
 391        int i;
 392
 393        /* Only real associations count against the endpoint, so
 394         * don't bother for if this is a temporary association.
 395         */
 396        if (!asoc->temp) {
 397                list_del(&asoc->asocs);
 398
 399                /* Decrement the backlog value for a TCP-style listening
 400                 * socket.
 401                 */
 402                if (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING))
 403                        sk->sk_ack_backlog--;
 404        }
 405
 406        /* Mark as dead, so other users can know this structure is
 407         * going away.
 408         */
 409        asoc->base.dead = 1;
 410
 411        /* Dispose of any data lying around in the outqueue. */
 412        sctp_outq_free(&asoc->outqueue);
 413
 414        /* Dispose of any pending messages for the upper layer. */
 415        sctp_ulpq_free(&asoc->ulpq);
 416
 417        /* Dispose of any pending chunks on the inqueue. */
 418        sctp_inq_free(&asoc->base.inqueue);
 419
 420        sctp_tsnmap_free(&asoc->peer.tsn_map);
 421
 422        /* Free ssnmap storage. */
 423        sctp_ssnmap_free(asoc->ssnmap);
 424
 425        /* Clean up the bound address list. */
 426        sctp_bind_addr_free(&asoc->base.bind_addr);
 427
 428        /* Do we need to go through all of our timers and
 429         * delete them?   To be safe we will try to delete all, but we
 430         * should be able to go through and make a guess based
 431         * on our state.
 432         */
 433        for (i = SCTP_EVENT_TIMEOUT_NONE; i < SCTP_NUM_TIMEOUT_TYPES; ++i) {
 434                if (timer_pending(&asoc->timers[i]) &&
 435                    del_timer(&asoc->timers[i]))
 436                        sctp_association_put(asoc);
 437        }
 438
 439        /* Free peer's cached cookie. */
 440        kfree(asoc->peer.cookie);
 441        kfree(asoc->peer.peer_random);
 d1m1e.
/a>) {n>
 416<97.r5>peer_random);href="+co="L343"> 343        4a hre44net/sctp/associola.c#L423" id="L423" ch_random"4class="sref">auth_random4/a>;
44 href="+code=sctp_ssnmap_free" class="Ref=ioltp_ssde=asoc" "net/sctp/sa>);
p->lenhref=la._esre_"L42  */
.ame="L389"> 389        t bother for if this is a temporary associola.c#L295" id="L295" class="line" name="L295"> 295        );
ode=ep" class="sref#e=asoc" L424">ode=ine" name="L433"> 433        for ();
 395sk =  431.ame="L389"> 389              struct sock *peer_random);L436" id=            */
ame="L389"> 389      ndom" class="sref">peer_random);="+code=sDOM_LENGTH" class="sref"4SCTP_44+code=length" class="sref">length *asoc-&gf">sk = peer_random)tp/associ4la.c#L347" id="L347" cla4s="li45      }
]))
 348        return  420        fail_init<4a>:
<4 href="net/sctp/associola.c#Lclass="line" name="L295"> 295        );
NULL;
4ref">ep);
sock_put4/a>( 3s="sref">asochunk_teardowpan>
asochunk_teardowpa>(&asoc->base.sk);
("+cce beee);
 3545rr" class="sref">err =  396            asoc->e"sref">i]) &&
struct  d1m1e.
/a>) {n>
asoc-> 418        s4ck *skdefault_rcv_context =-return < class="li sref"> oc" >);
sctp_scope_t asoc;
 324        < 3>timer_pending(&asoc-> 324        /* AUTH related initializations */list_head *temp;
 =-return < cef">del_tim sref"> oc">);
 3./a>) {n>
active_kAUTH related initializations */sk);
t_new(struc4 );
del_timer(&asoc->       4if (!sk4/a>, 4a hrefeletic .c#L384" id="L384" class="line" name=de   oydel_timer" class="sref">del_timede   oya>(&actual deallocation may be delayed.
 385 */, g47de=scope" class="sref">scope,

         */./a>) {n>
         * going away.
 372Ape
+code=SCTP_DBG_378->as4oc);
 3 349
 350         351        sctp_endpoint_put(asoc->asoc);
err =  396      slass="sref">asoc-> 433        for ( 375        return         timer_pending(&
->lengthremoclass="sref">defai/a>remocl>timer_pending(&
 396      slass="sref">asoc->->sk,
        timer_pending(&
->asoc);
 379fail:

 351    tomic>re
asoc->->as4"L381"> 381}
 383 369                goto fail_in name="L433"> 433        for (
 376
 395 376
 375]))
 3>]))
base. 4_transpor4 *         * deet/shang;
prim2">  clain/a> =-acklog" ree(an ihreh uprefsctp/associol>);
 390        struct4p;_seciorim2">"sref">del_timede   oya>(&actual deallocation may be delayed.
pos, * 388        struct sock *sk =  385       4int ifail_in name="L433"> " class="4ine" name="L393"> 393 383;
        
4a href="net/sctp/associo4a.c#L49asoc 415        a hry hame=a
prim2"> pa4);
 406 asoc->bind_addr);
as5cs 383 416<97.r5>_pa4_pa4asoc->i) {
, * 416<97.r5>_pa4_pa4asoc->sk =  385i) {
sk,  416<97.r5>_pa4_pa4asc->sk = i) {
 393 4035/a>      5                 sk->);
 454507 href="net/sc4p/ass47 classclass="sref">length));
 295        );
_class="comment">/* 1rim2">_clashref="s a temporary associ="+code=sk" class="sref">sk = ipclass="comment">/* ipclasss="                 const struct /* ctual las"+code=asoc"rmem_ namesoc-> * 405<51 href="+code=s4" cla4s="sref">sk;
prim2"> pa4< namchang="+,srefume;=asoc" "net/sctp/sa>);
         * delete them? ass= wahr_gh aus"> 380.d51430" class="line" name="L430"> 430         * should5 any data5lying around in the outq5eue. 51pos, *-&gf">sk =  401    ACTIV init" ||lass="comment">         * should5 href="+c5L412" class="line" name=5L412"51s="sref">i = a>-&gf">sk =  401         * should5 5ref="+c5e=outqueue" class="sref"5outqu51class="line" name="L4emporary associola.c#L295" id="L295" class="line" name="L295"> 295        );
asc->sk = i) {

 415                 * should5  href="n5t; 406 gorithm:         * should5 ad, so o5
;
prim2">         * should5"> 418/* Do we ne clain/a> =-acklog",sctp_ulp"+codcklog-ree(ciatipan class="comment">         * should5"a href="5ef="net/sctp/associola.c5L420"52ass="comment">         * delete them? prim2">  clain/a> =,(sends= MUST do(follow="+:         * should5     5   430         * should5peer.tp_ula>-wahra switc);
/* Free ssnma5 stor52f">i;
(sends= MUST set/aprefsctp/associol>);
/* Only real a CYCLING_CHANGEOVER.to>indi> 353/aatnamswitc);
(sa h  clain/a> =-acklog" we will try to delete all, but we 406 bind_addr);
 425 5      /* Do we n>         * should5 class="l5ne" name="L429"> 4295span 531os, * 394         * d"line" name="L411"> 411        ue);
length =out 394         * d"line" name="L411"> 411        ue);
 385i) {
i.f">sk =  394);
         385.f">sk =  394);
        asc->        i) {
tim5rs 415                 * should5  href="n5/associola.c#L436" id="L536" c536" class="line" name="L406"> 406  382
bind_addr);
 437        Nat/sct4>.f">sk =  394);
        ->        i) {

5a hre54eturn  425ass="sref5>cookie);
(sends= MUST store(cixt TSN to>b>(sent>in uprefsctp/associol>);
 382
pee5_random);href="+co="5343">54f">i;
f">sk =  394);
 394-> 394         * dcixtclas> 394i) {
p 3>]))
  5     for ();
 426     5sref">pee5_random);L436" id=  5);="+code=sDO5_LENG5H" clask4/a>, 4a hrefeletic .c#L384"_rm_ 295        del_timede   oya>(&actual deallocation may be delayed.
pee5_random)tp/associ4la5c#L3455d="L378" class4"line444444444name="L388"> 388        struct sock *         385 348 5     55=gfp" class="s4ef">g47de=scope" class=5     5  fail_init href="+code=sk" class="sref">sk;
amecode=i" class="sref">i) {
ep)5
fail_init href="+code=sk" class      struct solack *sk = i) {
sock_put4/a5(}

 -ackl: > 372Ape
d372        <}
  5.c#L437" id=" id="L354" 5lass=55/associola.c#L486" i4ss="lineeeeeeeeeer/sctp/associola.c#L385" id="L385" class="                 const struct pee5mp;
5truct ipclass="comment">/* ipclasss=")                 const struct .        ipclass="comment">/* ipclasss="ue);
/* v4ss="ue);
-> 418s4ck5/a> *56f">base. 5/associol5.c#L437" id=class="sr4f"5sctp_5609" class="line" name="L409"> 409 Ifoclass(currnnt>re>sk<_pa4<, upd 353it         * should5initializ5tions */ 430(cixt an i>b>forenaman i>froms/a>(>sctp         * should5iss="sref5a href="+co4ref="net/4ct5/asso56id="L380" class="line" namelete them?h uprefsctp/associol>);
i 295        );
sk<_pa4<        sk<_pa4<="co = class="line" nam 295         385sk<_pa4<        sk<_pa4<"srefrmporary associiola.c#L376" id="L376" class="line" name="L376"> 376
);

 415        pee5/associola.ca>       4if5(!ulpq);
         */
="+co  t bother for if sk);
 */, .amesc-> 394         * d 295        );
ode=ep" class="sref#ue);
 394i) {
sco5e,
sk =  431.ame="L389"> 389              struct sock *as4oc5/a>);5sk(an i to>b>();
57"L383"> 383 416<97.r5>_pa4_pa4asc class="line" nam 295         385p;_seciorim2">"srefr/sctp/associola.c#L385" id="L385" class=" ->sk = err =         );
asc class="line" nam 295         385pee5     for ( 375 5     5return err =         );
asc->sk = i) {
 295        );
sk<_pa4<        sk<_pa4<="co = class="line" nam 295         385skola.c#L295" id="L295" class="line" name="L295"> 295        );
sk<_pa4<        sk<_pa4<="co =->sk = i) {
a5oc, *skola.c#L295" id="L295" class="line" name="L295"> 295        );
     ata_from431         385sco5/associola.cname="L374">5379;
 295        );
     ata_from431sk = i) {
as4"L581"> 58a href="net/sc4" cla4s="sref">sk(o" class=" clINIT-wahrf   (sent>to, set/it>to uprefsctp/associol>);
/* Only real a href. Comb" cd with(&ad 353ofp_ulpreo" c pa4< abass,);
e cycl 382
 375 406 h uprefsctp/associol>);
inct_f    sent_tos="comment">/* inct_f    sent_to="co = class="line" nam 295         385skola.c#L295" id="L295" class="line" name="L295">inct_f    sent_tos="comment">/* inct_f    sent_to="co =->i) {
 * 425name="L395"> 390        struct5         *5a href="+code=pos" class5"sref59id="L380" class="line" namelete them? to(&ad 353ofp_ulpreo" c pa4< abass,);
i;
(cixt SHUTDOWN-to>b>(sent>to(cixt availhrou uprefsctp/associol>);
 393/* Only real a o" class=,e cycl 382
);
err = /* shutt/sc_f    sent_to="co = class="line" nam 295         385err = /* shutt/sc_f    sent_to="co =->i) {
 *as6cssk(o" class=" clASCONF-wahrf   (sent>to, set/it>to uprefsctp/associol>);
         * delete them? href. uprefsctp/associol>);
 430         * should6t3 value 6o href="+code=pos" class6ss="s60pos, *err = err = i) {
sk, err = err = ="+co  t ass="comment"f">sk =          385 393addip_f    "+codef">err = ="+co  t ass="comment"f">sk = ->i) {
      6                 
 46460"L415"> 415        );
 406 (beassplde=aissa>;
bind_addr);
 406<610L383"> 383        ="+comiteskfail_in name="L433">6, * 388        struct sock *        ->err =         );
acode=i" class="sref">i) {
.d61 388       >peera href="+code=sock" >peeref">sock *acode=i" class="sref">i) {
i = 15         431 "srefr/sctp/associolca="s a temporary associ 295        ="+comiteskskodmitefail_in name="L433">6a="line" name="L295">="+co  t ass="comment"f">sk = ->i) {
a="line" name="L295">rtt_in_croglog"         3>]))
 418base. 6"a href="6ef="net/sctp/associola.c6L420"621os, *
="+comitesk     6          ="+comiteskpeer./* Free ssnma6 stor62s="sref">i = 15        -i   ase=i="wasn>();
/* Only real         *;se=migraeget/aprefsctp/associol>);

T3_rtx_tims5        );
        T3_rtx_tims5         426 63d="L378" class4"line444444444ef">i = 15jiffiref">length =jiffire="L37+->        rtos="comment">/* rto="codectp/associol>);
 4296span 631os, *i = 15ock" class="sr_hola>(&         3>]))
i->err =         );
ode=ep"counld="L3-e=asoc" L#L391clas431code=NULL" c6
5ref="+c6ctp/associola.c#L434" id6"L43463="L403" class="line" name="L403"> 4036be of any6mp;
ode=ep"his association */<ode=ep"his "srefr/sctp/associol 295        tim6rsbind_addr);
="sref"upref="hrlah uprefsctp/associol>);
 388        struct sock *_ack_ 295        del_timede   oya>(&actual deallocation may be delayed.
i = 15 =-imede   oya>(&actual lass="comment">/* ctual las"+conet/sctp/associolalass="comment">/* classs="                 const struct /* gf" ca hret/sctp/associolgf"s="comment">/* gf"ss="                 const struct );
 401 295_came=nqueline" name="L385"> 385pee6_random);href="+co="6343">64f">ifail_in name="L433">6/5ref="+c6 id="L423" ch_random"4cl6ss="s64      del_timede   oya>(&a">f"L401"> 401neref">sock *f"L401"> 401neref">sr->   ">f"L401"> 401s>   ">f"srefr/sctp/associol"sref">err = sctp_endpoint_put(asoc->del_timede   oya>(&a      struct sock *        asoc->del_timede   oya>(&a     s&/* spnquec" class="sref">asoc-> = i) {
);="+code=sDO6_LENG64 *pee6_random)tp/associ4la6c#L3465name="L437"> 437        a"s="comment">/* spnquesr->err = sctp_endpoint_put(asoc-> 348 6     65eturn  426     6          );
NULL;
4ref">ep)6
fail_initck */* classs="396" class="line" nav4s="comment">/* v4ss="ue);
asoc->pee6L412" class=>sock_put4/a6(}

 -ackl: > 372Ape
d came=:372">d372        <}
  6.c#L437" id=" id="L354" 6lass=65/associola.c#L486" i4ss="lineeeeeeeeeer/sctp/associola.c#L385" id="L385" class="                 const struct pee6mp;
6truct /* classs="                 const struct  418s4ck6/a> *66d="L378" class4"line444444444ef">isport;
 401 295_came=nquelc" class="sref">asoc-> 426initializ6tions */        );
, * 416<97.r5> 385i = 15 416<97.r5> = i) {
 4036/a>);
sk->);
 416sr->/* s _lnL384"_lookup_pclas"srefr/sctp/associol"sref">err = /* classs="lc" class="sref">asoc->pee6/associola.ca>       4if6(!ulpq)a4        fail_in name="L433">6         6               * should6/associol6.c#L437" id=/* Do we         ? ass= in sck" >onnectx() callhrlSuc);
 */,          * delete them        ? considercd CONFIRMED ps= RFC 4960,=Seca hrL5.4 we will try to delete all, but wesco6e,
 430);
 401fail_in name="L433">6L412" id=6L412" class="sref">as4oc6/a>);67s="sref">i = 15 416 href="net/sctp/assocame="L401"> 401    ACTIV initc" class="sref">asoc->67class="line" name="L4ciola.c#L465" i4="L365>]))
 416c" class="sref">asoc->pee6     for ( 375 6     67ef="+code=asoc4 clas46 436       6ef="+code6ep" class="47"+code=s4d=6L377"6class="line" nc4p/ass47 classssociline" name="L416"> 416sr->ode=ep"newassociation */<ode=ep"ciatirefr/sctp/associol">f"L401"> 401neref"> ->/* classs=" ->/* gf"ss="lc" class="sref">asoc-> 383 385a6oc, *i) {
sco6/associola.cname="L374">6379i) {
fail_initck *ode=ep"seciown95        ode=ep"seciown95"srefr/sctp/associol 295        ->err = asoc->as4"L681"> 681}
         uprefsctp/associol>);

 382

);
 375ulpq);
 416 href="net/sctp/assohbaraervaliline" name="L4hbaraerval 416sr->asoc-> *sksk);
  416 href="net/sctp/assoaa4 394-> 394asoc-> 390        struct6i) {
 *6a href="+code=pos" class6"sref693href="+code=s4" cla4s="sref">sk);
i-> 416 href="net/sctp/assoaf_re>skskasoc-> 393 4036o
6a href="net/sctp/associo6a.c#L69sk" class="sref">sk-> uprefsctp/associol>);

 382
 406 h uprefsctp/associol>);
 416 href="net/sctp/assocack        ->        asoc->as7cs 437        ssociline" name="L416"> 416 href="net/sctp/assocackfreq        ->        asoc-> 427t2sctp/as7o> 390        struct7/span70associola.c#L4>                 * should7t3 value 7o href="+code=pos" class7ss="s70id="L380" class="line" namelete them? ="srdbhr
 382
sk, i;
 393 416 href="net/sctp/assoaaram_flagsiline" name="L41aram_flags 416sr->asoc->
 474707 href="net/sc4p/ass47 classc .c#4">ode=ep"rout association */<ode=ep"rout "srefr/sctp/associol 295        ->->/* spnquelc" class="sref">asoc->       7ead, so o7her users can know this 7truct709k" class="sref">sk->ode=eppm?h uprefsctp/associol>);
 407<710L383"> 383 416 href="net/sctp/assoaaram_flagsiline" name="L41aram_flags 416sspan>class="line" namePP_PMTUD_DISABL class="comment">PP_PMTUD_DISABL "+cod class="sref">fail_in name="L433">7, *skola.c#L295" id="L295" class="line" name="L295"> a4 394 385.d71 416 href="net/sctp/assoaa4 394-> 394asoc->, *asoc->i = 15  416 href="net/sctp/assoaa4 394->    neFAULT_MAXSEGMENTnquec" class="sref">asoc-> 415         406 (span>
to(an i>( 382
bind_addr);
span>
isshigh i than(ciwe="L382"> 382
 418/* Do we *(an i>(
to(ciw(an i>( 382
         * delete them?h uprefsctp/associol>);
skola.c#L295" id="L295" class="line" name="L295"> a4 394 385peer.skola.c#L295" id="L295" class="line" name="L295"> a4 394->/* min c"srefint -> 416 href="net/sctp/assoaa4 394->err =  a4 394asoc->/* Free ssnma7 stor72s="sref">iasoc-> a4 394-> 416 href="net/sctp/assoaa4 394asoc->->    net/sctp/ass"srefref="net/sctp/associ, ass="c .c#L384"_ack_ 295:span>
 -PMTU>seel"o > 372Ape
< */
d372        err =  a4 394asoc-> 416 href="net/sctp/assoamtu="L416"         427 73f">base. 7 class="l7ne" name="L429"> 4297span 73ope_t err = frag_poinla.c#e=asoc" L42frag_poinl 416sr->err =  a4 394asoc->i) {
sk.ass="mightrnot be meanck_ful/yet, but/aprefsctp/associol>);
i;
del_ure 382
/* Only real ah uprefsctp/associol>);
(struc4 );

packet> 394err = sctp_endpoint_pubindl lass="comment">/* bindl lasef">sctp_endpoint_pu t tim7rserr =  sociline" name="L416"> 416<97.r5>asoc->sk->/* Do we * uprefsctp/associol>);

7a hre74ass="comment">         * delete them? ofT clinitial cwnd bufore         * should7ass="sref7>cookie);
 430);
);
74f">i;
/* Only real a ofT clinitial valu<3ofpss" resh MAY>b>(arbio" rilyshigh uprefsctp/associol>);
use(sizeeofp_ul uprefsctp/associol>);
);
 382
);L436" id=  7 406 h uprefsctp/associol>);
 416 href="net/sctp/assocwndiline" name="L4cwndnquesr->/* min"sref4et/sctp/associola.c#L385" id="L385" class=" href="net/sctp/assoaa4 394->/* max_c"srefr/sctp/associol__unet/sctp/ast">/* __unenque <2et/sctp/associola.c#L385" id="L385" class=" href="net/sctp/assoaa4 394asoc->pee7_random)tp/associ4la7c#L3475f">base. 7="net/sct7/associola.c8"> 348 7     751k" class="sref">sk->     7   430(default valu<3andli="w="lib>(set uprefsctp/associol>);
ep)7
(INITme="L382"> 382
pee7L412" class=>sock_put4/a7(i;
 416 href="net/sctp/assocs" resh431->    neFAULT_MAXWINDOWnquec" class="sref">asoc->  7.c#L437" id=" id="L354" 7lass=757 href="net/sc4p/ass47 classssociline" name="L416"> 416 href="net/sctp/assoaartial_bytes_ackediline" name="L4aartial_bytes_ackednquesr<#e=asoc" L#L391clas431code=NULL" c7sref">pee7mp;
75ef">ulpq);
 416 href="net/sctp/assoflight_sizea.c#e=asoc" L42flight_sizenquesr<#e=asoc" L#L391clas431code=NULL" c7s        7timers" clas ="+code=sp_7ndpoi75lass="line" nc4p/ass47 classssociline" name="L416"> 416 href="net/sctp/assoburst_limie 418s4ck7/a> *76f">base. 7/associol7.c#L437" id=class="sr4f"7sctp_761k" class="sref">sk->();
 416 href="net/sctp/assortos="comment">/* rto="cosr->/* rto_initialnquec" class="sref">asoc->isk();
 416 href="net/sctp/assocame="L401"> 401 401 295_came=nquec" class="sref">asoc->
 415        pee7/associola.ca>       4if7(!ulpq);
 401f= clack_tail"srefspan>
thref=f="+        
err =  sociline" name="L416"> 416<97.r5>ode=ep" lasociola.c#e=asoc" L424">ode=ep" lasociol asoc->err =         );
ode=ep"counld="L++c" class="sref">asoc->base. 7ass="comm7nt"> */, sk->);
sco7e,
err =  sociline" name="L416"> 416<97.r5>fail_in name="L433">7ef="+code7timers" clasass="sref4>b7se, *);
as4oc7/a>);77s="sref">i = 15err =  sociline" name="L416"> 416<97.r5>sk<_pa4 416e=asoc" L#L391clas431code=NULL" c7Lnitializ7href="+code4me="L373"4 37377class="line" ciola.c#L465" i4="L365>]))
skola.c#L295" id="L295" class="line" name="L295"> 295        );
ahr class="line" nam=default_hmac_id" clasociola.c#L369" id="L369" ssociline" name="L416"> 416<97.r5>sk<_pa4i) {
pee7     for ( 375 7     77ruct  416 href="net/sctp/assocame="L401"> 401    UNCONFIRMED fail_in name="L433">7e        7ep" class="47"+code=s4d=7L377"77lass="line" na4e="L344ass="line" nam=default_hmac_id" clasociola.c#L369" id="L369" ssociline" name="L416"> 416<97.r5>sk<_pa4 416e=asoc" L#L391clas431code=NULL" c7ef="+code7ep" class="4/associol4.c7L378"780L383"> 383a7oc 427eref">sco7/associola.cname="L374">7379 416c" class="sref">asoc->fciola.c#L465" i4="L365>]))
as4"L781"> 781}
/* O="+Deletename" class="acklog" from>="sref"upref="hrlah uprefsctp/associol>);
        del_timede   oya>(&actual deallocation may be delayed.

/* ctual las"+conet/sctp/associolalass="comment">/* classs="line" name="L385"> 385 375uclass="sref">fail_in name="L433">7ef="+code7/associola.cn"+code=s4id7"L38878lass="line" n">del_timede   oya>(&af= clhea/ass="comment"f"f= clhea/ass="line" net/sctp/associolposiline" name="L41os 416c" class="sref">asoc->/* tem" 416c" class="sref">asoc-> *del_timede   oya>(&a      struct s net/sctp/associolt"+co  t ass="comment"f">sk = asoc->sco7"> 390        struct7i) {
 *7a href="+code=pos" class7"sref793href="+code=smede   oya>(&af= cl42  */ 401f= cl42  *//* tem" 416 
err =  sociline" name="L416"> 416<97.r5>ode=ep" lasociola.c#e=asoc" L424">ode=ep" lasociol fail_in name="L433">7_412" id=7int i = 15sk = ->/*ry431/*ry"srefr/sctp/associolposiline" name="L41os 416 <">del_timede   oya>(&a      struct  ->         393skock" cmal las_exacta href="+code=sock" cmal las_exact"srefr/sctp/associolalass="comment">/* classs=" 
sk = ipclass="comment">/* ipclas"sre)l class="sref">fail_in name="L433">7_f="+code7a href="net/sctp/associo7a.c#L79c#L435" id="L435" class="linen class="comment">/* O="+Do book keepck_bfor removck_b" clan i3andlhis  ippm?h uprefsctp/associol>);
        sk = as8cs 383 * 390        struct8/span80i) {
);
sk, i<"sme="L388"> 388        struct sock *_lookup_pclass="comment">/* s _lnL384"_lookup_pclas"srefctp/associol>);
 393del_timede   oya>(&actual deallocation may be delayed.
/* ctual las"+conet/sctp/associolalasog"s="comment">/* clasog"ss="line" name="L385"> 385 484807 hreclass="sref">fail_in name="L433">8t8404" cl8sgt; 388        struct sock * asoc-> * 408<81 href="+code=s4" cla4s="sref">sk);
 428.d81associola.c#L44p/ass47 classf= cl42  *//*ry431/*ry"srefr/sctp/associol ass="comment"f"> 
err =  sociline" name="L416"> 416<97.r5>ode=ep" lasociola.c#e=asoc" L424">ode=ep" lasociol , *        fail_in name="L433">8i = 15skock" cmal las_exacta href="+code=sock" cmal las_exact"srefr/sctp/associolalasog"s="comment">/* clasog"ss=" 
 ipclass="comment">/* ipclas"sre)llass="sref">fail_in name="L433">8<5ref="+c8e=outqueue" class="sref"8outqu81class="line" name="L444444444otref"sc4p/ass47 class ass="comment"f"> asoc->i) {
 418base. 8"a href="8ef="net/sctp/associola.c8L420"82ass="comment">         * derefRemove allethref=f="+-except algiveaon<3ah uprefsctp/associol>);
);
"s="comment">/* ""sref">del_timede   oya>(&actual deallocation may be delayed.
peer.del_timede   oya>(&a      struct sock *fail_in name="L433">8span clas8="comment">/* Free ssnma8 stor82s="srclass="sref">fail_in name="L433">8s5ref="+c8 id="L423" class="line" 8ame="82class="line" ">del_timede   oya>(&a      struct s net/sctp/associoltem"s="comment">/* tem" 416c" class="sref">asoc->->del_timede   oya>(&a      struct s net/sctp/associoltass="comment"f"> asoc->ulpq);
 401f= cl42  *//*ryssaf="srefr/sctp/associol ass="comment"f"> ->/* tem" 416 
err =  sociline" name="L416"> 416<97.r5>ode=ep" lasociola.c#e=asoc" L424">ode=ep" lasociol         fail_in name="L433">8L428" cla8s="line" name="L428"> 428 83d="L378" class4"line4comment">         * derefifl" clcurrnnt>e" class="ihrnot " clarimary=on<,();
 4298span 831os, *sk ass="comment"f"> fail_in name="L433">8
         i 4038be of any8mp;
e" class="co/*rol oper 382
tim8rs =-to(ass=me="L382"> 382
efSelect andlupdme=s/a>(ciw(sk<=aa4 382
bind_addr);
);
del_timede   oya>(&actual deallocation may be delayed.

8a hre841os, * 388        struct sock *sk = cookie);
  ode=ep"cmd_cs="comment">/* ode=ep"cmd_ca hreh4ef="+46soc" ca hrandiline" name="L4c hrand );
/* /* err2 "srellass="sref">fail_in name="L433">8a33  8_random);href="+co="8343">84s="srclass="sref">fail_in name="L433">8a5ref="+c8 id="L423" ch_random"4cl8ss="s84class="line" ">del_timede   oya>(&a      struct set/sctp/associoltass="comment"f"> ->i) {
del_timede   oya>(&a      struct set/sctp/associolfirasa href="+code=sfiras="+ccode=i" class="sref">i) {
del_timede   oya>(&a      struct set/sctp/associolseco/diline" name="L4seco/d="+ccode=i" class="sref">i) {
);L436" id=  8 388       ulpevenla.c#e=asoc" L42s _lnulpevenlef">set/sctp/associolevenla.c#e=asoc" L42evenlef">code=i" class="sref">i) {
);="+code=sDO8_LENG84lass="line" n">del_timede   oya>(&a/* classs="code=i" class="sref">i) {
pee8_random)tp/associ4la8c#L34850L383"> 383(&a 401 348 8     85ope_t  401boola hreh4ef="+46soc" culp_notify431->de="L401"> 401>de=ss="code=i" class="sref">i) {
i) {
NULL;
4ref">ep)8
sk =-hrp4">ode=eppmeah uprefsctp/associol>);
pee8L412" class=>sock_put4/a8(iska hrandiline" name="L4c hrand fail_in name="L433">8ef="+code8timers" clas class="s4ef8>base85      fail_in name="L433">8ee of any8ref="net/sc4p/associo4a.8#L35385c#L435" id="L435" claef">sk->  8.c#L437" id=" id="L354" 8lass=85      }
);
856" class="line" name="L406"> 406........*-(ass=, o/a>rwise reass="e="L4ADDR_AVAILABL me="L382"> 382
);
 418s4ck8/a> *86d="L378" class4"line4a4ske="L4UNCONFIRMEDclass="comment">    UNCONFIRMED sk = came="L401"> 401i) {
, *ske="L4HEARTBEAT_SUCCESSclass="comment">    HEARTBEAT_SUCCESS /* err2 "srellass="sref">fail_in name="L433">8initializ8tions */ 401ske="L4ADDR_CONFIRMEDclass="comment">    ADDR_CONFIRMED <="code=i" class="sref">i) {
asoc->i  401ske="L4ADDR_AVAILABL class="comment">    ADDR_AVAILABL  <="code=i" class="sref">i) {
/* O="+Don>(ULP about o" clie> =-from>PF>to uprefsctp/associol>);
pe="L uprefsctp/associol>);
 =-5.1,"poinl 5 uprefsctp/associol>);
       4if8(! 406........*h uprefsctp/associol>);
sk "+co  t ass="comment"f">sk = came="L401"> 401    PFclass="comment">    PF fail_in name="L433">8/associol8.c#L437" id= ->i) {
 */, sk "+co  t ass="comment"f">sk = cwndiline" name="L4cwndnquesr<1code=i" class="sref">i) {
,
sk = came="L401"> 401ske="L4ACTIV class="comment">    ACTIV  <="code=i" class="sref">i) {
as4oc8/a>);87s="sref">i = 1587="L403" class="line" name="L403"> 4038ef="+code8ep" class="47;p\n&quo4;<8span>87c#L435" id="Lcaseclass="line" name="L4TRANSPORT_DOWNiline" name="L4e="L4TRANSPORT_DOWN    :lass="sref">fail_in name="L433">8af="+code8href="net/s4tp/associ4la8c#L3787/associola.c#L486" i4a>         =-it uprefsctp/associol>);
pee8     for ( 375 8     876" class="line" name="L406"> 406........*-to.in(cached rout  sincl uprefsctp/associol>);
bind_addr);
 382
/* Do we ........*h uprefsctp/associol>);
a8oc, *sk "+co  t ass="comment"f">sk = came="L401"> 401    UNCONFIRMED );
8379 sk = came="L401"> 401ske="L4INACTIV class="comment">    INACTIV  <="code=i" class="sref">i) {
, *fail_in name="L433">8e412" id=8ep" class="4asref">as4"L881"> 88s="sref">i sk = dasa href="+code=sdol asoc->sk = dasa href="+code=sdol ->i) {

 375 401ske="L4ADDR_UNREACHABL class="comment">    ADDR_UNREACHABL ="+ccode=i" class="sref">i) {
base. 8=f="+code8 *    TRANSPORT_PF    :lass="sref">fail_in name="L433">8=ref">sco8"> 390        struct8sk = came="L401"> 401ske="L4PFclass="comment">    PF , *);
ulp_notify431->i) {
i = 15 393 4038_f="+code8a href="net/sctp/associo8a.c#L89c#L435" id="Ldefault:lass="sref">fail_in name="L433">8=f="+code8et/sctp/associola.c#L3958 id="89/associola.c#L486" i4otref"e=asoc" L#L391clas431code=NULL" c8=f="net/s8> *as9cssk    PEER ADDR_CHANGErnotificme> =-to uprefsctp/associol>);
 *         * delete them? ass=me="L382"> 382
 390        struct9/span90430" class="line" name="L430"> 430);
skulp_notify431fail_in name="L433">9 href="+c9de=sk" class="sref">sk, i = 15 394
/* classs=" <0,(sizeoff">del_timede   oya>(&ac/ak lasostoragca.c#e=asoc" L42s/ak lasostoragca hr)lc" class="sref">asoc-> 393
/* classs=" 
sk = ipclass="comment">/* ipclas"sre                 const struct sk = af_specifics="comment">/* cf_specific c/ak lasoleion may be delaye/ak lasolei asoc-> 49490/associola.c#L486" i4a/sctp/associolevenla.c#e=asoc" L42evenlef">sr->/* classs=" " class="sref">asoc-> 401->/* err2 "sre ->/* GF  ATOMIC asoc->skevenla.c#e=asoc" L42evenlef">lctp/associol>);
 409<91d="L378" class4"line4 
err = ulpq431->lc" class="sref">asoc-> d91i) {
sksk<=aa4);
}
 382
 382
(wrong=orderck_bwheness5 jiffiese="L382"> 382
 406  rolls ass5, but/w27st="liget asableathref=f="+,0so.w27don>( 382
 382
 418/* Do we *h uprefsctp/associol>);
 ->->i) {
     9  i) {
peer. 
err =  sociline" name="L416"> 416<97.r5>ode=ep" lasociola.c#e=asoc" L424">ode=ep" lasocio= /* Free ssnma9 stor92s="sref">i         fail_in name="L433">9s5ref="+c9 id="L423" class="line" 9ame="92="L403" class="line" name="L403"> 4039se of any9oc-> came="L401"> 401    INACTIV class="comment">    INACTIV  <=") ||3" class="line" name="L403"> 4039sL404" cl9tp/associola.c#L426" id=9L426"92/associola.c#L486" i4ss="fr/sctp/associol ass="comment"f"> came="L401"> 401    UNCONFIRMEDclass="comment">    UNCONFIRMED  4039s8404" cl9"+code=sctp_bind_addr_fr9e" cl92ruct  came="L401"> 401    PFclass="comment">    PF );
i) {
 429 93d="L378" class4"line4a4-> ="ct_oimelhear/ass="comment"f"f"ct_oimelhear/="+ch"lin h4ef="+46soc" cfirasa href="+code=sfiras="+c="line" name="L295">="ct_oimelhear/ass="comment"f"f"ct_oimelhear/="+cl class="sref">fail_in name="L433">9 class="l9ne" name="L429"> 4299span 931os, * ->i) {
-> asoc->, *i = 15-> ="ct_oimelhear/ass="comment"f"f"ct_oimelhear/="+ch"lin h4ef="+46soc" cseco/diline" name="L4seco/d="+c="line" name="L295">="ct_oimelhear/ass="comment"f"f"ct_oimelhear/="+cliola.c#L465" i4="L365>]))
-> asoc->tim9rsulpq);4" cla4s="sref">sk    Endpoinlse="L382"> 382
bind_addr);
 382
/* Do we * ByLdefault,>="sendpoinl should alwaysathrefmit-to uprefsctp/associol>);

9a hre94ass="comment">         * delete them? primary=aa4<,"unlog" ta>pe="L ass= explici l> specifie" ta> uprefsctp/associol>);
 430 =-t" class="acklog" (andlpossibl> sourcl uprefsctp/associol>);
 430 382
94s="sr_addr);
 382
/* O0"> 430 382
 assd(4">ode=epp]e="L382"> 382
);
);
);L436" id=  9skola.c#L295" id="L295" class="line" name="L295"> 295        );
came="L401"> 401    ACTIV class="comment">    ACTIV  <="l ||3" class="line" name="L403"> 4039aad, so o9_random);="+code=sDO9_LENG94lass="line" na4e="s8="sref">skola.c#L295" id="L295" class="line" name="L295"> 295        );
came="L401"> 401    UNKNOWNiline" name="L4e="L4UNKNOWN i) {
pee9_random)tp/associ4la9c#L3495d="L378" class4"lh4ef="+46soc" cfirasa href="+code=sfiras="+ch! class="line" namola.c#L295" id="L295" class="line" name="L295"> 295        );
fail_in name="L433">9="net/sct9/associola.c8"> 348 9     951os, *->i) {
-> 295        );
i) {
NULL;
4ref">ep)9
pee9L412" class=>sock_put4/a9(}
 382
95ruct fail_in name="L433">9=ad, so o9timers" clas ="+code=sp_9ndpoi95lass="line" na4e="L344ass="line" namfirasa href="+code=sfiras="+chr-> 295        );
i) {
 418s4ck9/a> *96d="L378" class4"line4h4ef="+46soc" cseco/diline" name="L4seco/d="+chr-> 295        );
i) {
 i) {
skpsk<=thref=f="+ma.ch uprefsctp/associol>);
i-> 295        );
->i) {
-> 295        );
sk<_pa4->i) {
       4if9(!del_timede   oya>(&actual deallocation may be delayed.
fail_in name="L433">9ass="comm9nt"> */, 
err = baseclass="comment"base"sreue);
i) {
,
as4oc9/a>);97s="sr_addr);
]))me> =aandlcleanup uprefsctp/associol>);
97 /* O0efifl" cr27are no morelreferencs+me="L382"> 382
);
 =_pu<"sref">del_timede   oya>(&actual deallocation may be delayed.
 375 9     976" clclass="sref">fail_in name="L433">9a        9ep" class="47"+code=s4d=9L377"97lass="line" na4sk tomic_dec_and_teasa href="+code=s tomic_dec_and_teas"srefspan>
err = baseclass="comment"base"sreue);
 =_des*roy431 =_des*roy"sreft/sctp/associola.c#L385" id="L385" class="lcode=i" class="sref">i) {
a9oc9379i) {
as4"L981"> 98s="sr_addr);
/* O0eh uprefsctp/associol>);
 =_get_cixt_tsion may be delayed.
del_timede   oya>(&actual deallocation may be delayed.

fail_in name="L433">9ef="net/s9tp/associol4n"> 375ulpq);4" cla4s="sref">skSece> =-1.6>Serial Numbs5 Arithmetic: uprefsctp/associol>);
bind_addr);
/* Do we * 2**32 --1.  Tha="ih,s/a>(cixt TSN);
 *         * delete them? after threfmittck_bTSN<= 2*32 --1"ihrTSN<= 0m uprefsctp/associol>);
sco9"> 390        struct9 430);
, *-> 401retval="+chr->cixt_tsion may be delaycixt_tsi"srecode=i" class="sref">i) {
i->cixt_tsion may be delaycixt_tsi"sre++code=i" class="sref">i) {
 393->unack_datac#L295" id="L29unack_data"sre++code=i" class="sref">i) {
i) {
 401retval="+ccode=i" class="sref">i) {
 *pifl" cy match.  Wildcard acklog"e" uprefsct/pre> *         * del* only matchl" cmselvs+me="L382"> 382
 390        struct10h> >10h430" class="line" name="L430ah uprefsctp/associol>);
10hpos(&a =aimede   oya>(&actual lass="comment">/* ctual lasef="net/sctp/associolss1s="comment">/* csass="                 const struct 10hs="sref">i  =aimede   oya>(&actual lass="comment">/* ctual lasef="net/sctp/associolsset/sctp/as"L385"ssess="liola.c#L465" i4="L365>]))
 39310h5 hreclass="sref">fail_in name="L433">10h6ef="+co10h href="net/sctp/associo10h h>10h6     del_timede   oya>(&a     afs="comment">/* ctual fef="net/sctp/associolafs="comment">/*  fef="code=i" class="sref">i) {
10hef">ulpq);
/*  fef="sr->/* s _lnget_af_specific"sreft/sctp/associolss1s="comment">/* csass="="line" name="L295">cac#L295" id="L29sa"sreue);
i) {
skunlikely431/*  fef="lliola.c#L465" i4="L365>]))
 4010s=">10s=="sref">i/*  fef="="line" name="L295">cmal lass="comment">/* cmal las"sreft/sctp/associolss1s="comment">/* csass=" ->10s1}
10s /* OrefReref"s="secne chunk to"get prepended to 382
10sid="L353" class="line" name/a Note:  W27are sly andlre>ef"s= shared, prealloced chunk.  FIXME: uprefsctp/associol>);
10s      }
 382
10s6" class="line" name="L406">eh uprefsctp/associol>);
del_timede   oya>(&a     chunka href="+code=sock" chunkef="net/sctp/associols _lnget_ecne_prepends="comment">/* s _lnget_ecne_prepend"sref">del_timede   oya>(&actual deallocation may be delayed.
fail_in name="L433">1021ef="+co10ef="net/sctp/associola.c10ef=>10 1     del_timede   oya>(&a     chunka href="+code=sock" chunkef="net/sctp/associolchunka href="+code=schunkef="e=asoc" L#L391clas431code=NULL" c1022ef="+co10  i) {
peer.10 3href="+code=s4" cla4s="sref">sk 382
/* Free ssnma10="c>10 s="sr_addr);
 382
10  /* O0"> 430);
->skola.c#L295" id="L295" class="line" name="L295">cied_ecneon may be delaycied_ecness="liola.c#L465" i4="L365>]))
10 /associola.c#L486" i4a/sctp/associolchunka href="+code=schunkef="sr->l"ct_ecne_tsion may be delayl"ct_ecne_tsiss="le=asoc" L#L391clas431code=NULL" c1028ef="+co10"+code=sctp_bind_addr_fr10"+c>10 ef">ulpq)else" class="sref">asoc->->i) {
 4210s=">10s=a hrode=i" class="sref">i) {
 42910ne">10s1     10spos);
10s /* O0efFindlwhichl"" class="thihrTSN/*  =m uprefsctp/associol>);
);
tim10tim>10s7ass=">del_timede   oya>(&a      struct set/sctp/associolsd._lookup_tsion may be delayed._lookup_tsi"sref">del_timede   oya>(&actual deallocation may be delayed.
fail_in name="L433">104ref="+co10.c#L437" id="L437" class10.c#>10.c     del_timede   oya>(&a      struct set/sctp/associoldel_timede   oya>(&a      struct set/sctp/associolmatcha href="+code=smatchef="e=asoc" L#L391clas431code=NULL" c1042ef="+co10>cookie);
del_timede   oya>(&a      struct set/sctp/associol="+co  t ass="comment"f">sk = 10.3     del_timede   oya>(&a     chunka href="+code=sock" chunkef="net/sctp/associolchunka href="+code=schunkef="e=asoc" L#L391clas431code=NULL" c1044ef="+co10_random);href="+co="10_ra>10.s="sref">i->-> 401htonl"sreft/sctp/associoltsion may be delaytsiss="le=asoc" L#L391clas431code=NULL" c1045ef="+co10 id="L423" ch_random"4cl10 id>10.="L403" class="line" name="L403"> 40310.6ef="+co10.c#L437" id="net/sctp/as10.c#>10.6="sref">i->->i) {
);L436" id=  10_ra>10.ef">ulpq);4" cla4s="sref">sk);
);="+code=sDO10_ra>10.>bind_addr);
del_urelf2 "sprefsctp/associol>);
)tp/associ4la10_ra>10_rbind_addr);
 348 10/as>10_ass="comment">         * delete them?h uprefsctp/associol>);
i) {
ep)10>NU>10_3href="+code=s4" cla4s="sref">sk);
sock_put4/a10L41>10_s="sr_addr);
dategy=is to"search eachl"" class=>();
/* O0"> 43010_id="L353" class="line" name/* Do we ne="L382"> 382
10_      }
p);
10_6" class="line" name="L406"> 406  Ano" cr optimizme> =awould beato);
);
s4ck10   >10  d="L353" class="line" name/* Do we ne="L382"> 382
10 ass="comment">         * delete them?h uprefsctp/associol>);
i) {
 295        );
i) {
10 1}
10 class="line" /a>->/*ry431/*ry"srefr/sctp/associolchunka href="+code=schunkef=" 
threfmittedass="comment"f">sk10 c#L435" id="L435" class="lin h4ef="+46soc" cthrefmittedociola.c#e=asoc" L424">odmittedociolss="l class="sref">fail_in name="L433">10 7ef="+co10timers" clas);
       4if10/as>10 ruct skkey431->cub/* data_hasef="="line" name="L295">tsion may be delaytsiss="l class="sref">fail_in name="L433">10 9ef="+co10      ->->-> */, 10.1os, *,
10.2     as4oc10L41>10.s="sref">i);
10.class="line" /a>->/*ry431/*ry"srefr/sctp/associol="+co  t ass="comment"f">sk = 
err =  sociline" name="L416"> 416<97.r5>ode=ep" lasociola.c#e=asoc" L424">ode=ep" lasocio= 10.c#L435" id="L435" class="lin h4ef="+46soc" cthref=f="+        fail_in name="L433">10.7ef="+co10href="net/s4tp/associ4la10hre>10."L415iola.c#L465" i4="L365>]))
 375 10   >10.ruct sk="+co  t ass="comment"f">sk = ->10.lass="line" na4e="L34ss="linebreake=asoc" L#L391clas431code=NULL" c108ref="+co10ep" class="4/associol4.c10ep">10epass="line" na4e="L344ass="line" namf= cl42  *//*ry431/*ry"srefr/sctp/associolchunka href="+code=schunkef=" 
sk = threfmittedass="comment"f">ska10ep">10e1os, * odmittedociolss="l class="sref">fail_in name="L433">1082ef="+co10/associola.cname="L374">10/as>10eskkey431->cub/* data_hasef="="line" name="L295">tsion may be delaytsiss="l class="sref">fail_in name="L433">1083ef="+co10ref="net/sc4p/associo4a.10ref>10epos, * ->sk = as4"L10ep">10es="sref">i ->10ec#L435" id="L435" claciola.c#L465" i4="L365>]))
10e/associola.c#ciola.c#L465" i4="L365>]))
 37510e6" claa>->10elass="line" notref"sc4p/ass47 classmatcha href="+code=smatchef="e=asoc" L#L391clas431code=NULL" c109ref="+co10/associola.cde=base" 4cl10/as>10/aa hrciola.c#L465" i4="L365>]))
10/1L415iola.c#L465" i4="L365>]))
 390        struct10"> >10/430" class="line" name="L43="+Is"thihrta>p
);
10/3ass=">del_timede   oya>(&a      struct set/sctp/associolsd._is_matcha href="+code=ssd._is_match"sref">del_timede   oya>(&actual deallocation may be delayed.
10/s="sref">i del_timede   oya>(&a   L385" id="L385"   ef="net/sctp/associol   L385" id="L385"   ef="                 const struct  39310/class="line" name="L4444444444444444444444444444const un> =aimede   oya>(&actual lass="comment">/* ctual lasef="net/sctp/associoll lass="comment">/* lclasss=" " class="sref">asoc->10/c#L435" id="L435" class="lin 4444444444444444444const un> =aimede   oya>(&actual lass="comment">/* ctual lasef="net/sctp/associolp lass="comment">/* p lasef="l                const struct fail_in name="L433">10/8ef="+co10>10/ruct set/sctp/associol="+co  t ass="comment"f">sk =         err = baseclass="comment"base"sreue);
/* bindl las"sreue);
 = ->/* lclasss="="line" name="L295">v4s="comment">/* v4"sreue);
i) {
1101os, *        err =  295        );
 = ->/* p lasef="="line" name="L295">v4s="comment">/* v4"sreue);
i) {
err = baseclass="comment"base"sreue);
->fail_in name="L433">11h3ef="+co11h href="+code=pos" class11h h>110pos, *sk="+co  t ass="comment"f">sk = (&actual deal_lookup_p lass="comment">/* ctual deal_lookup_p las"srefr/sctp/associolosref">err = /* p lasef="lcode=i" class="sref">i) {
11hs="sref">isk =  393110class="line" name="L444444444goto->110c#L43ode=i" class="sref">i) {
skctualbindl las_matcha href="+code=ssd.
err = baseclass="comment"base"sreue);
/* bindl las"sre ->/* lclasss=" " class="sref">asoc->110ruct skctualska href="+code=sotualsk"srefr/sctp/associolosref">err = baseclass="comment"base"sreue);
-> 4011s=">11s=="sref">i111ope_t sk = (&a="+c!y_id = i) {
i) {
111s="sref">isk = 11s 111c#L43ode=i" class="sref">i) {
11s      }
11s6" cl);
/* ctual deal_bhlrcv"sref">del_timede   oya>(&awork_">del_s="comment">/* work_">del_ef">set/sctp/associolworks="comment">/* work 1119 hreclass="sref">fail_in name="L433">112ref="+co11        del_timede   oya>(&a      deallocation may be delayed.
fail_in name="L433">1121ef="+co11ef="net/sctp/associola.c11ef=>1121os, */* conta/asr_of"srefr/sctp/associolworks="comment">/* work del_timede   oya>(&a      deallocation may be delayed.
asoc->112);
);
 401i/scdime=ef="lcode=i" class="sref">i) {
peer.1123     del_timede   oya>(&a   L385" id="L385"   ef="net/sctp/associol   L385" id="L385"   ef="srtimede   oya>(&ac/ak_   L385" id="L385"err = baseclass="comment"base"sreue);
i) {
/* Free ssnma11="c>1124     del_timede   oya>(&a     endpoinlon may be delayed.1125     del_timede   oya>(&a     chunka href="+code=sock" chunkef="net/sctp/associolchunka href="+code=schunkef="e=asoc" L#L391clas431code=NULL" c1126ef="+co11oc->del_timede   oya>(&a     inqa href="+code=sock" inqef="net/sctp/associolinqueueclass="comment"inqueue"sree=asoc" L#L391clas431code=NULL" c1127ef="+co11tp/associola.c#L426" id=11tp/>11 /associola.c#an_timede   oya>(&a 401112ef">ulpq);
ul;
(&aerross="comment">/* errosef="srt#e=asoc" L#L391clas431code=NULL" c113ref="+co11s="line" name="L428"> 4211s=">11s=a hrode=i" class="sref">i) {
 42911ne">11s1     ulpq);
epon may be delayep i->
err = baseclass="comment"base"sreue);
113class="line" /a>->
err = i) {
1136     sk="+c!y_id = (&actualinq_popon may be delayctualinq_pop"sref
fail_in name="L433">11s7ef="+co11timers" class="sref">tim11tim>113/associola.c#L486" i4a/sctp/associol 401-> 401->chunk_hass="comment">/* chunk_hasef="="line" name="L295">typeon may be delaytype="co)code=i" class="sref">i) {
113 *114pass="line" na4e="L3444" cla4s="sref">skSece> =-6.3: uprefsctp/associol>);

11ach>114ass="comment">         * delete themmmmmmmmm*mmmmTa>preceiver has aLcio= of chunk typesswhichlit expeces uprefsctp/associol>);
cookie);
 430);
);
 430/* toata>pan i durck_bta>p
);
);href="+co="11_ra>114s="sr_addr);
);
114 /* O0"> 430paacketme="L382"> 382
);
);
114/associola.c#L486" i4a4skctualauth_recv_cidiline" name="L4sa hr uth_recv_cid"srefr/sctp/associolerr =  uthf">err = );L436" id=  11_ra>114ruct i) {
114 *)tp/associ4la11_ra>115pass="line" na4e="L3444" cla4s="sref">skp4s=tlDATA chunk coci from>so.w2 uprefsctp/associol>);
 348 11/as>11_ass="comment">         * delete themmmmmmmmm*mknowfw cr27to"send ta> SACKme="L382"> 382
 430);
NULL;
4ref">ep)11>NU>115pos, *skctualchunk_is_datac#L295" id="L29ctualchunk_is_data"sref
sock_put4/a11L41>115s="sref">i -> 295        );
/* lc=t_data_from="cohr->="+co  t ass="comment"f">sk = asoc->115c#L435" id="L435" class="lin h4ef="+46soc" cSCTP_INC_STATSon may be delaySCTP_INC_STATS"sref
i) {
115"L415iola.c#L465" i4="L365>]))
115ruct skchunka href="+code=schunkef="="line" name="L295">="+co  t ass="comment"f">sk = ->="+co  t ass="comment"f">sk = l"ct_time_heards="comment">/* lc=t_time_heard="cohr->        s4ck11   >116=a hrode=i" class="sref">i) {
1161os, *sk);
(&aerross="comment">/* errosef="srt8="sref">skctualdo_sms="comment">/* ctualdo_sm"sref
asoc->(&a 401err = i) {
11 1}
116class="line" name="L4380" class="line" name="+Check"to"se>pifl" cp
ns27to uprefsctp/associol>);
116id="L353" class="line" name/* Do we mmmmmmmm*l" cpinineck_bchunk.  If>so,"get ou= of " cpwhile 382
);
       4if11/as>11 ruct skosref">err = baseclass="comment"base"sreue);
i) {
 */, 11.1os, *117skerross="comment">/* errosef="sa href="+c 
);
pdiscard        as4oc11L41>11.s="sref">i11.class="line" /a>-> =_puerr = i) {
11.c#L43ciola.c#L465" i4="L365>]))
11."L415iola.c#L465" i4="L365>]))
 375 11   >1176" class="line" name="L406"/* Tais rout5"> moves ="l
its oldask to);
11.lass=void c4 );
 401del_timede   oya>(&a      deallocation may be delayed.
err = del_timede   oya>(&a ocka href="+code=soockef="net/sctp/associolnewska href="+code=snewskef="lctp/associol>);
118  hreclass="sref">fail_in name="L433">1181ef="+co11ep" class="4ass="sref4>a11ep">1181     del_timede   oya>(&a      ocka href="+code=so     ockef="net/sctp/associolnewspon may be delaynewspef="srt8="sref">skctualska href="+code=sotualsk"srefr/sctp/associolnewska href="+code=snewskef="lcode=i" class="sref">i) {
11/as>11edel_timede   oya>(&a ocka href="+code=soockef="net/sctp/associololdska href="+code=soldsk="cohr->err = baseclass="comment"base"sreue);
i) {
118posas4"L11ep">11es="sref">i
/acloldaendpoinl>();
/* O0"> 430
 382
118id="L353" class="line" name/* Do we nh uprefsctp/associol>);

l= cldel_ini
err =  hri+        i) {
 37511e6" clode=i" class="sref">i) {
11elass="line" n }
119pass="line" na4skctualstylea href="+code=sotualstyle"srefr/sctp/associololdska href="+code=soldsk="co <
 *i) {
 390        struct11"> >119i) {
1193href="+code=s4" cla4s="sref">skpoldaendpoinl andl" c );
119s="sref">i->err = epon may be delayep i) {
 393119class="line" /a>->err = baseclass="comment"base"sreue);
i) {
119c#L43ode=i" class="sref">i) {
skpnewaendpoinl.mm*h uprefsctp/associol>);
119ef">ulpq);
err = epon may be delayep ->epon may be delayep i->err = epon may be delayep i) {
i) {
1201     pnewa);
 390        struct12h> >1202f">ulpq);
err = baseclass="comment"base"sreue);
->i) {
120pos, *->err = baseclass="comment"base"sreue);
i) {
1201}
 393120class="line"  }

pnewaendpoinl>(
);
i->err = epon may be delayep err = i) {
1206" clode=i" class="sref">i) {
 4012s=">12s=="srvoid c4 );
 401del_timede   oya>(&a      deallocation may be delayed.
1211os, * del_timede   oya>(&a      deallocation may be delayed.
);
fail_in name="L433">12s3ef="+co12lying around in the outq12lyi>1213     del_timede   oya>(&a      struct set/sctp/associol="+coa href="+code=s="+coef="code=i" class="sref">i) {
1214     del_timede   oya>(&al= clheadclass="comment"l= clheadef">set/sctp/associolpos        i) {
121="L403" class="line" name="L403"> 40312s6ef="+co12pending messages for the12pen>1216lass="line"  }
121/associola.c#e" name="L295">osref">err = ef">err = ->ef">err = i) {
121ef">ulpq);
 295        );
 295        );
i) {
1219="sref">i-> 295        );
 295        );
i) {
122c     -> 295        );
        -> 295        );
        i) {
122ope_t 
err =  sociline" name="L416"> 416<97.r5>122 295        );
        );
i) {
peer.122pos/* Free ssnma12="c>122s="sref">i/* inata>pnewaspan>
);
122class="line" /a>->        
err =  sociline" name="L416"> 416<97.r5>ode=ep" lasociola.c#e=asoc" L424">ode=ep" lasocio= fail_in name="L433">1226ef="+co12oc->->/*ry431/*ry"srefr/sctp/associolpos        del_timede   oya>(&a      struct          i) {
122/associola.c#L486" i4a4/* ctual deal_lookup_p las"srefr/sctp/associolnewon may be delaynewef=" 
ip lass="comment">/* ip lasef="ll class="sref">fail_in name="L433">1228ef="+co12"+code=sctp_bind_addr_fr12"+c>122ruct err = i) {
i) {
 4212s=">123pass="line" na4e="L34ciola.c#L465" i4="L365>]))
 42912ne">1231L415iola.c#L465" i4="L365>]))
skola.c#L295" id="L295" class="line" name="L295"> 401-> = i) {
123s="sref">i123="L403" class="line" name="L403"> 40312s6ef="+co12mp;

);
tim12tim>123      }
);
/* next_tsi inacase data s>/* toa soc"sprefsctp/associol>);
odmiss hrm"sprefsctp/associol>);
124pass=353" class="line" name/* Do we nh uprefsctp/associol>);

12ach>124ope_t skola.c#L295" id="L295" class="line" name="L295"> 401-> = fail_in name="L433">1242ef="+co12>cookie);
(&aola.c#L295" id="L295" class="line" name="L295">next_tsion may be delaynext_tsief="hr->next_tsion may be delaynext_tsief="code=i" class="sref">i) {
124pos, *skosref">err = e=sn_aak_poinlon may be delaye=sn_aak_poinlef="hr->e=sn_aak_poinlon may be delaye=sn_aak_poinlef="code=i" class="sref">i) {
iskosref">err = adv_ soc_aak_poinlon may be delayadv_ soc_aak_poinlef="hr->adv_ soc_aak_poinlon may be delayadv_ soc_aak_poinlef="code=i" class="sref">i) {
124="L403" class="line" name="L403"> 40312.6ef="+co12.c#L437" id="net/sctp/as12.c#>124c#L435" id="L435" clat}
deams uprefsctp/associol>);
);
124      }
deamsm"sprefsctp/associol>);
);L436" id=  12_ra>1246" class="line" name="L406"ssociola.* Do we nh uprefsctp/associol>);
);="+code=sDO12_ra>124lass="line" na4e="L34/a>->err = i) {
i) {
 348 12/as>1251os, *);
 430);
NULL;
4ref">ep)12>NU>125id="L380" class="line" name0"> 430);
sock_put4/a12L41>125s="sr_addr);

err = ulpqf">err = i) {
125c#L43ode=i" class="sref">i) {
125/associola.c#L486" i4a80" class="line" name="+ses>poverall span>
);
1256" class="line" name="L406"ssociola.* Do we nataapre/tarted apan>
();
pnextaotr">odmiss hr timerm"sprefsctp/associol>);
s4ck12   >126pass=353" class="line" name/* Do we mmmmmmmm*h uprefsctp/associol>);
1261os, *err = overall_erros_cou/*f">err = 126i) {
fail_in name="L433">1264ef="+co12.c#L437" id=csock_put4sc12.c#>126s="sref">i/aclnewaspan>
);
 295        );
ode=ep" lasociola.c#e=asoc" L424">ode=ep" lasocio= 126c#L435" id="L435" class="lin name="L43a>->        fail_in name="L433">1267ef="+co12timers" clas);
/* ctual deal_lookup_p las"srefr/sctp/associolosref">err = ip lass="comment">/* ip lasef="lllass="sref">fail_in name="L433">1268ef="+co12/associola.ca>       4if12/as>12 ruct err = ip lass="comment">/* ip lasef="                 const struct 12 lass="line" na4e="L34ss="lineref="4code=4ss="lin name="L43a>-> 401i) {
 */, 1271L415iola.c#L465" i4="L365>]))
127skosref">err = e=sn_aak_poinlon may be delaye=sn_aak_poinlef="hr->next_tsion may be delaynext_tsief="h-t1e=asoc" L#L391clas431code=NULL" c1273ef="+co12timers" clasass="sref4>b12tim>127pos, *skosref">err = adv_ soc_aak_poinlon may be delayadv_ soc_aak_poinlef="hr->err = e=sn_aak_poinlon may be delaye=sn_aak_poinlef="e=asoc" L#L391clas431code=NULL" c1274ef="+co12L412" class="sref">as4oc12L41>127s="sref">ierr = fail_in name="L433">1275ef="+co12href="+code4me="L373"4 312hre>127class="line" name="L4        8}
);
127c#L435" id="L435" class="lin h4ef="+46soc" cosref">err = ->127/associola.c#L486" i444444444/a>->-> 375 12   >127ruct 127 *128pass="line" na4e="L34a4err =  name_idiline" name="L4 name_idef="l class="sref">fail_in name="L433">1281ef="+co12ep" class="4ass="sref4>a12ep">1281os, * ();
12/as>128430" class="line" name="L430"> 430 382
 430);
as4"L12ep">128s="sref">i->err = i) {
128c#L435" id="Lciola.c#L465" i4="L365>]))
128"L415iola.c#L465" i4="L365>]))
 375128ef">ulpq);4" cla4s="sref">sk/aclnewaspan>aia hrs uprefsctp/associol>);
128>bind_addr);
129pass=353" class="line" name/* Do we nh uprefsctp/associol>);
 *err =  295        );
/*  soc_"+cdom="co)code=i" class="sref">i) {
 390        struct12"> >1292f">ulpq);
err =  295        );
/*  soc_"+cdom="cohr-> 295        );
/*  soc_"+cdom="cocode=i" class="sref">i) {
1293href="+code=sa>-> 295        );
/*  soc_"+cdom="cohr->1291}
 393129class="line" /a>->err =  295        );
/*  soc_chunks="co)code=i" class="sref">i) {
1296="sref">i->err =  295        );
/*  soc_chunks="cohr-> 295        );
/*  soc_chunks="cocode=i" class="sref">i) {
newon may be delaynewef="="line" name="L295"> 295        );
/*  soc_chunks="cohr->1296" clode=i" class="sref">i) {
i->err =  295        );
        i) {
 295        );
         295        );
        i) {
130ope_t  295        );
         = i) {
130pos, *->err = aame_shared_keyf">err = i) {
130s="sref">i->err = err = i) {
 393130classciola.c#L465" i4="L365>]))
130c#L43ode=i" class="sref">i) {
pre="+c pathlf2 odmitted aacketme="L382"> 382
1306" class="line" name="L406"s* Round-robinataroughl" c active thref=f="+,4else round-robine="L382"> 382
pnextabes 382
 4013s=">131pass=353" class="line" name/* we c" ctryme="L382"> 382
131ass="comment">         * delnh uprefsctp/associol>);
o_pathiline" name="L4o_path"sref">del_timede   oya>(&a      deallocation may be delayed.
fail_in name="L433">13s3ef="+co13lying around in the outq13lyi>1313    class="sref">fail_in name="L433">13s4ef="+co13L412" class="line" name=13L41>1314     del_timede   oya>(&a      struct 1315     del_timede   oya>(&al= clheadclass="comment"l= clheadef">set/sctp/associolheadclass="comment"headef">s=
err =  sociline" name="L416"> 416<97.r5>ode=ep" lasociola.c#e=asoc" L424">ode=ep" lasocio= del_timede   oya>(&al= clheadclass="comment"l= clheadef">set/sctp/associolpos        131"L415iola.c#L465" i4="L365>]))
131ef">ulpq)a4skola.c#L295" id="L295" class="line" name="L295"> sociline" name="L416"> 416<97.r5>ode=ep"cou/*f">err = ode=ep"cou/*ef">s== 1llass="sref">fail_in name="L433">13s9ef="+co13
132=a hrode=i" class="sref">i) {
1321     ode=ep inaa round-robin fash hrmm*h uprefsctp/associol>);
ulpq);
->err =  295        );
o_pathiline" name="L4otr">o_path"sree=asoc" L#L391clas431code=NULL" c1323ef="+co13lass="sref">peer.132pos, *->        
="+co  t +        /* Free ssnma13="c>132s="sref">i-> = 132="L403" class="line" name="L403"> 4031326ef="+co13oc->fail_in name="L433">13 7ef="+co13tp/associola.c#L426" id=13tp/>132/associola.c#L486" i4;4" cla4s="sref">sk);
132ruct skpos        nextL385" id="L385"  xlef="hrr->llass="sref">fail_in name="L433">13 9ef="+co13f="+code=bind_addr" clas13f=">132lass="line" na4e="L34ss="line/a>->        ->="line" name="L295">nextL385" id="L385"  xlef="e=asoc" L#L391clas431code=NULL" c133ref="+co13s="line" name="L428"> 4213s=">133pass="line" na4e="L34else=asoc" L#L391clas431code=NULL" c1331ef="+co13ne" name="L429"> 42913ne">1331os, * ->        ->        nextL385" id="L385"  xlef="e=asoc" L#L391clas431code=NULL" c1332ef="+co13net/sctp/associola.c#L4313net>133i) {
->/*ry431/*ry"srefr/sctp/associolpos        del_timede   oya>(&a      struct          i) {
1331}
133class="line" name="L434" cla4s="sref">sk();
);
tim13tim>133      }
 382
);
sk=a href="+code=s=d="Lhrr->err =  295        );
o_pathiline" name="L4otr">o_path"srel class="sref">fail_in name="L433">134ref="+co13.c#L437" id="L437" class13.c#>134pass="line" na4e="L34        ;
->co>134);
);href="+co="13_ra>134s="sref">i);
134="L403" class="line" name="L403"> 40313.6ef="+co13.c#L437" id="net/sctp/as13.c#>134c#L435" id="L435" claa4sk=a href="+code=s=d="L="line" name="L295"> 401-> 401SCTP_ACTIVE"srel ||3" class="line" name="L403"> 40313.7ef="+co13     for ();
134/associola.c#L486" i44444s8="sref">sk=a href="+code=s=d="L="line" name="L295"> 401-> 401SCTP_UNKNOWN"srell class="sref">fail_in name="L433">1348ef="+co13_random);L436" id=  13_ra>134ruct 134lass="line" na4e="L34}4else class="sref">fail_in name="L433">135ref="+co13_random)tp/associ4la13_ra>135pass="line" na4e="L34        ;ss="line" name="L406"/* Keep thrck ofL" c nexta4">ode=ep inacas2 uprefsctp/associol>);
 348 13/as>135ass="comment">         * delllllllllllllllllllllllll* we don>();
 430);
NULL;
4ref">ep)13>NU>135pos, * sk=a href="+code=s=d="L="line" name="L295"> 401-> = fail_in name="L433">1354ef="+co13L412" class=>sock_put4/a13L41>135s="sref">i->135"L415iola.c#L465" i4="L365>]))
135ef">ulpq)a4sk=a href="+code=s=d="Lllass="sref">fail_in name="L433">1359ef="+co13timers" clas ="+code=sp_13tim>135lass="line" na4e="L34/a>->err =  295        );
o_pathiline" name="L4otr">o_path"srehr->s4ck13   >136pass="line" nelse=asoc" L#L391clas431code=NULL" c1361ef="+co13.c#L437" id=class="sr4f"13.c#>1361os, *->err =  295        );
o_pathiline" name="L4otr">o_path"sree=asoc" L#L391clas431code=NULL" c1362ef="+co13tions */136i) {
"o_path:apan>
);
136s="sref">i" >(<7;p clas: " uprefs                 const struct 136class="line" name="L4s44444444        ;lass="line" string">" =f=": >(<7;d\n" uprefs                 const struct 136c#L435" id="L435" class="lin name="L4->err = 
ip lass="comment">/* ip lasef="l                 const struct ip lass="comment">/* ip lasef="ue);
/* v4ef="ue);
13 lass=ciola.c#L465" i4="L365>]))
i) {
 */, 137ass="comment">         * de/* Choos2l" c 4">ode=ep f2 odmit aacketmll*h uprefsctp/associol>);
,
137del_timede   oya>(&a      struct );
del_timede   oya>(&a      deallocation may be delayed.
del_timede   oya>(&a      struct /*_to431/*_tod="Lllass="sref">fail_in name="L433">1374ef="+co13L412" class="sref">as4oc13L41>137s="srclass="sref">fail_in name="L433">1375ef="+co13href="+code4me="L373"4 313hre>137class="line"  }
pfirs/*, us2l" c active path, uprefsctp/associol>);
137id="L353" class="line" name/* Do we *4else us2l" c re="+c path. If/" c feft aacket was/s>/*pover/" c uprefsctp/associol>);
);
 375 13   >1376" class="line" name="L406"ssociola.*h uprefsctp/associol>);
137lass="line" na4fail_in name="L433">138ref="+co13ep" class="4/associol4.c13ep">138pass="line" na4e="L34otrurn->err =  295        );
a13ep">1381os, *fail_in name="L433">1382ef="+co13/associola.cname="L374">13/as>138skreft_s>/*_to431/*_tod="Lhrr->err =  295        );
o_pathiline" name="L4otr">o_path"srellass="sref">fail_in name="L433">1383ef="+co13ref="net/sc4p/associo4a.13ref>138pos, * ->o_patha href="+code=sock"  name_updass_otr">o_path"sref/a>->err = as4"L13ep">138s="sref">i->err =  295        );
o_pathiline" name="L4otr">o_path"sree=asoc" L#L391clas431code=NULL" c1385ef="+co13 id="L423" c" class="4in13 id>138class="line" ciola.c#L465" i4="L365>]))

 3751386" class="line" name="L406"/* Updass ta>papan>
);
138>bind_addr);
);
139pass=353" class="line" name/*h uprefsctp/associol>);
 *del_timede   oya>(&a ocka href="+code=soockef">del_timede   oya>(&a      deallocation may be delayed.
fail_in name="L433">1392ef="+co13"> 390        struct13"> >1392f">uclass="sref">fail_in name="L433">1393ef="+co13a href="+code=pos" class13a h>139pos, *del_timede   oya>(&a      struct 139s="sref">i-> mtua href="+code=spmtu"srehr<#e=asoc" L#L391clas431code=NULL" c1395ef="+co13ine" name="L393"> 393139="L403" class="line" name="L403"> 4031396ef="+co13a href="net/sctp/associo13a h>1396="sref">ierr = fail_in name="L433">1397ef="+co13et/sctp/associola.c#L39513et/>139/associola.c#L486" i4otrurne=asoc" L#L391clas431code=NULL" c1398ef="+co13>1396" clode=i" class="sref">i) {
iplowes);

err =  sociline" name="L416"> 416<97.r5>ode=ep" lasociola.c#e=asoc" L424">ode=ep" lasocio= 1401os, * ->        fail_in name="L433">1402ef="+co14h> 390        struct14h> >140sk=a href="+code=s=d="L="line" name="L295">pmtu_pendck_a href="+code=spmtu_pendck_="co span>span> 8="sref">sk=a href="+code=s=d="L="line" name="L295">dola.c#e=asoc" L42do= fail_in name="L433">1403ef="+co14h href="+code=pos" class14h h>140pos, * ->ode=ep"updass_pmtua href="+code=sock" 4">ode=ep"updass_pmtu"sref
dol_mtua href="+code=sdol_mtu"srefr/sctp/associol=a href="+code=s=d="L="line" name="L295">dola.c#e=asoc" L42do= 140s="sref">isk=a href="+code=s=d="L="line" name="L295">pmtu_pendck_a href="+code=spmtu_pendck_="co r<#e=asoc" L#L391clas431code=NULL" c14h5ef="+co14hne" name="L393"> 393140class="line" name="L4ciola.c#L465" i4="L365>]))
140c#L435" id="L435" claa4sk=a href="+code=s=d="L="line" name="L295">pathmtua href="+code=spathmtu="co slt> 8="sref">sk mtua href="+code=spmtu"srelllass="sref">fail_in name="L433">1407ef="+co14ht/sctp/associola.c#L39514ht/>140/associola.c#L486" i444444444/a>->sk=a href="+code=s=d="L="line" name="L295">pathmtua href="+code=spathmtu="coe=asoc" L#L391clas431code=NULL" c14h8ef="+co14hgt;140ruct  4014s=">141c     skpmtua href="+code=spmtu"srel class="sref">fail_in name="L433">14s1ef="+co14et/sctp/associola.c#L40914et/>1411os, *err = pathmtua href="+code=spathmtu="co =->skosref">err = frag_poinlf">err = ->err = ->err = pmtua href="+code=spmtu"srele=asoc" L#L391clas431code=NULL" c1413ef="+co14lying around in the outq14lyi>1413uct 1411}
1415     -> = ">(<7;s:  hri:>(<7;p,apmtu:>(<7;d,lfrag_poinl:>(<7;d\n" uprefs                 const struct osref">err = osref">err = pathmtua href="+code=spathmtu="co osref">err = frag_poinlf">err = 141"L415ciola.c#L465" i4="L365>]))
1416" clode=i" class="sref">i) {
141>bind_addr);
142=a hrinhref=">err = ->err = del_timede   oya>(&a      deallocation may be delayed.
fail_in name="L433">1421ef="+co14ef="net/sctp/associola.c14ef=>1421    class="sref">fail_in name="L433">1422ef="+co14  ulpq)">del_timede   oya>(&a">fL385" id="L385"">fef="net/sctp/associol">fL385" id="L385"">fef="n=->fL385" id="L385"oock_">f"sref/a>->err = bassf">err = peer.142pos, *skola.c#L295" id="L295" class="line" name="L295"> 401fail_in name="L433">1424ef="+co14="comment">/* Free ssnma14="c>142s="sref">i-> = fail_in name="L433">1425ef="+co14 id="L423" class="line" 14 id>1425="sref">i-> = fail_in name="L433">1426ef="+co14oc->fail_in name="L433">1427ef="+co14tp/associola.c#L426" id=14tp/>142/associola.c#cas2f/a>-> = fail_in name="L433">1428ef="+co14"+code=sctp_bind_addr_fr14"+c>142ruct skola.c#L295" id="L295" class="line" name="L295">rwndclass="comment"rwnd="co sgt> 8="sref">skosref">err = a_rwndclass="comment"a_rwnd="col span>span>lass="sref">fail_in name="L433">1429ef="+co14f="+code=bind_addr" clas14f=">142lass="line" na4e="L34ss="ss8="sref">skola.c#L295" id="L295" class="line" name="L295">rwndclass="comment"rwnd="co - 8="sref">skosref">err = a_rwndclass="comment"a_rwnd="col slin=->-> 4214s=">143pass="line" na4e="L344e="L34ss="s/a>->err = bassf">err = sgt> 8="sref">sk">fL385" id="L385"">fef="="line" name="L295">< coon may be delayed.< u="ue);
 42914ne">1431os, * ->err = pathmtua href="+code=spathmtu="co)lllass="sref">fail_in name="L433">1432ef="+co14net/sctp/associola.c#L4314net>143143s="sref">ifail_in name="L433">1435ef="+co14ctp/associola.c#L434" id14ctp>143class="line" name="L4breake=asoc" L#L391clas431code=NULL" c14s6ef="+co14mp;
tim14tim>143/associola.c#otrurn<#e=asoc" L#L391clas431code=NULL" c14s8ef="+co14/associola.c#L436" id="L14/as>1436" clciola.c#L465" i4="L365>]))
143 *144pass=353" class="line" name/* Increase  hri&();

14ach>144ope_tvoid c4 );
_rwnd"increase"sref">del_timede   oya>(&a      deallocation may be delayed.
fail_in name="L433">1442ef="+co14>cookie);
uclass="sref">fail_in name="L433">1443ef="+co14_random);
del_timede   oya>(&a     chunkon may be delayed.e=asoc" L#L391clas431code=NULL" c1444ef="+co14_random);href="+co="14_ra>144s="sref">idel_timede   oya>(&atimesociola.c#e=asoc" L424imesociolef="net/sctp/associol4imesa.c#e=asoc" L424imesef">e=asoc" L#L391clas431code=NULL" c1445ef="+co14 id="L423" ch_random"4cl14 id>144="L403" class="line" name="L403"> 40314.6ef="+co14.c#L437" id="net/sctp/as14.c#>1446="sref">iskola.c#L295" id="L295" class="line" name="L295">rwnd_overL385" id="L385"rwnd"over ucol class="sref">fail_in name="L433">14.7ef="+co14     for ();
144/associola.c#L486" i4a4skola.c#L295" id="L295" class="line" name="L295">rwnd_overL385" id="L385"rwnd"over uco slin=->fail_in name="L433">14.8ef="+co14_random);L436" id=  14_ra>144ruct skola.c#L295" id="L295" class="line" name="L295">rwnd_overL385" id="L385"rwnd"over uco -=->144lass="line" na4e="L34}4else class="sref">fail_in name="L433">145ref="+co14_random)tp/associ4la14_ra>145pass="line" na4e="L34        ;="sref">skola.c#L295" id="L295" class="line" name="L295">rwndclass="comment"rwnd="co +=skren431skosref">err = rwnd_overL385" id="L385"rwnd"over ucole=asoc" L#L391clas431code=NULL" c1451ef="+co14/associola.c8"> 348 14/as>1451os, * ->rwnd_overL385" id="L385"rwnd"over uco r<#e=asoc" L#L391clas431code=NULL" c1452ef="+co14  NULL;
4ref">ep)14>NU>145pos, *fail_in name="L433">1454ef="+co14L412" class=>sock_put4/a14L41>145s="sref">iskola.c#L295" id="L295" class="line" name="L295">rwndclass="comment"rwnd="co +=->i) {
145/associola.c#e}
art#otcoverck_bit uprefsctp/associol>);
1456" class="line" name="L406"ssociola.* oncs our rwnd had r*/);
);
s4ck14   >146pass=353" class="line" name/* Do we n/to#" c initial advertised windowm uprefsctp/associol>);
146ass="comment">         * delllllllll*h uprefsctp/associol>);
skola.c#L295" id="L295" class="line" name="L295">rwnd_aressL385" id="L385"rwnd"aress uco span>span> 8="sref">skola.c#L295" id="L295" class="line" name="L295">rwndclass="comment"rwnd="co sgt>r->err = rwnd_aressL385" id="L385"rwnd"aress ucol class="sref">fail_in name="L433">1463ef="+co14a href="+co4ref="net/4ct14a h>146pos, *->->err = pathmtua href="+code=spathmtu="co osref">err = rwnd_aressL385" id="L385"rwnd"aress ucole=asoc" L#L391clas431code=NULL" c1464ef="+co14.c#L437" id=csock_put4sc14.c#>146s="sref">iskola.c#L295" id="L295" class="line" name="L295">rwndclass="comment"rwnd="co +=->146class="line" name="L48="sref">skola.c#L295" id="L295" class="line" name="L295">rwnd_aressL385" id="L385"rwnd"aress uco -=->146c#L435" id="Lciola.c#L465" i4="L365>]))
       4if14/as>14 ruct -> = ">(<7;s:  hri >(<7;p rwnd increased by >(<7;d/to#(>(<7;u, >(<7;u) " uprefsctp/associol>);
"- >(<7;u\n" uprefs a/a>->osref">err = len431osref">err = rwndclass="comment"rwnd="co                 const struct ->rwnd_overL385" id="L385"rwnd"over uco osref">err = a_rwndclass="comment"a_rwnd="cole=asoc" L#L391clas431code=NULL" c1471ef="+co14nt"> */, 147ass="=asoc" L#L391clas431code=NULL" c1472ef="+co14e,
1472f">ulpq);addr);

);
as4oc14L41>147s="sr353" class="line" name/* Do we n/T c algorithmlus2d is/similar/to#" c one described5in uprefsctp/associol>);
147class353" class="line" name/* Do we n/Seca hr 4.2.3.3 ofLRFC 1122m uprefsctp/associol>);
147id="L353" class="line" name/* Do we *h uprefsctp/associol>);
skock"  soc_needs"updassf">err = osref">err = fail_in name="L433">1478ef="+co14     for ( 375 14   >147ruct osref">err = a_rwndclass="comment"a_rwnd="cohr->err = rwndclass="comment"rwnd="coe=asoc" L#L391clas431code=NULL" c1479ef="+co14ep" class="47"+code=s4d=14ep">147lass="line" na4e="L34/a>-> = ">(<7;s: Sendck_bwindowaupdass SACK-  hri: >(<7;p " uprefsctp/associol>);
148pass="line" na4e="L34a4e="L34ss="line  ;lass="line" string">"rwnd: >(<7;u a_rwnd: >(<7;u\n" uprefs a/a>->);
a14ep">1481os, * ->err = osref">err = rwndclass="comment"rwnd="co osref">err = a_rwndclass="comment"a_rwnd="cole=asoc" L#L391clas431code=NULL" c1482ef="+co14/associola.cname="L374">14/as>148 =->osref">err = 148pos, *llass="sref">fail_in name="L433">1484ef="+co14ep" class="4asref">as4"L14ep">148s="sref">i 4031486ef="+co14     for (148c#L435" id="L435" cla/a>->err = psociline" name="L416"> 416<97.r5>148"L415iola.c#L465" i4="L365>]))
 375148ruct ock" outq_taila href="+code=sock" outq_tail"srefspan>
err = outqueusf">err = sacka href="+code=soackef">le=asoc" L#L391clas431code=NULL" c1489ef="+co14/associola.cn"+code=s4id14/as>148 *149pass="line" na4e="L34;addr);
);
 *s=
err = 4imes+        -> =  390        struct14"> >149sk=imesopendck_a href="+code=s=imesopendck_"srefe" name="L295">=imesa.c#e=asoc" L424imesef">) span>span> 8="sref">skdel_=imesa.c#e=asoc" L42del_=imes"srefe" name="L295">=imesa.c#e=asoc" L424imesef">)llass="sref">fail_in name="L433">1493ef="+co14a href="+code=pos" class14a h>149pos, *ock" span>
osref">err = 149s="sref">i 393149="L40ciola.c#L465" i4="L365>]))
149c#L43ode=i" class="sref">i) {
);
1496" clvoid c4 );
_rwnd"decrease"sref">del_timede   oya>(&a      deallocation may be delayed.
fail_in name="L433">1499ef="+co14L397" id="L397" class="l14L39>1499="srclass="sref">fail_in name="L433">15href="+co15href" id="L397" class="l15hre>150c     ->err = 1501os, *->i) {
150pos, *-> = ->err = rwndclass="comment"rwnd="co "rwnd zero" uprefs aotrurnle=asoc" L#L391clas431code=NULL" c15h4ef="+co15hnt 150s="sref">i-> = err = rwnd_overL385" id="L385"rwnd"over uco "rwnd"over not zero" uprefs aotrurnle=asoc" L#L391clas431code=NULL" c15h5ef="+co15hne" name="L393"> 393150="L403" class="line" name="L403"> 4031506ef="+co15h href="net/sctp/associo15h h>1506="sref">iskola.c#L295" id="L295" class="line" name="L295">eoon may be delayepd="L="line" name="L295">rcvbuf_policy431fail_in name="L433">1507ef="+co15ht/sctp/associola.c#L39515ht/>150/associola.c#L486" i4/a>->err = ->_readclass="comment"atomi>_read"srefspan>
err = rmem_allref">err = 150ruct err = ->_readclass="comment"atomi>_read"srefspan>
err = bassf">err = err =  4015s=">151=a hrode=i" class="sref">i) {
);
 430);
151pospwindowac" cbe r*stored uprefsctp/associol>);
151s="sr353" class="line" name/* Do we n/brck to original valuem uprefsctp/associol>);
151class353" class="line" name/* Do we nh uprefsctp/associol>);
1516="sref">iskrx_counlf">err = r->err = bassf">err = fail_in name="L433">1517ef="+co1515" id="L415" class="lin1515">151/associola.c#L486" i4/a>->1516" clode=i" class="sref">i) {
151lass="line" na4->err = rwndclass="comment"rwnd="co slin=->fail_in name="L433">152ref="+co15        err = rwndclass="comment"rwnd="co -=->1521os, *->fail_in name="L433">1522ef="+co15  err = rwnd_aressL385" id="L385"rwnd"aress uco +=->err = rwndclass="comment"rwnd="coe=asoc" L#L391clas431code=NULL" c1523ef="+co15lass="sref">peer.152pos, *osref">err = rwndclass="comment"rwnd="co r<#e=asoc" L#L391clas431code=NULL" c1524ef="+co15="comment">/* Free ssnma15="c>152s="sref">i1525="sref">ifail_in name="L433">1526ef="+co15oc->->err = rwnd_overL385" id="L385"rwnd"over uco r->skosref">err = rwndclass="comment"rwnd="coe=asoc" L#L391clas431code=NULL" c1527ef="+co15tp/associola.c#L426" id=15tp/>152/associola.c#L486" i4/a>->err = rwndclass="comment"rwnd="co r<#e=asoc" L#L391clas431code=NULL" c1528ef="+co15"+code=sctp_bind_addr_fr15"+c>152ruct -> = ">(<7;s:  hri >(<7;p rwnd decreased by >(<7;d/to#(>(<7;u, >(<7;u, >(<7;u)\n" uprefs                 const struct  4215s=">153pass="line" na4e="L344e="L34ss=/a>->osref">err = len431osref">err = rwndclass="comment"rwnd="co                 const struct  42915ne">1531os, * err = rwnd_overL385" id="L385"rwnd"over uco err = rwnd_aressL385" id="L385"rwnd"aress ucole=asoc" L#L391clas431code=NULL" c1532ef="+co15net/sctp/associola.c#L4315net>153153pos
);
153class353" class="line" name/* local endpoinl and " c otmote an im uprefsctp/associol>);
);
tim15tim>153/assoinl /a>->del_timede   oya>(&a      deallocation may be delayed.
 fail_in name="L433">15s9ef="+co15      fail_in name="L433">154ref="+co15.c#L437" id="L437" class15.c#>154c     ->co>1542f">ulpq);addr);
);
);
);
);href="+co="15_ra>154s="sr353" class="line" name/* Do we nh uprefsctp/associol>);
1545     ->skPF_INET6L385" id="L385"PF_INET6="co =r->err = bassf">err = -> = iskola.c#L295" id="L295" class="line" name="L295">psociline" name="L416"> 416<97.r5>fail_in name="L433">15.7ef="+co15     for ();
154/associola.c#L486" i4/a>->154ruct skola.c#L295" id="L295" class="line" name="L295">psociline" name="L416"> 416<97.r5>fail_in name="L433">15.9ef="+co15_random);="+code=sDO15_ra>154lass="line" na4e="L34/a>->i) {
 348 15/as>1551os, *->->fL385" id="L385"oock_">f"sref/a>->err = bassf">err = );

err = bassf">err = err = ep)15>NU>155pos, *
err = eoon may be delayepd="L="line" name="L295">bassf">err = err = sock_put4/a15L41>155s="sref">ii) {
155      }

);
1556" clinl /a>->del_timede   oya>(&a      deallocation may be delayed.
del_timede   oya>(&a     cookieon may be delayock" cookie"srenet/sctp/associolcookieon may be delaycookie"sre,ctp/associol>);
s4ck15   >156pass="line" na4e="L34a4e="L34ss="line  sssssss="line" name="Lgfp_fL385" id="L385"gfp_fuct <="line" name="LgfpL385" id="L385"gfp="collass="sref">fail_in name="L433">1561ef="+co15.c#L437" id=class="sr4f"15.c#>1561    class="sref">fail_in name="L433">1562ef="+co15tions */156->psoc_initiline" name="L416">_init"sre="line" name="L295">chunk_hasf">err = raw" lasocio=_len431156s="sref">i->sk__u8431->psoc_initiline" name="L416">_init"sre + /a>->156="L403" class="line" name="L403"> 4031566ef="+co15ref="net/sc4_new" cla4s=15ref>156c#L435" id="Lotrurn->
err = bassf">err = err = ->);
err = eoon may be delayepd="L="line" name="L295">bassf">err = err = 
);
 */, 157ass="inl /a>->err = del_timede   oya>(&a      deallocation may be delayed.
157err = err = fail_in name="L433">1573ef="+co15timers" clasass="sref4>b15tim>157posfail_in name="L433">1574ef="+co15L412" class="sref">as4oc15L41>157s="sref">i->157="L403" class="line" name="L403"> 4031576ef="+co15ep" class="47;p\n&quo4;<15ep">1576="sref">i->err = bassf">err = err = ->err = v4t/sctp/ascode=sv4 u="ue);
span>lass="sref">fail_in name="L433">1577ef="+co15href="net/s4tp/associ4la15hre>157/associola.c#L486/a>->
err = bassf">err = err = err = );
 375 15   >157ruct osref">err = bassf">err = fail_in name="L433">1579ef="+co15ep" class="47"+code=s4d=15ep">157lass="line" na4e="L34/a>->158=a hrode=i" class="sref">i) {
a15ep">1581os, *->15/as>158as4"L15ep">158s="sr353" class="line" name/* Setlan span>
->del_timede   oya>(&a      deallocation may be delayed.
fail_in name="L433">1586ef="+co15     for (158c#L43class="sref">fail_in name="L433">1587ef="+co15tp/associol4n>
 375158ruct ->err = 158 *159pass="line" ne}
);
 *skola.c#L295" id="L295" class="line" name="L295">href=_ida href="+code=shref=_id="collass="sref">fail_in name="L433">1592ef="+co15"> 390        struct15"> >159err = 159pos->fail_in name="L433">1594ef="+co15int 159s="sref">iskunlikely431f"srefspan>
fail_in name="L433">1595ef="+co15ine" name="L393"> 393159class="line" name="L4otrurn<-e"line" name="LENOMEML385" id="L385"ENOMEM="coe=asoc" L#L391clas431code=NULL" c1596ef="+co15a href="net/sctp/associo15a h>159c#L43ode=i" class="sref">i) {

159ruct ->err = err = f_new_abovs"srefspan>
->
err = fail_in name="L433">16h1ef="+co16h/a> *->skiasolow431->fail_in name="L433">1603ef="+co16h href="+code=pos" class16h h>160pos, *160s="sref">i 3931605     ->
1606="sref">iskerrosf">err = fail_in name="L433">1607ef="+co16ht/sctp/associola.c#L39516ht/>160/associola.c#L486" i4goto4/a>->160ruct skerrosf">err = fail_in name="L433">1609ef="+co16h397" id="L397" class="l16h39>160lass="line" na4e="L34otrurn->err =  4016s=">161=a hrode=i" class="sref">i) {
skola.c#L295" id="L295" class="line" name="L295">href=_ida href="+code=shref=_id="co =skock" href=_->->err = 161s="sriola.c#L465" i4="L365>]))
161class353" class="line" name/* Fre< " c ASCONF queusm*h uprefsctp/associol>);
1616="srstatic void c4 );
err = del_timede   oya>(&a      deallocation may be delayed.
fail_in name="L433">1617ef="+co1615" id="L415" class="lin1615">161/assoclass="sref">fail_in name="L433">16s8ef="+co16t;161ruct 161lass="line" n">del_timede   oya>(&a     chunkon may be delayed.162=a hrode=i" class="sref">i) {
1621os, *skcio=_for_*/err = osconfL385" id="L385" cconf="co hddi->fail_in name="L433">1622ef="+co16  skcio=_del_initiline" name="L4cio=_del_init"srefspan>
lio=c#L295" id="L29cio=ss="le=asoc" L#L391clas431code=NULL" c1623ef="+co16lass="sref">peer.162pos, *(&a     chunk_freosconfL385" id="L385" cconf="cole=asoc" L#L391clas431code=NULL" c1624ef="+co16="comment">/* Free ssnma16="c>162s="sref">i162="L40ciola.c#L465" i4="L365>]))
162c#L43ode=i" class="sref">i) {
162      }
162ruct static void c4 );
del_timede   oya>(&a      deallocation may be delayed.
fail_in name="L433">1629ef="+co16f="+code=bind_addr" clas16f=">1629="srclass="sref">fail_in name="L433">163ref="+co16s="line" name="L428"> 4216s=">163pass="line" n">del_timede   oya>(&a     chunkon may be delayed.e=asoc" L#L391clas431code=NULL" c1631ef="+co16ne" name="L429"> 42916ne">1631os, *del_timede   oya>(&a     chunkon may be delayed.i) {
err = ocka href="+code=sackef"> hnconf_rckocio=c#L295" id="L295nconf_rckocio=ss=",ctp/associol>);
ifail_in name="L433">1635ef="+co16ctp/associola.c#L434" id16ctp>163class="line" name="L4e="sref">skcio=_del_initiline" name="L4cio=_del_init"srefspan>
="line" name="L295">4ransmittedocio=c#L295" id="L29transmittedocio=ss="le=asoc" L#L391clas431code=NULL" c1636ef="+co16mp;
->ocka href="+code=sackef">le=asoc" L#L391clas431code=NULL" c1637ef="+co16timers" class="sref">tim16tim>1637="sref">i164pass=353" class="line" name/* Cle" cup " c ASCONF_ACK queusm*h uprefsctp/associol>);

16ach>164ass="void c4 );
del_timede   oya>(&a      deallocation may be delayed.
fail_in name="L433">1642ef="+co16>cookie);
uclass="sref">fail_in name="L433">1643ef="+co16_random);
del_timede   oya>(&a     chunkon may be delayed.e=asoc" L#L391clas431code=NULL" c1644ef="+co16_random);href="+co="16_ra>1644os, *del_timede   oya>(&a     chunkon may be delayed.164="L403" class="line" name="L403"> 40316.6ef="+co16.c#L437" id="net/sctp/as16.c#>1646="sref">i);
);
164      }
);
);L436" id=  16_ra>164ruct 353" class="line" name/* Do we nh uprefsctp/associol>);
);="+code=sDO16_ra>164lass="line" n/a>->err = ocka href="+code=sackef"> hnconf_rckocio=c#L295" id="L295nconf_rckocio=ss=",ctp/associol>);
)tp/associ4la16_ra>165pass="line" na4e="L34a4e="L34ss="linee"line" name="Ltransmittedocio=c#L295" id="L29transmittedocio=ss="l class="sref">fail_in name="L433">1651ef="+co16/associola.c8"> 348 16/as>1651os, *->="line" name="L295">subh431);
err = ="line" name="L295">seriala href="+code=soerial="co ==lass="sref">fail_in name="L433">1652ef="+co16  htonla href="+code=shtonl"srefe" name="L295">osa.c#L295" id="L295" class="line" name="L295">psociline" name="L416"> 416<97.r5>fail_in name="L433">1653ef="+co16>NULL;
4ref">ep)16>NU>165pos, *sock_put4/a16L41>165s="sriola.c#L465" i4="L365>]))
skcio=_del_initiline" name="L4cio=_del_init"srefspan>
="line" name="L295">4ransmittedocio=c#L295" id="L29transmittedocio=ss="le=asoc" L#L391clas431code=NULL" c1656ef="+co16ref="net/sc4p/associo4a.16ref>165c#L435" id="L435" cla/a>->ocka href="+code=sackef">le=asoc" L#L391clas431code=NULL" c16_7ef="+co16.c#L437" id=" id="L354" 16.c#>1657="sref">i1656" clciola.c#L465" i4="L365>]))
s4ck16   >166pass=353" class="line" name/* Find " c ASCONF_ACK whose eerial number matches/ASCONF nh uprefsctp/associol>);
1661    ">del_timede   oya>(&a     chunkon may be delayed.);
del_timede   oya>(&a      deallocation may be delayed.
->seriala href="+code=soerial="collass="sref">fail_in name="L433">1664ef="+co16.c#L437" id=csock_put4sc16.c#>166s="srclass="sref">fail_in name="L433">1665ef="+co16tions */166class="line" ">del_timede   oya>(&a     chunkon may be delayed.e=asoc" L#L391clas431code=NULL" c1666ef="+co16ref="net/sc4_new" cla4s=16ref>166c#L43ode=i" class="sref">i) {
);
       4if16/as>166ruct 353" class="line" name/* Do we n rck chunk whose eerial number matches/" a);
);
->err = ocka href="+code=sackef"> 
hnconf_rckocio=c#L295" id="L295nconf_rckocio=ss=",ee"line" name="Ltransmittedocio=c#L295" id="L29transmittedocio=ss="l class="sref">fail_in name="L433">1671ef="+co16nt"> */, 1671os, *->="line" name="L295">subh431);
err = ="line" name="L295">seriala href="+code=soerial="co ==ae" name="L295">seriala href="+code=soerial="col class="sref">fail_in name="L433">1672ef="+co16e,
167ocka href="+code=sackef">le=asoc" L#L391clas431code=NULL" c1673ef="+co16timers" clasass="sref4>b16tim>167pos, *->e=asoc" L#L391clas431code=NULL" c1674ef="+co16L412" class="sref">as4oc16L41>167s="sref">i1675="sref">i167c#L43ode=i" class="sref">i) {
167/associola.c#otrurn->e=asoc" L#L391clas431code=NULL" c1678ef="+co16     for ( 375 16   >1676" clciola.c#L465" i4="L365>]))
167 *168=a hrvoid c4 );
del_timede   oya>(&a      deallocation may be delayed.
fail_in name="L433">1681ef="+co16ep" class="4ass="sref4>a16ep">1681    class="sref">fail_in name="L433">1682ef="+co16/associola.cname="L374">16/as>1682f">ulpq);addr);
168pos, *->as4"L16ep">168s="sriola.c#L465" i4="L365>]))
ulpq);addr);
);
1686os, *->err = 168/asso=asoc" L#L391clas431code=NULL" c1688ef="+co16tp/associol4n"> 375168ruct );
168lass="line" na4->err = 5ddifail_in name="L433">169ref="+co16/associola.cde=base" 4cl16/as>169pass="line" na4e="L34/a>->osref">err = 5ddi1691os 390        struct16"> >169


footer"> T c original LXR software by " c ola.c#L46http://sourceforge.5" iprojects/lxr">LXR a hrunityss=",ethis experiref=al vers hr by ola.c#L46mailto:lxr@ ux.no eubfooter"> cxr. ux.no kindly hosted by ola.c#L46http://www.redpill- pro.no