GSOC2025Ipv6GlobalRouting: Difference between revisions

From Nsnam
Jump to navigation Jump to search
No edit summary
 
(4 intermediate revisions by the same user not shown)
Line 87: Line 87:
* Ultimately it was decided to Choose static polymorphism as the approach for the project and althought the non-templated version and discussion regarding the same  is available here [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/2493 !2493], we will be going forward with the prior approach due to its many benefits over the later.
* Ultimately it was decided to Choose static polymorphism as the approach for the project and althought the non-templated version and discussion regarding the same  is available here [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/2493 !2493], we will be going forward with the prior approach due to its many benefits over the later.
*  MileStone 1 MR for the project is now available here [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/2508 !2508] and is open for active review.
*  MileStone 1 MR for the project is now available here [https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/2508 !2508] and is open for active review.
===Week 8 & 9===
''Duration: 23 July - 4 Aug''
* Worked on Finishing Milestone 1, Reformatted the Doc
* Started Instantiating IPv6 Templates and resolved Compiler errors
* There was a Bug with << operator for a typedef for a pair of <Ipv4Address,int>, for some reason the typedef threw errors but the pair did not.
===Week 10===
''Duration: 5 Aug - 11 Aug''
* The compile time errors were rectified , worked on the run time errors and resolved errors in the routing table entries for Ipv6.
* There is a choice to be made regarding how do we want Global routing to behave, for which i will be collecting community opinion.
Ipv6 by default makes a distinction between hosts and routers, default forwarding is disabled for ipv6 on all nodes (for ipv4 the default is true), the choice is if we want global routing to either : a) make all nodes where global routing is installed routers (i.e enable forwarding for them) b) Ask the users to enable forwarding manually for all those which they want as routers, and connect the host nodes via statically injecting routes.
Routing tables will only be filled for those routers for which global routing is installed, and forwarding is enabled.
It is important to note that it is possible to install global routing on a subset of the simulation nodes (routes will only be installed if the nodes are connected).
It is NOT possible to run global routing on a subset of the installed global routing nodes.

Latest revision as of 19:25, 11 August 2025

Main Page - Roadmap - Summer Projects - Project Ideas - Developer FAQ - Tools - Related Projects

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

Back to GSoC 2025 projects

Project Overview

  • Project Name: IPv6 Global Routing
  • Student: Shashwat Patni
  • Mentors: Tommaso Pecorella and Manoj Kumar Rana
  • Google page: Link
  • Project Goals: The aim of this project is to extend the functionality of GlobalRouting to Ipv6, while maintaining minimal code duplication. Global Routing is based on the OSPFv2 routing protocol and uses the Djikstra Shortest path algorithm to compute paths for a single area network configuration. The problem is that GlobalRouting doesn't work for IPv6, and that's a huge limitation. The goal of the project is to fix that limitation. Deliverables include a working implementation of Ipv6GlobalRouting which handles different Address Types in Ipv6, while also maintaining Minimal Code Duplication.
  • Repository: Link
  • About Me: I am a Pre-final year CS Undergrad student at Bits-Pilani K. K. Birla Goa Campus (BITS Pilani). I like Exploring and Tinkering with code.I am currently exploring the fields of Computer Networks and Distributed Systems. I enjoy solving problems.
  • Proposal: Link
  • Design Doc: Link

Milestones

These are the current Macro Goals for the project:

Note: For each phase , the plan is to work in the following order of classes: Interface Classes -> Setup Classes -> Route Computation Classes

Phase 1:

  • Port existing Ipv4GlobalRouting to generic GlobalRouting
  • Generalize ipv4-global-routing-test-suite and global-route-manager-impl-test-suite
  • Create tests and verify GlobalRouting works for Ipv4 after templatization
  • Design Tests for Ipv6 Specific Properties for GlobalRouting
  • Introduce Type Aliases for IP classes

Phase 2:

  • Extend GlobalRouting to IPv6
  • Handle the Implementation differences of IPv6

Phase 3:

  • Work On suggested Changes
  • Add Documentation For IPv6 GlobalRouting
  • Prepare edge Testcases, Check for Bugs , fix any remaining issues
  • Discuss any new features to GlobalRouting

Weekly Reports

Community Bonding Period

Duration: 8 May - 1 June

  • Working on the patch requirement !2434 :Adds the Print Route-Path Functionality to GlobalRouting.
  • A Design Document has been created to allow for discussions and evolving the design for the project

Week 1

Duration: 2 June - 9 June

This week we

  • Designed Tests For IPv4 GlobalRouting Specifically tests for the GlobalRouteManagerImpl Class
  • Created a draft MR For the tests !2471 for review
  • There was a discussion on if Link Local Addresses or Global Unicast Addresses Should be used as Next Hops in the RoutingTable Entries. Since routers can forward traffic even if they don't have Global Unicast Addresses, it was decided that Link Local Addresses will be used as next hops.

Week 2

Duration: 10 June - 17 June

This Week the plan is to:

  • Start Templatizing the Ipv4GlobalRouting Classes to Generic Classes
  • Create a draft MR for the Same

Currently there are two MRs Open for review !2471 and !2434


Week 3

Duration: 18 June - 23 June

This Week we did the following:

  • Finished Templatizing ipv4-global-routing classes to generic global-routing classes. The CI and tests pass . The latest version of the code is available at GSoC25
  • While Working on tests we found a few bugs in the existing implementation related to Equal Cost Multipath Topologies. We worked on resolving them
  • We discussed if a templateless approach is possible . Templates are bad because they create a learning curve for the model and the compiler errors may be cryptic for new users.A hybrid version with minimal templatization would be better.

Week 4

Duration: 24 June - 30 June

  • A draft MR Link for Milestone 1 is created. To preserve includes and allow backwards compatibility as well as API consistency , We decided to keep two seperate Ipv[4,6] Global Routing Helpers. The Manager classes were kept templated. Since ipv4-global-routing would behave differently than ipv6-global-routing, we think it best to seperate them as well.
  • We decided to develop two alternatives to Global Routing , One using static polymorphism, we have the polymorphic address class for this. The other alternative is "Compile time Polymorphism using templates". The end goal is to choose the design which works the best for the projects goals.
  • A few performance improvements for globalRouting are possible. Keeping a Ptr<Node> in the SPF Vertex Itself will avoid its Lookup again in the Algorithm

Week 5

Duration: 1 July - 8 July

  • Worked on the Dynamic approach to support Ipv6, this included adding runtime checks to decide which address classes should be used and converting each class to be compatible for the same
  • C++20 introduces Concepts. The rationale behind using such templates is to substitute it in place of SFNAE, which often leads very verbose compiler errors.
  • std::optional is a way to delay construction of class members, used it to see the design implications in a dynamic approach

Week 6

Duration: 9 July - 15 July

  • Dynamic Polymorphism leads to a lot of conversions between address types, although it is kept as an alternative, i plan on developing a hybrid version using static and dynamic checks which should be better and address all the limitations of working with both individually .
  • Worked on the StubNetwork Bug , MR comments.

Week 7

Duration: 16 July - July 22

  • Ultimately it was decided to Choose static polymorphism as the approach for the project and althought the non-templated version and discussion regarding the same is available here !2493, we will be going forward with the prior approach due to its many benefits over the later.
  • MileStone 1 MR for the project is now available here !2508 and is open for active review.

Week 8 & 9

Duration: 23 July - 4 Aug

  • Worked on Finishing Milestone 1, Reformatted the Doc
  • Started Instantiating IPv6 Templates and resolved Compiler errors
  • There was a Bug with << operator for a typedef for a pair of <Ipv4Address,int>, for some reason the typedef threw errors but the pair did not.

Week 10

Duration: 5 Aug - 11 Aug

  • The compile time errors were rectified , worked on the run time errors and resolved errors in the routing table entries for Ipv6.
  • There is a choice to be made regarding how do we want Global routing to behave, for which i will be collecting community opinion.

Ipv6 by default makes a distinction between hosts and routers, default forwarding is disabled for ipv6 on all nodes (for ipv4 the default is true), the choice is if we want global routing to either : a) make all nodes where global routing is installed routers (i.e enable forwarding for them) b) Ask the users to enable forwarding manually for all those which they want as routers, and connect the host nodes via statically injecting routes.

Routing tables will only be filled for those routers for which global routing is installed, and forwarding is enabled. It is important to note that it is possible to install global routing on a subset of the simulation nodes (routes will only be installed if the nodes are connected).

It is NOT possible to run global routing on a subset of the installed global routing nodes.