From Nsnam
Jump to: navigation, search

Main Page - Current Development - Developer FAQ - Tools - Related Projects - Project Ideas - Summer Projects

Installation - Troubleshooting - User FAQ - HOWTOs - Samples - Models - Education - Contributed Code - Papers

As part of their Google Summer of Code 2020 applications to ns-3, we require that students produce at least a small amount of code for ns-3. This will allow us to gauge your ability to dive into source code, understand it, make a modification, and proceed to build and verify if your modification works.

Applicants who have already contributed a patch to ns-3 should check with the org admins whether the patch requirement can be satisfied by this prior code. If you have code posted somewhere else (GitHub, for example, or a class project page) that you feel is a good indicator of your ability to write ns-3 code, please point us to the URL.

For everyone else, there are two choices:

  1. Fix one of our open technical issues by submitting a merge request in the usual way.
    • Note: if there is already a fix pending for a given issue, one cannot duplicate the effort and submit a second request.
  2. Complete the minimum patch requirement project below, and submit the patch not as a merge request (where others can see it) but privately as a diff or patchfile, or snippet).

Patch requirement

Setting up the environment

Perform the following steps (you may want to review our Installation page):

  • Download the ns-3-dev repository, or fork it or clone it from Git:
 $: git clone
 $: cd ns-3-dev
 $: git checkout -b patch-requirement origin/master
  • Verify if you can build ns-3 and run the test suite:
 $: ./waf configure --disable-python --enable-examples --enable-tests
 $: ./waf build
 $: ./


Recently, an ns-3 maintainer asked about how to create an attribute value for a const Object pointer. In order to work with the ns-3 attribute system, ns-3 provides so-called 'value' classes that wrap an underlying C++ type. Sometimes, an author will want to expose a smart pointer to an ns-3 Object through the attribute system. The ns-3 PointerValue class does this.

For an example of how this can be used, study the code found in the attribute test suite; specifically:


For a practical example (there are several in the ns-3 codebase):

The implementation of PointerValue is found here:

What Natale is asking for is a new class that will allow pointing to a const object. We can call this 'PointerToConstValue'. In the LTE case, it would look like this:

   .AddAttribute ("DlSpectrumPhy",
                  "The downlink LteSpectrumPhy associated to this LtePhy",
                  PointerToConstValue (),
                  MakePointerToConstAccessor (&LteEnbPhy::GetDlSpectrumPhy),
                  MakePointerToConstChecker <const LteSpectrumPhy> ())

We would like a patch that does the following:

  1. implement pointer-to-const.h and in the src/core directory, following very closely the pointer.h and approach
  2. extend src/core/test/ to provide test code that tries out the PointerToConstValue class.

The patch should contain the modification to src/core/wscript to include the two new files, the two new files themselves, and a patch to src/core/

What to submit

A patch to ns-3-dev that accomplishes the objectives. In your GSoC application, point us to a publicly available URL where you've hosted the patch (such as a "gist" on, or a snippet on, for instance). See also some guidelines here about formatting patches for review. If you need help with this step, contact the ns-3 Org Admin (Tom Henderson) for advice.

Note: Keep your solution private by pasting the link in your application to Google, not posting it on the mailing list.

Note: You can share your patch with a GSoC mentor prior to the deadline, for initial feedback, if you have any doubt about it.