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