linux/net/ipv4/tcp_hybla.c
<<
opti> /spa2 > /form > a opti> href="../linux+v3.7.5/net/ipv4/tcp_hybla.c">opti> img src="../.static/gfx/right.png" alt=">>">op /spa2 op spa2 class="lxr_search">optiopti> input typopthidden" namoptnavtarget" 12opti> input typopttext" namoptsearch" idptsearch">opti> butt14.typoptsubmit">Search /form /spa2 op spa2 class="lxr_prefs" > a href="+prefs?return=net/ipv4/tcp_hybla.c"opti> onclick="return ajax_prefs();">opti> Prefs > /a>op /spa2 ti> /div ti> form ac.4"2="ajax+*" method="post" onsubmit="return false;">op input typopthidden" namoptajax_lookup" idptajax_lookup" 12oti> /form oti> div class="headingbott1m">
> div idptsearch_results" class="search_results" > ti> /div div idptcontent"> div idptfile_contents"
 
1 /a> spa2 class="comment">/* /spa2	 
 
2 /a> spa2 class="comment"> * TCP HYBLA /spa2	 
 
3 /a> spa2 class="comment"> * /spa2	 
 
4 /a> spa2 class="comment"> * TCP-HYBLA Conges3.14.control algorithm, based on: /spa2	 
 
5 /a> spa2 class="comment"> *   C.Caini, R.Firrincieli, "TCP-Hybla: A TCP Enhancement /spa2	 
 
6 /a> spa2 class="comment"> *   for Heterogeneous Networks", /spa2	 
 
7 /a> spa2 class="comment"> *   Interna3.14al Journal 14.satellite Communica3.14s, /spa2	 
 
8 /a> spa2 class="comment"> *                                     September 2004 /spa2	 
 
9 /a> spa2 class="comment"> *    Daniele Lacamora /spa2	 
 ue="a> spa2 class="comment"> *    root at danielinux.net /spa2	 
 11 /a> spa2 class="comment"> */ /spa2	 
 12 /a> 
 13 /a>#include <linux/module.h /a>> 
 14 /a>#include <net/tcp.h /a>> 
 15 /a> 
 16 /a> spa2 class="comment">/* Tcp Hybla structure. */ /spa2	 
 17 /a>struct
 a href="+code=hybla" class="sref">hybla /a> { 
 18 /a>         a href="+code=bool" class="sref">bool /a>   a href="+code=hybla_en" class="sref">hybla_en /a>; 
 19 /a>         a href="+code=u32" class="sref">u32 /a>    a href="+code=snd_cwnd_cents" class="sref">snd_cwnd_cents /a>;  spa2 class="comment">/* Keeps increment 12
 20 /a>         a href="+code=u32" class="sref">u32 /a>    a href="+code=rho" class="sref">rho /a>;             spa2 class="comment">/* Rho paramoter, integer part  */ /spa2	 
 21 /a>         a href="+code=u32" class="sref">u32 /a>    a href="+code=rho2" class="sref">rho2 /a>;            spa2 class="comment">/* Rho * Rho, integer part */ /spa2	 
 22 /a>         a href="+code=u32" class="sref">u32 /a>    a href="+code=rho_3ls" class="sref">rho_3ls /a>;         spa2 class="comment">/* Rho paramoter, <<3 */ /spa2	 
 23 /a>         a href="+code=u32" class="sref">u32 /a>    a href="+code=rho2_7ls" class="sref">rho2_7ls /a>;        spa2 class="comment">/* Rho^2, <<7     */ /spa2	 
 24 /a>         a href="+code=u32" class="sref">u32 /a>    a href="+code=minrtt" class="sref">minrtt /a>;          spa2 class="comment">/* Minimum smoothed round trip time 12
 25 /a>}; 
 26 /a> 
 27 /a> spa2 class="comment">/* Hybla reference round trip time (default= 1/40 sec = 25 ms), in ms */ /spa2	 
 28 /a>static int  a href="+code=rtt0" class="sref">rtt0 /a> = 25; 
 29 /a> a href="+code=module_param" class="sref">module_param /a>( a href="+code=rtt0" class="sref">rtt0 /a>, int, 0644); 
 30 /a> a href="+code=MODULE_PARM_DESC" class="sref">MODULE_PARM_DESC /a>( a href="+code=rtt0" class="sref">rtt0 /a>,  spa2 class="string">"reference rout trip time (ms)" /spa2	); 
 31 /a> 
 32 /a> 
 33 /a> spa2 class="comment">/* This is called to refresh 12
 34 /a>static  a href="+code=inline" class="sref">inline /a> void  a href="+code=hybla_recalc_param" class="sref">hybla_recalc_param /a> (struct
 a href="+code=sock" class="sref">sock /a> * a href="+code=sk" class="sref">sk /a>) 
 35 /a>{ 
 36 /a>        struct
 a href="+code=hybla" class="sref">hybla /a> * a href="+code=ca" class="sref">ca /a> =  a href="+code=inet_csk_ca" class="sref">inet_csk_ca /a>( a href="+code=sk" class="sref">sk /a>); 
 37 /a> 
 38 /a>         a href="+code=ca" class="sref">ca /a>-> a href="+code=rho_3ls" class="sref">rho_3ls /a> =  a href="+code=max_t" class="sref">max_t /a>( a href="+code=u32" class="sref">u32 /a>,  a href="+code=tcp_sk" class="sref">tcp_sk /a>( a href="+code=sk" class="sref">sk /a>)-> a href="+code=srtt" class="sref">srtt /a> /  a href="+code=msecs_to_jiffies" class="sref">msecs_to_jiffies /a>( a href="+code=rtt0" class="sref">rtt0 /a>), 8); 
 39 /a>         a href="+code=ca" class="sref">ca /a>-> a href="+code=rho" class="sref">rho /a> =  a href="+code=ca" class="sref">ca /a>-> a href="+code=rho_3ls" class="sref">rho_3ls /a> >> 3; 
 40 /a>         a href="+code=ca" class="sref">ca /a>-> a href="+code=rho2_7ls" class="sref">rho2_7ls /a> = ( a href="+code=ca" class="sref">ca /a>-> a href="+code=rho_3ls" class="sref">rho_3ls /a> *  a href="+code=ca" class="sref">ca /a>-> a href="+code=rho_3ls" class="sref">rho_3ls /a>) << 1; 
 41 /a>         a href="+code=ca" class="sref">ca /a>-> a href="+code=rho2" class="sref">rho2 /a> =  a href="+code=ca" class="sref">ca /a>-> a href="+code=rho2_7ls" class="sref">rho2_7ls /a> >> 7; 
 42 /a>} 
 43 /a> 
 44 /a>static void  a href="+code=hybla_init" class="sref">hybla_init /a>(struct
 a href="+code=sock" class="sref">sock /a> * a href="+code=sk" class="sref">sk /a>) 
 45 /a>{ 
 46 /a>        struct
 a href="+code=tcp_sock" class="sref">tcp_sock /a> * a href="+code=tp" class="sref">tp /a> =  a href="+code=tcp_sk" class="sref">tcp_sk /a>( a href="+code=sk" class="sref">sk /a>); 
 47 /a>        struct
 a href="+code=hybla" class="sref">hybla /a> * a href="+code=ca" class="sref">ca /a> =  a href="+code=inet_csk_ca" class="sref">inet_csk_ca /a>( a href="+code=sk" class="sref">sk /a>); 
 48 /a> 
 49 /a>         a href="+code=ca" class="sref">ca /a>-> a href="+code=rho" class="sref">rho /a> = 0; 
 50 /a>         a href="+code=ca" class="sref">ca /a>-> a href="+code=rho2" class="sref">rho2 /a> = 0; 
 51 /a>         a href="+code=ca" class="sref">ca /a>-> a href="+code=rho_3ls" class="sref">rho_3ls /a> = 0; 
 52 /a>         a href="+code=ca" class="sref">ca /a>-> a href="+code=rho2_7ls" class="sref">rho2_7ls /a> = 0; 
 53 /a>         a href="+code=ca" class="sref">ca /a>-> a href="+code=snd_cwnd_cents" class="sref">snd_cwnd_cents /a> = 0; 
 54 /a>         a href="+code=ca" class="sref">ca /a>-> a href="+code=hybla_en" class="sref">hybla_en /a> =  a href="+code=true" class="sref">true /a>; 
 55 /a>         a href="+code=tp" class="sref">tp /a>-> a href="+code=snd_cwnd" class="sref">snd_cwnd /a> = 2; 
 56 /a>         a href="+code=tp" class="sref">tp /a>-> a href="+code=snd_cwnd_clamp" class="sref">snd_cwnd_clamp /a> = 65535; 
 57 /a> 
 58 /a>         spa2 class="comment">/* 1st Rho measurement based on initial srtt */ /spa2	 
 59 /a>         a href="+code=hybla_recalc_param" class="sref">hybla_recalc_param /a>( a href="+code=sk" class="sref">sk /a>); 
 60 /a> 
 61 /a>         spa2 class="comment">/* set minimum rtt as this is the 1st ever seen */ /spa2	 
 62 /a>         a href="+code=ca" class="sref">ca /a>-> a href="+code=minrtt" class="sref">minrtt /a> =  a href="+code=tp" class="sref">tp /a>-> a href="+code=srtt" class="sref">srtt /a>; 
 63 /a>         a href="+code=tp" class="sref">tp /a>-> a href="+code=snd_cwnd" class="sref">snd_cwnd /a> =  a href="+code=ca" class="sref">ca /a>-> a href="+code=rho" class="sref">rho /a>; 
 64 /a>} 
 65 /a> 
 66 /a>static void  a href="+code=hybla_state" class="sref">hybla_state /a>(struct
 a href="+code=sock" class="sref">sock /a> * a href="+code=sk" class="sref">sk /a>,  a href="+code=u8" class="sref">u8 /a>  a href="+code=ca_state" class="sref">ca_state /a>) 
 67 /a>{ 
 68 /a>        struct
 a href="+code=hybla" class="sref">hybla /a> * a href="+code=ca" class="sref">ca /a> =  a href="+code=inet_csk_ca" class="sref">inet_csk_ca /a>( a href="+code=sk" class="sref">sk /a>); 
 69 /a> 
 70 /a>         a href="+code=ca" class="sref">ca /a>-> a href="+code=hybla_en" class="sref">hybla_en /a> = ( a href="+code=ca_state" class="sref">ca_state /a> ==  a href="+code=TCP_CA_Open" class="sref">TCP_CA_Open /a>); 
 71 /a>} 
 72 /a> 
 73 /a>static  a href="+code=inline" class="sref">inline /a>  a href="+code=u32" class="sref">u32 /a>  a href="+code=hybla_frac.4"2" class="sref">hybla_frac.4"2 /a>( a href="+code=u32" class="sref">u32 /a>  a href="+code=odds" class="sref">odds /a>) 
 74 /a>{ 
 75 /a>        static const
 a href="+code=u32" class="sref">u32 /a>  a href="+code=frac.4"2s" class="sref">frac.4"2s /a>[] = { 
 76 /a>                128, 139, 152, 165, 181, 197, 215, 234, 
 77 /a>        }; 
 78 /a> 
 79 /a>        return ( a href="+code=odds" class="sref">odds /a> <  a href="+code=ARRAY_SIZE" class="sref">ARRAY_SIZE /a>( a href="+code=frac.4"2s" class="sref">frac.4"2s /a>)) ?  a href="+code=frac.4"2s" class="sref">frac.4"2s /a>[ a href="+code=odds" class="sref">odds /a>] : 128; 
 80 /a>} 
 81 /a> 
 82 /a> spa2 class="comment">/* TCP Hybla main routine. /spa2	 
 83 /a> spa2 class="comment"> * This is the algorithm behavior: /spa2	 
 84 /a> spa2 class="comment"> *     o Recalc Hybla paramoters if min_rtt has changed /spa2	 
 85 /a> spa2 class="comment"> *     o Give cwnd a new 12
 86 /a> spa2 class="comment"> *     o remember increments <1 /spa2	 
 87 /a> spa2 class="comment"> */ /spa2	 
 88 /a>static void  a href="+code=hybla_cong_avoid" class="sref">hybla_cong_avoid /a>(struct
 a href="+code=sock" class="sref">sock /a> * a href="+code=sk" class="sref">sk /a>,  a href="+code=u32" class="sref">u32 /a>  a href="+code=ack" class="sref">ack /a>,  a href="+code=u32" class="sref">u32 /a>  a href="+code=in_flight" class="sref">in_flight /a>) 
 89 /a>{ 
 90 /a>        struct
 a href="+code=tcp_sock" class="sref">tcp_sock /a> * a href="+code=tp" class="sref">tp /a> =  a href="+code=tcp_sk" class="sref">tcp_sk /a>( a href="+code=sk" class="sref">sk /a>); 
 91 /a>        struct
 a href="+code=hybla" class="sref">hybla /a> * a href="+code=ca" class="sref">ca /a> =  a href="+code=inet_csk_ca" class="sref">inet_csk_ca /a>( a href="+code=sk" class="sref">sk /a>); 
 92 /a>         a href="+code=u32" class="sref">u32 /a>  a href="+code=increment" class="sref">increment /a>,  a href="+code=odd" class="sref">odd /a>,  a href="+code=rho_frac.4"2s" class="sref">rho_frac.4"2s /a>; 
 93 /a>        int  a href="+code=is_slowstart" class="sref">is_slowstart /a> = 0; 
 94 /a> 
 95 /a>         spa2 class="comment">/*  Recalculate rho only if this srtt is the lowest */ /spa2	 
 96 /a>        if ( a href="+code=tp" class="sref">tp /a>-> a href="+code=srtt" class="sref">srtt /a> <  a href="+code=ca" class="sref">ca /a>-> a href="+code=minrtt" class="sref">minrtt /a>){ 
 97 /a>                 a href="+code=hybla_recalc_param" class="sref">hybla_recalc_param /a>( a href="+code=sk" class="sref">sk /a>); 
 98 /a>                 a href="+code=ca" class="sref">ca /a>-> a href="+code=minrtt" class="sref">minrtt /a> =  a href="+code=tp" class="sref">tp /a>-> a href="+code=srtt" class="sref">srtt /a>; 
 99 /a>        } 
100 /a> 
101 /a>        if (! a href="+code=tcp_is_cwnd_limited" class="sref">tcp_is_cwnd_limited /a>( a href="+code=sk" class="sref">sk /a>,  a href="+code=in_flight" class="sref">in_flight /a>)) 
102 /a>                return; 
103 /a> 
104 /a>        if (! a href="+code=ca" class="sref">ca /a>-> a href="+code=hybla_en" class="sref">hybla_en /a>) { 
105 /a>                 a href="+code=tcp_reno_cong_avoid" class="sref">tcp_reno_cong_avoid /a>( a href="+code=sk" class="sref">sk /a>,  a href="+code=ack" class="sref">ack /a>,  a href="+code=in_flight" class="sref">in_flight /a>); 
106 /a>                return; 
107 /a>        } 
108 /a> 
109 /a>        if ( a href="+code=ca" class="sref">ca /a>-> a href="+code=rho" class="sref">rho /a> == 0) 
110 /a>                 a href="+code=hybla_recalc_param" class="sref">hybla_recalc_param /a>( a href="+code=sk" class="sref">sk /a>); 
111 /a> 
112 /a>         a href="+code=rho_frac.4"2s" class="sref">rho_frac.4"2s /a> =  a href="+code=ca" class="sref">ca /a>-> a href="+code=rho_3ls" class="sref">rho_3ls /a> - ( a href="+code=ca" class="sref">ca /a>-> a href="+code=rho" class="sref">rho /a> << 3); 
113 /a> 
114 /a>        if ( a href="+code=tp" class="sref">tp /a>-> a href="+code=snd_cwnd" class="sref">snd_cwnd /a> <  a href="+code=tp" class="sref">tp /a>-> a href="+code=snd_ssthresh" class="sref">snd_ssthresh /a>) { 
115 /a>                 spa2 class="comment">/* /spa2	 
116 /a> spa2 class="comment">                 * slow start /spa2	 
117 /a> spa2 class="comment">                 *      INC = 2^RHO - 1 /spa2	 
118 /a> spa2 class="comment">                 * This is done by splitting the rho paramoter /spa2	 
119 /a> spa2 class="comment">                 * into 2 parts: an integer part and a frac.4"2 part. /spa2	 
12e="a> spa2 class="comment">                 * Inrement<<7 is es3.mated by doing: /spa2	 
121 /a> spa2 class="comment">                 *             [2^(int+frac.)]<<7 /spa2	 
12/a> spa2 class="comment"> *                 * tclass="sref">frac.4"2s /a>)) ?E_PARM_DESC" class="sref">MODULE_PAcode=tp" e toine" namoptL121">
121 /a> spa2 class="comm4/tcp_hyb class="sref">u32 /a>   1 a hr12spa2	 
121 /a> spa2 class="commef="+code class="sref">u32 /a>   1 a hr12min_rtt has changed /spa2	 
121 /a> spa2 class="commspa2 clasbla.c#L26" idptL26" clas1s="li12 on the model proposed /spa2a href="net/ipv4/twhile we will use a> * a lass="lihref="+co_f="+code=() tone" namoptL121">
121 /a> spa2 class="comment">    a.c#L27" idptL27" class=1"line12 
12e="a> spa2 class="comment">    bla reference round trip1 time1(default= 1/40 sec = 25 ms),a.c#L117" idptL117e" namoptL12">
 12 /a>     tt0" class="sref">rtt0 /1a> = 12; a href="+code=minrtt" class="sref"pv4/tcp_hybla.c#L94" idptL94" class="line" namoptL41">
 41 /a>         a href="+1ule_param1" class="sref">module_pa1ram /129 a href="+code=minrtt" class="sref"p="sref">odd /a>,  a href="+code=rho_ef="(1ss="line" =tp" class="sref">/a>-> a href="+/tcp_hybla.c#L111" io /a> << 3); 
 13 /a>#include <    DESC" class="sref">MODUL1E_PAR13sref">hybla_recalc_pade=minrtt" class="sref"u32" class="sref">u32 /a>  a href="+code=odds" class="sref">oddca" class="sref">ca /a>-> a href="+code=rh)) -namoptL80">
 80 /a>} tcp_is_cw} else moptL115">
115 /a>                /tcp_hybl1a.c#L33" idptL33" class=1"line13" idptL103" class="li116" idptL116" class="line" namoptL116">
116 /a> spa2 class="comnt">/* Th1is is called to refresh 112
116 /a> spa2 class="comnef="+codee" class="sref">inline /1a> vo13min_rtt has changed /spa2	 
116 /a> spa2 class="comnspa2 clasla.c#L36" idptL36" class1="lin13 on the model proposed /spa2a href="net/ipv4/tas l/tctas "net/ipv4/1" idptL121" as ( a L24" clas)/windowne" namoptL116">
116 /a> spa2 class="comnent">    de=hybla" class="sref">h1ybla 13 
12e="a> spa2 class="com/tcp_hybl1a.c#L38" idptL38" class=1"line13default= 1/40 sec = 25 ms),a.c#L117" idptL117e" namoptL12">
 12 /a> ca /a>->1 a hr13; a href="+code=minrtt" class="sref"p="sref">odd /a>,  a href="+code=rho_ef=hybla.c#L111" io /a> << 3); ( a href="+cf">snd_cwnd /a> <  a href="+code=tp" class="sref">tp /a>-> a href="+codeptL80">
 80 /a>} ca /a>->1 a hr139 a href="+code=minrtnd_cwnd" class="srep="sref">odd /a>,  a href="+code=rho_e" namo28moptL110">
110 /a>                code=ca" 1class="sref">ca /a>->1 a hr14sref">hybla_recalc_pade=minrtt" class="sref"s="sref">snd_cwnd_clamp /a> = 65535; odd /a>,  a href="net/ipv">lamp++ptL14">
 14 /a>#include <ca /a>->1 a hr1f="+code=rho2"moptL108">
108 /a> 
 13 /a>#include <rho_frac.4"2s /a>;href="+code=sk" clas"sref">odd /a>,  a href="+code=rho_e"#37;namoptL80">
 80 /a>} hybl14="+code=hybla_en" class="sref">snd_cwnd /a> <  a href="+code=tp" class="sref">tp /a>-> a href="+code=+ref="+code=sk" clas"sref">odd /a>,  a href="+code=rho_e"ine" namoptL42">
 42 /a>} snd_cwnd_cents /a> = 0; rho_frac.4"2s /a>;ptL42">
 42 /a>}     de=tcp_sock" class="sref1">tcp14namoptL27">
 27 /a> spa2 class="comme1href="+co1de=hybla" class="sref">h1ybla 1a> * a href="+the lowest */ /spa2	 
 17 /a>struct
 a href="+co/tcp_hybl1a.c#L49" idptL49" class=1"line14; a href="+cowhile _hybla.c#L111" io /a> << 3); 
115 /a>                code=ca" 1class="sref">ca /a>->1 a hr149 a href="+code=minrtt" class="sref"f">snd_cwnd /a> <  a href="+code=tp" class="sref">tp /a>-> a href="+code++ptL14">
 14 /a>#include <ca /a>->1 a hr15sref">hybla_recalc_param /a>( a hrefo /a> << 3); 
 80 /a>} ca /a>->1 a hr1f="+code=rho_3de=minrtt" class="sref"s="sref">snd_cwnd_clamp /a> = 65535; odd /a>,  a href="net/ipv">lampnamoptL94">
 94 /a> ca /a>->1 a hr1f="+code=rho2_moptL108">
108 /a> ca /a>->1 a hr1f="+code=snd_cwhe lowest */ /spa2	 
 17 /a>struct
 a href="+cocode=ca" 1class="sref">ca /a>->1 a hr15href="+code=snd_cwnd" class="srep="sref">odd /a>,  a href="+code=rho_efamo &&cwnd" class="sre"sref">rho_frac.4"2s /a>;hramo &&cwnd" class="sres="sref">snd_cwnd_clamp /a> = 65535; odd /a>,  a href="net/ipv">lampn"ine=mt" class="sref"f">snd_cwnd /a> <  a href="+code=tp" class="sref">tp /a>-> a href="+codem moptL115">
115 /a>                code=tp" 1class="sref">tp /a>->1 a hr15"sref">tcp_reno_cong_avoid /a>( a hre">snd_cwnd /a> <  a href="+code=tp" class="sref">tp /a>-> a href="+code++ptL14">
 14 /a>#include <    class="sref">tp /a>->1 a hr15" idptL107" class="lit" class="sref"s="sref">snd_cwnd_clamp /a> = 65535; odd /a>,  a href="net/ipv">lampnamoptL94">
 94 /a> 
108 /a> /* 1st Rho measuremen1t bas1d on initial srtt */ /spa2	 
 17 /a>struct
 a href="+cocode=ca" 1a_recalc_param" class="s1ref">15href="+code=rho" class="sref">rhpv4/tcp_hybla.c#L94" idptL94" class="line" moptL110">
110 /a>                /tcp_hybl1a.c#L61" idptL61" class=1"line16sref">hybla_recalc_param /a>( a hreff">snd_cwnd /a> =  a href="+code=ca" class="sref">ca /a>-> a href="+code=rho" class="sref">rhf">/a>-> a href="+/tcp_hybla.c#L111" if">snd_cwnd /a> =  a href="+code=ca" class="sref">ca /a>-> a href="+code=rh=sk" class="sref">sref">snd_ssthresh /a>) { 
 94 /a> /* set minimum rtt as1 this16" namoptL112">
112 /a>         a href=code=ca" 1class="sref">ca /a>->1 a hr1f="+code=minrtt" class="sref"f">snd_cwnd /a> =  a href="+code=ca" class="sref">ca /a>-> a href="+code=rho" class="sref">rhf"> /a>,  a href="+co"> //tcp_hybla.c#L111" itcp_sk /a>( a href="+code=sk" class="sref">">snd_cwnd /a> =  a href="+code=ca" class="sref">ca /a>-> a href="+code=rh=sk" class="sref">sref">snd_ssthresh /a>) { 
 94 /a> tp /a>->1 a hr1f="+comoptL108">
108 /a> 
 95 /a>         spa2 clas1/tcp_hybl1a.c#L66" idptL66" class=1"line1 namop_cong_aref="+code=tp" class="sref=/tcp_hybl_opybla.c#L54" idptsref=/tcp_hybl_opye=rhoode=tp" class="srefca /a> =  a href="+csrefca /ae=rhoode=tp" class="__read_mostly> =  a href="+c__read_mostlye=rho" moptL115">
115 /a>                6t">/* Tcp  Hybla structure. */ /spaa hr16" idptL107" c.wnd" class="srep=ss="sref">sock /ahref="+ca_recalc_pa" class="sref">rhhref="lass="sref">sock /a> * a href="+cptL77">
 77 /a>        }; rh  a href=p_hybla.c#L115" idptL11  a href=p_hybla.="+cptL77">
 77 /a>        }; h1ybla 1a> * a href="+.wnd" class="sreo"> f">ca /a>-> a hro"> f">cne" calc_pa" class="sref">rh  a href=o"> f">ca /a>-> a hr  a href=o"> f">c="+cptL77">
 77 /a>        }; sk /a>,"+code=ack" cllc_pa" class="sref">rhhref="code=sock" class="sref">sock /a> * a href="+cptL77">
 77 /a>        }; ca /a>->1 a hr1f="+code=hybla.wnd" class="srepet" class="sref">TCP_CApet" clas"+code=hyb" class="sref">rhhref=" class="sref">sock /a> * a href="+cptL77">
 77 /a>        }; 
112 /a>         a href=/tcp_hybl1a.c#L73" idptL73" class=1"line172"+code=hybla.wnd" class="sreowneref">rho_frac.4"2wner="+ca_recalc_p href="net/ipv4/tcHIS_,  spaef">rho_frac.4"cHIS_,  spa="+cptL77">
 77 /a>        }; inline /1a>  a173"+code=hybla.wnd" class="srenlinef">rho_frac.4"nlin="+ca_recalc_pa" cspa2	); 
 77 /a>        }; 
 78 /a> u317namoptL16">
 16 /a> spa2 class="commen8, 139, 1152, 165, 181, 197, 215, 1234, 17_state /a>(s= 0; sock /a_ href="+caram /a>( a href="+code=gisteref">rho_frac.4"="+code=gister/tcp_hrefmoptL110">
110 /a>                7de=hybla"  class="sref">hybla /a> {"lin17 namoptL68">
 68 /a>        struct
 a 1/tcp_hybl1a.c#L79" idptL79" class=1"line17="+code=rho_3ls" class="srefBUILD_BUG_ONef">rho_frac.4"BUILD_BUG_ON/tcp_sizeofode=sk" class="sref">skca /a> =  a href="+code=inet_)n"ine class="sref">skICSKs="lPRIVass="sref">frac.4"2sICSKs="lPRIVass="="linptL94">
 94 /a> o1dds /1> <  a href="+codeclass="sref">rh  a hrgisterf=/tcp_hybl_.c#L5" a /a>-> a hr  a hrgisterf=/tcp_hybl_.c#L5" /tcp_&ode=tp" class="srefca /a> =  a href="+csrefca /ae=rhnptL94">
 94 /a> 
 81 /a> 
 82 /a> spa2 class="comme1nt">/* TC1P Hybla main routine. /s1pa2	 1a href_cong_avoid /a>(struct
 a h__exss="sref">sock /a_ exss="+caram /a>( a href="+codune=gisteref">rho_frac.4"="+codune=gister/tcp_hrefmoptL110">
110 /a>                nt"> * Th1is is the algorithm beha1vior:1/spa2	ptL18">
 18 /a>         a href="+co/tcp_hyb1  o Recalc Hybla paramot1ers i18="+code=hybla_en" class="sref   une=gisterf=/tcp_hybl_.c#L5" a /a>-> a hr  a une=gisterf=/tcp_hybl_.c#L5" /tcp_&ode=tp" class="srefca /a> =  a href="+csrefca /ae=rhnptL94">
 94 /a> 
 81 /a> 
 27 /a> spa2 class="comme1nt"> */ /1spa2	 sock /ao, 0644lass/tcp_hybla.c#L111" i="+code=gisteref">rho_frac.4"="+code=gister/tcpnptL94">
 94 /a> bool /a>   line1>hyblaLnd" class="sreo, 0644exss="sref">sock /ao, 0644exss/tcp_hybla.c#L111" i="+codune=gisteref">rho_frac.4"="+codune=gister/tcpnptL94">
 94 /a> 
 70 /a>         a href="+1href="+co1de=tcp_sock" class="sref1">tcp19DESC /a>( a href="+code=rttAUTHORef">rho_frac.4"ode=rttAUTHOR/tcp_hspa2	); 
 31 /a> h1ybla 1a> * a/a>( a href="+code=rttLICENS"sref">frac.4"2sode=rttLICENS"/tcp_hspa2	); 
 31 /a> /* TC1 class="sref">u32 /a>  a1 href1"+code/a>( a href="+code=rtts="sRIPTIONef">rho_frac.4"ode=rtts="sRIPTION/tcp_hspa2	); 
 31 /a>  * Th1is_slowstart" class="sre1f">is1slowst





The original LXR softwarybla.ptL1L31">
 31http://sourceforgeline/projects/lxre>LXR  
 31mailto:lxr@lss="lio">lxr@lss="lioe=rh.


lxr.lss="lio kindly hos21" claL31">
 31http://www.redpill-lssprolio">Redpill Lsspro ASe=rh=sprovider of Lssuxfrac.ul9" id idpopera clas services sibla.1995.