‘ILNP Talk’ – Linux Kernel Code Porting

Disclaimer: This is a rather overdue blog post I wrote a couple of months ago. I’ve made more progress than this! (There shall be a follow-up post soon…)


This might be the first time I actually touch on my research in this blog. I guess the time has come.

As I mentioned before, I’m working on a project to develop and implement a protocol called Identifier-Locator Network Protocol v6 (ILNPv6). This is a network protocol which implements the architecture my supervisor has designed; the Identifier-Locator Network Protocol (ILNP).

I’ll leave out the actual explanation of the ILNP for this post. However to give you the gist of what ILNP is trying to achieve, here are 2 of features/goals  that are relevant to my PhD:

  • Mobility – Ability to continue data transfer while moving across different networks without losing a TCP/UDP session.
    • e.g. switching from 802.11 Wireless (Wifi) to cellular (3G/4G/LTE etc) and back without connection being reset.
  • Multihoming – Ability to utilise multiple paths to communicate with a node
    • e.g. using ethernet and 802.11 Wireless (Wifi) at the same time for more bandwidth.

So if you try to do some of the above right now, first of all, won’t work easily and to make it work, it requires very specialised setup. In fact, there isn’t really a good solution to do both of them by just updating the hosts themselves just yet; they are very likely to require modifying the network infrastructure such as your router and possibly require middle boxes to sit between your computer and rest of the internet. 

ILNPv6 is bit like an extension of IPv6 on end host to achieve ILNP while what flows on the network actually acts as if its an IPv6 packet. The main benefit of this is, to take advantage of new architecture, only the computers on each end of the network needs to change; not the entire network infrastructure. My supervisor had two students in the past who implemented them on FreeBSD kernel and Linux kernel with different feature sets. And I am now working on the Linux version.

The nature of those particular kernel, the very core of operating system, that are developed by open source community is that they advance rapidly. The previous student who started right about the time I started my undergraduate was working on Linux kernel version 3.9.7. The current stable is 4.12.x, along with 4.9.x being the latest long-term support version. That is a huge jump in the context of software. But as network protocol, if you need to use an old version of operating system or the kernel, its no use. People move on to more modern software as they come out. So it is important that the source code we develop is kept up to date as we go along. Therefore, my first task in this PhD is to update and move the code into the latest long-term support version of Linux kernel for my thesis, as I don’t want a huge change within my PhD, and hopefully keep adapting to latest version alongside the PhD as a side project.

So I’m currently in the process of continuously staring at two sets of source codes: ILNP Linux 3.9.7 vs Linux 4.9.40 and ILNP Linux 3.9.7 vs Linux 3.9.7. Trying to figure out at which point ILNP kicks in and what has changed over the time. Migrating the code, compiling it to see what I have missed.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.