[ns] help building new diffserv module

Gema Torm Bossa gtorm@silver.udg.es
Thu Apr 25 07:20:02 2002


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
$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
>