Difference between revisions of "GSOC2022Projects"

From Nsnam
Jump to: navigation, search
Line 7: Line 7:
 
* [[GSOC2022ContributorGuide |ns-3's 2022 GSoC Contributor guide]]
 
* [[GSOC2022ContributorGuide |ns-3's 2022 GSoC Contributor guide]]
 
* [https://developers.google.com/open-source/gsoc/resources/guide GSoC contributor/student guide (not ns-3 specific)]
 
* [https://developers.google.com/open-source/gsoc/resources/guide GSoC contributor/student guide (not ns-3 specific)]
* [[GSOC2022StudentApplicationTemplate |2022 GSoC Student application template]]
+
* [[GSOC2022ApplicationTemplate |2022 GSoC Contributor application template]]
 
* [[GSOCMentorGuide | ns-3's GSoC Mentor guide]]
 
* [[GSOCMentorGuide | ns-3's GSoC Mentor guide]]
 
* [https://archive.flossmanuals.net/gsocmentoring/index.html GSoC Mentor guide (not ns-3 specific)]
 
* [https://archive.flossmanuals.net/gsocmentoring/index.html GSoC Mentor guide (not ns-3 specific)]
* [[GSOCSelectionProcess | GSoC Student Selection Process]]
+
* [[GSOCSelectionProcess | GSoC Contributor Selection Process]]
 
* ''Get in contact with the ns-3 team'': [http://mailman.isi.edu/mailman/listinfo/ns-developers ns-developers mailing list] | ''chat'' https://ns-3.zulipchat.com/
 
* ''Get in contact with the ns-3 team'': [http://mailman.isi.edu/mailman/listinfo/ns-developers ns-developers mailing list] | ''chat'' https://ns-3.zulipchat.com/
  

Revision as of 02:15, 10 February 2022

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

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

This page contains 2022 Google Summer of Code project ideas for ns-3.


About the ns-3 project

ns-3 is a discrete-event network simulator, with a particular emphasis on network research and education.

Users of ns-3 can construct simulations of computer networks using models of traffic generators, protocols such as TCP/IP, and devices and channels such as WiFi, and analyze or visualize the results. Simulation plays a vital role in the research and education process, because of the ability for simulations to obtain reproducible results (particularly for wireless protocol design), scale to large networks, and study systems that have not yet been implemented. A particular emphasis in ns-3 is the high degree of realism in the models (including frameworks for real application and kernel code) and integration of the tool with virtual machine environments and testbeds; we view that researchers need to move more effortlessly between simulation, testbeds, and live experiments, and ns-3 is designed to facilitate that.

ns-3 has participated in past GSoCs during 2008-10, 2012-15, and 2017-21. We seek students interested in the intersection of wireless and computer networking, performance analysis, and open source software.

Org admins

Google Summer of Code organizational admins for ns-3 are Tommaso Pecorella and Mohit P. Tahiliani; contact them with any questions. They also hang out on Zulip.

Mentors

Mentors will be paired with students based on the projects that are selected. Mentors from companies are welcome, if the employer will permit the mentor sufficient time to perform the mentoring. Prospective mentors should notify Mohit P. Tahiliani or Tommaso Pecorella of interest. Mentors familiar with ns-3 development practices will be preferred, to improve the chances of student code merge. In 2022, we are going to be seeking two-person or multiple-person mentoring teams for projects, to help with the mentoring workload and bring more expertise.

The current list of prospective mentors for 2022 will be posted below:

  • To be posted at a later date*

Changes from last year

Google has changed the program again, allowing us to define medium-sized (175 hours) and large-sized (350 hours) projects. Therefore, we will be seeking to define projects with different scopes, accordingly. In general, we seek projects that aim to improve the existing simulator rather than add new features. Google also is opening participation to non-students (18-years or older).

How to apply

For students or contributors interested in applying to ns-3 for GSoC, please go through the following list to get started:

  • Read the official GSoC student guide.
  • Read ns-3's GSoC Student guide
  • Look through our #Project Ideas below to see if you find a project that interests you.
  • Review the tutorial and contributing guide thoroughly, if you have not already done so.
  • Once it is posted, look through the GSoC Student application template to start preparing your proposal. We will wait to see whether we are actually part of GSoC before posting this.
  • Next, proceed to get in touch with the developers on the mailing list or chat room and refine your proposal.
  • In parallel, make sure you prepare a patch as per the patch requirement guidelines. Your application to ns-3 will not be considered if you do not fulfill this requirement.

Below is a list of #Project Ideas proposed by the ns-3 team for Google Summer of Code 2022. Please note that these ideas are not limited to GSoC; anyone is welcome to work on them. Please email the ns-developers list if you have a different idea that you'd like to work on, to see if a mentor may be interested. Applicants are encouraged to look over this list, pick one that especially interests them, think about it, and discuss potential approaches on the ns-developers list. Previous experience with the Google Summer of Code programmes suggest that the more you discuss and refine your proposal on the mailing list beforehand, the stronger the proposal it will develop into, and the higher your chances of being accepted into the programme.

Each project idea within a particular priority has been tagged with the following properties:

  • Required Experience: Languages, concepts, or packages with which applicants must be familiar.
  • Bonus Experience: Other experience or familiarity which would be greatly helpful to applicants for this project.
  • Interests: Areas of particular relevance to this project, and an indicator of where successful students might apply their experiences coming out of this project.
  • Difficulty: easy, medium or difficult
  • Recommended reading: pointers to documentation, papers, specific bugs, etc.

Note that all of the projects require some experience and comfort with C++. Project ideas for which C++ is noted as a required experience will require more and deeper familiarity with the language. A similar notion applies to computer networking, BSD sockets, etc: Familiarity is strongly preferred, but is not required except where explicitly noted due to the topic being more advanced in that regard. A few projects are more Python-centric.

Patch requirement guidelines

Each project idea has (or will have) a list of proposed tasks that a student must do to ensure his/her ability to carry out the idea successfully. Performing one task is necessary for a successful application, and performing more than one task is not necessary.

If a student wants to work on a proposed task he/she should immediately contact the mentor(s) to "claim" that task - in order to avoid (where needed) that multiple students are on the same task. A task might involve fixing a specific open issue, or adding some functionalities to the existing code.

Students that did already contribute to the ns-3 codebase with non-trivial bug fixing or features additions might be exempted from performing a task. If you have doubts about if your contributions made you eligible for the task exemption contact the mentors.

Mentors: how to participate

The ns-3 project is open to the proposal of new project ideas by developers interested in being a GSoC mentor. For mentors who're adding project ideas to the list below, please ensure that:

  • The projects are sized such that there can be a code merge by the end of the coding period. The scope of the project should be such that it is very difficult to *not* have a code merge by the end of the summer.
  • The proposed projects are not too open-ended. That is, if the deliverables or a clear path to the same are not well understood, it is better kept outside GSOC.
  • There should be a clear merge path to one of the main project code repositories (ns-3-dev, ns-3-dce, bake) by the end of the summer, either because the patches directly apply to these repositories, or because they apply to an ns-3 module that is in the process of being merged with ns-3-dev.

Project Ideas

Note to students: These ideas are not listed in any priority order. If an idea doesn't have a mentor yet, it means that if you are interested, you should announce your interest and see if there is a mentor who might pick it up.

Linux-like Loss Detection Techniques for ns-3 TCP

Mentors:This project is a carryover from 2021; it will be a candidate if mentors are available.

Forward Acknowledgement (FACK), Duplicate Selective Acknowledgement (DSACK), Tail Loss Probe (TLP) and Recent Acknowledgement (RACK) are the loss detection techniques implemented in the Linux kernel. These techniques have been already implemented for ns-3 TCP but their code is not yet merged into the mainline. This project has four main goals: (1) update the implementation of these techniques according to the latest ns-3-dev, (2) develop a framework to test the functionality of these techniques, (3) develop example program(s) to demonstrate the usage of these techniques in ns-3 and (4) merge these techniques in the mainline of ns-3.


LoRaWAN

Mentor: This project is a carryover from 2021; it will be a candidate if mentors are available.

LoRaWAN is a communication technology for the Internet of Things, that allows battery-powered devices to wirelessly transmit data over long distances. Thanks to the lorawan module for ns-3, users can simulate networks where thousands of such devices communicate with a central server through multiple gateways. Packets might collide and be lost, devices might need to re-transmit them, and the central server can tell devices to change their transmission parameters according to suitable, exotic algorithms - we model it all.

This module rapidly grew in the last period, with the addition of various features and functionalities that are not completely tested nor documented, yet. In this project, you will mostly work to (1) integrate these features into the mainline code, and (2) improve the LoRaWAN module's testing and documentation.

Additionally, according to time availability and your interest, you can also help showcasing the potentialities of the lorawan module through the SEM library. Indeed, SEM can be used together with the lorawan module to provide users with meaningful examples, with the dual objective of giving a better understanding of what is going on within a single simulation, as well as how a simulation campaign can be easily conducted.

SEM - Examples and documentation

Mentor: This project is a carryover from 2021; it will be a candidate if mentors are available.

The SEM Python library was designed to help ns-3 users run complex simulation campaigns. Among other things, SEM strives to make it as easy as possible to parse the output of simulations and to obtain plots that show the impact of simulation parameters on the network's performance.

One of the objectives for the next big SEM release is to provide users with more examples that are both easy to modify and that showcase the full potential of the library and of the Python data analysis ecosystem. In this project, your objective will be to show how SEM can be used from within Jupyter Notebooks to gradually explore the behavior of a network. Aside from the creation of new examples, you will also have the opportunity to try your hand at the all-important task of writing documentation. If there's time and you feel like tackling the issue, in a second part of the project you will also explore how SEM can be used to visualize the behavior of single simulations that leverage ns-3's built-in logging.

  • Required Experience: Familiarity with Python and C++ programming.
  • Bonus Experience: Familiarity with Jupyter Notebooks.
  • Difficulty: Medium.
  • For more info: http://github.com/signetlabdei/sem
  • Patch requirement: Create a pull request completing any of the following tasks:
    • Create a new example SEM script, that runs a program different from wifi-multi-tos and plots some meaningful result
    • Add a test that improves the codecov score (you can do this either on the develop branch or on the newrelease branch)

Upgrade the AQM Evaluation Suite for ns-3

Mentors: This project is a carryover from 2021; it will be a candidate if mentors are available.

AQM (Active Queue Management) evaluation suite for ns-3 helps to quickly study the performance of AQM algorithms based on the guidelines mentioned in RFC 7928. This suite automates simulation setup, topology creation, traffic generation, program execution, results collection and their graphical representation using ns-3 based on the scenarios mentioned in RFC 7928. It was designed and developed in 2017 and actively maintained till 2019. In the past two years, the traffic control model in ns-3 has grown significantly in terms of supporting state-of-the-art packet scheduling and AQM algorithms. This project has four main goals: (1) upgrade the AQM Evaluation Suite according to the latest ns-3-dev, (2) enable support for latest packet scheduling, AQM algorithms and ECN functionality (3) update the examples in AQM Evaluation Suite to better suit the needs of researchers working in this area, and (4) make AQM Evaluation Suite available on the ns-3 app store.

  • Required Experience: Familiarity with AQM and C++ programming.
  • Bonus Experience: Familiarity with traffic control model in ns-3.
  • Interests: Packet Scheduling algorithms, AQM algorithms and ECN.
  • Difficulty: Medium.
  • Recommended Reading:
  • Patch requirement: Create a pull request to handle the case when an incorrect Scenario name or number is passed via command line. Examples:
    • ./waf --run "aqm-eval-suite-runner --name=<unsupported scenario>"
    • ./waf --run "aqm-eval-suite-runner --number=<unsupported number>"

TCP maximum segment size (MSS) improvements

Mentors: This project is a carryover from 2021; it will be a candidate if mentors are available.

TCP performances are affected by the maximum segment size (MSS) - a wrong choice might either lead to inefficient transmission (higher overhead) or IP fragmentation.

At the moment ns-3 implementation allows to set the MSS via an Attribute (set by default to 536 bytes by TcpSocket Attribute "SegmentSize"). Although it is stated that it "may be adjusted based on MTU discovery", its value is not changed in a simulation.

The goal of the project is to update the MSS handling, allowing to: 1) Set it to a fixed size, or allowing auto-probing of "optimal" MSS, 2) Use and honor the TcpOptionMSS (RFC 793), with a proper example of use, and 3) React to intermediate links with short MTU, and/or to changes in the Path MTU (PMTU).

The last point is to be carefully handled, as in many points in the code there is an implicit assumption that the MSS is constant in a given flow.

Moreover, note that finding the optimal PMTU is not that simple, as IPv6 and IPv4 react differently to packets exceeding the link MTU, and they won't notify if a packet is shorter than the link MTU. As a consequence, it would be useful to implement the Packetization Layer Path MTU Discovery (RFC 4821) - which might exceed the GSoC timeframe.

Hence, it would be advisable to carefully select the features to be supported and tested in the project, eventually paving the ground for future enhancements.

Enable IPv6 support for Ad hoc Routing Protocols in ns-3

Mentors: This project is a carryover from 2021; it will be a candidate if mentors are available.

ns-3 contains models for proactive (DSDV and OLSR) and reactive (AODV and DSR) ad hoc routing protocols. However, these models are IPv4-only and do not provide support of IPv6 addressing. This project aims to enable IPv6 support for ad hoc routing protocols in ns-3, mainly for AODV. There are out-of-tree implementations of OLSR and DSDV that provide support for IPv6 addressing, and can be used as references to get started with this project.

The most important point of the implementation should be code duplicate minimization, in order to have the minimize maintenance efforts.

Note: Enabling IPv6 support for these protocols is not a matter of simply changing out an IPv4-formatted address for an IPv6-formatted address. The IPv6 addressing architecture emphasizes scoping much more than does IPv4 (RFC 4007). Please suggest in your application how IPv6 address configuration (and possibly auto-configuration?) and address scopes (e.g. link-local vs. global) should be used in these protocols. Consulting the RFCs is highly recommended.

Possible tasks to fulfill the patch requirement:

  • Issue #271 - olsr header and messages are not printing either their size or their content.
  • Issue #368 - aodv: aodv parameters can be set to "impossible" values

IPv6 global routing

Mentors: This project is a carryover from 2021; it will be a candidate if mentors are available.

Creating a complex topology can be a problem, and sometimes the user do not want to be (also) concerned about setting up dynamic routing protocols (e.g., RIP, RIPng). For IPv4, ns-3 provides two alternatives: GlobalRouting, and NixRouting, which just "do the trick" - they simply fill the routing tables in intermediate nodes, GlobalRouting using an approach similar to OSPF, NixRouting by leveraging the "abstract" knowledge of the network. Neither actually use any message between the nodes, so they also reduce the network overhead - something that is useful in many cases.

The problem is that they don't work for IPv6, and that's a huge limitation. The goal of the project is to fix that limitation. Note that the project must cope with different IPv6 address kinds (link-local, global, scoped multicast, etc.). Due to the limitation with GlobalRouting w.r.t. wireless channels, it would be advisable to start working with NixRouting.

The most important point of the implementation should be code duplicate minimization, in order to have the minimize maintenance efforts.

Possible tasks to fulfill the patch requirement:

  • Add a function to print the path that a packet will use (according to Ipv4NixVectorRouting), i.e., given source and destination IP print the IP addresses of the nodes that Ipv4NixVectorRouting will use.
  • Add a function to print the path that a packet will use (according to Ipv4GlobalRouting), i.e., given source and destination IP print the IP addresses of the nodes that Ipv4GlobalRouting will use.

Dynamic IPv6 Address Configuration for LTE

Mentors: This project is a new project; it will be a candidate if mentors are available.

This project aims to enable the feature of supporting more than one EPCs in LTE module of ns-3. Currently IPv6 support is available in LTE module, but IPv6 address assignment to EPC components like PGW, eNB and UE is static. Manual IPv6 address assignment was there, and so when create another instance of EPC, it configures with the same IPv6 address for the components. Although the interface id will be different for different components, but the initial 64 bit prefix will remain same, hence it is creating conflict in routing for more than one EPCs in a topology. Hence we need to propose a dynamic IPv6 address scheme over there and the implementation will enable two UEs from two EPCs are communicating successfully without any routing conflict.

While you are thinking about any IPv6 layer solution in this case, you will stuck by some issues like, https://www.nsnam.org/bugzilla/show_bug.cgi?id=2835 this i.e. the LTE eNB RRC configuration issue the UL-DL spectrum allocation issue for two EPCs. So, the most important part of this project is to eliminate these issues first i.e. RRC configuration and spectrum allocation must be flexible to be allocated for two different EPCs' eNBs and then the proper addressing scheme.