Showing posts with label online. Show all posts
Showing posts with label online. Show all posts

Apr 30, 2007

Extended Network Simulator NS-2 Nam Editor


The Extended Nam Editor is an editor that allows the graphical creation of ns2 scripts. It extends the basic Nam Editor with the following features:

  1. Integration with existing topology generators
  2. Localization and visualization of set of nodes on large network topologies according to different selection criteria;
  3. Instantiation of agents of any types on all the nodes of a given node set;
  4. Definition of new node types;
  5. Support for simulations of web cache systems.

Topology Generator Interface
The manual generation of complex Network Topology is a tedious and error prone activity.

In order to simulate networks with realistic topologies, it is a common practice to use ad-hoc topology generators, whose output is usually not compatible with the ns2 syntax. Hence, several tools have been developed to translate topology descriptions generated by topology generators in ns-scripts that can be used in the definition of a simulation scenario.

Unfortunately, scripts produced in this way are not compatible with the Nam Editor, hence networks created by common topology generators cannot be modified interactively. Such a limitation is sometimes annoying, in particular when the automatically generated topology needs to be further adapted, e.g. by instantiating agents on particular network nodes.

Nam-Editor provides a graphical interface to:
  • GT-ITM topology generator;
  • INET topology generator;

It is now possible to create, visualize and modify topologies created according to the following topology models:
  1. flat-itm;
  2. hierarchical-itm;
  3. transit-stub-itm;
  4. INET;


More info here

tags :



Apr 28, 2007

ns2measure : An Integrated Framework for Enabling Effective Data Collection and Statistical Analysis with ns2


The Network Simulator 2 (ns2) is an open source tool for network simulation. When planning for large-scale simulation experiments, an efficient and flexible data collection and a statistically sound output data analysis are important aspects to keep in mind. Unfortunately, ns2 offers little support for data collection, and statistical analysis of the simulation results is most often performed offline, using either home made code or available packages, which are not integrated with ns2.

In this site, you will find two complementary contributions:

  • the first one consists of a set of C++ modules, that allow a flexible and efficient data collection;
  • the second one is a software framework, which is fully integrated with ns2, which performs all the operations required to carry out simulation experiments in a statistically sound way.

To learn more about ns2measure, link

Reference :
An Integrated Framework for Enabling Effective Data Collection and Statistical Analysis with ns2
Claudio Cicconetti, Enzo Mingozzi, Giovanni Stea,
Workshop on ns-2: the IP network simulator (WNS2)
Pisa, Italy, October 10, 2006.

tags :


Apr 27, 2007

Peer-to-Peer (P2P) Simplified protocol


P2PS (Peer-to-Peer Simplified) is a lightweight infrastructure for peer-to-peer service discovery and pipe-based communication. As its names suggests, P2PS aims to provide a simple platform on which to develop peer-to-peer style applications, hiding the complexity of other similar architectures such as JXTA.

The P2PS protocols allow ad-hoc peer networks to be created containing everything from super-computer peers to PDAs. P2PS peers can create and advertise services within the network and discover the services offered by other peers. Services usually have at least one pipe associated, an abstract communication channel used to contact the service. Pipes are only bound to specific transport protocols (e.g. TCP/IP) at connection time and allow peers to communicate over multiple protocols.

The current P2PS reference implementation is written using Java, however as P2PS is based on XML protocols interoperability should exist with other implementations. The Java implementation provides a straightforward API for creating and advertising a peer within a network and for discovering the capabilities of other peers. Pluggable endpoint resolvers allow additional transport protocols to be inserted transparently to the application.

P2PS is an open-source project.

The source code is available from the download section of this website.

tags: , , , , , , , , ,



Jan 16, 2007

Why the simulation results are not stable?


One of the main problem for simulation for NS-2 is that sometimes the simulation results are not stable and inconsistent. This is due to the fact that NS-2 simulator requires big memory space for simulation of large networks. Therefore, it's important to debug malloc calls, memory leaking, buffer overruns, etc. by using tools such as DDD (Data Display Debugger) or dmalloc.

For more information and DDD tutorial, read here

tags: , , , , , , ,

Nov 12, 2006

NS WorkBench : Graphical User Interface For Network Simulator


nsBench is a drag-and-drop GUI and easy to use in undergraduate and graduate networking courses. nsBench makes NS-2 simulation development and analysis faster and easier for students and researchers without losing the flexibility or expressiveness gained by writing a script.

nsBench v1.0 features include :

  • Nodes, simplex/duplex links and LANs
  • Agents: TCP, UDP, TCPSink, TCP/Fack, TCP/FullTcp, TCP/Newreno, TCP/Reno, TCP/Sack1, TCPSink, TCPSink/Sack1, TCPSink/DelAck, TCPSink/Sack1/DelAck, TCP/Vegas, Null Agent
  • Applications/Traffic: FTP, Telent, Http/Server, Http/Client, Http/Cache, webtraf, Traffic/CBR, Traffic/Pareto, Traffic/Exponential
  • Services: Multicast, Packet Scheduling, RED, DiffServ
  • Creating "Groups" concept to compensate for "loops"
  • Scenario generator
  • Link Monitors
  • Loss Models
  • Routing Protocols
Learn more of nsbench

tags: , , , , , ,

Jul 24, 2006

Learn about Network Simulation and Testing with Polly Huang

Polly Huang is the Assistant Professor of Department of Electrical Engineering, National Taiwan University. She was one of the development team of NS-2.

You can learn more about Network Simulation and Testing from Polly from this course site. (Link)

Network Simulation and Testing conducted by Polly is an advanced computer network course for graduate or senior-year students who are interested in pursuing research in networking. Together with Network Protocols: Design and Analysis, the two courses aim to

1) review the network research from an insider's point of view and
2) introduce in classroom the so-called research methodology. As opposed to Network Protocols focusing on knowing the problem nature and potential solutions, Network Simulation and Testing emphasizes the evaluation, experimental methods.

The goal of this course is two-fold:

1) to introduce models, techniques, and tools frequently used in network research and 2) to provide training in experimental design and technical presentation.

There are also mp3 recording of the lectures. (Link)

Jul 11, 2006

Forum for Ns-2 Network Simulator

I found this forum for Ns-2 Network Simulator. It's an alternative to NS-2 Mailing List. (Link)



tags :

Jul 4, 2006

NS-3 is on development now...

A new four-year program to develop the next major version of ns-3 was officially started on July 1, 2006. The program is funded as part of the NSF CISE CRI program. The PIs are Tom Henderson and Sumit Roy from the University of Washington, Sally Floyd from ICIR, and George Riley from the Georgia Institute of Technology.

For an initial summary of the project, please see:

  • 2006 NSF CRI Workshop summary

    In keeping with the spirit of ns-2, we intend for ns-3 development and software contributions to leverage the contributions of the larger network simulation research community. Discussions and other project news will occur at the following sites:

  • ns-developers mailing list
  • nsnam web page

    tags :

  • Jun 26, 2006

    How to Start Research in Computer Networks: Seven Steps on the Road to Success

    Extracted from here

    This is a short note on how to start defining your topic of interest and zooming in on specific research problems and challenges. This note is geared towards graduate (M.S. and Ph.D.) students interested in computer networks related topics for their directed research (DR), M.S. thesis, or Ph.D. dissertation. The general guidelines, however, may apply to a larger class of students (e.g., in Electrical Engineering or Computer Science disciplines):
    [Note: This is only a starting point. There's a lot more to research than what's here!]

    1. Pick a direction or area of interest based on your background in netwoking (e.g., courses you have taken, readings, conferences, talks to Professors, etc.). Try to be as specific as possible. For example, do not pick 'multicast' (it is too general), but perhaps 'congestion control for reliable multicast' or 'multicast routing in ad hoc networks'. Do not pick 'wireless networks' (too general), but perhaps 'systematic testing of wireless MAC layer' or 'efficient handoff for IP mobility', for instance. There could be a list of topics that interest you (related or unrelated). I do not recommend a list of more than three topics.


    2. Compile a set of 'keywords' to start searching for high quality readings for each of the previously selected topics. Good places to start your search are IEEE library on-line and ACM library on-line (both of which are freely available to USC students). Pick one research topic at a time.
    You can also search on the web (e.g., Google) but please double check the publication details for quality (there are a lot of papers out there!).
    Another literature-rich scientific digital library is citeseer.com, but again, please double check details for quality.


    3. Out of the search hits, select around 15-20 papers that you think are most related to what you had in mind and are of the highest quality. Do NOT read all these papers yet!
    Check the title, abstract, names of authors, their affiliations, and most importantly the conference or journal. Many IEEE and ACM conferences/Journals are of high quality. Some, however, are more selective and competitive than others. Examples of well-known conferences/journals include, but are not limited to:
    * In the general area of Computer Networks: IEEE/ACM Transactions on Networking (ToN), IEEE Journal on Selected Areas in Communications (JSAC), ACM SIGCOMM, IEEE INFOCOM, IEEE ICNP, IEEE SIGMetrics, Computer Networks Journal (Elsevier), IEEE ICC, IEEE GlobeCom, ACM CCR, among others.
    * In the more specific areas of wireless networks (including mobile ad hoc networks, sensor networks and cellular-like infrastructure-based networks): ACM MobiCom, ACM MobiHoc, ACM MONET Journal, AdHoc Networks Journal (Elsevier), ACM Wireless Networks (WiNet) Journal, ACM SenSys, IEEE/ACM IPSN, IEEE WCNC, ACM MC2R, to name a few.
    Some gathered statistics about conference/workshop acceptance rates can be found through Kevin Almeroth's website. Note, however, that this is only one possible indication of quality.
    [Note: try to refine your set of keywords and perform multiple searches to cover most related quality work.]
    Another hint is to use references and citations. Usually the most cited work by high quality papers is also of high quality. If you like a specific paper look at the list of references, this will give you a good direction to follow.


    4. For the selected 15-20 papers read only the abstract, introduction and conclusion in detail (you may skim the rest of the paper for a general idea). Identify the emphasis of each paper:
    * (I) which problem it addresses,
    * (II) what solution it proposes,
    * (III) how the solution differs from previous solutions, and
    * (IV) what are the main contributions and conclusions.
    Out of these 15-20 papers, and based on your reading and understanding, pick a list of 4-6 papers that you think are the highest quality and that address your research interests and the challenges in the field most appropriately.


    5. Read those 4-6 papers from beginning to end, identifying in detail: (I) the main approaches, (II) methods of analysis: (a) metrics, (b) evaluation tools, and (c) analysis and interpretation of resulting simulation or measured data, and (III) conclusions. At the same time, try to keep a list of what you think the authors may have missed in the paper/study, gaps or limitations that could be improved upon and any ideas on how to accomplish these improvements. Some questions to ask include: Did all/some papers use similar approaches? Have they used the same evaluation criteria, or method of analysis? If not, then what are the strengths/weaknesses of each method? Also, keep a list of ideas that you want to explore further, or background material you want to brush upon. This will create another list of readings for you in later stages.


    tags:

    May 20, 2006

    Research Tool : CiteuLike (Updated)

    I found this great site for research, CiteULike. (link to my CiteULike library)



    CiteULike is a free service to help academics to share, store, and organise the academic papers they are reading. When you see a paper on the web that interests you, you can click one button and have it added to your personal library. CiteULike automatically extracts the citation details, so there's no need to type them in yourself. It all works from within your web browser. There's no need to install any special software.

    Because your library is stored on the server, you can access it from any computer. You can share your library with others, and find out who is reading the same papers as you. In turn, this can help you discover literature which is relevant to your field but you may not have known about.

    Give it a try here.

    Tags :

    May 19, 2006

    Scheduler :: Event UID not valid!

    Interesting explanation of Event UID

    Scheduler :: Event UID not valid!

    Answer:

    Each event in NS2 has a unique UID. The scheduler toggles the UID twice,
    once during dispatching and once during scheduling. Thus, the event has a
    positive UID after being scheduled and a negative one before being scheduled.
    If the event has been scheduled but not dispatched, then it will have a
    positive UID and cannot be scheduled again.

    In implementing a new protocol, this error can happen in two cases:

    1. You are using timers. When a timer is scheduled again without the
    previous schedule expiring - Trace which timer is scheduled and when it
    will expire.

    2. You are dealing with packets. A packet is also a kind of event to be
    scheduled and a UID is associated with it. When you create a
    copy or alloc again before freeing it, due to the same packet with a positive
    UID, it cannot be scheduled again.


    ----- Original Message -----
    From: "Cristina Marisol Ortiz De La Roche"

    To:
    Sent: Friday, May 19, 2006 6:45 AM
    Subject: [ns] Help Scheduler: Event UID not valid!

    Hi!!!!
    I'm working on a wireless topology and NS-2.29 (configure in linux) for my research work. When I try to simulate a bidirectionnal communication between a wireless endpoint and a wireline endpoint with 11 Mbps and smalls packets (size 200 bytes), I'm getting this error:

    Scheduler: Event UID not valid!

    This error doesn't exist if the communication is only in one way.

    My configuration is without the use of RTS/CTS mechanism. Can someone help me with this problem??? Any bug that can help???

    Thanks!!!

    rgds,
    Cristina


    Tags :

    May 10, 2006

    Awk to analyze ns-2 tracefile

    trace2stats is a set of AWK scripts to get node-to-node statistics from the tracefiles generated by the ns-2 network simulator.



    For More, visit this site
    Tags :

    May 7, 2006

    Before you begin your journey into simulation, consider the followings.

    To follow up on this:

    Make a simulation plan first. What do I mean by that? I mean that, before you implement anything, think about WHAT you want to test and how you could show that. I am currently attending a lecture on simulation and our professor really stressed that most people doing computer simulations focus too much on the implementation and forget about the planning. He also said that planning should be 30-40% of the total work...

    If you are into wireless routing protocol simulation, these are the things you should consider :

    - ask myself what are the strengths/weaknesses of these protocols. For this you'll have to read the theorethical papers describing them and to understand how they are optimizing the network. Basically, routing is an optimization problem but it is not defined what to optimize for. eg.

  • quick set-up of routes?
  • guaranteeing route correctness?
  • little signalling overhead?
  • quality of routes once they are set up? etc.

    - now compare the theorethical goals of these protocols with each other.
    How could they be compared in a live setting? eg. is one of them tuned to a specific situation and the other one more to another scenario? Can they be compared at all or would you be comparing apples with oranges?

    How can you set up "obstacles" or bottlenecks for the protocols to see if they deal effectively with these difficulties?

    - definitely check the papers "MANET simulations - "the incredibles" by Kurkowski, Camp, and Colagrosso as well as "The mistaken axioms of wireless-network research" by Kotz, Newport, and Elliot.

    Think very hard about the PHY layer model you are going to use and whether/how this PHY model will influence your results.

    If you check the mailing list, you will find that some newer implementations have been announced - maybe you'll need to check them out.

    - to make your own life more simple: how can you seperate concerns so you really can test for cause and effect. I made this mistake in my own simulations; I tried to set up a "typical" scenario which got very, very complicated and I couldn't show anything anymore because the effects I saw were caused by multiple causes which all interacted/interfered with each other.

    I have now gone one step back and try to work out simple scenarios which test for only one effect first. When I have a better
    understanding (after doing several simple tests) I will try the complex scenario again. With the insight gained through the simple settings I might even be able to interpret what is happening there then :-)

    - only AFTER you have thought theoretically about all that and planned your simulation, sit down and actually start coding.


    Tags :



  • Mar 30, 2006

    How to calculate comparative metrics

    Here're some of the comparative metrics in NS2



    For more info, click here

    Tags :

    How to Get Instance of Routing Agent

    How to Get Instance of Routing Agent



    For more info, click here


    Tags :

    Mar 29, 2006

    How to get the number of nodes in the network in C++ code

    Here's the code on how to get the number of nodes in the network based on C++ code for Ns2



    For more info, click here

    Tags :

    Printing routing table in AODV

    Here's an example for printing routing table in AODV



    For more click here

    Tags :

    Mar 24, 2006

    [ns] Ping protocol in greis's tutorial

    Been busy with moving to a new lab.. anyway, was checking some of the online site for ns2 earlier, I found this email quite interesting since I faced the same problem some time ago..

    [ns] Ping protocol in greis's tutorial
    Hajer FERJANI f.hajer at gmail.com
    Fri Jan 27 00:57:31 PST 2006

    * Previous message: [ns] Ping protocol in greis's tutorial
    * Next message: [ns] ns-2 validation test
    * Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

    Hi Ramya,

    I'm using ns2.28 and I know that packet headers management changed a
    little bit so the Marc Greis Tutorial could not work anymore.

    Now, to add you new packet you have to :
    - add you packet name to the enum structure containing packet names in
    packet.h (under Common directory) (sorry I don't remeber its name)
    - add the name of you packet as it should appears intraces in the same
    file (another class just below the enum structure in the same file).

    - define an offset and an access () method in the header structure of
    you new agent like this :

    struct hdr_newAgent{

    // Contents of a newAgent message
    double send_time;
    double weight;
    ....
    // Header access methods
    static int offset_; // required by PacketHeaderManager
    inline static int& offset() { return offset_; }
    inline static hdr_newAgent* access(const Packet* p) {
    return (hdr_newAgent*) p->access(offset_);
    }

    };


    notice also that accessing the header of a protocol changed. So for
    example to access the IP headerof a received packet, you should do :

    struct hdr_ip *ih = HDR_IP(p);

    where HDR_IP(p) is defined as:
    #define HDR_IP(p) ((struct hdr_ip*)hdr_ip::access(p)).
    and access(p) is the inline method of struct hdr_ip.

    I think this is all,
    Hope this helps.

    Bye.

    On 26 Jan 2006 17:53:40 -0000, ramya r wrote:
    >
    >
    > Hi,
    >
    > I tried to implement the Ping protocol specified in the Greis's tutorials under the ~ns/tcl/ns-tutorial folder..
    >
    > As per the specifications for the necessary changes to be made in order to implement this protocol,
    >
    > its mentioned that..-
    > -----------------------
    >
    > You also have to add an entry for the new ping packets in the file 'tcl/lib/ns-packet.tcl' in the list at the beginning of the file. It would look like the following piece of code.
    >
    > { SRMEXT off_srm_ext_}
    > { Ping off_ping_ }} {
    > set cl PacketHeader/[lindex $pair 0]
    > -------------------------
    >
    > the problem i have is that i do not find any such list in ns-paclet.tcl
    >
    > there is one list but its found commented ie., its an old code..
    >
    >
    > What do i do?

    Mar 3, 2006

    How do add a new module in NS-2

    Got this translated from a chinese website (link).

    ** Based on cygwin and Ns-2 2.27

    To add a module in Ns-2 is not a simple task especially for beginner. Therefore it's the author's wish to assist beginner by writing this article. However, the author would like to remind that there are plenty of modules that already existing in Ns-2. By merely editing the exiting module and adding extra functions, it's sufficient to be the first step to add a new module in Ns=2.

    Step 1

    Open cygwin command window, and change directory to the following path
    cd ns-allinone-2.27/ns-2.27/queue

    Step 2

    Change the name of drop-tail.[cc, h] to myfifo.[cc, h]
    cp drop-tail.cc myfifo.cc
    cp drop-tail.h myfifo.h

    Step 3

    By using editor, edit myfifo.h and myfifo.c (if you are in windows environment, you may use software like Ultra-edit to edit)

    a. Firstly, edit myfifo.h by changing everything from Droptail to myfifo and drop_tail to myfifo

    #ifndef ns_myfifo_h
    #define ns_myfifo_h

    #include
    #include "queue.h"
    #include "config.h"

    /*
    * A bounded, drop-tail queue
    */

    class myfifo : public Queue {
    public:
    myfifo() {
    q_ = new PacketQueue;
    pq_ = q_;
    bind_bool("drop_front_", &drop_front_);
    bind_bool("summarystats_", &summarystats);
    bind_bool("queue_in_bytes_", &qib_); // boolean: q in bytes?
    bind("mean_pktsize_", &mean_pktsize_);
    // _RENAMED("drop-front_", "drop_front_");
    }
    ~myfifo() {
    delete q_;
    }
    protected:
    void reset();
    int command(int argc, const char*const* argv);
    void enque(Packet*);
    Packet* deque();
    void shrink_queue(); // To shrink queue and drop excessive packets.
    PacketQueue *q_; /* underlying FIFO queue */
    int drop_front_; /* drop-from-front (rather than from tail) */
    int summarystats;
    void print_summarystats();
    int qib_; /* bool: queue measured in bytes? */
    int mean_pktsize_; /* configured mean packet size in bytes */
    };

    #endif

    b. next is to edit myfifo.cc, change everything from DropTail to myfifo and everything from drop_tail to myfifo and drop-tail to myfifo

    #include "myfifo.h"

    static class myfifoClass : public TclClass {
    public:
    myfifoClass() : TclClass("Queue/myfifo") {}
    TclObject* create(int, const char*const*) {
    return (new myfifo);
    }
    } class_myfifo;

    void myfifo::reset()
    {
    Queue::reset();
    }
    int myfifo::command(int argc, const char*const* argv) {
    if (argc==2) {
    if (strcmp(argv[1], "printstats") == 0) {
    print_summarystats();
    return (TCL_OK);
    }
    if (strcmp(argv[1], "shrink-queue") == 0) {
    shrink_queue();
    return (TCL_OK);
    }
    }

    if (argc == 3) {
    if (!strcmp(argv[1], "packetqueue-attach")) {
    delete q_;
    if (!(q_ = (PacketQueue*) TclObject::lookup(argv[2])))
    return (TCL_ERROR);
    else {
    pq_ = q_;
    return (TCL_OK);
    }
    }
    }
    return Queue::command(argc, argv);
    }

    /*
    * drop-tail
    */

    void myfifo::enque(Packet* p)
    {
    if (summarystats) {
    Queue::updateStats(qib_?q_->byteLength():q_->length());
    }
    int qlimBytes = qlim_ * mean_pktsize_;
    if ((!qib_ && (q_->length() + 1) >= qlim_) ||
    (qib_ && (q_->byteLength() + hdr_cmn::access(p)->size()) >= qlimBytes)){
    // if the queue would overflow if we added this packet...
    if (drop_front_) { /* remove from head of queue */
    q_->enque(p);
    Packet *pp = q_->deque();
    drop(pp);
    } else {
    drop(p);
    }

    } else {
    q_->enque(p);
    }
    }

    //AG if queue size changes, we drop excessive packets...
    void myfifo::shrink_queue()
    {
    int qlimBytes = qlim_ * mean_pktsize_;
    if (debug_)
    printf("shrink-queue: time %5.2f qlen %d, qlim %d\n",
    Scheduler::instance().clock(),
    q_->length(), qlim_);
    while ((!qib_ && q_->length() > qlim_) ||
    (qib_ && q_->byteLength() > qlimBytes)) {
    if (drop_front_) { /* remove from head of queue */
    Packet *pp = q_->deque();
    drop(pp);
    } else {
    Packet *pp = q_->tail();
    q_->remove(pp);
    drop(pp);
    }
    }
    }


    Packet* myfifo::deque()
    {
    if (summarystats && &Scheduler::instance() != NULL) {
    Queue::updateStats(qib_?q_->byteLength():q_->length());
    }
    return q_->deque();
    }

    void myfifo::print_summarystats()
    {
    //double now = Scheduler::instance().clock();
    printf("True average queue: %5.3f", true_ave_);
    if (qib_)
    printf(" (in bytes)");
    printf(" time: %5.3f\n", total_time_);
    }

    Step 4

    Next is to edit ns-default.tcl by performing the followings

    a. cd ns-allinone-2.27/ns-2.27/tcl/lib/
    b. open ns-default.tcl by editor software
    c. look for Queue/DropTail
    d. change Queue/DropTail to Queue/myfifo

    Queue/DropTail set drop_front_ false
    Queue/DropTail set summarystats_ false
    Queue/DropTail set queue_in_bytes_ false
    Queue/DropTail set mean_pktsize_ 500

    Queue/myfifo set drop_front_ false
    Queue/myfifo set summarystats_ false
    Queue/myfifo set queue_in_bytes_ false
    Queue/myfifo set mean_pktsize_ 500

    Step 5

    Edit makefile by adding myfifo.cc into OBJ_CC and re-make Ns-2

    a. use editor software to open makefile in ns-allinone-2.27/ns-2.27
    b. look for drop-tail.o
    c. at the end of line for droptail.o add queue/myfifo

    ---------------------------------------------

    tools/flowmon.o tools/loss-monitor.o queue/queue.o queue/drop-tail.o queue/myfifo.o adc/simple-intserv-sched.o queue/red.o
    ---------------------------------------------

    d. re-make ns-2 by make command

    If there is no errors shown, then the module is successfully added.



    Step 6

    You may test the new module by using myfifo command instead of DropTail and verify the result of the simulation as the same as DropTail.

    Here's the summary of how to add a new module in NS-2

    1. Prepare the suitable module files (eg. a.cc and a.h)
    2. if necessary, make changes to ns-default.tcl
    3. edit makefile by adding the necessary module into OBJ_CC eg a.o into OBJ_CC
    4. re-make NS-2
    5. test the new module

    The author would like advise that users should look for the most similiar module to begin with instead of writing everything from scratch.