Showing posts with label Simulator. Show all posts
Showing posts with label Simulator. Show all posts

Jul 18, 2013

Add a new MAC protocol in NS2

I just install the NS2 in my machine. If you are not sure, please read:
http://itantenna.blogspot.com.au/2012/01/install-ns234-on-ubuntu-1004.html;
http://itantenna.blogspot.com.au/2011/11/install-ns21b9a-tens-in-ubuntu-1004.html;
http://itantenna.blogspot.com.au/2010/10/ns2macintosh.html;
Now let`s add a new MAC protocol.
1) Put your new MAC program files (newMAC.cc and newMAC.h) to ns-2.34/mac
2) Modify common/packet.h
#define HDR_NEWMAC(p) ((hdr_newmac *)hdr_mac::access(p)) // add newmac here
Find "enum packet_t{}" and add PT_NEWMAC. Notice that it must be added before PT_NTYPE.
Find "class p_info{}" and add name_[PT_NEWMAC] = "newmac". It must be before name_[PT_NTYPE] = "undefined".
3) Modify tcl/lib/ns-default.tcl
Add Mac/NEWMAC set syncFlag_ 1
Add Mac/NEWMAC set selfConfigFlag_ 1
Add Mac/NEWMAC set dutyCycle_ 10
……
In the later line,
Add Mac/NEWMAC set syncFlag_ 0
4) Modify tcl/lib/ns-packet.tcl
Find "foreach prot{}" and add NEWmac
5) Modify ns2.34/Makefile
Add mac/newmac.o \
6) Now a new MAC protocol has been added to NS2. We will modify some trace files in the next.
7) Modify trace/cmu-trace.h
Add void format_newmac(Packet *p, int offset);
8) Modify trace/cmu-trace.cc
Find "void CMUTrace::format_mac_common(Packet *p, const char *why, int offset)"
struct hdr_cmn *ch = HDR_CMN(p);
struct hdr_ip *ih = HDR_IP(p);
struct hdr_mac802_11 *mh;
struct hdr_smac *sh;
struct hdr_newmac *ph; // add newmac pointer
char mactype[SMALL_LEN];
strcpy(mactype, Simulator::instance().macType());
if (strcmp (mactype, "Mac/SMAC") == 0)
sh = HDR_SMAC(p);
else if (strcmp (mactype,"Mac/NEWMAC") == 0)
ph = HDR_LMAC(p);
else
mh = HDR_MAC802_11(p);
……
if (strcmp (mactype, "Mac/SMAC") == 0) {
format_smac(p, offset);
}
else if (strcmp (mactype, "Mac/NEWMAC") == 0) {
format_newmac(p, offset);
}
else {
format_mac(p, offset);
}
return;
Find "if(newtrace)"
offset = strlen(pt_->buffer());
if (strcmp(mactype, "Mac/SMAC") == 0) {
format_smac(p, offset);
}
else if (strcmp(mactype, "Mac/NEWMAC") == 0) {
format_newmac(p, offset);
}
else {
format_mac(p, offset);
}
……
(ch->ptype() == PT_SMAC) ? (
(sh->type == RTS_PKT) ? "RTS" :
(sh->type == CTS_PKT) ? "CTS" :
(sh->type == ACK_PKT) ? "ACK" :
(sh->type == SYNC_PKT) ? "SYNC" :
"UNKN") :
(ch->ptype() == PT_NEWMAC) ? (
(ph->type == RTS_PKT) ? "RTS" :
(ph->type == CTS_PKT) ? "CTS" :
(ph->type == ACK_PKT) ? "ACK" :
(ph->type == SYNC_PKT) ? "SYNC" :
"UNKN") :
packet_info.name(ch->ptype())),
ch->size());
……
if (strncmp (mactype, "Mac/SMAC", 8) == 0) {
format_smac(p, offset);
}
else if (strncmp (mactype, "Mac/NEWMAC", 8) == 0) {
format_newmac(p, offset);
}
else {
format_mac(p, offset);
}
……
Add a new function
void CMUTrace::format_newmac(Packet *p, int offset)
{
struct hdr_newmac *ph = HDR_NEWMAC(p);
sprintf(pt_->buffer() + offset,
" [%.2f %d %d] ",
ph->duration,
ph->dstAddr,
ph->srcAddr);
}
9) Find "void CMUTrace::format(Packet* p, const char *why)"
Add
switch(ch->ptype()) {
case PT_MAC:
case PT_SMAC:
case PT_NEWMAC:
break;
case PT_ARP:
format_arp(p, offset);
break;
10) Finally, add the header files #include

May 15, 2013

How to install NS3 on Mac OS Lion

1) Install XCode

You will find XCode in the App Store. Alternatively, you can download the most recent version of XCode from the Apple Developer Connection website (http://developer.apple.com/mac/). The XCode development environment includes the gcc compiler and critical libraries required to build applications to be run in Mac OS X. Mac OS X Lion, requires XCode 4.1+.

2) Install MacPorts

2.1) Download MacPorts package installer for Lion release version 2.02 from https://distfiles.macports.org/MacPorts/MacPorts-2.0.2-10.7-Lion.dmg

2.2) Click on the downloaded "pkg" file, to install MacPorts.

2.3) This will place a fully-functioning MacPorts installation on your system

3) Install Required packages for ns-3

3.1) Open a Terminal window and run each command to install the required package

3.2) Install Mercurial and Python:

>> sudo port install mercurial python26  

3.3) Install Bzr

>> sudo port install bzr

3.4) Install LibXML

>> sudo port install libxml2

3.5) Install GDB

>> sudo port install gdbm

4) Download ns3 source code

>> hg clone http://code.nsnam.org/ns-3-allinone

>> cd ns-3-allinone

>> ./download.py

5) Build the local repository

>> ./build.py

6) Test the installation

>> cd ns-3-dev

>> ./test.py