6754
|
1 |
.. include:: replace.txt
|
|
2 |
|
|
3 |
Resources
|
|
4 |
---------
|
|
5 |
|
|
6 |
The Web
|
|
7 |
*******
|
|
8 |
|
|
9 |
There are several important resources of which any |ns3| user must be
|
|
10 |
aware. The main web site is located at http://www.nsnam.org and
|
|
11 |
provides access to basic information about the |ns3| system. Detailed
|
|
12 |
documentation is available through the main web site at
|
7654
|
13 |
http://www.nsnam.org/documentation/. You can also find documents
|
6754
|
14 |
relating to the system architecture from this page.
|
|
15 |
|
|
16 |
There is a Wiki that complements the main |ns3| web site which you will
|
|
17 |
find at http://www.nsnam.org/wiki/. You will find user and developer
|
|
18 |
FAQs there, as well as troubleshooting guides, third-party contributed code,
|
|
19 |
papers, etc.
|
|
20 |
|
|
21 |
The source code may be found and browsed at http://code.nsnam.org/.
|
|
22 |
There you will find the current development tree in the repository named
|
|
23 |
``ns-3-dev``. Past releases and experimental repositories of the core
|
|
24 |
developers may also be found there.
|
|
25 |
|
|
26 |
Mercurial
|
|
27 |
*********
|
|
28 |
|
|
29 |
Complex software systems need some way to manage the organization and
|
|
30 |
changes to the underlying code and documentation. There are many ways to
|
|
31 |
perform this feat, and you may have heard of some of the systems that are
|
|
32 |
currently used to do this. The Concurrent Version System (CVS) is probably
|
|
33 |
the most well known.
|
|
34 |
|
|
35 |
The |ns3| project uses Mercurial as its source code management system.
|
|
36 |
Although you do not need to know much about Mercurial in order to complete
|
|
37 |
this tutorial, we recommend becoming familiar with Mercurial and using it
|
|
38 |
to access the source code. Mercurial has a web site at
|
|
39 |
http://www.selenic.com/mercurial/,
|
|
40 |
from which you can get binary or source releases of this Software
|
|
41 |
Configuration Management (SCM) system. Selenic (the developer of Mercurial)
|
|
42 |
also provides a tutorial at
|
|
43 |
http://www.selenic.com/mercurial/wiki/index.cgi/Tutorial/,
|
|
44 |
and a QuickStart guide at
|
|
45 |
http://www.selenic.com/mercurial/wiki/index.cgi/QuickStart/.
|
|
46 |
|
|
47 |
You can also find vital information about using Mercurial and |ns3|
|
|
48 |
on the main |ns3| web site.
|
|
49 |
|
|
50 |
Waf
|
|
51 |
***
|
|
52 |
|
|
53 |
Once you have source code downloaded to your local system, you will need
|
|
54 |
to compile that source to produce usable programs. Just as in the case of
|
|
55 |
source code management, there are many tools available to perform this
|
|
56 |
function. Probably the most well known of these tools is ``make``. Along
|
|
57 |
with being the most well known, ``make`` is probably the most difficult to
|
|
58 |
use in a very large and highly configurable system. Because of this, many
|
|
59 |
alternatives have been developed. Recently these systems have been developed
|
|
60 |
using the Python language.
|
|
61 |
|
|
62 |
The build system Waf is used on the |ns3| project. It is one
|
|
63 |
of the new generation of Python-based build systems. You will not need to
|
7654
|
64 |
understand any Python to build the existing |ns3| system.
|
6754
|
65 |
|
|
66 |
For those interested in the gory details of Waf, the main web site can be
|
|
67 |
found at http://code.google.com/p/waf/.
|
|
68 |
|
|
69 |
Development Environment
|
|
70 |
***********************
|
|
71 |
|
|
72 |
As mentioned above, scripting in |ns3| is done in C++ or Python.
|
7654
|
73 |
Most of the |ns3| API is available in Python, but the
|
6754
|
74 |
models are written in C++ in either case. A working
|
|
75 |
knowledge of C++ and object-oriented concepts is assumed in this document.
|
|
76 |
We will take some time to review some of the more advanced concepts or
|
|
77 |
possibly unfamiliar language features, idioms and design patterns as they
|
|
78 |
appear. We don't want this tutorial to devolve into a C++ tutorial, though,
|
|
79 |
so we do expect a basic command of the language. There are an almost
|
|
80 |
unimaginable number of sources of information on C++ available on the web or
|
|
81 |
in print.
|
|
82 |
|
|
83 |
If you are new to C++, you may want to find a tutorial- or cookbook-based
|
|
84 |
book or web site and work through at least the basic features of the language
|
|
85 |
before proceeding. For instance, `this tutorial
|
|
86 |
<http://www.cplusplus.com/doc/tutorial/>`_.
|
|
87 |
|
|
88 |
The |ns3| system uses several components of the GNU "toolchain"
|
|
89 |
for development. A
|
|
90 |
software toolchain is the set of programming tools available in the given
|
|
91 |
environment. For a quick review of what is included in the GNU toolchain see,
|
|
92 |
http://en.wikipedia.org/wiki/GNU_toolchain. |ns3| uses gcc,
|
|
93 |
GNU binutils, and gdb. However, we do not use the GNU build system tools,
|
|
94 |
neither make nor autotools. We use Waf for these functions.
|
|
95 |
|
|
96 |
Typically an |ns3| author will work in Linux or a Linux-like
|
|
97 |
environment. For those running under Windows, there do exist environments
|
|
98 |
which simulate the Linux environment to various degrees. The |ns3|
|
7654
|
99 |
project has in the past (but not presently) supported development in the Cygwin environment for
|
6754
|
100 |
these users. See http://www.cygwin.com/
|
7654
|
101 |
for details on downloading, and visit the |ns3| wiki for more information
|
|
102 |
about Cygwin and |ns3|. MinGW is presently not officially supported.
|
6754
|
103 |
Another alternative to Cygwin is to install a virtual machine environment
|
|
104 |
such as VMware server and install a Linux virtual machine.
|
|
105 |
|
|
106 |
Socket Programming
|
|
107 |
******************
|
|
108 |
|
|
109 |
We will assume a basic facility with the Berkeley Sockets API in the examples
|
|
110 |
used in this tutorial. If you are new to sockets, we recommend reviewing the
|
|
111 |
API and some common usage cases. For a good overview of programming TCP/IP
|
|
112 |
sockets we recommend `TCP/IP Sockets in C, Donahoo and Calvert
|
|
113 |
<http://www.elsevier.com/wps/find/bookdescription.cws_home/717656/description#description>`_.
|
|
114 |
|
|
115 |
There is an associated web site that includes source for the examples in the
|
|
116 |
book, which you can find at:
|
|
117 |
http://cs.baylor.edu/~donahoo/practical/CSockets/.
|
|
118 |
|
|
119 |
If you understand the first four chapters of the book (or for those who do
|
|
120 |
not have access to a copy of the book, the echo clients and servers shown in
|
|
121 |
the website above) you will be in good shape to understand the tutorial.
|
|
122 |
There is a similar book on Multicast Sockets,
|
|
123 |
`Multicast Sockets, Makofske and Almeroth
|
|
124 |
<http://www.elsevier.com/wps/find/bookdescription.cws_home/700736/description#description>`_.
|
|
125 |
that covers material you may need to understand if you look at the multicast
|
|
126 |
examples in the distribution.
|