1.概述
由于项目的原因需要研究UMIP程序,UMIP的官方网站有http://umip.linux-ipv6.org/,http://umip.org/。与此有关的项目有
The WIDE Project:http://www.wide.ad.jp/index.html , The KAME project :http://www.kame.net/ ,
TAHI Project :http://www.tahi.org/ , Nautilus6 :http://www.nautilus6.org/ , USAGI (UniverSAl playGround for Ipv6 ) Project :http://www.linux-ipv6.org/ 。都与日本人有很大关系,革命尚未成功,同志仍需努力啊。
UMIP是基于MIPL2(Helsinki Univestity of Technology)的代码,并对其进行了维护使其能用于最新的Linux内核。UMIP是在用户空间实现的,其结构可以用下图来表示:
来自NEPL (NEMO Platform for Linux) HOWTO :http://www.nautilus6.org/doc/nepl-howto/
还参考了MIPL程序解读:http://blog.youkuaiyun.com/uestc_huan/archive/2008/10/04/3015014.aspx
从上图中可以看到内核空间和用户空间的接口。NEPL(MIPL程序也一样)则是应用这些接口,将数据提取到用户空间的程序中,然后进行处理。处理结果再通过ioctl、xfrm或者RT Netlink等接口修改内核的一些行为。要提供这些接口,就必须对内核进行一部分修改,内核的补丁就是做这个工作,所以之前MIPL的实现还包括了内核的补丁。但是UMIP的官网上说
Hopefully, the IPv6 mobility support has been integrated into the kernel sources since version 2.6.26, so no patches are needed anymore on recent kernel versions.
也就是2.6.26之后的Linux内核已经集成了IPv6 mobility所以不需要打补丁了。
接下来对UMIP的程序进行解读,添加必要的注释。由于程序是实现MIPv6,所以需要先看看相关的RFC。
MIPL程序解读的作者说,由于移动头部的处理和icmpv6的处理都在用户空间程序中,因此基本上可以不改动内核的代码,只改动这个程序的代码,就应该能够实现MIPv6的功能修改。我觉得他说得很正确,不过可能要考虑到具体应用时效率等问题,接下来我会考虑如何将代码进行修改以实现PMIPv6程序。
2.主函数注释
主函数在main.c中,所以从这里开始分析程序: