This page contains 2021 Google Summer of Code project ideas for ns-3. Students interested in participating in ns-3's GSoC program are free to get started on an idea or two, with the understanding that ns-3 has not yet been selected for GSoC and may not ultimately be selected.
- GSoC Frequently Asked Questions
- ns-3's 2021 GSoC Student guide
- GSoC student guide (not ns-3 specific)
- 2020 GSoC Student application template
- ns-3's GSoC Mentor guide
- GSoC Mentor guide (not ns-3 specific)
- GSoC Student Selection Process
- Get in contact with the ns-3 team: ns-developers mailing list | chat https://ns-3.zulipchat.com/
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-20. We seek students interested in the intersection of wireless and computer networking, performance analysis, and open source software.
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 Tom Henderson or Tommaso Pecorella of interest. Mentors familiar with ns-3 development practices will be preferred, to improve the chances of student code merge. In 2021, 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 2021 is below:
- Tom Henderson
- Tommaso Pecorella
- Mohit P. Tahiliani
- Sebastien Deronne
- Hany Assasa
- Davide Magrin
- Vivek Jain
- Viyom Mittal
- Mishal Shah
Changes from last year
Google has changed the program, reducing it to half the paid time from previous summers. Therefore, we will be seeking to define projects with much reduced scope than in years past. In general, we seek projects that aim to improve the existing simulator rather than add new features.
Students: how to participate
For students 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 ns-3 tutorial 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 (to be posted at a later date). 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 2021. 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.
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.
Note to students: These ideas are not listed in any priority order.
Linux-like Loss Detection Techniques for ns-3 TCP
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.
- Required Experience: Familiarity with TCP and C++ programming.
- Bonus Experience: Familiarity with TCP implementation in Linux kernel.
- Interests: TCP packet loss detection techniques.
- Difficulty: Medium to Hard.
- Recommended Reading:
Direct Code Execution upgrade
Mentor: Tom Henderson
ns-3 has an extension known as Direct Code Execution, which allows users to build C or C++-based applications, and open source (Linux, FreeBSD) kernels, into ns-3. However, support for the latest kernels (e.g. Linux kernel 5 series) and latest glibc library versions has languished. We also could better integrate DCE with the main ns-3 tree. This project seeks a student interested in DCE, improving usability, and making it current with latest kernels and toolchains. The payoff of this type of project is very high since DCE makes available a lot of real-world models for use in ns-3. If you select this project idea, please engage with us on the developers list, and consider to take a look at solving one of the open DCE issues in our tracker, for starters.
- Required Experience: good hacking skills on Linux, C, C++, Python
- Difficulty: Hard.
- For more information: https://www.nsnam.org/about/projects/direct-code-execution/, https://github.com/direct-code-execution/ns-3-dce
Mentor: Davide Magrin
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.
- Required Experience: Familiarity with C++ programming.
- Bonus Experience: Familiarity with Python programming.
- Interests: Internet of Things communication protocols.
- Difficulty: Medium to Hard.
- For more info: https://github.com/signetlabdei/lorawan, http://github.com/signetlabdei/sem
SEM - Examples and documentation
Mentor: Davide Magrin
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