TOC 
Network Working GroupS. Barré
Internet-DraftO. Bonaventure
Expires: August 8, 2008UCL
 February 05, 2008


Shim6 Implementation Report : LinShim6
draft-barre-shim6-impl-00

Status of this Memo

By submitting this Internet-Draft, each author represents that any applicable patent or other IPR claims of which he or she is aware have been or will be disclosed, and any of which he or she becomes aware will be disclosed, in accordance with Section 6 of BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as “work in progress.”

The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt.

The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html.

This Internet-Draft will expire on August 8, 2008.

Abstract

LinShim6 is an implementation of the Shim6 and REAP protocols, on the Linux platform. This draft provides a brief description of the architecture and describes the current state of our implementation. For each feature of the protocols, its level of support is described. Protocol conformance is evaluated against [refs.shim6] (Bagnulo, M. and E. Nordmark, “Shim6: Level 3 Multihoming Shim Protocol for IPv6,” .) and [refs.reap] (Arkko, J. and I. van Beijnum, “Failure Detection and Locator Pair Exploration Protocol for IPv6 Multihoming,” .).



Table of Contents

1.  Introduction
2.  General architecture
    2.1.  Kernel patch
    2.2.  LinShim6 daemon
3.  RFC 2119 evaluation
    3.1.  Checks common to all control messages
    3.2.  I1 Message
    3.3.  R1 Message
    3.4.  I2 Message
    3.5.  R2 Message
    3.6.  R1bis, I2bis, Update Request and Update Acknowledgement
    3.7.  Keepalive and Probe Messages
    3.8.  Keepalive Timeout Option
    3.9.  Error messages
    3.10.  Message Options
    3.11.  Payload data
    3.12.  General requirements of the Shim6 draft
    3.13.  General requirements of the REAP draft
4.  Protocol conformance by feature
5.  Conclusion and further work
6.  Acknowledgments
7.  References
§  Authors' Addresses
§  Intellectual Property and Copyright Statements




 TOC 

1.  Introduction

LinShim6 has been developped from scratch at UCL (Belgium), and it is available at http://inl.info.ucl.ac.be/LinShim6. It has been used to evaluate the performance of REAP path exploration [refs.sigcomm] (Barré, S. and O. Bonaventure, “Improved Path Exploration in shim6-based Multihoming,” .). The architecture has been thought to be well integrated, easy to use and efficient. We define a heuristic that tries to avoid starting a Shim6 negotiation when the corresponding overhead would be too high. LinShim6 supports the base Shim6 protocol (negotiation and address rewriting) as well as failure detection and recovery. In terms of security, CGA support has been added recently (most of the code for the CGA module comes from the DoCoMo SEND project) and HBA will be supported soon as well.

Some features have not yet a real application and are not supported for this reason. They will be added as soon as a need for them arises. This is the case for the Forked Instance Identifier that is only useful if a socket API is implemented (such as the API defined in [refs.api] (Komu, M., Bagnulo, M., Slavov, K., and S. Sugimoto, “Socket Application Program Interface (API) for Multihoming Shim,” .)). The Locator Preference Option or the Keepalive Timeout option may only be used if the corresponding tuning capability is provided, either by the user or by an automated technique.

Other features are just absent for time reasons, and were omitted because they did not seem essential for a correct working of the protocol. Thus we still have in the TODO list features like locator list updates, Handling of ICMP error messages or context recovery.

In this document we use the terminology defined in section 2 of [refs.shim6] (Bagnulo, M. and E. Nordmark, “Shim6: Level 3 Multihoming Shim Protocol for IPv6,” .).



 TOC 

2.  General architecture

The LinShim6 implementation is made of a kernel patch and a user space daemon. The kernel patch adds support for shim6 negotiation trigger, address rewriting and Failure detection. The daemon is responsible for managing the whole Shim6 control plane (negotiation, path exploration). The kernel communicates with the user space daemon through the Netlink interface [refs.rfc3549] (Salim, J., Khosravi, H., Kleen, A., and A. Kuznetsov, “Linux Netlink as an IP Services Protocol,” .).



 TOC 

2.1.  Kernel patch

The negotiation trigger makes use of the NF_IP6_LOCAL_IN and NF_IP6_LOCAL_OUT netfilter hooks to listen to the packets travelling through the networking stack. A Shim6 negotiation is triggered when either 2 KB of data have been seen for a given address pair or the flow exists for one minute.

Address rewriting is implemented as an extension to the XFRM framework, originally designed for IPsec [refs.ipsec] (Kanda, M., Miyazawa, K., and H. Esaki, “USAGI IPv6 IPsec development for Linux,” .). The XFRM framework allows for dynamically adding a new sublayer in the Networking stack for some flows, according to a policy. Examples of already defined sublayers are the AH sublayer (Authentication Header) or the ESP sublayer (Encapsulating Security Payload). We define a new Shim6 sublayer. The policies responsible for directing packets to this new module are communicated from the daemon to the kernel, through Netlink, when a change in the locators is needed or a new Shim6 context is created. For outgoing packets, the policy has the form of a matching rule with the ULIDs. For Incoming packets that do not have the Shim6 extension header the same kind of matching rule is used. We also defined a matching rule based on the context tag, to be able to demultiplex tagged incoming packets.

Failure detection is performed inside the kernel for efficiency reasons : A timer must be started or stopped for each incoming of outgoing packets. We thus maintain a small REAP state in the XFRM states that stores the failure detection timers, and notifies the daemon when a keepalive must be sent or an exploration is to be started.



 TOC 

2.2.  LinShim6 daemon

The daemon is made of an infinite loop that listens to three kinds of events. First, Shim6 and REAP control messages are received through a raw socket. Second, Netlink messages provide information from the kernel, for example if a context must be created, a keepalive must be sent or an exploration must be started. Finally, messages can be received through a pipe where the other threads may write commands. Four threads are currently defined :

A more extensive description can be found in [refs.ring] (Barré, S. and O. Bonaventure, “Implementing SHIM6 using the Linux XFRM framework,” .) or in the pdf documentation provided with the LinShim6 package.



 TOC 

3.  RFC 2119 evaluation

In this section we detail the conformance of the LinShim6 implementation in terms of the RFC2119 [refs.rfc2119] (Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” .) terminology. Note that if a MUST is followed by "FEATURE NOT SUPPORTED", this means that the MUST has sense only if the feature exists. That is, the implementation is still conformant but does not implement the particular feature.



 TOC 

3.1.  Checks common to all control messages

A host MUST silently discard any received control message that does not statisfy all of the following validity checks :



 TOC 

3.2.  I1 Message



 TOC 

3.3.  R1 Message



 TOC 

3.4.  I2 Message



 TOC 

3.5.  R2 Message



 TOC 

3.6.  R1bis, I2bis, Update Request and Update Acknowledgement

Those messages are not supported yet. They are never sent, and are ignored on receipt.



 TOC 

3.7.  Keepalive and Probe Messages



 TOC 

3.8.  Keepalive Timeout Option

This option is not supported yet



 TOC 

3.9.  Error messages

Those messages are optional and are not supported yet.



 TOC 

3.10.  Message Options



 TOC 

3.11.  Payload data



 TOC 

3.12.  General requirements of the Shim6 draft



 TOC 

3.13.  General requirements of the REAP draft



 TOC 

4.  Protocol conformance by feature



 TOC 

5.  Conclusion and further work

This draft describes the current state of the LinShim6 implementation. It uses a heuristic to decide whether to trigger a Shim6 negotiation, and it is able to monitor the state of the communication thanks to the REAP state machine. It has been shown to successfully support the switch to an alternative locator pair, and it supports the minimal security checks and features given in the specifications (only HBA addresses are not yet supproted). LinShim6 is a work in progress and is still being improved. We aim at finally providing the complete set of features. In the near future we will work on HBA support, context recovery, locator list updates and error messages. Other missing features seem to have a lower priority and are let for later.



 TOC 

6.  Acknowledgments



 TOC 

7. References

[refs.shim6] Bagnulo, M. and E. Nordmark, “Shim6: Level 3 Multihoming Shim Protocol for IPv6,” draft-ietf-shim6-proto-09 (work in progress).
[refs.reap] Arkko, J. and I. van Beijnum, “Failure Detection and Locator Pair Exploration Protocol for IPv6 Multihoming,” draft-ietf-shim6-failure-detection-10 (work in progress).
[refs.rfc2119] Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” RFC 2119.
[refs.rfc3549] Salim, J., Khosravi, H., Kleen, A., and A. Kuznetsov, “Linux Netlink as an IP Services Protocol,” RFC 3549.
[refs.ipsec] Kanda, M., Miyazawa, K., and H. Esaki, “USAGI IPv6 IPsec development for Linux,” in International Symposium on Applications and the Internet,  pp. 159-163.
[refs.ring] Barré, S. and O. Bonaventure, “Implementing SHIM6 using the Linux XFRM framework,” in Routing In Next Generation workshop, Madrid, Spain.
[refs.api] Komu, M., Bagnulo, M., Slavov, K., and S. Sugimoto, “Socket Application Program Interface (API) for Multihoming Shim,” draft-ietf-shim6-multihome-shim-api-03 (work in progress).
[refs.sigcomm] Barré, S. and O. Bonaventure, “Improved Path Exploration in shim6-based Multihoming,” in SIGCOMM 2007 Workshop "IPv6 and the Future of the Internet", Kyoto, Japan.


 TOC 

Authors' Addresses

  Sébastien Barré
  Université catholique de Louvain
  Place Ste Barbe, 2
  Louvain-la-Neuve 1348
  BE
Email:  sebastien.barre@uclouvain.be
URI:  http://inl.info.ucl.ac.be/sbarre
  
  Olivier Bonaventure
  Université catholique de Louvain
  Place Ste Barbe, 2
  Louvain-la-Neuve 1348
  BE
URI:  http://inl.info.ucl.ac.be/obo


 TOC 

Full Copyright Statement

Intellectual Property