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:
- 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.
- 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 GitLab.com snippet).
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 https://gitlab.com/nsnam/ns-3-dev.git $: 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 $: ./test.py
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", TypeId::ATTR_GET, PointerToConstValue (), MakePointerToConstAccessor (&LteEnbPhy::GetDlSpectrumPhy), MakePointerToConstChecker <const LteSpectrumPhy> ())
We would like a patch that does the following:
- implement pointer-to-const.h and pointer-to-const.cc in the src/core directory, following very closely the pointer.h and pointer.cc approach
- extend src/core/test/attribute-test-suite.cc 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/test-attribute-test-suite.cc.
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 github.com, or a snippet on gitlab.com, 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.