Mobile IPv6 for Linux Guide (with USAGI patch)

Note that UMIP-0.3 is OBSOLETE.

[Japanese version]


This article provides a tutorial on setting up Mobile IPv6(MIPv6) on Linux.

Basic kernel configuration, IPv6 networking operation, configuration experience and basic MIPv6 knowledge are needed. If you use IPsec, basic IPsec knowledge and IPv6 tunnel gateway configuration experience is also required.

See Known issues at first.

Old information is moved to umip-0.1 page.


For all nodes (HA, MN and CN)

For HA

For HA and MN

Building kernel and mip6d


After mip6d is installed, you can see mip6d.conf(5) which has useful information about configuration.

HA specific configuration

MN specific configuration

CN specific configuration

IPsec configuration

Boot sequence

HA boot sequence

  1. Before starting mip6d, the following conditions should be satisfied:
    • Be ready as a router
    • Be ready for proxying ND (when using returing-home)
    • Assigned a global unicast address on home link interface, as HA address
    • Configured IPsec SA (when using IPsec with static keying)
    • (optional)syslogd is running
  2. Run mip6d
  3. After started mip6d:
    • Start RD

An easy example boot script to do the above is

MN boot sequence

  1. Before starting mip6d, the following conditions should be satisfied:
    • The interface is brought up before you run mip6d.
    • IPsec SA configuration (while using IPsec with static keying).
    • (optional)syslogd is running.
  2. After you made sure these conditions, you can run mip6d.

An easy example boot script is

CN boot sequence

  1. Before starting mip6d, the following conditions should be satisfied:
    • (optional)syslogd is running
  2. Run mip6d

An easy example boot script is

Another examples



Binding cache

Binding update list

Route optimization

We don't have an easy and good route optimization test for both-direction (other than using TAHI test or dumping packet). On the other hand, with ping6 command from USAGI git iputils-mip6 tree, you can check whether inbound echo reply is route-optimized or not.


Known issues

Kernel support status

Here is the mainline kernel support status (as of 2.6.21-rc5).

HA OK*1 OK*1 OK*3
CN OK*1 -*4,*1 -

Here is our patched kernel support status.

CN OK - -

Known issues

[MN] Inter-MN RO does not work
The daemon cannot add BULE entry whose address is used as existing BCE since the daemon has not supported yet to deal with kernel change to use XFRM selector without specified if-index.
[MN] Resending BU problem at returning home
MN incorrectly sends BU with old CoA when the BULE expiration occurred at just after the MN attaches its home link.
[MN] Updating BULE problem
MN does not start re-binding with CN even if it passes 420 seconds after the MN has communicated with the CN.
[MN] TCP over RO
MN incorrectly continues to use TCP connection over tunnel even RO is ready on kernel if the connection was a trigger for the RO.
[MN] Problem to choose Care-of nonce index
MN incorrectly sends BU to CN with old Care-of nonce index. It should be used the latest one from CoT message sent by the CN.

$Id: index.html.en,v 1.2 2007-09-19 03:07:16 nakam Exp $
Copyright ©2006,2007 USAGI/WIDE Project, All Rights Reserved.