Until Mobile IPv6 extensions are integrated in the mainline kernel,
you may have to replace your kernel with one that has Mobile IPv6
support.  This involves downloading kernel source and the
modifications to support Mobile IPv6, and patching, configuring,
compiling and last installing the new kernel in your system.

If you have never patched or compiled a Linux kernel, you should take
a look at the Kernel HOWTO or Kernel Rebuild Guide available through
the Linux Documentation Project's site (http://www.tldp.org/).  Be
careful, you can render your system unbootable quite easily.

Kernel patches usually only work for the exact kernel version they
were made for.  Therefore, you should not try to use mismatching
kernel and patch versions (unless you know what you are doing, and are
prepared to fix possible conflicts).

All that said, here follows the instructions.


1. Check if your current kernel supports Mobile IPv6 extensions.  To
   do this we have provided a shell script to check it for you.  Just
   run: 

     ./chkconf_kernel.sh

   This depends on /proc/config.gz to be available.  It may tell you
   one of three things: 1) your kernel does not support
   /proc/config.gz, 2) your current running kernel does not support
   MIPv6 extensions, or 3) your current kernel supports everything we
   need.  If the answer was three, you are very lucky and can just
   skip rest of this document.  Otherwise, proceed to the next step.

2. Check if your current kernel sources support Mobile IPv6
   extensions.  Again, you can use the same tool as in the previous
   section.  Now you just have to locate your kernel sources (usually
   in /usr/src/linux) and supply that path to the script:

     ./chkconf_kernel.sh /usr/src/linux

   Now the script will tell you: 1) if support for Mobile IPv6 is
   present or not, and 2) if it has been properly configured.  If
   support is there and it has been configured (and you know these
   settings where used for your running kernel), again you are lucky
   and may skip rest of this document.  If the support was found, but
   not configured, skip to step 5.  For most of us, just continue on.

3. Get the latest Mobile IPv6 kernel patch.  Download the latest patch
   from http://www.mobile-ipv6.org/.  The patch will have a version
   number that tells which kernel version it was built for.  As said
   before, you really should use that kernel version only.

   Next you should get a fresh kernel source tree.  Usually, you
   should not use the kernel tree that came with your distribution,
   since distributors often apply their own patches to the tree, which
   might make it incompatible with the Mobile IPv6 patch.  Safest way
   is to get your kernel source from kernel.org or some other reliable
   source.  Grab a source tree that has matching version number with
   the Mobile IPv6 patch.

4. Unpack kernel source tree and patch the kernel tree.  Once you've
   unpacked the source tree, change to the source tree's root
   directory (e.g. /usr/src/linux).  Apply the Mobile IPv6 patch
   (replace mipv6-patch.gz with the actual path of the patch file you
   downloaded earlier):

     zcat mipv6-patch.gz | patch -p1

   You should get information about the patching process, but no error
   messages.  If no errors appeared, you are all done here and can
   proceed to the next step.

5. Now your kernel tree is ready for configuration.  You may want to
   copy your old .config from an old kernel source tree (or even
   /proc/config.gz, if supported) to keep other configuration options
   the same as before.  Run your favorite 'make *config' (e.g. make
   menuconfig).  Make sure you have at least the following options
   set:

     CONFIG_EXPERIMENTAL=y
     CONFIG_SYSVIPC=y
     CONFIG_PROC_FS=y
     CONFIG_NET=y
     CONFIG_INET=y 
     CONFIG_IPV6=y
     CONFIG_IPV6_MIP6=y
     CONFIG_XFRM=y
     CONFIG_XFRM_USER=y
     CONFIG_XFRM_SUB_POLICY=y
     CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=y

   The Home Agent and Mobile Node also need:

     CONFIG_IPV6_TUNNEL=y
     CONFIG_IPV6_ADVANCED_ROUTER=y
     CONFIG_IPV6_MULTIPLE_TABLES=y

   The Mobile Node also needs:

     CONFIG_IPV6_SUBTREES=y

   For some additional movement indicators on the Mobile Node you may set:

     CONFIG_ARPD=y

   For IPsec support you need at least:

     CONFIG_INET6_ESP=y

   If you plan to use IPsec tunnel mode you need:

     CONFIG_NET_KEY=y
     CONFIG_NET_KEY_MIGRATE=y

   Do not turn CONFIG_IPV6_MIP6_DEBUG on, unless you are specifically
   debugging the Mobile IPv6 extensions in the kernel.  This options
   will degrade system performance and swamp you with too many debug
   messages.

   If you are unsure you got everything right, you can check your
   configuration with the tool used in steps 1 and 2.

     ./chkconf_kernel.sh /usr/src/linux

   Fix any warnings and proceed to the next step.

6. Compile and install the kernel.  Proceed with the user space
   installation described in INSTALL.  Be sure to reboot to your new
   kernel before trying to run the user space daemon.
