<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [

  <!ENTITY rfc2119 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
  <!ENTITY rfc7665 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7665.xml">
  <!ENTITY I-D.bernardos-sfc-fog-ran SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.bernardos-sfc-fog-ran.xml">
  <!ENTITY I-D.bernardos-sfc-distributed-control SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.bernardos-sfc-distributed-control.xml">
]>

<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>

<rfc category="exp" docName="draft-bernardos-dmm-sfc-mobility-06"
     ipr="trust200902">
  <front>
      <title abbrev="SFC function mobility with MIPv6">
       SFC function mobility with Mobile IPv6
      </title>

    <!-- AUTHORS -->
    <author fullname="Carlos J. Bernardos"
            initials="CJ."
            surname="Bernardos">
      <organization abbrev="UC3M">
        Universidad Carlos III de Madrid
      </organization>
      <address>
        <postal>
          <street>Av. Universidad, 30</street>
          <city>Leganes, Madrid</city>
          <code>28911</code>
          <country>Spain</country>
        </postal>
        <phone>+34 91624 6236</phone>
        <email>cjbc@it.uc3m.es</email>
        <uri>http://www.it.uc3m.es/cjbc/</uri>
      </address>
    </author>

    <author fullname="Alain Mourad"
            initials="A."
            surname="Mourad">
      <organization abbrev="InterDigital">
        InterDigital Europe
      </organization>
      <address>
        <email>Alain.Mourad@InterDigital.com</email>
        <uri>http://www.InterDigital.com/</uri>
      </address>
    </author>

    <area>Routing</area>

    <workgroup>SFC WG</workgroup>

    <abstract>

      <t>
Service function chaining (SFC) allows the instantiation of an ordered set of
service functions and subsequent "steering" of traffic through them. In order to
set up and maintain SFC instances, a control plane is required, which typically
is centralized. In certain environments, such as fog computing ones, such
centralized control might not be feasible, calling for distributed SFC control
solutions. This document specifies Mobile IPv6 extensions to enable function
migration in SFC.
      </t>

    </abstract>

  </front>

  <middle>

    <section anchor="sec:introduction" title="Introduction">

      <t>
Virtualization of functions provides operators with tools to deploy new
services much faster, as compared to the traditional use of monolithic and
tightly integrated dedicated machinery. As a natural next step, mobile network
operators need to re-think how to evolve their existing network infrastructures
and how to deploy new ones to address the challenges posed by the increasing
customers' demands, as well as by the huge competition among operators. All
these changes are triggering the need for a modification in the way operators
and infrastructure providers operate their networks, as they need to
significantly reduce the costs incurred in deploying a new service and operating
it. Some of the mechanisms that are being considered and already adopted by
operators include: sharing of network infrastructure to reduce costs,
virtualization of core servers running in data centers as a way of supporting
their load-aware elastic dimensioning, and dynamic energy policies to reduce the
monthly electricity bill. However, this has proved to be tough to put in
practice, and not enough. Indeed, it is not easy to deploy new mechanisms in a
running operational network due to the high dependency on proprietary (and
sometime obscure) protocols and interfaces, which are complex to manage and
often require configuring multiple devices in a decentralized way. 
      </t>

      <t>
Service Functions are widely deployed and essential in many networks. These
Service Functions provide a range of features such as security, WAN
acceleration, and server load balancing. Service Functions may be instantiated
at different points in the network infrastructure such as data center, the WAN,
the RAN, and even on mobile nodes.
      </t>

      <t>
Service functions (SFs), also referred to as VNFs, or just functions, are hosted
on compute, storage and networking resources. The hosting environment of a
function is called Service Function Provider or NFVI-PoP (using ETSI NFV
terminology).
      </t>

      <t>
Services are typically formed as a composition of SFs (VNFs), with each SF
providing a specific function of the whole service. Services also referred to as
Network Services (NS), according to ETSI terminology.
      </t>

      <t>
With the arrival of virtualization, the deployment model for service function is
evolving to one where the traffic is steered through the functions wherever they
are deployed (functions do not need to be deployed in the traffic path anymore).
For a given service, the abstracted view of the required service functions and
the order in which they are to be applied is called a Service Function Chain
(SFC). An SFC is instantiated through selection of specific service function
instances on specific network nodes to form a service graph: this is called a
Service Function Path (SFP). The service functions may be applied at any layer
within the network protocol stack (network layer, transport layer, application
layer, etc.).
      </t>

      <t>
The concept of fog computing has emerged driven by the Internet of Things (IoT)
due to the need of handling the data generated from the end-user devices. The
term fog is referred to any networked computational resource in the continuum
between things and cloud. A fog node may therefore be an infrastructure network
node such as an eNodeB or gNodeB, an edge server, a customer premises equipment
(CPE), or even a user equipment (UE) terminal node such as a laptop, a
smartphone, or a computing unit on-board a vehicle, robot or drone.
      </t>

      <t>
In fog computing, the functions composing an SFC are hosted on resources that
are inherently heterogeneous, volatile and mobile <xref
target="I-D.bernardos-sfc-fog-ran" />. This means that resources might appear
and disappear, and the connectivity characteristics between these resources may
also change dynamically. These scenarios call for distributed SFC control
solutions, where there are SFC pseudo controllers, enabling autonomous SFC
self-orchestration capabilities. The concept of SFC pseudo controller (P-CTRL)
is described in <xref target="I-D.bernardos-sfc-distributed-control" />, as well
different procedures for their discovery and initialization.
      </t>

      <t>
This document specifies Mobile IPv6 extensions to enable function migration in
SFC.
      </t>

    </section>

    <section anchor="sec:terminology" title="Terminology">

      <t>
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in <xref target="RFC2119" />.
      </t>

      <t>
The following terms used in this document are defined by the IETF in <xref
target="RFC7665" />:

        <list style="empty">

          <t>
Service Function (SF): a function that is responsible for specific treatment of
received packets (e.g., firewall, load balancer).
          </t>

          <t>
Service Function Chain (SFC): for a given service, the abstracted view of the
required service functions and the order in which they are to be applied. This
is somehow equivalent to the Network Function Forwarding Graph (NF-FG) at ETSI.
          </t>

          <t>
Service Function Forwarder (SFF): A service function forwarder is responsible
for forwarding traffic to one or more connected service functions according to
information carried in the SFC encapsulation, as well as handling traffic coming
back from the SF.
          </t>

          <t>
SFI: SF instance.
          </t>

          <t>
Service Function Path (SFP): the selection of specific service function
instances on specific network nodes to form a service graph through which an SFC
is instantiated.
          </t>

        </list>

      </t>

      <t>
The following terms are used in this document:

        <list style="empty">

          <t>
SFC Pseudo Controller (P-CTRL): logical entity <xref
target="I-D.bernardos-sfc-distributed-control" />, complementing the SFC
controller/orchestrator found in current architectures and deployments. It is
service specific, meaning that it is defined and meaningful in the context of a
given network service. Compared to existing SFC controllers/orchestrators, which
manage multiple SFCs instantiated over a common infrastructure, pseudo
controllers are constrained to service specific lifecycle management.
          </t>

          <t>
SFC Central Controller (C-CTRL): central control plane logical entity in charge
of configuring and managing the SFC components <xref target="RFC7665" />.
          </t>

        </list>

      </t>

    </section>

    <section anchor="sec:function_mobility" title="Function mobility signaling extending Mobile IPv6">

      <t>
This section describes Mobile IPv6 (MIPv6) extensions to perform function
migration/mobility. This is an example of NS lifecycle management operation: the
update of the location of a given function. We refer to this as function
mobility, though it might involve or not the actual migration of the function.
      </t>

<figure anchor="fig:sfc_mobility_signaling" title="SFC mobility signaling" >
<artwork><![CDATA[
+---------+  +----+  +---------+ +---------+ +----------+   +------+
| node A  |  | C  |  | node B  | | node D  | |   3GPP   |   | SFC  |
|P-CTRL F1|  | F3 |  |P-CTRL F2| |P-CTRL F3| |ctrl plane|   |C-CTRL|
+--+----+-+  +----+  +--+----+-+ +--+----+-+ +----------+   +------+
   |    |       |       |    |      |    |         |            |
   |  F1@A<->F2@B<->F3@D SFC network service       |            |
   |    |<-·-·-·-·-·-·-·-·-·>|<-·-·-·-·->|         |            |
   |    |       |       |    |      |    |         |            |
   |    |       |    Node B moves out of           |            |
   |    |       |   the coverage of node D         |            |
   |    |       |       |    |      |    |         |            |
   | 0. Service specific OAM monitoring  |         |            |
   |<-·>|<-·-·->|<-·-·-·-·-·>|      |    |         |            |
   |<-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·->|            |
   |    |       |       |    |      |    |         |            |
 P-CTRL@A detects D disconnection   |    |         |            |
and decides to place F3 at node C   |    |         |            |
   |    |       |       |    |      |    |         |            |
   | 1a. SPU[NS_ID,(F3,C)]   |      |    |         |            |
   |-·-·-·-·-·-·-·-·-·-·-·-·>|      |    |         |            |
   |          1b. SPA[NS_ID] |      |    |         |            |
   |<-·-·-·-·-·-·-·-·-·-·-·-·|      |    |         |            |
   | 1c. SPU[NS_ID,(F3,C),(F2,B),(F1,A)] |         |            |
   |-·-·-·-·-·->|       |    |      |    |         |            |
   | 1d. SPA[NS_ID]     |    |      |    |         |            |
   |<-·-·-·-·-·-|       |    |      |    |         |            |
   |    |       |       |    |      |    |         |            |
   | 2. Updated F1@A<->F2@B<->F3@C SFC network service          |
   |    |<-·-·-·-·-·-·-·-·-·>|      |    |         |            |
   |    |       |<-·-·-·-·-·>|      |    |         |            |
   |    |       |       |    |      |    |         |            |
   |  3a. SPU[NS_ID,(F3,C),(F2,B),(F1,A)]          |            |
   |-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·->|
   |    |       |       |    |      |    |       3b. SPA[NS_ID] |
   |<-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-|
   |  3c. SPU[NS_ID,(F3,C)]  |      |    |         |            |
   |-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·>|         |            |
   |    |       |       | 3d. SPA[NS_ID] |         |            |
   |<-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-|
   |    |       |       |    |      |    |         |            |
]]></artwork>
</figure>

      <t>
We next describe the signaling extensions with an example. For the sake of this
example we assume that the function which location is updated is already
available at the new target node (if not, it has to be previously migrated using
any of the solutions available in the state-of-the-art). The different steps are
described next:

            <list style="symbols" >

              <t>
(The network service F1--F2--F3 is already instantiated and running. The only
SFC P-CTRL active at this point is running at node A, and there is a candidate
one at node B.)
              </t>

              <t>
UE node B is moving out of the coverage of gNB node D.
              </t>

            </list>

            <list style="numbers" >

              <t>
This movement is detected by the active (designated) pseudo controller running
at node A, thanks to local (service specific OAM) monitoring.
              </t>

              <t>
The active pseudo controller sends mobility signaling to all affected nodes, in
this case node B (it has to update the network service path due to the F3
location update) and node C (as it starts being part of the SFC, hosting F3).
The signaling messages are new mobility messages: Service Path Update (SPU) and
Service Path Acknowledgement (SPA), which contain: (i) the identifier of the
network service (NS_ID), and (ii) the updated elements of the network service
path: (ID, updated location). The SPA acknowledges that the procedure has been
performed correctly.
              </t>

              <t>
The network service F1--F2--F3 is updated so it now runs at A, B and C.
              </t>

              <t>
Whenever connectivity with nodes D and the centralized SFC controller is back,
the pseudo controller also informs about the updated SFC path, sending SPU
messages, which are acknowledged with SPA messages.
              </t>

            </list>

      </t>

      <t>
Note that this is an example of NS lifecycle management (function mobility) by a
SFC pseudo controller, but that other operations are also possible, such as
(non-limiting examples): scaling up/down, scaling in/out, termination, etc.
      </t>

    </section>

    <section anchor="sec:mipv6_extensions" title="Mobile IPv6 extensions for SFC function mobility">

        <section anchor="sec:spu" title="Service Path Update">

          <t>
The Service Path Update (SPU) message is used by a CTRL to notify nodes in an
SFC (e.g., SFF) of an update of the service path.
          </t>

          <t>
The Service Path Update uses the MH Type value TBD. When this value is indicated
in the MH Type field, the format of the Message Data field in the Mobility
Header is as follows:
          </t>

<figure>
        <artwork><![CDATA[
   0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
                                +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                |          Sequence #           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|A|           Reserved          |           Lifetime            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                        Mobility Options                       .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

          <t>
Sequence #

            <list>

              <t>
A 16-bit unsigned integer used by the receiving node to sequence Binding Updates
and by the sending node to match a returned Service Path Acknowledgement with
this Service Path Update.
              </t>

            </list>

          </t>

          <t>
Acknowledge (A)

            <list>

              <t>
The Acknowledge (A) bit is set by the sending mobile node to request a Service
Path Acknowledgement be returned upon receipt of the Service Path Update.
              </t>

            </list>

          </t>

          <t>
Reserved

            <list>

              <t>
This field is unused for now. The value MUST be initialized to 0 by the sender
and MUST be ignored by the receiver.
              </t>

            </list>

          </t>

          <t>
Lifetime

            <list>

              <t>
16-bit unsigned integer. The number of time units remaining before the service
path MUST be considered expired. A value of zero indicates that the Service Path
MUST be deleted. A value of 0xFFFF indicates an infinite lifetime for the
Service Path. One time unit is 4 seconds.
              </t>

            </list>

          </t>

          <t>
Mobility Options

            <list>

              <t>
Variable-length field of such length that the complete Mobility Header is an
integer multiple of 8 octets long. This field contains zero or more TLV-encoded
mobility options. The receiver MUST ignore and skip any options that it does not
understand.
              </t>

              <t>
The following options are valid in a Service Path Update:

                <list>

                  <t>
Network Service ID.
                  </t>

                  <t>
SFC node.
                  </t>

                </list>

              </t>

            </list>

          </t>

        </section>

        <section anchor="sec:spa" title="Service Path Acknowledgement">

          <t>
The Service Path Acknowledgement (SPA) message is used by a CTRL to acknowledge
a received SPU.
          </t>

          <t>
The Service Path Acknowledge uses the MH Type value TBD. When this value is
indicated in the MH Type field, the format of the Message Data field in the
Mobility Header is as follows:
          </t>

<figure>
        <artwork><![CDATA[
   0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
                                +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                |          Sequence #           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Reserved           |           Lifetime            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                        Mobility Options                       .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

          <t>
Sequence #

            <list>

              <t>
A 16-bit unsigned integer used to match the returned Service Path
Acknowledgement with the Service Path Update.
              </t>

            </list>

          </t>

          <t>
Reserved

            <list>

              <t>
This field is unused for now. The value MUST be initialized to 0 by the sender
and MUST be ignored by the receiver.
              </t>

            </list>

          </t>

          <t>
Lifetime

            <list>

              <t>
16-bit unsigned integer. The number of time units remaining before the service
path MUST be considered expired. A value of zero indicates that the Service Path
MUST be deleted. A value of 0xFFFF indicates an infinite lifetime for the
Service Path. One time unit is 4 seconds.
              </t>

            </list>

          </t>

          <t>
Mobility Options

            <list>

              <t>
Variable-length field of such length that the complete Mobility Header is an
integer multiple of 8 octets long. This field contains zero or more TLV-encoded
mobility options. The receiver MUST ignore and skip any options that it does not
understand.
              </t>

              <t>
The following options are valid in a Service Path Acknowledgement:

                <list>

                  <t>
Network Service ID.
                  </t>

                </list>

              </t>

            </list>

          </t>

        </section>

        <section anchor="sec:new_mobility_options" title="New Mobility options">

          <section anchor="sec:ns_id" title="Network Service ID">

            <t>
The Network Service ID option has the following format:
            </t>

<figure>
        <artwork><![CDATA[
   0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
                                +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                |   Type = TBA  | Option Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Service Path Identifier (SPI)        | Service Index |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                      Network Service ID                       +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

            <t>
Option Type

              <list>

                <t>
TBA by IANA.
                </t>

              </list>

            </t>

            <t>
Option Length

              <list>

                <t>
8-bit unsigned integer. Length of the option, in octets, excluding the Option
Type and Option Length fields.
                </t>

              </list>

            </t>

            <t>
Service Path Identifier (SPI)

              <list>

                <t>
Uniquely identifies a Service Function Path (SFP). Participating nodes MUST use
this identifier for SFP selection. The initial Classifier MUST set the
appropriate SPI for a given classification result.
                </t>

              </list>

            </t>

            <t>
Service Index (SI)

              <list>

                <t>
Provides location within the SFP.
                </t>

              </list>

            </t>

            <t>
Network Service ID

              <list>

                <t>
Variable length field that identifies the network service.
                </t>

              </list>

            </t>

          </section>


          <section anchor="sec:sfc_node" title="SFC node">

            <t>
The SFC node option has the following format:
            </t>

<figure>
        <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
                                +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                |   Type = TBA  | Option Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Function ID Length       |        Node ID Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                         Function ID                           +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                           Node ID                             +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>

            <t>
Option Type

              <list>

                <t>
TBA by IANA.
                </t>

              </list>

            </t>

            <t>
Option Length

              <list>

                <t>
8-bit unsigned integer. Length of the option, in octets, excluding the Option
Type and Option Length fields.
                </t>

              </list>

            </t>

            <t>
Function ID Length

              <list>

                <t>
8-bit unsigned integer. Length of the Function ID field, in octets.
                </t>

              </list>

            </t>

            <t>
Node ID Length

              <list>

                <t>
8-bit unsigned integer. Length of the Node ID field, in octets.
                </t>

              </list>

            </t>

            <t>
Function ID

              <list>

                <t>
Variable length field that identifies the function.
                </t>

              </list>

            </t>

            <t>
Node ID

              <list>

                <t>
Variable length field that identifies the node.
                </t>

              </list>

            </t>

            <t>
There might be multiple SFC node options in a Service Function Update message,
following the options the same order of the SFC/NS.
            </t>

          </section>

        </section>

    </section>


    <section anchor="sec:iana" title="IANA Considerations">

      <t>
TBD.
      </t>

    </section>


    <section anchor="sec:security" title="Security Considerations">

      <t>
TBD.
      </t>

    </section>

    <section anchor="sec:acknowledgments" title="Acknowledgments">

      <t>
The work in this draft has been partially supported by the H2020 5Growth (Grant
856709) and 5G-DIVE projects (Grant 859881).
      </t>

    </section>

  </middle>

  <back>


    <references title="Normative References">
      &rfc2119;
      &I-D.bernardos-sfc-distributed-control;
    </references>


    <references title="Informative References">
      &rfc7665;
      &I-D.bernardos-sfc-fog-ran;

    </references>

  </back>

</rfc>
