Fork me on GitHub



MAD-PMIPv6 implementation for GNU/Linux systems have been tested for Linux kernels 2.6.32 and above.

  • Downoload the MAD-PMIPv6 source code from here.
  • Extract the tarball at a filesystem's location of your choice.
  • Follow the instructions contained in the INSTALL.kernel file to verify the kernel options of your system. Most of the kernel options listed are not enabled by default on most systems, thus it is likely that you have to compile a mobility-compatible kernel.
  • Once the kernel is properly set, proceed to install the following software packages:
    libpcap-dev, indent, bison, flex, iproute-dev, libc6-dev, libssl-dev, libtool, autoconf and macchanger (optional)
    • In a Ubuntu system the previous operation can be done by typing:
      $ sudo apt-get install libpcap-dev indent bison flex iproute-dev libc6-dev libssl-dev libtool autoconf macchanger
  • Now that the system is ready, proceed with the MAD-PMIPv6 installation:
    # ./configure
    # make
    # make install
    • MAD-PMIPv6 can be built with a virtual terminal to monitor the daemon execution by adding the option:
      # ./configure --enable-vt
  • If MAD-PMIPv6 has been succesfully installed you should now have the binary mad-pmip6d.

Deploying MAD-PMIPv6

The MAD-PMIPv6 architecture consists in a CMD and in a set of MARs. Both entities are obtained by running the same daemon, but using different configuration file. By executing the command

# mad-pmip6d

the mad-pmip6d daemon looks for the default configuration file located at


but alternative files can be specified using the -c option. Examples of such configuration files can be found in the extras/ folder inside your mad-pmipv6 installation directory. In absence of such configuration files, the parameters can be introduced using command line options. Run

#mad-pmip6d --help

for more information.

Example configuration for a CMD:

# This is an example of mad-pmip6d Central Mobility Database configuration file
NodeConfig       CMD;

## If set to > 0, will not detach from tty
DebugLevel       10;

ProxyDmmCmd "CMD testbed n1" {
    ## Standard configuration parameters
    RFC5213TimestampBasedApproachInUse        enabled;
    RFC5213MobileNodeGeneratedTimestampInUse  disabled;
    MaxMessageRetransmissions                 5;
    TunnelingEnabled                          enabled;
    DynamicTunnelingEnabled                   enabled;

    ## Values in milliseconds
    RFC5213MinDelayBeforeBCEDelete            10000;
    RFC5213MaxDelayBeforeNewBCEAssign         1500;
    RFC5213TimestampValidityWindow            300;
    RetransmissionTimeOut                     500;

    CmdAddress                     2001:100::a4;
    CmdDmmNetworkDevice            "eth0";

Example configuration for a MAR:

# This is an example of mad-pmip6d Mobility Access Router configuration file
NodeConfig MAR;

## If set to > 0, will not detach from tty
DebugLevel 10;

# conf valid for MAR1
ProxyDmmMar "MAR1 testbed n1"{
    ## Standard configuration parameters
    RFC5213TimestampBasedApproachInUse        enabled;
    RFC5213MobileNodeGeneratedTimestampInUse  disabled;
    MaxMessageRetransmissions                 5;
    TunnelingEnabled                          enabled;
    DynamicTunnelingEnabled                   enabled;

    ## Setting not necessary with "-D" option
    RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks fe80::201:2ff:fe03:405;
    RFC5213FixedMAGLinkLayerAddressOnAllAccessLinks 00:01:02:03:04:05;


    CmdAddress         2001:100::a4;
    MarAddressEgress   2001:100::a1;
    MarDeviceIngress   "wlan0";
    MarDeviceEgress    "eth0";
    ## Value in milliseconds
    PBULifeTime             60000;
    RetransmissionTimeOut   500;

Note that the RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks setting indicates to the MAD-PMIPv6 software the IPv6 link local address configured in all MARs, but it does not configure the address! In this operation mode, all the MARs of the DMM domain expose the same interface towards the MNs, so that the access network change is transparent to the moving hosts. This feature is specified in PMIPv6 RFC 5123 but it is deprecated in MAD-PMIPv6.

Instead, MAD-PMIPv6 implements the Distributed Logical Interface (DLIF) tool. With DLIF, a MAR creates a virtual interface to privately communicate with a MN. When the MN moves, the new MAR creates another virtual interface and imports the virtual interfaces from the previous MARs. The DLIF mode can be enabled using the -D option. This option overrides the RFC5213FixedMAGLinkLocalAddressOnAllAccessLinks setting.  

Authentication, Authorization and Accounting (AAA) for the Mobile Nodes:

When connecting to a MAR's wireless access network, the Mobile Node (MN) must pass the AAA checks to be admitted to the MAR's services. The result of the AAA procedure is the retrieval of the domain-wide unique MN Identifier (MN-ID), to which the MAR will associate an IPv6 prefix, assigned only to that MN out of the MAR's prefix pool.
MAD-PMIPv6 does not specify a security mechanism to perform the AAA procedure, nor a method to associate a prefix to the MN-ID. In general, an existing AAA scheme can be integrated to MAD-PMIPv6 (e.g., RADIUS) to provide such service.

However, MAD-PMIPv6 implements a simple AAA service based on a static list that maps the authorized MN-IDs and the associated prefixes. Each MAR stores a list of such entries in a file called


Here is an example of the AAA file:

21000000000000000000000000000000 00000000000000000000001f3b6bea4b
21010000000000000000000000000000 0000000000000000000000156d84941d
21020000000000000000000000000000 000000000000000000000020a6caa19a

Each line is a MN's profile and it contains two 32-digits strings. The first string is the prefix that should be assigned to the MN, and the second is the MN-ID, generated from the MN's MAC address by removing the colons and padding the string at the beginning with as many zeros as to reach the 32 digits. For instance, the first line tells MAD-PMIPv6 that the MAC address 00:1f:3b:6b:ea:4b is authorized and it will be assigned the prefix 2100::/64 (MAD-PMIPv6 only assigns 64 bits prefixes).

The picture below depicts an example to deploy a MAD-PMIPv6 testbed with 1 CMD, 3 MARs and 2 MNs.