AIM: During GSOC-18 , I was allocated the task of implementing the XIA over UDP/IPv6 (U6ID) principal . The objective of the principal is to encapsulate XIA packets as the payload of the IPv6 datagram , and they can be effectively tunneled through the IPv6 networks where XIA is not yet supported.
DELIVERED : I have successfully implemented the U6ID principal and added support for U6ID in xiaconf repo which is used to interact with XIA from user space.I have also created a demo which can be used for demonstration of U6ID principal .
The project comprised of 3 phases :
U6ID implementation in XIA-for-Linux Repo : The first phase comprised of implementing a kernel module in Linux to add support for XIA over UDP/IPv6. It had to be implemented in net/xia/ppal_u6id directory of the repo . The module is divided into 3 parts.
- Initialization and Exit functions : These comprise of Module and network initialization functions. Module init and exit functions are called every time a module is loaded or removed from the kernel . Network init and exit functions register principal to the routing mechanism setup various structs required by the principal.
- Route Management functions : These functions take care of adding, deleting, printing routes on the console, and freeing routes once deleted from the local routing table.
- Routing Functions : This is the function where the routing takes place. The u6id_deliver method takes decisions based on xid and encapsulates the xia packet in ipv6 and sends the datagram.
U6ID support for xiaconf Repo : xiaconf is a program that helps interact with XIA from userspace and manage the routing table entries. The task was to add support for u6id in xiaconf to manage the entries of the local table of u6id principal. The following steps were required:
- Make the basic changes in Makefile, header and configuration files specified in How to write a principal page.
- Define help function to show the basic usage of xip commands.
- Define do_local , modify_local functions that take care of adding and deleting entries from the local table which are called by do_add and do_del respectively to carry on addition and deletion tasks.
- Defining the print_route and dump methods to print the routing table entries to the user.
- Test the functions , debug the errors and rectify them.
Designing an U6ID experiment and the final documentation : The goal was to design an experiment similar to the u4id experiment and document a demo to be posted on the wiki. The following steps were required :
- The experiment requires the use of XLXC containers , the container’s default IPv6 addresses are link-local addresses and they cannot be used globally. For this purpose , IP addresses and corresponding routes had to be assigned in the Star topology so that they are able to send IPv6 packets to each other.
- Demonstrate the working of the U6ID principal with a demo and document it. The link to the documentation can be viewed here.
- After testing and the demo, the next task was to change the code to follow coding guidelines used by Linux-XIA and rebase the commits in order to combine multiple commits and remove unwanted commits. The difference between the commits can be seen on branch xia and branch final.
SCREENSHOTS : Here are some screenshots which showcase the use of the u6id xiaconf commands.
FUTURE WORK : Right now, the U6ID principal is complete and no future work on the principal is to be done. There are some which can be added in the future. Yet the pull requests #21 and #12 has to go through a code reviewing process by the org admins to get the code merged in the repository. I will work on changes suggested by the mentors and after the final reviewing is done, the principal will be ready to be merged in the repository.