Difference between revisions of "Ns-3 on Visual Studio 2012"

From Nsnam
Jump to: navigation, search
(How to build)
(redirect to start a new windows page)
 
(51 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 +
'''Note:  This page is dated and kept only for historical reference; it has been replaced by [[Ns-3_on_Visual_Studio | ns-3 on Visual Studio]].'''
 +
 +
== Introduction ==
 +
This project is an effort to provide a version of ns-3 which can be built using a native Windows compiler.
 +
This version is built as a branch from the main ns-3.18 release. Only the most essential components of the simulator are included. Purely Unix-centric source code is excluded and will require additional porting effort.
 +
Source code which depend on third-party libraries are also excluded (We leave it to the user to provide the path to third-party libraries if they wish to use these sources).
 +
 +
=== Supported modules ===
 +
* antenna
 +
* aodv
 +
* applications
 +
* bridge (partial)
 +
* buildings
 +
* config-store (partial)
 +
* core
 +
* csma
 +
* csma-layout
 +
* dsdv
 +
* dsr
 +
* energy
 +
* flow-monitor
 +
* internet
 +
* lte
 +
* mesh
 +
* mobility
 +
* mpi (partial)
 +
* netanim
 +
* network
 +
* nix-vector-routing
 +
* olsr
 +
* point-to-point
 +
* point-to-point-layout
 +
* propagation
 +
* spectrum
 +
* stats (partial)
 +
* uan
 +
* virtual-net-device
 +
* wifi
 +
* wimax
 +
=== Unsupported modules ===
 +
The following modules are not supported either because they are purely unix-centric or they depend on third-party libraries
 +
* brite
 +
* fd-net-device
 +
* topology-read
 +
* visualizer
 +
 
== Prerequisites ==
 
== Prerequisites ==
 
* Visual Studio Express 2012 for C++
 
* Visual Studio Express 2012 for C++
** Visual Studio Express 2012 for C++ can be downloaded from http://www.microsoft.com/visualstudio/eng/downloads
+
** The Free edition of Visual Studio Express 2012 for C++ can be downloaded from http://www.microsoft.com/en-us/download/details.aspx?id=34673
Please note: Visual Studio 2010 is not supported
+
Please note: Visual Studio 2010 and Visual Studio 2013 or 2015 are not supported (in the sense that they may not even have been tried).
 
* Mercurial
 
* Mercurial
 
** Mercurial can be downloaded from http://mercurial.selenic.com/
 
** Mercurial can be downloaded from http://mercurial.selenic.com/
  
 
== How to download ==
 
== How to download ==
The ns-3 package is available for download using mercurial using the command below
+
The ns-3 package is available for download using mercurial using the command below on the command prompt
 
<pre><nowiki>
 
<pre><nowiki>
 
hg clone http://code.nsnam.org/jabraham3/ns-3-win2
 
hg clone http://code.nsnam.org/jabraham3/ns-3-win2
Line 18: Line 64:
 
[[File:Build solution.png|thumbnail|left|Click Build--> Build Solution]]
 
[[File:Build solution.png|thumbnail|left|Click Build--> Build Solution]]
  
If all goes we should see a build log similar to the below
+
If all goes well we should see a build log similar to the below
 
<pre>
 
<pre>
 
1>  main.vcxproj -> C:\ws\test\ns-3-win2\windows\ns-3-dev\Debug\main.exe
 
1>  main.vcxproj -> C:\ws\test\ns-3-win2\windows\ns-3-dev\Debug\main.exe
Line 25: Line 71:
  
 
== Running the main program ==
 
== Running the main program ==
The "main" project is set as the "Startup" project. The "Startup" project contains the program with the 'main' function. The main project is set to run "third.cc".
+
The "main" project is set as the "Startup" project. The "Startup" project contains the only program with the 'main' function. The main project is set to run "third.cc".
 
[[File:Third cc.png|thumbnail|Default program is third.cc]]
 
[[File:Third cc.png|thumbnail|Default program is third.cc]]
  
Line 60: Line 106:
 
# Right-Click on "Source Files" --> "Add"
 
# Right-Click on "Source Files" --> "Add"
 
# In the popup-menu select "Existing Item" to add an existing source file or select "New Item" to create a new source file.
 
# In the popup-menu select "Existing Item" to add an existing source file or select "New Item" to create a new source file.
[[File:Adding.png||Changing the current main program]]
+
<gallery>
 +
File:Adding.png|Changing the current main program
 +
</gallery>
 
# At this point you can repeat the [[#How to build]] steps above to build the solution.
 
# At this point you can repeat the [[#How to build]] steps above to build the solution.
  
 
== Adding a new module ==
 
== Adding a new module ==
 
To create your own module do the following:
 
To create your own module do the following:
* Right-click on the "Solution ns-3-dev" and select Add --> "New Project"
+
* '''Create an empty C++ project'''
[[File:New project.png|framed|left|Add a "New Project"]]
+
** Right-click on the "Solution ns-3-dev" and select Add --> "New Project"
 +
** In the dialog that follows select "Visual C++"--> "Empty Project" as the type of project.
 +
** Enter the name of your module such as "MyModule" and click OK.
 +
* '''Open the properties page'''
 +
** From the solution view, right-click on the new project ("MyModule") and select "Properties"
 +
* '''Set the path to find headers:'''
 +
** Under "Configuration Properties" --> "C/C++" --> "General" --> "Additional Include Directories" on the right-pane append the value "$(SolutionDir)\headers;" to specify the location of other ns-3 headers
 +
* '''Set Preprocessor defintions:'''
 +
** Under "Configuration Properties" --> "C/C++" --> "Preprocessor" --> "Preprocessor definitions" on the right-pane append the value "WIN32"
 +
* '''Set the module as a static library:'''
 +
** Under "Configuration Properties" --> "General" --> "Project Defaults" (on the right-pane) --> "Configuration Type" --> set the value to "Static Library (.lib)"
 +
* '''Set the build to move your modules header files to the common headers location as a post-build event:'''
 +
** Under "Configuration Properties" --> "Build Events" --> "Post-Build Events" --> "Command Line" (on the right-pane) --> Add the following lines to move your API's model and helper headers to the common ns-3 header location.
 +
<pre>
 +
copy "$(SolutionDir)\..\..\src\MyModule\model\*.h"  "$(SolutionDir)\headers\ns3"
 +
copy "$(SolutionDir)\..\..\src\MyModule\helper\*.h"  "$(SolutionDir)\headers\ns3"
 +
</pre>
  
 +
* '''Set the build to move your modules header files to the common headers location as a post-build event for the "InstallHeaders" project:'''
 +
** From the solution view, right-click on the "InstallHeaders" project and select "Properties".Under "Configuration Properties" --> "Build Events" --> "Post-Build Events" --> "Command Line" (on the right-pane) --> Add the following lines to move your API's model and helper headers to the common ns-3 header location.
 +
<pre>
 +
copy "$(SolutionDir)\..\..\src\MyModule\model\*.h"  "$(SolutionDir)\headers\ns3"
 +
copy "$(SolutionDir)\..\..\src\MyModule\helper\*.h"  "$(SolutionDir)\headers\ns3"
 +
</pre>
  
 +
* '''Create model and helper filters to add source files:'''
 +
** From the solution view, right-click on the new project ("MyModule") and select "Add" --> "New Filter" and name the new filter as "model". Repeat the same to create another filter named "helper"
 +
** Right-click the "model" filter and select "Add" --> "New Item" and enter a suitable file name for your source file.
  
 +
* '''Tell the "main" module where to find the object files for your new module:'''
 +
** Right-click on the "main" project and select "Properties" --> "Configuration Properties" --> "Linker" --> "Input" --> "Additional Dependencies" (in the right-pane) and append
 +
<pre>
 +
$(SolutionDir)\MyModule\Debug\*.obj
 +
</pre>
  
 +
* '''Rebuild the solution'''
  
 +
<gallery>
 +
File:New project.png|Selecting a new project
 +
File:Empty project.png|Creating an empty project
 +
File:Properties.png|Selecting project properties
 +
</gallery>
 +
<gallery>
 +
File:Additional include.png|Set Additional Include directories
 +
File:Preprocessor.png|Preprocessor directives
 +
File:Static build.png|Set static build
 +
</gallery>
 +
<gallery>
 +
File:new_filter.png|Create model and helper filters
 +
File:model_helper.png|Add a new source file to model
 +
File:source.png|a new source file under "model"
 +
</gallery>
 +
<gallery>
 +
File:object_files.png|Setting location of object files
 +
</gallery>
  
 
+
== Running Tests ==
 
+
* Right-click on the "test-runner" project and select "Set as StartUp Project". This is required as only one startup project can contain the file with the main-function. By default this is the "main" project. The test-runner project also has a main function as it generates an executable. By default, the test-runner project is not the startup project
 
+
* Click Build->Build Solution in the main IDE menu.
 
+
* If all goes well, this will create the "test-runner.exe" executable, which can be executed from the command-prompt
 
+
<pre>
 
+
c:\ws\test\ns-3-win2\windows\ns-3-dev>cd Debug
 
+
c:\ws\test\ns-3-win2\windows\ns-3-dev\Debug>test-runner.exe
 
+
Running ns-3 tests.
 
+
</pre>
 
+
[[File:Test runner.png|thumbnail|Set test-runner as startup project]]
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
.
+
* In the dialog that follows select "Visual C++"--> "Empty Project" as the type of project.
+
* Enter the name of your module such as "My Module" and click OK.
+
[[File:Empty project.png|framed|left|Create an empty project named "My Module"]]
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
.
+
* From the solution view, right-click on the new project ("My Module") and select "Properties"
+
[[File:Properties.png|framed|left|Properties page]]
+
 
+
== Design of the solution ==
+

Latest revision as of 20:25, 28 March 2018

Note: This page is dated and kept only for historical reference; it has been replaced by ns-3 on Visual Studio.

Introduction

This project is an effort to provide a version of ns-3 which can be built using a native Windows compiler. This version is built as a branch from the main ns-3.18 release. Only the most essential components of the simulator are included. Purely Unix-centric source code is excluded and will require additional porting effort. Source code which depend on third-party libraries are also excluded (We leave it to the user to provide the path to third-party libraries if they wish to use these sources).

Supported modules

  • antenna
  • aodv
  • applications
  • bridge (partial)
  • buildings
  • config-store (partial)
  • core
  • csma
  • csma-layout
  • dsdv
  • dsr
  • energy
  • flow-monitor
  • internet
  • lte
  • mesh
  • mobility
  • mpi (partial)
  • netanim
  • network
  • nix-vector-routing
  • olsr
  • point-to-point
  • point-to-point-layout
  • propagation
  • spectrum
  • stats (partial)
  • uan
  • virtual-net-device
  • wifi
  • wimax

Unsupported modules

The following modules are not supported either because they are purely unix-centric or they depend on third-party libraries

  • brite
  • fd-net-device
  • topology-read
  • visualizer

Prerequisites

Please note: Visual Studio 2010 and Visual Studio 2013 or 2015 are not supported (in the sense that they may not even have been tried).

How to download

The ns-3 package is available for download using mercurial using the command below on the command prompt

hg clone http://code.nsnam.org/jabraham3/ns-3-win2

How to build

Open the solution file "ns-3-win2/windows/ns-3-dev/ns-3-dev.sln" using Visual Studio 2012. After all the projects are loaded do the following:

  • From the menu click "Build" --> "Build Solution"
Click Build--> Build Solution

If all goes well we should see a build log similar to the below

1>  main.vcxproj -> C:\ws\test\ns-3-win2\windows\ns-3-dev\Debug\main.exe
========== Build: 1 succeeded, 0 failed, 34 up-to-date, 0 skipped ==========

Running the main program

The "main" project is set as the "Startup" project. The "Startup" project contains the only program with the 'main' function. The main project is set to run "third.cc".

Default program is third.cc


The executable can be run from the command-prompt by

C:\>cd windows\ns-3-dev\Debug
..Debug>main.exe


executing main.exe








.

Changing the main program

To replace the default main program in the "main" project. Do the following:

  1. Select the "main" project
  2. Expand the "Source Files" filter
  3. Right-Click on the existing .cc file, which in a new installation is "third.cc" and select "Remove"
  4. Right-Click on "Source Files" --> "Add"
  5. In the popup-menu select "Existing Item" to add an existing source file or select "New Item" to create a new source file.
  1. At this point you can repeat the #How to build steps above to build the solution.

Adding a new module

To create your own module do the following:

  • Create an empty C++ project
    • Right-click on the "Solution ns-3-dev" and select Add --> "New Project"
    • In the dialog that follows select "Visual C++"--> "Empty Project" as the type of project.
    • Enter the name of your module such as "MyModule" and click OK.
  • Open the properties page
    • From the solution view, right-click on the new project ("MyModule") and select "Properties"
  • Set the path to find headers:
    • Under "Configuration Properties" --> "C/C++" --> "General" --> "Additional Include Directories" on the right-pane append the value "$(SolutionDir)\headers;" to specify the location of other ns-3 headers
  • Set Preprocessor defintions:
    • Under "Configuration Properties" --> "C/C++" --> "Preprocessor" --> "Preprocessor definitions" on the right-pane append the value "WIN32"
  • Set the module as a static library:
    • Under "Configuration Properties" --> "General" --> "Project Defaults" (on the right-pane) --> "Configuration Type" --> set the value to "Static Library (.lib)"
  • Set the build to move your modules header files to the common headers location as a post-build event:
    • Under "Configuration Properties" --> "Build Events" --> "Post-Build Events" --> "Command Line" (on the right-pane) --> Add the following lines to move your API's model and helper headers to the common ns-3 header location.
copy "$(SolutionDir)\..\..\src\MyModule\model\*.h"  "$(SolutionDir)\headers\ns3"
copy "$(SolutionDir)\..\..\src\MyModule\helper\*.h"  "$(SolutionDir)\headers\ns3"
  • Set the build to move your modules header files to the common headers location as a post-build event for the "InstallHeaders" project:
    • From the solution view, right-click on the "InstallHeaders" project and select "Properties".Under "Configuration Properties" --> "Build Events" --> "Post-Build Events" --> "Command Line" (on the right-pane) --> Add the following lines to move your API's model and helper headers to the common ns-3 header location.
copy "$(SolutionDir)\..\..\src\MyModule\model\*.h"  "$(SolutionDir)\headers\ns3"
copy "$(SolutionDir)\..\..\src\MyModule\helper\*.h"  "$(SolutionDir)\headers\ns3"
  • Create model and helper filters to add source files:
    • From the solution view, right-click on the new project ("MyModule") and select "Add" --> "New Filter" and name the new filter as "model". Repeat the same to create another filter named "helper"
    • Right-click the "model" filter and select "Add" --> "New Item" and enter a suitable file name for your source file.
  • Tell the "main" module where to find the object files for your new module:
    • Right-click on the "main" project and select "Properties" --> "Configuration Properties" --> "Linker" --> "Input" --> "Additional Dependencies" (in the right-pane) and append
$(SolutionDir)\MyModule\Debug\*.obj
  • Rebuild the solution

Running Tests

  • Right-click on the "test-runner" project and select "Set as StartUp Project". This is required as only one startup project can contain the file with the main-function. By default this is the "main" project. The test-runner project also has a main function as it generates an executable. By default, the test-runner project is not the startup project
  • Click Build->Build Solution in the main IDE menu.
  • If all goes well, this will create the "test-runner.exe" executable, which can be executed from the command-prompt
c:\ws\test\ns-3-win2\windows\ns-3-dev>cd Debug
c:\ws\test\ns-3-win2\windows\ns-3-dev\Debug>test-runner.exe
Running ns-3 tests.
Set test-runner as startup project