Skip to content
  • Leigh B. Stoller's avatar
    Initial version of RED/GRED support. Chris is going to have to finish · f35ce7e3
    Leigh B. Stoller authored
    this off, but here is what I did.
    
    Parser: Allow for the following syntax
    
    	set link0  [$ns duplex-link $nodeA $nodeB 100Mb 0ms RED]
    	set queue0 [[$ns link $nodeA $nodeB] queue]
    	$queue0 set gentle_ 1
    	$queue0 set queue-in-bytes_ 0
    	$queue0 set limit_ 50
    	$queue0 set maxthresh_ 20
    	$queue0 set thresh_ 7
    	$queue0 set linterm_ 11
    	$queue0 set q_weight_ 0.004
    
        NB: This differs from the NS syntax (and is the part that Chris
        needs to fix) in that there is just a single queue object per
        duplex link, thus the parameters cannot be set asymmetrically.
        Note, the delay node *does* use a RED/GRED queue in each
        direction, but its params are the same. These TCL hacks took a
        long time for me to get right!
    
        Also note that I have no idea how this stuff relates to LANS! I
        do not allow LANS to be created with RED queues (another item for
        Chris to work on perhaps?).
    
    assign_wrapper: A horrible hack to pass the new fields added to
    virt_lans onto the delays table setup. Also another minor hack ensure
    that a delay node is added when a RED queue is used (for the case when
    no other traffic shaping is done). At the moment, the virt_lans table
    has a single set of fields, while the delays table has the double set;
    one for each direction of the pipe. Here is a listing.
    
        alter table delays add q0_limit int default 0 after lossrate0;
        alter table delays add q0_maxthresh int default 0 after q0_limit;
        alter table delays add q0_minthresh int default 0 after q0_maxthresh;
        alter table delays add q0_weight float default 0.0 after q0_minthresh;
        alter table delays add q0_linterm int default 0 after q0_weight;
        alter table delays add q0_qinbytes tinyint default 0 after q0_linterm;
        alter table delays add q0_bytes tinyint default 0 after q0_qinbytes;
        alter table delays add q0_meanpsize int default 0 after q0_bytes;
        alter table delays add q0_wait int default 0 after q0_meanpsize;
        alter table delays add q0_setbit int default 0 after q0_wait;
        alter table delays add q0_droptail int default 0 after q0_setbit;
        alter table delays add q0_red tinyint default 0 after q0_droptail;
        alter table delays add q0_gentle tinyint default 0 after q0_red;
    
    tmcd/tmcd.c: Change dodelays to pass back all of these fields (for
    both pipes; there are equiv q1 fields in the delays table). Yikes! Its
    done in a backwards compatable manner though, so existing delay nodes
    will continue to work just fine.
    
    tmcd/freebsd/liblocsetup.pm: Change the delays configuration script to
    get all these fields and do something useful with. Of course, our
    delay nodes cannot use a lot of these fields, but the information is
    sent through for the eventuality that we have more sophisticated
    delays nodes.
    
    Test Suite: Add red test dir that has the above syntax as its test.
    f35ce7e3