GSOC2023NetAnimFinalReport

From Nsnam
Jump to: navigation, search

Project Overview

  • Project Name: Dynamic device registration for NetAnim simulation animations
  • Contributor: Raghuram Kannan
  • Mentors: Tommaso Pecorella and Manoj Kumar Rana
  • Main Goal: The project aims to refactor the NetAnim module such that each module willing to use NetAnim will have a .cc and .h file responsible for communication with the NetAnim module, enabled only if NetAnim is active. This will break the dependencies and will allow more flexibility for out-of-tree modules and modules migrating to the AppStore.
  • Useful links:

Merge Requests

All the work done during GSoC has been committed to one branch, named gsoc-2023-netanim-changes.

Listed below are all the Merge Requests made during the GSoC period.

Merge Requests
No. Name
[1] NetAnim: GSoC-23 Dynamic device registration for NetAnim simulation animations
[2] build: Add Define for NetAnim in CMake
[3] NetAnim: Convert AnimationInterface into a Singleton with Proxy
[4] Draft: Refactor the CSMA Module for NetAnim Simulations
[5] Draft: Refactored Csma Module for NetAnim (Updated Approach)
[6] core: Add proxy to core

Milestones

  • Finalized the design of adding a proxy class to the core module instead of the initially proposed Singleton + proxy approach.
  • Implemented the Proxy class in the core module along with the proxy-class-test-suite for testing the Proxy class.
  • Refactored the CSMA module and tested with the second.cc script to make sure it produced the same XML as before.
  • Refactored the Point-to-Point module and tested with the first.cc script to make sure it produced the same XML as before.

Challenges Faced

  • Initially, the plan was to move all net-device-related code to the corresponding net-device and keep the remaining code in the animation interface. The issue is when we move the net-device-related code to the corresponding module we can't access the animation-interface object which helps us to write into the XML file. To solve this we decided to convert the animation interface class into a singleton and also maintain a proxy for all the public API.
  • The issues with the above approach are:
    • The Singleton + proxy approach could only have one AnimationInterface file for each script.
    • A lot of redundant code due to the proxy.
  • So after discussions with the NS-3 community and my mentors. We decided to go with the proxy-core approach. However, there were some design aspects that needed to be finalized for the proxy to be added to the core as something that is being added to the core must be documented in detail.
  • Some net devices like LTE require some unforeseen changes due to the fact that DoInitalize() was being called much earlier than expected.

Despite the challenges we faced we were able to finalize the design and prove the approach works and is effective for the CSMA and point-to-point modules which were tested on the second.cc and first.cc script respectively.

Future Work

  • Get the proxy class merged to the ns-3 mainline.
  • Merge the Csma, Point-to-point, LTE and Wi-Fi modules.
  • Refactor the remaining modules as per the initial proposal (WiMax,Lr-Wpan and UAN).
  • Netanim improvements using packet tags.
  • Do a performance analysis to see the benefits of the refactor.