From Nsnam
Jump to: navigation, search

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 2021 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-20. 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, Mohit Tahiliani and Tom Henderson; contact them with any questions. They also hang out on Zulip.


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
  • Manoj Kumar Rana
  • Sebastien Deronne
  • Hany Assasa
  • Davide Magrin
  • Vivek Jain
  • Viyom Mittal
  • Mishal Shah
  • Apoorva Bhargava

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. 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.

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.

Linux-like Loss Detection Techniques for ns-3 TCP

Mentors: Vivek Jain, Viyom Mittal, Apoorva Bhargava

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.

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.


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.

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:
  • 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: Viyom Mittal, Vivek Jain, Mishal Shah

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>"

Upgrade Python bindings framework

Mentors: Tom Henderson

The project has provided Python bindings via a toolchain combining pybindgen, CastXML, and pygccxml. This is a compile-time solution, and some drawbacks have appeared as the C++ language has evolved but the bindings framework has not kept pace (leading to errors in scanning the APIs, or incomplete API coverage). A recent summary can be found here. This project would aim to prototype and evaluate whether a different framework could be used (such as cppyy or pybind11). In any case, work can also include fixing one or more bugs/limitations found in our issue tracker with the label 'python bindings'.

TCP maximum segment size (MSS) improvements

Mentors: Tommaso Pecorella, others TBD

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: Tommaso Pecorella, and others TBD

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: Tommaso Pecorella, others TBD

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.

Integration of MIPv6 module into ns-3

Mentor: Manoj Kumar Rana

The MIPv6 module had already been implemented in ns-3 (The links of their implementations are given below). But, these modules are still lacking in ns-3 main tree. One of the medium access control (MAC) layer issue was NetDevice up/down consistency which has been resolved through the GSoC 2020 project titled, “NetDevice up/down consistency and event chain”. The MIPv6 integration still requires understanding the behaviour of IPv6 and ICMPv6 protocols running in LTE module (mainly between PGW/SGW and eNB). Although IPv6 packets are now transferred over LTE network, the sole purpose of MIPv6 handoff i.e. switching mobile node between LTE and WiFi can only be accomplished by modifying the existing MIPv6 module and extending the existing LTE module.

  • Required Experience: C++, LTE IPv6 support.
  • Bonus Experience: Familiarity with MIPv6/PMIPv6 module implementations in ns-3
  • Interests: IPv6
  • Difficulty: Medium.
  • Recommended reading:

Patch Requirement:

  • Dynamic IPv6 address configuration of UEs in LTE networks (To be updated): Currently, UEs are assigned static IPv6 address and the assignment is hard-coded within the helper class. But, MIPv6 is a dynamic procedure and so, the standard requires the address to be dynamically configured. It requires the access point i.e. the eNB/epc advertises a 64 bit prefix within the mobile network and the UE will configure an 128 bit IPv6 address from it.