linux/net/sctp/output.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 *
   6 * This file is part of the SCTP kernel implementation
   7 *
   8 * These functions handle output processing.
   9 *
  10 * This SCTP implementation is free software;
  11 * you can redistribute it and/or modify it under the terms of
  12 * the GNU General Public License as published by
  13 * the Free Software Foundation; either version 2, or (at your option)
  14 * any later version.
  15 *
  16 * This SCTP implementation is distributed in the hope that it
  17 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
  18 *                 ************************
  19 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  20 * See the GNU General Public License for more details.
  21 *
  22 * You should have received a copy of the GNU General Public License
  23 * along with GNU CC; see the file COPYING.  If not, write to
  24 * the Free Software Foundation, 59 Temple Place - Suite 330,
  25 * Boston, MA 02111-1307, USA.
  26 *
  27 * Please send any bug reports or fixes you make to the
  28 * email address(es):
  29 *    lksctp developers <lksctp-developers@lists.sourceforge.net>
  30 *
  31 * Or submit a bug report through the following website:
  32 *    http://www.sf.net/projects/lksctp
  33 *
  34 * Written or modified by:
  35 *    La Monte H.P. Yarroll <piggy@acm.org>
  36 *    Karl Knutson          <karl@athena.chicago.il.us>
  37 *    Jon Grimm             <jgrimm@austin.ibm.com>
  38 *    Sridhar Samudrala     <sri@us.ibm.com>
  39 *
  40 * Any bugs reported given to us we will try to fix... any fixes shared will
  41 * be incorporated into the next SCTP release.
  42 */
  43
  44#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  45
  46#include <linux/types.h>
  47#include <linux/kernel.h>
  48#include <linux/wait.h>
  49#include <linux/time.h>
  50#include <linux/ip.h>
  51#include <linux/ipv6.h>
  52#include <linux/init.h>
  53#include <linux/slab.h>
  54#include <net/inet_ecn.h>
  55#include <net/ip.h>
  56#include <net/icmp.h>
  57#include <net/net_namespace.h>
  58
  59#include <linux/socket.h> /* for sa_family_t */
  60#include <net/sock.h>
  61
  62#include <net/sctp/sctp.h>
  63#include <net/sctp/sm.h>
  64#include <net/sctp/checksum.h>
  65
  66/* Forward declarations for private helpers. */
  67static sctp_xmit_t __sctp_packet_append_chunk(struct sctp_packet *packet,
  68                                              struct sctp_chunk *chunk);
  69static sctp_xmit_t sctp_packet_can_append_data(struct sctp_packet *packet,
  70                                           struct sctp_chunk *chunk);
  71static void sctp_packet_append_data(struct sctp_packet *packet,
  72                                           struct sctp_chunk *chunk);
  73static sctp_xmit_t sctp_packet_will_fit(struct sctp_packet *packet,
  74                                        struct sctp_chunk *chunk,
  75                                        u16 chunk_len);
  76
  77static void sctp_packet_reset(struct sctp_packet *packet)
  78{
  79        packet->size = packet->overhead;
  80        packet->has_cookie_echo = 0;
  81        packet->has_sack = 0;
  82        packet->has_data = 0;
  83        packet->has_auth = 0;
  84        packet->ipfragok = 0;
  85        packet->auth = NULL;
  86}
  87
  88/* Config a packet.
  89 * This appears to be a followup set of initializations.
  90 */
  91struct sctp_packet *sctp_packet_config(struct sctp_packet *packet,
  92                                       __u32 vtag, int ecn_capable)
  93{
  94        struct sctp_chunk *chunk = NULL;
  95
  96        SCTP_DEBUG_PRINTK("%s: packet:%p vtag:0x%x\n", __func__,
  97                          packet, vtag);
  98
  99        packet->vtag = vtag;
 100
 101        if (ecn_capable && sctp_packet_empty(packet)) {
 102                chunk = sctp_get_ecne_prepend(packet->transport->asoc);
 103
 104                /* If there a is a prepend chunk stick it on the list before
 105                 * any other chunks get appended.
 106                 */
 107                if (chunk)
 108                        sctp_packet_append_chunk(packet, chunk);
 109        }
 110
 111        return packet;
 112}
 113
 114/* Initialize the packet structure. */
 115struct sctp_packet *sctp_packet_init(struct sctp_packet *packet,
 116                                     struct sctp_transport *transport,
 117                                     __u16 sport, __u16 dport)
 118{
 119        struct sctp_association *asoc = transport->asoc;
 120        size_t overhead;
 121
 122        SCTP_DEBUG_PRINTK("%s: packet:%p transport:%p\n", __func__,
 123                          packet, transport);
 124
 125        packet->transport = transport;
 126        packet->source_port = sport;
 127        packet->destination_port = dport;
 128        INIT_LIST_HEAD(&packet->chunk_list);
 129        if (asoc) {
 130                struct sctp_sock *sp = sctp_sk(asoc->base.sk);
 131                overhead = sp->pf->af->net_header_len;
 132        } else {
 133                overhead = sizeof(struct ipv6hdr);
 134        }
 135        overhead += sizeof(struct sctphdr);
 136        packet->overhead = overhead;
 137        sctp_packet_reset(packet);
 138        packet->vtag = 0;
 139        packet->malloced = 0;
 140        return packet;
 141}
 142
 143/* Free a packet.  */
 144void sctp_packet_free(struct sctp_packet *packet)
 145{
 146        struct sctp_chunk *chunk, *tmp;
 147
 148        SCTP_DEBUG_PRINTK("%s: packet:%p\n", __func__, packet);
 149
 150        list_for_each_entry_safe(chunk, tmp, &packet->chunk_list, list) {
 151                list_del_init(&chunk->list);
 152                sctp_chunk_free(chunk);
 153        }
 154
 155        if (packet->malloced)
 156                kfree(packet);
 157}
 158
 159/* This routine tries to append the chunk to the  ode=0chine" name="L48">  48#include <  1 COOKIE_ECHO et/sctp="lin07/a>(#include <"> * This appears to be a followup set of i1/sctp/sct1p.h>
>
 * doep/noenfitlass="isis appears to be a followup set of i1/"L155"> 1/checksum.h>
  351/* Fo16.c#L36" id="L36" class="line"p_packet_free" class="sref">sctp_packers. */
sctp_packet<+codemitcode=chunk" class="sref">chunk)
 145{
sport,   75                                        sct1p_chu1k *chu="line" name="L93">onspo{
kfree( lie=sctp_ch1unk" class="sref">sctp_c1hunk<17a>;
retvalruct sctp_pa1cket_append_data(str1uct <17ket_empty" cla"line" name="L93"> rro      packete=sctp_ch1unk" class="sref">sctp_c1hunk<17ree a packet.  */
 = 0;
__func__,
 123                          sctp_chun1k1*        }
u16 SCTP_DEB17">  77static void chunk, linch (me="L157"> 157 157, chunk);
 109        }
chunk _packet_r1eset(struct chunk _ode=sctp1/a>         15 name="L81">  81        chunk _siz1e1= sctp_packet<+codemithunk" class="sref">chunk 157}
sctp_packrro      kfree(ref="+cod1e=has_sack" class="sref"1>has_18 class="sref">chunk 152  skb         152  sk         152  sk_ rr        sctp_packrro      has_18ree a packet.  */
has_18ss="sref">transport);
ipfr18"line" name="L35">  35aut1h18.c#L106" id="L106" class="line" name="L106">ssssssss*p_packet_free" class="sref">sctp_packe87">  87<1/a>
kfree(8">  881/* Co18 class="sref">sport,  157 157, chunk);
kfree(8*
<chunk)rt,  157
  919> *SCTP_Dass="sref1">__u32 chunk 94">  94<1/a>        struct chunk 9tp_chunk1a href="+code=chunk" cla1ss="s1ef">chunk ce" na href="net/sctport:XMIT_NAGLE"+cLAYt;, chunk 9ef="+cod1a>        chunbreaktput.c#L154" id="L154" class="l 7">  87<1(&qu1t;%s: pack59" id="L159" class="line" name"">  88SCTP_D9">  99         141vta1g1=  201        if (ecn_cap2ble &2mp;& sctp_pack2= <2c#L105" id="L105" class=2ode=s2end" class="sref">sctp_packet_will_fit(struct sctp_p 41  84        sctp_p 41  84code=ccket)
 1kL109" id="L109" ck="line" namekfree" class="sref">kfr2" name="L204"> 104            2   transport);;;;;;;;;;;;;;;;;;k);
  73static kfr2"4name="L20hunk1a href="+code=chun2t bef2rechu2ks get ap2ended.
asoc = transport->asoc;
 103
chunk, *tmp;
packet);
(struct retvalruct , sctp_packet2appen20">/* This routine tries to append 2ass="line2 name="L110"> 110
sctp" name="L211"> 111        retu2n   919> *sctp"_cap2ble< href="net/sctp/output.c2L112"21has_18 class="sref">ca hrefe" name="L141"> 141 113
 114sctp"4name="L2n>
c*assnpu="lil>chdys="lbe b"> *
18.c#L106" id="L106" class="line5" id=*p_packet_free" class="sref">sctp"="net/sc2ransport" class="sref">s2tp_tr2nsport * 108                        >) {
);
  84        sctp"xes you m"sref">__u16 sa hrefe" name="L141"> 141 119        str2ct /* This routine tries to append 2sref">sct2_association *sctpov22t.c#16n>
c*adon't doa+codd=*p_packet_free" class="sref">sctp<_cap2ble<22"> 122        sctpSCTP_DEBU2_PRINTK("%snsporta hr!ef="net/s8                        >) {
sctp"sref">pa2ket, transa hrefe" name="L141"> 141 125        packet2>transport =   86ref="maka>  84          84 href="net/sctp/outp
sctp"xes you mf="+code=destination_por2" cla22sport" class="sref">sa hrefe" name="L141"> 141/* This routine tries to append 2 {
 = 0;
retvalruct sctp_packet *p" name="L145"> 1kL109" id="L109" ck="linea> = sc2p_sock *ecverhead = scsref">retvalruct , sctp133" clas2="line" name="L133"> 1332/a>  23hunk" class="sref">chunk);
 186" id="L86" class="line" nut.c#L104" id="L104" class="lin2"sref">pa2> = sizeof(struct /* Initialize the packet structu2ass="line2 name="L135"> 135   2    <2 href="+code=oa hrefe" name="L141"> 141sctp>vt2g lass="sref">sctp_packet_will_fit(struct sctp_p 41  82        sctp_p 41  82code=ccket)
 1kL109" id="L109" ck="line" namekfree" class="sref">kfr2>1= );
  73static kfr2et;
<2 href="net/sctp/output.c2L141"2id="L1cketde=chunk" class="sref">chu2e" name="2142"> 142
(struct retvalruct ,  143/* Free a packet.  */
sctp_packet_f2ee(struct c*a 41sctp_a> += si2146"> 146        str2ct 18.c#L106" id="L106" class="line5" id=*p_packet_free" class="sref">sctpsctp_chun2 * * 10="L153" clai">  83          83line" name="L153"> 1/a>static   82        sctpsctp_pack248"> 148        15 name="L81">  81        chu2SCTP_DEBU2_PRINTK( *asoc = transport->asocrpacket_free" class="sref">sctpsgt; 150        asoc =                tim {
>->sctp"sref">li2t_for_each_entry_safe  919> *asoc;
 103
list_2el_init(&chunk->;
sk);
(/* Free a packet.  */
 154
sctp" name="L255"> 155        if (2a hre251* 10tim {
p"l="L2               tim {
p"l="L2line" name="L153"> 1tim {               tim {tp/ou)ode=chunk" class="sref">chu2/a>-><2 href="+code=malloced" c2ass="25SCTP19en" class="srefa href=""sref">asoc =   73<  82         158
sport/a>)
 103s"+c_genertransport" class="sre"+c_genertransretv;!
ctp_packet_reset" class="sref2eCTP_DEBU259"> 159 * 103
 131 "+c_genertransport" class="sre"+c_genertransretv_" namekfree" class="sref">kfr2he chunk 2o the  ode=0chine" name=2L48">251=  141ecnk" clat_2el_inia>#include <chunk 103
;
alc#L148" id="L148" class="lin2n name="L2p/sct1p.h>
vtagame="L73">  73<  82          86ref="maka>  82          82 href="net/sctp/outp
transportne" name="L108"> 10= 82        chu2 of i1/"L255"> 1/checksum.h>2
1*ame="L73">  73retvalruct sctp_packet *p" name="L145"> 1kL109" id="L109" ck="linea> = 26SCTP19en" class="srefa href="portne" name="L108"> 10sref">retvalruct , chu2 ctp_chun2*/
ame="L73">  73< f="net/sctp/output.c#L153" id="L153" class="line" name="L153"> 1= 82        sport, sct2p_chu1k *1=  103
 131 "+c_need6             "+c_need6pac2ef">lie=s2tp_ch1unk" class="sref">2ctp_c27"sre18> * 10ist 1tim {               tim {tpcode=packet" class="sref">pac2ek" clat_2tp_pa1cket_append_data(str27has_18 class="sref">chunk 103ef">transporttransport2ctp_c27e=vtag" class="sref">vtag= trans= sct2_chun2k1*u16 chu2P_DEB17">2 77static void chuna hrefe" name="L141"> 141/* This routine tries to append 2k _siz27de=list_for_each_entry_safe" class2e" namref2"+cod1e=has_cookie_echo"2class28t.c#16n>
sctpe(ref2"+cod1e=has_sack" class=2sref"28nclu16L42" id="L42" class="linsoL id=*p_packet_free" class="sref">sctpe" namr=s2tp_ch1e=has_data" class=2sref"28sctp16="L33" class="line" nam" id=*p_packet_free" class="sref">sctpref="nref2"+cod1e=has_auth" class=2sref"2>has_1lass="sref">sctp_packet_will_fit(struct sctp_packet *pccket)
 145{
1*>>>>>>>>>>>>>>k);
  73static kfr2 of i1ref2"+cod1e=auth" class="sre2">aut28ref="+code=sctp_chunk" class="sref"2_packe87"2  87<1/a>
(struct retvalruct , 2 8828t" class="sref">packet);#L118" id="L118" class="line" name="L118"> 111" clas2"> 132      1" clas2"retv;
 1/a>static         );
tpalc#L148" id="L148" class="lin2e _od2span>
</* This routine tries to append 2ass="lnit2aliza1tions.
sctp" name" i2="L911" class="line" nam2="L9129unk<17a>;
 157pill_f+codemithunk" class="sref">chpill_f+cef">p" name="L145"> 1t.c#L109" id="L109" class="line" name="L109"> 109        }
 109 132      1" clas2"retvpalc#L148" id="L148" class="lin2ass="l *<2 href1="+code=sctp_packe2_conf29tp_packet_empty" class="sref">scsref">retvalruct , sctpSCTP_Dass2"sref1">__u32 gotochu="line" name=finis id="L86" class=finis MIT_alc#L148" id="L148" class="lin2k 94"2  94<1/a>        struct 2a hre29">/* Initialize the packet structu2k 9tp2chunk1a href="+code=chun2" cla2ss="s1ef">chun0L42" id="L42" class="linWe believeentataitlast nam lasOKc#L11dd isc=sctp"of i1ref2"+cod1a>        , l name="L153"> 1/a>static         );
chu2ass="l 7"2  87<1(chu2" name"">2 88s6n>
sctp" _od2 99         * 157t" clas  83        t" clas  83ef">p" name="L145"> 1t.c#L109" id="L109" class="line" name="L109"> 109        }
vta291= sct3" nam2="L301"> 201        if (3a hre30>  919> *   82        chn>
sct3"2cap2ble3/sref1">__u32 chunk);
   84        transhn>
sct3"4name="L30hunk1a href="+code=chun3t bef301*   83           83ode=p= 1alc#L148" id="L148" class="lin3n5name="L30+cod1a>        sct3"6name="L30 87<1();
 152jiffies               jiffiesMIT_alc#L148" id="L148" class="lin3fxes you 3
s">chunbreaktput.c#L154" id="L154" c3f="net/sc3class="sref">sctp_packet3appen30_chu1k * ce" na href="net/scCID_ nmentCOOKIMIT_Oot;, chu3ass="line3 name="L110"> 110
1=  15 name="L81">  81         111        retu3n   919> * 113
chu3" name="L314"> 114transha href="+code=ctp/output.c#L156" id="L156" class="line" name="L156">   82        1*SC3"="net/sc3ransport" class="sref">s3tp_tr31sport * ce" na href="net/scCID_AUTHMIT_Oot;, chu3"xes you 3"sref">__u16 sunk);
   84         119        str3ct  *ctp/output.c#L156" id="L156" class="line" name="L1586" id="L86" class="line" name="L86">  86ctp/ou52" id="L152" class="lialc#L148" id="L148" class="lin3ess="line3_association *ov32>  919> * 122        ("%s"sctp/output.c#L105" id="Lt lasOKc#L1s id="Llast nam"+code=sctp_packet_free" class="sref">sct3"sref">pa3ket,  = 0;
ladd_tai>retvalruct ladd_tai>ef">phref="net/sctp/output.c#L152" id="L152" class="line" name="L152"> 152                , list) {
 125         = 0;
list) {
  86ctp/oas2"> 132      1" clas2"retvalc#L148" id="L148" class="lin3"5name="L3f="+code=transport" clas3="sre3">transport =  152tp/output.c#L103" id="L103" class="li;
list) {
chu3"xes you 3f="+code=destination_por3" cla32sport" class=a hrefe" name="L141"> 141/* t.c#L159" id="L159" class="lin3sc3p_sock *
sct3verhead = sct3133" clas3="line" name="L133"> 1333/a>  33sctp16="L33" class="line" nam" id=*p_packet_free" class="sref">sct3"sref">pa3> = sizeof(struct /* = sctp_packet *pccket)
 145{
 135   3    <331*>>>>>k);
  73static kfr3/a> += si3eof(struct  = retvalruct , vt338verhead = __func__,
 123                         ass="sref="net/sctp/output.c#L124" id="L124" cla9P_DEBUG_PRINTK" class="sref"3&ss="line3f="+code=malloced" class3"sref331=  109        }
e3e" name="3142"> 142
sct3" name="L343"> 143sct3ref="net/3ctp/output.c#L144" id="L344" c34/out16/sctp/output.c#L24" idaaaaaaaa*as id="LlasDATAL id=*p_packet_free" class="sref">sct3rss="line3ee(struct c*" id=*p_packet_free" class="sref">sct3_a> += si3146"> 146        str3ct malloced)
  83          83line" name="L153"> 1/a>static chu3sctp_chun3 *);
 157cla>t" clas  83        cla>t" clas  83ef">p" name="L145"> 1t.c#L109" id="L109" class="line" name="L109"> 109        }
 148        retvalruct , sct3SCTP_DEBU3_PRINTK( * 150        li3t_for_each_entry_safee3ef">list_3el_init(& =n>
sct3e name="L3_chunk_free( =  157 41  84        sctp_p 41  84code=" name="L145"> 1t.c#L109" id="L109" class="line" name="L109"> 109        }
 154
)
retvalruct , sct3" name="L355"> 155        if (3a hre351*SC3ectp_chun3ref="+code=packet" class3"sref356as_sack =n>
sct3ectp_pack3158"> 158
packet); 157 157 41  82        sctp_p 41  82code=" name="L145"> 1t.c#L109" id="L109" class="line" name="L109"> 109        }
 159 *)
retvalruct , sct3"gt;351= e3nk" clat_3el_inia>#include <retvalruct sctp_packet *p" name="L145"> 1t.c#L109" id="L109" class="line" name="L109"> 109        }
>
/* Free a packet.  */
>
/* = chu3 of i1/"L355"> 1/checksum.h>3
1* 14136r" cl=  157release_own {                157release_own {ef">pccket)
  73<  skb        sct3" cla1cod3=sctp1_chunk" class="sre3">sct3p_chu1ou)ode=chunk" class="sref">chu3e(  = 0;
 1=/a>  skb         152  sk        lie=s3tp_ch1unk" class="sref">3ctp_c37"sre1= (str37g" c19P_DEBUG_PRINTK" class="sref"3ete=s3tp_ch1unk" class="sref">3ctp_c372d_c1lass="svoidc#L1odee="L157"> 157s/a>own {_w                157s/a>own {_wef">pccket)
  73<  skb        k);
  73< /a>  sk        chu3rof i1/"L3chunk1" class="sref">sct3_chun374t" 17th = 0;
 1=/a>  skb        u16   skb         152  sk         /a>  sk         =  152dek)o{               isk)o{retvalc#L1odee="L157"> 157release_own {                157release_own {ef">alc#L148" id="L148" class="lin3e" name="3ket_r1eset(struct  _od3=sctp1/a>         =n>
sct3k _siz37de=li6/sctp/output.c#L24" idaaaaaaaa*aTsct3e" namref3"+cod1e=has_cookie_echo"3class38t.c#16n>
sct3ek" clat_3"+cod1e=has_sack" class=3sref"38nclu16L42" id="L42" class="laaaaaaaa*atheass="coahre =een 03" cmitt b"> *
sct3ref="nref3"+cod1e=has_auth" class=3sref"38it" 17th = 0;
line"list,  152
1= aut38hunk17EBUG_PRINTK" class="sref">SC3_packe87"3  87<1/a>
sct3r" name="3 8838t" cl0L42" id="L42" class="a*as157<"srq_tai>()"> *
/* 0L42" id="L42" class="a*> *
 *
sct3ass="l *<3 href1="+code=sctp_packe3_conf39tp_pain)
03" cmitef">pccket)
 145{
__u32 chu3k 94"3  94<1/a>        struct 3a hre39it" 17th ccket)
 tp.c#L103" id="L1tpretvalc#L1odee="L157">1ode=list" class="sref">list) {
chun"sref">asoc = transport->asoc;
 103
        asoc =           73< 4        (chunk, *  73  skb        );
  73static  tmp.c#L103" id="L1tmpref=alc#L148" id="L148" class="lin3a _od3 99         *);
  73< /a>  sk        vta391= )
pac4" nam2="L401"> 201        if (4a hre40>  919> *)
sct4n_cap2ble4/a> &2mp;&    83           83ode=p= "+code=packet" class="sref">pac4"2cap2ble4/sref1">__u32   73 103dt.c#L151" id="L15dss="li+code=packet" class="sref">pac4"3cap2ble4/ 94<1/a>        struct 4     86NULLid="L86" class=NULLhrefa     6n>
sct4n4cap2ble4/hunk1a href="+code=chun4t bef404t" 17th = 0;
  73 132      1ksump 4fas2"e" name=izuofpccket)
        SC4"6name="L40 87<1( = __func__,
 123                         ass="sref="net/sctp/output.c#L124" id="L124" clpalc#L148" id="L148" class="lin4n7name="L4088sctp_packet4appen408verhead =n>
sct4ass="line4 name="L110"> 110
1= )
lempty               ef">lemptyline"list, list) {
 111        retu4n   919> * erra>  sk        alc#L148" id="L148" class="lin4"_cap2ble4 href="net/sctp/output.c4L112"41g" c19P_DEBUG_PRINTK" class="sref"4e" name="4113"> 113
sct4" name="L414"> 114 = 0;
  86ef">lectry               ef">lectryef">p" name="L145"> 1t.c#L109" id="L109" class="lin>) {
 131nex.c#L151" id="L15nex.ref=,>k);
                 = 0;
ctp/ou52" id="L152" class="line" name="L152"> 152  skb         152  sk        SC4"="net/sc4ransport" class="sref">s4tp_tr416as_sack =n>
sct4"xes you 4"sref">__u16 packet);n
/a>  skb        p" name="L145"> 1t.c#L109" id="L109" class="lin>) {
 119        str4ct  *)e=a hr!ef="net/sn
/a>  skb        1=   skb        ov42"+co2e=ecn_capable" class="sref">e4<_cap2ble422"> 122        sct4SCTP_DEBU4_PRINTK( = p" name="L145"> n
/a>  skb        ) {
pa4ket, /* Initialize the packet structu4" name="L425"> 125         =sctp/output.c#L105" id="Set "linsw1" i soclet soentatawe know wherec#L1get "li id=*p_packet_free" class="sref">sct4S5name="L4f="+code=transport" clas4="sre4218.c#L106" id="L106" class="line5 isk *
sct4Sxes you 4f="+code=destination_por4" cla42t" class="sref">packet); 157s/a>own {_w                157s/a>own {_wef">p" name="L145"> n
/a>  skb          sk        /* This routine tries to append 4p" name="L145"> tp.c#L103" id="L1tpretv_ /ou)ode=chunk" class="sref">chu4"sref">sc4p_sock *  919> *p" name="L145"> tp.c#L103" id="L1tpretv ass="sref="net/sNULLid="L86" class=NULLhref ass="sref="net/s<157p" name="L145">   sk        c/a>)
asoc;list)
asocode=net_header_len" caram_flags               caram_flags;list< = chu4"CTP_DEBU4="line" name="L133"> 1334/a>  43e=vtag" class="sref">vtagame="L73">  73< f">transp_sync_pmtuport" class="sref">transp_sync_pmtuef">p" name="L145">   sk        
pa4> = sizeof(struct trans=  135   4    <431*p" name="L145"> tp.c#L103" id="L1tpretvne" name="L103"> 103dt.c#L151" id="L15dss="liut.c#L104" id="L104" class="lin4"="net/sc4f="+code=overhead" class4"sref43overhead = p" name="L145"> n
/a>  skb        (vt43=pac18 *;
<4 href="net/sctp/output.c4L141"44unk<17a>;
sct4e" name="4142"> 142
        )
p" name="L145"> n
/a>  skb        )
 143 = p" name="L145"> n
/a>  skb        pa4ctp/output.c#L144" id="L444" c44it" 17th = 0;
p" name="L145"> 1t.c#L109" id="L109" class="lin>) {
 = 0;
p" name="L145"> 1t.c#L109" id="L109" class="lin>) {
 146        str4ct SC4sctp_chun4 * =n>
sct4exes you 448"> 148        sct4SCTP_DEBU4_PRINTK(/* 0L42" id="L42" class="aaaaaaaaa* headercand onw or m 06sct4sgt; 150        sct4"sref">li4t_for_each_entry_safe
sct4"" name="4el_init(&sct4e name="L4_chunk_free( *
 154
sct4" name="L455"> 155        if (4a hre454t" 17th = 0;
p" name="L145"> 1t.c#L109" id="L109" class="lin>) {
        ) {
pac4ectp_chun4ref="+code=packet" class4"sref45ode=sctp_packet_reset" class="sref4ectp_pack4158"> 158
sct4"CTP_DEBU459"> 159/* 0L42" id="L42" class="aaaaaaaaa* 6.10"Bu1sct4"gt;45de=li6/sctp/output.c#L24" idaaaaaaaa*e=sctp_packet_free" class="sref">sct4nk" clali4t_for_;
sct4nk" clat_4el_inia>#include < *
>
sct4 of i1/ne4 name=/a>>
/* Initialize the packet structu4 of i1/"L455"> 1/checksum.h>4
 =sctp/output.c#L105" id=*e=sctp_packet_free" class="sref">sct4na>-><4 href=a>4618.c#L106" id="L106" class="line5 3.2 nCh claField Descriptsct4nctp_chun4*/
sct4nctp_pack4href=1"+code=__sctp_pack4t_app46t" cl0L42" id="L42" class="aaaaaaaaa* Tsct4nCTP_DEBU4=sctp1_chunk" class="sre4">sct46">/* 0L42" id="L42" class="aaaaaaaaa* V"+ueufields) MUSTobe a multipli of=4bbytesL2 Iftput.s2"g" sct4ngt;sct4ef">lie=s4tp_ch1unk" class="sref">4ctp_c47t.c#16n>
sct4ek" clat_4tp_pa1cket_append_data(str47nclu16L42" id="L42" class="laaaaaaaa*ainclu=ed "lfitlac# clas2"g"  fieldL2 Tlias idercshoulde=sctp_packet_free" class="sref">sct4ete=s4tp_ch1unk" class="sref">4ctp_c47sctp16="L33" class="line" naaaaaaaaa*anevercpadtwi"  m 06sct4eof i1/ne4href=1"+code=sctp_packet4will_47/out16/sctp/output.c#L24" idaaaaaaaa*e=sctp_packet_free" class="sref">sct4eof i1/"L4chunk1" class="sref">sct4_chun4715" id="L115" class="line" ="sref">c* [Tsct4ea>-><4sref"1>u16 sct4ectp_chun4 77static void , __func__<***e/scttp/oucodean cla***id="L123" classut.c#L104" id="L104" class="lin4e" name="4ket_r1eset(struct packet);ef">lfor_eachlectry_safwport" class="sref">lfor_eachlectry_safwef">p" name="L145"> 09        }
 1tmp.c#L103" id="L1tmpref=k_list, list) {
chu4k _od4=sctp1/a>         *packet);ef">ldel_i1"tport" class="sref">ldel_i1"tef">phref="net/sctp/output.c#L152" id="L152" class="line" name="L152"> 152                siz471=   83          83line" name="L153"> 1/a>static chu4e" namref4"+cod1e=has_cookie_echo"4class48>  919> *
sct4ek" clat_4"+cod1e=has_sack" class=4sref"48nclu16L42" id="L42" class="laaaaaaaaaaaaaaaaaaaaaaaa* byarule C5,li new RTT measureline MUSTobe made each id=*p_packet_free" class="sref">sct4ete=s4tp_ch1e=has_data" class=4sref"48sctp16="L33" class="line" naaaaaaaaaaaaaaaaaaaaaaaaa* round ef"pL2 Furtherm 06, new RTT measurelinese=sctp_packet_free" class="sref">sct4ref="nref4"+cod1e=has_auth" class=4sref"48/out16/sctp/output.c#L24" idaaaaaaaaaaaaaaaaaaaaaaaa* SHOULDobe made no m 06sct4rof i1/"L4chunk1e=ipfragok" class=4sref"4815" id="L115" class="line" ="sref">caaaaaaaaaaaaaaaa* forca givenp/sk *
aut4818.c#L106" id="L106" class="lineaaaaaaaaaaaaaaaa*" id=*p_packet_free" class="sref">sct4_packe87"4  87<1/a>
48sport" class="sreced<<<<<<<<)e=a hr!ef="net/stp.c#L103" id="L1tpretvne" name="L103"> 103rto_ cla"L2               rto_ cla"L2hrefp/ou)ode=chunk" class="sref">chu4e _od4span>
< 152rtt_i1_proga ss               rtt_i1_proga ss="li;
<1alc#L148" id="L148" class="lin4e _
 103rto_ cla"L2               rto_ cla"L2href;
<1alc#L148" id="L148" class="lin4" name" i4="L911" class="line" nam4="L9149>  919> *caa"""""""net/sctp/outpu6">   83           83ode=p= 1alc#L148" id="L148" class="lin4SCTP_Dass4"sref1">__u32 =         struct 4a hre49">/* Initialize the packet structu4k 9tp4chunk1a href="+code=chun4" cla4ss="s1ef">chunaa"""""""net/sctp/outpupad="L2               pad="L2href/
 1/a>static  152  skb         152s2"> 132      s2"e" n) -c#L1odee="L157">ctp/ou52" id="L152" class="line" name="L152"> 152  skb         152s2"> 132      s2"e" nalc#L148" id="L148" class="lin4Sof i1ref4"+cod1a>        )
(p" name="L145">  1/a>static  152  skb         _od4 99         *sct4a _vta49de=li6/sctp/output.c#L24" idaaaaaaaaaaaaaaaa* st 06sct5" nam2="L501"> 201        if (5a hre50t.c#16n>
 *
sct5"2cap2ble5/sref1">__u32 /a>)
1ode=list" class="sref">list) {
        struct 5   transaa"""""""net/sctp/outpua6" id="L86" class="line" name="L86">  86L h_tai>_poinp" name="L145"> n
/a>  skb         132      1ksump 4fas2"e" na+me="L86">  86ctp/ou52" id="L152" class="line" name="L152"> 152  skb         152s2"> 132      s2"e" nalc#L148" id="L148" class="lin5"6name="L50 87<1();
p" name="L145">  1n
/a>  skb        static  152  skb         152s2"> 132      s2"e" n)a9P_DEBUG_PRINTK" class="sref"5n7name="L5088static  152  skb         152  83        static  152  skb         152s2"> 132      s2"e" n)alc#L148" id="L148" class="lin5"8name="L5099        /* This routine tries to append 5ass="line5 name="L110"> 110
1= , __func__,
< et/sct[/a>,
<] /a>,
< 0x/a>,
x, /a>,
< et/scd, /a>,
< et/scd, /a>,
< et/scdid="L123" class=This routine tries to append 5" name="L511"> 111        retu5n   919> *__func__<***nCh cl="L123" class="line" name="L1209        }
caa""""""ref="+coch=          1, ,  113
vtaged<<<<<<<< 1523" cla36         152typu         114transaa""""""<< 1526"> ts"> 132      6"> ts"" cla?a
__" class="sref">__func____func__
chunaa""""""aa""""""<< 1526"> ts"> 132      6"> ts"" cla?This routine tries to append 5"5cap2ble5 1/a>static  152         131  83a36         152ts"> 132      ts"" cl) :a0eThis routine tries to append 5"6name="L5ransport" class="sref">s5tp_tr51packet);
__func__ 1/a>static  1523" cla36         152s2"g" > 132      s2"gine" nueThis routine tries to append 5"7name="L5"sref">__u16 __func__<3" clne" na hne" ns2"="L123" class="line" name="L1209        }
 152  skb         152s2"> 132      s2"e" neThis routine tries to append 5"8name="L5119"> 119        str5ct  *__func__ 152rtt_i1_proga ss               rtt_i1_proga ss="li)alc#L148" id="L148" class="lin5"ss="line5_association *ov52>  919> *sct5<_cap2ble522"> 122        sct5SCTP_DEBU5_PRINTK(sct5S3cap2ble5ket,  *
 125        caaaaaaaa*" id=*p_packet_free" class="sref">sct5S5name="L5f="+code=transport" clas5="sre52SCTP19en" claaaaaaaaa/a>)e=a hr!ef="net/st/sct3" clai">  83          83line" name="L153"> 1/a>static sct5S6name="L5f="+code=source_port" cl5ss="s52packet);
 1/a>static /* This routine tries to append 5sct5"sref">sc5p_sock *
sct5verhead = hs    tsct5vCTP_DEBU5="line" name="L133"> 1335/a>  53sctp16="L33" class="line" naaaaaaaaa*aaaa"liasharedcaansportsct5v3cap2ble5> = sizeof(struct sct5ass="line5 name="L135"> 135   5    <5315" id="L115" class="line" ="sref">c*    s="ef"rtsct5a5name="L5eof(struct efd=*p_packet_free" class="sref">sct5"="net/sc5f="+code=overhead" class5"sref53overh6n>
 *
(sct5"_LIST_HE5f="+code=vtag" class="sr5f">vt53=pac18 *)1= trlin_calculrtu_hma>
trlin_calculrtu_hma>line" name="L153"> 1
  919> * 142
caa""""""ref="+coch"+coch=  143 =sctp/output.c#L105" id="2) Calculrtutput.Adler-32nc#eclsum oftput.whole ss="co, id=*p_packet_free" class="sref">sct5"ss="line5ee(struct c*    inclu="L2 itla, sct5"5name="L5146"> 146        str5ct 18.c#L106" id="L106" class="line5    sef="s"> *

sct5exes you 548"> 148        sct5e_LIST_HE5_PRINTK(/* 0L42" id="L42" class="aaaaaaaaa* bytCRC32-C asp/skcribed "lf<draon-ietf-tsvwg-lasscsum-02.txte" n"> *
 150        sct5"sref">li5t_for_each_entry_safe *)e=a hr!ef="net/st/sct3"eclsum_disabletput.c#L153" id="L153"eclsum_disable" cl) ou)ode=chunk" class="sref">chu5"" name="5el_init(&c/a>)!" name="L153"> 1dt.c#L151" id="L15dss="li>) {
) {
chu5" name="L5_chunk_free(vtagame="L73">  73<__u="line" nam      __u3hunk" ame="L73">  73  86L"L15start_clsumu52" id="L152" L"L15start_clsumline"" name="L153"> 1__u8               __u8as_sa*)=  132      1ksump 4fas2"e" npalc#L148" id="L148" class="lin5ass="line5 name="L154"> 154
/* Initialize the packet structu5" name="L555"> 155        if (5a hre55s="s1ef">chunaa""""""aa""""""=sctp/output.c#L105" id="3) Put "linresultansct5"5name="L5 href="+code=malloced" c5ass="5518.c#L106" id="L106" class="lineaaaaaaaaaaaaaaaa*    s cloaaheader,cand lelawe"linrest oftput.bies unchangeb"> *

sct5"xes you 5158"> 158
        ) {
  86L"L15end_clsumu52" id="L152" L"L15end_clsumline" name="L153"> 1/rc="line" nam      /rc="e" npalc#L148" id="L148" class="lin5a_LIST_HE559"> 159 *chu5"ss="line5o the  ode=0chine" name=5L48">551= sct5nk" clali5t_for_;
  86CHECKSUM_PARTIALid="L86" class=CHECKSUM_PARTIALe" nalc#L148" id="L148" class="lin5nk" clat_5el_inia>#include <caa"""""""net/sctp/outpun
/a>  skb        ) {
 p" name="L145"> n
/a>  skb        >
vtaged<<<<<<<<  skb        ) {
transaa"""""""net/sctp/outpun
/a>  skb        ) {
  86offstpof               offstpofef">pccket)
 1/checksum.h>5
chunaa""""""= 56SCTP19en" cla= sct5n_LIST_HE5=sctp1_chunk" class="sre5">sct56">/* 0L42" id="L42" class="aaaaaaaaa* From RFC 248ncld=*p_packet_free" class="sref">sct5nss="line5href=1"+code=sctp_packet5can_a56de=li6/sctp/output.c#L24" idaaaaaaaa*a unc__sct5ef">lie=s5tp_ch1unk" class="sref">5ctp_c57t.c#16n>
sct5ek" clat_5tp_pa1cket_append_data(str57nclu16L42" id="L42" class="laaaaaaaa*a  tp/output1protocolane" ECN-capable.="L123" classpacket_free" class="sref">sct5e name="L5tp_ch1unk" class="sref">5ctp_c57sctp16="L33" class="line" naaaaaaaaa*" classpacket_free" class="sref">sct5eof i1/ne5href=1"+code=sctp_packet5will_57/out16/sctp/output.c#L24" idaaaaaaaa* Now sett"L2 itlaECT.bie alle"li time, aspie shouldsnot caustcld=*p_packet_free" class="sref">sct5e name="L5chunk1" class="sref">sct5_chun5715" id="L115" class="line" ="sref">c* any1problems1protocol-wise evenpifsour peercignorespie"> *
u16 static void (struct  *
/* 0L42" id="L42" class="aaaaaaaaa*" id=*p_packet_free" class="sref">sct5egt;siz571=  152tp.c#L103" id="L1tpretvne" name="L103"> 103af_specificid="L86" class="f_specificretvne" name="L103"> 103ecn_capableid="L86" class=ecn_capable="lipp" name="L145"> n
/a>  skb         152  sk        e5ek" clat_5"+cod1e=has_sack" class=5sref"58has_sack =n>
sct5ete=s5tp_ch1e=has_data" class=5sref"58>"%s"sctp/output.c#L105" id="BUG:snot implelineede=sctp_packet_free" class="sref">sct5ref="nref5"+cod1e=has_auth" class=5sref"58/out16/sctp/output.c#L24" idaaaaaaaa* Forav4tpulasallelivespsomewherecin slne" na _opt.."> *
c*" id=*p_packet_free" class="sref">sct5ea>-><5"+cod1e=auth" class="sre5">aut58hunk17EBUG_PRINTK" class="sref">SC5_packe87"5  87<1/a>
sct5ectp_pack5 88587/a>1= ) name="L153"> 1
 1
 131t" t_stnt_to> 132      s" t_stnt_tooutp;!
<="L86">  86tp.c#L103" id="L1tpretv_ ou)ode=chunk" class="sref">chu5e _od5span>
<
sct5egt;
sct5" name" i5="L911" class="line" nam5="L9159t.c#16n>
sct5ass="l *<5 href1="+code=sctp_packe5_conf59chunk" class="sref">c name="L153"> 1
 131t" t_stnt_to> 132      s" t_stnt_tooutp;
<="L86">  86tp.c#L103" id="L1tpretvalc#L148" id="L148" class="lin5SCTP_Dass5"sref1">__u32         struct 5a hre59">/* Initialize the packet structu5k 9tp5chunk1a href="+code=chun5" cla5ss="s1ef">chun/a>) name="L153"> 16">   83           83ode=_ ou)ode=chunk" class="sref">chu5Sof i1ref5"+cod1a>        )
( _od5 99         *sct5a _vta591=  1
 1
chu6" nam2="L601"> 201        if (6a hre60>  919> *
caa"""""""net/sctp/outputimeouput.c#L145" id="timeoupretv;
<="L86">  86
__u32         struct 6   transaa""""""/a>)e=a hr!ef="net/smod_timerc#L151" id="L15mod_timerline" name="L153"> 1timerc#L151" id="L15timerretv="line" name="L12jiffies               jiffies" cla+""net/sctp/outputimeouput.c#L145" id="timeoupretv_ packet_free" class="sref">sct6n4cap2ble6/hunk1a href="+code=chun6t bef60s="s1ef">chunaa""""""aa""""""<< 1
);
= , __func__<***e/scttp/oucodean cla*** skbas2" et/scdid="L123" class=This routine tries to append 6ass="line6 name="L110"> 110
1=  152s2"> 132      s2"e" n)alc#L148" id="L148" class="lin6" name="L611"> 111        retu6n e6"_cap2ble6 href="net/sctp/output.c6L112"61has_sack = 0;
 152socal_df               socal_dfretv;
<="L86">  861ode=list" class="sref">list) {
 113
 152tp.c#L103" id="L1tpretvne" name="L103"> 103af_specificid="L86" class="f_specificretvne" name="L103"> 103e/sctxmittput.c#L124" id="L15xmit="lipp" name="L145"> n
/a>  skb         1tp.c#L103" id="L1tpretv_alc#L148" id="L148" class="lin6"3cap2ble614"> 114/* Initialize the packet structu6"4cap2ble6n>
  86ouput.c#L145" id="oupretv:Initialize the packet structu6"5cap2ble6 103e/sctf">lis_a settput.c#L124" id="L15f">lis_a setline" name="L153"> 11ode=list" class="sref">lists6tp_tr61packet);
returnaame="L103"> 103errc#L151" id="L15errretvalc#L148" id="L148" class="lin6"7name="L6"sref">__u16  no_rclawport" class="srno_rclawretv:Initialize the packet structu6"8name="L6119"> 119        str6ct  *  skb        p" name="L145"> n
/a>  skb         *  skb        p" name="L145"> tp/k_nettput.c#L124" id=p/k_netline" name="L153"> 1
 103base
 131  sk         1IPSTATS_MIB_OUTNOROUTES>  skb        ov62"+co2e=ecn_capable" class="sref">e6<_cap2ble622"> 122        sct6SCTP_DEBU6_PRINTK(sct6S3cap2ble6ket, sct6S4cap2ble625"> 125        c* Tsct6S5cap2ble6f="+code=transport" clas6="sre6218.c#L106" id="L106" class="line5 isc=sct6S6name="L6f="+code=source_port" cl6ss="s62overh6n>
 *
sct6T_LIST_HE6D(&sct6Tss="line6="net/sctp/output.c#L1306 id="621ame="L103"> 103errc#L151" id="L15errretv:Initialize the packet structu6"sref">sc6p_sock * =n>
sct6verhead =  *
 1336/a>  63sctp16="L33" class="line" naaaaaaaaa*" id=*p_packet_free" class="sref">sct6v3cap2ble6> = sizeof(struct /* Initialize the packet structu6ass="line6 name="L135"> 135   6    <634t" 17th = 0;
lfor_eachlectry_safwport" class="sref">lfor_eachlectry_safwef">p" name="L145"> 09        }
 1tmp.c#L103" id="L1tmpref=k_list, list) {
chu6a5name="L6eof(struct ldel_i1"tport" class="sref">ldel_i1"tef">phref="net/sctp/output.c#L152" id="L152" class="line" name="L152"> 152                );
)e=a hr!ef="net/st/sct3" clai">  83          83line" name="L153"> 1/a>static sct6"xes you 6t_reset( 1/a>static vt63=pac18 *<= 1=   86ouput.c#L145" id="oupretvalc#L148" id="L148" class="lin6et;
<6 href="net/sctp/output.c6L141"64>  91" name="L145"> nomemu52" id="L152" nomemretv:Initialize the packet structu6eerhead 142
 1431=   86errc#L151" id="L15errretvalc#L148" id="L148" class="lin6"3cap2ble6ctp/output.c#L144" id="L644" c64it" 1=  146        str6ct 18.c#L106" id="L106" cl/******************************************************************** id=*p_packet_free" class="sref">sct6sctp_chun6 *
sct6exes you 648"> 148        sct6e_LIST_HE6_PRINTK(/* This routine tries to append 6sss="line650"> 150        me"ef=" cL11bea d=edc*" id=*p_packet_free" class="sref">sct6"sref">li6t_for_each_entry_safe 103e/sctf">lis_cL1_ap cla>  83        lis_cL1_ap cla>  83line"ccket)
listccccccccccccccccccccccccccccccket)
 1/a>static (chu6ass="line6 name="L154"> 154
 = 0;
 103retvaaretvalruct   86, ,  155        if (6a hre654t" 17th = 0;
 103  83=izetput.c#L124" id  83=izeline ass="sref="net/srwndtput.c#L124" idrwndline ass="sref="net/sinflighta>  sk        )
 1tp/outputtput.c#L124" idtp/output  919
<="L86">  861ode=list" class="sref">list) {
)
 1
  86tp/outputtput.c#L124" idtp/output  91ne" name="L103"> 103a/a>
 158
)
 1qtput.c#L124" idqoutp;

 159/* This routine tries to append 6"ss="line6o the  ode=0chine" name=6L48">651= sct6nk" clali6t_for_;
sct6n" name="6el_inia>#include <sct6n name="L6p/sct1p.h>
ies ceer's rwnd=indi>tres id=*p_packet_free" class="sref">sct6nss="line6 name=/a>>
sct6n name="L655"> 1/checksum.h>6
c* 6.2.1).  However, regardl ss=ofc=ie id=*p_packet_free" class="sref">sct6n5name="L6 href=a>6618.c#L106" id="L106" class="line5 is 0), =sct6nctp_chun6*/
m  sct6nxes you 6href=1"+code=__sctp_pack6t_app66t" cl0L42" id="L42" class="aaaaaaaaa* m  sct6n_LIST_HE6=sctp1_chunk" class="sre6">sct66">/* 0L42" id="L42" class="aaaaaaaaa* misse"pdueuisc=sct6nss="line6href=1"+code=sctp_packet6can_a66de=li6/sctp/output.c#L24" idaaaaaaaa*areceiver=isc= *
lie=s6tp_ch1unk" class="sref">6ctp_c67t.c#16n>
sct6ek" clat_6tp_pa1cket_append_data(str67nclu1packet_free" class="sref">sct6e name="L6tp_ch1unk" class="sref">6ctp_c67>"%s"s="sref="net/srwndtput.c#L124" idrwndline;
<="L86">  86
 131rwndtput.c#L124" idrwndlinealc#L148" id="L148" class="lin6eof i1/ne6href=1"+code=sctp_packet6will_673as_sack = 0;
  86qtput.c#L124" idqoutpode=net_header_len" clastala"L2_bytes               clastala"L2_byteslinealc#L148" id="L148" class="lin6e name="L6chunk1" class="sref">sct6_chun674t" 17th = 0;
  86tp/outputtput.c#L124" idtp/output  91ne" name="L103"> 103flight_=izetput.c#L124" idflight_=izeretvalc#L148" id="L148" class="lin6ea>-><6sref"1>u16 SC6ectp_chun6 77static void  = 0;
  86L"L15  83a=izetput.c#L124" idL"L15  83a=izeline" name="L153"> 1/a>static          *)chu6egt;siz671=   sk        chu6e" namref6"+cod1e=has_cookie_echo"6class68>  919> *sct6ek" clat_6"+cod1e=has_sack" class=6sref"68nclu16L42" id="L42" class="laaaaaaaaaaaaaaaaaaaaaaaa*aso weccL1't fallebaclass=rule 6.1 B)"> *
sct6ref="nref6"+cod1e=has_auth" class=6sref"68t" class="sref">transaa"""""""net/sctp/outpuretvaaretvalruct   86, chunaa""""""aa""""""goisc="L86">  86fini
4        aut68SCTP19en" claaaaaaaaa= 
68ass=19P_DEBUG_PRINTK" class="sref"6e _od6span>
<sct6egt;
sct6" name" i6="L911" class="line" nam6="L9169t.c#16n>
sct6"k" clat_6 href1="+code=sctp_packe6_conf69nclu16L42" id="L42" class="laaaaaaaa*aisca1givenptp/output1 d=a ss=/a>iechre cwnd=or more byteslid=*p_packet_free" class="sref">sct6"te=s6"sref1">__u32  *
        struct 6a hre69/out16/sctp/output.c#L24" idaaaaaaaa*" id=*p_packet_free" class="sref">sct6k 9tp6chunk1a href="+code=chun6" cla6ss="s1ef">chun=sctp/output.c#L105" id="RFC 7.2.4"list< "li Implelineers Guide 2.8"> *
        18.c#L106" id="L106" class="line5> *
( *
 *
/* 0L42" id="L42" class="aaaaaaaaa*    ignorec= *
vta69de=li6/sctp/output.c#L24" idaaaaaaaa*" id=*p_packet_free" class="sref">sct7" nam2="L701"> 201        if (7a hre700pac18 *)"net/sctp/output.c#L152" id="L152" class="line" name="L152"> 152f" t_ret3" cmita>  sk          86,  &2mp;& c/a>)"net/sctp/outpuflight_=izetput.c#L124" idflight_=izeretv;e" n
<="L86">  86tp/outputtput.c#L124" idtp/output  91ne" name="L103"> 103cwndtput.c#L124" idcwndlinep/ou)ode=chunk" class="sref">chu7n2cap2ble7/sref1">__u32 vtagame="L73">  73  86,         struct 7   transaa""""""goisc="L86">  86fini
4        chunaa""""""= SC7"6name="L70 87<1( =n>
lis1problem: id=*p_packet_free" class="sref">sct7"7name="L7088sct7"8name="L7099        /* 0L42" id="L42" class="aaaaaaaaa* /a>mny1previouslya03" cmittedt/ommeclfitlaconne tsct7ass="line7 name="L110"> 110
 *
 111        retu7n 
sct7"_cap2ble7 href="net/sctp/output.c7L112"71has_sack /a>)e=a hr!ef="net/st/sct  sk         1
 103base
 131  sk         103nodelaya>  sk         name="L153"> 1="L15f">lis_emptya>  sk        <="L15f">lis_emptyline" name="L153"> 11ode=list" class="sref">listsct7"2cap2ble7113"> 113
  sk         name="L153"> 1="L15starwport" class="sre/sctstarwline" name="L153"> 1
chu7"3cap2ble714"> 114transuasigned in  86tp/outputtput.c#L124" idtp/output  91ne" name="L103"> 103ssthmtuist" class="sref"thmturetv;-<="L86">  861ode=list" class="sref">list) {

chunaa""""""uasigned in 132      s2"e" n;
<="L86">  86t.c#L152" id="L152" class="line" name="L152"> 152
/a>  skb         152s2"> 132      s2"e" na+""net/sctp/outpuqtput.c#L124" idqoutpode=net_header_len" cla_qs2"> 132      cla_qs2"retvalc#L148" id="L148" class="lin7"5cap2ble7SC7"6name="L7ransport" class="sref">s7tp_tr71packet);

sct7"7name="L7"sref">__u16 efd=*p_packet_free" class="sref">sct7"8name="L7119"> 119        str7ct /* 0L42" id="L42" class="aaaaaaaaaaaaaaaaa*a=ized=ss="co"> *
 *
ov72t.c#16n>
 *
 122        sct7SCTP_DEBU7_PRINTK(/a>)" name="L153"> 1s2"> 132      s2"e" na<sline" name="L12max               maxretv_ list name="L153"> 1t.c#L152" id="L152" class="line" name="L152"> 152msg               msg  91ne" name="L103"> 103can_delaya>  sk        chu7S3cap2ble7ket, transaa"""""""net/sctp/outpuretvaaretvalruct   86,  125        chunaa""""""aa""""""goisc="L86">  86fini
4        (&  86fini
4         103retvaaretvalruct sc7p_sock *sct7vCTP_DEBU7="line" name="L133"> 1337/a>  73sctp16="L33" class="line" n/* Tsct7v3cap2ble7> = sizeof(struct /* staric name="L153"> 1="L15f">lis_ap cla>  83        lis_ap cla>  83line"ccket)
list 135   7    <73s="s1ef">chunaa""""""aa""""""""""""""ccket)
 1/a>static chu7"="net/sc7f="+code=overhead" class7"sref736CTP19en" claccket)
 1tp/outputtput.c#L124" idtp/output  919
<="L86">  861ode=list" class="sref">list) {
()
 103  83=izetput.c#L124" id  83=izeline;
<="L86">  86L"L15  83a=izetput.c#L124" idL"L15  83a=izeline" name="L153"> 1/a>static vt73=pac18 *)
 1
  86tp/outputtput.c#L124" idtp/output  91ne" name="L103"> 103a/a>
 *  86
 131rwndtput.c#L124" idrwndlinealc#L148" id="L148" class="lin7et;
<7 href="net/sctp/output.c7L141"74"+co2e=ecn_capable" class="sref">e7eerhead 142
sct7eCTP_DEBU743"> 143"%s"s="sref="net/stp/outputtput.c#L124" idtp/output  91ne" name="L103"> 103flight_=izetput.c#L124" idflight_=izeretv +
<="L86">  86  83=izetput.c#L124" id  83=izelinealc#L148" id="L148" class="lin7e3cap2ble7ctp/output.c#L144" id="L744" c74">/* Initialize the packet structu7"ss="line7ee(struct chun=sctp/output.c#L105" id="Keepa03"ck=ofchow many bytesane" in flighteisc=sct7e5name="L7146"> 146        str7ct  103
 131clastala"L2_bytes               clastala"L2_bytesline +
<="L86">  86  83=izetput.c#L124" id  83=izelinealc#L148" id="L148" class="lin7e="net/sc7 * 148        sct7e_LIST_HE7_PRINTK( *)sct7ess="line750"> 150          86  83=izetput.c#L124" id  83=izelinealc#L148" id="L148" class="lin7"sref">li7t_for_each_entry_safe *(&c"s="sref="net/srwndtput.c#L124" idrwndline;
<0alc#L148" id="L148" class="lin7"CTP_DEBU7_chunk_free( 154
 = 0;
 131rwndtput.c#L124" idrwndline;
<="L86">  86rwndtput.c#L124" idrwndlinealc#L148" id="L148" class="lin7" name="L755"> 155        if (7a hre75s="s1ef">chun=sctp/output.c#L105" id="Has =een accepted fora03" cmission. 5" id=*p_packet_free" class="sref">sct7"5name="L7 href="+code=malloced" c7ass="75SCTP19en" cla/a>)e=a hr!ef="net/s
 131pr" clacapableid="L86" class=pr" clacapablelineppacket_free" class="sref">sct7"ctp_chun7ref="+code=packet" class7"sref75packet);
 1t.c#L152" id="L152" class="line" name="L152"> 152msg               msg  91ne" name="L103"> 103can_abala/atput.c#L124" idcan_abala/aline;
<0alc#L148" id="L148" class="lin7"xes you 7158"> 158
)
 1/a>static  159 * 1/a>static 751= e7n" name="7el_inia>#include < 103e/sctf">lis_will_fittput.c#L124" id="L15f">lis_will_fitline"ccket)
listvtag>>>>>>>>>>>>>>>>ccket)
 1/a>static >
transaa""""""t);
 1uransport" c      u1packet name="L153"> 1/a>st_s2"> 132      /a>st_s2"lineppacket_free" class="sref">sct7n name="L755"> 1/checksum.h>7
chu7n5name="L7 href=a>76SCTP19en" claame="L103"> 103eize_ttput.c#L124" id=ize_tretv;ame="L103"> 103p=izetput.c#L124" idp=izelinealc#L148" id="L148" class="lin7nctp_chun7*/
 = 0;
 103pmtuist" class="srefmturetvalc#L148" id="L148" class="lin7nxes you 7href=1"+code=__sctp_pack7t_app767/a>1= sct76=pac18 * 103retvaaretvalruct   86, , lie=s7tp_ch1unk" class="sref">7ctp_c770pac18 *  861ode=list" class="sref">list) {
(str77has_sack = 0;
 11ode=list" class="sref">list) {
 103a/a>
7ctp_c77e=vtag" class="sref">" name="L153"> 11ode=list" class="sref">list) {
 103a/a>
 103ssthmtuist" class="sref"thmturetv) :Initialize the packet structu7eof i1/ne7href=1"+code=sctp_packet7will_77t" class="sref">trans" name="L153"> 11ode=list" class="sref">list) {
 103ssthmtuist" class="sref"thmturetv)_alc#L148" id="L148" class="lin7e name="L7chunk1" class="sref">sct7_chun774t" 1.c#L104" id="L104" class="lin7ea>-><7sref"1>u16  103too_big               too_bigretv9
<)et_header_len" p=izetput.c#L124" idp=izeline9+""net/sctp/outpu/a>st_s2"> 132      /a>st_s2"line;e" ns"s="sref="net/spmtuist" class="srefmturetv_alc#L148" id="L148" class="lin7ectp_chun7 77static void sct7e_LIST_HE7=sctp1/a>         *)chu7egt;siz771= mny1onw ofc=sct7e" namref7"+cod1e=has_cookie_echo"7class78t.c#16n>
sct7ek" clat_7"+cod1e=has_sack" class=7sref"78nclu16L42" id="L42" class="laaaaaaaaaaaaaaaa*aaaaaa1. Tlis1is empty (mean"L2 itis "ef="cis grertur id=*p_packet_free" class="sref">sct7e name="L7tp_ch1e=has_data" class=7sref"78sctp16="L33" class="line" naaaaaaaaaaaaaaaaa*aaaaaaaaa=sct7eof i1/ne7"+cod1e=has_auth" class=7sref"78/out16/sctp/output.c#L24" idaaaaaaaaaaaaaaaa*aaaaaa2. Tsct7e name="L7chunk1e=ipfragok" class=7sref"7815" id="L115" class="line" ="sref">caaaaaaaa*aaaaaa3. Tlis1does1't claweany1dommein>iecyst anda/omm id=*p_packet_free" class="sref">sct7ra>-><7"+cod1e=auth" class="sre7">aut7818.c#L106" id="L106" class="lineaaaaaaaa*aaaaaarequires au= *

sct7ectp_pack7 8878sport" class="sreced)lis_emptya>  sk        <="L15f">lis_emptyline" name="L153"> 11ode=list" class="sref">list  83          83line" name="L153"> 1/a>static sct7e_LIST_HE7span>
<list) {
  83          83line;eist name="L153"> 1t.c#L152" id="L152" class="line" name="L152"> 152au=<
chu7egt;
 *
sct7"te=s7"sref1">__u32 sct7aef="nref7  94<1/a>        struct 7a hre79t" class="sref">transaa"""""""net/sctp/outpu1ode=list" class="sref">list) {
chunnnnnnnnn}chu7aa>-><7"+cod1a>          86, (/* This routine tries to append 7Sgt;vta791=  103retvaaretvalruct  201        if (8a hre800as_s= 


TLXR ="liunityline, itis experi/scerl version=byflxr@mp;ux.nooutp=
lxr.mp;ux.no kindly hoste"pbytRedpill Lp;pro ASline, providercofcLp;ux "onsult"L2 andaoperrt