[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