Difference between revisions of "GSOC2020PatchRequirement"
(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...") |
(→Objective) |
||
(3 intermediate revisions by the same user not shown) | |||
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 5: | Line 7: | ||
For everyone else, there are two choices: | For everyone else, there are two choices: | ||
− | # Fix one of our [https://gitlab.com/nsnam/ns-3-dev/issues 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. | + | # Fix one of our [https://gitlab.com/nsnam/ns-3-dev/issues open technical issues] by submitting a merge request [https://www.nsnam.org/docs/manual/html/working-with-git.html 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 [https://docs.gitlab.com/ee/user/snippets.html GitLab.com snippet]). | # 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 [https://docs.gitlab.com/ee/user/snippets.html GitLab.com snippet]). | ||
− | == | + | == Patch requirement == |
=== Setting up the environment === | === Setting up the environment === | ||
Line 28: | Line 31: | ||
=== 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: | |
− | + | ||
− | The | + | |
+ | .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 === | === 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. |
Latest revision as of 17:14, 6 March 2020
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:
- 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).
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 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.