draft-ietf-shim6-multihome-shim-api-06.txt   draft-ietf-shim6-multihome-shim-api-07.txt 
SHIM6 Working Group M. Komu SHIM6 Working Group M. Komu
Internet-Draft HIIT Internet-Draft HIIT
Intended status: Informational M. Bagnulo Intended status: Informational M. Bagnulo
Expires: February 28, 2009 UC3M Expires: May 7, 2009 UC3M
K. Slavov K. Slavov
S. Sugimoto, Ed. S. Sugimoto, Ed.
Ericsson Ericsson
August 27, 2008 November 3, 2008
Socket Application Program Interface (API) for Multihoming Shim Socket Application Program Interface (API) for Multihoming Shim
draft-ietf-shim6-multihome-shim-api-06 draft-ietf-shim6-multihome-shim-api-07
Status of this Memo Status of this Memo
By submitting this Internet-Draft, each author represents that any By submitting this Internet-Draft, each author represents that any
applicable patent or other IPR claims of which he or she is aware 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 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. aware will be disclosed, in accordance with Section 6 of BCP 79.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that
skipping to change at page 1, line 38 skipping to change at page 1, line 38
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt. http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
This Internet-Draft will expire on February 28, 2009. This Internet-Draft will expire on May 7, 2009.
Copyright Notice
Copyright (C) The IETF Trust (2008).
Abstract Abstract
This document specifies a socket API for the multihoming shim layer. This document specifies sockets API extensions for the multihoming
The API aims to enable interactions between the applications and the shim layer. The API aims to enable interactions between applications
multihoming shim layer for advanced locator management and access to and the multihoming shim layer for advanced locator management, and
information about failure detection and path exploration. access to information about failure detection and path exploration.
This document is based on an assumption that a multihomed host is This document is based on an assumption that a multihomed host is
equipped with a conceptual sublayer (here after "shim") inside the IP equipped with a conceptual sub-layer (hereafter "shim") inside the IP
layer that maintains mappings between identifiers and locators. layer that maintains mappings between identifiers and locators.
Examples of the shim are SHIM6 and HIP. Examples of the shim are SHIM6 and HIP.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5
3. System Overview . . . . . . . . . . . . . . . . . . . . . . . 6 3. System Overview . . . . . . . . . . . . . . . . . . . . . . . 6
4. Requirements . . . . . . . . . . . . . . . . . . . . . . . . . 7 4. Requirements . . . . . . . . . . . . . . . . . . . . . . . . . 7
5. Socket Options for Multihoming Shim Layer . . . . . . . . . . 9 5. Socket Options for Multihoming Shim Layer . . . . . . . . . . 9
5.1. SHIM_ASSOCIATED . . . . . . . . . . . . . . . . . . . . . 12 5.1. SHIM_ASSOCIATED . . . . . . . . . . . . . . . . . . . . . 12
skipping to change at page 2, line 45 skipping to change at page 2, line 42
6.3. Notification from Application to Multihoming Shim . . . . 26 6.3. Notification from Application to Multihoming Shim . . . . 26
7. Data Structures . . . . . . . . . . . . . . . . . . . . . . . 27 7. Data Structures . . . . . . . . . . . . . . . . . . . . . . . 27
7.1. Placeholder for Locator Information . . . . . . . . . . . 27 7.1. Placeholder for Locator Information . . . . . . . . . . . 27
7.2. Path Exploration Parameter . . . . . . . . . . . . . . . . 28 7.2. Path Exploration Parameter . . . . . . . . . . . . . . . . 28
7.3. Feedback Information . . . . . . . . . . . . . . . . . . . 29 7.3. Feedback Information . . . . . . . . . . . . . . . . . . . 29
8. Implications for Existing Socket API Extensions . . . . . . . 29 8. Implications for Existing Socket API Extensions . . . . . . . 29
9. Resolving Conflicts with Preference Values . . . . . . . . . . 30 9. Resolving Conflicts with Preference Values . . . . . . . . . . 30
9.1. Implicit Forking . . . . . . . . . . . . . . . . . . . . . 30 9.1. Implicit Forking . . . . . . . . . . . . . . . . . . . . . 30
10. Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . 31 10. Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . 31
10.1. Naming at Socket Layer . . . . . . . . . . . . . . . . . . 31 10.1. Naming at Socket Layer . . . . . . . . . . . . . . . . . . 31
10.2. Additional Requirements from Application . . . . . . . . . 31 10.2. Additional Requirements from Applications . . . . . . . . 31
10.3. Issues of Header Conversion among Different Address 10.3. Issues of Header Conversion among Different Address
Family . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Family . . . . . . . . . . . . . . . . . . . . . . . . . . 32
10.4. Handling of Unknown Locator Provided by Application . . . 32 10.4. Handling of Unknown Locator Provided by Application . . . 32
11. Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 11. Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
11.1. Changes from version 00 to version 01 . . . . . . . . . . 32 11.1. Changes from version 00 to version 01 . . . . . . . . . . 32
11.2. Changes from version 01 to version 02 . . . . . . . . . . 33 11.2. Changes from version 01 to version 02 . . . . . . . . . . 33
11.3. Changes from version 02 to version 03 . . . . . . . . . . 33 11.3. Changes from version 02 to version 03 . . . . . . . . . . 33
11.4. Changes from version 03 to version 04 . . . . . . . . . . 33 11.4. Changes from version 03 to version 04 . . . . . . . . . . 33
11.5. Changes from version 04 to version 05 . . . . . . . . . . 33 11.5. Changes from version 04 to version 05 . . . . . . . . . . 33
11.6. Changes from version 05 to version 06 . . . . . . . . . . 33
11.7. Changes from version 06 to version 07 . . . . . . . . . . 33
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 33 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 33
13. Security Considerations . . . . . . . . . . . . . . . . . . . 33 13. Security Considerations . . . . . . . . . . . . . . . . . . . 33
14. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . 33 14. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . 34
15. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 34 15. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 34
16. References . . . . . . . . . . . . . . . . . . . . . . . . . . 34 16. References . . . . . . . . . . . . . . . . . . . . . . . . . . 34
16.1. Normative References . . . . . . . . . . . . . . . . . . . 34 16.1. Normative References . . . . . . . . . . . . . . . . . . . 34
16.2. Informative References . . . . . . . . . . . . . . . . . . 35 16.2. Informative References . . . . . . . . . . . . . . . . . . 35
Appendix A. Context Forking . . . . . . . . . . . . . . . . . . . 35 Appendix A. Context Forking . . . . . . . . . . . . . . . . . . . 35
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 37 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 38
Intellectual Property and Copyright Statements . . . . . . . . . . 39 Intellectual Property and Copyright Statements . . . . . . . . . . 40
1. Introduction 1. Introduction
HIP and SHIM6 have a commonality in their protocol design separation HIP and SHIM6 have a commonality in their protocol design in the
of identifier and locator (hereafter identifier/locator separation). sense that the roles of an IP address as an identifier and a locator
Both protocols aim to solve problems that are specific to multihoming are clearly distinguished. Hereafter this design principle is called
environment in a host centric approach. In these protocols, a sub- "identifier/locator separation" in this document. Both protocols aim
layer within the IP layer maintains mappings of identifiers and to solve problems that are specific to multihoming environment in an
locators. endhost centric approach. In these protocols, a sub-layer within the
IP layer maintains mappings of identifiers and locators.
The shim layer is useful in a sense that the IP layer can maintain The shim layer is useful in a sense that the IP layer can maintain
the mapping of an identifier to corresponding locators. Under a the mapping of an identifier to the corresponding locators. Under a
multihomed environment, typically, a host has more than one IP multihomed environment, typically, a host has more than one IP
address at a time. During a given transaction, a host may be address at a time. During the transaction, the host may be required
required to switch the IP address used for the communication to to switch the IP address in use to another IP address to preserve the
another IP address to preserve the communication. The protocol stack communication. Such an address update should be kept hidden from the
should take care of isolating the upper layer from disruption by the upper layer protocols to avoid communication disruption. The shim
address update. The shim layer can make this locator update layer aims to make the address update transparent to the upper layer
transparent to the upper layer protocols. protocols.
In a system which is based on identifier/locator separation, upper In a system which is based on identifier/locator separation, upper
layer protocols are expected to deal with identifiers for layer protocols are expected to deal with identifiers for
establishing and handling the communications. If an application establishing and handling the communications. If an application
wants to have a multihoming support by the shim layer, the IP wants to have multihoming support from the shim layer, the IP
addresses specified as source and destination addresses must be addresses specified as source and destination addresses must be
identifiers. However, this does not necessarily mean that identifiers. However, this does not necessarily mean that
applications are prohibited to choose specific locators in its applications are prohibited to choose specific locators for its
communication. It may be useful for applications, in some situation, communication. It may be useful for some applications to specify a
to specify a preferred locator for the flow. preferred locator for a given flow.
This document recommends that the identifier/locator adaptation is This document recommends that the switching of identifier and locator
done only once inside the network stack of a host. That is, if is done only once inside the TCP/IP stack of an endhost. That is, if
multiple shim sublayers exist at the IP layer, any one of them should multiple shim sub-layers exist at the IP layer, any one of them
be applied exclusively for a given flow. should be applied exclusively for a given flow.
As this document specifies socket API, it is written so that the As this document specifies sockets API extensions, it is written so
contents are in line with Posix standard [POSIX] as much as possible. that the syntax and semantics are in line with the Posix standard
The API specified in this document defines how to use ancillary data [POSIX] as much as possible. The API specified in this document
(aka cmsg) to access locator information with recvmsg() and/or defines how to use ancillary data (aka cmsg) to access the locator
sendmsg() I/O calls. Definition of API is presented in C language information with recvmsg() and/or sendmsg() I/O calls. The
and data types follow Posix format; intN_t means a singed integer of definition of API is presented in C language and data types follow
exactly N bits (e.g. int16_t) and uintN_t means an unsigned integer the Posix format; intN_t means a singed integer of exactly N bits
of exactly N bits (e.g. uint32_t). (e.g. int16_t) and uintN_t means an unsigned integer of exactly N
bits (e.g. uint32_t).
The target readers of this document are application programmers who The target readers of this document are application programmers who
develop application software which may benefit greatly from develop application software which may benefit greatly from
multihomed environment. In addition, this document should be of multihomed environments. In addition, this document aims to provide
interest for the developers of a given shim protocol, as the shim necessary information for developers of multihoming shim protocols to
layer should provide the interface to the application. implement API for enabling advanced locator management.
2. Terminology 2. Terminology
This section provides terminology used in this document. Basically This section provides terminology used in this document. Basically
most of the terms used in this document are taken from the following most of the terms used in this document are taken from the following
documents: documents:
o SHIM6 Protocol Specification[I-D.ietf-shim6-proto] o SHIM6 Protocol Specification[I-D.ietf-shim6-proto]
o HIP Architecture[RFC4423] o HIP Architecture[RFC4423]
o Reachability Protocol (REAP)[I-D.ietf-shim6-failure-detection] o Reachability Protocol (REAP)[I-D.ietf-shim6-failure-detection]
In this document, the term "IP" refers to both IPv4 and IPv6, unless In this document, the term "IP" refers to both IPv4 and IPv6, unless
the protocol version is specifically mentioned. The followings are the protocol version is specifically mentioned. The following are
definitions of the terms that are frequently used in this document: definitions of terms frequently used in this document:
o Endpoint Identifier (EID) - An identifier used by the application o Endpoint identifier (EID) - The identifier used by the application
to specify the endpoint of a given communication. Applications to specify the endpoint of a given communication. Applications
may handle EID in various ways such as long-lived connections, may handle EIDs in various ways such as long-lived connections,
callbacks, and referrals[I-D.ietf-shim6-app-refer]. callbacks, and referrals[I-D.ietf-shim6-app-refer].
* In the case of SHIM6, an identifier called an ULID serves as an * In the case of SHIM6, an identifier called a ULID serves as an
EID. An ULID is chosen from locators available on the host. EID. A ULID is chosen from locators available on the host.
* In the case of HIP, an identifier which specifies communication * In the case of HIP, an identifier called a Host Identifier
endpoints is derived from the public key of the host, which is serves as an EID. A Host Identifier is derived from the public
called a Host Identifier. For the sake of backward key of a given host. For the sake of backward compatibility
compatibility of the socket API, the Host Identifier is with the sockets API, the Host Identifier is represented in a
represented in a form of hash of public key. form of hash of public key.
o Locator - An IP address actually used to deliver IP packets. o Locator - The IP address actually used to deliver IP packets.
Locators should be present in the source and destination fields of Locators are present in the source and destination fields of the
the IP header of a packet on the wire. IP header of a packet on the wire.
* List of Locators - A list of locators associated with an EID. * List of locators - A list of locators associated with an EID.
There are two lists of locators stored in a given context, one There are two lists of locators stored in a given context. One
is associated with the local EID and the other is associated is associated with the local EID and the other is associated
with the remote EID. As defined in [I-D.ietf-shim6-proto], the with the remote EID. As defined in [I-D.ietf-shim6-proto], the
list of locators associated with an EID 'A' can be denoted as list of locators associated with an EID 'A' is denoted as
Ls(A). Ls(A).
* Preferred Locator - The (source/destination) locator currently * Preferred locator - The (source/destination) locator currently
used to send packets within a given context. As defined in used to send packets within a given context. As defined in
[I-D.ietf-shim6-proto], the preferred locator of a host 'A' is [I-D.ietf-shim6-proto], the preferred locator of a host 'A' is
denoted as Lp(A). denoted as Lp(A).
o Shim - A conceptual (sub-)layer inside the IP Layer which o Shim - The conceptual sub-layer inside the IP layer which
maintains mappings of EIDs and locators. An EID can be associated maintains mappings between EIDs and locators. An EID can be
with more than one locators at a time when the host is multihomed. associated with more than one locator at a time when the host is
The term 'shim' does not refer to a specific protocol but refers multihomed. The term 'shim' does not refer to a specific protocol
to the conceptual sublayer inside the IP layer. but refers to the conceptual sub-layer inside the IP layer.
o identifier/locator adaptation - An adaptation performed at the
shim layer between EIDs and locators within a given context. The o Identifier/locator adaptation - The adaptation performed at the
adaptation may end up re-writing the source and destination shim layer which may end up re-writing the source and/or
addresses of the IP packet. In the outbound packet processing, destination addresses of an IP packet. In the outbound packet
the EID pair is converted to the associated locator pair, while processing, the EID pair is converted to the associated locator
the locator pair is converted to the EID pair in the inbound pair. In the inbound packet processing, the locator pair is
packet processing. converted to the EID pair.
o Context - State information shared by a given pair of peers, which o Context - The state information shared by a given pair of peers,
stores a binding between the EIDs and associated locators. The which stores a binding between the EID and associated locators.
context is maintained at the shim layer. Contexts are maintained by the shim layer.
o Reachability Detection - A procedure to check reachability between o Reachability detection - The procedure to check reachability
a given locator pair. between a given locator pair.
o Path - A sequence of routers that an IP packet goes through to o Path - The sequence of routers that an IP packet goes through to
reach the destination. reach the destination.
o Path Exploration - A procedure to explore available paths for a o Path exploration - The procedure to explore available paths for a
given set of locator pairs. given set of locator pairs.
o Outage - An incident that prevents IP packets to flow from the o Outage - The incident that prevents IP packets to flow from the
source locator to the destination locator. When there is an source locator to the destination locator. When there is an
outage, it means that there is no reachability between a given outage, it means that there is no reachability between a given
locator pair. The outage can be caused by various reasons, such locator pair. The outage may be caused by various reasons, such
as shortage of network resources, congestion, and human error as shortage of network resources, congestion, and human error
(faulty operation). (faulty operation).
o Working Address Pair - An address pair is said to be working if o Working address pair - The address pair is considered to be
the packet containing the first address from the pair as source "working" if the packet can safely travel from the source to the
address and the second address from the pair as destination destination where the packet contains the first address from the
address can safely travel from the source to the destination. If pair as the source address and the second address from the pair as
the reachability is confirmed in both directions, the address the destination address. If reachability is confirmed in both
pairs is said to be bi-directional. Otherwise, it's directions, the address pair is considered to be working bi-
unidirectional. directionally.
o Reachability Protocol (REAP) - A protocol for detecting failure o Reachability protocol (REAP) - The protocol for detecting failure
and exploring reachability in a multihomed environment. REAP is and exploring reachability in a multihomed environment. REAP is
defined in [I-D.ietf-shim6-failure-detection]. defined in [I-D.ietf-shim6-failure-detection].
3. System Overview 3. System Overview
Figure 1 illustrates the system overview. The shim layer and REAP Figure 1 illustrates the system overview. The shim layer and REAP
component exist inside the IP layer. Applications can use the socket component exist inside the IP layer. Applications use the sockets
API defined in this document to interface the shim layer and API defined in this document to interface with the shim layer and the
transport layer for locator management and failure detection and path transport layer for locator management, failure detection, and path
exploration. exploration.
It is also possible that the shim layer interacts with transport It may also be possible that the shim layer interacts with the
layers, but the interactions are outside the scope of this document. transport layer, however, such an interaction is outside the scope of
this document.
+------------------------+ +------------------------+
| Application | | Application |
+------------------------+ +------------------------+
^ ^ ^ ^
~~~~~~~~~~~~~|~Socket Interface|~~~~~~~~~~~~~~ ~~~~~~~~~~~~~|~Socket Interface|~~~~~~~~~~~~~~
| v | v
+-----------|------------------------------+ +-----------|------------------------------+
| | Transport Layer | | | Transport Layer |
+-----------|------------------------------+ +-----------|------------------------------+
skipping to change at page 7, line 31 skipping to change at page 7, line 31
+-----------------------|----------------------|----------+ +-----------------------|----------------------|----------+
v v v v
+------------------------------------------+ +------------------------------------------+
| Link Layer | | Link Layer |
+------------------------------------------+ +------------------------------------------+
Figure 1: System overview Figure 1: System overview
4. Requirements 4. Requirements
The following is the list of requirements from the application The following is a list of requirements from applications:
perspective:
o Locator management. The shim layer selects a pair of locators for o Locator management. The shim layer selects a pair of locators for
sending IP packets within a given context. The selection is made sending IP packets within a given context. The selection is made
by taking miscellaneous conditions into account such as by taking miscellaneous conditions into account such as
reachability of the path, application's preference, and reachability of the path, application's preference, and
characteristics of path. From the application's perspective: characteristics of path. From applications' perspective:
* It should be possible to obtain the lists of locators of a * It should be possible to obtain the lists of locators of a
given context: Ls(local) and Ls(remote). given context: Ls(local) and Ls(remote).
* It should be possible to obtain the preferred locators of a * It should be possible to obtain the preferred locators of a
given context: Lp(local) and Lp(remote). given context: Lp(local) and Lp(remote).
o Notification from the application to the shim layer about the o Notification from applications to the shim layer about the status
status of the communication. Note that the notification is made of the communication. The notification occurs in an event-based
in an event based manner. There are mainly two aspects of the manner. Applications and/or upper layer protocols may provide
feedback that application or upper layer protocol may provide for positive feedbacks or negative feedbacks to the shim layer.
the shim layer, positive and negative feedbacks [NOTE: These [NOTE: These feedbacks are mentioned in
feedbacks are mentioned in [I-D.ietf-shim6-failure-detection]]: [I-D.ietf-shim6-failure-detection]]:
* Positive feedback could be given by the application or upper * Applications and/or upper layer protocols (e.g., TCP) may
layer protocol (e.g. TCP) to the shim layer informing that the provide positive feedbacks to the shim layer informing that the
communication is going well. communication is going well.
* Negative feedback could be given by the application or upper * Applications and/or upper layer protocols (e.g., TCP) may
layer protocol (e.g. TCP) to the shim layer informing that the provide negative feedbacks to the shim layer informing that the
communication status is not satisfactory. TCP could detect a communication status is not satisfactory. TCP may detect a
problem when it does not receive expected ACK from the peer. problem when it does not receive any expected ACK message from
ICMP error messages delivered to the upper layer protocol could the peer. Besides, a receipt of an ICMP error message could be
be a clue for application to detect potential problems. REAP a clue for the application to detect problems. The REAP module
module may be triggered by these negative feedbacks and invoke may be triggered by these negative feedbacks and invoke the
procedure of path exploration. path exploration procedure.
o Feedback from application to shim layer. The application should o Feedback from applications to the shim layer. Applications should
be able to inform the shim layer of the timeout values for be able to inform the shim layer of the timeout values for
detecting failures, for sending keepalives, for starting the detecting failures, sending keepalives, and starting the
exploration procedure. In particular, the application should be exploration procedure. In particular, applications should be able
able to suppress the keepalives. to suppress keepalives.
o Hot-standby. The application may request the shim layer for hot- o Hot-standby. Applications may request the shim layer for the hot-
standby capabilities. In this case, alternative paths are known standby capability. This means that, alternative paths are known
to be working before a failure is detected. Hence it is possible to be working in advance of a failure detection. In such a case,
for the host to immediately replace the current locator pair with it is possible for the host to immediately replace the current
an alternative locator pair. Hot-standby may allow applications locator pair with an alternative locator pair.
to achieve better failover. o Eagerness for locator exploration. An application should be able
o Eagerness of locator exploration. The application should be able to inform the shim layer of how aggressively it wants the REAP
to inform the shim layer how aggressive it wants REAP mechanism to mechanism to perform a path exploration (e.g., by specifying the
perform path exploration (e.g. specifying the number of concurrent number of concurrent attempts of discovery of working locator
attempts of discovering working locator pair) when an outage pairs) when an outage occurs on the path between the locator pair
occurs on the path between the currently selected locator pair. in use.
o Providing locator information to application. The application o Providing locator information to applications. An application
should be able to obtain information about the locator pair which should be able to obtain information about the locator pair which
was actually used to send or receive the packet. was actually used to send or receive the packet.
* For inbound traffic, the application may be interested in the * For inbound traffic, the application may be interested in the
locator pair which was actually used to receive the packet. locator pair which was actually used to receive the packet.
* For outbound traffic, the application may be interested in the * For outbound traffic, the application may be interested in the
locator pair which was actually used to transmit the packet. locator pair which was actually used to transmit the packet.
In this way, the application may have additional control on the In this way, applications may have additional control on the
locator management. For example, the application can verify if locator management. For example, an application becomes able to
its preference of locator is actually applied to the flow or not. verify if its preference for locator is actually applied to the
o The application should be able to specify if it wants to defer the flow or not.
context setup or if it wants context establishment to be started o Applications should be able to specify if they want to defer the
immediately in case there is no available context. With deferred context setup, or if they want context establishment to be started
context setup, there should be no additional delay imposed by immediately in the case where there is no available context. A
context establishment in initiation of communication. deferred context setup means that the initiation of communication
o Turn on/off shim. The application should be able to request to should not be blocked to wait for completion of the context
turn on/off the multihoming support by the shim layer: establishment.
o Turn on/off shim. An application should be able to request to
turn on or turn off the multihoming support by the shim layer:
* Apply shim. The application should be able to explicitly * Apply shim. The application should be able to explicitly
request the shim layer to apply multihoming support. request the shim layer to apply multihoming support.
* Don't apply shim. The application should be able to request * Don't apply shim. The application should be able to request
the shim layer not to apply the multihoming support but to the shim layer not to apply the multihoming support but to
apply normal IP processing at the IP layer. apply normal IP processing at the IP layer.
o The application should be able to know if the communication is now o An application should be able to know if the communication is now
served by the shim layer or not. being served by the shim layer or not.
o The application should be able to access locator information o An application should be able to use a common interface to access
regardless of its address family. In other words, no matter an IPv4 locator and an IPv6 locator.
whether the target locator is IPv4 or IPv6, the application should
be able to use common interface to access the locator information.
5. Socket Options for Multihoming Shim Layer 5. Socket Options for Multihoming Shim Layer
In this section, socket options that are specific to multihomed shim In this section, socket options that are specific to multihomed shim
are defined. are defined.
Table 1 provides a list of the socket options that are specific to Table 1 shows a list of the socket options that are specific to the
multihoming shim layer. These socket options can be used by either multihoming shim layer. An application may specify these socket
getsockopt() or setsockopt() system call for a given socket. All of options for a given socket either by the getsockopt() system call or
these socket options are defined at level SOL_SHIM. by the setsockopt() system call. All of these socket options are
defined at level SOL_SHIM.
The first column of Table 1 gives the name of the option. The second The first column of Table 1 gives the name of the option. The second
and third columns indicate whether the option can be handled by and third columns indicate whether the option can be handled by the
getsockopt() and/or setsockopt(), respectively. The fourth column getsockopt() system call and/or by the setsockopt() system call. The
provides a brief description of the socket option. The fifth column fourth column provides a brief description of the socket option. The
shows the type of data structure specified along with the socket fifth column shows the type of data structure specified along with
option. By default, the data structure type is an integer. the socket option. By default, the data structure type is an
integer.
+-----------------------------+-----+-----+-----------------+-------+ +-----------------------------+-----+-----+-----------------+-------+
| optname | get | set | description | dtype | | optname | get | set | description | dtype |
+-----------------------------+-----+-----+-----------------+-------+ +-----------------------------+-----+-----+-----------------+-------+
| SHIM_ASSOCIATED | o | | Check if the | int | | SHIM_ASSOCIATED | o | | Check if the | int |
| | | | socket is | | | | | | socket is | |
| | | | associated with | | | | | | associated with | |
| | | | any shim | | | | | | any shim | |
| | | | context or not. | | | | | | context or not. | |
| SHIM_DONTSHIM | o | o | Request the | int | | SHIM_DONTSHIM | o | o | Request the | int |
skipping to change at page 10, line 27 skipping to change at page 10, line 27
| | | | the socket. | | | | | | the socket. | |
| SHIM_LOC_LOCAL_RECV | o | o | Request for the | int | | SHIM_LOC_LOCAL_RECV | o | o | Request for the | int |
| | | | destination | | | | | | destination | |
| | | | locator of the | | | | | | locator of the | |
| | | | received IP | | | | | | received IP | |
| | | | packet. | | | | | | packet. | |
| SHIM_LOC_PEER_RECV | o | o | Request for the | int | | SHIM_LOC_PEER_RECV | o | o | Request for the | int |
| | | | source locator | | | | | | source locator | |
| | | | of the received | | | | | | of the received | |
| | | | IP packet. | | | | | | IP packet. | |
| SHIM_LOC_LOCAL_SEND | o | o | Request use of | *2 | | SHIM_LOC_LOCAL_SEND | o | o | Request the use | *2 |
| | | | specific | | | | | | of specific | |
| | | | locator as | | | | | | locator as | |
| | | | source locator | | | | | | source locator | |
| | | | of outgoing IP | | | | | | of outgoing IP | |
| | | | packets. | | | | | | packets. | |
| SHIM_LOC_PEER_SEND | o | o | Request use of | *2 | | SHIM_LOC_PEER_SEND | o | o | Request the use | *2 |
| | | | specific | | | | | | of specific | |
| | | | locator as | | | | | | locator as | |
| | | | destination | | | | | | destination | |
| | | | locator of | | | | | | locator of | |
| | | | outgoing IP | | | | | | outgoing IP | |
| | | | packets. | | | | | | packets. | |
| SHIM_LOCLIST_LOCAL | o | o | Get or set a | *3 | | SHIM_LOCLIST_LOCAL | o | o | Get or set the | *3 |
| | | | list of | | | | | | list of | |
| | | | locators | | | | | | locators | |
| | | | associated with | | | | | | associated with | |
| | | | the local EID. | | | | | | the local EID. | |
| SHIM_LOCLIST_PEER | o | o | Get or set a | *3 | | SHIM_LOCLIST_PEER | o | o | Get or set the | *3 |
| | | | list of | | | | | | list of | |
| | | | locators | | | | | | locators | |
| | | | associated with | | | | | | associated with | |
| | | | the peer's EID. | | | | | | the peer's EID. | |
| SHIM_APP_TIMEOUT | o | o | Inform the shim | int | | SHIM_APP_TIMEOUT | o | o | Inform the shim | int |
| | | | layer of a | | | | | | layer of the | |
| | | | timeout value | | | | | | timeout value | |
| | | | for detecting | | | | | | for detecting | |
| | | | failure. | | | | | | failure. | |
| SHIM_PATHEXPLORE | o | o | Specify | *4 | | SHIM_PATHEXPLORE | o | o | Specify | *4 |
| | | | behavior of | | | | | | behavior of | |
| | | | path | | | | | | path | |
| | | | exploration and | | | | | | exploration and | |
| | | | failure | | | | | | failure | |
| | | | detection. | | | | | | detection. | |
| SHIM_CONTEXT_DEFERRED_SETUP | o | o | Specify if the | int | | SHIM_CONTEXT_DEFERRED_SETUP | o | o | Specify if the | int |
skipping to change at page 11, line 32 skipping to change at page 11, line 32
*1: Pointer to a shim_locator which is defined in Section 7. *1: Pointer to a shim_locator which is defined in Section 7.
*2: Pointer to shim_locator data structure. *2: Pointer to shim_locator data structure.
*3: Pointer to an array of shim_locator. *3: Pointer to an array of shim_locator.
*4: Pointer to a shim_pathexplore which is defined in Section 7. *4: Pointer to a shim_pathexplore which is defined in Section 7.
Figure 2 illustrates how the shim specific socket options fit into Figure 2 illustrates how the shim specific socket options fit into
the system model of socket API. In the figure, it can be seen that the system model of socket API. The figure shows that the shim layer
the shim layer and the additional protocol components (IPv4 and IPv6) and the additional protocol components (IPv4 and IPv6) below the shim
below the shim layer are new to the system model. As previously layer are new to the system model. As previously mentioned, all the
mentioned, all the shim specific socket options are defined at shim specific socket options are defined at SOL_SHIM level. This
SOL_SHIM level. This design choice brings the following advantages: design choice brings the following advantages:
1. It is assured that the existing socket API continue to work at 1. The existing sockets API continue to work at the layer above the
the layer above the shim layer. That is, those legacy API deal shim layer. That is, those legacy API handle IP addresses as
with 'identifier' aspect of the IP addresses. identifiers.
2. With newly defined socket options for the shim layer, the 2. With newly defined socket options for the shim layer, the
application obtains additional control on locator management. application obtains additional control of locator management.
3. The shim specific socket options are not specific to any address 3. The shim specific socket options can be kept independent from
family (IPPROTO_IP or IPPROTO_IPV6) or any transport protocol address family (IPPROTO_IP or IPPROTO_IPV6) and transport
(IPPROTO_TCP or IPPROTO_UDP). protocol (IPPROTO_TCP or IPPROTO_UDP).
s1 s2 s3 s4 s1 s2 s3 s4
| | | | | | | |
+----------------|--|-------|--|----------------+ +----------------|--|-------|--|----------------+
| +-------+ +-------+ | | +-------+ +-------+ |
| IPPROTO_TCP | TCP | | UDP | | | IPPROTO_TCP | TCP | | UDP | |
| +-------+ +-------+ | | +-------+ +-------+ |
| | \ / | | | | \ / | |
| | ----- | | | | ----- | |
| | / \ | | | | / \ | |
skipping to change at page 12, line 31 skipping to change at page 12, line 31
| / \ | | / \ |
| +------+ +------+ | | +------+ +------+ |
| | IPv4 | | IPv6 | | | | IPv4 | | IPv6 | |
| +------+ +------+ | | +------+ +------+ |
| | | | | | | |
+------------------|----------|-----------------+ +------------------|----------|-----------------+
| | | |
IPv4 IPv6 IPv4 IPv6
Datagram Datagram Datagram Datagram
Figure 2: System model of socket API with shim layer Figure 2: System model of sockets API with shim layer
5.1. SHIM_ASSOCIATED 5.1. SHIM_ASSOCIATED
The SHIM_ASSOCIATED option can be used to check whether the socket is The SHIM_ASSOCIATED option can be used to check whether the socket is
associated with any shim context or not. associated with any shim context or not.
This option is particularly meaningful in a case where the locator This option is particularly meaningful in the case where the locator
information of the received IP packet does not tell whether the information of the received IP packet does not tell whether the
identifier/locator adaptation is performed or not. Note that the EID identifier/locator adaptation is performed or not. Note that the EID
pair and locator pair may be identical in some case. pair and locator pair may be identical in some case.
This option can be specified by getsockopt(). Thus, the option is This option can be specified by getsockopt(). Thus, the option is
read-only and the result (0 or 1) is set in the option value (the read-only and the result (0 or 1) is set in the option value (the
fourth argument of getsockopt()). fourth argument of getsockopt()).
Data type of the option value is integer. The option value indicates The data type of the option value is an integer. The option value
presence of shim context. A returned value 1 means that the socket indicates the presence of shim context. A returned value 1 means
is associated with a certain shim context at the shim layer, while a that the socket is associated with a shim context at the shim layer,
return value 0 indicates that there is no context associated with the while a return value 0 indicates that there is no shim context
socket. associated with the socket.
For example, the option can be used by the application as follows: For example, the option can be used by the application as follows:
int optval; int optval;
int optlen = sizeof(optval); int optlen = sizeof(optval);
getsockopt(fd, SOL_SHIM, SHIM_ASSOCIATED, &optval, &optlen); getsockopt(fd, SOL_SHIM, SHIM_ASSOCIATED, &optval, &optlen);
5.2. SHIM_DONTSHIM 5.2. SHIM_DONTSHIM
The SHIM_DONTSHIM option can be used to request the shim layer to not The SHIM_DONTSHIM option can be used to request the shim layer to not
apply the multihoming support for the communication established over apply the multihoming support for the communication established over
the socket. the socket.
Data type of the option value is integer. The option value indicates The data type of the option value is an integer. The option value
whether the multihoming shim support is deprecated or not. The indicates whether the multihoming shim support is deprecated or not.
option value is binary (0 or 1). By default, the value is set to 0, The option value is binary (0 or 1). By default, the value is set to
meaning that the shim layer applies identifier/locator adaptation for 0, which means that the shim layer applies identifier/locator
the communication. In order to disable the socket option, the adaptation for the flow. In order to disable the socket option, the
application should call setsockopt() with optval set as 0. application should call setsockopt() with optval set to 0.
For example, the option can be disabled by the application as For example, the application may disable the socket option as
follows. follows:
int optval; int optval;
optval = 0; optval = 0;
setsockopt(fd, SOL_SHIM, SHIM_DONTSHIM, &optval, sizeof(optval)); setsockopt(fd, SOL_SHIM, SHIM_DONTSHIM, &optval, sizeof(optval));
For example, the option value can be checked by the application as For example, the application may check the option value as follows:
follows.
int optval; int optval;
int len; int len;
len = sizeof(optval); len = sizeof(optval);
getsockopt(fd, SOL_SHIM, SHIM_DONTSHIM, &optval, &len); getsockopt(fd, SOL_SHIM, SHIM_DONTSHIM, &optval, &len);
5.3. SHIM_HOT_STANDBY 5.3. SHIM_HOT_STANDBY
The SHIM_HOT_STANDBY option can be used to check if the shim layer The SHIM_HOT_STANDBY option can be used to check if the shim layer
uses hot-standby connection or not for the communication established uses hot-standby connection or not for the communication established
over the socket. Hot-standby connection is another working locator over the socket. A hot-standby connection is based on an alternative
pair than the current locator pair. Hence this option is effective working locator pair to the current locator pair. This option is
only when there is a shim context associated with the socket. effective only when there is a shim context associated with the
socket.
Data type of the option value is integer. The data type of the option value is an integer.
The option value can be set by setsockopt(). The option value can be set by setsockopt().
The option value can be read by getsockopt(). The option value can be read by getsockopt().
By default, the value is set to 0, meaning that hot-standby By default, the value is set to 0, meaning that hot-standby
connection is disabled. connection is disabled.
For example, the option can be activated by the application as For example, the option can be activated by the application as
follows. follows.
skipping to change at page 14, line 34 skipping to change at page 14, line 34
int optval; int optval;
int len; int len;
len = sizeof(optval); len = sizeof(optval);
getsockopt(fd, SOL_SHIM, SHIM_HOT_STANDBY, &optval, &len); getsockopt(fd, SOL_SHIM, SHIM_HOT_STANDBY, &optval, &len);
5.4. SHIM_PATHEXPLORE 5.4. SHIM_PATHEXPLORE
This option can be used to specify behavior of path exploration to be The application may specify this socket option to specify specify
carried out. Path exploration is a procedure to find an alternative behavior of path exploration. Path exploration is a procedure to
locator pair when the host finds any problem with current locator find an alternative locator pair when the host finds any problem with
pair. A message used for finding an alternative locator pair is the current locator pair. The message used for finding an
called a Probe message and it is sent per locator pair. Default alternative locator pair is called the Probe message and it is sent
value is defined for Initial Probe Timeout (0.5 seconds) and Initial per locator pair. The REAP specification defines the default values
Probe (4 times) in the REAP specification. for Initial Probe Timeout and Initial Probe.
The option is effective only when there is a shim context associated The option is effective only when there is a shim context associated
with the socket. with the socket.
Data type of the option value is a pointer to the buffer where a set The data type of the option value is a pointer to the buffer where a
of information for path exploration is stored. The data structure is set of information for path exploration is stored. The data
defined in Section 7. structure is defined in Section 7.
By default, the option value is set as NULL, meaning that the option By default, the option value is set to NULL, meaning that the option
is disabled. is disabled.
An error ENOENT will be returned when there is no context associated An error ENOENT will be returned when there is no context associated
with the socket. with the socket.
For example, the parameters for the path exploration can be set as For example, the parameters for the path exploration can be set as
follows. follows.
struct shim6_pathexplore pe; struct shim6_pathexplore pe;
skipping to change at page 15, line 35 skipping to change at page 15, line 35
getsockopt(fd, SOL_SHIM, SHIM_PATHEXPLORE, &pe, &len); getsockopt(fd, SOL_SHIM, SHIM_PATHEXPLORE, &pe, &len);
5.5. SHIM_LOC_LOCAL_PREF 5.5. SHIM_LOC_LOCAL_PREF
The SHIM_LOC_LOCAL_PREF option can be used to read or set preferred The SHIM_LOC_LOCAL_PREF option can be used to read or set preferred
locator on local side within a given context. Hence this option is locator on local side within a given context. Hence this option is
effective only when there is a shim context associated with the effective only when there is a shim context associated with the
socket. socket.
Data type of the option value is a pointer to the specific data The data type of the option value is a pointer to the specific data
structure which stores the locator information. The data structure structure which stores the locator information. The data structure
is defined in Section 7. is defined in Section 7.
By default, the option value is set as NULL, meaning that the option By default, the option value is set to NULL, meaning that the option
is disabled. is disabled.
The preferred locator can be set by setsockopt(). Verification of The preferred locator can be set by setsockopt(). Verification of
the locator shall be done by the shim layer before updating the the locator shall be done by the shim layer before updating the
preferred locator. preferred locator.
The preferred locator can be read by getsockopt(). The preferred locator can be read by getsockopt().
An error ENOENT will be returned when there is no context associated An error ENOENT will be returned when there is no context associated
with the socket. with the socket.
skipping to change at page 16, line 15 skipping to change at page 16, line 15
For example, a preferred locator can be set as follows. It should be For example, a preferred locator can be set as follows. It should be
noted that some members of the shim_locator (lc_ifidx and lc_flags) noted that some members of the shim_locator (lc_ifidx and lc_flags)
are ignored in the write operation. are ignored in the write operation.
struct shim_locator lc; struct shim_locator lc;
struct in6_addr ip6; struct in6_addr ip6;
/* ...set the locator (ip6)... */ /* ...set the locator (ip6)... */
bzero(&lc, sizeof(shim_locator)); memset(&lc, 0, sizeof(shim_locator));
lc.lc_family = AF_INET6; /* IPv6 */ lc.lc_family = AF_INET6; /* IPv6 */
lc.lc_ifidx = 0; lc.lc_ifidx = 0;
lc.lc_flags = 0; lc.lc_flags = 0;
lc.lc_preference = 255; lc.lc_preference = 255;
memcpy(lc.lc_addr, &ip6, sizeof(in6_addr)); memcpy(lc.lc_addr, &ip6, sizeof(in6_addr));
setsockopt(fd, SOL_SHIM, SHIM_LOC_LOCAL_PREF, &lc, setsockopt(fd, SOL_SHIM, SHIM_LOC_LOCAL_PREF, &lc,
sizeof(optval)); sizeof(optval));
For example, the preferred locator of the context can be read by For example, the preferred locator of the context can be read by
skipping to change at page 16, line 42 skipping to change at page 16, line 42
getsockopt(fd, SOL_SHIM, SHIM_LOC_LOCAL_PREF, &lc, &len); getsockopt(fd, SOL_SHIM, SHIM_LOC_LOCAL_PREF, &lc, &len);
5.6. SHIM_LOC_PEER_PREF 5.6. SHIM_LOC_PEER_PREF
The SHIM_LOC_PEER_PREF option can be used to read or set preferred The SHIM_LOC_PEER_PREF option can be used to read or set preferred
locator on peer side within a given context. Hence this option is locator on peer side within a given context. Hence this option is
effective only when there is a shim context associated with the effective only when there is a shim context associated with the
socket. socket.
Data type of the option value is a pointer to the specific data The data type of the option value is a pointer to the specific data
structure which stores the locator information. The data structure structure which stores the locator information. The data structure
is defined in Section 7. is defined in Section 7.
By default, the option value is set as NULL, meaning that the option By default, the option value is set to NULL, meaning that the option
is disabled. is disabled.
The preferred locator can be set by setsockopt(). Necessary The preferred locator can be set by setsockopt(). The shim layer
verification of the locator shall be done by the shim layer before shall perform verification of the locator before updating the
updating the preferred locator. preferred locator.
The preferred locator can be read by getsockopt(). The preferred locator can be read by getsockopt().
An error ENOENT will be returned when there is no context associated An error ENOENT will be returned when there is no context associated
with the socket. with the socket.
An error EINVALIDLOCATOR will be returned when the validation of the An error EINVALIDLOCATOR will be returned when the validation of the
specified locator failed. specified locator failed.
For example, a preferred locator can be set as follows. It should be For example, a preferred locator can be set as follows. It should be
skipping to change at page 17, line 27 skipping to change at page 17, line 27
The usage of the option is same as that of SHIM_LOC_LOCAL_PREF. The usage of the option is same as that of SHIM_LOC_LOCAL_PREF.
5.7. SHIM_LOC_LOCAL_RECV 5.7. SHIM_LOC_LOCAL_RECV
The SHIM_LOC_LOCAL_RECV option can be used to request the shim layer The SHIM_LOC_LOCAL_RECV option can be used to request the shim layer
to store the destination locator of the received IP packet in an to store the destination locator of the received IP packet in an
ancillary data object which can be accessed by recvmsg(). Hence this ancillary data object which can be accessed by recvmsg(). Hence this
option is effective only when there is a shim context associated with option is effective only when there is a shim context associated with
the socket. the socket.
Data type of the option value is integer. The option value should be The data type of the option value is integer. The option value
binary (0 or 1). By default, the option value is set to 0, meaning should be binary (0 or 1). By default, the option value is set to 0,
that the option is disabled. meaning that the option is disabled.
The option value can be set by setsockopt(). The option value can be set by setsockopt().
The option value can be read by getsockopt(). The option value can be read by getsockopt().
See Section 6 for the procedure to access locator information stored See Section 6 for the procedure to access locator information stored
in the ancillary data objects. in the ancillary data objects.
An error ENOENT will be returned when there is no context associated An error ENOENT will be returned when there is no context associated
with the socket. with the socket.
skipping to change at page 18, line 20 skipping to change at page 18, line 20
getsockopt(fd, SOL_SHIM, SHIM_LOC_LOCAL_RECV, &optval, &len); getsockopt(fd, SOL_SHIM, SHIM_LOC_LOCAL_RECV, &optval, &len);
5.8. SHIM_LOC_PEER_RECV 5.8. SHIM_LOC_PEER_RECV
The SHIM_LOC_PEER_RECV option can be used to request the shim layer The SHIM_LOC_PEER_RECV option can be used to request the shim layer
to store the source locator of the received IP packet in an ancillary to store the source locator of the received IP packet in an ancillary
data object which can be accessed by recvmsg(). Hence this option is data object which can be accessed by recvmsg(). Hence this option is
effective only when there is a shim context associated with the effective only when there is a shim context associated with the
socket. socket.
Data type of the option value is integer. The option value should be The data type of the option value is integer. The option value
binary (0 or 1). By default, the option value is set to 0, meaning should be binary (0 or 1). By default, the option value is set to 0,
that the option is disabled. meaning that the option is disabled.
The option value can be set by setsockopt(). The option value can be set by setsockopt().
The option value can be read by getsockopt(). The option value can be read by getsockopt().
See Section 6 for the procedure to access locator information stored See Section 6 for the procedure to access locator information stored
in the ancillary data objects. in the ancillary data objects.
An error ENOENT will be returned when there is no context associated An error ENOENT will be returned when there is no context associated
with the socket. with the socket.
skipping to change at page 18, line 44 skipping to change at page 18, line 44
The usage of the option is same as that of SHIM_LOC_LOCAL_RECV The usage of the option is same as that of SHIM_LOC_LOCAL_RECV
option. option.
5.9. SHIM_LOC_LOCAL_SEND 5.9. SHIM_LOC_LOCAL_SEND
The SHIM_LOC_LOCAL_SEND option can be used to request the shim layer The SHIM_LOC_LOCAL_SEND option can be used to request the shim layer
to use specific locator for the source locator of IP packets to be to use specific locator for the source locator of IP packets to be
sent from the socket. Hence this option is effective only when there sent from the socket. Hence this option is effective only when there
is a shim context associated with the socket. is a shim context associated with the socket.
Data type of option value is pointer to shim_locator data structure. The data type of option value is pointer to shim_locator data
structure.
The local locator can be specified by setsockopt() providing a valid The local locator can be specified by setsockopt() providing a valid
locator which is stored in a shim_locator data structure. When a locator which is stored in a shim_locator data structure. When a
zero-filled locator is specified, pre-existing setting of local zero-filled locator is specified, pre-existing setting of local
locator is deactivated. locator is inactivated.
The local locator specified can be obtained by getsockopt(). The The local locator specified can be obtained by getsockopt(). The
locator can be obtained from the option value. locator can be obtained from the option value.
An error ENOENT will be returned when there is no context associated An error ENOENT will be returned when there is no context associated
with the socket. with the socket.
An error EINVALIDLOCATOR when invalid locator is specified. An error EINVALIDLOCATOR when invalid locator is specified.
For example, a preferred local locator can be specified as follows. For example, a preferred local locator can be specified as follows.
skipping to change at page 19, line 48 skipping to change at page 19, line 49
/* check locator */ /* check locator */
5.10. SHIM_LOC_PEER_SEND 5.10. SHIM_LOC_PEER_SEND
The SHIM_LOC_PEER_SEND option can be used to request the shim layer The SHIM_LOC_PEER_SEND option can be used to request the shim layer
to use specific locator for the destination locator of IP packets to to use specific locator for the destination locator of IP packets to
be sent from the socket. Hence this option is effective only when be sent from the socket. Hence this option is effective only when
there is a shim context associated with the socket. there is a shim context associated with the socket.
Data type of option value is pointer to shim_locator data structure. The data type of the option value is a pointer to shim_locator data
structure.
The remote locator can be specified by setsockopt() providing a valid The remote locator can be specified by setsockopt() providing a valid
locator which is stored in a shim_locator data structure. When a locator which is stored in a shim_locator data structure. When a
zero-filled locator is specified, pre-existing setting of remote zero-filled locator is specified, pre-existing setting of remote
locator is deactivated. locator is inactivated.
The remote locator specified can be obtained by getsockopt(). The The remote locator specified can be obtained by getsockopt(). The
locator can be obtained from the option value. locator can be obtained from the option value.
An error ENOENT will be returned when there is no context associated An error ENOENT will be returned when there is no context associated
with the socket. with the socket.
An error EINVALIDLOCATOR when invalid locator is specified. An error EINVALIDLOCATOR when invalid locator is specified.
The usage of the option is as the same as that of SHIM_LOC_LOCAL_SEND The usage of the option is as the same as that of SHIM_LOC_LOCAL_SEND
option. option.
5.11. SHIM_LOCLIST_LOCAL 5.11. SHIM_LOCLIST_LOCAL
The SHIM_LOCLIST_LOCAL option can be used to read or set the locator The SHIM_LOCLIST_LOCAL option can be used to read or set the locator
list associated with the local EID of the shim context associated list associated with the local EID of the shim context associated
with the socket. Hence this option is effective only when there is a with the socket. Hence this option is effective only when there is a
shim context associated with the socket. shim context associated with the socket.
Data type of option value is pointer to the buffer where a locator The data type of the option value is a pointer to the buffer where a
list is stored. See Section 7 for the data structure for storing the locator list is stored. See Section 7 for the data structure for
locator information. By default, the option value is set as NULL, storing the locator information. By default, the option value is set
meaning that the option is disabled. to NULL, meaning that the option is disabled.
The locator list can be read by getsockopt(). Note that the size of The locator list can be read by getsockopt(). Note that the size of
the buffer pointed by optval argument should be large enough to store the buffer pointed by optval argument should be large enough to store
an array of locator information. The number of the locator an array of locator information. The number of the locator
information is not known beforehand. information is not known beforehand.
The locator list can be set by setsockopt(). The buffer pointed by The locator list can be set by setsockopt(). The buffer pointed by
optval argument should contain an array of locator list. optval argument should contain an array of locator list.
An error ENOENT will be returned when there is no context associated An error ENOENT will be returned when there is no context associated
skipping to change at page 22, line 12 skipping to change at page 22, line 12
/* parse locators */ /* parse locators */
... ...
5.12. SHIM_LOCLIST_PEER 5.12. SHIM_LOCLIST_PEER
The SHIM_LOCLIST_PEER option can be used to read or set the locator The SHIM_LOCLIST_PEER option can be used to read or set the locator
list associated with the peer EID of the shim context associated with list associated with the peer EID of the shim context associated with
the socket. Hence this option is effective only when there is a shim the socket. Hence this option is effective only when there is a shim
context associated with the socket. context associated with the socket.
Data type of option value is pointer to the buffer where a locator The data type of the option value is a pointer to the buffer where a
list is stored. See Section 7 for the data structure for storing the locator list is stored. See Section 7 for the data structure for
locator information. By default, the option value is set as NULL, storing the locator information. By default, the option value is set
meaning that the option is disabled. to NULL, meaning that the option is disabled.
The locator list can be read by getsockopt(). Note that the size of The locator list can be read by getsockopt(). Note that the size of
the buffer pointed by optval argument should be large enough to store the buffer pointed by optval argument should be large enough to store
an array of locator information. The number of the locator an array of locator information. The number of the locator
information is not known beforehand. information is not known beforehand.
The locator list can be set by setsockopt(). The buffer pointed by The locator list can be set by setsockopt(). The buffer pointed by
optval argument should contain an array of locator list. optval argument should contain an array of locator list.
An error ENOENT will be returned when there is no context associated An error ENOENT will be returned when there is no context associated
skipping to change at page 22, line 39 skipping to change at page 22, line 39
specified locator failed. specified locator failed.
The usage of the option is same as that of SHIM_LOCLIST_LOCAL. The usage of the option is same as that of SHIM_LOCLIST_LOCAL.
5.13. SHIM_APP_TIMEOUT 5.13. SHIM_APP_TIMEOUT
The SHIM_APP_TIMEOUT option indicates timeout value for application The SHIM_APP_TIMEOUT option indicates timeout value for application
to detect failure. Hence this option is effective only when there is to detect failure. Hence this option is effective only when there is
a shim context associated with the socket. a shim context associated with the socket.
Data type of the option value is integer. The value indicates the The data type of the option value is an integer. The value indicates
period of timeout in seconds to send a REAP Keepalive message since the period of timeout in seconds to send a REAP Keepalive message
the last outbound traffic. By default, the option value is set as 0, since the last outbound traffic. By default, the option value is set
meaning that the option is disabled. When the option is disabled, to 0, meaning that the option is disabled. When the option is
the REAP mechanism follows its default value of Send Timeout value as disabled, the REAP mechanism follows its default value of Send
specified in [I-D.ietf-shim6-failure-detection] Timeout value as specified in [I-D.ietf-shim6-failure-detection]
If the timeout value specified is longer than the Send Timeout If the timeout value specified is longer than the Send Timeout
configured in the REAP component, the REAP Keepalive message should configured in the REAP component, the REAP Keepalive message should
be suppressed. be suppressed.
An error ENOENT will be returned when there is no context associated An error ENOENT will be returned when there is no context associated
with the socket. with the socket.
For example, a specific timeout value can be configured by the For example, a specific timeout value can be configured by the
application as follows: application as follows:
skipping to change at page 23, line 33 skipping to change at page 23, line 33
getsockopt(fd, SOL_SHIM, SHIM_APP_TIMEOUT, &optval, &len); getsockopt(fd, SOL_SHIM, SHIM_APP_TIMEOUT, &optval, &len);
5.14. SHIM_DEFERRED_CONTEXT_SETUP 5.14. SHIM_DEFERRED_CONTEXT_SETUP
The SHIM_DEFERRED_CONTEXT_SETUP option indicates how initiation of The SHIM_DEFERRED_CONTEXT_SETUP option indicates how initiation of
context setup is made in terms of timing (before or after) the context setup is made in terms of timing (before or after) the
initial communication flow. Deferred context means that the initial communication flow. Deferred context means that the
establishment of context does not put additional delay for an initial establishment of context does not put additional delay for an initial
transaction. transaction.
Data type for the option value is integer. The option value should The data type for the option value is an integer. The option value
binary (0 or 1). By default, the value is set as 1, meaning that the should binary (0 or 1). By default, the value is set to 1, meaning
context setup is deferred. In order to disable the option, the that the context setup is deferred. In order to disable the option,
application should call setsockopt() with option value set as 0. the application should call setsockopt() with option value set to 0.
However, it should be noted that in some case, deferred context setup However, it should be noted that deferred context setup may not be
is not possible; given EID is non-routable address and there is no possible in some cases. For instance, an EID may be non-routable
way to transmit any IP packet unless there is a context providing the address (e.g., Host Identifier in HIP) and there is no way to
locators. In such case, context should be established prior to the transmit any IP packet unless there is a context providing the
communication. locators. In such a case, a context should be established prior to
the communication.
For example, the option can be disabled by the application as For example, the option can be disabled by the application as
follows: follows:
int optval; int optval;
optval = 0; optval = 0;
setsockopt(fd, SOL_SHIM, SHIM_DEFERRED_CONTEXT_SETUP, setsockopt(fd, SOL_SHIM, SHIM_DEFERRED_CONTEXT_SETUP,
&optval, sizeof(optval)); &optval, sizeof(optval));
skipping to change at page 24, line 20 skipping to change at page 24, line 22
len = sizeof(optval); len = sizeof(optval);
getsockopt(fd, SOL_SHIM, SHIM_DEFERRED_CONTEXT_SETUP, getsockopt(fd, SOL_SHIM, SHIM_DEFERRED_CONTEXT_SETUP,
&optval, &len); &optval, &len);
5.15. Error Handling 5.15. Error Handling
If successful, getsockopt() and setsockopt() return 0; otherwise, the If successful, getsockopt() and setsockopt() return 0; otherwise, the
functions return -1 and set errno to indicate error. functions return -1 and set errno to indicate error.
The followings are errno codes newly defined for some shim specific The following are new error values defined for some shim specific
socket options indicating that the getsockopt() or setsockopt() socket options indicating that the getsockopt() or setsockopt()
finished incompletely: finished incompletely:
EINVALIDLOCATOR EINVALIDLOCATOR
This indicates that at least one of the necessary validations This indicates that at least one of the necessary validations
inside the shim layer for the specified locator has failed. In inside the shim layer for the specified locator has failed. In
case of SHIM6, there are two kinds of verifications required for case of SHIM6, there are two kinds of verifications required for
security reasons prior to sending an IP packet to the peer's new security reasons prior to sending an IP packet to the peer's new
locator; one is return routability (check if the peer is actually locator; one is the return routability (check if the peer is
willing to receive data with the specified locator) and the other actually willing to receive data with the specified locator) and
is verifications based on given crypto identifier mechanisms the other one is the verification based on crypto identifier
[RFC3972], [I-D.ietf-shim6-hba]. mechanisms [RFC3972], [I-D.ietf-shim6-hba].
6. Ancillary Data for Multihoming Shim 6. Ancillary Data for Multihoming Shim
In this section, definition and usage of the ancillary data which is In this section, the definition and the usage of the ancillary data
specific to multihoming shim are provided. specific to multihoming shim are provided.
As defined in Posix standard, sendmsg() and recvmsg() take msghdr As defined in the Posix standard, sendmsg() and recvmsg() input a
structure as its argument and they can additionally handle control msghdr structure as their arguments. These system calls can handle
information along with data. Figure 22 shows the msghdr structure control information along with data. Figure 3 shows the msghdr
which is defined in <sys/socket.h>. msg_control member holds a structure which is defined in <sys/socket.h>. The member msg_control
pointer to the buffer where the shim specific ancillary data objects holds a pointer to the buffer where the shim specific ancillary data
can be stored in addition to other ancillary data objects. objects can be stored in addition to other ancillary data objects.
struct msghdr { struct msghdr {
caddr_t msg_name; /* optional address */ caddr_t msg_name; /* optional address */
u_int msg_namelen; /* size of address */ u_int msg_namelen; /* size of address */
struct iovec *msg_iov; /* scatter/gather array */ struct iovec *msg_iov; /* scatter/gather array */
u_int msg_iovlen; /* # elements in msg_iov */ u_int msg_iovlen; /* # elements in msg_iov */
caddr_t msg_control; /* ancillary data, see below */ caddr_t msg_control; /* ancillary data, see below */
u_int msg_controllen; /* ancillary data buffer len */ u_int msg_controllen; /* ancillary data buffer len */
int msg_flags; /* flags on received message */ int msg_flags; /* flags on received message */
}; };
Figure 22: msghdr structure Figure 3: msghdr structure
The buffer pointed from the msg_control member of the msghdr The buffer pointed by the member msg_control of the msghdr structure
structure may contain a locator information which is a single locator may contain locator information which is a single locator and it
and it should be possible to process them with the existing macros should be possible to process them with the existing macros defined
defined in Posix and [RFC3542]. Each cmsghdr{} should be followed by in Posix and [RFC3542]. Each cmsghdr{} should be followed by data
data which stores a single locator. which stores a single locator.
In case of non-connected socket, msg_name member stores the socket In case of non-connected socket, msg_name member stores the socket
address of the peer which should be considered as an identifier address of the peer which should be considered as an identifier
rather than a locator. The locator of the peer node should be rather than a locator. The locator of the peer node should be
retrieved by SHIM_LOC_PEER_RECV as specified below. retrieved by SHIM_LOC_PEER_RECV as specified below.
Table 2 is a list of the shim specific ancillary data which can be Table 2 is a list of the shim specific ancillary data which can be
used for recvmsg() or sendmsg(). In any case, SOL_SHIM must be set used for recvmsg() or sendmsg(). In any case, SOL_SHIM must be set
as cmsg_level. as cmsg_level.
skipping to change at page 25, line 48 skipping to change at page 25, line 48
| SHIM_LOC_PEER_SEND | o | | *1 | | SHIM_LOC_PEER_SEND | o | | *1 |
| SHIM_FEEDBACK | o | | shim_feedback{} | | SHIM_FEEDBACK | o | | shim_feedback{} |
+---------------------+-----------+-----------+-----------------+ +---------------------+-----------+-----------+-----------------+
Table 2: Shim specific ancillary data Table 2: Shim specific ancillary data
*1: cmsg_data[] should include padding (if necessary) and a single *1: cmsg_data[] should include padding (if necessary) and a single
sockaddr_in{}/sockaddr_in6{}. sockaddr_in{}/sockaddr_in6{}.
It should be noted that the above ancillary data can only be handled It should be noted that the above ancillary data can only be handled
in UDP and raw sockets, not in TCP sockets because there is no one- by a UDP or a raw socket and not by a TCP socket. This is because
to-one mapping of send/receive operations and the TCP segments being there is no one-to-one mapping between a single send/receive
transmitted/received. operation and a TCP segment being transmitted/received.
6.1. Get Locator Information from Incoming Packet 6.1. Get Locator Information from Incoming Packet
Application can get locator information from the received IP packet An application can get locator information from the received IP
by specifying the shim specific socket options for the socket. When packet by specifying the shim specific socket options for the socket.
SHIM_LOC_LOCAL_RECV and/or SHIM_LOC_PEER_RECV socket options are set, When SHIM_LOC_LOCAL_RECV and/or SHIM_LOC_PEER_RECV socket options are
the application can retrieve local and/or remote locator from the set, the application can retrieve local and/or remote locator from
ancillary data. the ancillary data.
6.2. Specify Locator Information for Outgoing Packet 6.2. Specify Locator Information for Outgoing Packet
Application can specify the locators to be used for transmitting an An application can specify the locators to be used for transmitting
IP packet by sendmsg(). When ancillary data of cmsg_type an IP packet by sendmsg(). When the ancillary data of cmsg_type
SHIM_LOC_LOCAL_SEND and/or SHIM_LOC_PEER_SEND are specified, the SHIM_LOC_LOCAL_SEND and/or SHIM_LOC_PEER_SEND are specified, the
application can explicitly specify source and/or destination locators application can explicitly specify the source and/or the destination
to be used for the communication over the socket. locators to be used for the communication over the socket.
In addition, the application can specify the outgoing interface by In addition, the application can specify the outgoing interface by
SHIM_IF_SEND ancillary data. The ancillary data should contain the SHIM_IF_SEND ancillary data. The ancillary data should contain the
interface identifier of the physical interface over which the interface identifier of the physical interface over which the
application expects the packet to be transmitted. application expects the packet to be transmitted.
Note that the effect is limited to the datagram transmitted by the Note that the effect is limited to the datagram transmitted by the
sendmsg(). sendmsg().
If the specified locator pair seems to be valid, the shim layer If the specified locator pair is verified, the shim layer overrides
overrides the locator of the IP packet as requested. the locators of the IP packet.
An error EINVALIDLOCATOR will be returned when validation of the An error EINVALIDLOCATOR will be returned when validation of the
specified locator failed. specified locator failed.
6.3. Notification from Application to Multihoming Shim 6.3. Notification from Application to Multihoming Shim
Application may provide feedback to the shim layer about the An application may provide feedbacks to the shim layer about the
communication status. Such feedback is particularly useful for the communication status. Such feedbacks are particularly useful for the
shim layer in the absence of REAP mechanism to monitor the shim layer in the absence of REAP mechanism to monitor the
reachability status of currently used locator pair in a given shim reachability status of the currently used locator pair in a given
context. shim context.
The notification can be made by sendmsg() specifying a new ancillary The notification can be made by sendmsg() specifying a new ancillary
data called SHIM_FEEDBACK. The ancillary data can be handled by data called SHIM_FEEDBACK. The ancillary data can be handled by
specifying SHIM_FEEDBACK option in cmsg_type. specifying SHIM_FEEDBACK option in cmsg_type.
An error ENOENT will be returned when there is no context associated An error ENOENT will be returned when there is no context associated
with the socket. with the socket.
See Section 7.3 for details of the data structure to be used. Note See Section 7.3 for details of the data structure to be used. Note
that this specification does not specify the exact behavior of the that this specification does not specify the exact behavior of the
shim layer when a feedback information is given by an application. shim layer when a feedback is given by an application.
7. Data Structures 7. Data Structures
In this section, data structures specifically defined for the In this section, data structures specifically defined for the
multihoming shim layer are introduced. Those data structure are multihoming shim layer are introduced. These data structures are
either used as a parameter for setsockopt()/getsockopt() (as either used as a parameter for setsockopt()/getsockopt() (as
mentioned in Section 5) or a parameter for ancillary data to be mentioned in Section 5) or as a parameter for ancillary data to be
processed by sendmsg()/recvmsg() (as mentioned in Section 6). processed by sendmsg()/recvmsg() (as mentioned in Section 6).
7.1. Placeholder for Locator Information 7.1. Placeholder for Locator Information
As defined in Section 5, the SHIM_LOC_LOCAL_PREF, SHIM_LOC_PEER_PREF, As defined in Section 5, the SHIM_LOC_LOCAL_PREF, SHIM_LOC_PEER_PREF,
SHIM_LOCLIST_LOCAL, and SHIM_LOCLIST_PEER socket options need to SHIM_LOCLIST_LOCAL, and SHIM_LOCLIST_PEER socket options need to
handle one or more locator information. Locator information includes handle one or more locator information. Locator information includes
not only the locator itself but also additional information about the not only the locator itself but also additional information about the
locator which is useful for locator management. A new data structure locator which is useful for locator management. A new data structure
is defined to serve as a placeholder for the locator information. is defined to serve as a placeholder for the locator information.
Figure 23 illustrates the data structure called shim_locator which Figure 4 illustrates the data structure called shim_locator which
stores a locator information. stores a locator information.
struct shim_locator { struct shim_locator {
uint8_t lc_family; /* address family */ uint8_t lc_family; /* address family */
uint8_t lc_ifidx; /* interface index */ uint8_t lc_ifidx; /* interface index */
uint8_t lc_flags; /* flags */ uint8_t lc_flags; /* flags */
uint8_t lc_preference; /* preference value */ uint8_t lc_preference; /* preference value */
uint8_t lc_addr[16]; /* address data */ uint8_t lc_addr[16]; /* address data */
}; };
Figure 23: shim locator structure Figure 4: shim locator structure
lc_family lc_family
Address family of the locator (e.g. AF_INET, AF_INET6). It is Address family of the locator (e.g. AF_INET, AF_INET6). It is
required that the parameter contains non-zero value indicating the required that the parameter contains non-zero value indicating the
exact address family of the locator. exact address family of the locator.
lc_ifidx lc_ifidx
Interface index of the network interface to which the locator is Interface index of the network interface to which the locator is
assigned. This field should be valid only in read (getsockopt()) assigned. This field should be valid only in a read
operation. (getsockopt()) operation.
lc_flags lc_flags
Each bit of the flags represents a specific characteristics of the Each bit of the flags represents a specific characteristics of the
locator. HBA is defined as 0x01. CGA is defined as 0x02. The locator. Hash Based Address (HBA) is defined as 0x01.
other bits are TBD. Cryptographically Generated Address (CGA) is defined as 0x02.
lc_preference lc_preference
Indicates preference of the locator. The preference is Indicates a preference of the locator. The preference is
represented by integer. represented by an integer.
lc_addr lc_addr
Contains the locator. For the cases where a locator whose size is Contains the locator. In the case where a locator whose size is
smaller than 16 bytes, encoding rule should be provided for each smaller than 16 bytes, an encoding rule should be provided for
locator of a given address family. For instance, in case of each locator of a given address family. For instance, in case of
AF_INET (IPv4), the first 4 bytes of lc_addr should contain the AF_INET (IPv4), the locator should be in the format of an IPv4-
IPv4 address. mapped IPv6 address as defined in RFC 4291[RFC4291].
7.2. Path Exploration Parameter 7.2. Path Exploration Parameter
As defined in Section 5, SHIM_PATHEXPLORE allows application to set As defined in Section 5, SHIM_PATHEXPLORE allows application to set
or read the parameters for path exploration and failure detection. A or read the parameters for path exploration and failure detection. A
new data structure called shim_pathexplore is defined to store the new data structure called shim_pathexplore is defined to store the
necessary parameters. Figure 24 illustrates the data structure. The necessary parameters. Figure 5 illustrates the data structure. The
data structure can be used by getsockopt() or setsockopt() as an data structure can be passed to getsockopt() or setsockopt() as an
argument. argument.
struct shim_pathexplore { struct shim_pathexplore {
uint8_t pe_probenum; /* # of initial probe */ uint8_t pe_probenum; /* # of initial probe */
uint8_t pe_keepaliveto; /* Keepalive Timeout */ uint8_t pe_keepaliveto; /* Keepalive Timeout */
uint16_t pe_initprobeto; /* Initial Probe Timeout */ uint16_t pe_initprobeto; /* Initial Probe Timeout */
uint32_t pe_reserved; /* reserved */ uint32_t pe_reserved; /* reserved */
}; };
Figure 24: path explore structure Figure 5: path explore structure
pe_probenum pe_probenum
Indicates the number of initial probe messages to be sent. Indicates the number of initial probe messages to be sent.
Default value of this parameter should follow what is specified in Default value of this parameter should follow what is specified in
[I-D.ietf-shim6-failure-detection]. [I-D.ietf-shim6-failure-detection].
pe_keepaliveto pe_keepaliveto
Indicates timeout value for detecting a failure when the host does Indicates timeout value for detecting a failure when the host does
not receive any packets for a certain period of time while there not receive any packets for a certain period of time while there
is outbound traffic. When the timer expires, path exploration is outbound traffic. When the timer expires, path exploration
procedure will be carried out by sending a REAP Probe message. procedure will be carried out by sending a REAP Probe message.
Default value of this parameter should follow what is specified in Default value of this parameter should follow what is specified in
[I-D.ietf-shim6-failure-detection]. [I-D.ietf-shim6-failure-detection].
pe_initprobeto pe_initprobeto
Indicates retransmission timer of REAP Probe message in Indicates retransmission timer of REAP Probe message in
milliseconds. Note that this timer is applied before exponential milliseconds. Note that this timer is applied before exponential
back-off is started. A REAP Probe message for the same locator back-off is started. A REAP Probe message for the same locator
pair may be retransmitted. Default value of this parameter should pair may be retransmitted. Default value of this parameter should
follow what is specified in [I-D.ietf-shim6-failure-detection]. follow what is specified in [I-D.ietf-shim6-failure-detection].
pe_reserved pe_reserved
A reserved field for future extension. By default, the field A reserved field for future extension. By default, the field
should be initialized with zero. should be initialized to zero.
7.3. Feedback Information 7.3. Feedback Information
As mentioned in Section 6.3, applications can inform the shim layer As mentioned in Section 6.3, applications can inform the shim layer
about the status of unicast reachability of the locator pair about the status of unicast reachability of the locator pair
currently in use. The feedback information can be handled by using currently in use. The feedback information can be handled by using
ancillary data called SHIM_FEEDBACK. A new data structure named ancillary data called SHIM_FEEDBACK. A new data structure named
shim_feedback is illustrated in Figure 25). shim_feedback is illustrated in Figure 6.
struct shim_feedback { struct shim_feedback {
uint8_t fb_direction; /* direction of traffic */ uint8_t fb_direction; /* direction of traffic */
uint8_t fb_indicator; /* indicator (1-3) */ uint8_t fb_indicator; /* indicator (1-3) */
uint16_t fb_reserved; /* reserved */ uint16_t fb_reserved; /* reserved */
}; };
Figure 25: feedback information structure Figure 6: feedback information structure
direction direction
Indicates direction of reachability between a locator pair in Indicates direction of reachability between a locator pair in
question. A value 0 indicates outbound and a value 1 indicates question. A value 0 indicates outbound and a value 1 indicates
inbound. inbound direction.
indicator indicator
A value indicating the degree of satisfaction of a unidirectional A value indicating the degree of satisfaction of a unidirectional
reachability for a given locator pair. reachability for a given locator pair.
* 0: Default value. Whenever this value is specified the * 0: Default value. Whenever this value is specified the
feedback information must not be processed by the shim layer. feedback information must not be processed by the shim layer.
* 1: Unable to connect. There is no unidirectional reachability * 1: Unable to connect. There is no unidirectional reachability
between the locator pair in question. between the locator pair in question.
* 2: Unsatisfactory. The application is not satisfied with the * 2: Unsatisfactory. The application is not satisfied with the
unidirectional reachability between the locator pair in unidirectional reachability between the locator pair in
question. question.
* 3: Satisfactory. There is satisfactory unidirectional * 3: Satisfactory. There is satisfactory unidirectional
reachability between the locator pair in question. reachability between the locator pair in question.
reserved reserved
Reserved field. Must be ignored by the receiver. Reserved field. Must be ignored by the receiver.
8. Implications for Existing Socket API Extensions 8. Implications for Existing Socket API Extensions
Some of the socket options defined in this document have some Some of the socket options defined in this document are overlapping
overlapping with existing socket API and care should be made for the with existing sockets API and care should be taken for the usage not
usage not to confuse the features. to confuse with the overlapping features.
The socket options for requesting specific locators to be used for a The socket options for requesting specific locators to be used for a
given transaction (SHIM_LOC_LOCAL_PREF and SHIM_LOC_PEER_PREF) are given transaction (SHIM_LOC_LOCAL_PREF and SHIM_LOC_PEER_PREF) are
semantically similar to the existing socket API (IPV6_PKTINFO). The semantically similar to the existing sockets API (IPV6_PKTINFO). The
socket options for obtaining the locator information from the socket options for obtaining the locator information from the
received IP packet (SHIM_LOC_LOCAL_RECV and SHIM_LOC_PEER_RECV) are received IP packet (SHIM_LOC_LOCAL_RECV and SHIM_LOC_PEER_RECV) are
semantically similar to the existing socket API (IP_RECVDSTADDR and semantically similar to the existing sockets API (IP_RECVDSTADDR and
IPV6_PKTINFO). IPV6_PKTINFO).
In IPv4, application can obtain the destination IP address of the In IPv4, application can obtain the destination IP address of the
received IP packet (IP_RECVDSTADDR). If the shim layer performs received IP packet (IP_RECVDSTADDR). If the shim layer performs
identifier/locator adaptation for the received packet, the identifier/locator adaptation for the received packet, the
destination EID should be stored in the ancillary data destination EID should be stored in the ancillary data
(IP_RECVDSTADDR). (IP_RECVDSTADDR).
In IPv6, [RFC3542] defines that IPV6_PKTINFO can be used to specify In IPv6, [RFC3542] defines that IPV6_PKTINFO can be used to specify
source IPv6 address and the outgoing interface for outgoing packets, source IPv6 address and the outgoing interface for outgoing packets,
and retrieve destination IPv6 address and receiving interface for and retrieve destination IPv6 address and receiving interface for
incoming packets. This information is stored in ancillary data being incoming packets. This information is stored in ancillary data being
IPV6_PKTINFO specified as cmsg_type. Existing socket API should IPV6_PKTINFO specified as cmsg_type. Existing sockets API should
continue to work above the shim layer, that is, the IP addresses continue to work above the shim layer, that is, the IP addresses
handled in IPV6_PKTINFO should be EIDs, not the locators. handled in IPV6_PKTINFO should be EIDs, not the locators.
Baseline is that the above existing socket API (IP_RECVDSTADDR and Baseline is that the above existing sockets API (IP_RECVDSTADDR and
IPV6_PKTINFO) is assumed to work above the multihoming shim layer. IPV6_PKTINFO) is assumed to work above the multihoming shim layer.
In other words, the IP addresses those socket options deal with are In other words, the IP addresses those socket options deal with are
EIDs rather than locators. EIDs rather than locators.
9. Resolving Conflicts with Preference Values 9. Resolving Conflicts with Preference Values
Since the multihoming shim API allows application to specify Since the multihoming shim API allows application to specify
preference value for the context which is associated with the socket preference value for the context which is associated with the socket
instance, there may be a conflict with preference values specified by instance, there may be a conflict with preference values specified by
different applications. For instance, application A and B may different applications. For instance, application A and B may
establish communication over the same EID pair while each application establish communication over the same EID pair while both
have different preference in their choice of local locator. applications have different preference in their choice of local
locator.
SHIM6 supports a notion of forking context in which a context is SHIM6 supports a notion of context forking in which a context is
split when there is a conflict with preference values specified by split when there is a conflict with preference values specified by
multiple applications. Thus, context forking can simply resolve the multiple applications. Thus, context forking can simply resolve the
conflicting situation which may be caused by the use of socket conflicting situation which may be caused by the use of socket
options for multihoming shim layer. options for multihoming shim layer.
9.1. Implicit Forking 9.1. Implicit Forking
Socket options defined in Section 5 may cause conflicting situation Socket options defined in Section 5 may cause conflicting situation
when the target context is shared by multiple applications. In such when the target context is shared by multiple applications. In such
case, socket handler and the multihoming shim layer should react as case, socket handler and the multihoming shim layer should react as
skipping to change at page 31, line 14 skipping to change at page 31, line 15
shim layer during the lifetime of associated socket instance. When shim layer during the lifetime of associated socket instance. When
the socket is closed, the multihoming shim layer SHOULD delete the socket is closed, the multihoming shim layer SHOULD delete
associated context. In this way, garbage collection can be carried associated context. In this way, garbage collection can be carried
out to cleanup unused forked contexts. Upon garbage collection, out to cleanup unused forked contexts. Upon garbage collection,
every forked context SHOULD be checked if there is no socket every forked context SHOULD be checked if there is no socket
(process) associated with the context. If there is none, the forked (process) associated with the context. If there is none, the forked
context should be deleted. When a forked context is torn down, SHIM6 context should be deleted. When a forked context is torn down, SHIM6
should notify the peer about the deletion of forked context. should notify the peer about the deletion of forked context.
As opposed to socket options, context forking MUST NOT be triggered As opposed to socket options, context forking MUST NOT be triggered
by any use of ancillary data that are specific to multihoming shim by any use of ancillary data that is specific to multihoming shim as
defined in Section 6. defined in Section 6.
10. Discussion 10. Discussion
In this section, open issues are introduced. In this section, open issues are introduced.
10.1. Naming at Socket Layer 10.1. Naming at Socket Layer
getsockname() and getpeername() system calls are used to obtain the The getsockname() and getpeername() system calls are used to obtain
'name' of endpoint which is actually a pair of IP address and port the 'name' of an endpoint which is actually a pair of IP address and
number assigned to a given socket. getsockname() is used when an port number assigned to a given socket. getsockname() is used when an
application wants to obtain the local IP address and port number application wants to obtain the local IP address and port number
assigned for a given socket instance. getpeername() is used when an assigned for a given socket instance. getpeername() is used when an
application wants to obtain the remote IP address and port number. application obtains the remote IP address and port number.
The above is based on a traditional system model of the socket API The above is based on a traditional system model of the sockets API
where an IP address is expected to play both the role of identifier where an IP address is expected to play both the role of identifier
and the role of locator. and the role of locator.
In a system model where a shim layer exists inside the IP layer, both In a system model where a shim layer exists inside the IP layer, both
getsockname() and getpeername() deal with identifiers, namely EIDs. getsockname() and getpeername() deal with identifiers, namely EIDs.
In this sense, the shim layer serves to (1) hide locators and (2) In this sense, the shim layer serves to (1) hide locators and (2)
provide access to the identifier for the application over the legacy provide access to the identifier for the application over the legacy
socket APIs. socket APIs.
10.2. Additional Requirements from Application 10.2. Additional Requirements from Applications
At the moment, it is not certain if following requirements are common At the moment, it is not certain if following requirements are common
in all the multihomed environments (SHIM6 and HIP). These are mainly in all the multihomed environments (SHIM6 and HIP). These are mainly
identified during discussions made on SHIM6 WG mailing list. identified during discussions made on SHIM6 WG mailing list.
o The application should be able to set preferences for the o The application should be able to set preferences for the
locators, local and remote one and also to the preferences of the locators, local and remote ones, and also to the preferences of
local locators that will be passed to the peer. the local locators that will be passed to the peer.
10.3. Issues of Header Conversion among Different Address Family 10.3. Issues of Header Conversion among Different Address Family
The shim layer performs identifier/locator adaptation. Therefore, in The shim layer performs identifier/locator adaptation. Therefore, in
some case, the whole IP header can be replaced with new IP header of some case, the whole IP header can be replaced with new IP header of
a different address family (e.g. conversion from IPv4 to IPv6 or vice a different address family (e.g. conversion from IPv4 to IPv6 or vice
versa). Hence, there is an issue how to make the conversion with versa). Hence, there is an issue how to make the conversion with
minimum impact. Note that this issue is common in other protocol minimum impact. Note that this issue is common in other protocol
conversion such as SIIT[RFC2765]. conversion such as SIIT[RFC2765].
skipping to change at page 33, line 33 skipping to change at page 33, line 33
o Updated reference. o Updated reference.
o Correct typo and grammatical errors. o Correct typo and grammatical errors.
11.5. Changes from version 04 to version 05 11.5. Changes from version 04 to version 05
The followings are changes from version 04 to version 05: The followings are changes from version 04 to version 05:
o Added definition of SHIM_FEEDBACK ancillary data. o Added definition of SHIM_FEEDBACK ancillary data.
o Added an example of code using the SHIM_LOCLIST_LOCAL o Added an example of code using the SHIM_LOCLIST_LOCAL
o Added SHIM_LOC_LOCAL_SEND and SHIM_LOC_PEER_SEND socket options. o Added SHIM_LOC_LOCAL_SEND and SHIM_LOC_PEER_SEND socket options.
11.6. Changes from version 05 to version 06
The followings are changes from version 04 to version 05:
o Updated references.
11.7. Changes from version 06 to version 07
The followings are changes from version 06 to version 07:
o Resolved editorial issues.
12. IANA Considerations 12. IANA Considerations
This document contains no IANA consideration. This document contains no IANA consideration.
13. Security Considerations 13. Security Considerations
This document does not specify any security mechanism for the shim This document does not specify any security mechanism for the shim
layer. Fundamentally, the shim layer has a potential to impose layer. Fundamentally, the shim layer has a potential to impose
security threats, as it changes the source and/or destination IP security threats, as it changes the source and/or destination IP
addresses of the IP packet being sent or received. Therefore, the addresses of the IP packet being sent or received. Therefore, the
basic assumption is that the security mechanism defined in each basic assumption is that the security mechanism defined in each
protocol of the shim layer is strictly applied. protocol of the shim layer is strictly applied.
14. Conclusion 14. Conclusion
In this document, the Application Program Interface (API) for In this document, the Application Program Interface (API) for
multihoming shim layer is specified. The socket API allows multihoming shim layer is specified. The sockets API allows
applications to have additional control of the locator management and applications to have additional control of the locator management and
interface to the REAP mechanism inside the multihoming shim layer. interface to the REAP mechanism inside the multihoming shim layer.
Socket options for multihoming shim layer can be used by getsockopt() Socket options for multihoming shim layer can be used by getsockopt()
and/or setsockopt() system calls. Besides, applications can use some and/or setsockopt() system calls. Besides, applications can use some
ancillary data that are specific to multihoming shim layer to get ancillary data that are specific to multihoming shim layer to get
locator from received packet or to set locator for outgoing packet. locator from received packet or to set locator for outgoing packet.
From an architectural point of view, the socket API provides extends From an architectural point of view, the sockets API provides extends
the existing socket API framework in the face of ID/Locator the existing sockets API framework in the face of ID/Locator
separation. With regard to API that relate to IP address management, separation. With regard to API that relate to IP address management,
it is assured that existing socket API continue to work above the it is assured that existing sockets API continue to work above the
shim layer dealing with identifiers, while multihoming shim API deals shim layer dealing with identifiers, while multihoming shim API deals
with locators. with locators.
15. Acknowledgments 15. Acknowledgments
Authors would like to thank Jari Arkko who participated in the Authors would like to thank Jari Arkko who participated in the
discussion that lead to the first version of this document, and discussion that lead to the first version of this document, and
Tatuya Jinmei who thoroughly reviewed the early version of this draft Tatuya Jinmei who thoroughly reviewed the early version of this draft
and provided detailed comments on socket API related issues. Thomas and provided detailed comments on sockets API related issues. Thomas
Henderson provided valuable comments especially from HIP Henderson provided valuable comments especially from HIP
perspectives. perspectives.
16. References 16. References
16.1. Normative References 16.1. Normative References
[I-D.ietf-shim6-failure-detection] [I-D.ietf-shim6-failure-detection]
Arkko, J. and I. Beijnum, "Failure Detection and Locator Arkko, J. and I. Beijnum, "Failure Detection and Locator
Pair Exploration Protocol for IPv6 Multihoming", Pair Exploration Protocol for IPv6 Multihoming",
draft-ietf-shim6-failure-detection-13 (work in progress), draft-ietf-shim6-failure-detection-13 (work in progress),
June 2008. June 2008.
[I-D.ietf-shim6-proto] [I-D.ietf-shim6-proto]
Bagnulo, M. and E. Nordmark, "Level 3 multihoming shim Bagnulo, M. and E. Nordmark, "Level 3 multihoming shim
protocol", draft-ietf-shim6-proto-10 (work in progress), protocol", draft-ietf-shim6-proto-10 (work in progress),
February 2007. February 2008.
[POSIX] "IEEE Std. 1003.1-2001 Standard for Information Technology [POSIX] "IEEE Std. 1003.1-2001 Standard for Information Technology
-- Portable Operating System Interface (POSIX). Open group -- Portable Operating System Interface (POSIX). Open group
Technical Standard: Base Specifications, Issue 6, Technical Standard: Base Specifications, Issue 6,
http://www.opengroup.org/austin", December 2001. http://www.opengroup.org/austin", December 2001.
[RFC3542] Stevens, W., Thomas, M., Nordmark, E., and T. Jinmei, [RFC3542] Stevens, W., Thomas, M., Nordmark, E., and T. Jinmei,
"Advanced Sockets Application Program Interface (API) for "Advanced Sockets Application Program Interface (API) for
IPv6", RFC 3542, May 2003. IPv6", RFC 3542, May 2003.
skipping to change at page 35, line 26 skipping to change at page 35, line 36
[I-D.ietf-shim6-hba] [I-D.ietf-shim6-hba]
Bagnulo, M., "Hash Based Addresses (HBA)", Bagnulo, M., "Hash Based Addresses (HBA)",
draft-ietf-shim6-hba-05 (work in progress), December 2007. draft-ietf-shim6-hba-05 (work in progress), December 2007.
[RFC2765] Nordmark, E., "Stateless IP/ICMP Translation Algorithm [RFC2765] Nordmark, E., "Stateless IP/ICMP Translation Algorithm
(SIIT)", RFC 2765, February 2000. (SIIT)", RFC 2765, February 2000.
[RFC3972] Aura, T., "Cryptographically Generated Addresses (CGA)", [RFC3972] Aura, T., "Cryptographically Generated Addresses (CGA)",
RFC 3972, March 2005. RFC 3972, March 2005.
[RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing
Architecture", RFC 4291, February 2006.
Appendix A. Context Forking Appendix A. Context Forking
In this section, an issue concerning context forking and its relation In this section, an issue concerning context forking and its relation
to the multihoming shim API are discussed. to the multihoming shim API are discussed.
SHIM6 supports a notion of context forking. A peer may decide to SHIM6 supports a notion of context forking. A peer may decide to
fork a context for certain reason (e.g. upper layer protocol prefers fork a context for certain reason (e.g. upper layer protocol prefers
to use different locator pair than the one defined in available to use different locator pair than the one defined in available
context). The procedure of forking context is done similar to the context). The procedure of forking context is done similar to the
normal context establishment, performing the 4-way message exchange. normal context establishment, performing the 4-way message exchange.
skipping to change at page 36, line 5 skipping to change at page 36, line 17
flow since the system maintains an association between the forked flow since the system maintains an association between the forked
context and the socket owned by the application that has requested context and the socket owned by the application that has requested
the context forking. How this association is maintained is the context forking. How this association is maintained is
implementation specific issue. However, on the responder side, there implementation specific issue. However, on the responder side, there
is a question on how the outbound packet can be multiplexed by the is a question on how the outbound packet can be multiplexed by the
shim layer. Since there are more than one SHIM6 contexts that match shim layer. Since there are more than one SHIM6 contexts that match
with the ULID pair of the packet flow. There is a need to with the ULID pair of the packet flow. There is a need to
differentiate packet flows not only by the ULID pairs but some other differentiate packet flows not only by the ULID pairs but some other
information and associate a given packet flow with specific context. information and associate a given packet flow with specific context.
Figure 26 gives an example of a scenario where two communicating Figure 7 gives an example of a scenario where two communicating peers
peers fork a context. Initially, there has been a single transaction fork a context. Initially, there has been a single transaction
between the peers, by the application 1 (App1). Accordingly, another between the peers, by the application 1 (App1). Accordingly, another
transaction is started, by application 2 (App2). Both of the transaction is started, by application 2 (App2). Both of the
transactions are made based the same ULID pair. The first context transactions are made based the same ULID pair. The first context
pair (Ctx1) is established for the transaction of App1. Given the pair (Ctx1) is established for the transaction of App1. Given the
requests from App2, the shim layer on Peer 1 decides to fork a requests from App2, the shim layer on Peer 1 decides to fork a
context. Accordingly, a forked context (Ctx2) is established between context. Accordingly, a forked context (Ctx2) is established between
the peers, which should be exclusively applied to the transaction of the peers, which should be exclusively applied to the transaction of
App2. Ideally, multiplexing and demultiplexing of packet flows that App2. Ideally, multiplexing and demultiplexing of packet flows that
relate to App1 and App2 should be done as illustrated in Figure 26. relate to App1 and App2 should be done as illustrated in Figure 7.
However, as mentioned earlier, on the responder side, there is a However, as mentioned earlier, the responder needs to multiplex
problem with multiplexing the outbound packet flows of App1 and App2. outbound flows of App1 and App2 somehow. Note that if a context
forking occurs on the initiator side, a context forking needs to
occur also on the responder side.
Peer 1 Peer 2 Peer 1 Peer 2
(initiator) (responder) (initiator) (responder)
+----+ +----+ +----+ +----+ +----+ +----+ +----+ +----+
|App1| |App2| |App1| |App2| |App1| |App2| |App1| |App2|
+----+ +----+ +----+ +----+ +----+ +----+ +----+ +----+
|^ |^ ^| ^| |^ |^ ^| ^|
v| v| |v |v v| v| |v |v
-----S1-------------S2----- -----S1-------------S2----- -----S1-------------S2----- -----S1-------------S2-----
skipping to change at page 36, line 45 skipping to change at page 37, line 31
|^ |^ ^| ^| |^ |^ ^| ^|
|| || || || || || || ||
|| || || || || || || ||
\..............||........................../| || \..............||........................../| ||
\.............||.........................../ || \.............||.........................../ ||
|| || || ||
\|........................................./| \|........................................./|
\........................................../ \........................................../
Figure 26: context forking Figure 7: context forking
To overcome the problem mentioned above, there are some solutions. To overcome the problem mentioned above, there are some solutions.
One viable approach is to let the system implicitly maintain an One viable approach is to let the system implicitly maintain an
association between the socket and the associated context by keeping association between the socket and the associated context by keeping
the record of inbound packet processing. That is, the system stores the record of inbound packet processing. That is, the system stores
the information about the context on which the inbound packet flow the information about the context on which the inbound packet flow
was demultiplexed. The information comprises the ULID pair and FII was demultiplexed. The information comprises the ULID pair and FII
of the context and is stored in the socket instance. Later, the of the context and is stored in the socket instance. Later, the
system can use the information to identify the associated context in system can use the information to identify the associated context in
skipping to change at page 39, line 44 skipping to change at line 1772
attempt made to obtain a general license or permission for the use of attempt made to obtain a general license or permission for the use of
such proprietary rights by implementers or users of this such proprietary rights by implementers or users of this
specification can be obtained from the IETF on-line IPR repository at specification can be obtained from the IETF on-line IPR repository at
http://www.ietf.org/ipr. http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention any The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary copyrights, patents or patent applications, or other proprietary
rights that may cover technology that may be required to implement rights that may cover technology that may be required to implement
this standard. Please address the information to the IETF at this standard. Please address the information to the IETF at
ietf-ipr@ietf.org. ietf-ipr@ietf.org.
Acknowledgment
Funding for the RFC Editor function is provided by the IETF
Administrative Support Activity (IASA).
 End of changes. 129 change blocks. 
343 lines changed or deleted 365 lines changed or added

This html diff was produced by rfcdiff 1.35. The latest version is available from http://tools.ietf.org/tools/rfcdiff/