<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.nsnam.org/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TrtroCnovi</id>
	<title>Nsnam - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.nsnam.org/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TrtroCnovi"/>
	<link rel="alternate" type="text/html" href="https://www.nsnam.org/wiki/Special:Contributions/TrtroCnovi"/>
	<updated>2026-04-08T22:42:59Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://www.nsnam.org/mediawiki/index.php?title=User_FAQ&amp;diff=1465</id>
		<title>User FAQ</title>
		<link rel="alternate" type="text/html" href="https://www.nsnam.org/mediawiki/index.php?title=User_FAQ&amp;diff=1465"/>
		<updated>2008-01-02T22:22:24Z</updated>

		<summary type="html">&lt;p&gt;TrtroCnovi: deltrocca&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;getacelrolge&lt;br /&gt;
ligetgetchi&lt;br /&gt;
{{TOC}}&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;big&amp;gt;The Network Simulator ns-3: Frequently Asked Questions (FAQ)&amp;lt;/big&amp;gt; &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This wiki page is devoted to questions for &amp;lt;b&amp;gt;users&amp;lt;/b&amp;gt; of the simulator.  There is a similar [[Developer_FAQ]] page for ns-3 &amp;lt;b&amp;gt;software developers and maintainers&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== What is the difference between ns-2 and ns-3? ==&lt;br /&gt;
&lt;br /&gt;
[http://www.isi.edu/nsnam/ns ns-2] is a popular discrete-event network simulator developed under several previous research grants and activities.  It remains in active use and will continue to be maintained.&lt;br /&gt;
&lt;br /&gt;
[http://www.nsnam.org ns-3] is a new software development effort focused on improving upon the core architecture, software integration, models, and educational components of ns-2.  The project commenced in July 2006 and there have not yet been any releases (pre-alpha stage).&lt;br /&gt;
&lt;br /&gt;
If you are looking for a simulator to currently use for research, please use ns-2.&lt;br /&gt;
&lt;br /&gt;
== Will ns-2 scripts run on ns-3? ==&lt;br /&gt;
No.   ns-2 uses OTcl as its scripting environment.  ns-3 will use C   programs or python scripts to define simulations.&lt;br /&gt;
&lt;br /&gt;
== I found a bug in ns-3.  How do I report it? ==&lt;br /&gt;
&lt;br /&gt;
Please consult [http://www.nsnam.org/contributing.html#bugs this page].  Also, please consider fixing the bug, not just reporting it :)&lt;br /&gt;
&lt;br /&gt;
== Mercurial ==&lt;br /&gt;
&lt;br /&gt;
=== merging a separate repository with a main repository ===&lt;br /&gt;
&lt;br /&gt;
Q.  I want to incorporate some code from a mercurial branch (repository) that is off the main repository.&lt;br /&gt;
&lt;br /&gt;
A.  (from Mathieu Lacage)&lt;br /&gt;
&lt;br /&gt;
You can create a local clone of the repository and pull into it from the main repository: &lt;br /&gt;
you can push these yourself by creating a&lt;br /&gt;
local clone of that repo and then pushing it back to the main repo. It&lt;br /&gt;
will keep the original history; e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hg clone http://code.nsnam.org/mathieu/ns-3-ptr&lt;br /&gt;
cd ns-3-ptr&lt;br /&gt;
# merge from main ns-3 repository into this other repository&lt;br /&gt;
hg pull http://code.nsnam.org/ns-3&lt;br /&gt;
hg merge&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pushing this new merged repository into another repository will then keep the original change history:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# push back-- must have privileges to push to the repository&lt;br /&gt;
hg push ssh://code@code.nsnam.org/repos/ns-3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== working with subsets of repositories ===&lt;br /&gt;
&lt;br /&gt;
Q.  Is there a way with mercurial to pull/merge/push subsets of the repositories?  For instance, suppose I wanted only to grab the samples directory from a repo and merge that alone.&lt;br /&gt;
&lt;br /&gt;
A.  (from Mathieu Lacage)  You cannot cherry-pick individual changesets other than by exporting&lt;br /&gt;
them to patches first. The reason is that each Changeset contains a&lt;br /&gt;
single hash which is, among others, based on the hash of the 'parent'&lt;br /&gt;
changeset hash. So, if you 'reparent' a changeset, you change its hash&lt;br /&gt;
id because the id of the parent changes. If the hash id of a changeset&lt;br /&gt;
changes, it is a different changeset so, mercurial cannot really manage&lt;br /&gt;
these individual changesets.  There is, however, the [http://www.selenic.com/mercurial/wiki/index.cgi/TransplantExtension transplant extension] that lets you do just that.&lt;br /&gt;
&lt;br /&gt;
So, the idea is that merging happens from one repo to another, and&lt;br /&gt;
cannot be done on a sub-dir basis. The other alternatives are:&lt;br /&gt;
&lt;br /&gt;
1) the latest mercurial has support for in-repo branches: you can&lt;br /&gt;
maintain multiple branches within a single repository but each branch&lt;br /&gt;
represents a branch for the whole repository. &lt;br /&gt;
&lt;br /&gt;
2) the latest mercurial contains the [http://www.selenic.com/mercurial/wiki/index.cgi/ForestExtension forest extension] which is a way&lt;br /&gt;
to make mercurial manage a 'forest' of repos: each repo is independent&lt;br /&gt;
but they also behave as a single big repo through the forest extension.&lt;br /&gt;
&lt;br /&gt;
== WAF (new build process) ==&lt;br /&gt;
See also the [http://www.nsnam.org/wiki/index.php/Developer_FAQ#The_WAF_build_system WAF developers FAQ]&lt;br /&gt;
=== How to build NS-3 ===&lt;br /&gt;
First choose the debug level that you want. To select the debug level, you have to ''configure'' NS-3 first with the command:&amp;lt;pre&amp;gt;&lt;br /&gt;
./waf configure -d debuglevel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Where ''debuglevel'' is one of:&lt;br /&gt;
* ''debug'' (the default): builds NS-3 with the most suited options for debugging.  This includes disabling of all optimization, since it confuses the debugger and makes debugging very difficult.  It also activates NS-3 internal assertions to catch all programming errors, as well as enabling support for debugging messages (NS_DEBUG and NS_DEBUG_UNCONDITIONAL).  This mode should be used initially for development, until you are happy that the code runs correctly and does not contain any serious programming mistake.&lt;br /&gt;
* ''optimized'': this compiles NS-3 with optimization, but disabled assertions and debugging messages.  Use this when the program is correct and you just want to extrat results.&lt;br /&gt;
&lt;br /&gt;
It is also possible to customize the C compilation flags through the CXXFLAGS environment variable. Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CXXFLAGS='-O3' ./waf configure -d optimized&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [http://code.google.com/p/waf/wiki/EnvironmentVariables here] for a list of additional environment variables that can be used to control waf configure.  After configuration, NS-3 can be built with the command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./waf build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[ The waf command ''build'' can be omitted, since it is the default command. ]&lt;br /&gt;
&lt;br /&gt;
'''WARNING''': even though the -d option is accepted outside &amp;quot;waf configure&amp;quot;, it is completely ignored unless applied together with the configure command.&lt;br /&gt;
&lt;br /&gt;
=== How to run NS-3 programs ===&lt;br /&gt;
First, the builtin NS-3 [http://en.wikipedia.org/wiki/Unit_test unit tests] can be executed with the command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./waf check&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run the remaining programs, there are three different ways to do it.&lt;br /&gt;
# The hard way: because NS-3 is built as a set of shared library (dll) files, it requires you to manually configure LD_LIBRARY_PATH, PATH, or DYLD_LIBRARY_PATH, depending on your platform, to make them point to each ns-3 module directory.  Only then can you run the programs that were built as &amp;lt;code&amp;gt;build/&amp;lt;debuglevel&amp;gt;/path/to/program&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Easy way #2: run &amp;lt;code&amp;gt;./waf --shell&amp;lt;/code&amp;gt;.  You will then have a new nested shell from which programs can be run, e.g. &amp;lt;code&amp;gt;gdb ./build/debug/examples/simple-p2p&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Easy way #1: &amp;lt;code&amp;gt;./waf --run programname&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;./waf --run &amp;quot;programname args&amp;quot;&amp;lt;/code&amp;gt;.  To find out available program names, run &amp;lt;code&amp;gt;./waf --run non-existent-program-name&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== How to run NS-3 programs under another tool ===&lt;br /&gt;
For running ns-3 programs with gdb or valgrind, try the following:&lt;br /&gt;
* Use the &amp;quot;command-template&amp;quot; argument; e.g. &lt;br /&gt;
** &amp;lt;code&amp;gt; waf --run csma-cd-one-subnet --command-template=&amp;quot;gdb %s&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt; waf --run csma-cd-one-subnet --command-template=&amp;quot;valgrind %s&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Scons (old build process) ==&lt;br /&gt;
&lt;br /&gt;
===  Library not loaded error ===&lt;br /&gt;
Question:  On Apple osX, I built ns-3 successfully, but when I try to run a sample program I get something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; ./sample-packet&lt;br /&gt;
dyld: Library not loaded: build-dir/dbg-shared/lib/libcommon.dylib&lt;br /&gt;
  Referenced from: /tmp/ns-3/build-dir/dbg-shared/bin/./sample-packet&lt;br /&gt;
  Reason: image not found&lt;br /&gt;
Trace/BPT trap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Answer:  This is because the library path variable of your environment does not include the location where the ns-3 modules (libraries) are located.&lt;br /&gt;
&lt;br /&gt;
In OS X, you need to set the DYLD_LIBRARY_PATH variable to include the library directory.  These need to include the lib/ directory where these ns-3 libraries are built. On Linux and Solaris systems, you should never warnings of this kind. If you do, please, report a bug.&lt;br /&gt;
&lt;br /&gt;
In this example, setting&lt;br /&gt;
DYLD_LIBRARY_PATH=/tmp/ns-3/build-dir/dbg-shared/lib/&lt;br /&gt;
will work.&lt;br /&gt;
&lt;br /&gt;
=== How do I do the equivalent of a &amp;quot;make clean&amp;quot;? ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scons -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TrtroCnovi</name></author>
	</entry>
</feed>