[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

priorities in CBQ seem not to work



I use the CBQ queuing with priorities in my simulations.  I have
traffic of small UDP packets that I want to be served with high
priority.  Another traffic flow generates large TCP packet, that are
inserted into a lower priority class the queue is set as follows:

proc link {n1 n2 bw delay qtype} {
    global ns

    $ns duplex-link $n1 $n2 $bw $delay $qtype
    if {$qtype == "CBQ"} {
	conf_queue $n1 $n2 RIO
    }
}
    
proc conf_queue {n1 n2 qtype} {
    global ns
    
    set cbqlink [$ns link $n1 $n2]

    set ef_class  [new CBQClass]
    set af1_class [new CBQClass]
    set af2_class [new CBQClass]
    set be_class  [new CBQClass]

    $ef_class  install [new Queue/DropTail]
    $af1_class install [new Queue/$qtype]
    $af2_class install [new Queue/$qtype]
    $be_class  install [new Queue/DropTail]

    #                    parent     okborrow allot maxidle prio level extradly
    $topclass  setparams none       0        .50   auto    8    2     0
    $ef_class  setparams $topclass  true     .11   auto    0    1     0
    $af1_class setparams $topclass  true     .40   auto    1    1     0
    $af2_class setparams $topclass  true     .30   auto    2    1     0
    $be_class  setparams $topclass  true     .19   auto    3    1     0
    
    $cbqlink insert $topclass
    $cbqlink insert $ef_class
    $cbqlink insert $af1_class
    $cbqlink insert $af2_class
    $cbqlink insert $be_class
    
    $cbqlink bind $ef_class  0 1
    $cbqlink bind $af1_class 2 3
    $cbqlink bind $af2_class 4 5
    $cbqlink bind $be_class  6
}



The UDP agent is configured to send packets with flow id 0 while the
TCP agent sets the flow id of its packets to 2.

My simulatons however show some unexpected effect: When a UDP packet
arrives at the queue while the high priority queue ($ef_class) is
empty and there are some packets in the $af1_class queue, the UDP
packet is not sent immediately (this is although the UDP traffic flow
does not exceed its allocated bandwidth of 11% of the total available
bandwidth).  Instead up to 11 lower priority TCP packets from the
$af1_class are sent before the UDP packet from $ef_class is dequeued
and sent.

Is this a bug in the CBQ implementation or do I misunderstand the
priorities in CBQ?


urs