- You should already have the ns-2 simulator installed. You can obtain ns-2 code here.
In the following NS-2-DIR refers
to your ns-2.* directory (example: ns-2.27)
-
Save current files:
Before untarring the code below, save a few ns files that will be overwritten
so that you can revert to the original easily.
1) cd NS-2-DIR
2) tar -cvf original.tar Makefile.in FILES tcl/lib/ns-default.tcl tcl/lib/ns-packet.tcl common/packet.h
In case you need to revert to the original code:
1) cd NS-2-DIR
2) tar -xvf original.tar
3) make clean
4) ./configure
5) make depend
6) make
-
Download Code: pathchirp_ns_2.27.tar (for ns_2.27), pathchirp_ns_2.26.tar (for ns_2.26)
To add the pathChirp code to ns-2, copy the pathChirp_ns_2.27.tar (or pathChirp_ns_2.26.tar) file to NS-2-DIR and run the following commands.
1) cd NS-2-DIR
2) tar -xvf pathchirp_ns_2.*tar
If you have not already saved your current files, go to the "Save current files" instructions above. Otherwise follow the instructions in the README_PATHCHIRP file OR proceed as follows.
3) tar -xvf pathchirp_code.tar
4) make clean
5) ./configure
6) make depend
7) make
To run an experiment using pathChirp read the README_PATHCHIRP file.
Friday, 31 January 2014
Bandwidth Measurement in NS2 using pathChirp Tool
Thursday, 30 January 2014
Download and Installation of Redhat, fedora, Ubunthu and Vmware AND ns2
NS2.34
·
Use following link in your browser (ctrl+click
following link)
·
After
page was loaded it will directly download (in some browser download
dialogue box will open)
==========================================
Utorrent
download
·
Use following link in your browser (ctrl+click
following link)
It will Start Download.
Install the downloaded file
==================================================
VMware
Workstation download
Use following link in your browser (ctrl+click
following link)
· It will start download torrent file. After finished downloading double click on it.
·
Next window will be open as below Click “OK” as
shown below, Torrent will start download the “VMware Workstation9”
·
After
Finishing download start Install
===============================
:
Redhat Linux 32bit Download
·
Use following link in your browser (ctrl+click
following link)
·
·
It will start download the torrent link. After
downloaded double click on link
·
It will start download the file.
=============================================
Redhat Linux 64bit Download
·
Use following link in your browser (ctrl+click
following link)
·
·
It will start download the torrent link. After
downloaded double click on link
·
It will start download the file
=======================================
Ubuntu Linux 32bit Download
·
Use following link in your browser (ctrl+click
following link)
·
·
It will start download the torrent link. After
downloaded double click on link
·
It will start download the file
Ubuntu Linux 64bit Download
·
Use following link in your browser (ctrl+click
following link)
·
·
It will start download the torrent link. After
downloaded double click on link
·
It will start download the file
==============================================
CentOS Linux 32bit Download
·
Use following link in your browser (ctrl+click
following link)
·
It will start download the torrent link. After
downloaded double click on link
·
It will start download the file
=============================================
CentOS Linux 64bit Download
·
Use following link in your browser (ctrl+click
following link)
·
It will start download the torrent link. After
downloaded double click on link
·
It will start download the file
Fedora Linux 32bit Download
·
Use following link in your browser (ctrl+click
following link)
· It will start download the torrent link. After
downloaded double click on link
·
It will start download the file
===============================================
Fedora Linux 64bit Download
·
Use following link in your browser (ctrl+click
following link)
· It will start download the torrent link. After
downloaded double click on link
·
It will start download the file
======================================
Add New Queue in NS2
Add New Queue
Figure 30. "DtRrQueue" class implementation
Web Server and Clients in NS2
Web Server Example
This section contains a pointer to an example Web Server simulation script and shows its network topology. Download "ex-web.tcl" and "dumbbell.tcl" files and examine them yourself. This example is from the 5th VINT/NS Simulator Tutorial/Workshop. Note that you should change the path for "http-mod.tcl" at the begining of the script to an appropriate one to make it run on your machine.
Figure 34. Web server simulation network topology
Add New Agents in NS2
Add New Application and Agent
Basically, "five rate media scaling" works as follow. The sender starts with transmission rate associated with scale 0, and changes transmission rates according to the scale value that the receiver notifies. The receiver is responsible for monitoring network congestion and determining the scale factor. For congestion monitoring, a simple periodical (for every RTT second) packet loss monitoring is used, and even a single packet loss for each period is regarded as network congestion. If congestion is detected, the receiver reduces the scale parameter value to half and notifies the sender of this value. If no packet loss is detected, the receiver increases the value by one and notifies the sender.
- MmApp Header: For the application level communication, we decided to define a header of which the structure named in C++ "hdr_mm". Whenever the application has information to transmit, it will hand it to "UdpMmAgent" in the "hdr_mm" structure format. Then, "UdpMmAgent" allocates one or more packets (depending on the simulated data packet size) and writes the data to the multimedia header of each packet. Figure 23 shows the header definition, in which a structure for the header and a header class object, "MultimediaHeaderClass" that should be derived from "PacketHeaderCalss" is defined. In defining this class, the OTcl name for the header ("PacketHeader/Multimedia") and the size of the header structure defined are presented. Notice that bind_offset() must be called in the constructor of this class.
Figure 23. MM Header Structure & Class (in "udp-mm.h" & "udp-mm.cc")
Figure 24 (a). Add to the "packet.h" file (C++)We also add lines to packet.h and ns-packet.tcl as shown in Figure 24 (a) and (b) to add our "Mulltimedia" header to the header stack. At this point, the header creation process is finished, and "UdpMmAgent" will access the new header via hdr_mm::access() member function. Please refer to NS Manual for detailed information on header creation and access methods. For the rest of the application and the modified UDP agent description, refer directly to "mm-app.h", "mm-app.cc", "udp-mm.h" and "udp-mm.cc" files as needed.
Figure 24 (b). Add to the "ns-packet.tcl" file (Otcl)
- MmApp Sender: The sender uses a timer for scheduling the next application data packet transmission. We defined the "SendTimer" class derived from the "TimerHandler" class, and wrote its "expire()" member function to call "send_mm_pkt()" member function of the "MmApp" object. Then, we included an instance of this object as a private member of "MmApp" object referred to as "snd_timer_". Figure 25 shows the "SendTimer" implementation.Before setting this timer, "MmApp" re-calculates the next transmission time using the transmission rate associated with the current scale value and the size of application data packet that is given in the input simulation script (or use the default size). The "MmApp" sender, when an ACK application packet arrives from the receiver side, updates the scale parameter.
Figure 25. SendTimer Implementation.
- MmApp Receiver: The receiver uses a timer, named "ack_timer_", to schedule the next application ACK packet transmission of which the interval is equal to the mean RTT. When receiving an application data packet from the sender, the receiver counts the number of received packets and also counts the number of lost packets using the packet sequence number. When the "ack_timer_" expires, it invokes the "send_ack_pkt" member function of "MmApp", which adjusts the scale value looking at the received and lost packet accounting information, resets the received and lost count to 0, and sends an ACK packet with the adjusted scale value. Note that the receiver doesn't have any connection establishment or closing methods. Therefore, starting from the first packet arrival, the receiver periodically sends ACK packets and never stops (this is a bug).
- UdpMmAgent: The "UdpMmAgent" is modified from the "UdpAgent" to have the following additional features: (1) writing to the sending data packet MM header the information received from a "MmApp" (or reading information from the received data packet MM header and handing it to the "MmApp"), (2) segmentation and re-assembly ("UdpAgent" only implements segmentation), and (3) setting the priority bit (IPv6) to 15 (max priority) for the "MmApp" packets.
- Modify "agent.h": To make the new application and agent running with your NS distribution, you should add two methods to "Agent" class as public. In the "command" member function of the "MmApp" class, there defined an "attach-agent" OTcl command. When this command is received from OTcl, "MmApp" tries to attach itself to the underlying agent. Before the attachment, it invokes the "supportMM()" member function of the underlying agent to check if the underlying agent support for multimedia transmission (i.e. can it carry data from application to application), and invokes "enableMM()" if it does. Even though these two member functions are defined in the "UdpMmAgnet" class, it is not defined in its base ancestor "Agent" class, and the two member functions of the general "Agent" class are called. Therefore, when trying to compile the code, it will give an error message. Inserting the two methods as public member functions of the "Agent" class (in "agent.h") as follows will solve this problem.
Figure 26 (a). Add two member functions to "Agent" class. - Modify "app.h": You also need to add an additional member function "recv_msg(int nbytes, const char *msg)" to "Application" class as shown in Figure 26 (b). This member function, which was included in the "Application" class in the old versions of NS (ns-2.1b4a for sure), is removed from the class in the latest versions (ns-2.1b8a for sure). Our multimedia application was initially written for the ns-2.1.b4a, and therefore requires "Application::recv_msg()" member function for ns-2.1b8a or later versions.
Figure 26 (b). Add a member function to "Application" class. - Set default values for new parameter in the "ns-default.tcl": After implementing all the parts of the application and agent, the last thing to do is to set default values for the newly introduced configurable parameters in the "ns-default.tcl" file. Figure 26 shows an example of setting the default values for configurable parameters introduced by "MmApp".
Figure 27. Default parameter value settings
- Download "mm-app.h", "mm-app.cc", "udp-mm.h" and "udp-mm.cc") to the "ns-2" directory.
- Make sure you registered the new application header by modifying "packet.h" and "ns-packet.tcl" as shown in Figure 24 (a) and (b).
- Add supportMM() and enableMM() methods to the "Agent" class in "agent.h" as shown in Figure 26 (a).
- Add recv_msg() method to the "Application" class in "app.h" as shown in Figure 26 (b).
- Set default values for the newly introduced configurable parameters in "ns-default.tcl" as described in Figure 27. Be SURE to complete this last step. Otherwise, all five-scale rates are initialized to zero unless specified in the input simulation script (i.e., the test simulation script given below will not transmit any frames).
After you've done all things in the checklist, modify your "Makefile" as needed (include "mm-app.o" and "udp-mm.o" in the object file list) and re-compile your NS. Be SURE to run "make clean" and "make depend" before you re-compile your modified NS, otherwise the new application may not transmit any packets. It is generally a good practice to do "make depend" after you make changes in "Makefile" before a re-compile.
Figure 28. Test Simulation Topology and Scenario
Trace File Analysis in NS2
Trace Analysis Example
- This section shows a trace analysis example. Example 4 is the same OTcl script as the one in the "Simple Simulation Example" section with a few lines added to open a trace file and write traces to it. For the network topology it generates and the simulation scenario, refer to Figure 4 in the "Simple Simulation Example" section. To run this script download "ns-simple-trace.tcl" and type "ns ns-simple-trace.tcl" at your shell prompt.
Example 4. Trace Enabled Simple NS Simulation Script (modified from Example 3)
Figure 13. Trace Format Example
Having simulation trace data at hand, all one has to do is to transform a subset of the data of interest into a comprehensible information and analyze it. Down below is a small data transformation example. This example uses a command written in perl called "column" that selects columns of given input. To make the example work on your machine, you should download "column" and make it executable (i.e. "chmod 755 column"). Following is a tunneled shell command combined with awk, which calculates CBR traffic jitter at receiver node (n3) using data in "out.tr", and stores the resulting data in "jitter.txt".
| cat out.tr | grep " 2 3 cbr " | grep ^r | column 1 10 | awk '{dif = $2 - old2; if(dif==0) dif = 1; if(dif > 0) {printf("%d\t%f\n", $2, ($1 - old1) / dif); old1 = $1; old2 = $2}}' > jitter.txt |
Awk Script To calculate Energy Level From Ns2 Trace Files
Use the Below Awk script to calculate Energy Level From Ns2 Trace Files
BEGIN {
seqno = -1;
start_time = 0;
}
{
action = $1;
time = $2;
node_id = $3;
layer = $4;
flags = $5;
seqno = $6;
type = $7;
size = $8;
a = $9;
b = $10;
c = $11;
d = $12;
energy = $14;
if(seqno < $6 && node_id == "_4_" && (action == "r" || action == "s")) {
seqno = $6;
remaining_energy = energy;
start_time = time;
printf("%f\t%f\n",start_time,remaining_energy);
}
}
END {
}
BEGIN {
seqno = -1;
start_time = 0;
}
{
action = $1;
time = $2;
node_id = $3;
layer = $4;
flags = $5;
seqno = $6;
type = $7;
size = $8;
a = $9;
b = $10;
c = $11;
d = $12;
energy = $14;
if(seqno < $6 && node_id == "_4_" && (action == "r" || action == "s")) {
seqno = $6;
remaining_energy = energy;
start_time = time;
printf("%f\t%f\n",start_time,remaining_energy);
}
}
END {
}
Subscribe to:
Posts (Atom)