<div dir="ltr">Thank you so much for replying. i really appreciate it.<div>i have two more questions:</div><div>(1) what is the concept of using TCP/Linux with codel. can't we use other TCP Variants</div><div>(2) N what is purpose of using reverse ftps</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Feb 20, 2015 at 11:32 PM,  <span dir="ltr"><<a href="mailto:codel-request@lists.bufferbloat.net" target="_blank">codel-request@lists.bufferbloat.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Send Codel mailing list submissions to<br>
        <a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a><br>
<br>
To subscribe or unsubscribe via the World Wide Web, visit<br>
        <a href="https://lists.bufferbloat.net/listinfo/codel" target="_blank">https://lists.bufferbloat.net/listinfo/codel</a><br>
or, via email, send a message with subject or body 'help' to<br>
        <a href="mailto:codel-request@lists.bufferbloat.net">codel-request@lists.bufferbloat.net</a><br>
<br>
You can reach the person managing the list at<br>
        <a href="mailto:codel-owner@lists.bufferbloat.net">codel-owner@lists.bufferbloat.net</a><br>
<br>
When replying, please edit your Subject line so it is more specific<br>
than "Re: Contents of Codel digest..."<br>
<br>
<br>
Today's Topics:<br>
<br>
   1. Re: Codel code (Kathleen Nichols)<br>
   2. Re: Codel code (Dave Taht)<br>
   3. Setpoint in CoDel (Anjali Chawla)<br>
   4. Re: Setpoint in CoDel (Dave Taht)<br>
   5. Re: Setpoint in CoDel (Dave Taht)<br>
<br>
<br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Thu, 19 Feb 2015 13:34:14 -0800<br>
From: Kathleen Nichols <<a href="mailto:nichols@pollere.com">nichols@pollere.com</a>><br>
To: <a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a><br>
Subject: Re: [Codel] Codel code<br>
Message-ID: <<a href="mailto:54E656D6.5010308@pollere.com">54E656D6.5010308@pollere.com</a>><br>
Content-Type: text/plain; charset=windows-1252<br>
<br>
<br>
I'll reply list in case anyone else is interested. Just delete if you<br>
are fortunate enough to<br>
have nothing to do with ns-2.<br>
<br>
First of all, I'm as much a victim of ns-2's tcl as the next person and<br>
secondly, I will<br>
tell you what I remember without looking at the c++ code, but would<br>
recommend<br>
you take a look at that for some of the settings.<br>
<br>
The first commented line just shows how you can set stuff on the command<br>
line and what<br>
the different variables are. This particular script is using PackMime to<br>
generate web<br>
traffic though there is also an update of a web script I wrote many<br>
years ago and<br>
CableLabs paid me to update. I also used that for some codel tests. So<br>
this can run<br>
a mix of f ftp connections, w web connections per sec, c constant bit<br>
rate connections<br>
through a bottleneck of b Mbps. Use s to set the file size that the ftps<br>
transfer and if<br>
set to -1 the ftps are infinite, that is don't terminate over the<br>
simulation run. This avoids<br>
lots of slow starts. d is something I used to get the dynamic bandwidth<br>
thing to work,<br>
that is it makes the bottleneck link change periodically (you can see<br>
the plot of this<br>
in the ACM CoDel paper). Reverse ftps are sourced at the opposite end of<br>
the bottleneck<br>
so they create acks in the "forward" direction.<br>
<br>
There is a routine called build_cbr and that's where the rate and packet<br>
size for the CBRs is set. This sets dynamic bw to 0 so the bandwidth<br>
doesn't change unless set in the command line to do so. I don't remember<br>
off hand what greedy is. I think it sets one<br>
ftp to be "greedy".<br>
<br>
A bunch of this you should try to figure out for yourself by looking at<br>
ns2 documentation<br>
and perhaps at the agent .cc files.<br>
<br>
The nominal RTT is what is "expected" and is used as the interval but<br>
the real rtt is what<br>
is actually experienced in the particular experiment. I will use this<br>
opportunity once again<br>
to note that CoDel is actually more sensitive to this parameter than to<br>
target in the sense<br>
that excess drops will happen if the real rtt is longer than the<br>
interval (I keep trying to<br>
explain this but no one hears it.)<br>
<br>
Code to set the random seed. Sometimes you want different runs to use<br>
different random<br>
seeds and sometimes you want to run exactly the same scenario.<br>
<br>
There's a bunch of parameters to the TCP agents. Some of these are in<br>
ns2 documentation,<br>
but you can find it in the code also.<br>
<br>
Just a note that I couldn't get the ns2 TCP/Linux code to work the way<br>
it was supposed to,<br>
specifically the idle() routine never seemed to get called. (This sort<br>
of thing is pretty<br>
common with ns2) and I didn't want to waste a lot of time untangling the<br>
tcl-c++<br>
relationship in ns2. Anyway, so I wrote those tcl procedures to get the<br>
ftps to restart.<br>
I wanted to run more modern TCPs, hence use of the Linux TCP.<br>
<br>
The dynamic bandwidth thing changes the bandwidth and preset times. It<br>
does it by multiplying the original bandwidth so I set up an array of<br>
the mulipliers. I'm sure there's<br>
a more elegant way to do it but, at this stage of my life, I have<br>
accepted that I don't do<br>
elegant. I'm more of a "get the job done" kind of coder. And I really<br>
don't like ns2 so I<br>
generally find it works better to just whack it with a hammer rather<br>
than to try to do<br>
something beautifully. Note, as above, that a lot of the stuff in ns2<br>
just doesn't work.<br>
<br>
There is code to build up the topology which shouldn't be that hard to<br>
figure out.<br>
<br>
        Kathie<br>
<br>
On 2/18/15 11:19 PM, kanu monga wrote:<br>
> is there anyone who can help me in understanding tcl code of codel(given<br>
> below)<br>
> This one is quite complex for me.<br>
> please help if you can.<br>
> Thanks in advance.<br>
><br>
> ###################################################################<br>
><br>
><br>
> # ns codel.tcl f w c {b}Mb s d r<br>
> # where:<br>
> #f = # ftps<br>
> #w = # PackMime connections per second<br>
> #c = # CBRs<br>
> #b = bottleneck bandwidth in Mbps<br>
> #s = filesize for ftp, -1 for infinite<br>
> #d = dynamic bandwidth, if non-zero, changes (kind of kludgey)<br>
> #have to set the specific change ratios in this file (below)<br>
> #r = number of "reverse" ftps<br>
><br>
> set stopTime 300<br>
> set ns [new Simulator]<br>
><br>
> # These are defaults if values not set on command line<br>
><br>
> set num_ftps 1<br>
> set web_rate 0<br>
> set revftp 0<br>
> set num_cbrs 0<br>
> #rate and packetSize set in build_cbr<br>
> set bottleneck 3Mb<br>
> #for a 10MB ftp<br>
> set filesize 10000000<br>
> set dynamic_bw 0<br>
> set greedy 0<br>
><br>
> # Parse command line<br>
><br>
> if {$argc >= 1} {<br>
>     set num_ftps [lindex $argv 0]<br>
>     if {$argc >= 2} {<br>
>         set web_rate [lindex $argv 1]<br>
>         if {$argc >= 3} {<br>
>             set num_cbrs [lindex $argv 2]<br>
>             if {$argc >= 4} {<br>
>             set bottleneck [lindex $argv 3]<br>
>    if {$argc >= 5} {<br>
> set filesize [lindex $argv 4]<br>
>   if {$argc >= 6} {<br>
> set dynamic_bw [lindex $argv 5]<br>
>   if {$argc >= 7} {<br>
> set revftp [lindex $argv 6]<br>
>    }<br>
>    }<br>
>         }<br>
>         }<br>
> }<br>
>     }<br>
> }<br>
><br>
> set bw [bw_parse $bottleneck]<br>
> if { $revftp >= 1} {<br>
> set num_revs $revftp<br>
> } else {<br>
> set num_revs 0<br>
> }<br>
> puts "ftps $num_ftps webrate $web_rate cbrs $num_cbrs bw $bw filesize<br>
> $filesize reverse $num_revs"<br>
><br>
> # experiment settings<br>
> set psize 1500<br>
> if { $bw < 1000000} { set psize 500 }<br>
> set nominal_rtt [delay_parse 100ms]<br>
> set accessdly 20<br>
> set bdelay 10<br>
> set realrtt [expr 2*(2*$accessdly + $bdelay)]<br>
> puts "accessdly $accessdly bneckdly $bdelay realrtt $realrtt bneckbw $bw"<br>
><br>
> # CoDel values<br>
> # interval to keep min over<br>
> set interval [delay_parse 100ms]<br>
> # target in ms.<br>
> set target [delay_parse 5ms]<br>
><br>
> global defaultRNG<br>
> $defaultRNG seed 0<br>
> ns-random 0<br>
> #$defaultRNG seed 54321<br>
> #ns-random 23145<br>
><br>
> # ------- config info is all above this line ----------<br>
><br>
> #bdp in packets, based on the nominal rtt<br>
> set bdp [expr round($bw*$nominal_rtt/(8*$psize))]<br>
><br>
> Trace set show_tcphdr_ 1<br>
> set startTime 0.0<br>
><br>
> #TCP parameters - have to set both for FTPs and PackMime<br>
><br>
> Agent/TCP set window_ [expr $bdp*16]<br>
> Agent/TCP set segsize_ [expr $psize-40]<br>
> Agent/TCP set packetSize_ [expr $psize-40]<br>
> Agent/TCP set windowInit_ 4<br>
> Agent/TCP set segsperack_ 1<br>
> Agent/TCP set timestamps_ true<br>
> set delack 0.4<br>
> Agent/TCP set interval_ $delack<br>
><br>
> Agent/TCP/FullTcp set window_ [expr $bdp*16]<br>
> Agent/TCP/FullTcp set segsize_ [expr $psize-40]<br>
> Agent/TCP/FullTcp set packetSize_ [expr $psize-40]<br>
> Agent/TCP/FullTcp set windowInit_ 4<br>
> Agent/TCP/FullTcp set segsperack_ 1<br>
> Agent/TCP/FullTcp set timestamps_ true<br>
> Agent/TCP/FullTcp set interval_ $delack<br>
><br>
><br>
> Agent/TCP/Linux instproc done {} {<br>
> global ns filesize<br>
> #this doesn't seem to work, had to hack tcp-linux.cc to do repeat ftps<br>
> $self set closed_ 0<br>
> #needs to be delayed by at least .3sec to slow start<br>
> puts "[$ns now] TCP/Linux proc done called"<br>
> $ns at [expr [$ns now] + 0.3] "$self send $filesize"<br>
> }<br>
><br>
> # problem is that idle() in tcp.cc never seems to get called...<br>
> Application/FTP instproc resume {} {<br>
> puts "called resume"<br>
>         global filesize<br>
>         $self send $filesize<br>
> #$ns at [expr [$ns now] + 0.5] "[$self agent] reset"<br>
> $ns at [expr [$ns now] + 0.5] "[$self agent] send $filesize"<br>
> }<br>
><br>
> Application/FTP instproc fire {} {<br>
>         global filesize<br>
>         $self instvar maxpkts_<br>
>         set maxpkts_ $filesize<br>
> [$self agent] set maxpkts_ $filesize<br>
>         $self send $maxpkts_<br>
> puts "fire() FTP"<br>
> }<br>
><br>
> #buffersizes<br>
> set buffersize [expr $bdp]<br>
> set buffersize1 [expr $bdp*10]<br>
><br>
> Queue/CoDel set target_ $target<br>
> Queue/CoDel set interval_ $interval<br>
><br>
> #set Flow_id 1<br>
><br>
> proc build_topology { ns } {<br>
>     # nodes n0 and n1 are the server and client side gateways and<br>
>     # the link between them is the congested slow link. n0 -> n1<br>
>     # handles all the server to client traffic.<br>
>     #<br>
>     # if the web_rate is non-zero, node n2 will be the packmime server cloud<br>
>     # and node n3 will be the client cloud.<br>
>     #<br>
>     # num_ftps server nodes and client nodes are created for the ftp<br>
> sessions.<br>
>     # the first client node is n{2+w} and the first server node is n{2+f+w}<br>
>     # where 'f' is num_ftps and 'w' is 1 if web_rate>0 and 0 otherwise.<br>
>     # servers will be even numbered nodes, clients odd<br>
>     # Warning: the numbering here is ridiculously complicated<br>
><br>
>     global bw bdelay accessdly buffersize buffersize1 filesize node_cnt<br>
>     set node_cnt 2<br>
><br>
>     # congested link<br>
>     global n0 n1<br>
>     set n0 [$ns node]<br>
>     set n1 [$ns node]<br>
>     $ns duplex-link $n0 $n1 $bw ${bdelay}ms CoDel<br>
>     $ns duplex-link-op $n0 $n1 orient right<br>
>     $ns duplex-link-op $n0 $n1 queuePos 0.5<br>
>     $ns duplex-link-op $n1 $n0 queuePos 1.5<br>
>     $ns queue-limit $n0 $n1 $buffersize<br>
>     $ns queue-limit $n1 $n0 $buffersize<br>
>     set node_cnt 2<br>
><br>
>     #dynamic bandwidth<br>
>     # these are the multipliers for changing bw, times initial set bw<br>
>     # edit these values to get different patterns<br>
>     global stopTime dynamic_bw<br>
>     array names bw_changes<br>
>     set bw_changes(1) 0.1<br>
>     set bw_changes(2) 0.01<br>
>     set bw_changes(3) 0.5<br>
>     set bw_changes(4) 0.01<br>
>     set bw_changes(5) 1.0<br>
><br>
>     puts "bottleneck starts at [[[$ns link $n0 $n1] link] set<br>
> bandwidth_]bps"<br>
>     for {set k 1} {$k <= $dynamic_bw} {incr k 1} {<br>
> set changeTime [expr $k*$stopTime/($dynamic_bw+1)]<br>
> set f $bw_changes($k)<br>
> set newBW [expr $f*$bw]<br>
> puts "change at $changeTime to [expr $newBW/1000000.]Mbps"<br>
> $ns at $changeTime "[[$ns link $n0 $n1] link] set bandwidth_ $newBW"<br>
> $ns at $changeTime "[[$ns link $n1 $n0] link] set bandwidth_ $newBW"<br>
> $ns at $changeTime "puts $newBW"<br>
>     }<br>
><br>
>     set li_10 [[$ns link $n1 $n0] queue]<br>
>     set li_01 [[$ns link $n0 $n1] queue]<br>
><br>
>     set tchan_ [open /tmp/<a href="http://redqvar.tr" target="_blank">redqvar.tr</a> <<a href="http://redqvar.tr" target="_blank">http://redqvar.tr</a>> w]<br>
>     $li_01 trace curq_<br>
>     $li_01 trace d_exp_<br>
>     $li_01 attach $tchan_<br>
><br>
>     global num_ftps web_rate num_cbrs greedy num_revs<br>
>     set linkbw [expr $bw*10]<br>
><br>
>     set w [expr $web_rate > 0]<br>
>     if {$w} {<br>
>         global n2 n3<br>
> #server<br>
>         set n2 [$ns node]<br>
>         $ns duplex-link $n2 $n0 $linkbw ${accessdly}ms DropTail<br>
>         $ns queue-limit $n2 $n0 $buffersize1<br>
>         $ns queue-limit $n0 $n2 $buffersize1<br>
><br>
> #client<br>
>         set n3 [$ns node]<br>
>         $ns duplex-link $n1 $n3 $linkbw ${accessdly}ms DropTail<br>
>         $ns queue-limit $n1 $n3 $buffersize1<br>
>         $ns queue-limit $n3 $n1 $buffersize1<br>
> set node_cnt 4<br>
>     }<br>
> #need to fix the angles if use nam<br>
>     for {set k 0} {$k < $num_ftps} {incr k 1} {<br>
>         # servers<br>
>         set j $node_cnt<br>
>         global n$j<br>
>         set n$j [$ns node]<br>
> if {$greedy > 0 && $k == 0} {<br>
>          $ns duplex-link [set n$j] $n0 $linkbw 1ms DropTail<br>
> } else {<br>
>          $ns duplex-link [set n$j] $n0 $linkbw ${accessdly}ms DropTail<br>
> }<br>
>         $ns queue-limit [set n$j] $n0 $buffersize1<br>
>         $ns queue-limit $n0 [set n$j] $buffersize1<br>
>         set angle [expr $num_ftps>1? 0.75+($k-1)*.5/($num_ftps-1) : 1]<br>
>         $ns duplex-link-op $n0 [set n$j] orient $angle<br>
> incr node_cnt<br>
><br>
>         # clients<br>
>         set j $node_cnt<br>
>         global n$j<br>
>         set n$j [$ns node]<br>
>         set dly [expr ${accessdly} +($k+1)]<br>
>         $ns duplex-link $n1 [set n$j] $linkbw  ${dly}ms  DropTail<br>
>         $ns queue-limit $n1 [set n$j] $buffersize1<br>
>         $ns queue-limit [set n$j] $n1 $buffersize1<br>
>         set angle [expr $num_ftps>1? fmod(2.25-($k-1)*.5/($num_ftps-1),<br>
> 2) : 0]<br>
>         $ns duplex-link-op $n1 [set n$j] orient $angle<br>
> incr node_cnt<br>
>     }<br>
>     for {set k 0} {$k < $num_cbrs} {incr k 1} {<br>
>         # servers<br>
>         set j $node_cnt<br>
>         global n$j<br>
>         set n$j [$ns node]<br>
>         $ns duplex-link [set n$j] $n0 $linkbw ${accessdly}ms DropTail<br>
>         $ns queue-limit [set n$j] $n0 $buffersize1<br>
>         $ns queue-limit $n0 [set n$j] $buffersize1<br>
> #        set angle [expr $num_cbrs>1? 0.75+($k-1)*.5/($num_cbrs-1) : 1]<br>
>         $ns duplex-link-op $n0 [set n$j] orient $angle<br>
> incr node_cnt<br>
><br>
>         # clients<br>
>         set j $node_cnt<br>
>         global n$j<br>
>         set n$j [$ns node]<br>
>         $ns duplex-link $n1 [set n$j] $linkbw  ${accessdly}ms  DropTail<br>
>         $ns queue-limit $n1 [set n$j] $buffersize1<br>
>         $ns queue-limit [set n$j] $n1 $buffersize1<br>
> #        set angle [expr $num_cbrs>1? fmod(2.25-($k-1)*.5/($num_ftps-1),<br>
> 2) : 0]<br>
>         $ns duplex-link-op $n1 [set n$j] orient $angle<br>
> incr node_cnt<br>
>     }<br>
> #reverse direction ftps<br>
>     for {set k 0} {$k < $num_revs} {incr k 1} {<br>
>         # clients<br>
>         set j $node_cnt<br>
>         global n$j<br>
>         set n$j [$ns node]<br>
>         $ns duplex-link [set n$j] $n0 $linkbw ${accessdly}ms DropTail<br>
>         $ns queue-limit [set n$j] $n0 $buffersize1<br>
>         $ns queue-limit $n0 [set n$j] $buffersize1<br>
>         set angle [expr $num_ftps>1? 0.75+($k-1)*.5/($num_ftps-1) : 1]<br>
>         $ns duplex-link-op $n0 [set n$j] orient $angle<br>
> incr node_cnt<br>
><br>
>         # servers<br>
>         set j $node_cnt<br>
>         global n$j<br>
>         set n$j [$ns node]<br>
>         set dly [expr ($accessdly)*1.1 +($k+1)]<br>
>         $ns duplex-link $n1 [set n$j] $linkbw  ${dly}ms  DropTail<br>
>         $ns queue-limit $n1 [set n$j] $buffersize1<br>
>         $ns queue-limit [set n$j] $n1 $buffersize1<br>
>         set angle [expr $num_ftps>1? fmod(2.25-($k-1)*.5/($num_ftps-1),<br>
> 2) : 0]<br>
>         $ns duplex-link-op $n1 [set n$j] orient $angle<br>
> incr node_cnt<br>
>     }<br>
> }<br>
><br>
> proc build_cbr {cnd snd startTime timeToStop Flow_id} {<br>
>     global ns<br>
>     set udp [$ns create-connection UDP $snd LossMonitor $cnd $Flow_id]<br>
>     set cbr [new Application/Traffic/CBR]<br>
>     $cbr attach-agent $udp<br>
>     # change these for different types of CBRs<br>
>     $cbr set packetSize_ 100<br>
>     $cbr set rate_ 0.064Mb<br>
>     $ns at $startTime "$cbr start"<br>
>     $ns at $timeToStop "$cbr stop"<br>
> }<br>
><br>
> # cnd is client node, snd is server node<br>
> proc build_ftpclient {cnd snd startTime timeToStop Flow_id} {<br>
><br>
>     global ns filesize greedy revftp<br>
>     set ctcp [$ns create-connection TCP/Linux $snd TCPSink/Sack1 $cnd<br>
> $Flow_id]<br>
>     $ctcp select_ca cubic<br>
>     set ftp [$ctcp attach-app FTP]<br>
>     $ftp set enableResume_ true<br>
>     $ftp set type_ FTP<br>
><br>
> #set up a single infinite ftp with smallest RTT<br>
>     if {$greedy > 0 || $filesize < 0} {<br>
>      $ns at $startTime "$ftp start"<br>
>      set greedy 0<br>
>     } else {<br>
>      $ns at $startTime "$ftp send $filesize"<br>
>     }<br>
>     $ns at $timeToStop "$ftp stop"<br>
> }<br>
><br>
> proc build_webs {cnd snd rate startTime timeToStop} {<br>
>     set CLIENT 0<br>
>     set SERVER 1<br>
><br>
>     # SETUP PACKMIME<br>
>     set pm [new PackMimeHTTP]<br>
>     $pm set-TCP Sack<br>
>     $pm set-client $cnd<br>
>     $pm set-server $snd<br>
>     $pm set-rate $rate;                    # new connections per second<br>
>     $pm set-http-1.1;                      # use HTTP/1.1<br>
><br>
>     # create RandomVariables<br>
>     set flow_arrive [new RandomVariable/PackMimeHTTPFlowArrive $rate]<br>
>     set req_size [new RandomVariable/PackMimeHTTPFileSize $rate $CLIENT]<br>
>     set rsp_size [new RandomVariable/PackMimeHTTPFileSize $rate $SERVER]<br>
><br>
>     # assign RNGs to RandomVariables<br>
>     $flow_arrive use-rng [new RNG]<br>
>     $req_size use-rng [new RNG]<br>
>     $rsp_size use-rng [new RNG]<br>
><br>
>     # set PackMime variables<br>
>     $pm set-flow_arrive $flow_arrive<br>
>     $pm set-req_size $req_size<br>
>     $pm set-rsp_size $rsp_size<br>
><br>
>     global ns<br>
>     $ns at $startTime "$pm start"<br>
>     $ns at $timeToStop "$pm stop"<br>
> }<br>
><br>
> proc uniform {a b} {<br>
> expr $a + (($b- $a) * ([ns-random]*1.0/0x7fffffff))<br>
> }<br>
><br>
> proc finish {} {<br>
>         global ns<br>
> $ns halt<br>
>         $ns flush-trace<br>
>         exit 0<br>
> }<br>
><br>
> # $ns namtrace-all [open out.nam w]<br>
> # $ns color 2 blue<br>
> # $ns color 3 red<br>
> # $ns color 4 yellow<br>
> # $ns color 5 green<br>
><br>
> build_topology $ns<br>
><br>
> #$ns trace-queue $n0 $n1 [open <a href="http://out_n0ton1.tr" target="_blank">out_n0ton1.tr</a> <<a href="http://out_n0ton1.tr" target="_blank">http://out_n0ton1.tr</a>> w]<br>
> #set fname f${num_ftps}w${web_rate}b${bottleneck}.tr<br>
> set fname <a href="http://f.tr" target="_blank">f.tr</a> <<a href="http://f.tr" target="_blank">http://f.tr</a>><br>
> puts $fname<br>
> $ns trace-queue $n0 $n1 [open /tmp/$fname w]<br>
> #reverse direction<br>
> #$ns trace-queue $n1 $n0 [open /tmp/$fname w]<br>
><br>
> set node_cnt 2<br>
> if {$web_rate > 0} {<br>
>         build_webs $n3 $n2 $web_rate 0 $stopTime<br>
> set node_cnt 4<br>
> }<br>
><br>
> for {set k 1} {$k <= $num_ftps} {incr k 1} {<br>
>     set j $node_cnt<br>
>     incr node_cnt<br>
>     set i $node_cnt<br>
>     build_ftpclient [set n$i] [set n$j]  \<br>
>  $startTime $stopTime $i<br>
> # [expr 1.0*($k-1)] $stopTime $i<br>
> # [expr $startTime+($k-1)*[uniform 0.0 2.0]] $stopTime $i<br>
>     incr node_cnt<br>
> }<br>
><br>
> for {set k 1} {$k <= $num_cbrs} {incr k 1} {<br>
>     set j $node_cnt<br>
>     incr node_cnt<br>
>     set i $node_cnt<br>
>     build_cbr [set n$i] [set n$j]  \<br>
>  [expr $startTime+($k-1)*[uniform 0.0 2.0]] $stopTime $i<br>
>     incr node_cnt<br>
> }<br>
><br>
> #for reverse direction, give client smaller number<br>
> for {set k 1} {$k <= $num_revs} {incr k 1} {<br>
>     set j $node_cnt<br>
>     incr node_cnt<br>
>     set i $node_cnt<br>
>     build_ftpclient [set n$j] [set n$i] $startTime $stopTime $j<br>
>     incr node_cnt<br>
> }<br>
><br>
> $ns at [expr $stopTime ] "finish"<br>
> $ns run<br>
> exit 0<br>
> ###################################################################<br>
><br>
><br>
> _______________________________________________<br>
> Codel mailing list<br>
> <a href="mailto:Codel@lists.bufferbloat.net">Codel@lists.bufferbloat.net</a><br>
> <a href="https://lists.bufferbloat.net/listinfo/codel" target="_blank">https://lists.bufferbloat.net/listinfo/codel</a><br>
><br>
<br>
<br>
<br>
------------------------------<br>
<br>
Message: 2<br>
Date: Thu, 19 Feb 2015 13:38:53 -0800<br>
From: Dave Taht <<a href="mailto:dave.taht@gmail.com">dave.taht@gmail.com</a>><br>
To: Kathleen Nichols <<a href="mailto:nichols@pollere.com">nichols@pollere.com</a>><br>
Cc: "<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a>" <<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a>><br>
Subject: Re: [Codel] Codel code<br>
Message-ID:<br>
        <CAA93jw5dWzXfEX70w1PFmPudH+qfurq=<a href="mailto:e4Srbth2%2Bf4QC2h4Og@mail.gmail.com">e4Srbth2+f4QC2h4Og@mail.gmail.com</a>><br>
Content-Type: text/plain; charset=UTF-8<br>
<br>
I am fairly happy with the example codel code that is now in the ns3 branch,<br>
which is pure c++, and quite a bit easier to understand than tcl, to my eye.<br>
<br>
<a href="https://www.nsnam.org/doxygen/codel-vs-droptail-asymmetric_8cc.html" target="_blank">https://www.nsnam.org/doxygen/codel-vs-droptail-asymmetric_8cc.html</a><br>
<br>
regrettably the fq_codel version for ns3 is still out of tree.<br>
<br>
<br>
------------------------------<br>
<br>
Message: 3<br>
Date: Fri, 20 Feb 2015 00:46:11 -0800<br>
From: Anjali Chawla <<a href="mailto:anjaliachawla013@gmail.com">anjaliachawla013@gmail.com</a>><br>
To: <a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a><br>
Subject: [Codel] Setpoint in CoDel<br>
Message-ID:<br>
        <CAL6QuG8ktPQgrGkA+wp9V=<a href="mailto:BHqdcQh4E19dsX02Pozh_fjfJ%2B0w@mail.gmail.com">BHqdcQh4E19dsX02Pozh_fjfJ+0w@mail.gmail.com</a>><br>
Content-Type: text/plain; charset="utf-8"<br>
<br>
Hi<br>
anyone please explain me what is concept behind  setpoint in codel<br>
algorithm??<br>
Thanks<br>
-------------- next part --------------<br>
An HTML attachment was scrubbed...<br>
URL: <<a href="https://lists.bufferbloat.net/pipermail/codel/attachments/20150220/285d07dd/attachment-0001.html" target="_blank">https://lists.bufferbloat.net/pipermail/codel/attachments/20150220/285d07dd/attachment-0001.html</a>><br>
<br>
------------------------------<br>
<br>
Message: 4<br>
Date: Fri, 20 Feb 2015 01:21:13 -0800<br>
From: Dave Taht <<a href="mailto:dave.taht@gmail.com">dave.taht@gmail.com</a>><br>
To: Anjali Chawla <<a href="mailto:anjaliachawla013@gmail.com">anjaliachawla013@gmail.com</a>><br>
Cc: "<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a>" <<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a>><br>
Subject: Re: [Codel] Setpoint in CoDel<br>
Message-ID:<br>
        <<a href="mailto:CAA93jw43TJdo9FK61HK0et3Mopq8-YKjjkNm_6_OF7%2Bg0iMipw@mail.gmail.com">CAA93jw43TJdo9FK61HK0et3Mopq8-YKjjkNm_6_OF7+g0iMipw@mail.gmail.com</a>><br>
Content-Type: text/plain; charset=UTF-8<br>
<br>
the best talk on the subject was van?s at ietf, it is well worth<br>
watching multiple times.<br>
<br>
<a href="http://www.bufferbloat.net/projects/cerowrt/wiki/Bloat-videos" target="_blank">http://www.bufferbloat.net/projects/cerowrt/wiki/Bloat-videos</a><br>
<br>
He goes deeply into the reasoning behind the sojourn time, and setpoint.<br>
<br>
About the only other somewhat in-depth talk on how codel really works<br>
was my attempt at stanford.<br>
<br>
and there are of course other talks above that try to describe bits of<br>
the elephant.<br>
<br>
One of these days I hope someone puts together the definitive talk on<br>
codel complete with even more elegant demos than stephen hemminger<br>
came up with..., but it does seem to be really hard for people to get<br>
at a deep level... most of my own talks are more about fq than<br>
fq_codel, and that is *tons* easier to explain.<br>
<br>
If you watch them all a bunch of times, and run a few experiments of<br>
your own, enlightenment will come. For me, it was seeing kathie give<br>
the first public explanation of codel - about midway through I started<br>
vibrating in my seat - but I had just completed a slash and burn tour<br>
through all the aqm literature going back 30 years, and trying<br>
everything that seemed to make sense. I don?t know how to impart that<br>
in an email...<br>
<br>
<br>
On Fri, Feb 20, 2015 at 12:46 AM, Anjali Chawla<br>
<<a href="mailto:anjaliachawla013@gmail.com">anjaliachawla013@gmail.com</a>> wrote:<br>
> Hi<br>
> anyone please explain me what is concept behind  setpoint in codel<br>
> algorithm??<br>
> Thanks<br>
><br>
> _______________________________________________<br>
> Codel mailing list<br>
> <a href="mailto:Codel@lists.bufferbloat.net">Codel@lists.bufferbloat.net</a><br>
> <a href="https://lists.bufferbloat.net/listinfo/codel" target="_blank">https://lists.bufferbloat.net/listinfo/codel</a><br>
><br>
<br>
<br>
<br>
--<br>
Dave T?ht<br>
<br>
thttp://<a href="http://www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks" target="_blank">www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks</a><br>
<br>
<br>
------------------------------<br>
<br>
Message: 5<br>
Date: Fri, 20 Feb 2015 10:01:54 -0800<br>
From: Dave Taht <<a href="mailto:dave.taht@gmail.com">dave.taht@gmail.com</a>><br>
To: Anjali Chawla <<a href="mailto:anjaliachawla013@gmail.com">anjaliachawla013@gmail.com</a>><br>
Cc: "<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a>" <<a href="mailto:codel@lists.bufferbloat.net">codel@lists.bufferbloat.net</a>><br>
Subject: Re: [Codel] Setpoint in CoDel<br>
Message-ID:<br>
        <CAA93jw7147Ucy=<a href="mailto:fRmt-65VuUSDyVwHwH9NCmOFjq4GULYGC63A@mail.gmail.com">fRmt-65VuUSDyVwHwH9NCmOFjq4GULYGC63A@mail.gmail.com</a>><br>
Content-Type: text/plain; charset=UTF-8<br>
<br>
On Fri, Feb 20, 2015 at 1:21 AM, Dave Taht <<a href="mailto:dave.taht@gmail.com">dave.taht@gmail.com</a>> wrote:<br>
> the best talk on the subject was van?s at ietf, it is well worth<br>
> watching multiple times.<br>
><br>
> <a href="http://www.bufferbloat.net/projects/cerowrt/wiki/Bloat-videos" target="_blank">http://www.bufferbloat.net/projects/cerowrt/wiki/Bloat-videos</a><br>
><br>
> He goes deeply into the reasoning behind the sojourn time, and setpoint.<br>
><br>
> About the only other somewhat in-depth talk on how codel really works<br>
> was my attempt at stanford.<br>
<br>
The stanford talk took some digging to find. I would really like a shot<br>
at a do-over one day - or for van to give his talk again to be filmed at<br>
high quality.<br>
<br>
<a href="https://www.youtube.com/watch?v=Mxoa5Si4Ubw" target="_blank">https://www.youtube.com/watch?v=Mxoa5Si4Ubw</a><br>
<br>
><br>
> and there are of course other talks above that try to describe bits of<br>
> the elephant.<br>
><br>
> One of these days I hope someone puts together the definitive talk on<br>
> codel complete with even more elegant demos than stephen hemminger<br>
> came up with..., but it does seem to be really hard for people to get<br>
> at a deep level... most of my own talks are more about fq than<br>
> fq_codel, and that is *tons* easier to explain.<br>
><br>
> If you watch them all a bunch of times, and run a few experiments of<br>
> your own, enlightenment will come. For me, it was seeing kathie give<br>
> the first public explanation of codel - about midway through I started<br>
> vibrating in my seat - but I had just completed a slash and burn tour<br>
> through all the aqm literature going back 30 years, and trying<br>
> everything that seemed to make sense. I don?t know how to impart that<br>
> in an email...<br>
><br>
><br>
> On Fri, Feb 20, 2015 at 12:46 AM, Anjali Chawla<br>
> <<a href="mailto:anjaliachawla013@gmail.com">anjaliachawla013@gmail.com</a>> wrote:<br>
>> Hi<br>
>> anyone please explain me what is concept behind  setpoint in codel<br>
>> algorithm??<br>
>> Thanks<br>
>><br>
>> _______________________________________________<br>
>> Codel mailing list<br>
>> <a href="mailto:Codel@lists.bufferbloat.net">Codel@lists.bufferbloat.net</a><br>
>> <a href="https://lists.bufferbloat.net/listinfo/codel" target="_blank">https://lists.bufferbloat.net/listinfo/codel</a><br>
>><br>
><br>
><br>
><br>
> --<br>
> Dave T?ht<br>
><br>
> thttp://<a href="http://www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks" target="_blank">www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks</a><br>
<br>
<br>
<br>
--<br>
Dave T?ht<br>
<br>
thttp://<a href="http://www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks" target="_blank">www.bufferbloat.net/projects/bloat/wiki/Upcoming_Talks</a><br>
<br>
<br>
------------------------------<br>
<br>
_______________________________________________<br>
Codel mailing list<br>
<a href="mailto:Codel@lists.bufferbloat.net">Codel@lists.bufferbloat.net</a><br>
<a href="https://lists.bufferbloat.net/listinfo/codel" target="_blank">https://lists.bufferbloat.net/listinfo/codel</a><br>
<br>
<br>
End of Codel Digest, Vol 29, Issue 4<br>
************************************<br>
</blockquote></div><br></div>