Buffering in proxy mobile IPv6

Download the source from GitHub

Introduction of packet buffering implementation in PMIPv6

Proxy mobile IPv6 (PMIPv6) is a network-based mobility management protocol that improves performance in terms of handover latency, signaling cost, and packet loss compared to host-based mobility management protocols. However, still packet loss occurs during the handover of the mobile node (MN). Several attempts have been made to improve the reliability of PMIPv6 service by proposing schemes in which packets are buffered in network entities during the handover of the MN to prevent packet loss, and performance improvement has been demonstrated via simulations. So far, there have been no implementations of buffering functions in the literature. This work addresses design of buffering function and its implementation to prevent packet loss, and demonstrates the results. We have implemented a PMIPv6 testbed based on open source resources. We discuss the functional and performance enhancements, comparing PMIPv6 with the buffering implemented and standard PMIPv6. We also propose an improved buffering function where the packet forwarding rate of the buffer is adjusted. The results through the testbed show that the buffering function in PMIPv6 effectively prevents packet loss during the handover of the MN. We have found out.

In this work, we implement a buffering function based on OAI PMIPv6. All the packets for the MN are buffered in a network entity during the handover of the MN and forwarded to the MN after handover. We also propose a scheme to control the packet forwarding rate of the buffer for performance enhancement and implement it. The Buffering in proxy mobile IPv6 implemented buffering function is classified into three parts. The first part determines the packets that should be buffered, the second part involves buffering the packets, and the third part involves forwarding the packets. We build a testbed and conduct experiments to evaluate the operation and performance of the implemented buffering function. The results demonstrate that PMIPv6 with the buffering function prevents packet loss compared to the standard PMIPv6, with the exception of packet loss due to transmission delay of the signal sent from a mobile access gateway (MAG) to a local mobility anchor (LMA) to deregister the MN. It also manages the amount of packets in the buffer without increment during the handover of the MN by adjusting the packet forwarding rate of the buffer.


The explanation of the implementation

To implement the buffering function, we use Netfilter and IP6Tables provided by Linux. The Netfilter is a packet filtering framework. It provides five hook points to intercept and manipulate network packets. IP6Tables utility is a tool in the user space to provide hook handlers for the hook points of Netfilter. In our testbed, at LMA, the NF_IP_PRE_ROUTING hook point is provided a hook handler from IP6Tables in the user space to buffer the packets. All incoming packets hit this hook point with no exceptions. IP6Tables adds a rule that includes the IP information of the roaming MN to provide a hook handler to the NF_IP_PRE_ROUTING hook point of Netfilter in the kernel space. To store the packets, the Libipq library is used, which is provided as part of IP6Tables. This library provides an API set capable of communicating with the IP6_Queue module in the kernel space, so that it can push and pop packets from the queue during buffering and forwarding, respectively.

Figure 1 represents Packet Buffering module, the core of buffering implementation. It is classified into two parts: one is operated in kernel space; the other in user space. The part in the kernel space is responsible for hooking packets and passing them to the user space. The Netfilter refers to the information in the IP6Table module to determine packets which should be hooked. The IP6Table module controlled by the IPTables tool in the user space contains the handler for the hook point. Packets are hooked at the NF_IP_PRE_ROUTING hook point in the Netfilter (1). The hooked packets are passed to the user space through the IP6_Queue module [(Refer to (2)-(4)]. The other part in the user space stores the packets received from the kernel space to the buffer using the Libipq library, and passes the packets buffered to the kernel space. The IPTables tool in the user space adds other rules to the IP6Table module to hook packets (5). It pushes and pops the packets from the buffer using a Listening thread and a Re-inject thread


Fig.1 Operation of Packet Buffering module.


The new module, Packet Buffering, is added to the existing OAI PMIPv6 in Fig.2. A NETLINK socket is used to transfer information between the Netfilter in the kernel space and the IPTables tool in the user space. The existing modules, such as Handler, Finite State Machine, and Messages, are also modified to add functions to judge buffering or forwarding packets hooked in the Netfilter framework. The Finite State Machine calls the buffering module by obtaining the event from the Handler when an MN roams. If the LMA performs buffering, the start time of the buffering is the time as when the LMA receives a de-registration Proxy binding update (PBU) message from pMAG after detachment of the MN. If the pMAG cannot communicate with the MN nor transmit packets to the MN for a certain time during a handover of the MN, the pMAG sends a deregistration PBU to LMA to notify that the MN has been detached. Upon receiving the message, the LMA determines that the MN is undergoing handover and buffers all the packets for the MN. When the LMA receives the deregistration PBU, the Handler detects it and sends the result of detection to the Finite State Machine. The Finite State Machine parses the message using the Messages, and sends the information of the MN by calling the Packet Buffering. The Packet Buffering calls the IPTables tool to add the address information of the MN to the IP6Tables rule, and the Netfilter refers to the information to buffer the packets for the MN. After the MN attaches to the nMAG and the LMA receives the PBU message, LMA sends the Proxy binding acknowledgement (PBA) message and all the packets buffered to the nMAG. Thus, the packet loss that can occur during the MN handover is prevented.

Fig. 2 OAI PMIPv6 including buffering module


The demo video




– Changyong Park, Namyeong Kwon, Honguk Woo and Hyunseung Choo, “Buffering in Proxy Mobile IPv6: Implementation and Analysis,” Journal of Supercomputing, March 2014.


The original source code URL and download

Openinterface Proxy Mobile IPv6 (OAI PMIPv6)
PMIPv6 – v0.3.1 (4th of October, 2011) (3.11 MB)



Buffering in Proxy Mobile IPv6 code is supported by the Networking lab team
Email : 


Download the source from GitHub