Initial version of RED/GRED support. Chris is going to have to finish
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.
Showing with 348 additions and 39 deletions