draft-ietf-dmm-ondemand-mobility-15.txt | draft-ietf-dmm-ondemand-mobility-16.txt | |||
---|---|---|---|---|
DMM Working Group A. Yegin | DMM Working Group A. Yegin | |||
Internet-Draft Actility | Internet-Draft Actility | |||
Intended status: Informational D. Moses | Intended status: Informational D. Moses | |||
Expires: January 27, 2019 Intel | Expires: August 12, 2019 Intel | |||
K. Kweon | K. Kweon | |||
J. Lee | J. Lee | |||
J. Park | J. Park | |||
Samsung | Samsung | |||
S. Jeon | S. Jeon | |||
Sungkyunkwan University | Sungkyunkwan University | |||
July 26, 2018 | February 8, 2019 | |||
On Demand Mobility Management | On Demand Mobility Management | |||
draft-ietf-dmm-ondemand-mobility-15 | draft-ietf-dmm-ondemand-mobility-16 | |||
Abstract | Abstract | |||
Applications differ with respect to whether they need session | Applications differ with respect to whether they need session | |||
continuity and/or IP address reachability. The network providing the | continuity and/or IP address reachability. The network providing the | |||
same type of service to any mobile host and any application running | same type of service to any mobile host and any application running | |||
on the host yields inefficiencies. This document describes a | on the host yields inefficiencies, as described in section 4 of | |||
solution for taking the application needs into account by selectively | [RFC7333]. This document defines a new concep of enabling | |||
providing session continuity and IP address reachability on a per- | applications to influence the network's mobility services (session | |||
socket basis. | continuity and/or IP address reachability) on a per-Socket basis, and | |||
suggests extensions to the networking stack's API to accomodate this | ||||
concept. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
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." | |||
This Internet-Draft will expire on January 27, 2019. | This Internet-Draft will expire on August 12, 2019. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2019 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Notational Conventions . . . . . . . . . . . . . . . . . . . 4 | 2. Notational Conventions . . . . . . . . . . . . . . . . . . . 4 | |||
3. Solution . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Solution . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3.1. Types of IP Addresses . . . . . . . . . . . . . . . . . . 4 | 3.1. High-level Description . . . . . . . . . . . . . . . . . 4 | |||
3.2. Granularity of Selection . . . . . . . . . . . . . . . . 6 | 3.2. Types of IP Addresses . . . . . . . . . . . . . . . . . . 5 | |||
3.3. On Demand Nature . . . . . . . . . . . . . . . . . . . . 6 | 3.3. Granularity of Selection . . . . . . . . . . . . . . . . 7 | |||
3.4. Conveying the Desired Address Type . . . . . . . . . . . 7 | 3.4. On Demand Nature . . . . . . . . . . . . . . . . . . . . 7 | |||
4. Usage example . . . . . . . . . . . . . . . . . . . . . . . . 8 | 3.5. Conveying the Desired Address Type . . . . . . . . . . . 8 | |||
4.1. Pseudo-code example . . . . . . . . . . . . . . . . . . . 8 | 4. Usage example . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
4.2. Message Flow example . . . . . . . . . . . . . . . . . . 10 | 4.1. Pseudo-code example . . . . . . . . . . . . . . . . . . . 9 | |||
5. Backwards Compatibility Considerations . . . . . . . . . . . 11 | 4.2. Message Flow example . . . . . . . . . . . . . . . . . . 11 | |||
5.1. Applications . . . . . . . . . . . . . . . . . . . . . . 11 | 5. Backwards Compatibility Considerations . . . . . . . . . . . 12 | |||
5.2. IP Stack in the Mobile Host . . . . . . . . . . . . . . . 12 | 5.1. Applications . . . . . . . . . . . . . . . . . . . . . . 12 | |||
5.3. Network Infrastructure . . . . . . . . . . . . . . . . . 12 | 5.2. IP Stack in the Mobile Host . . . . . . . . . . . . . . . 13 | |||
5.4. Merging this work with RFC5014 . . . . . . . . . . . . . 12 | 5.3. Network Infrastructure . . . . . . . . . . . . . . . . . 13 | |||
6. Summary of New Definitions . . . . . . . . . . . . . . . . . 13 | 5.4. Merging this work with RFC5014 . . . . . . . . . . . . . 13 | |||
6.1. New APIs . . . . . . . . . . . . . . . . . . . . . . . . 13 | 6. Summary of New Definitions . . . . . . . . . . . . . . . . . 14 | |||
6.2. New Flags . . . . . . . . . . . . . . . . . . . . . . . . 13 | 6.1. New APIs . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 14 | 6.2. New Flags . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 15 | |||
9. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 14 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15 | |||
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 14 | 9. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 15 | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 15 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 15 | 11.1. Normative References . . . . . . . . . . . . . . . . . . 16 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 16 | 11.2. Informative References . . . . . . . . . . . . . . . . . 16 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 17 | ||||
1. Introduction | 1. Introduction | |||
In the context of Mobile IP [RFC5563][RFC6275][RFC5213][RFC5944], the | In the context of Mobile IP [RFC5563][RFC6275][RFC5213][RFC5944], the | |||
following two attributes are defined for IP service provided to | following two attributes are defined for IP service provided to | |||
mobile hosts: | mobile hosts: | |||
Session continuity: The ability to maintain an ongoing transport | - Session Continuity | |||
interaction by keeping the same local end-point IP address throughout | ||||
the life-time of the IP socket despite the mobile host changing its | ||||
point of attachment within the IP network topology. The IP address | ||||
of the host may change after closing the IP socket and before opening | ||||
a new one, but that does not jeopardize the ability of applications | ||||
using these IP sockets to work flawlessly. Session continuity is | ||||
essential for mobile hosts to maintain ongoing flows without any | ||||
interruption. | ||||
IP address reachability: The ability to maintain the same IP address | The ability to maintain an ongoing transport interaction by keeping | |||
for an extended period of time. The IP address stays the same across | the same local end-point IP address throughout the life-time of the | |||
independent sessions, and even in the absence of any session. The IP | IP socket despite the mobile host changing its point of attachment | |||
address may be published in a long-term registry (e.g., DNS), and is | within the IP network topology. The IP address of the host may | |||
made available for serving incoming (e.g., TCP) connections. IP | change after closing the IP socket and before opening a new one, but | |||
address reachability is essential for mobile hosts to use specific/ | that does not jeopardize the ability of applications using these IP | |||
published IP addresses. | sockets to work flawlessly. Session continuity is essential for | |||
mobile hosts to maintain ongoing flows without any interruption. | ||||
- IP Address Reachability | ||||
The ability to maintain the same IP address for an extended period of | ||||
time. The IP address stays the same across independent sessions, and | ||||
even in the absence of any session. The IP address may be published | ||||
in a long-term registry (e.g., DNS), and is made available for | ||||
serving incoming (e.g., TCP) connections. IP address reachability is | ||||
essential for mobile hosts to use specific/published IP addresses. | ||||
Mobile IP is designed to provide both session continuity and IP | Mobile IP is designed to provide both session continuity and IP | |||
address reachability to mobile hosts. Architectures utilizing these | address reachability to mobile hosts. Architectures utilizing these | |||
protocols (e.g., 3GPP, 3GPP2, WIMAX) ensure that any mobile host | protocols (e.g., 3GPP, 3GPP2, WIMAX) ensure that any mobile host | |||
attached to the compliant networks can enjoy these benefits. Any | attached to the compliant networks can enjoy these benefits. Any | |||
application running on these mobile hosts is subjected to the same | application running on these mobile hosts is subjected to the same | |||
treatment with respect to session continuity and IP address | treatment with respect to session continuity and IP address | |||
reachability. | reachability. | |||
It should be noted that in reality not every application may need | In reality not every application may need these benefits. IP address | |||
these benefits. IP address reachability is required for applications | reachability is required for applications running as servers (e.g., a | |||
running as servers (e.g., a web server running on the mobile host). | web server running on the mobile host). But, a typical client | |||
But, a typical client application (e.g., web browser) does not | application (e.g., web browser) does not necessarily require IP | |||
necessarily require IP address reachability. Similarly, session | address reachability. Similarly, session continuity is not required | |||
continuity is not required for all types of applications either. | for all types of applications either. Applications performing brief | |||
Applications performing brief communication (e.g., ping) can survive | communication (e.g., text messaging) can survive without having | |||
without having session continuity support. | session continuity support. | |||
Achieving session continuity and IP address reachability with Mobile | Achieving session continuity and IP address reachability with Mobile | |||
IP incurs some cost. Mobile IP protocol forces the mobile host's IP | IP incurs some cost. Mobile IP protocol forces the mobile host's IP | |||
traffic to traverse a centrally-located router (Home Agent, HA), | traffic to traverse a centrally-located router (Home Agent, HA), | |||
which incurs additional transmission latency and use of additional | which incurs additional transmission latency and use of additional | |||
network resources, adds to the network CAPEX and OPEX, and decreases | network resources, adds to the network CAPEX and OPEX, and decreases | |||
the reliability of the network due to the introduction of a single | the reliability of the network due to the introduction of a single | |||
point of failure [RFC7333]. Therefore, session continuity and IP | point of failure [RFC7333]. Therefore, session continuity and IP | |||
address reachability SHOULD be provided only when necessary. | address reachability SHOULD be provided only when necessary. | |||
skipping to change at page 4, line 11 ¶ | skipping to change at page 4, line 22 ¶ | |||
subject to the same issues that arise with the use of Mobile IP since | subject to the same issues that arise with the use of Mobile IP since | |||
they can utilize the most direct data path between the end-points. | they can utilize the most direct data path between the end-points. | |||
But, if Mobile IP is being applied to the mobile host, the higher- | But, if Mobile IP is being applied to the mobile host, the higher- | |||
layer protocols are rendered useless because their operation is | layer protocols are rendered useless because their operation is | |||
inhibited by Mobile IP. Since Mobile IP ensures that the IP address | inhibited by Mobile IP. Since Mobile IP ensures that the IP address | |||
of the mobile host remains fixed (despite the location and movement | of the mobile host remains fixed (despite the location and movement | |||
of the mobile host), the higher-layer protocols never detect the IP- | of the mobile host), the higher-layer protocols never detect the IP- | |||
layer change and never engage in mobility management. | layer change and never engage in mobility management. | |||
This document proposes a solution for applications running on mobile | This document proposes a solution for applications running on mobile | |||
hosts to indicate whether they need session continuity or IP address | hosts to indicate when establishing the network connection ('on | |||
demand') whether they need session continuity or IP address | ||||
reachability. The network protocol stack on the mobile host, in | reachability. The network protocol stack on the mobile host, in | |||
conjunction with the network infrastructure, provides the required | conjunction with the network infrastructure, provides the required | |||
type of service. It is for the benefit of both the users and the | type of service. It is for the benefit of both the users and the | |||
network operators not to engage an extra level of service unless it | network operators not to engage an extra level of service unless it | |||
is absolutely necessary. It is expected that applications and | is absolutely necessary. It is expected that applications and | |||
networks compliant with this specification will utilize this solution | networks compliant with this specification will utilize this solution | |||
to use network resources more efficiently. | to use network resources more efficiently. | |||
2. Notational Conventions | 2. Notational Conventions | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
document are to be interpreted as described in [RFC2119]. | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
14 , [RFC2119] [RFC8174] when, they appear in all capitals, as shown | ||||
here. | ||||
3. Solution | 3. Solution | |||
3.1. Types of IP Addresses | 3.1. High-level Description | |||
Enabling applications to indicate their mobility service requirements | ||||
e.g. session continuity and/or IP address reachability, comprises the | ||||
following steps: | ||||
- The application indicates to the network stack (local to the mobile | ||||
host) the desired mobility service. | ||||
- The network stack assigns a source IP address based on an IP prefix | ||||
with the desired services that was previously provided by the | ||||
network. If such an IP prefix is not available, the network stack | ||||
performs the additional steps below. | ||||
- The network stack sends a request to the network for a new source | ||||
IP prefix that is associated with the desired mobility service. | ||||
- The network responds with the suitable allocated source IP prefix | ||||
(or responds with a failure indication). | ||||
- If the suitable source IP prefix was allocates, the network stack | ||||
constructs a source IP address and provides it to the application. | ||||
This document specifies the new address types (associated with | ||||
mobility services) and details the interaction between the | ||||
applications and the network stack steps. It uses the Socket | ||||
interface as an example for an API between applications and the | ||||
network stack. Other steps are outside the scope of this document. | ||||
3.2. Types of IP Addresses | ||||
Four types of IP addresses are defined with respect to mobility | Four types of IP addresses are defined with respect to mobility | |||
management. | management. | |||
- Fixed IP Address | - Fixed IP Address | |||
A Fixed IP address is an address with a guarantee to be valid for a | A Fixed IP address is an address with a guarantee to be valid for a | |||
very long time, regardless of whether it is being used in any packet | very long time, regardless of whether it is being used in any packet | |||
to/from the mobile host, or whether or not the mobile host is | to/from the mobile host, or whether or not the mobile host is | |||
connected to the network, or whether it moves from one point-of- | connected to the network, or whether it moves from one point-of- | |||
skipping to change at page 6, line 5 ¶ | skipping to change at page 7, line 5 ¶ | |||
Applications with very short sessions, such as DNS clients and | Applications with very short sessions, such as DNS clients and | |||
instant messengers, can utilize Non-persistent IP Addresses. Even | instant messengers, can utilize Non-persistent IP Addresses. Even | |||
though they could very well use Fixed or Session-lasting IP | though they could very well use Fixed or Session-lasting IP | |||
Addresses, the transmission latency would be minimized when a Non- | Addresses, the transmission latency would be minimized when a Non- | |||
persistent IP Addresses are used. | persistent IP Addresses are used. | |||
Applications that can tolerate a short interruption in connectivity | Applications that can tolerate a short interruption in connectivity | |||
can use the Graceful-replacement IP addresses. For example, a | can use the Graceful-replacement IP addresses. For example, a | |||
streaming client that has buffering capabilities. | streaming client that has buffering capabilities. | |||
3.2. Granularity of Selection | 3.3. Granularity of Selection | |||
IP address type selection is made on a per-socket granularity. | IP address type selection is made on a per-socket granularity. | |||
Different parts of the same application may have different needs. | Different parts of the same application may have different needs. | |||
For example, the control-plane of an application may require a Fixed | For example, the control-plane of an application may require a Fixed | |||
IP Address in order to stay reachable, whereas the data-plane of the | IP Address in order to stay reachable, whereas the data-plane of the | |||
same application may be satisfied with a Session-lasting IP Address. | same application may be satisfied with a Session-lasting IP Address. | |||
3.3. On Demand Nature | 3.4. On Demand Nature | |||
At any point in time, a mobile host may have a combination of IP | At any point in time, a mobile host may have a combination of IP | |||
addresses configured. Zero or more Non-persistent, zero or more | addresses configured. Zero or more Fixed, zero or more Session- | |||
Session-lasting, zero or more Fixed and zero or more Graceful- | lasting, zero or more Non-persistent and zero or more Graceful- | |||
Replacement IP addresses may be configured by the IP stack of the | Replacement IP addresses may be configured by the IP stack of the | |||
host. The combination may be as a result of the host policy, | host. The combination may be as a result of the host policy, | |||
application demand, or a mix of the two. | application demand, or a mix of the two. | |||
When an application requires a specific type of IP address and such | When an application requires a specific type of IP address and such | |||
an address is not already configured on the host, the IP stack SHALL | an address is not already configured on the host, the IP stack SHALL | |||
attempt to configure one. For example, a host may not always have a | attempt to configure one. For example, a host may not always have a | |||
Session-lasting IP address available. When an application requests | Session-lasting IP address available. When an application requests | |||
one, the IP stack SHALL make an attempt to configure one by issuing a | one, the IP stack SHALL make an attempt to configure one by issuing a | |||
request to the network (see Section 3.4 below for more details). If | request to the network (see Section 3.5 below for more details). If | |||
the operation fails, the IP stack SHALL fail the associated socket | the operation fails, the IP stack SHALL fail the associated socket | |||
request and return an error. If successful, a Session-lasting IP | request and return an error. If successful, a Session-lasting IP | |||
Address gets configured on the mobile host. If another socket | Address gets configured on the mobile host. If another socket | |||
requests a Session-lasting IP address at a later time, the same IP | requests a Session-lasting IP address at a later time, the same IP | |||
address may be served to that socket as well. When the last socket | address may be served to that socket as well. When the last socket | |||
using the same configured IP address is closed, the IP address may be | using the same configured IP address is closed, the IP address may be | |||
released or kept for future applications that may be launched and | released or kept for future applications that may be launched and | |||
require a Session-lasting IP address. | require a Session-lasting IP address. | |||
In some cases it might be preferable for the mobile host to request a | In some cases it might be preferable for the mobile host to request a | |||
new Session-lasting IP address for a new opening of an IP socket | new Session-lasting IP address for a new opening of an IP socket | |||
(even though one was already assigned to the mobile host by the | (even though one was already assigned to the mobile host by the | |||
network and might be in use in a different, already active IP | network and might be in use in a different, already active IP | |||
sockets). It is outside the scope of this specification to define | sockets). It is outside the scope of this specification to define | |||
criteria for choosing to use available addresses or choosing to | criteria for choosing to use available addresses or choosing to | |||
request new ones. It supports both alternatives (and any | request new ones. It supports both alternatives (and any | |||
combination). | combination). | |||
It is outside the scope of this specification to define how the host | It is outside the scope of this specification to define how the host | |||
requests a specific type of prefix and how the network indicates the | requests a specific type of prefix and how the network indicates the | |||
type of prefix in its advertisement or in its reply to a request). | type of prefix in its advertisement or in its reply to a request. | |||
The following are matters of policy, which may be dictated by the | The following are matters of policy, which may be dictated by the | |||
host itself, the network operator, or the system architecture | host itself, the network operator, or the system architecture | |||
standard: | standard: | |||
- The initial set of IP addresses configured on the host at boot | - The initial set of IP addresses configured on the host at boot | |||
time. | time. | |||
- Permission to grant various types of IP addresses to a requesting | - Permission to grant various types of IP addresses to a requesting | |||
application. | application. | |||
- Determination of a default address type when an application does | - Determination of a default address type when an application does | |||
not make any explicit indication, whether it already supports the | not make any explicit indication, whether it already supports the | |||
required API or it is just a legacy application. | required API or it is just a legacy application. | |||
3.4. Conveying the Desired Address Type | 3.5. Conveying the Desired Address Type | |||
[RFC5014] introduced the ability of applications to influence the | [RFC5014] introduced the ability of applications to influence the | |||
source address selection with the IPV6_ADDR_PREFERENCE option at the | source address selection with the IPV6_ADDR_PREFERENCE option at the | |||
IPPROTO_IPV6 level. This option is used with setsockopt() and | IPPROTO_IPV6 level. This option is used with setsockopt() and | |||
getsockopt() calls to set/get address selection preferences. | getsockopt() calls to set/get address selection preferences. | |||
Extending this further by adding more flags does not work when a | Extending this further by adding more flags does not work when a | |||
request for an address of a certain type results in requiring the IP | request for an address of a certain type results in requiring the IP | |||
stack to wait for the network to provide the desired source IP prefix | stack to wait for the network to provide the desired source IP prefix | |||
and hence causing the setsockopt() call to block until the prefix is | and hence causing the setsockopt() call to block until the prefix is | |||
allocated (or an error indication from the network is received). | allocated (or an error indication from the network is received). | |||
Alternatively a new socket API is defined - getsc() which allows | Alternatively a new socket API is defined - setsc() which allows | |||
applications to express their desired type of session continuity | applications to express their desired type of session continuity | |||
service. The new getsc() API will return an IPv6 address that is | service. The new setsc() API will return an IPv6 address that is | |||
associated with the desired session continuity service and with | associated with the desired session continuity service and with | |||
status information indicating whether or not the desired service was | status information indicating whether or not the desired service was | |||
provided. | provided. | |||
An application that wishes to secure a desired service will call | An application that wishes to secure a desired service will call | |||
getsc() with the service type definition and a place to contain the | setsc() with the service type definition and a place to contain the | |||
provided IP address, and call bind() to associate that IP address | provided IP address, and call bind() to associate that IP address | |||
with the socket (See pseudo-code example in Section 4 below). | with the socket (See pseudo-code example in Section 4 below). | |||
When the IP stack is required to use a source IP address of a | When the IP stack is required to use a source IP address of a | |||
specified type, it can use an existing address, or request a new IP | specified type, it can use an existing address, or request a new IP | |||
prefix (of the same type) from the network and create a new one. If | prefix (of the same type) from the network and create a new one. If | |||
the host does not already have an IPv6 prefix of that specific type, | the host does not already have an IPv6 prefix of that specific type, | |||
it MUST request one from the network. | it MUST request one from the network. | |||
Using an existing address from an existing prefix is faster but might | Using an existing address from an existing prefix is faster but might | |||
skipping to change at page 8, line 25 ¶ | skipping to change at page 9, line 25 ¶ | |||
The following example shows pseudo-code for creating a Stream socket | The following example shows pseudo-code for creating a Stream socket | |||
(TCP) with a Session-Lasting source IP address: | (TCP) with a Session-Lasting source IP address: | |||
#include <sys/socket.h> | #include <sys/socket.h> | |||
#include <netinnet/in.h> | #include <netinnet/in.h> | |||
// Socket information | // Socket information | |||
int s ; // socket id | int s ; // socket id | |||
// Source information (for secsc() and bind()) | // Source information (for setsc() and bind()) | |||
sockaddr_in6 sourceInfo // my address and port for bind() | sockaddr_in6 sourceInfo // my address and port for bind() | |||
in6_addr sourceAddress // will contain the provisioned | in6_addr sourceAddress // will contain the provisioned | |||
// source IP address | // source IP address | |||
uint8_t sc_type = IPV6_REQUIRE_SESSION_LASTING_IP ; | uint8_t sc_type = IPV6_REQUIRE_SESSION_LASTING_IP ; | |||
// For requesting a Session-Lasting | // For requesting a Session-Lasting | |||
// source IP address | // source IP address | |||
// Destination information (for connect()) | // Destination information (for connect()) | |||
sockaddr_in6 serverInfo ; // server info for connect() | sockaddr_in6 serverInfo ; // server info for connect() | |||
skipping to change at page 10, line 8 ¶ | skipping to change at page 11, line 8 ¶ | |||
// socket... | // socket... | |||
} // if setsc() failed | } // if setsc() failed | |||
} // if socket was created successfully | } // if socket was created successfully | |||
// The rest of the application's code | // The rest of the application's code | |||
// ... | // ... | |||
4.2. Message Flow example | 4.2. Message Flow example | |||
The following message flow illustrates a possible interaction for | The following message flow illustrates a possible interaction for | |||
achieving OnDemand functionality. It is an example of one scenario | achieving On-Demand functionality. It is an example of one scenario | |||
and should not be regarded as the only scenario or the preferred one. | and should not be regarded as the only scenario or the preferred one. | |||
This flow describes the interaction between the following entities: | This flow describes the interaction between the following entities: | |||
- Applications requiring different types of OnDemand service. | - Applications requiring different types of On-Demand service. | |||
- The mobile host's IP stack. | - The mobile host's IP stack. | |||
- The network infrastructure providing the services. | - The network infrastructure providing the services. | |||
In this example, the network infrastructure provides 2 IPv6 prefixes | In this example, the network infrastructure provides 2 IPv6 prefixes | |||
upon attachment of the mobile host to the network: A Session-lasting | upon attachment of the mobile host to the network: A Session-lasting | |||
IPv6 prefix and a Non-persistent IPv6 prefix. Whenever the mobile | IPv6 prefix and a Non-persistent IPv6 prefix. Whenever the mobile | |||
host moves to a different point-of-attachment, the network | host moves to a different point-of-attachment, the network | |||
infrastructure provides a new Non-persistent IPv6 address. | infrastructure provides a new Non-persistent IPv6 address. | |||
skipping to change at page 10, line 38 ¶ | skipping to change at page 11, line 38 ¶ | |||
Whenever an application opens an IP socket and requests a specific | Whenever an application opens an IP socket and requests a specific | |||
IPv6 address type, the IP stack will provide one from its available | IPv6 address type, the IP stack will provide one from its available | |||
IPv6 prefixes or return an error message if the request cannot be | IPv6 prefixes or return an error message if the request cannot be | |||
fulfilled. | fulfilled. | |||
Message Flow: | Message Flow: | |||
- The mobile device attaches to the network. | - The mobile device attaches to the network. | |||
- The Network provides two IPv6 prefixes: PREFsl1 - a Session-lasting | - The Network provides two IPv6 prefixes: PREFsl1 - a Session-lasting | |||
IPv6 prefix and PREFnp1 - a Non-persistent IP v6 prefix. | IPv6 prefix and PREFnp1 - a Non-persistent IPv6 prefix. | |||
- An application on the mobile host is launched. It opens an IP | - An application on the mobile host is launched. It opens an IP | |||
socket and requests a Non-persistent IPv6 address. | socket and requests a Non-persistent IPv6 address. | |||
- The IP stack provides IPnp1 which is generated from PREFnp1. | - The IP stack provides IPnp1 which is generated from PREFnp1. | |||
- Another application is launched, requesting a Non-persistent IPv6 | - Another application is launched, requesting a Non-persistent IPv6 | |||
address. | address. | |||
- The IP stack provides IPnp1 again. | - The IP stack provides IPnp1 again. | |||
skipping to change at page 11, line 43 ¶ | skipping to change at page 12, line 43 ¶ | |||
of entities: | of entities: | |||
- The Applications on the mobile host | - The Applications on the mobile host | |||
- The IP stack in the mobile host | - The IP stack in the mobile host | |||
- The network infrastructure | - The network infrastructure | |||
5.1. Applications | 5.1. Applications | |||
Legacy applications that do not support the OnDemand functionality | Legacy applications that do not support the On-Demand functionality | |||
will use the legacy API and will not be able to take advantage of the | will use the legacy API and will not be able to take advantage of the | |||
On-Demand Mobility feature. | On-Demand Mobility feature. | |||
Applications using the new OnDemand functionality MUST be aware that | Applications using the new On-Demand functionality MUST be aware that | |||
they may be executed in legacy environments that do not support it. | they may be executed in legacy environments that do not support it. | |||
Such environments may include a legacy IP stack on the mobile host, | Such environments may include a legacy IP stack on the mobile host, | |||
legacy network infrastructure, or both. In either case, the API will | legacy network infrastructure, or both. In either case, the API will | |||
return an error code and the invoking applications may just give up | return an error code and the invoking applications may just give up | |||
and use legacy calls. | and use legacy calls. | |||
5.2. IP Stack in the Mobile Host | 5.2. IP Stack in the Mobile Host | |||
New IP stacks MUST continue to support all legacy operations. If an | New IP stacks MUST continue to support all legacy operations. If an | |||
application does not use On-Demand functionality, the IP stack MUST | application does not use On-Demand functionality, the IP stack MUST | |||
skipping to change at page 12, line 38 ¶ | skipping to change at page 13, line 38 ¶ | |||
5.4. Merging this work with RFC5014 | 5.4. Merging this work with RFC5014 | |||
[RFC5014] defines new flags that may be used with setsockopt() to | [RFC5014] defines new flags that may be used with setsockopt() to | |||
influence source IP address selection for a socket. The list of | influence source IP address selection for a socket. The list of | |||
flags include: source home address, care-of address, temporary | flags include: source home address, care-of address, temporary | |||
address, public address CGA (Cryptographically Created Address) and | address, public address CGA (Cryptographically Created Address) and | |||
non-CGA. When applications require session continuity service and | non-CGA. When applications require session continuity service and | |||
use setsc() and bind(), they SHOULD NOT set the flags specified in | use setsc() and bind(), they SHOULD NOT set the flags specified in | |||
[RFC5014]. | [RFC5014]. | |||
However, if an application sets a specific option using setsockopt() | However, if an application erroneously performs a combination of (1) | |||
with one of the flags specified in [RFC5014] and also selects a | Use setsockopt() to set a specific option (using one of the flags | |||
source IP address using setsc() and bind() the IP address that was | specified in [RFC5014]) and (2) Selects a source IP address type | |||
generated by setsc() and bound using bind() will be the one used by | using setsc() and bind(), the IP stack will fulfill the request | |||
traffic generated using that socket and options set by setsockopt() | specified by (2) and ignore the flags set by (1). | |||
will be ignored. | ||||
If bind() was not invoked after setsc() by the application, the IP | If bind() was not invoked after setsc() by the application, the IP | |||
address generated by setsc() will not be used and traffic generated | address generated by setsc() will not be used and traffic generated | |||
by the socket will use a source IP address that complies with the | by the socket will use a source IP address that complies with the | |||
options selected by setsockopt(). | options selected by setsockopt(). | |||
6. Summary of New Definitions | 6. Summary of New Definitions | |||
6.1. New APIs | 6.1. New APIs | |||
skipping to change at page 15, line 16 ¶ | skipping to change at page 16, line 16 ¶ | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC5014] Nordmark, E., Chakrabarti, S., and J. Laganier, "IPv6 | [RFC5014] Nordmark, E., Chakrabarti, S., and J. Laganier, "IPv6 | |||
Socket API for Source Address Selection", RFC 5014, | Socket API for Source Address Selection", RFC 5014, | |||
DOI 10.17487/RFC5014, September 2007, | DOI 10.17487/RFC5014, September 2007, | |||
<https://www.rfc-editor.org/info/rfc5014>. | <https://www.rfc-editor.org/info/rfc5014>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | ||||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | ||||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | ||||
11.2. Informative References | 11.2. Informative References | |||
[I-D.sijeon-dmm-use-cases-api-source] | [I-D.sijeon-dmm-use-cases-api-source] | |||
Jeon, S., Figueiredo, S., Kim, Y., and J. Kaippallimalil, | Jeon, S., Figueiredo, S., Kim, Y., and J. Kaippallimalil, | |||
"Use Cases and API Extension for Source IP Address | "Use Cases and API Extension for Source IP Address | |||
Selection", draft-sijeon-dmm-use-cases-api-source-07 (work | Selection", draft-sijeon-dmm-use-cases-api-source-07 (work | |||
in progress), September 2017. | in progress), September 2017. | |||
[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | |||
A., Peterson, J., Sparks, R., Handley, M., and E. | A., Peterson, J., Sparks, R., Handley, M., and E. | |||
End of changes. 31 change blocks. | ||||
83 lines changed or deleted | 123 lines changed or added | |||
This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |