[ns] help building new diffserv module
Xuan Chen
xuanc@ISI.EDU
Thu Apr 25 07:50:02 2002
On Thu, 25 Apr 2002, Gema Torm Bossa wrote:
>
>
> Hello again,
>
> the .tcl file and de three .h files I use:
>
> *************************************************************
> FILE example.tcl
>
> set ns [new Simulator]
> set nf [open out.nam w]
> $ns namtrace-all $nf
> proc finish {} {
> global ns nf
> $ns flush-trace
> close $nf
> exec nam out.nam &
> exit 0
> }
> set rate0 2000000
> set rate1 4000000
> set cir 1000000
> set cbs 10000
>
> set s0 [$ns node]
> set s1 [$ns node]
> set e1 [$ns node]
> set core [$ns node]
> set e2 [$ns node]
> set dest [$ns node]
>
> $ns duplex-link $s0 $e1 10Mb 5ms DropTail
> $ns duplex-link $s1 $e1 10Mb 5ms DropTail
> $ns simplex-link $e1 $core 10Mb 5ms dsGEMA/edge
> $ns simplex-link $core $e1 10Mb 5ms dsGEMA/core
> $ns simplex-link $core $e2 5Mb 5ms dsGEMA/core
> $ns simplex-link $e2 $core 5Mb 5ms dsGEMA/edge
> $ns duplex-link $core $e2 5Mb 5ms DropTail
why do this? I think the result of the above three commands is to set up a
droptail queue between $core and $e2. And that's why you get the error
when trying to config the number of preferences...
-chen
> $ns duplex-link $e2 $core 5Mb 5ms DropTail
> $ns duplex-link $e2 $dest 10Mb 5ms DropTail
>
> $ns queue-limit $e1 $core 2
>
> $ns duplex-link-op $s0 $e1 orient down-right
> $ns duplex-link-op $s1 $e1 orient up-right
> $ns duplex-link-op $e1 $core orient right
> $ns duplex-link-op $core $e2 orient right
> $ns duplex-link-op $e2 $dest orient right
>
> set qE1C [[$ns link $e1 $core] queue]
> set qE2C [[$ns link $e2 $core] queue]
> set qC1E [[$ns link $core $e1] queue]
> set qC2E [[$ns link $core $e2] queue]
>
> $qE1C setNumPrec 2
> $qE1C addPHBEntry 20 0 0
> $qE1C addPHBEntry 21 0 1
> $qE1C addPolicerEntry TokenBucket 20 21
> $qE1C addPolicyEntry [$s0 id] [$dest id] TokenBucket 20 $cir $cbs
> $qE1C addPolicyEntry [$s1 id] [$dest id] TokenBucket 20 $cir $cbs
>
> $qE1C printPolicerTable
>
> $qE2C setNumPrec 2
> $qE2C addPHBEntry 20 0 0
> $qE2C addPHBEntry 21 0 1
> $qE2C addPolicerEntry TokenBucket 20 21
> $qE2C addPolicyEntry [$dest id] [$s0 id] TokenBucket 20 $cir $cbs
> $qE2C addPolicyEntry [$dest id] [$s1 id] TokenBucket 20 $cir $cbs
>
> $qC1E setNumPrec 2
> $qC1E addPHBEntry 20 0 0
> $qC1E addPHBEntry 21 0 1
>
> $qC2E setNumPrec 2
> $qC2E addPHBEntry 20 0 0
> $qC2E addPHBEntry 21 0 1
>
> set udp0 [new Agent/UDP]
> $ns attach-agent $s0 $udp0
>
> set udp1 [new Agent/UDP]
> $ns attach-agent $s1 $udp1
>
> set cbr0 [new Application/Traffic/CBR]
> $cbr0 set packetSize_ 500
> $cbr0 set interval_ 0.005
> $cbr0 attach-agent $udp0
> $cbr0 set rate_ $rate0
>
>
> set cbr1 [new Application/Traffic/CBR]
> $cbr1 set packetSize_ 500
> $cbr1 set interval_ 0.005
> $cbr1 attach-agent $udp1
> $cbr1 set rate_ $rate1
>
> set null0 [new Agent/LossMonitor]
> $ns attach-agent $dest $null0
> $ns connect $udp0 $null0
>
> set null1 [new Agent/LossMonitor]
> $ns attach-agent $dest $null1
> $ns connect $udp1 $null1
>
> $udp0 set class_ 0
> $udp1 set class_ 1
> $ns color 0 Blue
> $ns color 1 Red
>
> $qE1C escriu_taula_PHB
> $qE1C printPolicyTable
> $qE1C printPolicerTable
>
> $ns at 0.5 "$cbr0 start"
> $ns at 0.6 "$cbr1 start"
> $ns at 4.5 "$cbr0 stop"
> $ns at 4.6 "$cbr1 stop"
> $ns at 5.0 "finish"
>
> $ns run
>
> ***************************************************************
> FILE dsGEMA.h
>
> #include <string.h>
> #include "queue.h"
> #include "address.h"
> #include "diffserv/dsPolicy.h"
> # ifndef ds_GEMA_h
> # define ds_GEMA_h
> #define MAX_PREC 20
> #define MAX_CP 40
> class dsGEMAQueue : public Queue
> { public:
> dsGEMAQueue()
> { q_ = new PacketQueue;
> pq_ = q_;
> phbEntries = 0;
> }
> int command(int argc, const char*const* argv);
> protected:
> PacketQueue *q_;
> int numPrec;
> LinkDelay* link_;
> int phbEntries;
> phbParam phb_[MAX_CP];
> void setNumPrec(int prec);
> void addPHBEntry(int codePt, int queue, int prec);
> void lookupPHBTable(int codePt, int* queue, int* prec);
> void escriu_taula_PHB();
> void enque (Packet*);
> Packet* deque();
> };
> #endif
>
> *********************************************************
> FILE dsGEMAedge.h
>
> #ifndef DS_GEMA_EDGE_H
> #define DS_GEMA_EDGE_H
> #include "diffserv/dsPolicy.h"
> #include "dsGEMA.h"
> class edgeGEMAQueue : public dsGEMAQueue
> { public:
> edgeGEMAQueue();
> int command(int argc, const char*const* argv);
> protected:
> PolicyClassifier policy;
> void enque(Packet *pkt);
> };
> #endif
>
>
> *******************************************************
> FILE dsGEMAcore.h
>
> #ifndef DS_GEMA_CORE_H
> #define DS_GEMA_CORE_H
> #include "dsGEMA.h"
> class coreGEMAQueue : public dsGEMAQueue
> { public:
> coreGEMAQueue();
> int command(int argc, const char*const* argv);
> protected:
> };
> #endif
>
>
>
> *******************************************************
>
>
>
> gema
>
>
>
> On Wed, 24 Apr 2002, Xuan Chen wrote:
>
> >
> > could you please show us your tcl script?
> >
> > You may also want to look at the sample scripts under ns/tcl/diffserv
> >
> > Hope it helps,
> > -chen
> >
>
--
Xuan Chen
USC/ISI