GSOC2020PatchRequirement: Difference between revisions
(Created page with "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 a...") |
(patch requirement) |
||
Line 1: | Line 1: | ||
{{TOC}} | |||
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. | 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. | ||
Line 28: | Line 30: | ||
=== Objective === | === Objective === | ||
Recently, an ns-3 maintainer asked about [https://mailman.isi.edu/pipermail/ns-developers/2020-February/014992.html how to create an attribute value for a const Object pointer]. In order to work with the [https://www.nsnam.org/docs/manual/html/attributes.html#id1 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 [https://www.nsnam.org/docs/manual/html/object-model.html an ns-3 Object] through the attribute system. The ns-3 [https://www.nsnam.org/docs/doxygen/classns3_1_1_pointer_value.html PointerValue] class does this. | |||
For an example of how this can be used, study the code found in the attribute test suite; specifically: | |||
* https://gitlab.com/nsnam/ns-3-dev/-/blob/master/src/core/test/attribute-test-suite.cc#L206 | |||
and | |||
* https://gitlab.com/nsnam/ns-3-dev/-/blob/master/src/core/test/attribute-test-suite.cc#L1257 | |||
For a practical example (there are several in the ns-3 codebase): | |||
* https://gitlab.com/nsnam/ns-3-dev/-/blob/master/src/lte/model/lte-enb-phy.cc#L232 | |||
The implementation of PointerValue is found here: | |||
* | * https://gitlab.com/nsnam/ns-3-dev/-/blob/master/src/core/model/pointer.h | ||
* https://gitlab.com/nsnam/ns-3-dev/-/blob/master/src/core/model/pointer.cc | |||
'' | 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 | 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 === | === 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 [http://www.nsnam.org/developers/contributing-code/submit/ 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. |
Revision as of 17:01, 6 March 2020
Main Page - Roadmap - Summer Projects - Project Ideas - Developer FAQ - Tools - Related Projects
HOWTOs - Installation - Troubleshooting - User FAQ - 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:
- 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).
Minimum requirement patch
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
Objective
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:
and
For a practical example (there are several in the ns-3 codebase):
The implementation of PointerValue is found here:
- https://gitlab.com/nsnam/ns-3-dev/-/blob/master/src/core/model/pointer.h
- https://gitlab.com/nsnam/ns-3-dev/-/blob/master/src/core/model/pointer.cc
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.