Contributing to ns-3

ns-3 is an open source project and relies on contributions from the broad community of users and researchers. If you are using ns-3, please consider to give back something to the project in one of the many ways listed below.

There are many possible ways to contribute to the project:

List discussions

Development discussions occur on the ns-developers mailing list: Join | Archives. Some small discussions may also occur within the bug tracker (below), but lengthy discussions in the tracker are encouraged to move to the list.

Discussions about using ns-3 occur on the ns-3-users Google group: Join | Archives If someone asks questions you can help with, please reply on the list.

Bugs, patches, feature requests, and tasks

We use a Bugzilla database for tracking bugs, patches, feature requests, and tasks. Changes to the database are logged to the ns-bugs mailing list.

There are two primary ways to log bug reports, patches, or feature requests:

  1. email the ns-developers mailing list
  2. enter the bug into the Bugzilla database yourself
We strongly prefer the second approach; email to the mailing list runs the risk of falling through the cracks. The second approach requires you to create a Bugzilla account.

If you think you've found a bug and want to report it, please do the following three things first:

  1. search bugzilla to see if someone has entered a similar bug.
  2. search Google to see if the bug has been previously encountered and discussed on an email thread
  3. if you are new to reporting bugs, please read the bug writing guidelines on Bugzilla

Fixing bugs is even more preferred than reporting them. This is typically done by uploading a patch on an existing bug, or filing a bug and immediately filing a patch on it. If you are not familiar with how to prepare patch files, please read this first. You should find the "Create a New Attachment" choice when editing the bug, allowing you to upload a patch. Alternatively, you could provide a URL to a patch in the "Description" field.

Note that providing a simple, reduced test case that reliably reproduces the bug is often requested by the maintainers, so please try to craft such a test case and upload it to the tracker.

Wiki and tutorials

The project maintains a wiki for items such as FAQs, troubleshooting, related projects, design suggestions, and suggested projects. Users often turn to wikis for troubleshooting help and tips. If you figure out some non-obvious solution to a problem with ns-3, consider to enter something on the wiki to help others later.

Please also browse the contributed code and papers pages, and keep this in mind when you come across things that might be of interest to the ns-3 community.

Several people have provided helpful tutorials for ns-3 in the past; if you start such a tutorial for ns-3, we can link to it from our tutorial page.

Documentation

We ask for your help in maintaining our project documentation if you find something wrong or outdated. Please contribute a patch or let the documentation maintainers know. Please also consider to contribute documentation that you may write about ns-3 models (e.g. if a chapter in your thesis has a detailed description of an ns-3 model). Our tutorial and manual source is kept in the doc/ directory of the main tree.

Code contributions

Many people use ns for their research and then would like to contribute their extensions to the project. Some of these extensions are incorporated into the main distribution, and some are maintained or archived as third-party contributed code. While both The practice of contributing code has made ns-2 very successful and we want to facilitate that as much as possible.

Please read our code submissions page for options and instructions on submitting code to ns-3.

The project is maintaining a wiki page for suggested projects for interested researchers or students to undertake.

Maintaining the simulator

If you would like to maintain some part of the simulator (e.g., Windows build, tutorial, wiki, a particular protocol, etc.), please contact someone on the development team.