RSVP code for ns-2.1b8a network simulator
---------------------------------------------------------------------------------------------------------
The original code was written by Marc Greis and it works in ns versions ns-2.1b6 or lower.
However, that version of ns is rather old and after that many new functionalities have been integrated.
In ns-2.1b8a, for example, linkstate routing is implemented and based on Amardeep Singh's work on
Networking laboratory, Quality of Service routing is possible to simulate. It would be interesting to
simulate qosr and rsvp together and that's why this work is carried out. I have also made some
simulations to validate that everything works.
Installing rsvp code for ns-2.1b8a
----------------------------------------------------------------------------------------------------------
It is best to install rsvp over a clean distribution. If you install it over a pre-compiled version by
make clean and make, you might have some problems. I suggest to do the following steps:
1. unzip ns-2.1b8a to your hardisk.
2. unzip wfq.cc, wfq.h, rsvp-objects.h, rsvp-objects.cc, rsvp-messages.h, rsvp-messages.cc,
rsvp-link.h, rsvp-link.cc, rsvp.cc, rsvp.h and packet.h to ns source directory /ns-2.1b8a/.
3. unzip ns-lib.tcl, ns-packet-tcl and ns-rsvp.tcl to directory /ns-2.1b8a/tcl/lib/.
4. example scripts you can unzip to directory /ns-2.1b8a/tcl/ex/.
5. make the required changes in Makefile.in (I have included my own Makefile.in). In the end of
OBJ_CC field add "wfq.o rsvp.o rsvp-objects.o rsvp-messages.o rsvp-link.o \" and in NS_TCL_LIB
add "ns-rsvp.tcl \".
6. Run configure and make as normal.
After these steps everything should work.
API
------------------------------------------------------------------------------------------------------------
Allthough the code has changed from Marc Greis's version of rsvp, the API hasn't. I have included in
the zip-file(rsvp.pdf) Marc Greis's documentation of the functionality and API of the rsvp. There are
explained all the instructions and attributes to use in simulations. However, I have noticed that the
instructions are incomplite and in some cases don't give enough information to get rsvp work as it should.
Here are some issues that I have found:
* For some mysterious reason traffic sources have to be set up with "random_"variable on:
random_ 1
* When creating topology and traffic sources you must take into account following:
-If multiple traffic sources in the same sender-node have different destination nodes, they all have to
have different values of "class_" variable(in Marc Greis's version the variable was fid_ which is no
longer needed!) - look and try example2.tcl!
-If multiple traffic sources in different sender-nodes have same destination node, they all have to have
same value of "class_" variable - look example1.tcl!
The right values of "class_"-variable have to be chosen when creating rsvp sessions:
$rsvp_agent session $node $right_value_of_class_
* When rsvp session is created by $rsvp_agent session $node $right_value_of_class_, a session-id is
given for session, starting from zero. However, the session id is not unique. If for example two sessions
with same sender nodes and same destination nodes are created, they are given the same session-id(starting
from zero). If the sessions have different destination nodes, they will be given different session-id's. The right
value of session-id have to be chosen when sending PATH-messages:
$rsvp_agent sender $right_session-id bitrate bucket ttl....(look at rsvp.pdf!)
Example topologies
--------------------------------------------------------------------------------------------------------------
I have included on zip-file two of my own scripts which have the same topologies than Marc Greis's
scripts(example1.tcl -> rsvp_distinct.tcl, example2.tcl -> rsvp_merge.tcl) but otherwise are quite different
and fit better for validation. Marc Greis's scripts are explained in detail in rsvp.pdf and my scripts are
documented in the actual script-code.
The topology of example1.tcl consists of five nodes and rsvp-links with 1 Mb/s capacity. Three source nodes
(2,3 and 4) start to send rsvp flows with bitrate 0.5 Mb/s to the same destination node(0) which means that
link 1->0 is full and every flow receives only 0.333Mb/s bandwith. At time instant 30.0 sender node three
reserves 0.8 Mb/s capacity which results that it's received bandwith increases to 0.5 Mb/s and bitrate of
sender-nodes 2 and 4 decreases to 0.25 Mb/s. This can be verified from trace files band02.tr, band03.tr and
band04.tr.
The topology of example2.tcl consists also of five nodes and rsvp-links with 1 Mb/s capacity. Now the only
source node(0) starts to send rsvp flows(three different rsvp flows) with bitrate 0.5 Mb/s to the destination
nodes(2,3 and 4) which means that link 0->1 is full and every flow receives only 0.333Mb/s bandwith.
At time instant 30.0 flow going to node four reserves 0.8 Mb/s capacity which results that it's received bandwith
increases to 0.5 Mb/s and bitrate of two other flows decreases to 0.25 Mb/s. This can be verified from
trace files band2.tr, band3.tr and band4.tr.
As these validation scripts show, the rsvp seems to work properly in ns-2.1b8a and it can be used futher for
example with qors and mpls.
Contact info:
Juha Villanen
tel: 040-7316454
mail: jvillane@cc.hut.fi