DMM Working Group                                             M. Liebsch                                          S. Matsushima
Internet-Draft                                                       NEC                                                  SoftBank
Intended status: Standards Track                           S. Matsushima                                L. Bertz
Expires: September 22, 2016                                     SoftBank April 2, 2017                                            Sprint
                                                              M. Liebsch
                                                                     NEC
                                                           S. Gundavelli
                                                                   Cisco
                                                                D. Moses
                                                       Intel Corporation
                                                                L. Bertz
                                                                  Sprint
                                                          March 21,
                                                      September 29, 2016

       Protocol for Forwarding Policy Configuration (FPC) in DMM
                     draft-ietf-dmm-fpc-cpdp-03.txt
                     draft-ietf-dmm-fpc-cpdp-04.txt

Abstract

   This specification supports document describes the separation solution of the Control-Plane for
   mobility- and session management data-plane separation from the Data-Plane.  The protocol
   semantics abstract the configuration of Data-Plane
   control-plane which enables a flexible mobility management system
   using agent and client functions.  To configure data-plane nodes and applies
   it between a Client function, which
   functions, the data-plane is used abstracted by an application of the
   mobility Control-Plane, and an Agent function, which is associated
   with the configuration of Data-Plane nodes, according agent interface to the Data-
   Plane rules issued by the mobility Control-Plane.
   client.  The scope of the
   rules comprises traffic description and treatment of packets data-plane abstraction model is extensible in terms
   of encapsulation, IP address re-writing and QoS.  Additional protocol
   semantics are described order to
   support the maintenance many different type of the Data-Plane
   path. mobility management systems and data-
   plane functions.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

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

   This Internet-Draft will expire on September 22, 2016. April 2, 2017.

Copyright Notice

   Copyright (c) 2016 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
   2.  Conventions and Terminology . . . . . . . . . . . . . . . . .   4
   3.  Reference  FPC Architecture and Deployment Options  . . . . . . . .   4
     3.1.  Architecture for DMM Forwarding Policy Configuration  . .   4
     3.2.  Model 1 . . . . . . . . . . . . . .   4
   4.  Information Model . . . . . . . . . . .   6
       3.2.1.  Role of the FPC Client Function . . . . . . . . . . .   7
       3.2.2.  Role of the FPC Agent Function
     4.1.  FPC-Topology  . . . . . . . . . . .   7
     3.3.  Model 2 . . . . . . . . . . .   7
       4.1.1.  Domains . . . . . . . . . . . . . .   8
       3.3.1.  Role of the DMM FPC Client Function . . . . . . . . .   8
       3.3.2.  Role of the DMM FPC Agent Function
       4.1.2.  DPN-groups  . . . . . . . . .   8
   4.  Protocol to support Model I . . . . . . . . . . . .   8
       4.1.3.  DPNs  . . . . .   9
     4.1.  Data Structure . . . . . . . . . . . . . . . . . . .  10
     4.2.  FPC-Policy  . .   9
     4.2.  Protocol Attributes . . . . . . . . . . . . . . . . . . .  12
     4.3.  Protocol Messages and Semantics . .  11
       4.2.1.  Descriptors . . . . . . . . . . .  19
     4.4.  Protocol Operation . . . . . . . . . .  11
       4.2.2.  Actions . . . . . . . . .  20
   5.  Protocol to support Model II . . . . . . . . . . . . . .  12
       4.2.3.  Policies  . .  29
     5.1.  Protocol Attributes . . . . . . . . . . . . . . . . . . .  29
     5.2.  Protocol Messages and Semantics .  13
       4.2.4.  Policy-groups . . . . . . . . . . . .  31
     5.3.  Protocol Operation . . . . . . . .  15
     4.3.  FPC-Mobility  . . . . . . . . . . .  33
   6.  Security Considerations . . . . . . . . . . .  15
       4.3.1.  Port  . . . . . . . .  34
   7.  IANA Considerations . . . . . . . . . . . . . . . .  15
       4.3.2.  Context . . . . .  34
   8.  Work Team Participants . . . . . . . . . . . . . . . . . .  16
       4.3.3.  Monitors  .  34
   9.  References . . . . . . . . . . . . . . . . . . . . .  21
     4.4.  Namespace and Format  . . . .  34
     9.1.  Normative References . . . . . . . . . . . . . .  22
   5.  Protocol  . . . .  34
     9.2.  Informative References . . . . . . . . . . . . . . . . .  35
   Appendix A.  YANG Data Model for . . . . .  23
     5.1.  Protocol Messages and Semantics . . . . . . . . . . . . .  23
       5.1.1.  CONF and CONF_BUNDLES Messages  . . . . . . . . . . .  25
       5.1.2.  Monitors  . . . . . . . . . . . . . . . . . . . . . .  28
     5.2.  Protocol Operation  . . . . . . . . . . . . . . . . . . .  29
       5.2.1.  Simple RPC Operation  . . . . . . . . . . . . . . . .  29
       5.2.2.  Policy And Mobility on the FPC protocol Agent  . . . . . . . . . .  33
       5.2.3.  Optimization for Current and Subsequent Messages  . .  35
     A.1.  FPC Base
       5.2.4.  Pre-provisioning  . . . . . . . . . . . . . . . . . .  40
   6.  Protocol Message Details  . . . . . .  36
       A.1.1.  FPC Base YANG Model . . . . . . . . . . . .  41
     6.1.  Data Structures And Type Assignment . . . . .  36
       A.1.2.  FPC Base tree . . . . . .  41
       6.1.1.  Policy Structures . . . . . . . . . . . . . .  52
     A.2.  FPC PMIP . . . .  41
       6.1.2.  Mobilty Structures  . . . . . . . . . . . . . . . . .  43
       6.1.3.  Topology Structures . . .  58
       A.2.1.  FPC PMIP YANG Model . . . . . . . . . . . . . .  45
       6.1.4.  Monitors  . . .  58
       A.2.2.  FPC PMIP tree . . . . . . . . . . . . . . . . . . .  46
     6.2.  Message Attributes  .  61
   Authors' Addresses . . . . . . . . . . . . . . . . . .  48
       6.2.1.  Header  . . . . .  67

1.  Introduction

   One objective of the Distributed Mobility Management (DMM) WG is the
   separation of the mobility management Control- . . . . . . . . . . . . . . . . . .  48
       6.2.2.  CONF and Data-Plane to
   enable flexible deployment, such as decentralized provisioning of
   Data-Plane nodes (DPN).  Data-Plane nodes can be configured to
   function as an anchor for a registered Mobile Node's (MN) traffic,
   others can be configured to function as a Mobile Access Gateway (MAG)
   per the Proxy Mobile IPv6 protocol [RFC5213] or a Foreign Agent (FA)
   per the Mobile IPv4 protocol [RFC3344].  Requirements for DMM have
   been described in [RFC7333], whereas best current practices for DMM
   are documented in [RFC7429].

   The Data-Plane must provide a set of functions to the Mobility
   Control-Plane, such as support for encapsulation, IP address re-
   writing, QoS differentiation and traffic shaping.  In addition, means
   for traffic description must be provided to complement traffic
   treatment actions and build unambiguous Data-plane rules.  These
   requirements are met by various transport network components, such as
   IP switches and routers, though configuration semantics differ
   between them.

   Forwarding Policy Configuration (FPC) per this document enables the
   configuration of any Data-Plane node and type by the abstraction of
   configuration details and the use of common configuration semantics.
   The protocol using the FPC semantics is deployed between a Client
   function, which is associated with the Mobility Management Control-
   Plane, and an Agent function.  The Agent function enforces the Data-
   Plane configuration and can be present on a transport network
   controller or co-located with a Data-Plane node.  The Agent applies
   the generalized configuration semantics to configuration, which is
   specific to the Data-Plane node and type.

   This specification follows a common functional architecture, which
   utilizes the FPC protocol between the Client and Agent functions, CONF_BUNDLES Attributes and
   supports two operational models, Model I Notifications  .  48
       6.2.3.  Monitors  . . . . . . . . . . . . . . . . . . . . . .  50
   7.  Derived and Subtyped Attributes . . . . . . . . . . . . . . .  51
     7.1.  3GPP Specific Extenstions . . . . . . . . . . . . . . . .  54
   8.  Implementation Status . . . . . . . . . . . . . . . . . . . .  56
   9.  Security Considerations . . . . . . . . . . . . . . . . . . .  60
   10. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  60
   11. Work Team Participants  . . . . . . . . . . . . . . . . . . .  60
   12. References  . . . . . . . . . . . . . . . . . . . . . . . . .  60
     12.1.  Normative References . . . . . . . . . . . . . . . . . .  60
     12.2.  Informative References . . . . . . . . . . . . . . . . .  61
   Appendix A.  YANG Data Model II.

   A Client supporting Model I interacts with the Agent to build
   unambiguous rules which are to be enforced in the Data-Plane.  An
   Agent supporting Model I translates a rule, which follows the data
   model herein, into one or multiple configuration actions to enforce
   the rule in the Data-Plane.

   A Client supporting Model II utilizes a sequence of control messages
   to interact with the Agent, where each control message has an
   unambiguous semantic, e.g. to set up a tunnel interface or to
   configure a policy route in a Data-Plane node.  An Agent supporting
   Model II performs a configuration action per the semantics of the
   received control message.

   The availability of both operational models enables tailored
   implementation and deployment of Control-/Data-Plane separation in
   mobile communication gateways, e.g. by having the Mobility Control-
   Plane directly communicating to a Data-Plane node as per Model II, or
   per Model I by the deployment of a Network Controller in between the
   Mobility Control-Plane and Data-Plane nodes, which are under control
   of for the Network Controller.  Support for both FPC protocol . . . . . . . .  62
     A.1.  YANG Models . . . . . . . . . . . . . . . . . . . . . . .  62
       A.1.1.  FPC Base YANG Model . . . . . . . . . . . . . . . . .  62
       A.1.2.  FPC Agent YANG Model  . . . . . . . . . . . . . . . .  73
       A.1.3.  PMIP QoS Model  . . . . . . . . . . . . . . . . . . .  85
       A.1.4.  Traffic Selectors YANG Model  . . . . . . . . . . . .  97
       A.1.5.  FPC 3GPP Mobility YANG Model  . . . . . . . . . . . . 107
       A.1.6.  FPC / PMIP Integration YANG Model . . . . . . . . . . 118
       A.1.7.  FPC Policy Extension YANG Model . . . . . . . . . . . 124
     A.2.  FPC Agent Information Model YANG Tree . . . . . . . . . . 126
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . . 130

1.  Introduction

   This document describes Forwarding Policy Configuration (FPC), the models
   solution of data-plane separation from control-plane which enables an
   operator to transition their network in incremental phases.

   The architecture
   flexible mobility management systems using agent and reference interface specified in this document
   is not tied to any specific Control-Plane protocol that client
   functions.  To configure data-plane nodes and functions, the data-
   plane is in use abstracted in the mobility network, or agent which provides an interface to any type the
   client.

   Control planes of access technology.  The mobility protocols in use management systems, and/or any
   applications which require data-plane control, can be Proxy Mobile IPv6, GTP, IPSec or
   other protocols; and utilize the access network can be 4G LTE, WiFi, or 5G.
   These aspects have no direct implication FPC
   Client in flexible granularities of operation.  The configuration
   operations are capable of configuring not only single Data-Plane Node
   (DPN) directly, but also multiple DPNs from abstracted data-plane
   models on the FPC interface that is
   between Control- and Data-Plane nodes.

2.  Conventions and Terminology

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" agent.

   FPC agent provides the data-plane abstraction models in this
   document the following
   three areas:

   Topology:  DPNs are to be interpreted as described in [RFC2119].

3.  Reference Architecture grouped and Deployment Options

3.1.  Architecture for DMM Forwarding Policy Configuration

   The DMM Forwarding Policy Configuration (FPC) protocol enables the
   separation abstracted in terms of roles of the
      mobility management Control-Plane from the Data-
   Plane such as access, anchors and provides the required control domains.  FPC
      Agent abstracts DPN-groups and semantics in between
   these two planes.  Figure 1 depicts an exemplary use case where IP
   traffic between consists of forwarding plane
      topology, such as access nodes assigned to a Correspondent Node (CN) and DPN-group which peers
      to a Mobile Node (MN)
   traverses multiple DPNs, each applying DPN-group of anchor nodes.

   Policy:  Policy abstracts policies which handle specific traffic
      flows or packets such as per the Control-
   Plane's request.  Policies in the QoS, packet processing to rewrite
      headers, etc.  A policy consists of one or multiple DPNs can result rules which
      are composed of Descriptors and Actions.  Descriptors in a rule
      identify traffic steering according flows and Actions apply treatments to packets
      matched to the Descriptors in the rule.  An arbitrary set of
      policies is abstracted as a host-route, packet scheduling and
   marking according Policy-group which is applied to
      Ports.

   Mobility:  An endpoint of a subscriber's QoS profile, or forwarding rules
   (e.g. encapsulation within GRE or GTP-U tunnel).

                           +--------------------------+
                           |     Mobility Control     |
                           +--------------------------+
                            |             |         |
                            |             |         |
                            |             |         |
                     \ /    V             V         V
            +--+     -o-  +---+         +---+     +---+   +--+
            |MN| ---- |---|DPN|<========|DPN|<----|DPN|<--|CN|
            +--+      |   +---+         +---+     +---+   +--+
                         Rules:       Rules:      Rules:
                         Encap,Decap, Encap,Decap Policy-Route,
                         Forward,QoS  Forward,QoS Forward

    Figure 1: Exemplary illustration of DMM traffic steering and policy
                   enforcement at Data Plane Nodes (DPN)

   Mobility Control-Plane functions have the following roles in common:

   o  Tracking a mobile node's attachment, detachment from the access
      network

   o  Accept requests to set up and maintain mobility-related Data-Plane
      paths between DPNs, enforcing QoS and forwarding policies.  Such
      requests are a result of mobility signaling between different
      Mobility Control-Plane functions.

   o  Ensure that required rules to establish and maintain connectivity
      of an MN session is abstracted as a
      Context with its correspondent nodes associated runtime concrete attributes, such as
      tunnel endpoints, tunnel identifiers, delegated prefix(es),
      routing information, etc.  Contexts are enforced in the Data-
      Plane.

   o  Participate in monitoring the DPNs' operation and support the
      handling of exceptions, e.g. the detection attached to DPN-groups
      along with consequence of a partial DPN
      failure and the diversion of traffic through a different DPN.

   o  Maintain consistency between control plane.  One or multiple DPNs
      Contexts which enforce policy
      rules to ensure connectivity between a MN and its correspondent
      services.

   Mobility Data-Plane functions have the following roles in common:

   o  Forward and treat traffic according to the same sets of policies are assigned Ports which
      abstract those policiy sets.  A Context can belong to multiple
      Ports which serve different kinds of purpose and directives
      sent by the Mobility Control-Plane

   o  Provide status information (e.g. load, health, statistics and
      traffic volume) and events related policy.  Monitors
      aprovide a mechanism to service failure upon request

   o  Participate in produce reports when events regarding
      Ports, Sessions, DPNs or the process Agent occurs.

   The Agent collects applicable sets of topology acquisition, e.g. by
      exposing relevant topological and capability information, such as
      support forwarding policies for QoS differentiation the
   mobility sessions from the data model, and supported encapsulation
      protocols

   The protocol then renders those
   policies into specific configurations for DMM FPC applies each DPN to which the interface between a FPC
   Client function
   sessions attached.  Specific protocols and a configurations to
   configure DPN from FPC Agent function, as depicted in Figure 2. are out of scope of this document.

   The FPC Client function data-plane abstraction model is associated with an application function extensible in order to support
   many different types of
   the mobility management Control-Plane, e.g. a Local Mobility Anchor
   Control-Plane function per the Proxy Mobile IPv6 protocol. systems and data-plane
   functions.  The FPC
   Agent function processes the FPC protocol semantics architecture and translates
   them into configuration commands per the DPN's technology.  In one
   example, an protocol design of FPC Agent can be co-located with a Network Controller,
   which enforces forwarding rules on a set intends not
   to tie to specific types of Data-plane nodes.  In
   another example, the Agent can access technologies and mobility
   protocols.

2.  Conventions and Terminology

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be co-located interpreted as described in [RFC2119].

3.  FPC Architecture

   In accordance with the requirements of flexible data-plane functions
   deployment described in [RFC7333], FPC provides a Data-Plane node means for mobility
   control-plane and applications to directly interact handle DPNs that must be configured
   with interface management and the router's RIB
   Manager.  The mapping various roles of the common mobility management aspect described in
   [I-D.ietf-dmm-deployment-models].

   FPC semantics uses building blocks of Agent, Client and policy
   description to data-plane abstraction
   models as the configuration commands of a particular DPN is
   specific to interface between the DPN's technology agent and the Agent's implementation.

                              +-------------------------+
                              | client.

   Mobility Control-Plane  |
                              |                         |
                              |+--------[API]----------+|
                              || control-plane and applications integrate the FPC Client Function  ||
                              |+----------^------------+|
                              +-----------|-------------+
                                          |
                                          | DMM FPC protocol
                                          |
                              +-----------|-------------+
                              |+----------v------------+|
                              ||
   function and connect to FPC Agent Function   ||
                              |+-----------------------+|
                              |                         |
                              |  DPN Configuration API  |
                              +-------------------------+

   Figure 2: Functional reference architecture for DMM Forwarding Policy
                            Configuration (FPC)

3.2.  Model 1
3.2.1.  Role of the FPC Client Function functions.  The FPC Client function, which follows Model I operation, includes and the following tasks:

   o  Build one or multiple FPC Control messages/attributes to
      establish, update or delete rules
   Agent communicate based on one or multiple DPN(s)
      according to data-plane abstraction models described in
   Section 4.  Along with models, the Mobility Control-Plane's directives

   o  Apply a DPN's policy rules (encapsulation, address re-write, QoS,
      traffic monitoring) control-plane and the applications
   put forwarding policies for their mobility sessions on the basis of properties bound Agent.

   The Agent connects to logical
      ports (similar DPN(s) to manage their configuration.  These
   configurations are rendered from the bearer concept forwarding policies by the
   Agent.  FPC Agent may be implemented in cellular networks)

   o  Build, modify or delete logical ports as needed

   o  Bind associated policy rules as one or a network controller that
   handles multiple properties to DPNs or it also may be integrated into a
      logical port

   o  Apply traffic forwarding rules (e.g. per-IP flow, per-MN, per-IP,
      per-prefix) on the basis traffic descriptions bound to logical
      ports

   o  Send each generated DPN.

   The FPC control message to architecture supports multi-tenancy where the FPC Agent

   o  Keep record enabled
   data-plane supports multiple tenants of mobile operator networks and/
   or applications.  DPNs on the configured policy rules data-plane run in multiple data-plane
   roles which are defined per session, domain and interact with tenant.

   This architecture is illustrated in Figure 1.  This document does not
   adopt a specific protocol for the FPC Agent to ensure proper synchronization between Mobility
      Control-Plane states envelope protocol and rules configured on the it is out
   of scope.  However it must be capable of supporting FPC Agent

   o  Process received Response, Notification and Query protocol
   messages issued
      by a FPC Agent and interact with the transactions described in Section 5.

                           +-------------------------+
                           | Mobility Control-Plane to act
      accordingly

3.2.2.  Role of the  |
                           |          and            |
                           |      Applications       |
                           |+-----------------------+|
                           ||      FPC Client       ||
                           |+----------^------------+|
                           +-----------|-------------+
               FPC envelope protocol   |
                       +---------------+-----------------+
                       |                                 |
         Network       |                                 |
         Controller    |                      DPN        |
           +-----------|-------------+        +----------|---------+
           |+----------v------------+|        |+---------v--------+|
           ||   [Data-plane model]  ||        ||[Data-plane model]||
           ||       FPC Agent Function

   The       ||        ||    FPC Agent function, which follows Model I operation, includes the
   following tasks:

   o  Process received Control messages issued by a     ||
           |+-----------------------+|        |+------------------+|
           |+------------+----------+|        |                    |
           ||SB Protocols|FPC Client||        |  DPN Configuration |
           ||   Modules  |  Module  ||        +--------------------+
           |+------^-----+----^-----+|
           +-------|----------|------+
                   |          |
         Other     |          | FPC Client Function

   o  Apply received rules to local configuration (e.g. encapsulation,
      NA(P)T, traffic prioritization and scheduling) in envelope
         Southband |          | Protocol
         Protocols |          |
                   |          +-----------------+
                   |                            |
       DPN         |                 DPN        |
        +----------|---------+       +----------|---------+
        |+---------v--------+|       |+---------v--------+|
        ||  Configuration   ||       ||[Data-plane model]||
        || Protocol module  ||       ||     FPC Agent    ||
        |+------------------+|       |+------------------+|
        |                    |       |                    |
        | DPN Configuration  |       |  DPN Configuration |
        +--------------------+       +--------------------+

         Figure 1: Reference Forwarding Policy Configuration (FPC)
                               Architecture

   Note that the Data-Plane

   o  Maintain administrative FPC envelope protocol is only required to handle
   runtime data as well as operational data, which
      describes in the status Mobility model.  The rest of the rules FPC models,
   namely Topology and Policy, are pre-configured, therefore real-time
   data handling capabilities are not required for them.  Operators that
   are tenants in the Data-Plane

   o  Monitor events (e.g. failure, incomplete rule) FPC data-plane can configure Toplogy and issue an
      associated message to Policy on
   the FPC Client Function (NOTIFICATION,
      QUERY)

3.3. Agent through other means, such as Restconf
   [I-D.ietf-netconf-restconf] or Netconf [RFC6241].

4.  Information Model

   This section describes information model that represents the concept
   of FPC which is language and protocol neutral.  Figure 2

3.3.1.  Role is an
   overview of the DMM FPC Client Function

   The data-plane abstraction model.

        (Mobile operator tenant that abstracted data-plane is used)
                |
                +---FPC-Topology
                |     |
                |     +---Domains
                |     |
                |     +---DPN-groups
                |     |
                |     +---DPNs
                |
                +---FPC-Policy
                |    |
                |    +---Descriptors
                |    |
                |    +---Actions
                |    |
                |    +---Policies
                |    |
                |    +---Policy-groups
                |
                +---FPC-Mobility
                      |
                      +---Ports
                      |
                      +---Contexts

                Figure 2: FPC Client function, which follows Data-plane Abstraction Model II operation, includes
   the following tasks:

   o

4.1.  FPC-Topology

   Topology abstraction enables an actual data-plane network to support
   multiple mobile operator's topologies of their data-plane.  The FPC Client offers a set FPC-
   Topology consists of services to DPNs, DPN-groups and Domains which abstract
   data-plane topologies for the Client's mobility control
      plane entities.  These services are for activating/deactivating
      specific configuration on a Data-Plane node supported by control-planes and
   applications.

   A mobile operator who utilizes a FPC enabled data-plane network can
   virtually create their DPNs along with their data-plane design on the
   Agent.  These services for example are creation/deletion of a
      layer-3 tunnel; adding/deleting an IP route;

   o  The FPC Client translates the request from the mobile control
      plane as operator also creates a FPC message.  The message identifies DPN-group of which the service name
      and includes a set DPNs are
   attributed roles of information elements.  This message mobility management such as access, anchors and
   domains.

4.1.1.  Domains

   A domain is sent
      to defined by the FPC Agent over operators to attribute DPN-groups to the FPC interface.

3.3.2.  Role of
   domain.  Domains may represent services or applications within the DMM FPC Agent Function

   The FPC Agent function, which follows
   operator.

                         (FPC-Topology)
                             |
                             +---Domains
                                    |
                                    +---Domain-id
                                    |
                                    +---Domain-name
                                    |
                                    +---Domain-type

                     Figure 3: Domain Model II operation, includes
   the following tasks:

   o  FPC Agent offers a set Structure

   Domain-id:  Identifier of services Domain.  The ID format SHOULD refer to the FPC client.  Each
       Section 4.4.

   Domain-name:  Defines Domain name.

   Domain-type:  Specifies which type of
      these services have a well-defined meaning and can be invoked by communication allowed within
       the FPC Client passing domain, such as ipv4, ipv6, ipv4v6 or ieee802.

4.1.2.  DPN-groups

   A DPN-group defines a set of parameters.  These services for
      example are creation/deletion DPNs which share common data-plane
   attributes.  DPN-groups consist data-plane topology that consists of
   a layer-3 tunnel; adding/deleting
      an IP route.

   o  Any FPC Client can invoke a specific service on the FPC Agent
      through the use of FPC messaging interface.  The interface
      semantics allow the identification DPN-group of access nodes connecting to an anchor nodes DPN-group.

   DPN Group has attributes such as the service request data-plane role, supported
   access technologies, mobility profiles, connected peer groups and for
      inclusion
   domain.

                      (FPC-Topology)
                          |
                          +---DPN-groups
                                 |
                                 +---DPN-group-id
                                 |
                                 +---Data-plane-role
                                 |
                                 +---Domains
                                 |
                                 +---Access-type
                                 |
                                 +---Mobility-profile
                                 |
                                 +---DPN-group-peers

                   Figure 4: DPN-groups Model Structure

   DPN-group-id:  Defines identifier of the parameters relevant for that service request.

   o  FPC Agent processes a FPC message and identifies the service
      request. DPN-group.  The FPC Agent maps the service request ID format SHOULD
       refer to a local
      configuration and enables that configuration in the forwarding
      plane.  For example, if there is a service request for Tunnel
      creation including Section 4.4.

   Data-plane-role:  Defines data-plane role of the relevant parameters DPN-group, such as source IP
      address, destination IP address and encapsulation type, this
      request will result in the FPC Agent configuring such tunnel
      configuration on the Data-Plane node.

   o  The FPC Agent provides a resulting status code on how
       access-dpn, L2/L3 or anchor-dpn.

   Domains:  Specifies domains which the request
      was executed by DPN-group belongs to.

   Access-type:  Defines access type which the agent.

4.  Protocol to support Model I

4.1.  Data Structure

   To abstract from configuration details DPN-group supports such
       as ethernet(802.3/11), 3gpp cellular(S1, RAB), if any.

   Mobility-profile:  Defines supported mobility profile, such as ietf-
       pmip, 3gpp, or new profiles defined as extensions of an IP switch this
       specification.  When those profiles are correctly defined, some
       or IP router
   on the all data-plane parameters of contexts can be automatically
       derived from this profile by FPC protocol interface, Model I adopts the construct Agent.

   DPN-group-peers:  Defines remote peers of
   logical ports to describe rules DPN-group with parameters
       described in Section 4.1.2.1.

4.1.2.1.  DPN-group Peers

   DPN-group-peers defines parameters of remote peer DPNs as illustrated
   in Figure 5.

                   (DPN-groups)
                       |
                       +---DPN-group-peers
                             |
                             +---Remote-DPN-group-id
                             |
                             +---Remote-mobility-profile
                             |
                             +---Remote-data-plane-role
                             |
                             +---Remote-endpoint-address
                             |
                             +---Local-endpoint-address
                             |
                             +---Tunnel-MTU-size

                 Figure 5: DPN-groups Peer Model Structure

   Remote-DPN-group-id:  Indicates peering DPN-Group.

   Remote-mobility-profile:  Defines mobility-profile used for D-Plane processing.  A port binds
   one this
       peer, currently defined profiles are ietf-pmip, 3gpp, or multiple properties, which describe traffic treatment actions,
   such new
       profiles defined as a QoS policy, IP extensions of this specification.

   Remote-data-plane-role:  Defines forwarding-plane role of peering
       DPN-group.

   Remote-endpoint-address:  Defines Endpoint address re-write or packet encapsulation.
   Which traffic is treated is determined by one or multiple traffic
   descriptors, which also bind to that port.  A group of one or
   multiple traffic descriptors, one or multiple properties defining
   traffic treatment actions and the port identifier make a rule.  The
   port identifier serves as key peering
       DPN-group.

   Local-endpoint-address:  Defines Endpoint address of its own DPN-
       group to access peer the rule.

   All traffic arriving at a Data-Plane node and matching remote DPN-group.

   Tunnel-MTU-size:  Defines MTU size of tunnel.

4.1.3.  DPNs

   List of DPNs which defines all available nodes for a traffic
   descriptor will be treated per tenant of the properties bound to
   FPC data-plane network.  Role of a DPN in the port data-plane is not
   determined until the
   traffic descriptor DPN is also bound to.  For example, Traffic Selectors
   [RFC6088], which can be bound attributed to a port, can identify single or DPN-group.

   A DPN may have multiple IP flows.  Aggregated IP traffic destined toward a given IP
   address prefix DPN-groups which are in different data-plane
   roles or originated from domains.  Mobility sessions of that DPN-groups are installed
   into actual data-plane nodes.  The Agent defines DPN binding to
   actual nodes.

                       (FPC-Topology)
                           |
                           +---DPNs
                                  |
                                  +---DPN-id
                                  |
                                  +---DPN-name
                                  |
                                  +---DPN-groups
                                  |
                                  +---Node-reference

                      Figure 6: DPNs Model Structure

   DPN-id:  Defines identifier of DPN.  The ID format SHOULD refer to
       Section 4.4.

   DPN-name:  Defines name of DPN.

   DPN-groups:  List of DPN-group which the DPN belongs to.

   Node-reference:  Indicates an address matching a particular actual node to which the Agent binds
       the DPN.  The Agent SHOULD maintain that nodes information
       including IP address range of management and control protocol to
       connect them.

4.2.  FPC-Policy

   The FPC-Policy consists of Descriptors, Actions, Policies and Policy-
   groups, which can be described using the Traffic Selector or an IP
   prefix traffic descriptor per this specification.

   In addition viewed as configuration data while Contexts and
   Ports are akin to traffic descriptors structures that are instantiated on the Agent.  The
   Descriptors and traffic treatment actions,
   which build Actions in a Data-Plane processing rule, Policy referenced by a port has associated
   operational data, which tracks Port are active
   when the status of rule enforcement Port is in a
   selected Data-Plane node.  A rule active Context, i.e. they can also have administrative data be applied to
   traffic on a DPN.

4.2.1.  Descriptors

   List of Descriptors which defines classifiers of specific traffic
   flow, such as its directionality (uni- or bi-directional) those based on source and
   administrative status such as enabled, disabled or virtual.
   Furthermore, an identifier destination addresses,
   protocols, port numbers of the Data-Plane node to TCP/UDP/SCTP/DCCP or any packet.  Note
   that Descriptors are extensibly defined by specific profiles which
   3gpp, ietf or other SDOs produce.  Many specifications also use the rule
   applies is kept in
   terms Filter, Traffic Descriptor or Traffic Selector [RFC6088].  A
   packet that meets the operational data associated with criteria of a port.

   When the Client desires specific operational state for Descriptor is said to satisfy,
   pass or is consumed by the port, it
   may apply administrative state properties to the port.  This,
   however, may not take immediate effect on the Data-Plane Node.  Thus,
   Client implementations must support situations where differences
   exist between configured and operational state of a port.  A Client
   can request operational data associated with a particular port from Descriptor.  Descriptors are assigned an Agent.

   A Client adds, modifies or deletes
   identifier and contain a rule on an Agent using the FPC
   protocol messages. type and value.

                      (FPC-Policy)
                          |
                          +---Descriptors
                                 |
                                 +---Descriptor-id
                                 |
                                 +---Descriptor-type
                                 |
                                 +---Descriptor-value

                   Figure 7: Descriptor Model Structure

   Descriptor-id:  Identifier of Descriptor.  The protocol enables a Client ID format SHOULD refer
       to provide
   additional administrative information about a particular Section 4.4.

   Descriptor-type:  Defines descriptor type, which classifies specific
       traffic flow, such as source and destination addresses,
       protocols, port or a
   group of ports to the Agent.  This includes control numbers of TCP/UDP/SCTP/DCCP or any packet.

   Descriptor-value:  Specifies the operation value of a rule, e.g. whether a rule associated with a particular Descriptor such as IP
       prefix/address, protocol number, port
   applies only uni-directionally or bi-directionally.  In case number, etc.

4.2.2.  Actions

   List of bi-
   directionality, an Agent can apply a rule associated with a single
   port in the Data-Plane to both directions.  As example, a rule Actions which
   performs re-writing of an arriving packet's destination IP address
   from IP_A to IP_B matching an associated Traffic Selector, can be
   enforced in the Data-Plane via an Agent defines treatment/actions to implicitly consider
   matching arriving packet's source IP address against IP_B and re-
   write the source IP address apply to IP_A.

   Figure 3 illustrates
   classified traffic meeting the generic policy configuration model criteria defined by Descriptors.
   Actions include traffic management related activity such as used
   between a FPC Client shaping,
   policing based on given bandwidth, and a FPC Agent.

          TrafficDescriptor_1-+             +--Property_1 connectivity management
   actions such as pass, drop, forward to given nexthop.  Note that
   Actions are extensibly defined by specific profiles which 3gpp, ietf
   or other SDOs produce.

                        (FPC-Policy)
                            |
                            +---Actions
                                   |
          TrafficDescriptor_2-+---<PORT#>---+--Property_2
                 :
                                   +---Action-id
                                   |   +--------+|
                 :            :  /Adm Data/ +--Property_3
                 :            | +--------+  :      :
          TrafficDescriptor_M-+   +-------+ +--Property_N
                                 /OP Data/
                                +-------+
          +-------------------+           +---------------------+
                                   +---Action-type
                                   | Bind 1..M traffic |           |  Bind 1..N
                                   +---Action-value

                     Figure 8: Action Model Structure

   Action-id:  Identifier of Action.  The ID format SHOULD refer to
       Section 4.4.

   Action-type:  Defines action type, i.e. how to treat the specified
       traffic  |
          |    templates flow, e.g. pass, drop, forward to   | --------> |  treatment actions  |
          | given nexthop value and
       shape, police based on given bandwidth value, etc.

   Action-value:  Specifies value of Action, such as bandwidth, nexthop
       address or drop explicitly, etc.

4.2.3.  Policies

   Policies are collections of Rules.  Each Policy has a port      |           |      to Policy
   Identifier and a port      |
          +-------------------+           +---------------------+

         |                                                       |
         +------------------ Data-Plane Rule --------------------+

     Figure 3: Structure list of rules on Client/Agent defining Data-Plane
                             traffic treatment

   As depicted Rule/Order pairs.  The Order and Rule values
   MUST be unique in Figure 3, the port represents Policy.  Unlike the anchor AND filter matching of a rule.  A
   Client and Agent use each
   Rule the identifier of a port Policy uses an OR matching to access find the rule and
   perform modifications of traffic descriptors or properties.  From first Rule whose
   Descriptors are satisfied by the
   viewpoint of packet.  The search for a Rule to
   apply to packet processing, arriving packets are matched against
   traffic descriptors and processed is executed according to the treatment actions
   specified in the list unique Order values of properties associated with
   the port.

   A Client can assign an existing or new port to a group of ports using
   a port group identifier.  The logic behind grouping multiple ports Rules.  This is
   up to an ascending order search, i.e. the Control-Plane.  As example, multiple rules associated Rule with
   a single mobile node can be grouped the
   lowest Order value is tested first and identified if its Descriptors are not
   satisfied by the port group
   identifier.  In case packet the Control-Plane needs to delete all rules
   associated Rule with the mobile node, the Client can issue a message to
   delete next lowest Order value is
   tested.  If a port one and identify Rule is not found then the group group identifier instead of
   deleting each port individually.  A Client can also apply
   administrative properties to a group of ports by adding the port
   group ID to the FPC message.

   A Client can complement a traffic descriptor with a match priority
   value to allow unambiguous traffic matching on the Data-Plane.  If
   the Client Policy does not provide a match priority value with a traffic
   descriptor or a group of traffic descriptors have the same priority
   value, an Agent enforces the rule in the Data-Plane node apply.
   Policies contain Rules as opposed to enable
   traffic detection by longest prefix match.

   Operational information of a port includes the data listed in the
   following table:

 +---------------------------------------------------------------------+ references to Rules.

                 (FPC-Policy)
                     |   Admin Data
                     +---Policies
                            | Format Clarification
                            +---Policy-id
                            |         Description
                            +---Rules
                                  |
 +=====================================================================+
                                  +---Order
                                  |    DPN_ID
                                  +---Descriptors
                                  |      Sect. 4.2      | Identifies a Data-Plane node|
                                  |      +---Descriptor-id
                                  |      | to which the rule applies
                                  |
 +---------------------------------------------------------------------+      +---Direction
                                  |   PRT_BIDIR
                                  +---Actions
                                         |      BOOLEAN
                                         +---Action-id
                                         | Bidirectionality
                                         +---Order

                    Figure 9: Policies Model Structure

   Policy-id:  Identifier of Policy.  The ID format SHOULD refer to
       Section 4.4.

   Rules:  List of Rules which are a port  |
 |                |                      | (cleared = unidirectional)  |
 +----------------+----------------------+-----------------------------+
 |  ADMIN_STATUS  |  [8, admin status]   | Requested status collection of Descriptors and
       Actions.  All Descriptors MUST be satisfied before the Actions
       are taken.  This is known as an AND Descriptor list, i.e.
       Descriptor 1 AND Descriptor 2 AND ... Descriptor X MUST be
       satisfied for the Rule to apply.  These are internal structure to
       the Policy, i.e. it is not a rule |
 |                |                      | first class, visible object at the
       top level of an Agent.

   Order:  Specifies ordering if the Rule has multiple Descriptors and
       Action sets.

   Descriptors:  List of Descriptors.

   Descriptor-id:  Indicates each Descriptor in a Data-Plane node        |
 |                |                      | (enabled, disabled, virtual)|
 +---------------------------------------------------------------------+
 | SESSION_STATUS | [8, session status]  | Status the Rule.

   Direction:  Specifies which direction applies, such as upstream,
       downstream or both.

   Actions:  List of a session Actions.

   Action-id:  Indicates each Action in the rule.

   Order:  Specifies Action ordering if the Rule has multiple actions.

4.2.4.  Policy-groups

   List of Policy-groups which are an aggregation of Policies.  Common
   applications include aggregating Policies that are defined by
   different functions, e.g.  Network Address Translation, Security,
   etc.  The structure has an Identifier and references the Policies via
   their Identifiers.

                       (FPC-Policy)
                           |
                           +---Policy-groups
                                  |
                                  +---Policy-group-id
                                  |                      | Control-Plane (complete,    |
 |                |                      | incomplete, outdated)       |
 +---------------------------------------------------------------------+
 |  PRT_GROUP_ID  |   [32, group id]     | Identifies a group
                                  +---Policies

                  Figure 10: Policy-group Model Structure

   Policy-group-id:  Identifier of ports |
 |                |                      | Policy-group.  The ID format SHOULD
       refer to which this port belongs  |
 +---------------------------------------------------------------------+
 |    CLI_ID      |      Sect. 4.2       | Identifies the Client which |
 |                |                      | created this port           |
 +---------------------------------------------------------------------+
 |    AGT_ID      |      Sect. 4.2       | Identifies the Agent which  |
 |                |                      | enforces Section 4.4.

   Policies:  List of Policies in the rule Policy-group.

4.3.  FPC-Mobility

   The FPC-Mobility consists of Port and Context.  A mobility session is
   abstracted as per    |
 |                |                      | this port                   |
 +---------------------------------------------------------------------+

           Figure 4: Administrative Data associated a Context with its associated runtime concrete
   attributes, such as tunnel endpoints, tunnel identifiers, delegated
   prefix(es) and routing information, etc.  A Port abstracts a set of
   policies applied to the Context.

4.3.1.  Port

   A port

 +---------------------------------------------------------------------+
 |Operational Data| Format Clarification |         Description         |
 +=====================================================================+
 |  OPER_STATUS   | [8, oper status]     | Status represents a collection of policy groups, a rule group of rules
   that can exist independent of the mobility/session lifecycle.
   Mobility control-plane or applications create, modify and delete
   Ports on FPC Agent through the FPC Client.

   When a Port is indicated in a       |
 |                |                      | Data-Plane node (enabled,   |
 |                |                      | disabled, virtual)          |
 +---------------------------------------------------------------------+
 | SERVICE_STATUS | [8, service status]  | Ability Context, the set of an enabled rule  |
 |                |                      | Descriptors and
   Actions in the Policies of the Port are collected and applied to serve traffic (complete, |
 | the
   Context.  They must be instantiated on the DPN as forwarding related
   actions such as QoS differentiations, packet processing of encap/
   decap, header rewrite, route selection, etc.

                     (FPC-Mobility)
                             |
                             +---Ports
                                    | incomplete, outdated)
                                    +---Port-id
                                    |
 +---------------------------------------------------------------------+
                                    +---Policy-groups

                      Figure 5: Operational Data associated with a port

   A Client MAY 11: Port Model Structure

   Port-id:  Identifier of Port.  The ID format SHOULD refer to
       Section 4.4.

   Policy-groups:  List of references to Policy-groups which apply an administrative state property to a port
   indicating
       the desired operational status Port.

4.3.2.  Context

   An endpoint of a port, e.g. enabled,
   disabled mobility session or virtual (not intended to serve traffic but used the instantiation of policy-
   groups is abstracted as a
   template for other ports).  Rules specified by an enabled port are
   enforced in the Data-Plane node.  A disabled port Context with its associated runtime
   concrete attributes, such as tunnel endpoints, tunnel identifiers,
   delegated prefix(es) and routing information, etc.  Mobility control-
   plane or applications create, modify and delete contexts on an FPC Agent can be
   useful for pre-configuration, e.g. other operations can be performed
   on
   through the port prior to its enablement.  Ultimately, a disabled port is
   intended to be enabled.  Virtual ports can serve as a reference to
   clone new ports, which can then FPC Client.

   A Context directly describes traffic treatment policies in QoS
   profile and Mobility profiles or indirectly via Ports.  Parameters in
   these profiles may be enabled.  When creating a cloned
   port, set by the FPC Client can update directly or add properties to suit the rule that
   should be enforced in indirectly
   derived from the Data-Plane.

   A Client MAY set of Descriptors and Actions when the Ports
   indicate Policies which specify those descriptors and actions.  If a Session state for a particular port or group
   Context doesn't have any Port, all parameters of
   ports on the Agent to guide Context must be
   set by the Agent on how to treat local events.
   As example, an Agent Client.

                 (FPC-Mobility)
                         |
                         +---Contexts
                                |
                                +---Context-id
                                |
                                +---Ports
                                |
                                +---DPN-group
                                |
                                +---Delegating-ip-prefixes
                                |
                                +---Parent-context

                 Figure 12: Common Context Model Structure

   Context-id:  Identifier of Context.  The ID format SHOULD refrain from sending an FPC message refer to
   the Client as result
       Section 4.4.

   Ports:  List of Ports.  When a local event, which indicates a missing
   rule, in case Context is applied to Port(s), the session state
       context is 'incomplete', as configured by policies of those Port(s).  Port-id
       references indicate Ports which apply to the Agent Context.  Context
       can
   expect be a part of multiple Ports which have different policies.

   DPN-group:  The DPN-group assigned to the Control-Plane Context.

   Delegating-ip-prefixes:  List of IP prefixes to be delegated to provide the missing rule unsolicited.  In
   case
       mobile node of the session state is 'outdated', context.

   Parent-context:  Indicates context which the context inherits.

4.3.2.1.  Single DPN Agent MAY notify the Client
   to update Case

   In the associated rule on case where a FPC Agent supports only one DPN, the Agent.

4.2.  Protocol Attributes

   Protocol messages as per Section 4.3 identify an FPC Client or Agent
   function, as well as a DPN, and carry traffic descriptor attributes,
   logical port identification and properties specifying traffic
   treatment actions.  Traffic can be described per-host, in aggregate
   or per-IP flow.  A Client MAY append administrative properties MUST
   maintain context data just for the DPN.  The Agent does not need to
   maintain a
   message to indicate the desired status Topology model.  The Context in single DPN case consists
   of a port to the Agent.

   This document specifies attributes from the following categories:

   o  Identifier attributes
   o  Traffic Descriptors

   o  Properties specifying traffic treatment actions

   o  Protocol-specific Properties

   o  Administrative properties

 +---------------------------------------------------------------------+
 |   Attribute    | Format Clarification |         Description         |
 +=====================================================================+
 |                            Identifiers                              |
 +---------------------------------------------------------------------+
 |    PRT_ID      | [32,PRT_ID]          | Identifies a logical Port   |
 +---------------------------------------------------------------------+
 |  PRT_GROUP_ID  | [32,PRT_GROUP_ID]    | Identifies a group parameters for both direction of       |
 |                |                      | logical Ports               |
 +---------------------------------------------------------------------+
 |  PRT_PROP_ID   | [32,PRT_ID]          | Identifies a logical Port   |
 |                | [8,PROP_ID]          | uplink and one of its properties   |
 +---------------------------------------------------------------------+
 |   PRT_TD_ID    | [32,PRT_ID]          | Identifies a logical Port downlink.

              (Contexts)
                  |
                  +---UL-Tunnel-local-address
                  |
                  +---UL-Tunnel-remote-address
                  | [8,TD_ID]
                  +---UL-Tunnel-mtu-size
                  | and a traffic descriptor
                  +---UL-Mobility-specific-tunnel-parameters
                  |
                  +---UL-Nexthop
                  |
                  +---UL-QoS-profile-specific-parameters
                  |
                  +---UL-DPN-specific-parameters
                  | that applies
                  +---UL-Vendor-specific-parameters

          Figure 13: Uplink Context Model of Single DPN Structure

   UL-Tunnel-local-address:  Specifies uplink endpoint address of the
       DPN.

   UL-Tunnel-remote-address:  Specifies uplink endpoint address of the
       remote DPN.

   UL-Tunnel-Mtu-size:  Specifies uplink MTU size of tunnel.

   UL-Mobility-specific-tunnel-parameters:  Specifies profile specific
       uplink tunnel parameters to the port DPN which the agent exists.  The
       profiles includes GTP/TEID for 3gpp profile, GRE/Key for ietf-
       pmip profile, or new profiles defined by extensions of this
       specification.

   UL-Nexthop:  Indicates nexthop information of uplink in external
       network such as IP address, MAC address, SPI of service function
       chain, SID of segment routing, etc.

   UL-QoS-profile-specific-parameters:  Specifies profile specific QoS
       parameter of uplink, such as QCI/TFT for 3gpp profile,
       [RFC6089]/[RFC7222] for ietf-pmip, or new profiles defined by
       extensions of this specification.

   UL-DPN-specific-parameters:  Specifies optional node specific
       parameters of uplink in need, such as if-index, tunnel-if-number
       that must be unique in the DPN.

   UL-Vendor-specific-parameters:  Specifies a vendor specific parameter
       space for uplink.

              (Contexts)
                  |
 +----------------+----------------------+-----------------------------+
                  +---DL-Tunnel-local-address
                  |    CLI_ID
                  +---DL-Tunnel-remote-address
                  | [16, Carrier ID]
                  +---DL-Tunnel-Mtu-size
                  | Identifies an
                  +---DL-Mobility-specific-tunnel-parameters
                  |
                  +---DL-Nexthop
                  |
                  +---DL-QoS-profile-specific-parameters
                  | [16, Network ID]
                  +---DL-DPN-specific-parameters
                  | FPC Client
                  +---DL-Vendor-specific-parameters

         Figure 14: Downlink Context Model of Single DPN Structure

   DL-Tunnel-local-address:  Specifies downlink endpoint address of the
       DPN.

   DL-Tunnel-remote-address:  Specifies downlink endpoint address of the
       remote DPN.

   DL-Tunnel-Mtu-size:  Specifies downlink MTU size of tunnel.

   DL-Mobility-specific-tunnel-parameters:  Specifies profile specific
       downlink tunnel parameters to the DPN which the agent exists.
       The profiles includes GTP/TEID for 3gpp profile, GRE/Key for
       ietf-pmip profile, or new profiles defined by extensions of this
       specification.

   DL-Nexthop:  Indicates nexthop information of downlink in external
       network such as IP address, MAC address, SPI of service function         |
 |                | [32, Client ID]      |                             |
 +---------------------------------------------------------------------+
 |    AGT_ID      | [16, Carrier ID]     | Identifies an               |
 |                | [16, Network ID]     |
       chain, SID of segment routing, etc.

   DL-QoS-profile-specific-parameters:  Specifies profile specific QoS
       parameter of downlink, such as QCI/TFT for 3gpp profile,
       [RFC6089]/[RFC7222] for ietf-pmip, or new profiles defined by
       extensions of this specification.

   DL-DPN-specific-parameters:  Specifies optional node specific
       parameters of downlink in need such as if-index, tunnel-if-number
       that must be unique in the DPN.

   DL-Vendor-specific-parameters:  Specifies a vendor specific parameter
       space for downlink.

4.3.2.2.  Multiple DPN Agent Case

   Another case is when a FPC Agent function          |
 |                | [32, connects to multiple DPNs.  This
   Agent ID]       |                             |
 +---------------------------------------------------------------------+
 |    DPN_ID      | [16, Carrier ID]     | Identifies MUST maintain a Data Plane     |
 |                | [16, Network ID]     | Node (DPN)                  |
 |                | [32, DPN ID]         |                             |
 +---------------------------------------------------------------------+
 |   MONITOR_ID   | [32, Monitor ID]     | Identifies set of Context data for each DPN.  The Context
   contains a registered     |
 |                | DPNs list where each entry of the list consists of the
   parameters in Figure 15.  A Context data for one DPN has two entries
   for each direction of uplink and downlink.

             (Contexts)
                 | monitor
                 +---DPNs
                      |
 +---------------------------------------------------------------------+
                      +---DPN-id
                      |  EVENT_TYPE_ID
                      +---Direction
                      | [8, Event Type ID]
                      +---Tunnel-local-address
                      | Identifies an event type
                      +---Tunnel-remote-address
                      |
 +---------------------------------------------------------------------+
                      +---Tunnel-mtu-size
                      |                        Optional Identifiers
                      +---Mobility-specific-tunnel-parameters
                      |
 +---------------------------------------------------------------------+
                      +---Nexthop
                      | SERVICE_PATH_ID| [24-bit identifier]
                      +---QoS-profile-specific-parameters
                      | Service Path Identifier
                      +---DPN-specific-parameters
                      |
 +---------------------------------------------------------------------+
                      +---Vendor-specific-parameters

         Figure 6: 15: Multiple-DPN Supported Context Model I Protocol Attributes: Identifiers

+----------------------------------------------------------------------+
|  Attribute    |    Format Clarification    |       Description       |
+======================================================================+
|                             Properties                               |
+----------------------------------------------------------------------+
|   PROP_TUN    | [type][src][dst]           | Property Encapsulation, |
|               |                            | indicates type GRE, IP, |
|               |                            | GTP                     |
+----------------------------------------------------------------------+
|  PROP_REWR    | [in_src_ip][out_src_ip]    | Property NAT defines    |
|               | [in_dst_ip][out_dst_ip]    | IP address and port     |
|               | [in_src_port][out_src_port]| re-write rules          |
|               | [in_dst_port][out_dst_port]|                         |
+----------------------------------------------------------------------+
|   PROP_QOS    | [QoS index type][index]    | Property QoS refers to  |
|               | [DSCP]                     | single index and DS Code|
|               |                            | Point to write          |
+----------------------------------------------------------------------+
| PROP_QOS_GBR  | [GBR] *[PRT_ID]            | Guaranteed Bit Rate and |
|               |                            | single or multiple      |
|               |                            | PRT_IDs to Structure

   DPN-id:  Indicates DPN of which the    |
|               |                            | GBR applies when being  |
|               |                            | aggregated              |
+---------------+----------------------------+-------------------------+
| PROP_QOS_MBR  | [MBR] *[PRT_ID]            | Maximum Bit Rate and    |
|               |                            | single or multiple      |
|               |                            | PRT_IDs to runtime context data installed.

   Direction:  Specifies which side of connection at the    |
|               |                            | MBR applies when being  |
|               |                            | aggregated              |
+---------------+----------------------------+-------------------------+
|   PROP_GW     | [ip DPN indicated,
       "uplink" or "downlink".

   Tunnel-local-address:  Specifies endpoint address next hop]      | IP of the DPN at the
       uplink or downlink.

   Tunnel-remote-address:  Specifies endpoint address of remote DPN at
       the Next  |
|               |                            | Hop to which IP packets |
|               |                            | should be forwarded     |
+----------------------------------------------------------------------+
| PROP_CPY_FORW | [PRT_ID]                   | Copy IP packets, treat  |
|               |                            | uplink or downlink.

   Tunnel-mtu-size:  Specifies the duplicates per MTU size of tunnel on uplink or
       downlink.

   Mobility-specific-tunnel-parameters:  Specifies profile specific
       tunnel parameters for uplink or downlink of the  |
|               |                            | properties DPN.  The
       profiles includes GTP/TEID for 3gpp profile, GRE/Key for ietf-
       pmip profile, or new profiles defined by extensions of this
       specification.

   Nexthop:  Indicates nexthop information for uplink or downlink in
       external network of the       |
|               |                            | referred port           |
+----------------------------------------------------------------------+
|   PROP_DROP   |                            | Drop DPN such as IP packet          |
+----------------------------------------------------------------------+
|  PROP_CONCAT  | [PRT_ID]                   | Include treatment per   |
|               |                            | the referred port into  |
|               |                            | address, MAC address, SPI
       of service function chain, SID of segment routing, etc.

   QoS-profile-specific-parameters:  Specifies profile specific QoS
       parameter for uplink or downlink of the DPN, such as QCI/TFT for
       3gpp profile, [RFC6089]/[RFC7222] for ietf-pmip, or new profiles
       defined by extensions of this specification.

   DPN-specific-parameters:  Specifies optional node specific parameters
       for uplink or downlink of the DPN in need, such like if-index,
       tunnel-if-number that must be unique in the DPN.

   Vendor-specific-parameters:  Specifies a vendor specific parameter
       space for the DPN.

4.3.3.  Monitors

   Monitors provide a mechanism to produce reports when events occur.  A
   Monitor will have a target that specifies what is to be watched.

   When a Monitor is specified, the rule                |
+----------------------------------------------------------------------+
|                         Optional Properties                          |
+----------------------------------------------------------------------+
|   PROP_NSH    | [SERVICE_PATH_ID]          | Include NSH             |
|               | [Service Index]            |                         |
+----------------------------------------------------------------------+

    Figure 7: Model I Protocol Attributes: Traffic Treatment Properties

 +---------------------------------------------------------------------+
 |   Attribute    | Format Clarification |         Description         |
 +=====================================================================+
 |                          Protocol-specific                          |
 +---------------------------------------------------------------------+
 |   IPIP_CONF    |                      | IP-encapsulation            |
 |                |                      | configuration attribute     |
 +---------------------------------------------------------------------+
 |   GRE_CONF     | [prototype][seq-#]   | GRE_encapsulation           |
 |                | [key]                | configuration attribute     |
 +---------------------------------------------------------------------+
 |   GTP_CONF     | [TEID_local]         | GTP-U encapsulation         |
 |                | [TEID_remote]        | MUST be applicable to
   the attribute/entity monitored, e.g. a Monitor using a Threshold
   configuration attribute     | cannot be applied to a context but it can be applied to
   a numeric property.

                     (FPC-Mobility)
                             |
                             +---Monitors
                                    | [seq-#]
                                    +---Monitor-id
                                    |
                                    +---Target
                                    |
 +---------------------------------------------------------------------+
                                    +---Configuration

                 Figure 8: 16: Common Monitor Model I Protocol Attributes: Protocol-specific

 +---------------------------------------------------------------------+
 |   Attribute    | Format Clarification |         Description         |
 +=====================================================================+
 |                    Traffic Descriptor Container                     |
 +---------------------------------------------------------------------+
 |  TD_CONTAINER  | [PRT_TD_ID]          | Traffic handling priority,  |
 |                | [8, PRIO]            | One or multiple traffic     |
 |                |*[traffic descriptor] | descriptors                 |
 +---------------------------------------------------------------------+

       Figure 9: Protocol Attributes: Traffic Description Container

 +---------------------------------------------------------------------+
 |   Attribute    | Format Clarification |         Description         |
 +=====================================================================+
 |                         Traffic Descriptors                         |
 +---------------------------------------------------------------------+
 |  TD_DST_IP     | [IP address]         | Aggregated or per-host dst  |
 |                | [Prefix Len]         | IP address/prefix rule      |
 +---------------------------------------------------------------------+
 |  TD_SRC_IP     | [IP address]         | Aggregated Structure

   Monitor-id:  Name of the Monitor.  The ID format SHOULD refer to
       Section 4.4.

   Target:  Target to be monitored.  This may be an event, a Context, a
       Port or per-host src  |
 |                | [Prefix Len]         | IP address/prefix rule      |
 +---------------------------------------------------------------------+
 |  TD_TS         | [Traffic Selector]   | Traffic Selector,           |
 |                |                      | Format as per RFC6088       |
 +----------------+----------------------+-----------------------------+

            Figure 10: Protocol Attributes: Traffic Descriptors

+----------------------------------------------------------------------+
|  Attribute    |    Format Clarification    |       Description       |
+======================================================================+
|                             Properties                               |
+----------------------------------------------------------------------+
| ADMIN_STATE   | [state]                    | Administrative state:   |
|               |                            | enabled, disabled,      |
|               |                            | virtual                 |
+----------------------------------------------------------------------+
| SESSION_STATE | [state]                    | Session state: complete,|
|               |                            | incomplete, outdated    |
+----------------------------------------------------------------------+
| CLONE_REF     | [PRT_ID]                   | Cloning attribute(s) of a rule based |
|               |                            | on referred port ID     |
+----------------------------------------------------------------------+
| ACT_DELAY     | [delay]                    | Delay in ms before an   |
|               |                            | updated rule takes      |
|               |                            | effect at the Agent     |
+----------------------------------------------------------------------+
| PRT_BIDIR     | [boolean]                  | Contexts.  When set, the rule per  |
|               |                            | this port type is applied    |
|               |                            | bi-directionally        |
+----------------------------------------------------------------------+
| RESULT        | [result]                   | Result an
       attribute(s) of processing    |
|               |                            | a message:              |
|               |                            | success, failure        |
+----------------------------------------------------------------------+

         Figure 11: Protocol Attributes: Administrative Properties

+----------------------------------------------------------------------+
|  Attribute       |  Format Clarification |        Description        |
+======================================================================+
|                       Monitors and Notification                      |
+----------------------------------------------------------------------+
| MONITOR          | Monitor-ID Attribute  | A Monitor                 |
|                  | [REPORT CONFIG]       |                           |
+----------------------------------------------------------------------+
| REPORT_CONFIG    | [8, REPORT-TYPE]      | The type Context, the target name is a concatenation of report
       the Context-Id and    |
|                  | [TYPE_SPECIFIC_INFO]  | type-specific             |
|                  |                       | configurations            |
+----------------------------------------------------------------------+
| PERIODIC_CONFIG  | [32, period]          | REPORT-TYPE is PERIODIC,  |
|                  |                       | period specifies the      |
|                  |                       | relative path (separated by '/') to the
       attribute(s)to be monitored.

   Configuration:  Determined by the Monitor subtype.  Four report types
       are defined:

       *  Periodic reporting specifies an interval (ms)      |
+----------------------------------------------------------------------+
| THRESHOLD_CONFIG | [32, low]             | REPORT-TYPE is THRESHOLD, |
|                  | [32, hi]              | Low Threshold,            |
|                  |                       | High Threshold (at least  |
|                  |                       | one value required)       |
+----------------------------------------------------------------------+
| SCHEDULED_CONFIG | [32, time]            | REPORT-TYPE is SCHEDULED, |
|                  |                       | Time when NOTIFY by which a
          notification is sent  |
|                  |                       |                           |
+----------------------------------------------------------------------+
| EVENTS_CONFIG    | *[EVENT_TYPE_ID]      | List of Events that       |
|                  |                       | trigger the Monitor       |
+----------------------------------------------------------------------+
| DEREG_INFO       | *[MONITOR_ID]         | Monitors to deregister,   |
|                  |  [boolean]            | Boolean (optional)        |
|                  |                       | indicates if the Client.

       *  Event reporting specifies a successful |
|                  |                       | DEREG triggers list of even types that, if they
          occur and are related to the monitored attribute, will result
          in sending a NOTIFY   |
|                  |                       | with final data           |
+----------------------------------------------------------------------+
| NOTIFY_INFO      | [32, Notification-Id] |ID used for notfication to the Client ordering|
|                  | [MONITOR-ID]          |Monitor-ID of

       *  Scheduled reporting specifies the NOTIFY,  |
|                  | [32, TRIGGER]         |TRIGGER time (in seconds since Jan
          1, 1970) when a notificaiton for the NOTIFY,    |
|                  | [32, timestamp]       |Timestamp of when monitor should be sent to
          the Client.  Once this Monitor's notification is completed the      |
|                  |                       |attributes were recorded   |
+----------------------------------------------------------------------+

       Figure 12: Protocol Attributes:
          Monitor is automatically de-registered.

       *  Threshold reporting specifies one or both of a low and Notify Attributes

   TRIGGERS include but high
          threshold.  When these values are not limited crossed a corresponding
          notification is sent to the following values:

   o  Events specified Client.

4.4.  Namespace and Format

   The identifiers and names in FPC models which reside in the Event List of same
   namespace must be unique.  That uniqueness must be kept in agent or
   data-plane tenant namespace on an EVENTS CONFIG

   o  LOW_THRESHOLD_CROSSED
   o  HIGH_THRESHOLD_CROSSED

   o  PERIODIC_REPORT

   o  SCHEDULED_REPORT

   o  PROBED

   o  DEREG_FINAL_VALUE

4.3.  Protocol Messages and Semantics Agent.  The following table specifies all protocol messages tenant namespace
   uniquenes MUST be applied to create all elements of the tenant model, i.e.
   Topology, Policy and
   modify Mobility models.

   When a rule by creating and deleting logical Ports, adding and
   modifying properties and binding traffic descriptors Policy needs to a port.
   Furthermore, messages can schedule tasks, such as monitoring, at be applied to Contexts in all tenants on an
   Agent, the Agent or probe SHOULD define that policy to be visible from all the status of
   tenants.  In this case, the scheduled task from a Client.
   Additional messages enable Agent assign an unique identifier in the Data-Plane
   agent namespace.

   The format of identifiers can utilize any format with agreement
   between data-plane agent and client operators.  The formats include
   but are not limited to notify or query Globally Unique IDentifiers (GUIDs),
   Universally Unique IDentifiers (UUIDs), Fully Qualified Domain Names
   (FQDNs), Fully Qualified Path Names ( FQPNs) and Uniform Resource
   Identifiers (URIs).

   The FPC model MUST NOT limit the
   Control-Plane through types of format that dictate the Agent
   choice of FPC protocol.  It is noted that the choice of identifiers
   which are used in Mobility model should be suitable to handle runtime
   parameters in real-time.  The Topology and Client functions.

 +---------------------------------------------------------------------+ Policy models are not
   restricted to meet that requirement as described in Section 3.

5.  Protocol

5.1.  Protocol Messages and Semantics

   Five message types are supported:

   +---------------+---------------+-----------------------------------+
   | Message       |                    Description Type          |
 +=====================================================================+ Description                       |               Messages issued by the FPC Client
   +---------------+---------------+-----------------------------------+
   |
 +---------------------------------------------------------------------+ CONF          |    PRT_ADD HEADER        | Add Configure processes a logical port single      |
 +---------------------------------------------------------------------+
   |    PRT_DEL               | Delete a logical port ADMIN_STATE   |
 +---------------------------------------------------------------------+ operation.                        |    PROP_ADD
   | Add a property to a logical port               |
 +---------------------------------------------------------------------+ SESSION_STATE |    PROP_MOD                                   | Modify a property of a logical port
   |
 +---------------------------------------------------------------------+               |    PROP_DEL OP_TYPE BODY  | Delete a property from a logical port                                   |
 +---------------------------------------------------------------------+
   |    TD_ADD               | Add traffic descriptor to a logical port               |
 +---------------------------------------------------------------------+                                   |    TD_MOD
   | Modify an existing traffic descriptor CONF_BUNDLES  |
 +---------------------------------------------------------------------+ 1*[HEADER     |    TD_DEL Configure-bundles takes multiple  | Delete an existing traffic descriptor
   |
 +---------------------------------------------------------------------+               |  MONITOR_REG ADMIN_STATE   | Install a monitor at an Agent. The message operations that are to be         |
   |               | includes information about the attribute to SESSION_STATE | executed as a group with partial  |
   | monitor and the reporting method.               |
 +---------------------------------------------------------------------+ OP_TYPE BODY] |  MONITOR_DEREG failures allowed. They are        | Remove a monitor at an Agent.
   |
 +---------------------------------------------------------------------+               |     PROBE               | Probe executed according to the status of a registered event OP_ID   |
 +---------------------------------------------------------------------+
   |                 Messages issued by               |               | value in the FPC Agent OP_BODY in ascendig  |
 +---------------------------------------------------------------------+
   |               | Notify the Client about the status of               | order. If a CONFIGURE_BUNDLES     |
   |    NOTIFY               | monitored attribute per               | fails, any entities provisioned   |
   |               |               | in the reporting method CURRENT operation are      |
   |               | (periodic / event trigger / probed)               |
 +---------------------------------------------------------------------+ removed, however, any successful  |     QUERY
   | Query               |               | operations completed prior to the Client about missing rules/states |
 +---------------------------------------------------------------------+

                       Figure 13: Protocol Messages

4.4.  Protocol Operation

   The following list comprises a more detailed description of each
   message's semantic.

   An FPC Client and Agent MUST identify themself using the CLI_ID and
   AGT_ID respectively
   |               |               | current operation are preserved   |
   |               |               | in order to ensure that for all transactions reduce system load.   |
   |               |               |                                   |
   | REG_MONITOR   | HEADER        | Install a recipient
   of monitor at an FPC Agent.    |
   |               | ADMIN_STATE   | The message can unambiguously identify the sender of the FPC
   message.  A Client MAY direct includes information  |
   |               | *[ MONITOR ]  | about the Agent attribute to enforce monitor    |
   |               |               | and the reporting method.  Note   |
   |               |               | that a rule in MONITOR_CONFIG is required |
   |               |               | for this opeation.                |
   |               |               |                                   |
   | DEREG_MONITOR | HEADER *[     | Remove monitors from an Agent.    |
   |               | MONITOR_ID ]  | Monitor IDs are provided. Boolean |
   |               | [ boolean ]   | (optional) indicates if a
   particular DPN by including         |
   |               |               | successful DEREG triggers a DPN_ID value.  Otherwise       |
   |               |               | NOTIFY with final data.           |
   |               |               |                                   |
   | PROBE         | HEADER        | Probe the Agent
   selects status of a suitable DPN registered  |
   |               | MONITOR_ID    | monitor.                          |
   +---------------+---------------+-----------------------------------+

                     Table 1: Client to enforce Agent Messages

   Each message contains a rule and notifies header with the Client
   about Identifier, an
   execution delay timer and an operation identifier.  The delay, in ms,
   is processed as the selected DPN using delay for operation execution from the DPN_ID.

   o  PRT_ADD - Issued time the
   operation is received by a Client to add a new logical port at an
      Agent.  An Agent receiving the PRT_ADD message identifies Agent.

   Messages that create or update Monitors and Entities, i.e. CONF,
   CONF_BUNDLES and REG_MONITOR, specify an Administrative State which
   specifies the new
      port according to the included port identifier (PRT_ID).  The
      Agent adds a new port into its conceptual data structures using
      the port identifier as key.  Optionally, Administrative state of the PRT_ADD message MAY
      include properties as well as traffic descriptors, which are bound
      and refer to subject(s) after
   the new port.  This enables a Client to issue a new
      configuration in a single transaction with an Agent.  A Client MAY
      assign a port to a group successful completion of ports and indicate the associated port
      group identifier (PRT_GROUP_ID) in the PRT_ADD message.

   o  PRT_DEL - Used by a Client to delete a port.  An Agent receiving
      such message MUST delete all properties associated with the
      identified port.

   o  PROP_ADD - Used by operation.  If the Client to add a new property status is set to an
   virtual, any existing
      port.  The property is unambiguously identified through a property
      identifier (PRT_PROP_ID).  All traffic, which data on the DPN is directed to this
      port removed.  If the value is treated according
   set to disabled, then an operation will occur on the existing and newly added
      property.  Optionally, DPN IF the PROP_ADD message can include traffic
      descriptors, which refer to
   entity exists on the port DPN.  If set to which 'active' the properties DPN will be
   provisioned.  Values are
      bound.  This enables 'enabled', 'disabled' or 'virtual'.

   An Agent will respond with an error, ok, or an ok with indication
   that remaining data will be sent via a Client to add new rules to notify from the existing
      port Agent to which the new properties have been bound in a single
      transaction.

   o  PROP_MOD - Used by a
   Client to modify Section 5.1.1.5.2.  When returning an existing property.  For
      example, a tunnel property can be changed to direct traffic to a
      different tunnel endpoint in case 'ok' of a mobile node's handover.
      Optionally, the PROP_MOD message can include rules descriptions,
      which refer to the port whose properties any kind,
   optional data may be present.

   Two Agent notifications are modified.  This
      enables a Client to add new rules supported:

   +----------------------+----------+---------------------------------+
   | Message              | Type     | Description                     |
   +----------------------+----------+---------------------------------+
   | CONFIG_RESULT_NOTIFY | See      | An asynchronous notification    |
   |                      | Table 15 | from Agent to the existing port whose
      properties have been modified in a single transaction.

   o  PROP_DEL - Used by a Client to delete one or multiple properties,
      each being identified by a property identifier.

   o  TD_ADD - Used by based upon |
   |                      |          | a Client previous CONFIG or            |
   |                      |          | CONFIG_BUNDLES request.         |
   |                      |          |                                 |
   | NOTIFY               | See      | An asynchronous notification    |
   |                      | Table 16 | from Agent to add Client based upon |
   |                      |          | a traffic descriptor registered MONITOR.           |
   +----------------------+----------+---------------------------------+

             Table 2: Agent to a port.
      The traffic descriptor SHOULD unambiguously identify aggregated
      traffic (longest prefix), per host IP traffic or per-flow traffic
      in the TD_ADD command Client Messages (Notfications)

5.1.1.  CONF and bind CONF_BUNDLES Messages

   CONF and CONF_BUNDLES specify the identified traffic following information for each
   operation in addition to a port.
      Traffic descriptors are carried the header information:

   SESSION_STATE:  sets the expected state of the entities embedded in a TD_CONTAINER, which allows
       the identification operation body after successful completion of a traffic description as well as the
      indication if a traffic handling priority operation.
       Values can be 'complete', 'incomplete' or 'outdated'.  Any
       operation that is 'incomplete' MAY NOT result in case communication
       between the sole traffic
      description does not suffice unambiguous traffic matching.  An Agent receiving a TD_ADD command MUST add the traffic descriptor
      to its local conceptual data structures and apply commands for
      local configuration to add DPN.  If the result is 'outdated' any new traffic descriptor to the rule
       operations on the DPN.  Multiple traffic descriptors can bind these entities or new references to these entities
       have unpredictable results.

   OP_TYPE:  specifies the same
      port.  All traffic captured by the traffic descriptor will
      experience type of operation.  Valid values are 'create'
       (0), 'update' (1), 'query' (2) or 'delete' (3).

   COMMAND_SET:  specifies the same treatment per Command Set IF the properties which bind to
      that port.

   o  TD_MOD - Used by feature is supported
       (see Section 5.1.1.3).

   BODY  A list of Clones, if supported, Ports and Contexts when the
       OP_TYPE is 'create' or 'update'.  Otherwise it is a Client to modify an existing traffic
      descriptor.  An list of
       Targets for 'query' or 'deletion'.  See Section 6.2.2 for
       details.

5.1.1.1.  Agent receiving such messages MUST apply commands
      to the local configuration and update Operation Processing

   The Agent will process entities provided in an operation in the rule on
   following order:

   1.  Clone Instructions, if the DPN
      accordingly.

   o  TD_DEL - Used feature is supported

   2.  Ports

   3.  Contexts according to remove an existing traffic descriptor from a
      port. COMMAND_SET order processing

   The Agent receiving such messages MUST delete following Order Processing occurs when COMMAND Sets are present

   1.  The Entity specific COMMAND_SET is processed according to its bit
       order unless otherwise specified by the
      identified traffic descriptor from technology specific
       COMMAND_SET definition.

   2.  Operation specific COMMAND_SET is processed upon all applicable
       entities (even if they had Entity specific COMMAND_SET values
       present) according to its bit order unless otherwise specified by
       the local configuration and
      update technology specific COMMAND_SET definition.

   3.  Operation OP_TYPE is processed for all entities.

   When deleting objects only their name needs to be provided.  However,
   attributes MAY be provided if the rule on Client wishes to avoid requiring
   the DPN accordingly.

   o  MONITOR_REG - Used by Agent cache lookups.

   When deleting an attribute, a leaf reference should be provided.
   This is a path to the attibutes.

5.1.1.2.  Cloning

   Cloning is an optional feature that allows a Client to install copy one
   structure to another in an operation.  Cloning is always done first
   within the operation (see Operation Order of Execution for more
   detail).  If a monitor at Client wants to build an Agent.
      A monitor contains object then Clone it, use
   CONFIG_BUNDLES with the monitor id, attribute first operation being the entities to monitor, and
      optional reporting configuration.  The attribute may be any ID
   copied and a second operation with the exception Cloning instructions.  A CLONE
   operation takes two arguments, the first is the name of MONITOR_ID the target to
   clone and EVENT_TYPE_ID.  When a
      Monitor registration the second is applied, the reporting configuration MUST
      be applicable to name of the attribute monitored, e.g. newly created entity.
   Individual attributes are not clonable; only Ports and Contexts can
   be cloned.

5.1.1.3.  Command Bitsets

   The COMMAND_SET is a Monitor using technology specific bitset that allows for a
      Threshold configuration cannot
   single entity to be applied sent in an operation with requested sub-
   transactions to be completed.  For example, a Port Context could have the
   Home Network Prefix absent but it can be
      applied to a numeric Port Property.  Four report types are
      defined: (1) Periodic reporting specifies an interval by which a
      NOTIFY is sent to the Client, (2) Event reporting specifies a list
      of EVENT_TYPE_IDs that, unclear if they occur and are related to the
      monitored attribute, will result in sending a NOTIFY to the
      Client, (3) Scheduled reporting specifies the time (in seconds
      since Jan 1, 1970) when a NOTIFY for Client would like
   the monitor should be sent address to be assigned by the Client.  Once Agent or if this Monitor's NOTIFY is completed an error.
   Rather than creating a specific command for assigning the Monitor
      is automatically de-registered, (4) Threshold reporting specifies
      one or both of IP a low and high threshold.  When these values are
      crossed bit
   position in a corresponding NOTIFY COMMAND_SET is reserved for Agent based IP assignment.
   Alternatively, an entity could be sent to in an update operation that
   would be considered incomplete, e.g.  missing some required data in
   for the Client.  All
      monitored entity, but has sufficient data can be requested by to complete the Client at any time using instructions
   provided in the PROBE message.  Thus, reporting configuration COMMAND_SET.

5.1.1.4.  Reference Scope

   The Reference Scope is an optional and
      when not present only PROBE messages may be feature that provides the scope of
   references used for monitoring.
      If in a SCHEDULED or PERIODIC configuration is provided during
      registration with the time related value (time command, i.e. CONFIG or period
      respectively) of 0 a NOTIFY is immediately sent and the monitor is
      immediately de-registered.  This method should when a MONITOR has
      not been installed, an immediate NOTIFY is sufficient for the
      Client's needs and the Client has
   CONFIG_BUNDLES.  These scopes are defined as

   o  none - all entities have no further need for the monitor references to be registered.  An Agent may reject a registration if it or the
      DPN has insufficient resources. other entities.  This
      implies only Contexts are present Ports MUST have references to
      Policy-Groups.

   o  MONITOR_DEREG  op - Used by a Client to remove a monitor from an
      Agent.  The message identifies one or multiple monitors by
      including All references are contained in the MONITOR_ID.  The message also includes an optional
      Boolean operation body, i.e. only
      intra-operaion references exist.

   o  bundle - All references in exist in bundle (inter-operation/intra-
      bundle).  NOTE - If this value that, when true, will result comes in NOTIFY messages
      being sent for the MONITOR_ID to the Client.  When a monitor has a
      reporting configuration of SCHEDULED CONFIG call it is automatically de-
      registered after the NOTIFY occurs.  An Agent or DPN may
      temporarily suspend monitoring if insufficient resources exist.
      In such a case the Agent MUST notify the Client.
      equivalent to 'op'.

   o  PROBE  storage - Used by a Client to retrieve information about a
      previously installed monitor.  The PROBE message SHOULD identify
      one One or more monitors by means references exist outside of including the associated monitor
      identifier.  An Agent receiving a PROBE message SHOULD send the
      requested information in operation
      and bundle.  A lookup to a single or multiple NOTIFY messages. cache / storage is required.

   o  NOTIFY  unknown - Used by an Agent to report the status location of a monitor to a
      Client.  This message contains the MONITOR_ID, a NOTIFICATION_ID
      to permit the Client to distinguish amongst many monitoring
      related requests, references are unknown.  This is
      treated as a TRIGGER that caused the NOTIFY message, 'storage' type.

   If supported by the
      timestamp of Agent, when cloning instructions are present, the monitored information was record for the
      message along with the value of
   scope MUST NOT be 'none'.  When Ports are present the monitored attribute.

   o  QUERY - Used by an Agent to request an update of port properties
      via a Client.  The Agent adds one scope MUST be
   'storage' or multiple port identifiers to
      the QUERY message to request all properties associated with the
      identified port(s).  The Agent MAY request the update of
      particular properties associated with a port by including the
      property and its identifier.  As result of processing a QUERY
      message, the Client sends one 'uknown'.

   An agent that only accepts 'op' or multiple PROP_MOD 'bundle' reference scope messages with
      the requested properties
   is referred to the Agent.

   All as 'stateless' as it has no direct memory of
   references outside messages sent from a Client to themselves.  This permits low memory
   footprint Agents.  Even when an Agent MUST supports all message types an
   'op' or 'bundle' scoped message can be acknowledged processed quickly by the Agent.  The response must include all attributes as well Agent
   as
   status information, which indicates the it does not require storage access.

5.1.1.5.  Operation Response

5.1.1.5.1.  Immediate Response

   Results will be supplied per operation input.  Each result of processing contains
   the
   message, using RESULT_STATUS and OP_ID that it corresponds to.  RESULT_STATUS
   values are:

      OK - SUCCESS

      ERR - An Error has occurred

      OK_NOTIFY_FOLLOWS - The Operation has been accepted by the RESULT property.  In case Agent
      but further processing is required.  A CONFIG_RESULT_NOTIFY will
      be sent once the processing has succeeded or failed.

   Any result MAY contain nothing or a entities created or partially
   fulfilled as part of the
   message results operation as specified in a failure, the Agent sets Table 14.  For
   Clients that need attributes back quickly for call processing, the RESULT accordingly
   AGENT MUST respond back with an OK_NOTIFY_FOLLOWS and MAY clear minimally the property or traffic descriptor, which caused
   attributes assigned by the
   failure, Agent in the response.

   A Client MAY add a property to a port without providing all required
   details  These situations
   MUST be determined through the use of Command Sets (see
   Section 5.1.1.3).

   If an error occurs the attribute's value.  In such case following information is returned.

      ERROR_TYPE_ID (Unsigned 32) - The identifier of a specific error
      type

      ERROR_INFORMATION - An OPTIONAL string of no more than 1024
      characters.

5.1.1.5.2.  Asynchronous Notification

   A CONFIG_RESULT_NOTIFY occurs after the Agent SHOULD
   determine the missing details and provide the has completed property
   description back
   processing related to the Client.  In case a CONFIG or CONFIG_BUNDLES request.  It is an
   asynchronous communication from the Agent cannot determine to the missing value Client.

   The values of an attribute's value per the Client's request,
   it leaves the attribute's value cleared CONFIG_RESULT_NOTIFY are detailed in the response and sets the
   RESULT to failure.  As example, the Control-Plane needs to setup Table 15.

5.1.2.  Monitors

   When a
   tunnel configuration in the Data-Plane but monitor has to rely on a reporting configuration of SCHEDULED it is
   automatically de-registered after the NOTIFY occurs.  An Agent
   to determine or DPN
   may temporarily suspend monitoring if insufficient resources exist.
   In such a case the tunnel endpoint which is associated with Agent MUST notify the DPN
   that enforces Client.

   All monitored data can be requested by the rule.  The Client adds the tunnel property
   attribute to at any time using
   the FPC message PROBE message.  Thus, reporting configuration is optional and clears
   when not present only PROBE messages may be used for monitoring.  If
   a SCHEDULED or PERIODIC configuration is provided during registration
   with the time related value (time or period respectively) of 0 a
   NOTIFY is immediately sent and the attribute
   (e.g.  IP address of the local tunnel endpoint).  The Agent
   determines monitor is immediately de-
   registered.  This method should, when a MONITOR has not been
   installed, result in an immediate NOTIFY sufficient for the tunnel endpoint Client's
   needs and includes lets the completed tunnel
   property in its response to Agent realize the Client.

   The following list provides information on the use and semantics of
   attributes Client has no further need for traffic treatment:

   o  PROP_TUN - Defines
   the properties for encapsulation into different
      tunnel headers.  The property includes IP address information of
      tunnel endpoints as well as monitor to be registered.  An Agent may reject a type identifier specifying registration if
   it or the
      encapsulation type.  Further attributes may be included DPN has insufficient resources.

   PROBE messages are also used by a Client to provide retrieve information which is relevant for the configuration and
      initialization
   about a previously installed monitor.  The PROBE message SHOULD
   identify one or more monitors by means of including the tunnel.

   o  PROP_REWR - Defines the properties for IP address and port re-
      write.

   o  PROP_QOS - Defines associated
   monitor identifier.  An Agent receiving a PROBE message sends the QoS properties
   requested information in terms of a known index
      type, e.g.  LTE's Quality Class Index (QCI), and its value (QCI
      1..9), as well as a Differentiated Services Code Point (DSCP) to
      classify and mark packets.  Additional QoS attributes may follow,
      to define Guaranteed Bit Rate (GBR) and Maximum Bit Rate (MBR)
      bounds.  PROP_QOS_GBR and PROP_QOS_MBR attributes can apply to a single port or multiple ports.  The latter is required to
      configure aggregate bounds, such as Aggregate Maximum Bit Rate
      (AMBR), taking traffic, which is forwarded through different ports
      (hence experiencing different treatment), into account.  In such
      case the GBR/MBR attributes append multiple PRT_ID attributes to NOTIFY messages.

5.2.  Protocol Operation

5.2.1.  Simple RPC Operation

   An FPC Client and Agent MUST identify themself using the ports which are to be monitored CLI_ID and
   AGT_ID respectively to determine ensure that for all transactions a recipient
   of an FPC message can unambiguously identify the
      aggregated view sender of the bit rate.  As alternative FPC
   message.  A Client MAY direct the Agent to binding enforce a
      PROP_QOS_MBR property to each port whose traffic is to be taken
      into account for Aggregate Maximum Bitrate (AMBR) metering, rule in a
      Client can create
   particular DPN by including a separate port with DPN_ID value in a single PROP_QOS_MBR
      property.  Other ports, whose traffic is to be metered per Context.  Otherwise
   the
      AMBR, can refer Agent selects a suitable DPN to enforce a Context and notifies
   the port with Client about the PROP_QOS_MBR property selected DPN using the PROP_CONCAT property.  The scope of attributes for QoS is
      aligned DPN_ID.

   All messages sent from a Client to [RFC7222]. an Agent MUST be acknowledged by
   the Agent.  The Allocation and Retention Priority (ARP) response must include all entities as per [RFC7222] is not present in well as status
   information, which indicates the list result of QoS-specific
      attributes, since ARP is treated and kept in processing the Control-Plane for
      granting requests for new resources and QoS, as well as for
      preempting other QoS configuration, if needed.

   o  PROP_QOS_GBR - Defines message,
   using the GBR bound for traffic associated with a
      port.

   o  PROP_QOS_MBR - Defines RESPONSE_BODY property.  In case the MBR bound for traffic associated with a
      port.

   o  PROP_GW - Defines a Next Hop IP address, to which packets are
      forwarded.  Using this attribute, processing of the Control-Plane can configure
      a host-route
   message results in the Data-Plane to deviate from default routes.

   o  PROP_CPY_FORW - Refers to a different port failure, the Agent sets the ERROR_TYPE_ID and results
   ERROR_INFORMATION accordingly and MAY clear the Context or Port,
   which caused the failure, in
      treatment the response.

   If based upon Agent configuration or the processing of the request
   possibly taking a copy significant amount of packets per time the properties bound to Agent MAY respond
   with an OK_NOTIFY_FOLLOWS with an optional RESPONSE_BODY containing
   the
      referred port.

   o  PROP_DROP - Defines a treatment action to drop packets paritially completed entities.  When an OK_NOTIFY_FOLLOWS is
   sent, the Agent will, upon completion or failure of traffic
      associated the operation,
   respond with an asynchronous CONFIG_RESULT_NOTIFY to the Client.

   A Client MAY add a port.  As example, this treatment action can be
      used property to enforce gating rules and filter traffic which does not
      match any traffic descriptor.

   o  PROP_CONCAT - Traffic can be treated per properties bound to
      concatenated ports.  After treatment a Context without providing all
   required details of traffic according the attribute's value.  In such case the Agent
   SHOULD determine the missing details and provide the completed
   property description back to the
      properties of Client.  If the processing will take
   too long or based upon Agent configuration, the Agent MAY respond
   with an OK_NOTIFY_FOLLOWS with a port, additional treatment actions RESPONSE_BODY containing the
   paritially completed entities.

   In case the Agent cannot determine the missing value of an
   attribute's value per the
      properties bound to a separate port, which is referred to Client's request, it leaves the attribute's
   value cleared in the
      PROP_CONCAT property, apply to RESPONSE_BODY and sets the traffic. RESULT to Error,
   ERROR_TYPE_ID and ERROR_INFORMATION.  As example, port
      concatenation can be used the Control-Plane
   needs to enable AMBR metering setup a tunnel configuration in the Data-Plane but has to traffic
   rely on the Agent to determine the tunnel endpoint which is
   associated with multiple other ports.

   o  PROP_NSH - Defines the properties for a Network Service Header
      (NSH). DPN that supports the Context.  The header is included Client adds
   the tunnel property attribute to the classified IP flows.

   Unlike descriptors, overlapping or contradictory properties cannot be
   resolved by FPC message and clears the Agent.  For example, adding value
   of the attribute (e.g.  IP address translation
   related properties and a Drop property to a single port may result in
   needless activity in of the DPN or it may reflect a temporary
   administrative activity where local tunnel endpoint).
   The Agent determines the port must Drop traffic.  Other
   properties may be intentionally set, e.g. a property that invokes and
   accounting activity tunnel endpoint and a Drop includes the completed
   tunnel property present on in its response to the same port.
   The FPC Client MUST avoid situations where contradictory properties
   or those that result in unnecessary activity are added to ports.
   Rather, in such situations, multiple ports MUST be used.  In some
   obvious cases the Agent MAY raise a warning but a contradictory
   action.

   The following list provides information on the use and semantics of
   administrative properties:

   o  ADMIN_STATE - A Client can apply Client.

   Figure 17 illustrates an administrative state to a port
      indicating the desired operational status of a port (enabled,
      disabled, virtual).  An Agent, which receives a message without
      ADMIN_STATE property, SHOULD consider the port to be 'enabled'.

   o  SESSION_STATE - A Client can indicate to the Agent the status of a
      rule to serve Data-Plane traffic.  A exemplary session state 'complete'
      confirms that a rule is valid life-cycle based on Proxy
   Mobile IPv6 registration via MAG Control-Plane function 1 (MAG-C1)
   and ready to serve Data-Plane
      traffic.  A session state 'incomplete' hints handover to MAG Control-Plane function 2 (MAG-C2).  Edge DPN1
   represents the Agent that
      more FPC message will arrive from the Client to complete a rule, Proxy CoA after attachment, whereas session state 'outdated' requires Edge DPN2 serves
   as Proxy CoA after handover.  As exemplary architecture, the FPC
   Agent to solicit an
      update of the rule from the Client in case a rule with session
      state 'complete' is desired.  An Agent, which receives a message
      without SESSION_STATE property, SHOULD assume the session state is
      'complete'.

   o  CLONE_REF - Instead of repeatedly sending all properties and
      traffic descriptors for similar rules, a Client can take a clone
      of a previously configured rule as base for a new one by using the
      CLONE_REF property with a PRT_ADD message and refer network control function are assumed to an existing
      port.  The cloned port will be a copy of the referred port and
      serve as base for co-located
   with the new port.  The cloned port will have its own
      port identifier, which will also be present in the port identifier
      portion of the property identifiers.  After Anchor-DPN, e.g. a cloned port has been
      created, it represents its own rule without any further dependency Router.

                                                 +-------Router--------+
                         +-----------+           |+-------+ +---------+|
 +------+ +------+     +-----+ FPC   |            | FPC   | |  Anchor |
 |MAG-C1| |MAG-C2|     |LMA-C| Client|            | Agent | |   DPN   |
 +------+ +------+     +-----+-------+            +-------+ +---------+
 [MN attach]  |            |                          |           |
    |-------------PBU----->|                          |           |
    |         |            |---(1)--CONFIG(CREATE)--->|           |
    |         |            |   [ CONTEXT_ID,          |--tun1 up->|
    |         |            |   DOWNLINK(QOS/TUN),     |           |
    |         |            |   UPLINK(QOS/TUN),       |--tc qos-->|
    |         |            |     IP_PREFIX(HNP) ]     |           |
    |         |            |<---(2)- OK --------------|-route add>|
    |         |            |                          |           |
    |<------------PBA------|                          |           |
    |         |            |                          |           |
    | +----+  |            |                          |           |
    | |Edge|  |            |                          |           |
    | |DPN1|  |            |                          |           |
    | +----+  |            |                          |           |
    |   |                                                         |
    |   |-=======================================================-|
    |                      |                          |           |
    |   [MN handover]      |                          |           |
    |         |---PBU ---->|                          |           |
    |         |            |--(3)- CONFIG(MODIFY)---->|           |
    |         |<--PBA------|    [ CONTEXT_ID          |-tun1 mod->|
    |         |            |      DOWNLINK(TUN),      |           |
    |         |  +----+    |      UPLINK(TUN) ]       |           |
    |         |  |Edge|    |<---(4)- OK --------------|           |
    |         |  |DPN2|    |                          |           |
    |         |  +----+    |                          |           |
    |         |    |       |                          |           |
    |         |    |-============================================-|
    |         |            |                          |           |

   Figure 17: Exemplary Message Sequence (focus on the FPC reference port point)

   After reception of the Proxy Binding Update (PBU) at the LMA Control-
   Plane function (LMA_C), the LMA-C selects a suitable DPN, which served
   serves as source to create the clone.
      A Client MAY apply updates Data-Plane anchor to existing properties of the mobile node's (MN) traffic.  The
   LMA-C adds a new port,
      as well as delete or add properties.  Updates logical Context to the port in terms
      of new or changed properties and traffic descriptors MAY already
      come with the PRT_ADD message or subsequently using messages DPN to
      handle properties and traffic descriptors.  A Client can use treat the
      CLONE_REF property with messages to handle properties and MN's traffic
      descriptors to achieve a different result.  In such case these
      messages identify an existing port already
   (1) and processing the
      CLONE_REF property on the receiving Agent will result in includes a reset
      of the identified port Context Identifier (CONTEXT_ID) to match the CONFIGURE
   command.  The LMA-C identifies the selected Anchor DPN by including
   the associated DPN identifier.

   The LMA-C adds properties during the creaton of the port
      referred new Context.  One
   property is added to in specify the CLONE_REF property.

   o  ACT_DELAY - A Client can use this forwarding tunnel type and endpoints
   (Anchor DPN, Edge DPN1) in each direction (as required).  Another
   property is added to define a delay in ms
      before an updated rule takes effect at an Agent, e.g. an
      administrative state 'enabled' will be enforced by specify the Agent after QoS differentiation, which the delay per MN's
   traffic should experience.  At reception of the Client's request.

   o  PRT_BIDIR - A Client uses this property to indicate to an Context, the FPC
   Agent utilizes local configuration commands to
      apply a rule associated with a port bi-directionally.  In case create the
      PRT_BIDIR property is absent in a message, tunnel
   (tun1) as well as the traffic control (tc) to enable QoS
   differentiation.  After configuration has been completed, the Agent assumes a
      rule
   applies uni-directionally.

   o  RESULT - An Agent uses this property a new route to signal forward all traffic destined to the Client in MN's HNP
   specified as a
      response property in the Context to the configured tunnel
   interface (tun1).

   During handover, the LMA-C receives an updating PBU from the result of processing a message.

   Figure 14 illustrates an exemplary session life-cycle based on Proxy
   Mobile IPv6 registration via MAG Control-Plane function 1 (MAG-C1)
   and handover
   target MAG-C2.  The PBU refers to MAG Control-Plane function 2 (MAG-C2).  Edge DPN1
   represents a new Data-Plane node (Edge DPN2)
   to represent the Proxy CoA after attachment, whereas Edge DPN2 serves new tunnel endpoints in the downlink and uplink, as Proxy CoA after handover.  As exemplary architecture,
   requried.  The LMA-C sends a CONFIGURE message (3) to the FPC Agent to
   modify the existing tunnel property of the existing Context and to
   update the network control function are assumed tunnel endpoint from Edge DPN1 to be co-located
   with Edge DPN2.  Upon
   reception of the Anchor-DPN, e.g. a Router. CONFIGURE message, the Agent applies updated tunnel
   property to the local configuration and responds to the Client (4).

                                                 +-------Router--------+
                         +-----------+           |+-------+ +---------+|
 +------+ +------+     +-----+ FPC   |            | FPC   | |  Anchor |
 |MAG-C1| |MAG-C2|     |LMA-C| Client|            | Agent | |   DPN   |
 +------+ +------+     +-----+-------+            +-------+ +---------+
 [MN attach]  |            |                          |           |
    |-------------PBU----->|                          |           |
    |         |            |----(1)-PRT_ADD---------->|            |---(1)--CONFIG(MODIFY)--->|           |
    |         |            |        [PRT_ID]          |           |
    |         |            |                          |           |
    |         |            |--(2)---PROP_ADD--------->|           |
    |         |            |   [PRT_ID,PROP_TUN]
    |<------------PBA------|   [ CONTEXT_ID,          |--tun1 up->|
    |         |            |                          |           |
    |         |            |--(3)---PROP_ADD--------->|           |
    |         |            |    [PRT_ID,PROP_QOS]     |--tc qos-->|
    |<------------PBA------|--(4)----TS_ADD---------->|           |
    | +----+  |            |       [PRT_ID,           |-route add>|
    | |Edge|  |            |    TD_CONTAINER(HNP)]    |           |
    | |DPN1|  |            |                          |           |
    | +----+  |            |                          |           |
    |   ->|
    |         |            |   |-=======================================================-|
    |   DOWNLINK(TUN delete),  |    down   |
    |         |   [MN handover]            |   UPLINK(TUN delete) ]   |           |
    |         |---PBU ---->|         |            |                          |           |            |--(5)---PROP_MOD--------->|
    |         |         |<--PBA------|    [PRT_ID,PROP_TUN]     |-tun1 mod->|            |<-(2)- OK ----------------|           |
    |         |            |                          |           |
    |  +----+         |  [ MinDelayBeforeBCEDelete expires ]  |           |
    |         |  |Edge|            |                          |           |
    |         |  |DPN2|            |---(3)--CONFIG(DELETE)--->|-- tun1 -->|
    |         |            |                          |  delete   |  +----+
    |         |            |<-(4)- OK ----------------|           |
    |         |            |                          |-- route ->|
    |         |            |                          |   remove  |    |-============================================-|
    |         |            |                          |           |

   Figure 14: 18: Exemplary Message Sequence (focus on FPC reference point)

   After reception

   When a teardown of the Proxy Binding Update (PBU) at the LMA Control-
   Plane function (LMA_C), the LMA-C selects session occurs, MAG-C1 will send a suitable DPN, which
   serves as Data-Plane anchor to the mobile node's (MN) traffic. PBU with a
   lifteime value of zero.  The LMA-C adds sends a new logical port CONFIGURE message (1) to
   the DPN Agent to treat modify the MN's traffic
   (1) and includes a Port Identifier (PRT_ID) to the PRT_ADD command.
   The LMA-C identifies the selected Anchor DPN by including the
   associated DPN identifier.

   Subsequently, the LMA-C adds properties to the new port.  One
   property is added (2) to specify the forwarding existing tunnel type and
   endpoints (Anchor DPN, Edge DPN1).  Another property is added (3) to
   specify of the QoS differentiation, which existing
   Context to delete the MN's traffic should
   experience.  At tunnel information.)  Upon reception of the properties,
   CONFIGRE message, the FPC Agent utilizes
   local configuration commands to create removes the tunnel (tun1) as well as
   the traffic control (tc) to enable QoS differentiation.  After configuration of port properties have been completed, the LMA binds
   the traffic description for the MN's traffic to the port by sending a
   TS_CONTAINER and
   responds to the Agent and identifying Client (2).  Per [RFC5213], the MN's Nome Network
   Prefix (HNP) in PBA is sent back
   immediately after the traffic descriptor.  At PBA is received.

   If no valid PBA is recieved after the reception expiration of the
   traffic descriptor, the Agent applies a new route to forward all
   traffic destined to the MN's HNP to the configured tunnel interface
   (tun1).

   During handover, the LMA-C receives an updating PBU from the handover
   target MAG-C2.  The PBU refers to a new Data-Plane node (Edge DPN2)
   to represent
   MinDelayBeforeBCEDelete timer (see [RFC5213]), the new tunnel endpoint.  The LMA-C sends will send a PROP_MOD
   CONFIGURE (3) message (5) to the Agent to modify the existing tunnel property of
   the existing port and to update with a deletion request for the tunnel endpoint from Edge DPN1 to
   Edge DPN2. Context.  Upon
   reception of the PROP_MOD message, the Agent applies
   updated tunnel property to the local configuration.

   To reduce the number of protocol handshakes between deletes the LMA-C tunnel and route on
   the
   DPN, the LMA-C can append properties (PROP_TUN, PROP_QOS) DPN and traffic
   descriptor attributes responds to the PRT_ADD message, as illustrated in
   Figure 15.

                         +-----------+             +-------+ +---------+
 +------+ +------+     +-----+ FPC   |             | Client (4).

5.2.2.  Policy And Mobility on the Agent

   A Client may build Policy and Topology using any mechanism on the
   Agent.  Such entities are not always required to be constructed in
   realtime and, therefore, there are no specific messages defined for
   them in this specification.

   The Client may add, modify or delete many Ports and Contexts in a
   single FPC   | |  Anchor |
 |MAG-C1| |MAG-C2|     |LMA-C| Client|             | message.  This includes linking Contexts to Actions and
   Descriptors, i.e. a Rule.  As example, a Rule which performs re-
   writing of an arriving packet's destination IP address from IP_A to
   IP_B matching an associated Descriptor, can be enforced in the Data-
   Plane via an Agent to implicitly consider matching arriving packet's
   source IP address against IP_B and re- write the source IP address to
   IP_A.

   Figure 19 illustrates the generic policy configuration model as used
   between a FPC Client and a FPC Agent.

           Descriptor_1 -+          +- Action_1
                         |          |   DPN   |
           Descriptor_2 -+--<Rule>--+- Action_2
                           +------+
                           /Order#/-------------+
                           +------+     +-----+-------+             +-------+ +---------+
 [MN attach]  |            |                           |           |
    |-------------PBU----->|                           |           |
    |         |            |----(1)-PRT_ADD----------->|           |
    |         |            |      [PRT_ID,PROP_TUN,    |--tun1 up->|
    |<------------PBA------|              PROP_QOS,    |--tc qos-->|
    |         |            |       TS_CONTAINER(HNP)]  |-route add>|
    | [Edge]-=====================================================-|
    | [DPN1|  |             |
                                                |
           Descriptor_3 -+          +- Action_3 +-<PolicyID>
                         |          |           |  ^
           Descriptor_4 -+--<Rule>--+- Action_4 |  |
                           +------+             | <PolicyGroupID>
                           /Order#/-------------+  ^
                           +------+                |   [MN handover]
                                                  <PortID>

           +-------------------+     +---------------------+
           | Bind 1..M traffic |     |  Bind 1..N traffic  |         |---PBU ---->|
           |  Descriptors to   | --> |  treatment actions  |            |---------PROP_MOD--------->|
           |     a Policy,     |         |<--PBA------|     [PRT_ID,PROP_TUN]     |-tun1 mod->|     |      to a Policy,   |
           | Policy-Group and  |     |   Policy-Group and  |
           | [Edge]-===========================================-|       Port        |     | [DPN2]       Port          |
           +-------------------+     +---------------------+

          |                                                 |
          +-------------- Data-Plane Rule ------------------+

                Figure 15: Example: Sequence for Message Aggregation (focus on FPC
                             reference point)

5.  Protocol 19: Structure of Policies and Ports

   As depicted in Figure 19, the Port represents the anchor of Rules
   through the Policy-group, Policy, Rule heirarchy configured by any
   mechanism including RPC or N.  A Client and Agent use the identifier
   of the associated Policy to support Model II

5.1.  Protocol Attributes

 +---------------------------------------------------------------------+
 |    Attribute        | Format               |      Description       |
 +=====================================================================+
 |                        IP Tunnel Attributes                         |
 +---------------------------------------------------------------------+
 |TUN_SRC_IP_ADDR      |[IP address]          | Tunnel Source IP       |
 |                     |                      |                        |
 +---------------------------------------------------------------------+
 |TUN_DST_IP_ADDR      |[IP address]          | Tunnel Destination IP  |
 |                     |                      |                        |
 +---------------------------------------------------------------------+
 |TUN_ENCAP_TYPE       |[ENCAP_GRE, ENACP_UDP,| Encapsulation Type     |
 |                     | ENCAP_IP]            |                        |
 +---------------------------------------------------------------------+
 |TUN_TYPE_UDP         |[SRC_PRT, DST_PRT]    | UDP Direction - Source |
 |                     |                      | directly access the Rule and perform
   modifications of traffic Descriptors or Destination         |
 +---------------------------------------------------------------------+
 |TUN_TYPE_GRE         |[UPLINK_GRE_KEY,      | GRE Tunnel Type        |
 |                     | DOWNLINK_GRE_KEY]    |                        |
 +---------------------------------------------------------------------+
 |TUN_IF_MTU           |[MTU]                 | Tunnel Interface MTU   |
 |                     |                      |                        |
 +---------------------------------------------------------------------+
 |TUN_PAYLOAD_TYPE     |[PAYLOAD_IPV4,        | Tunnel Payload Type    |
 |                     | PAYLOAD_IPV6,        |                        |
 |                     | PAYLOAD_DUAL]        |                        |
 +---------------------------------------------------------------------+
 |TUN_VENDOR_SPEC_PARAM|[OPAQUE]              | Tunnel Vendor Specific |
 |                     |                      | Parameters             |
 +---------------------------------------------------------------------+
 |                    Route Management Attributes                      |
 +---------------------------------------------------------------------+
 |INPUT_IF             |[IF_INDEX]            |Input Interface         |
 |                     |                      |                        |
 +---------------------------------------------------------------------+
 |OUTPUT_IF            |[IF_INDEX]            |Output Interface        |
 |                     |                      |                        |
 +---------------------------------------------------------------------+
 |NEXT_HOP_IP_GW_ADDR  |[IP address]          |Next Hop IP Gateway     |
 |                     |                      |Address                 |
 +---------------------------------------------------------------------+
 |TRAFFIC_SELECTOR_ACL |TBD                   |                        |
 |                     |                      |                        |
 +---------------------------------------------------------------------+
 |DST_IP_SUBNET        |[IP prefix]           |Destination IP Subnet   |
 |                     |                      |                        |
 +---------------------------------------------------------------------+
 |DST_IP_SUBNET_MASK   |[IP prefix]           |Destination IP Subnet   |
 |                     |                      |Mask                    |
 +---------------------------------------------------------------------+
 |                          QoS Attributes                             |
 +---------------------------------------------------------------------+
 |AMBR                 |[Unsigned Integer     |Aggregate Maximum       |
 | Action references.  A Client
   and Agent use the identifiers to access the Descriptors or Actions to
   perform modifications.  From the viewpoint of packet processing,
   arriving packets are matched against traffic Descriptors and
   processed according to the treatment Actions specified in the list of
   properties associated with the Port.

   A Client complements a rule's Descriptors with a Rule's Order
   (priority) value to allow unambiguous traffic matching on the Data-
   Plane.

   Figure 20 illustrates the generic context configuration model as used
   between a FPC Client and a FPC Agent.

             TrafficSelector_1
                      | (32 bit)]            |Bitrate
             profile-parameters
                      |
 +---------------------------------------------------------------------+
 |GBR                  |[Unsigned Integer     |Guaranteed Bitrate
             mobility-profile-- dl ------+
                                ^        |
                                |      qos-profile
                           <ContextID1>       | (32 bit)]
                                ^        per-mn-agg-max-dl_2
                                |
                           <ContextID2>

             +-------------------+     +---------------------+
             |
 +---------------------------------------------------------------------+
 |TCLASS               |[Unsigned Integer     |Traffic Class Bind 1..M traffic |     |  Bind 1..N traffic  | (32 bit)]
             |    selectors to   |
 +---------------------------------------------------------------------+
 |TFT                  |TBD                   |Traffic Flow Template --> |  treatment / qos    |
             |     a Context     |     |
 +---------------------------------------------------------------------+  actions to a       |                       Optional Attributes
             |
 +---------------------------------------------------------------------+
 |NSH_HEADER           |[Service Path Id]     |NSH Header                   |     |       Context       | Service Index, TFT]
             +-------------------+     +---------------------+

            |                                                 |
 +---------------------------------------------------------------------+
            +-------------- Data-Plane Rule ------------------+

                     Figure 16: Model II Protocol Attributes: Traffic Treatment

 +---------------------------------------------------------------------+
 |    Attribute      |        Format        |          Description     |
 +=====================================================================+
 |                            Identifier                               |
 +---------------------------------------------------------------------+
 |TUNNEL_IF_ID       |[IF_INDEX]            |Tunnel Interface 20: Structure of Contexts

   As depicted in Figure 20, the Context represents a mobiility session
   heirarchy.  A Client and Agent directly assigns values such as
   dowlink traffic descriptors, QoS information, etc.  A Client and
   Agent use the context identifiers to access the descriptors, qos
   information, etc. to perform modifications.  From the viewpoint of
   packet processing, arriving packets are matched against traffic
   Descriptors and processed according to the qos or other mobility
   profile related Actions specified in the Context's properties.  If
   present, the final action is to use a Context's tunnel information to
   encapsulate and forward the packet.

   A second Context also references context1 in the figure.  Based upon
   the techology a property in a parent context MAY be inherited by its
   descendants.  This permits concise over the wire representation.
   When a Client deletes a parent Context all children are also deleted.

5.2.3.  Optimization for Current and Subsequent Messages

5.2.3.1.  Bulk Data in a Single Operation

   A single operation MAY contain multiple entities.  This permits
   bundling of requests into a single operation.  In the example below
   two PMIP sessions are created via two PBU messages and sent to the
   Agent in a single CONFIGURE message (1).  Upon receiveing the
   message, the Agent responds back with an OK_NOTIFY_FOLLOWS (2),
   completes work on the DPN to activate the assocaited sessions then
   responds to the Client wiht a CONFIG_RESULT_NOTIFY (3).

                                                 +-------Router--------+
                         +-----------+           |+-------+ +---------+|
 +------+ +------+     +-----+ FPC   |            | FPC   |                      |Identifier |
 +---------------------------------------------------------------------+
 |VRF_ID             |[Unsigned INT]        |VRF Identifier  Anchor |
 +---------------------------------------------------------------------+
 |PBR_ID             |[Unsigned INT]        |Policy Based Routing
 |MAG-C1| |MAG-C2|     |LMA-C| Client|            | Agent | |                      |Identifier   DPN   |
 +---------------------------------------------------------------------+
 |CTRL_PLANE_ID      |IP address            |Control-Plane Identifier
 +------+ +------+     +-----+-------+            +-------+ +---------+
 [MN1 attach] |
 +---------------------------------------------------------------------+
 |CONTEXT_ID         |TBD                   |Context Identifier            |
 +---------------------------------------------------------------------+
 |QOS_SERVICE_ID     |[Unsigned INT]        |QoS Service Identifier                          |
 +---------------------------------------------------------------------+
 |SESSION_ID         |[Unsigned INT]        |Session Identifier           |
 +---------------------------------------------------------------------+
 |ROUTE_ID           |[Unsigned INT]        |Route Identifier
    |-------------PBU----->|                          |
 +---------------------------------------------------------------------+           |                        Optional Identifiers
    |
 +---------------------------------------------------------------------+
 |SERVICE_PATH_ID    |[24-bit identifier]   |Service Path Identifier  [MN2 attach]        |
 +---------------------------------------------------------------------+

           Figure 17: Model II Protocol Attributes: Identifiers

5.2.  Protocol Messages and Semantics

 +---------------------------------------------------------------------+                          |         Message           |              Description
    |
 +=====================================================================+         |---PBU----->|                          |                    Tunnel Interface Management           |
 +---------------------------------------------------------------------+
    | CREATE_TUNNEL_IF         | Create a Tunnel Interface            |
 +---------------------------------------------------------------------+                          | DELETE_TUNNEL_IF           | Delete a Tunnel Interface
    |
 +---------------------------------------------------------------------+         | UPDATE_TUNNEL_PARAMETER            |---(1)--CONFIG(CREATE)--->|           | Update a parameter of the specified
    |<------------PBA------|   [ CONTEXT_ID 1,        |--tun1 up->|
    |         |            | tunnel   DOWNLINK(QOS/TUN),     |
 +---------------------------------------------------------------------+           | QUERY_TUNNEL_IF
    | Request Tunnel Interface information         |<--PBA------|   UPLINK(QOS/TUN),       |--tc1 qos->|
    |
 +---------------------------------------------------------------------+         |                      Policy Route Management            |
 +---------------------------------------------------------------------+     IP_PREFIX(HNP) ]     | CREATE_POLICY_ROUTE           | Create a Policy-based Route
    |
 +---------------------------------------------------------------------+         | DELETE_POLICY_ROUTE            | Deletes a Policy-based Route   [ CONTEXT_ID 2,        |-route1    |
 +---------------------------------------------------------------------+
    | ADD_TRAFFIC_SELECTOR         | Adds a Traffic Selector to a Policy-            |   DOWNLINK(QOS/TUN),     |   add>    | based Route
    |
 +---------------------------------------------------------------------+         | DELETE_TRAFFIC_SELECTOR            | Removes a Traffic Selector from   UPLINK(QOS/TUN),       |           |
    | a Policy-based Route         |
 +---------------------------------------------------------------------+            | QUERY_POLICY_ROUTE     IP_PREFIX(HNP) ]     |--tun2 up->|
    | Request Policy Route information         |
 +---------------------------------------------------------------------+            |<-(2)- OK_NOTIFY_FOLLOWS--|           |                        IP Route Management
    |
 +---------------------------------------------------------------------+         | CREATE_IP_ROUTE            | Create an IP Route                          |--tc2 qos->|
    |<------------PBA------|                          |
 +---------------------------------------------------------------------+           | DELETE_IP_ROUTE
    | Delete an IP Route         |
 +---------------------------------------------------------------------+            | QUERY_IP_ROUTE                          |-route2    | Request IP Route information
    |
 +---------------------------------------------------------------------+         |                        IP QoS Management            |<(3) CONFIG_RESULT_NOTIFY |
 +---------------------------------------------------------------------+   add>    | ALLOCATE_QOS_RESOURCES
    | Allocates QoS Resources, e.g. AMBR, to         |            |   [ Response Data ]      |           |
    |         | the specified Session / Context            |
 +---------------------------------------------------------------------+                          | DEALLOCATE_QOS_RESOURCES           | Removes applies QoS Resources from
    |         |            |                          |           |

      Figure 21: Exemplary Bulk Entity with Asynchronous Notification
                  Sequence (focus on FPC reference point)

5.2.3.2.  Configuration Bundles

   Bundles provide transaction boundaries around work in a single
   message.  Operations in a bundle MUST be successfully executed in the specified Session /
   order specified.  This allows references created in one operation to
   be used in a subsequent operation in the bundle.

   The example bundle shows in Operation 1 (OP 1) the creation of a
   Context 1 which is then referenced in Operation 2 (OP 2) by
   CONTEXT_ID 2.  If OP 1 fails then OP 2 will not be executed.  The
   advantage of the CONFIGURE_BUNDLES is preservation of dependency
   orders in a single message as opposed to sending multiple CONFIGURE
   messages and awaiting results from the Agent.

   When a CONFIGURE_BUNDLES fails, any entities provisioned in the
   CURRENT operation are removed, however, any successful operations
   completed prior to the current operation are preserved in order to
   reduce system load.

                                      +-------Router--------+
              +-----------+           |+-------+ +---------+|
              |
 +---------------------------------------------------------------------+   FPC     |                       Optional Management            |
 +---------------------------------------------------------------------+ FPC   | ADD_NSH_HEADER | Add NSH Header for the classified  Anchor |
              |  Client   | IP flows            |
 +---------------------------------------------------------------------+ Agent | | DELETE_NSH_HEADER   DPN   |
              +-----------+            +-------+ +---------+
                   |                          |           |
                   |-CONFIG_BUNDLES(CREATE)-->|           |
                   |   [ OP 1, [PORT X ]      |           |
                   |   [ CONTEXT_ID 1,        |           |
                   |   DOWNLINK(QOS/TUN),     |           |
                   |   UPLINK(QOS/TUN),       |           |
                   |     IP_PREFIX(HNP) ]     |           |
                   |   [ OP 2,                |           |
                   |    [ CONTEXT_ID 2,       |           |
                   |   PARENT_CONTEXT_ID 1,   |           |
                   |   UPLINK(QOS/TUN),       |           |
                   |   DOWNLINK(QOS/TUN) ] ]  | Remove NSH Header for the classified           |
                   |                          | IP flows           |
 +---------------------------------------------------------------------+

    Figure 18: Model II Protocol Messages

5.3.  Protocol Operation 22: Exemplary Bundle Message (focus on FPC reference point)

5.2.3.3.  Cloning Feature (Optional)

   Cloning provides a high speed copy/paste mechanism.  The following list comprises example
   below shows a description of each message's
   semantic.

   o  CREATE_TUNNEL_IF - Message can include TUN_SRC_IP_ADDR,
      TUN_DST_IP_ADDR, TUN_ENCAP_TYPE, TUN_IF_ID, TUN_TYPE_UDP,
      TUN_TYPE_GRE, TUN_IF_MTU, TUN_PAYLOAD_TYPE, TUN_VENDOR_SPEC_PARAM,
      VRF_ID, CTRL_PLANE_ID, CONTEXT_ID.

   o  DELETE_TUNNEL_IF - Message can include TUN_SRC_IP_ADDR,
      TUN_DST_IP_ADDR, TUN_ENCAP_TYPE, TUN_IF_ID, CTRL_PLANE_ID,
      CONTEXT_ID.

   o  UPDATE_TUNNEL_PARAMETER - Message can include TUN_SRC_IP_ADDR,
      TUN_DST_IP_ADDR, TUN_ENCAP_TYPE, TUN_IF_ID, TUN_IF_MTU,
      TUN_PAYLOAD_TYPE, TUN_VENDOR_SPEC_PARAM, CTRL_PLANE_ID,
      CONTEXT_ID.

   o  QUERY_TUNNEL_IF -

   o  CREATE_POLICY_ROUTE - Message can include INPUT_IF, OUTPUT_IF,
      NEXT_HOP_IP_GW_ADDR, VRF_ID, PBR_ID, CTRL_PLANE_ID, CONTEXT_ID.

   o  DELETE_POLICY_ROUTE - Message can include PBR_ID, CTRL_PLANE_ID,
      CONTEXT_ID.

   o  ADD_TRAFFIC_SELECTOR - Message can include TRAFFIC_SELECTOR_ACL,
      PBR_ID, CTRL_PLANE_ID, CONTEXT_ID.

   o  DELETE_TRAFFIC_SELECTOR - Message can include
      TRAFFIC_SELECTOR_ACL, PBR_ID, CTRL_PLANE_ID, CONTEXT_ID.

   o  QUERY_POLICY_ROUTE -

   o  CREATE_IP_ROUTE - Message can include DST_IP_SUBNET,
      DST_IP_SUBNET_MASK, OUTPUT_IF, VRF_ID, ROUTE_ID, CTRL_PLANE_ID,
      CONTEXT_ID.

   o  DELETE_IP_ROUTE - Message can include ROUTE_ID, CTRL_PLANE_ID,
      CONTEXT_ID.

   o  QUERY_IP_ROUTE -

   o  ALLOCATE_QOS_RESOURCES - Message can include AMBR, GBR, TCLASS,
      TFT, QOS_SERVICE_ID, CONTEXT_ID.

   o  DEALLOCATE_QOS_RESOURCES - Message can include Session_ID,
      QOS_SERVICE_ID, CONTEXT_ID.

   o  ADD_NSH_HEADER - Message can include SERVICE_PATH_ID,
      SERVICE_INDEX, TFT

   o  DELETE_NSH_HEADER - Message can include SERVICE_PATH_ID,
      SERVICE_INDEX, TFT

6.  Security Considerations

   Detailed protocol implementations for DMM Forwarding Policy
   Configuration must ensure integrity single Context that will be copied two times.  A
   subsequent update then overrides the value.  The avoid the accidental
   activation of the information exchanged
   between an FPC Client and an FPC Agent.  Required Security
   Associations may be derived from co-located functions, which utilize Contexts on the FPC Client and FPC Agent respectively.

7.  IANA Considerations

   This document provides a data model and protocol operation for DMM
   Forwarding Policy Configuration.  YANG models are currently included
   in DPN, the Appendix and will be updated per CONFIGURE (1) message with
   the next revision cloning instruction has a SESSION_STATE with a value of this
   document to specify the data model as well as to enable an
   implementation
   'incomplete' and OP_TYPE of 'CREATE'.  A second CONFIGURE (2) is sent
   with the FPC protocol using RPC.

   No actions from IANA are required.  In case the semantics SESSION_STATE of this
   specification will be mapped to a particular wire protocol, authors 'complete' and OP_TYPE of an associated separate document will approach IANA for the
   associated action to create a registry or add registry entries.

8.  Work Team Participants

   Participants in 'UPDATE'.  The
   second message includes any differences between the FPSM work team discussion include Satoru
   Matsushima, Danny Moses, Sri Gundavelli, Marco Liebsch, Pierrick
   Seite, Alper Yegin, Carlos Bernardos, Charles Perkins and Fred
   Templin.

9.  References

9.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <http://www.rfc-editor.org/info/rfc2119>.

   [RFC6088]  Tsirtsis, G., Giarreta, G., Soliman, H., and N. Montavont,
              "Traffic Selectors for Flow Bindings", RFC 6088,
              DOI 10.17487/RFC6088, January 2011,
              <http://www.rfc-editor.org/info/rfc6088>.

   [RFC7333]  Chan, H., Ed., Liu, D., Seite, P., Yokota, H., and J.
              Korhonen, "Requirements for Distributed Mobility
              Management", RFC 7333, DOI 10.17487/RFC7333, August 2014,
              <http://www.rfc-editor.org/info/rfc7333>.

   [RFC7429]  Liu, D., Ed., Zuniga, JC., Ed., Seite, P., Chan, H., and
              CJ. Bernardos, "Distributed Mobility Management: Current
              Practices and Gap Analysis", RFC 7429,
              DOI 10.17487/RFC7429, January 2015,
              <http://www.rfc-editor.org/info/rfc7429>.

9.2.  Informative References

   [RFC3344]  Perkins, C., Ed., "IP Mobility Support for IPv4",
              RFC 3344, DOI 10.17487/RFC3344, August 2002,
              <http://www.rfc-editor.org/info/rfc3344>.

   [RFC5213]  Gundavelli, S., Ed., Leung, K., Devarapalli, V.,
              Chowdhury, K., and B. Patil, "Proxy Mobile IPv6",
              RFC 5213, DOI 10.17487/RFC5213, August 2008,
              <http://www.rfc-editor.org/info/rfc5213>.

   [RFC7222]  Liebsch, M., Seite, P., Yokota, H., Korhonen, J., original (copied)
   Context and S.
              Gundavelli, "Quality-of-Service Option for Proxy Mobile
              IPv6", RFC 7222, DOI 10.17487/RFC7222, May 2014,
              <http://www.rfc-editor.org/info/rfc7222>.

Appendix A.  YANG Data Model for the its Clones.

                                      +-------Router--------+
              +-----------+           |+-------+ +---------+|
              |   FPC protocol

   These modules define Model I YANG definitions.  Four modules are
   defined:

   o  ietf-dmm-fpcp-base (fpcp-base) - Defines the base model for Model
      I     |            | FPC as defined in this document

   o  ietf-pmip-qos (pmip-qos) - Defines proxy mobile IPv6 QoS
      parameters per RFC 7222

   o  ietf-traffic-selectors-types (traffic-selectors) - Defines Traffic
      Selectors per RFC 6088

   o  ietf-dmm-fpcp-pmip - Augments fpcp-base to include PMIP Traffic
      Selectors as a Traffic Descriptor subtype and pmip-qos QoS
      parameters, where applicable, as properties.

   Note (2016-03-21): The YANG Data Model does not yet adopt all
   extensions per this version of the draft and will be updated shortly
   after the IETF95 meeting.

A.1.  FPC Base

A.1.1.  FPC Base YANG Model

  module ietf-dmm-fpcp-base {
      namespace "urn:ietf:params:xml:ns:yang:ietf-dmm-fpcp-base";
      prefix fpcp-base;

      import ietf-inet-types { prefix inet; }

      organization "IETF DMM Working Group";
      contact "Satoru Matsushima <satoru.matsushima@g.softbank.co.jp>";

      description
      "This module contains YANG definition for
       Forwarding Policy Configuration Protocol.(FPCP)";

      revision 2016-01-18 {
          description "Changes based   | |  Anchor |
              |  Client   |            | Agent | |   DPN   |
              +-----------+            +-------+ +---------+
                   |                          |           |
                   |-CONFIG_BUNDLES(CREATE)-->|           |
                   |   [ OP 1,                |           |
                   |    [ SESSION_STATE       |           |
                   |       (incomplete) ],    |           |
                   | [CLONE SRC=2, TARGET=3], |           |
                   | [CLONE SRC=2, TARGET=4], |           |
                   |    [ CONTEXT_ID 2,       |           |
                   |   PARENT_CONTEXT_ID 1,   |           |
                   |   UPLINK(QOS/TUN),       |           |
                   |   DOWNLINK(QOS/TUN),     |           |
                   |   IP_PREFIX(HNP)    ] ]  |           |
                   |<----- OK ----------------|           |
                   |                          |           |
                   |-CONFIG_BUNDLES(UPDATE)-->|           |
                   |    [ CONTEXT_ID 3,       |           |
                   | PARENT_CONTEXT_ID(empty),|           |
                   |   UPLINK(QOS/TUN),       |           |
                   |   DOWNLINK(QOS/TUN) ],   |           |
                   |    [ CONTEXT_ID 4,       |           |
                   | PARENT_CONTEXT_ID(empty),|           |
                   |   UPLINK(QOS/TUN),       |           |
                   |   DOWNLINK(QOS/TUN) ] ]  |           |
                   |<----- OK ----------------|           |
                   |                          |           |

    Figure 23: Exemplary Bundle Message (focus on -01 version of FPCP draft."; FPC reference "draft-ietf-dmm-fpc-cpdp-01";
      }

      typedef fpcp-name-type {
          type string;
          description "FPCP common name type";
      }

      typedef fpcp-carrier-id {
          type uint16;
          description "Carrier-ID";
      }

      typedef fpcp-network-id {
          type uint16;
          description "Carrier-ID";
      }

      typedef fpcp-client-id {
          type uint32;
          description "Client-ID";

      }

      typedef fpcp-agent-id {
          type uint32;
          description "Agent-ID";
      }

      typedef fpcp-dpn-id {
          type uint32;
          description "Carrier-ID";
      }

      typedef fpcp-port-id {
          type uint32;
          description "PRT_ID";
      }

      typedef fpcp-property-id {
          type uint8;
          description "PRT_PROP_ID";
      }

      typedef fpcp-rule-id {
          type uint8;
          description "PRT_RULE_ID";
      }

      typedef fpcp-qos-class-identifier {
          type uint8 {
              range "1..9";
          }
          description "QCI";
      }

      typedef fpcp-qos-bandwidth {
          type uint32;
          description "Bandwith value in bit per second.";
      }

      identity tunnel-type {
          description
          "Base identity from which specific use point)

   Cloning has the added advantage of
           tunnels are derived.";
      }

      identity fpcp-tunnel-type {
          base "tunnel-type";
          description
          "Base identity from which specific tunnel
           types in FPCP uses are derived.";
      }

      identity ip-in-ip {
          base "fpcp-tunnel-type";
          description "IP-in-IP tunnel";
      }

      identity gtp {
          base "fpcp-tunnel-type";
          description "GTP-U tunnel";
      }

      identity gre {
          base "fpcp-tunnel-type";
          description "GRE tunnel";
      }

      identity service-function {
          description
          "Base identity from which specific
           service function types are derived.";
      }

      identity ip-protocol {
          description
          "Base identity from reducing the over the wire data
   size required to create multiple entities.  This can improve
   performance if serializaiton / deserialization of multiple entities
   incurs some form of performance penalty.

5.2.3.4.  Command Bitsets (Optional)

   Command Sets permit the ability to provide a single, unified data
   structure, e.g.  CONTEXT, and specify which specific
           IP protocol types activities are derived.";
      }

      identity property-type {
          description
          "Base identity expected
   to be performed on the DPN.  This has some advantages

   o  Rather than sending N messages with a single operation performed
      on the DPN a single message can be used with a Command Set that
      specifies the N DPN operations to be executed.

   o  Errors become more obvious.  For example, if the HNP is NOT
      provided but the Client did not specify that the HNP should be
      assigned by the Agent this error is easily detected.  Without the
      Command Set the default behavior of property";
      }

      identity property-qos {
          base "property-type";
          description
          "QoS property";
      }

      identity property-endpoint {
          base "property-type";
          description
          "Endpoint property";
      }
      identity property-type-endpoint {
          base "property-type";
          description
          "Endpoint property";
      }

      identity qos-type {
          description
          "Base identity from which specific
           uses the Agent would be to assign
      the HNP and then respond back to the Client where the error would
      be detected and subsequent messaging would be required to remedy
      the error.  Such sitations can increase the time to error
      detection and overall system load withouth the Command Set
      present.

   o  Unambiguous provisioning specification.  The Agent is exactily in
      sync with the expectations of QoS types are derived.";
      }

      identity fpcp-qos-type {
          base "qos-type";
          description
          "Base identity from the Client as opposed to guessing
      what DPN work could be done based upon data present at the Agent.
      This greatly increases the speed by which specific
           QoS types the Agent can complete
      work.

   o  Permits different technologies with different instructions to be
      sent in FPCP uses the same message.

   As Command Bitsets are derived.";
      }

      identity fpcp-qos-type-gbr {
          base "fpcp-qos-type";
          description
          "A QoS Type for Guaranteed Bit Rate (GBR).";
      }

      identity fpcp-qos-type-mbr {
          base "fpcp-qos-type";
          description
          "A QoS Type for Maximum Bit Rate (MBR).";
      }

      identity fpcp-qos-index-type {
          base "qos-type";
      }

      identity fpcp-qos-index {
          base "fpcp-qos-index-type";
      }

      identity traffic-descriptor-type {
      }

      identity fpcp-traffic-descriptor {
          base "traffic-descriptor-type";
      }

      grouping carrier {
          description "Identify FPCP Carrier";
          leaf carrier-id {
              type fpcp-carrier-id;
              mandatory true;
              description "Carrier ID";
          }
      }

      grouping agent {
          description "AGT_ID to identify FPCP Agent";
          leaf agent-id {
              type fpcp-agent-id;
              description "Agent ID";
          }
      }

      grouping client {
          description "CLI_ID to identify FPCP Client";
          leaf client-id {
              type fpcp-client-id;
              description "Client ID";
          }
      }

      grouping network {
          description "Identify FPCP Network";
          leaf network-id {
              type fpcp-network-id;
              description "Network ID";
          }
      }

      grouping dpn {
          description "Identify FPCP Data-Plane Node";
          leaf dpn-id {
              type fpcp-dpn-id;
              description "DPN ID";
          }
      }

      grouping port {
          description "Identify FPCP Port";
          leaf port-id {
              type fpcp-port-id;
              description "Port-ID";
          }
      }
      grouping property {
          description "Identify FPCP Property";
          leaf property-id {
              type fpcp-property-id;
              description "Property-ID";
          }
      }

      grouping rule {
          description "Identify FPCP Rule";
          leaf rule-id {
              type fpcp-rule-id;
              description "Rule-ID";
          }
      }

      grouping fpcp-carrier {
          description "Define FPCP network";
          uses carrier;
          uses agent;
          list client {
              key client-id;
              description "List of FPCP Clients";
              leaf name { technology specfic, e.g.  PMIP or 3GPP
   Mobility, the type fpcp-name-type;
                  description "Client Name";
              }
              uses client;
          }
          list dpn {
              key dpn-id;
              description "List of FPCP DPNs";
              leaf name {
                  type fpcp-name-type;
                  description "DPN Name";
              }
              uses dpn;
          }
      }

     grouping dpn-set {
          description "DPNs which consist a work varies on the DPN set.";
          leaf name {
              type fpcp-name-type;
              description "DPN set name";
          }
          leaf network {
              type leafref {
                  path "/fpcp-carriers/carrier/network/network-id";
              }
              description "Network-ID which a DPN-set is belonging to.";
          }
          leaf role {
              type enumeration {
                  enum anchor-l3 {
                      description "";
                  }
                  enum anchor-l2 {
                      description "";
                  }
                  enum access {
                      description "";
                  }
              }
              description "Define DPNs role in data-plane.";
          }
          list endpoint-dp {
              key local-address;
              description "List of data-plane endpoint properties and the amount of data
   present in a
                           set of DPNs.";
              leaf local-address {
                  type inet:ip-address;
                  description "";
              }
              leaf remote-dpn {
                  type leafref {
                      path "/fpcp-carriers/carrier/dpn-group/name";
                  }
                  description "";
              }
              leaf default-tunnel-type {
                  type identityref {
                      base "fpcp-tunnel-type";
                  }
                  description "Tunnel Type";
              }
          }
     grouping dpn-set {
          description "DPNs which consist Context or Port will vary.  Using the technology
   specific instructions allows the Client to serve multiple
   technologies and MAY result in a DPN set.";
          leaf name {
              type fpcp-name-type;
              description "DPN set name";
          }
          leaf network {
              type leafref {
                  path "/fpcp-carriers/carrier/network/network-id";

              }
              description "Network-ID more statless Client as the
   instructions are transferred the Agent which a DPN-set is belonging to.";
          }
          leaf role {
              type enumeration {
                  enum anchor-l3 {
                      description "";
                  }
                  enum anchor-l2 {
                      description "";
                  }
                  enum access {
                      description "";
                  }
              }
              description "Define DPNs role in data-plane.";
          }
          list endpoint-dp {
              key local-address;
              description "List will match the desired,
   technology specific instructions with the capabilities and over the
   wire protocol of data-plane endpoint properties the DPN more efficiently.

5.2.3.5.  Reference Scope(Optional)

   Although entities MAY refer to any other entity of a
                           set an appropriate
   type, e.g.  Contexts can refer to Ports or Contexts, the Reference
   Scope gives the Agent an idea of DPNs.";
              leaf local-address {
                  type inet:ip-address;
                  description "";
              }
              leaf remote-dpn {
                  type leafref {
                      path "/fpcp-carriers/carrier/dpn-group/name";
                  }
                  description "";
              }
              leaf default-tunnel-type {
                  type identityref {
                      base "fpcp-tunnel-type";
                  }
                  description "Tunnel Type";
              }
          }
          list dpn {
              key dpn-id;
              uses dpn;
              description "DPN list where those references reside.  They
   may be in the same operation, an operation in the same CONFIG_BUNDLES
   message or in storage.  There may also be no references.  This
   permits the Agent to understand when it can stop searching for
   reference it cannot find.  For example, if a DPN set";
          }
      }

      grouping tunnel-endpoints {
          description
          "PROP_TUN property as CONFIG_BUNDLES message
   uses a set Reference Scope of tunnel endpoints";
          leaf tunnel-type {
              type identityref {
                  base "fpcp-tunnel-type";
              }
              description "Tunnel Type";
          }
          leaf remote-address {
              type inet:ip-address;
              description "Remote endpoint";
          }
          leaf local-address { type inet:ip-address;
              description "Local endpoint";
          }
      }

      grouping gtp-attributes {
          description
          "GTP_CONF as GTP tunnel specific attributes";
          leaf remote-teid {
              type uint32;
              description "TEID 'op' then it merely needs to keep an
   operation level cache and consume no memory or resources searching
   across the many operations in the CONFIG_BUNDLES message or the data
   store.

   Agents can also be stateless by only supporting the 'none', 'op' and
   'bundle' reference scopes.  This does not imply they lack storage but
   merely the search space they use when looking up references for an
   entity.  The figure below shows the caching heirarchy provided by the
   Reference Scope
   Caches are temporarily created at each level and as the scope
   includes more caches the amount of remote-endpoint";
          }
          leaf local-teid {
              type uint32;
              description "TEID entities that are searched
   increases.  Figure 24 shows an example cache where each Cache where a
   containment heirarchy is provided for all caches.

                             +---------------+
                             | Global Cache  |
                             |  (storage)    |
                             +------+--------+
                                    |
                                    +----------------------+
                                    |                      |
                             +------+--------+      +------+--------+
                             | Bundle Cache  |      | Bundle Cache  |
                             |   (bundle)    | .... |   (bundle)    |
                             +------+--------+      +------+--------+
                                    |
               +--------------------+--------------------+
               |                    |                    |
      +--------+---------+ +--------+---------+ +--------+---------+
      | Operation Cache  | | Operation Cache  | | Operation Cache  |
      |       (op)       | |       (op)       | |       (op)       |
      +------------------+ +------------------+ +------------------+

                                (no cache)

                  Figure 24: Exemplary Heirarchical Cache

5.2.4.  Pre-provisioning

   Although Contexts are used for Session based lifecycle elements,
   Ports may exist outside of local-endpoint";
          }
      }
     grouping gre-attributes {
          description
          "GRE_CONF as GRE tunnel a specific attribute";
          leaf key {
              type uint32;
              description "GRE_KEY";
          }
      }

      grouping rewriting-properties {
          description
          "PROP_REWR. TBD for which type lifecycle and represent more
   general policies that may affect multiple Contexts (sessions).  The
   use of rewriting functions
           need pre-provisioning of Ports permits policy and administrative
   use cases to be defined";
          leaf type {
              type identityref {
                  base service-function;
              }
              description "The type of service-function";
          }
      }
      grouping fpcp-qosattribute {
          leaf qci {
              type fpcp-qos-class-identifier;
          }
          leaf attributetype {
              type identityref {
                  base fpcp-qos-type;
              }
              description "the attribute type";
          }
          leaf bandwidth {
              type fpcp-qos-bandwidth;
          }
      }

      grouping fpcp-qos-property {
          description "PROP_QOS";
          leaf name {
              type fpcp-name-type;
          }
          leaf qos-index-type {
              type identityref {
                  base "fpcp-qos-index-type";
              }
          }
          choice index-type {
              case qci {
                  when "../qos-index-type = 'fpcp-qos-index'";
                  container uplink {
                      uses fpcp-qosattribute;
                  }
                  container downlink {
                      uses fpcp-qosattribute;
                  }
              }
          }
      }

      grouping traffic-descriptor {
          description
          "Traffic descriptor group collects parameters exected.  For example, creating tunnels to
           identify target forward
   traffic flow.";

          leaf destination-ip {
              type inet:ip-prefix;
              description "Rule of destination IP";
          }
          leaf source-ip {
              type inet:ip-prefix;
              description "Rule of source IP";
          }
      }

     grouping fpcp-traffic-descriptor {
          leaf name {
              type fpcp-name-type;
          }
          leaf traffic-discriptor-type {
              type identityref {
                  base "traffic-descriptor-type";
              }
          }

          choice descriptor-type {
              case fpcp-traffic-descriptor {
                  when "../descriptor-type = 'fpcp-traffic-descriptor'";
                  uses traffic-descriptor;
              }
          }
      }

      grouping fpcp-forwarding-rule {
          uses rule;
          uses fpcp-traffic-descriptor;
      }

      grouping fpcp-port-properties {
          description
          "A set of port property attributes";

          uses property;
          list attached-dpns {
              key name;
              leaf name {
                  type fpcp-name-type;
                  description "DPN group name of which port attached.";
              }
              description "Port attached DPN group list.";
          }
          container endpoints {
              description "Tunnel Endpoint";
              uses tunnel-endpoints;
              choice tunnel {
                  description "Tunnel-Type";
                  case gtp-u {
                      when "tunnel-type = 'gtp'" {
                          description "In case of GTP-U is tunnel-type";
                      }
                      uses gtp-attributes;
                  }
                  case gre {
                      when "tunnel-type = 'gre'" {
                          description "In case of GRE is tunnel-type";
                      }
                      uses gre-attributes;
                  }
              }
          }
          container qos {
              description "QoS Type";
              uses fpcp-qos-property;
              list port-in-aggregated-bandwidth {
                  key port-id;
                  uses port;
              }
          }
          container rewriting {
              description "Rewriting function";
              uses rewriting-properties;
          }
      }

      grouping port-field {
          description "Definition of attributes of port field";
          uses port;
          uses carrier;
          uses network;
      }

      // Container for configurations sets.

      container fpcp-carriers {
          description "Attributes set of FPCP network";

          list carrier {
              key carrier-id;
              description "List of carriers";
              leaf name {
                  type fpcp-name-type;
                  description "FPCP Carrier name";
              }
              uses fpcp-carrier;
              list network {
                  key network-id;
                  description "List of networks in to a carrier.";
                  leaf name {
                      type fpcp-name-type;
                      description "Define visible name of trouble management platform and dropping packets to a network.";
                  }
                  uses network;
              }
              list dpn-group {
                  key name;
                  description "List
   defective web server can be accomplished via provisioning of DPN groups in Ports.

   The figure below shows a carrier.";
                  uses dpn-set;
              }
              list qos-profile {
                  key name;
                  uses fpcp-qos-property;
              }
              list traffic-descriptor {
                  key name;
                  uses fpcp-traffic-descriptor;
              }
          }
      }

      // Port Entries

      container port-entries {
          config false;
          description
          "This container binds set of traffic-descriptor and
           port properties CONFIGURE (1) message used to install a port and lists them as
   Policy-group, policy-group1, using a port entry.";

          list port-entry {
              key port-id;
              description "List of port entries";
              uses port-field;

              list property {
                  key property-id;
                  description "Attributes Context set of properties";
                  uses fpcp-port-properties;
              }

              list forwarding-rule {
                  key rule-id;
                  description "Rule aside for pre-
   provisioning on a DPN.

                                      +-------Router--------+
              +-----------+           |+-------+ +---------+|
              |   FPC     |            | FPC   | |  Anchor |
              |  Client   |            | Agent | |   DPN   |
              +-----------+            +-------+ +---------+
                   |                          |           |
                   |------CONFIG(CREATE)----->|           |
                   |  [ PORT_ID port1,        |           |
                   |     [ policy-group1 ] ]  |           |
                   |  [ CONTEXT_ID preprov,   |           |
                   |     DPN_ID X,            |           |
                   |     [ port1 ] ]          |           |
                   |                          |           |

    Figure 25: Exemplary Bundle Message (focus on FPC reference point)

5.2.4.1.  Basename Registry Feature (Optional)

   The Optional BaseName Registry support feature is provided to permit
   Clients and traffic-descriptor";
                  uses fpcp-forwarding-rule;

              }
          }
      }

      // PRT_ADD

      rpc port_add {
          description "PRT_ADD";
          input {
              list adding-port {
                  description "Ports that are added tenants with common scopes, referred to in this
   specification as BaseNames, to track the state of provisioned policy
   information on an agent";
                  uses port-field;
                  list forwarding-rule {
                      key rule-id;
                      description "Rule Agent.  The registry records the BaseName and traffic-descriptor";
                      uses fpcp-forwarding-rule;
                  }
                  list property {
                      key property-id;
                      description "Attributes
   Checkpoint set of properties";
                      uses fpcp-port-properties;
                  }
              }
          }
      }

      // PRT_DEL

      rpc port_delete {
          description "PRT_DEL";
          input {
              list deleting-port {
                  description "Ports that are deleted from an agent";
                  uses port-field;
              }
          }
      }

      // PROP_ADD

      rpc port_property_add {
          description "PROP_ADD";
          input {
              list adding-property {
                  description "Properties that are added by a Client.  If a new Client attaches to an agent";
                  uses port-field;
                  list property {
                      key property-id;
                      description "Attributes set the Agent it
   can query the Registry to determine the amount of properties";
                      uses fpcp-port-properties;
                  }
              }
          }
      }

      // PROP_MOD

      rpc port_property_modify {
          description "PROP_MOD";
          input {
              list modifying-property {
                  description
                  "Properties work that are modified must be
   executed to configure the Agent to a BaseName / checkpoint revision.
   A State value is also provided in an agent";
                  uses port-field;

                  list property {
                      key property-id;
                      description "Attributes set of properties";
                      uses fpcp-port-properties;
                  }
              }
          }
      }

      // PROP_DEL

      rpc port_property_delete {
          description "PROP_DEL";
          input {
              list deleting-property {
                  description
                  "Target port/property-id of deleting properties";
                  uses port-field;

                  leaf property-id {
                      type fpcp-property-id;
                      mandatory true;
                      description "Property ID";
                  }
              }
          }
      }
      // RULE_ADD

      rpc rule_add {
          description
          "TBD for input parameters of which RULE_ADD includes
           but now just traffic-descriptor.";
          input {
              list adding-rule {
                  description "Rules that are added to an agent";
                  uses port-field;

                  list forwarding-rule {
                      description "Added rule";
                      uses fpcp-forwarding-rule;
                  }
              }
          }
      }

      // RULE_MOD

      rpc rule_modify {
          description
          "TBD for input parameters of which RULE_MOD includes
           but now just traffic-descriptor.";
          input {
              list modifying-rule {
                  description "Rules that are modified in an agent";
                  uses port-field;

                  list forwarding-rule {
                      description "Modified rule";
                      uses fpcp-forwarding-rule;
                  }
              }
          }
      }

      // RULE_DEL

      rpc rule_delete {
          description
          "TBD for input parameters of which RULE_DEL includes
           but now just traffic-descriptor.";
          input {
              list deleting-rule {
                  description "Rules that are deleted from an agent";
                  uses port-field;
                  list target-rule {
                      description "Deleting rules";
                      leaf target-rule-id {
                          type fpcp-rule-id;
                          mandatory true;
                          description "Rule ID";
                      }
                  }
              }
          }
      }

     // EVENT_REG

      rpc event_register {
          description
          "TBD for registered parameters included in EVENT_REG.";
      }

      // PROBE

      rpc probe {
          description
          "TBD for retrieved parameters included in PROBE.";
      }

      // NOTIFY

      notification notify {
          description
          "TBD for which status and event are reported the registry to client.";
      }

  }

                         Figure 19: FPC YANG base

A.1.2.  FPC Base tree

module: ietf-dmm-fpcp-base
   +--rw fpcp-carriers
   |  +--rw carrier* [carrier-id]
   |     +--rw name?                 fpcp-name-type
   |     +--rw carrier-id            fpcp-carrier-id
   |     +--rw agent-id?             fpcp-agent-id
   |     +--rw client* [client-id]
   |     |  +--rw name?        fpcp-name-type help Clients
   coordinate work on common BaseNames.

6.  Protocol Message Details

6.1.  Data Structures And Type Assignment

6.1.1.  Policy Structures
      +--------------+-----------------+----------------------------+
      | Structure    |  +--rw client-id    fpcp-client-id Field           |     +--rw dpn* [dpn-id] Type                       |
      +--------------+-----------------+----------------------------+
      |  +--rw name?     fpcp-name-type ACTION       | ACTION_ID       |  +--rw dpn-id    fpcp-dpn-id FPC-Identity (Section 4.4) |     +--rw network* [network-id]
      |              |  +--rw name?         fpcp-name-type                 |                            |  +--rw network-id    fpcp-network-id
      |     +--rw dpn-group* [name] ACTION       | TYPE            |  +--rw name           fpcp-name-type [32, unsigned integer]     |
      |  +--rw network?    -> /fpcp-carriers/carrier/network/network-id              |                 |  +--rw role?          enumeration                            |
      |  +--rw endpoint-dp* [local-address] ACTION       | VALUE           | Type specific              |  +--rw local-address          inet:ip-address
      |              |                 |  +--rw remote-dpn?  -> /fpcp-carriers/carrier/dpn-group/name                            |
      | DESCRIPTOR   |  +--rw default-tunnel-type?   identityref DESCRIPTOR_ID   | FPC-Identity (Section 4.4) |  +--rw dpn* [dpn-id]
      |              |     +--rw dpn-id    fpcp-dpn-id                 |     +--rw qos-profile* [name]                            |
      |  +--rw name              fpcp-name-type DESCRIPTOR   | TYPE            |  +--rw qos-index-type?   identityref [32, unsigned integer]     |
      |  +--rw (index-type)?              |                 |     +--:(qci)                            |
      |        +--rw uplink DESCRIPTOR   | VALUE           | Type specific              |  +--rw qci?             fpcp-qos-class-identifier
      |              |                 |  +--rw attributetype?   identityref                            |
      | POLICY       |  +--rw bandwidth?       fpcp-qos-bandwidth POLICY_ID       | FPC-Identity (Section 4.4) |        +--rw downlink
      |              |           +--rw qci?             fpcp-qos-class-identifier                 |                            |           +--rw attributetype?   identityref
      | POLICY       |           +--rw bandwidth?       fpcp-qos-bandwidth RULES           |     +--rw traffic-descriptor* [name] *[ RULE ] (See Table 4)    |        +--rw name                       fpcp-name-type
      |        +--rw traffic-discriptor-type?   identityref              |        +--rw (descriptor-type)?                 |           +--:(fpcp-traffic-descriptor)                            |              +--rw destination-ip?            inet:ip-prefix
      |              +--rw source-ip?                 inet:ip-prefix
   +--ro port-entries
      +--ro port-entry* [port-id]
         +--ro port-id            fpcp-port-id
         +--ro carrier-id         fpcp-carrier-id
         +--ro network-id?        fpcp-network-id
         +--ro property* [property-id] POLICY-GROUP |  +--ro property-id      fpcp-property-id POLICY_GROUP_ID |  +--ro attached-dpns* [name] FPC-Identity (Section 4.4) |
      |  +--ro name    fpcp-name-type              |  +--ro endpoints                 |                            |  +--ro tunnel-type?      identityref
      | POLICY-GROUP |  +--ro remote-address?   inet:ip-address POLICIES        | *[ POLICY_ID ]             |  +--ro local-address?    inet:ip-address
      +--------------+-----------------+----------------------------+

                          Table 3: Action Fields

   Policies contain a list of Rules by their order value.  Each Rule
   contains Descriptors with optional directionality and Actions with
   order values that specifies action execution ordering if the Rule has
   multiple actions.

   Rules consist of the following fields.

   +------------------+---------------+--------------------------------+
   | Field            |  +--ro (tunnel)? Type          | Sub-Fields                     |     +--:(gtp-u)
   +------------------+---------------+--------------------------------+
   | ORDER            | [16, INTEGER] |  +--ro remote-teid?      uint32                                |
   |                  |  +--ro local-teid?       uint32               |                                |     +--:(gre)
   | RULE_DESCRIPTORS |        +--ro key?              uint32 *[            |  +--ro qos DIRECTION [2, unsigned bits]   |
   |  +--ro name?                           fpcp-name-type                  | DESCRIPTOR_ID |  +--ro qos-index-type?                 identityref is an ENUMERATION (uplink,     |
   |  +--ro (index-type)?                  | DIRECTION ]   | downlink or both).             |  +--:(qci)
   |                  |               |     +--ro uplink                                |
   | RULE_ACTIONS     | *[ ACTION_ID  |  +--ro qci?            fpcp-qos-class-identifier ORDER [8, unsigned integer]    |
   |                  | ORDER ]       |  +--ro attributetype?  identityref specifies action execution     |
   |                  |               |  +--ro bandwidth?      fpcp-qos-bandwidth order.                         |
   +------------------+---------------+--------------------------------+

                           Table 4: Rule Fields

6.1.2.  Mobilty Structures

                 +----------+----------------------------+
                 | Field    |     +--ro downlink Type                       |
                 +----------+----------------------------+
                 | PORT_ID  |        +--ro qci?            fpcp-qos-class-identifier FPC-Identity (Section 4.4) |
                 |          |        +--ro attributetype?  identityref                            |
                 | POLICIES |        +--ro bandwidth?      fpcp-qos-bandwidth *[ POLICY_GROUP_ID ]       |
                 +----------+----------------------------+

                           Table 5: Port Fields

      +------------------------+------------------------------------+
      |  +--ro port-in-aggregated-bandwidth* [port-id] Field                  | Type                               |     +--ro port-id    fpcp-port-id
      +------------------------+------------------------------------+
      |  +--ro rewriting CONTEXT_ID             |     +--ro type?   identityref
         +--ro forwarding-rule* [rule-id]
            +--ro rule-id                    fpcp-rule-id
            +--ro name?                      fpcp-name-type
            +--ro traffic-discriptor-type?   identityref
            +--ro (descriptor-type)?
               +--:(fpcp-traffic-descriptor)
                  +--ro destination-ip?            inet:ip-prefix
                  +--ro source-ip?                 inet:ip-prefix

rpcs:
   +---x port_add FPC-Identity (Section 4.4)         |  +---w input
      |     +---w adding-port*                        |        +---w port-id?           fpcp-port-id                                    |        +---w carrier-id         fpcp-carrier-id
      |        +---w network-id?        fpcp-network-id PORTS                  |        +---w forwarding-rule* [rule-id] *[ PORT_ID ]                       |
      |  +---w rule-id                    fpcp-rule-id                        |                                    |  +---w name?                      fpcp-name-type
      | DPN_GROUP_ID           |  +---w traffic-discriptor-type?   identityref FPC-Identity (Section 4.4)         |
      |  +---w (descriptor-type)?                        |                                    |     +--:(fpcp-traffic-descriptor)
      | DELEGATING IP PREFIXES |        +---w destination-ip?            inet:ip-prefix *[ IP_PREFIX ]                     |
      |        +---w source-ip?                 inet:ip-prefix                        |        +---w property* [property-id]                                    |           +---w property-id      fpcp-property-id
      |           +---w attached-dpns* [name] PARENT_CONTEXT_ID      | FPC-Identity (Section 4.4)         |  +---w name    fpcp-name-type
      |           +---w endpoints                        |                                    |  +---w tunnel-type?      identityref
      | UPLINK [NOTE 1]        |  +---w remote-address?   inet:ip-address MOB_FIELDS                         |
      |  +---w local-address?    inet:ip-address                        |                                    |  +---w (tunnel)?
      | DOWNLINK [NOTE 1]      |     +--:(gtp-u) MOB_FIELDS                         |
      |                        |  +---w remote-teid?      uint32                                    |
      | DPNS [NOTE 2]          |  +---w local-teid?       uint32 *[ DPN_ID DPN_DIRECTION MOB_FIELDS |
      |     +--:(gre)                        |                                    |        +---w key?              uint32
      |           +---w qos MOB_FIELDS             | All parameters from Table 7        |  +---w name?                           fpcp-name-type
      +------------------------+------------------------------------+

                          Table 6: Context Fields

   NOTE 1 - These fields are present when the Agent supports only a
   single DPN.

   NOTE 2 - This fields is present when the Agent supports multiple
   DPNs.

   +---------------------------+---------------------+-----------------+
   | Field                     |  +---w qos-index-type?                 identityref Type                | Detail          |  +---w (index-type)?
   +---------------------------+---------------------+-----------------+
   | TUN_LOCAL_ADDRESS         | IP Address          |  +--:(qci) [NOTE 1]        |
   |                           |     +---w uplink                     |                 |
   | TUN_REMOTE_ADDRESS        |  +---w qci?         fpcp-qos-class-identifier IP Address          | [NOTE 1]        |
   |                           |  +---w attributetype?   identityref                     |                 |
   | TUN_MTU                   |  +---w bandwidth?       fpcp-qos-bandwidth [32, unsigned       |                 |
   |     +---w downlink                           | integer]            |                 |        +---w qci?         fpcp-qos-class-identifier
   |                           |                     |        +---w attributetype?   identityref                 |
   | TUN_PAYLOAD_TYPE          |        +---w bandwidth?       fpcp-qos-bandwidth [2, bits]           | Enumeration: pa |  +---w port-in-aggregated-bandwidth* [port-id]
   |                           |     +---w port-id    fpcp-port-id                     |           +---w rewriting yload_ipv4(0),  |              +---w type?   identityref
   +---x port_delete
   |  +---w input                           |     +---w deleting-port*                     |        +---w port-id?      fpcp-port-id
   |        +---w carrier-id    fpcp-carrier-id
   |        +---w network-id?   fpcp-network-id
   +---x port_property_add payload_ipv6(1) |  +---w input
   |     +---w adding-property*                           |        +---w port-id?      fpcp-port-id                     |        +---w carrier-id    fpcp-carrier-id or payload_dual |        +---w network-id?   fpcp-network-id
   |        +---w property* [property-id]                           |           +---w property-id      fpcp-property-id                     |           +---w attached-dpns* [name] (2).            |
   |  +---w name    fpcp-name-type                           |           +---w endpoints                     |                 |  +---w tunnel-type?      identityref
   | TUN_TYPE                  |  +---w remote-address?   inet:ip-address [8, unsigned        | Enumeration:    |  +---w local-address?    inet:ip-address
   |                           |  +---w (tunnel)? integer]            | IP-in-IP(0),    |     +--:(gtp-u)
   |                           |                     |  +---w remote-teid?      uint32 UDP(1), GRE(2)  |
   |                           |  +---w local-teid?       uint32                     | and GTP(3).     |     +--:(gre)
   |                           |        +---w key?              uint32                     |           +---w qos                 |
   |  +---w name?                           fpcp-name-type TUN_IF                    | [16, unsigned       |  +---w qos-index-type?                 identityref Input interface |
   |  +---w (index-type)?                           | integer]            | index.          |  +--:(qci)
   |                           |                     |     +---w uplink                 |
   | MOBILITY_SPECIFIC_TUN_PAR | [ IETF_PMIP_MOB_PRO |  +---w qci?         fpcp-qos-class-identifier [NOTE 1]        |
   | AMS                       | FILE |  +---w attributetype? identityref              |                 |
   |                           |  +---w bandwidth?   fpcp-qos-bandwidth 3GPP_MOB_PROFILE ]  |                 |
   |     +---w downlink                           |                     |                 |        +---w qci?         fpcp-qos-class-identifier
   | NEXTHOP                   | [ IP Address |        +---w attributetype?   identityref MAC  | [NOTE 1]        |
   |        +---w bandwidth?   fpcp-qos-bandwidth                           | Address |  +---w port-in-aggregated-bandwidth* [port-id] SPI |     |     +---w port-id    fpcp-port-id                 |           +---w rewriting
   |              +---w type?   identityref
   +---x port_property_modify                           |  +---w input MPLS Label |     +---w modifying-property* SID |        +---w port-id?      fpcp-port-id  |        +---w carrier-id    fpcp-carrier-id                 |        +---w network-id?   fpcp-network-id
   |        +---w property* [property-id]                           |           +---w property-id      fpcp-property-id Interface Index ]   |           +---w attached-dpns* [name]                 |
   |  +---w name    fpcp-name-type                           |           +---w endpoints (See Table 19).     |                 |  +---w tunnel-type?      identityref
   |                           |  +---w remote-address?   inet:ip-address                     |                 |  +---w local-address?    inet:ip-address
   | QOS_PROFILE_PARAMS        |  +---w (tunnel)? [ 3GPP_QOS |        |     +--:(gtp-u) [NOTE 1]        |
   |                           |  +---w remote-teid?      uint32 PMIP_QOS ]          |                 |
   |  +---w local-teid?       uint32                           |                     |     +--:(gre)                 |
   |        +---w key?              uint32 DPN_SPECIFIC_PARAMS       |           +---w qos [ TUN_IF or Varies] | Specifies       |  +---w name?                   fpcp-name-type
   |                           |  +---w qos-index-type?         identityref                     | optional node   |  +---w (index-type)?
   |                           |                     |  +--:(qci) specific        |
   |                           |     +---w uplink                     | parameters in   |
   |                           |  +---w qci?         fpcp-qos-class-identifier                     | need such as    |
   |                           |  +---w attributetype?   identityref                     | if-index,       |
   |                           |  +---w bandwidth?   fpcp-qos-bandwidth                     | tunnel-if-      |
   |     +---w downlink                           |                     | number that     |        +---w qci?         fpcp-qos-class-identifier
   |                           |                     |        +---w attributetype?   identityref must be unique  |
   |                           |        +---w bandwidth?   fpcp-qos-bandwidth                     | in the DPN.     |  +---w port-in-aggregated-bandwidth* [port-id]
   |                           |     +---w port-id    fpcp-port-id                     |           +---w rewriting                 |              +---w type?   identityref
   +---x port_property_delete
   |  +---w input VENDOR_SPECIFIC_PARAM     |     +---w deleting-property* *[ Varies ]         |        +---w port-id?       fpcp-port-id
   |        +---w carrier-id     fpcp-carrier-id
   |        +---w network-id?    fpcp-network-id
   |        +---w property-id    fpcp-property-id
   +---x rule_add [NOTE 1]        |  +---w input
   +---------------------------+---------------------+-----------------+

   NOTE 1 - These parameters are extensible.  The Types may be extended
     for Field value by future specifications or in the case of Vendor
                    Specific Attributes by enterprises.

            Table 7: Context Downlink/Uplink Field Definitions

6.1.3.  Topology Structures

          +----------------+------------------------------------+
          |     +---w adding-rule* Field          |        +---w port-id?           fpcp-port-id Type                               |        +---w carrier-id         fpcp-carrier-id
          +----------------+------------------------------------+
          |        +---w network-id?        fpcp-network-id DPN_ID         |        +---w forwarding-rule* FPC-Identity. See Section 4.4      |           +---w rule-id?                   fpcp-rule-id
          |           +---w name?                      fpcp-name-type                |           +---w traffic-discriptor-type?   identityref                                    |           +---w (descriptor-type)?
          |              +--:(fpcp-traffic-descriptor) DPN_NAME       |                 +---w destination-ip?            inet:ip-prefix [1024, OCTET STRING]               |                 +---w source-ip?                 inet:ip-prefix
   +---x rule_modify
          |  +---w input                |     +---w modifying-rule*                                    |        +---w port-id?           fpcp-port-id
          |        +---w carrier-id         fpcp-carrier-id DPN_GROUPS     |        +---w network-id?        fpcp-network-id * [ FPC-Identity ] See Section 4.4 |        +---w forwarding-rule*
          |           +---w rule-id?                   fpcp-rule-id                |           +---w name?                      fpcp-name-type                                    |           +---w traffic-discriptor-type?   identityref
          |           +---w (descriptor-type)? NODE_REFERENCE |              +--:(fpcp-traffic-descriptor) [1024, OCTET STRING]               |                 +---w destination-ip?            inet:ip-prefix
          +----------------+------------------------------------+

                            Table 8: DPN Fields

                  +-------------+----------------------+
                  |                 +---w source-ip?                 inet:ip-prefix
   +---x rule_delete Field       |  +---w input Type                 |     +---w deleting-rule*
                  +-------------+----------------------+
                  |        +---w port-id?       fpcp-port-id
   |        +---w carrier-id     fpcp-carrier-id
   |        +---w network-id?    fpcp-network-id
   |        +---w target-rule*
   |           +---w target-rule-id    fpcp-rule-id
   +---x event_register
   +---x probe
notifications:
   +---n notify

                         Figure 20: FPC base tree

A.2.  FPC PMIP

A.2.1.  FPC PMIP YANG Model

module ietf-dmm-fpcp-pmip {
    namespace "urn:ietf:params:xml:ns:yang:ietf-dmm-fpcp-pmip";
    prefix fpcp-pmip;

    import ietf-inet-types { prefix inet; }
    import ietf-dmm-fpcp-base { prefix fpcp-base; }
    import ietf-pmip-qos { prefix qos-pmip; }
    import ietf-traffic-selectors { prefix traffic-selectors; }

    organization "IETF DMM Working Group";
    contact "Satoru Matsushima <satoru.matsushima@g.softbank.co.jp>";

    description
    "This module contains YANG definition for
     Forwarding Policy Configuration Protocol.(FPCP)";

    revision 2016-01-19 {
        description "Changes based on -01 version of FPCP draft.";
        reference "draft-ietf-dmm-fpc-cpdp-01";
    }

    identity fpcp-qos-index-pmip {
        base "fpcp-base:fpcp-qos-index-type";
    }

    identity traffic-selector-mip6 {
        base "fpcp-base:traffic-descriptor-type";
    }

    grouping qosattribute-pmip {

        leaf dscp {
            type inet:dscp;
        }

        choice attribute {
            case per-mn-agg-max-dl {
                when "../attributetype = 'Per-MN-Agg-Max-DL-Bit-Rate-type'";
                leaf per-mn-agg-max-dl {
                    type qos-pmip:Per-MN-Agg-Max-DL-Bit-Rate-Value;
                }
            }
            case per-mn-agg-max-ul {
                when "../attributetype = 'Per-MN-Agg-Max-UL-Bit-Rate-type'";
                leaf per-mn-agg-max-ul {
                    type qos-pmip:Per-MN-Agg-Max-UL-Bit-Rate-Value;
                }
            }
            case per-session-agg-max {
                when "../attributetype = 'Per-Session-Agg-Max-DL-Bit-Rate-type' DOMAIN_ID   |
                      ../attributetype = 'Per-Session-Agg-Max-UL-Bit-Rate-type'";
                uses qos-pmip:Per-Session-Agg-Max-Bit-Rate-Value;
            }
            case agg-max-dl {
                when "../attributetype = 'Aggregate-Max-DL-Bit-Rate-type'";
                leaf agg-max-dl {
                    type qos-pmip:Aggregate-Max-DL-Bit-Rate-Value;

                }
            }
            case agg-max-ul {
                when "../attributetype = 'Aggregate-Max-UL-Bit-Rate-type'";
                leaf agg-max-ul {
                    type qos-pmip:Aggregate-Max-UL-Bit-Rate-Value;
                }
            }
            case gbr-dl {
                when "../attributetype = 'Guaranteed-DL-Bit-Rate-type'";
                leaf gbr-dl {
                    type qos-pmip:Guaranteed-DL-Bit-Rate-Value;
                }
            }
            case gbr-ul {
                when "../attributetype = 'Guaranteed-UL-Bit-Rate-type'";
                leaf gbr-ul {
                    type qos-pmip:Guaranteed-UL-Bit-Rate-Value;
                }
            }
        }
    }

    // Configuration choice augmentation in the fpcp-base under the fpcp-carriers/carrier/qosprofile.
    augment "/fpcp-base:fpcp-carriers/fpcp-base:carrier/fpcp-base:qos-profile/fpcp-base:index-type" {
        case pmip {
            when "/fpcp-base:fpcp-carriers/fpcp-base:carrier/fpcp-base:qos-profile/fpcp-base:qos-index-type = 'fpcp-qos-index-pmip'";
            uses qosattribute-pmip;
        }
    }

    // Configuration choice augmentation in the fpcp-base under the fpcp-carriers/carrier/traffic-descriptor.
    augment "/fpcp-base:fpcp-carriers/fpcp-base:carrier/fpcp-base:traffic-descriptor/fpcp-base:descriptor-type" {
        case traffic-selector-mip6 {
            when "/fpcp-base:fpcp-carriers/fpcp-base:carrier/fpcp-base:traffic-descriptor/fpcp-base:traffic-descriptor-type = 'traffic-selector-mip6'";
            uses traffic-selectors:traffic-selector;
        }
    }

    // Operational choice augmentation in the fpcp-base under the port-entries/port-entry/property.
    augment "/fpcp-base:port-entries/fpcp-base:port-entry/fpcp-base:property/fpcp-base:qos/fpcp-base:index-type" {
        case pmip {
            when "/fpcp-base:port-entries/fpcp-base:port-entry/fpcp-base:property/fpcp-base:qos/fpcp-base:qos-index-type = 'fpcp-qos-index-pmip'";
            uses qosattribute-pmip;
        }
    }

    // Operational choice augmentation in the fpcp-base under the port-entries/port-entry/forwarding-rule.
    augment "/fpcp-base:port-entries/fpcp-base:port-entry/fpcp-base:forwarding-rule/fpcp-base:descriptor-type" {
        case traffic-selector-mip6 {
            when "/fpcp-base:port-entries/fpcp-base:port-entry/fpcp-base:forwarding-rule/fpcp-base:traffic-descriptor-type = 'traffic-selector-mip6'";
            uses traffic-selectors:traffic-selector;
        }
    }

    // RPC choice augmentation [1024, OCTET STRING] |
                  |             |                      |
                  | DOMAIN_NAME | [1024, OCTET STRING] |
                  |             |                      |
                  | DOMAIN_TYPE | [1024, OCTET STRING] |
                  +-------------+----------------------+

                          Table 9: Domain Fields

   +------------------+------------------------------------------------+
   | Field            | Type                                           |
   +------------------+------------------------------------------------+
   | DPN_GROUP_ID     | FPC-Identity. See Section 4.4                  |
   |                  |                                                |
   | DATA_PLANE_ROLE  | [4, ENUMERATION (data-plane, such as access-   |
   |                  | dpn, L2/L3 anchor-dpn.)]                       |
   |                  |                                                |
   | ACCESS_TYPE      | [4, ENUMERATION ()ethernet(802.3/11), 3gpp     |
   |                  | cellular(S1,RAB)]                              |
   |                  |                                                |
   | MOBILITY_PROFILE | [4, ENUMERATION (ietf-pmip, 3gpp, or new       |
   |                  | profile)]                                      |
   |                  |                                                |
   | PEER_DPN_GROUPS  | * [ DPN_GROUP_ID MOBILITY_PROFILE              |
   |                  | REMOTE_ENDPOINT_ADDRESS LOCAL_ENDPOINT_ADDRESS |
   |                  | TUN_MTU DATA_PLANE_ROLE ]                      |
   +------------------+------------------------------------------------+

                        Table 10: DPN Groups Fields

6.1.4.  Monitors
   +------------------+----------------------+-------------------------+
   | Field            | Type                 | Description             |
   +------------------+----------------------+-------------------------+
   | MONITOR          | MONITOR_ID TARGET    |                         |
   |                  | [REPORT_CONFIG]      |                         |
   |                  |                      |                         |
   | MONITOR_ID       | FPC-Identity. See    |                         |
   |                  | Section 4.4          |                         |
   |                  |                      |                         |
   | EVENT_TYPE_ID    | [8, Event Type ID]   | Event Type (unsigned    |
   |                  |                      | integer).               |
   |                  |                      |                         |
   | TARGET           | OCTET STRING (See    |                         |
   |                  | Section 4.3.3)       |                         |
   |                  |                      |                         |
   | REPORT_CONFIG    | [8, REPORT-TYPE]     |                         |
   |                  | [TYPE_SPECIFIC_INFO] |                         |
   |                  |                      |                         |
   | PERIODIC_CONFIG  | [32, period]         | report interval (ms).   |
   |                  |                      |                         |
   | THRESHOLD_CONFIG | [32, low] [32, hi]   | thresholds (at least    |
   |                  |                      | one value must be       |
   |                  |                      | present)                |
   |                  |                      |                         |
   | SCHEDULED_CONFIG | [32, time]           |                         |
   |                  |                      |                         |
   | EVENTS_CONFIG    | *[EVENT_TYPE_ID]     |                         |
   +------------------+----------------------+-------------------------+

                Table 11: Monitor Structures and Attributes

   TRIGGERS include but are not limited to the following values:

   o  Events specified in the fpcp-base under "port_add" rpc.
    augment "/fpcp-base:port_add/fpcp-base:input/fpcp-base:adding-port/fpcp-base:property/fpcp-base:qos/fpcp-base:index-type" {
        case pmip {
            when "/fpcp-base:port_add/fpcp-base:input/fpcp-base:adding-port/fpcp-base:property/fpcp-base:qos/fpcp-base:qos-index-type = 'fpcp-qos-index-pmip'";
            uses qosattribute-pmip;
        }
    }

    augment "/fpcp-base:port_add/fpcp-base:input/fpcp-base:adding-port/fpcp-base:forwarding-rule/fpcp-base:descriptor-type" {
        case traffic-selector-mip6 {
            when "/fpcp-base:port_add/fpcp-base:input/fpcp-base:adding-port/fpcp-base:forwarding-rule/fpcp-base:traffic-descriptor-type = 'traffic-selector-mip6'";
            uses traffic-selectors:traffic-selector;
        }
    }

    // RPC choice augmentation in the fpcp-base under "port_property_add" rpc.
    augment "/fpcp-base:port_property_add/fpcp-base:input/fpcp-base:adding-property/fpcp-base:property/fpcp-base:qos/fpcp-base:index-type" {
        case pmip {
            when "/fpcp-base:port_property_add/fpcp-base:input/fpcp-base:adding-property/fpcp-base:property/fpcp-base:qos/fpcp-base:qos-index-type = 'fpcp-qos-index-pmip'";
            uses qosattribute-pmip;
        }
    }

    // RPC choice augmentation in Event List of an EVENTS CONFIG

   o  LOW_THRESHOLD_CROSSED

   o  HIGH_THRESHOLD_CROSSED

   o  PERIODIC_REPORT

   o  SCHEDULED_REPORT

   o  PROBED

   o  DEREG_FINAL_VALUE

6.2.  Message Attributes

6.2.1.  Header

   Each operation contains a header with the fpcp-base under "port_property_modify" rpc.
    augment "/fpcp-base:port_property_modify/fpcp-base:input/fpcp-base:modifying-property/fpcp-base:property/fpcp-base:qos/fpcp-base:index-type" {
        case pmip {
            when "/fpcp-base:port_property_modify/fpcp-base:input/fpcp-base:modifying-property/fpcp-base:property/fpcp-base:qos/fpcp-base:qos-index-type = 'fpcp-qos-index-pmip'";
            uses qosattribute-pmip;
        }
    }

    // RPC choice augmentation in following fields:

   +-------------+------------------------+----------------------------+
   | Field       | Type                   | Messages                   |
   +-------------+------------------------+----------------------------+
   | CLIENT_ID   | FPC-Identity (Section  | All                        |
   |             | 4.4)                   |                            |
   |             |                        |                            |
   | DELAY       | [32, unsigned integer] | All                        |
   |             |                        |                            |
   | OP_ID       | [64, unsigned integer] | All                        |
   |             |                        |                            |
   | ADMIN_STATE | [8, admin state]       | CONF, CONF_BUNDLES and     |
   |             |                        | REG_MONITOR                |
   |             |                        |                            |
   | OP_TYPE     | [8, op type]           | CONF and CONF_BUNDLES      |
   +-------------+------------------------+----------------------------+

                      Table 12: Message Header Fields

6.2.2.  CONF and CONF_BUNDLES Attributes and Notifications
   +---------------+-----------------------+---------------------------+
   | Field         | Type                  | Operation Types           |
   |               |                       | Create(C), Update(U),     |
   |               |                       | Query(Q) and Delete(D)    |
   +---------------+-----------------------+---------------------------+
   | SESSION_STATE | [8, session state]    | C,U                       |
   |               |                       |                           |
   | COMMAND_SET   | FPC Command Bitset.   | C,U                       |
   | (1)           | See Section 5.1.1.3.  |                           |
   |               |                       |                           |
   | CLONES (1)    | *[ FPC-Identity FPC-  | C,U                       |
   |               | Identity ] (Section   |                           |
   |               | 4.4)                  |                           |
   |               |                       |                           |
   | PORTS         | *[ PORT ]             | C,U                       |
   |               |                       |                           |
   | CONTEXTS      | *[ CONTEXT [          | C,U                       |
   |               | COMMAND_SET (1) ] ]   |                           |
   |               |                       |                           |
   | TARGETS       | FPC-Identity (Section | Q,D                       |
   |               | 4.4) *[DPN_ID]        |                           |
   +---------------+-----------------------+---------------------------+

    (1) - Only present if the fpcp-base under "rule_add" rpc.
    augment "/fpcp-base:rule_add/fpcp-base:input/fpcp-base:adding-rule/fpcp-base:forwarding-rule/fpcp-base:descriptor-type" {
        case traffic-selector-mip6 {
            when "/fpcp-base:rule_add/fpcp-base:input/fpcp-base:adding-rule/fpcp-base:forwarding-rule/fpcp-base:traffic-descriptor-type = 'traffic-selector-mip6'";
            uses traffic-selectors:traffic-selector;
        }
    }

    // RPC choice augmentation in corresponding feature is supported by the fpcp-base under "rule_modify" rpc.
    augment "/fpcp-base:rule_modify/fpcp-base:input/fpcp-base:modifying-rule/fpcp-base:forwarding-rule/fpcp-base:descriptor-type" {
        case traffic-selector-mip6 {
            when "/fpcp-base:rule_modify/fpcp-base:input/fpcp-base:modifying-rule/fpcp-base:forwarding-rule/fpcp-base:traffic-descriptor-type
                                  Agent.

              Table 13: CONF and CONF_BUNDLES OP_BODY Fields

   +----------+-----------------------+--------------------------------+
   | Field    | Type                  | Operation Types Create(C),     |
   |          |                       | Update(U), Query(Q) and        |
   |          |                       | Delete(D)                      |
   +----------+-----------------------+--------------------------------+
   | PORTS    | *[ PORT ]             | C,U                            |
   |          |                       |                                |
   | CONTEXTS | *[ CONTEXT [          | C,U                            |
   |          | COMMAND_SET (1) ] ]   |                                |
   |          |                       |                                |
   | TARGETS  | *[ FPC-Identity       | Q,D                            |
   |          | (Section 4.4)         |                                |
   |          | *[DPN_ID] ]           |                                |
   +----------+-----------------------+--------------------------------+

    (1) - Only present if the corresponding feature is supported by the
                                  Agent.

             Table 14: Immediate Response RESPONSE_BODY Fields

   If an error occurs the following information is returned.

      ERROR_TYPE_ID (Unsigned 32) - The identifier of a specific error
      type

      ERROR_INFORMATION - An OPTIONAL string of no more than 1024
      characters.

   +-----------------+--------------------+----------------------------+
   | Field           | Type               | Description                |
   +-----------------+--------------------+----------------------------+
   | AGENT_ID        | FPC-Identity       |                            |
   |                 | (Section 4.4)      |                            |
   |                 |                    |                            |
   | NOTIFICATION_ID | [32, unsigned      | A Notification Identifier  |
   |                 | integer]           | used to determine          |
   |                 |                    | notification order.        |
   |                 |                    |                            |
   | TIMESTAMP       | [32, unsigned      | The time that the          |
   |                 | integer]           | notification occured.      |
   |                 |                    |                            |
   | DATA            | *[ OP_ID           |                            |
   |                 | RESPONSE_BODY      |                            |
   |                 | (Table 14) ]       |                            |
   +-----------------+--------------------+----------------------------+

      Table 15: CONFIG_RESULT_NOTIFY Asynchronous Notification Fields

6.2.3.  Monitors

   +-----------------+---------------------+---------------------------+
   | Field           | Type                | Description               |
   +-----------------+---------------------+---------------------------+
   | NOTIFICATION_ID | [32, unsiged        |                           |
   |                 | integer]            |                           |
   |                 |                     |                           |
   | TRIGGER         | [32, unsigned       |                           |
   |                 | integer]            |                           |
   |                 |                     |                           |
   | NOTIFY          | NOTIFICATION_ID     | Timestamp notes when the  |
   |                 | MONITOR_ID TRIGGER  | event occurred.           |
   |                 | [32, timestamp]     | Notification Data is      |
   |                 | [NOTIFICATION_DATA] | TRIGGER and Monitor type  |
   |                 |                     | specific.                 |
   +-----------------+---------------------+---------------------------+

                      Table 16: Monitor Notifications

7.  Derived and Subtyped Attributes

   This section notes derived attributes.

   +------------------+-------+---------------+------------------------+
   | Field            | Type  | Type          | Description            |
   |                  | Value |               |                        |
   +------------------+-------+---------------+------------------------+
   | TO_PREFIX        | 0     | [IP Address]  | Aggregated or per-host |
   |                  |       | [ Prefix Len  | destination IP         |
   |                  |       | ]             | address/prefix         |
   |                  |       |               | descriptor.            |
   |                  |       |               |                        |
   | FROM_PREFIX      | 1     | [IP Address]  | Aggregated or per-host |
   |                  |       | [ Prefix Len  | source IP              |
   |                  |       | ]             | address/prefix         |
   |                  |       |               | descriptor.            |
   |                  |       |               |                        |
   | TRAFFIC_SELECTOR | 2     | Format per    | Traffic Selector.      |
   |                  |       | specification |                        |
   |                  |       | [RFC6088].    |                        |
   +------------------+-------+---------------+------------------------+

                       Table 17: Descriptor Subtypes

   +--------------+-------+---------------------+----------------------+
   | Field        | Type  | Type                | Description          |
   |              | Value |                     |                      |
   +--------------+-------+---------------------+----------------------+
   | DROP         | 0     | Empty               | Drop the associated  |
   |              |       |                     | packets.             |
   |              |       |                     |                      |
   | REWRITE      | 1     | [in_src_ip]         | Rewrite IP Address   |
   |              |       | [out_src_ip]        | (NAT) or IP Address  |
   |              |       | [in_dst_ip]         | / Port (NAPT).       |
   |              |       | [out_dst_ip]        |                      |
   |              |       | [in_src_port]       |                      |
   |              |       | [out_src_port]      |                      |
   |              |       | [in_dst_port]       |                      |
   |              |       | [out_dst_port]      |                      |
   |              |       |                     |                      |
   | COPY_FORWARD | 2     | FPC-Identity. See   | Copy all packets and |
   |              |       | Section 4.4.        | forward them to the  |
   |              |       |                     | provided identity.   |
   |              |       |                     | The value of the     |
   |              |       |                     | identity MUST be a   |
   |              |       |                     | port or context.     |
   +--------------+-------+---------------------+----------------------+

                         Table 18: Action Subtypes

   +-----------------+-------+-------------------+---------------------+
   | Field           | Type  | Type              | Description         |
   |                 | Value |                   |                     |
   +-----------------+-------+-------------------+---------------------+
   | IP_ADDR         | 0     | IP Address        | An IP Address.      |
   |                 |       |                   |                     |
   | MAC_ADDR        | 1     | MAC Address       | A MAC Address.      |
   |                 |       |                   |                     |
   | SERVICE_PATH_ID | 2     | [24, unsigned     | Service Path        |
   |                 |       | integer]          | Identifier (SPI)    |
   |                 |       |                   |                     |
   | MPLS_LABEL      | 3     | [20, unsigned     | MPLS Label          |
   |                 |       | integer]          |                     |
   |                 |       |                   |                     |
   | NSH             | 4     | [SERVICE_PATH_ID] | Included NSH which  |
   |                 |       | [8, unsigned      | is a SPI and        |
   |                 |       | integer]          | Service Index (8    |
   |                 |       |                   | bits).              |
   |                 |       |                   |                     |
   | INTERFACE_INDEX | 5     | [16, unsigned     | Interface Index (an |
   |                 |       | integer]          | unsigned integer).  |
   +-----------------+-------+-------------------+---------------------+

                        Table 19: Next Hop Subtypes

   +----------+-------+------------------+-----------------------------+
   | Field    | Type  | Type             | Description                 |
   |          | Value |                  |                             |
   +----------+-------+------------------+-----------------------------+
   | QOS      | 0     | [qos index type] | Refers to a single index    |
   |          |       | [index] [DSCP]   | and DSCP to write to the    |
   |          |       |                  | packet.                     |
   |          |       |                  |                             |
   | GBR      | 1     | [32, unsigned    | Guaranteed bit rate.        |
   |          |       | integer]         |                             |
   |          |       |                  |                             |
   | MBR      | 2     | [32, unsigned    | Maximum bit rate.           |
   |          |       | integer]         |                             |
   |          |       |                  |                             |
   | PMIP_QOS | 3     | Varies by Type   | A non-traffic selector PMIP |
   |          |       |                  | QoS Attribute per [RFC7222] |
   +----------+-------+------------------+-----------------------------+

                          Table 20: QoS Subtypes

   +----------+---------+----------------+-----------------------------+
   | Field    | Type    | Type           | Description                 |
   |          | Value   |                |                             |
   +----------+---------+----------------+-----------------------------+
   | IPIP_TUN | 0       |                | IP in IP Configuration      |
   |          |         |                |                             |
   | UDP_TUN  | 1       | [src_port]     | UDP Tunnel - source and/or  |
   |          |         | [dst_port]     | destination port            |
   |          |         |                |                             |
   | GRE_TUN  | 2       | [32, GRE Key]  | GRE Tunnel.                 |
   +----------+---------+----------------+-----------------------------+

                         Table 21: Tunnel Subtypes

   The following COMMAND_SET values are supported for IETF_PMIP.

   o  assign-ip - Assign the IP Address for the mobile session.

   o  assign-dpn - Assign the Dataplane Node.

   o  session - Assign values for the Session Level.

   o  uplink - Command applies to uplink.

   o  downlink - Command applies to downlink.

7.1.  3GPP Specific Extenstions

   3GPP support is optional and detailed in this section.  The following
   acronyms are used:

   APN-AMBR:  Access Point Name Aggregate Maximum Bit Rate

   ARP:  Allocation of Retention Priority

   EBI:  EPS Bearer Identity

   GBR:  Guaranteed Bit Rate

   GTP:  GPRS (General Packet Radio Service) Tunneling Protocol

   IMSI:  International Mobile Subscriber Identity

   MBR:  Maximum Bit Rate

   QCI:  QoS Class Identifier

   TEID:  Tunnel Endpoint Identifier.

   TFT:  Traffic Flow Template (TFT)

   UE-AMBR:  User Equipment Aggregate Maximum Bit Rate

   NOTE: GTP Sequence Number (SEQ_NUMBER) is used in failover and
   handover.

   +-------------+-------+-------------+-------------------------------+
   | Field       | Type  | Namespace / | Type                          |
   |             | Value | Entity      |                               |
   |             |       | Extended    |                               |
   +-------------+-------+-------------+-------------------------------+
   | GTPV1       | 3     | Tunnel      | LOCAL_TEID REMOTE_TEID        |
   |             |       | Subtypes    | SEQ_NUMBER                    |
   |             |       | namespace.  |                               |
   |             |       |             |                               |
   | GTPV2       | 4     | Tunnel      | LOCAL_TEID REMOTE_TEID        |
   |             |       | Subtypes    | SEQ_NUMBER                    |
   |             |       | namespace.  |                               |
   |             |       |             |                               |
   | LOCAL_TEID  | N/A   | N/A         | [32, unisgned integer]        |
   |             |       |             |                               |
   | REMOTE_TEID | N/A   | N/A         | [32, unisgned integer]        |
   |             |       |             |                               |
   | SEQ_NUMBER  | N/A   | N/A         | [32, unisgned integer]        |
   |             |       |             |                               |
   | TFT         | 3     | Descriptors | Format per TS 24.008 Section  |
   |             |       | Subtypes    | 10.5.6.12.                    |
   |             |       | namespace.  |                               |
   |             |       |             |                               |
   | IMSI        | N/A   | Context     | [64, unsigned integer]        |
   |             |       | (new        |                               |
   |             |       | attribute)  |                               |
   |             |       |             |                               |
   | EBI         | N/A   | Context     | [4, unsigned integer]         |
   |             |       | (new        |                               |
   |             |       | attribute)  |                               |
   |             |       |             |                               |
   | 3GPP_QOS    | 4     | QoS         | [8, qci] [32, gbr] [32, mbr]  |
   |             |       | Subtypes    | [32, apn_ambr] [32, ue_ambr]  |
   |             |       | namespace.  | ARP                           |
   |             |       |             |                               |
   | ARP         | N/A   | N/A         | See Allocation-Retention-     |
   |             |       |             | Priority from [RFC7222]       |
   +-------------+-------+-------------+-------------------------------+

                 Table 22: 3GPP Attributes and Structures

   The following COMMAND_SET values are supported for 3GPP.

   o  assign-ip - Assign the IP Address for the mobile session.

   o  assign-dpn - Assign the Dataplane Node.

   o  assign-fteid-ip - Assign the Fully Qualified TEID (F-TEID) LOCAL
      IP address.

   o  assign-fteid-teid - Assign the Fully Qualified TEID (F-TEID) LOCAL
      TEID.

   o  session - Assign values for the Session Level.  When this involves
      'assign-fteid-ip' and 'assign-fteid-teid' this implies the values
      are part of the default bearer.

   o  uplink - Command applies to uplink.

   o  downlink - Comman applies to downlink.

8.  Implementation Status

   Two FPC Agent implementations have been made to date.  The first was
   based upon Version 03 of the draft and followed Model 1.  The second
   follows Version 04 of the document.  Both implementations were
   OpenDaylight plug-ins developed in Java by Sprint.  Version 03 was
   known as fpcagent and version 04's implementation is simply referred
   to as 'fpc'.

   fpcagent's intent was to provide a proof of concept for FPC Version
   03 Model 1 in January 2016 and research various optimiziations,
   errors, corrections and optimizations that the Agent could make when
   supporting multiple DPNs.

   As the code developed to support OpenFlow and a proprietary DPN from
   a 3rd party, several of the advantages of a multi-DPN Agent became
   obvious including the use of machine learning to reduce the number of
   Flows and Policy entities placed on the DPN.  This work has driven
   new efforts in the DIME WG, namely Diameter Policy Groups
   [I-D.bertz-dime-policygroups].

   A throughput performance of tens per second using various NetConf
   based solutions in OpenDaylight made fpcagent undesirable for call
   processing.  The RPC implementration improved throughput by an order
   of magnitude but was not useful based upon FPC's Version 03 design
   using either model.  During this time the features of version 04 and
   its converged model became attractive and teh fpcagent project was
   closed in August 2016. fpcagent will no longer be developed and will
   remain a proprietary implemenation.

   The learnings of fpcagent has influenced the second project, fpc.
   Fpc is also an OpenDaylight project but is intended for open source
   release, if circumstances permit.  It is also scoped to be a fully
   compliant FPC Agent that supports multiple DPNs including those that
   communicate via OpenFlow.  The following features present in this
   draft and developed by the FPC co-authors have already lead to an
   order of magnitude improvement.

       Migration of non-realtime provisioning of entities such as
       topology and policy allowed the implementation to focus only on
       the rpc.

       Using only 5 messages and 2 notifications has also reduced
       implementation time.  As of this writing the project is 4 weeks
       old and currently supports CONFIGURE and CONFIGURE_BUNDLES based
       upon the effort of 3 part time engineers.

       Command Sets, an optional feature in this specfication, have
       eliminated 80% of the time spent determining what needs to be
       done with a Context during a Create or Update operation.

       The addition of the DPN List in a Context Delete operation
       permits the Agent to avoid lookups of Context data in the Cache
       entirely.  For 3GPP support, extra attributes are required in the
       Delete to avoid any cache lookup.

       Op Reference is an optional feature modeled after video delivery.
       It has reduced unnecessary cache lookups.  It also has the
       additional benefit of allowing an Agent to become cacheless and
       effectively act as a FPC protocol adapater remotely with multi-
       DPN support or colocated on the DPN in a single-DPN support
       model.

       Multi-tenant support allows for Cache searches to be partitioned
       for clustering and perforamnce improvements.  This has not been
       capitalized upon by the current implementation but is part of the
       development roadmap.

       Use of Contexts to pre-provision policy has also eliminated any
       processing of Ports for DPNs which permitted the code for
       CONFIGURE and CONFIGURE_BUNDLES to be implemented as a simple
       nested FOR loops (see below).

   Current performance results without code optimizations or tuning
   allow 2-5K FPC Contexts processed per second on a Mac laptop sourced
   in 2013.  This results in 2x the number of transactions on the
   southbound interface to a proprietary DPN API on the same machine.

   fpc currently supports the following after 3 weeks of development by
   two part time engineers:

                           1 proprietary DPN API

                           Policy and Topology as defined in this
                           specification using OpenDaylight North Bound
                           Interfaces such as NetConf and RestConf

                           CONFIGURE and CONFIGURE_BUNDLES (all
                           operations)

                           DPN assignment, Tunnel allocations and IPv4
                           address assignment by the Agent or Client.

                           Immediate Response is always an
                           OK_NOTIFY_FOLLOWS.

   assignment system (receives rpc call):
     perform basic operation integrity check
     if CONFIGURE then
       goto assignments
       if assignments was ok then
         send request to activation system
         respond back to client with assignment data
       else
         send back error
       end if
     else if CONFIGURE_BUNDLES then
       for each operation in bundles
       goto assignments
       if assignments was ok then
         hold onto data
       else
         return error with the assignments that occurred in
           prior operations (best effort)
       end if
       end for
       send bundles to activation systems
     end if

   assignments:
     assign DPN, IPv4 Address and/or tunnel info as requried
     if an error occurs undo all assigments in this operation
     return result

   activation system:
     build cache according to op-ref and operation type
     for each operation
       for each Context
         for each DPN / direction in Context
           perform actions on DPN according to Command Set
         end for
       end for
     end for
     commit changes to in memory cache
     log transaction for tracking and nofication (CONFIG_RESULT_NOTIFY)

                        Figure 26: fpc pseudo code

   As of this writing (Sept 2016) the implementation is 3 weeks old an
   considered pre-alpha.  It is scheduled to be conformant to all FPC
   version 04 aspects within 60 days.

   For further information please contact Lyle Bertz who is also a co-
   author of this document.

   NOTE: Tenant support requires binding a Client ID to a Tenant ID (it
   is a one to many relation) but that is outside of the scope of this
   specification.  Otherwise, the specification is complete in terms of
   providing sufficient information to implement an Agent.

9.  Security Considerations

   Detailed protocol implementations for DMM Forwarding Policy
   Configuration must ensure integrity of the information exchanged
   between an FPC Client and an FPC Agent.  Required Security
   Associations may be derived from co-located functions, which utilize
   the FPC Client and FPC Agent respectively.

10.  IANA Considerations

   This document provides a data model and protocol operation for DMM
   Forwarding Policy Configuration.  YANG models are currently included
   in the Appendix and will be updated per the next revision of this
   document to specify the data model as well as to enable an
   implementation of the FPC protocol using RPC.

   No actions from IANA are required.  In case the semantics of this
   specification will be mapped to a particular wire protocol, authors
   of an associated separate document will approach IANA for the
   associated action to create a registry or add registry entries.

11.  Work Team Participants

   Participants in the FPSM work team discussion include Satoru
   Matsushima, Danny Moses, Sri Gundavelli, Marco Liebsch, Pierrick
   Seite, Alper Yegin, Carlos Bernardos, Charles Perkins and Fred
   Templin.

12.  References

12.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <http://www.rfc-editor.org/info/rfc2119>.

   [RFC6088]  Tsirtsis, G., Giarreta, G., Soliman, H., and N. Montavont,
              "Traffic Selectors for Flow Bindings", RFC 6088,
              DOI 10.17487/RFC6088, January 2011,
              <http://www.rfc-editor.org/info/rfc6088>.

   [RFC6089]  Tsirtsis, G., Soliman, H., Montavont, N., Giaretta, G.,
              and K. Kuladinithi, "Flow Bindings in Mobile IPv6 and
              Network Mobility (NEMO) Basic Support", RFC 6089,
              DOI 10.17487/RFC6089, January 2011,
              <http://www.rfc-editor.org/info/rfc6089>.

   [RFC7333]  Chan, H., Ed., Liu, D., Seite, P., Yokota, H., and J.
              Korhonen, "Requirements for Distributed Mobility
              Management", RFC 7333, DOI 10.17487/RFC7333, August 2014,
              <http://www.rfc-editor.org/info/rfc7333>.

12.2.  Informative References

   [I-D.bertz-dime-policygroups]
              Bertz, L., "Diameter Policy Groups and Sets", draft-bertz-
              dime-policygroups-01 (work in progress), July 2016.

   [I-D.ietf-dmm-deployment-models]
              Gundavelli, S. and S. Jeon, "DMM Deployment Models and
              Architectural Considerations", draft-ietf-dmm-deployment-
              models-00 (work in progress), August 2016.

   [I-D.ietf-netconf-restconf]
              Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
              Protocol", draft-ietf-netconf-restconf-16 (work in
              progress), August 2016.

   [RFC5213]  Gundavelli, S., Ed., Leung, K., Devarapalli, V.,
              Chowdhury, K., and B. Patil, "Proxy Mobile IPv6",
              RFC 5213, DOI 10.17487/RFC5213, August 2008,
              <http://www.rfc-editor.org/info/rfc5213>.

   [RFC6241]  Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
              and A. Bierman, Ed., "Network Configuration Protocol
              (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
              <http://www.rfc-editor.org/info/rfc6241>.

   [RFC7222]  Liebsch, M., Seite, P., Yokota, H., Korhonen, J., and S.
              Gundavelli, "Quality-of-Service Option for Proxy Mobile
              IPv6", RFC 7222, DOI 10.17487/RFC7222, May 2014,
              <http://www.rfc-editor.org/info/rfc7222>.

Appendix A.  YANG Data Model for the FPC protocol

   These modules define YANG definitions.  Seven modules are defined:

   o  ietf-dmm-fpcbase (fpcbase) - Defines the base model for model as
      defined in this document

   o  ietf-dmm-fpcagent (fpcagent) - Defines the FPC Agent entites and
      messages as defined in this document

   o  ietf-pmip-qos (pmip-qos) - Defines proxy mobile IPv6 QoS
      parameters per RFC 7222

   o  ietf-traffic-selectors-types (traffic-selectors) - Defines Traffic
      Selectors per RFC 6088

   o  ietf-dmm-threegpp - Defines the base structures for 3GPP based IP
      mobility and augments fpcagent to support these parameters.

   o  ietf-dmm-fpc-pmip - Augments fpcp-base to include PMIP Traffic
      Selectors as a Traffic Descriptor subtype and pmip-qos QoS
      parameters, where applicable, as properties.

   o  ietf-dmm-fpc-policyext - defines basic policy extensions, e.g.
      Actions and Descriptors, to fpcbase and as defined in this
      document.

A.1.  YANG Models

A.1.1.  FPC Base YANG Model

module ietf-dmm-fpcbase {
    namespace "urn:ietf:params:xml:ns:yang:fpcbase";
    prefix fpcbase;

    import ietf-inet-types { prefix inet; revision-date 2013-07-15; }

    organization "IETF DMM Working Group";
    contact "Satoru Matsushima <satoru.matsushima@g.softbank.co.jp>";

    description
    "This module contains YANG definition for
     Forwarding Policy Configuration Protocol.(FPCP)";

    revision 2016-08-03 {
        description "Changes based on -04 version of FPC draft.";
        reference "draft-ietf-dmm-fpc-cpdp-04";
    }
    feature fpc-basic-agent {
        description "This is an agent co-located with a DPN.  In this case
        only DPN Peer Groups, the DPN Id and Control Protocols are exposed
        along with the core structures.";
    }
    feature fpc-multi-dpn {
        description "The agent supports multiple DPNs.";
    }

    typedef fpc-identity {
        type union {
            type uint32;
            type string;
            type instance-identifier;
        }
    }

    grouping target-value {
      leaf target {
          type fpc-identity;
      }
    }

    grouping targets-value {
      list targets {
          key "target";
          leaf target {
            type fpc-identity;
          }
          leaf dpn-id {
                type fpcbase:fpc-dpn-id;
          }
      }
    }

    // Descriptor Structure
    typedef fpc-descriptor-id-type {
        type fpcbase:fpc-identity;
        description "Descriptor-ID";
    }
    identity fpc-descriptor-type {
        description "A traffic descriptor";
    }
    grouping fpc-descriptor-id {
      leaf descriptor-id {
        type fpcbase:fpc-identity;
      }
    }
    grouping fpc-descriptor {
        uses fpcbase:fpc-descriptor-id;
        leaf descriptor-type {
          mandatory true;
          type identityref {
            base "fpc-descriptor-type";
          }
          description "Descriptor Type";
        }
        choice descriptor-value {
          case all-traffic {
            leaf all-traffic {
              type empty;
            }
          }
        }
    }

    // Action Structure
    typedef fpc-action-id-type {
        type fpcbase:fpc-identity;
        description "Action-ID";
    }
    identity fpc-action-type {
        description "Action Type";
    }
    grouping fpc-action-id {
      leaf action-id {
        type fpcbase:fpc-action-id-type;
      }
    }
    grouping fpc-action {
        uses fpcbase:fpc-action-id;
        leaf action-type {
          mandatory true;
          type identityref {
            base "fpc-action-type";
          }
          description "Action Type";
        }
        choice action-value {
          case drop {
            leaf drop {
              type empty;
            }
          }
        }
    }
    // Rule Structure
    grouping fpc-rule {
        description
          "FPC Rule.  When no actions are present the action is DROP.
          When no Descriptors are empty the default is 'all traffic'.";
        list descriptors {
          key descriptor-id;
          uses fpcbase:fpc-descriptor-id;
          leaf direction {
            type fpc-direction;
          }
        }
        list actions {
          key action-id;
          leaf order {
              type uint32;
          }
          uses fpcbase:fpc-action-id;
        }
    }

    // Policy Structures
    typedef fpc-policy-id {
        type fpcbase:fpc-identity;
    }
    grouping fpc-policy {
        leaf policy-id {
            type fpcbase:fpc-policy-id;
        }
        list rules {
            key order;
            leaf order {
              type uint32;
            }
            uses fpcbase:fpc-rule;
        }
    }

    // Policy Group
    typedef fpc-policy-group-id {
        type fpcbase:fpc-identity;
    }
    grouping fpc-policy-group {
      leaf policy-group-id {
        type fpcbase:fpc-policy-group-id;
      }
      leaf-list policies {
        type fpcbase:fpc-policy-id;

      }
    }

    // Mobility Structures
    // Port Group
    typedef fpc-port-id {
        type fpcbase:fpc-identity;
    }
    grouping fpc-port {
        leaf port-id {
            type fpcbase:fpc-port-id;
        }
        leaf-list policy-groups {
            type fpcbase:fpc-policy-group-id;
        }
    }

    // Context Group
    typedef fpc-context-id {
        type fpcbase:fpc-identity;
    }
    grouping fpc-context-profile {
        description "A profile that applies to a specific direction";
        leaf tunnel-local-address {
            type inet:ip-address;
            description "Uplink endpoint address of the DPN which agent exists.";
        }
        leaf tunnel-remote-address {
            type inet:ip-address;
            description "Uplink endpoint address of the DPN which agent exists.";
        }
        leaf tunnel-mtu-size {
            type uint32;
            description "Tunnel MTU size";
        }
        container mobility-tunnel-parameters {
            description "Specifies profile specific uplink tunnel parameters to the DPN which the agent exists. The profiles includes GTP/TEID for 3gpp profile, GRE/Key for ietf-pmip profile, or new profile if anyone will define it.";
            uses fpcbase:mobility-info;
        }
        container nexthop {
            uses fpcbase:fpc-nexthop;
        }
        container qos-profile-parameters {
            uses fpcbase:fpc-qos-profile;
        }
        container dpn-parameters {
        }
        list vendor-parameters {
            key "vendor-id vendor-type";
            uses fpcbase:vendor-attributes;
        }
    }

    typedef fpc-direction {
       type enumeration {
         enum uplink;
         enum downlink;
       }
    }

    grouping fpc-context {
        leaf context-id {
            type fpcbase:fpc-context-id;
        }
        leaf-list ports {
            type fpcbase:fpc-port-id;
        }
        leaf dpn-group {
          type fpcbase:fpc-dpn-group-id;
        }
        leaf-list delegating-ip-prefixes {
            type inet:ip-prefix;
        }
        container ul {
            if-feature fpcbase:fpc-basic-agent;
            uses fpcbase:fpc-context-profile;
        }
        container dl {
            if-feature fpcbase:fpc-basic-agent;
            uses fpcbase:fpc-context-profile;
        }
        list dpns {
            if-feature fpcbase:fpc-multi-dpn;
            key "dpn-id direction";
            leaf dpn-id {
                type fpcbase:fpc-dpn-id;
            }
            leaf direction {
                mandatory true;
                type fpcbase:fpc-direction;
            }
            uses fpcbase:fpc-context-profile;
        }
        leaf parent-context {
            type fpcbase:fpc-context-id;
        }

    }

    // Mobility (Tunnel) Information
    grouping mobility-info {
        choice profile-parameters {
            case nothing {
              leaf none {
                type empty;
              }
            }
        }
    }

    // Next Hop Structures
    typedef fpcp-service-path-id {
        type uint32 {
            range "0..33554431";
        }
        description "SERVICE_PATH_ID";
    }

    identity fpc-nexthop-type {
        description "Next Hop Type";
    }
    identity fpc-nexthop-ip {
        base "fpcbase:fpc-nexthop-type";
    }
    identity fpc-nexthop-servicepath {
        base "fpcbase:fpc-nexthop-type";
    }
    grouping fpc-nexthop {
        leaf nexthop-type {
            type identityref {
              base "fpcbase:fpc-nexthop-type";
            }
        }
        choice nexthop-value {
            case ip {
                leaf ip {
                  type inet:ip-address;
                }
            }
            case servicepath {
                leaf servicepath {
                    type fpcbase:fpcp-service-path-id;
                }
            }
        }

    }

    // QoS Information
    identity fpc-qos-type {
        description "Base identity from which specific uses of QoS types are derived.";
    }
    grouping fpc-qos-profile {
        leaf qos-type {
            type identityref {
                base fpcbase:fpc-qos-type;
            }
            description "the profile type";
        }
        choice value {
        }
    }

    // Vendor Specific Attributes
    identity vendor-specific-type {
        description "Vendor Specific Attribute Type";
    }
    grouping vendor-attributes {
        leaf vendor-id {
            type fpcbase:fpc-identity;
        }
        leaf vendor-type {
            type identityref {
                base "fpcbase:vendor-specific-type";
            }
        }
        choice value {
            case empty-type {
                leaf empty-type {
                    type empty;
                }
            }
        }
    }

    // Topology
    typedef fpc-domain-id {
        type fpcbase:fpc-identity;
    }
    grouping fpc-domain {
      leaf domain-id {
        type fpcbase:fpc-domain-id;
      }
      leaf domain-name {
        type string;
      }
      leaf domain-type {
        type string;
      }
    }

    typedef fpc-dpn-id {
        type fpcbase:fpc-identity;
        description "DPN Identifier";
    }
    identity fpc-dpn-control-protocol {
        description "DPN Control Protocol";
    }
    grouping fpc-dpn {
        leaf dpn-id {
          type fpcbase:fpc-dpn-id;
        }
        leaf dpn-name {
          type string;
        }
        leaf-list dpn-groups {
          type fpcbase:fpc-dpn-group-id;
        }
        leaf node-reference {
          type instance-identifier;
        }
    }

    typedef fpc-dpn-group-id {
        type fpcbase:fpc-identity;
        description "DPN Group Identifier";
    }
    identity fpc-forwaridingplane-role {
        description "Role of DPN Group in the Forwarding Plane";
    }
    identity fpc-access-type {
        description "Access Type of the DPN Group";
    }
    identity fpc-mobility-profile-type {
        description "Mobility Profile Type";
    }

    grouping fpc-dpn-peer-group {
        leaf remote-dpn-group-id {
            type fpcbase:fpc-dpn-group-id;
        }
        leaf remote-mobility-profile {
            type identityref {
                base "fpcbase:fpc-mobility-profile-type";
            }
        }
        leaf remote-data-plane-role {
            type identityref {
                base "fpcbase:fpc-forwaridingplane-role";
            }
        }
        leaf remote-endpoint-address {
            type inet:ip-address;
        }
        leaf local-endpoint-address {
            type inet:ip-address;
        }
        leaf tunnel-mtu-size {
            type uint32;
        }
    }

    // Events, Probes & Notifications
    identity event-type {
        description "Base Event Type";
    }

    typedef event-type-id {
        type uint32;
    }

    grouping monitor-id {
      leaf monitor-id {
        type fpcbase:fpc-identity;
      }
    }

    identity report-type {
      description "Type of Report";
    }
    identity periodic-report {
      base "fpcbase:report-type";
    }
    identity threshold-report {
      base "fpcbase:report-type";
    }
    identity scheduled-report {
      base "fpcbase:report-type";
    }
    identity events-report {
      base "fpcbase:report-type";
    }

    grouping report-config {
      choice event-config-value {
        case periodic-config {
            leaf period {
              type uint32;
            }
        }
        case threshold-config {
            leaf lo-thresh {
              type uint32;
            }
            leaf hi-thresh {
              type uint32;
            }
        }
        case scheduled-config {
            leaf report-time {
              type uint32;
            }
        }
        case events-config-ident {
            leaf-list event-identities {
              type identityref {
                base "fpcbase:event-type";
              }
            }
        }
        case events-config {
            leaf-list event-ids {
              type uint32;
            }
        }
      }
    }

    grouping monitor-config {
      uses fpcbase:monitor-id;
      uses fpcbase:target-value;
      uses fpcbase:report-config;
    }

    grouping report {
      uses fpcbase:monitor-config;
      choice report-value {
        leaf trigger {
          type fpcbase:event-type-id;
        }
        case simple-empty {
          leaf nothing {
            type empty;
          }
        }
        case simple-val32 {
          leaf val32 {
            type uint32;
          }
        }
      }
    }
}

                         Figure 27: FPC YANG base

A.1.2.  FPC Agent YANG Model

module ietf-dmm-fpcagent {
    namespace "urn:ietf:params:xml:ns:yang:fpcagent";
    prefix fpcagent;

    import ietf-dmm-fpcbase { prefix fpcbase; revision-date 2016-08-03; }
    import ietf-inet-types { prefix inet; revision-date 2013-07-15; }

    organization "IETF DMM Working Group";
    contact "Satoru Matsushima <satoru.matsushima@g.softbank.co.jp>";

    description
    "This module contains YANG definition for
     Forwarding Policy Configuration Protocol.(FPCP)";

    revision 2016-08-03 {
        description "Changes based on -04 version of FPC draft.";
        reference "draft-ietf-dmm-fpc-cpdp-04";
    }
    feature fpc-cloning {
      description "An ability to support cloning in the RPC.";
    }
    feature fpc-basename-registry {
      description "Ability to track Base Names already provisioned on the Agent";
    }
    feature fpc-bundles {
      description "Ability for Client to send multiple bundles of actions to
        an Agent";

    }
    feature fpc-client-binding {
      description "Allows a FPC Client to bind a DPN to an Topology Object";
    }
    feature fpc-auto-binding {
      description "Allows a FPC Agent to advertise Topology Objects that could be DPNs";
    }
    feature instruction-bitset {
      description "Allows the expression of instructions (bit sets) over FPC.";
    }
    feature operation-ref-scope {
      description "Provides the scope of refeneces in an operation.  Used to optmize
        the Agent processing.";
    }

    typedef agent-identifier {
        type fpcbase:fpc-identity;
    }

    typedef client-identifier {
        type fpcbase:fpc-identity;
    }

    grouping basename-info {
          leaf basename {
            if-feature fpcagent:fpc-basename-registry;
            description "Rules Basename";
            type fpcbase:fpc-identity;
          }
          leaf base-state {
            if-feature fpcagent:fpc-basename-registry;
            type string;
          }
          leaf base-checkpoint {
            if-feature fpcagent:fpc-basename-registry;
            type string;
          }
    }

    // Top Level Structures
    container tenants {
        description "";

        list tenant {
            description "";
            key "tenant-id";
            leaf tenant-id {
                type fpcbase:fpc-identity;

            }

            container fpc-policy {
              list policy-groups {
                  key "policy-group-id";
                  uses fpcbase:fpc-policy-group;
              }
              list policies {
                  key "policy-id";
                  uses fpcbase:fpc-policy;
              }
              list descriptors {
                key descriptor-id;
                uses fpcbase:fpc-descriptor;
              }
              list actions {
                  key action-id;
                  uses fpcbase:fpc-action;
              }
            }

            container fpc-mobility {
              config false;
              list contexts {
                  key context-id;
                  uses fpcbase:fpc-context;
              }
              list ports {
                  key port-id;
                  uses fpcbase:fpc-port;
              }
              list monitors {
                  uses fpcbase:monitor-config;
              }
            }
            container fpc-topology {
              // Basic Agent Topology Structures
              list domains {
                key domain-id;
                uses fpcbase:fpc-domain;
                uses fpcagent:basename-info;
              }

              list dpn-group-peers {
                  if-feature fpcbase:fpc-basic-agent;
                  key "remote-dpn-group-id";
                  uses fpcbase:fpc-dpn-peer-group;
              }
              leaf dpn-id {
                if-feature fpcbase:fpc-basic-agent;
                type fpcbase:fpc-dpn-id;
              }
              leaf-list control-protocols {
                if-feature fpcbase:fpc-basic-agent;
                type identityref {
                  base "fpcbase:fpc-dpn-control-protocol";
                }
              }

              list dpn-groups {
                  if-feature fpcbase:fpc-multi-dpn;
                  key dpn-group-id;
                  uses fpcagent:fpc-dpn-group;
                  list domains {
                    key domain-id;
                    uses fpcbase:fpc-domain;
                    uses fpcagent:basename-info;
                  }
              }
              list dpns {
                  if-feature fpcbase:fpc-multi-dpn;
                  key dpn-id;
                  uses fpcbase:fpc-dpn;
              }
            }

        }
    }

    container fpc-agent-info {
      // General Agent Structures
      leaf-list supported-features {
        type string;
      }

      // Common Agent Info
      list supported-events {
        key event;
        leaf event {
          type identityref {
            base "fpcbase:event-type";
          }
        }
        leaf event-id {
          type fpcbase:event-type-id;
        }

      }

      list supported-error-types {
        key error-type;
        leaf error-type {
          type identityref {
            base "fpcagent:error-type";
          }
        }
        leaf error-type-id {
          type fpcagent:error-type-id;
        }
      }
    }

    // Multi-DPN Agent Structures
    grouping fpc-dpn-group {
        leaf dpn-group-id {
            type fpcbase:fpc-dpn-group-id;
        }
        leaf data-plane-role {
            type identityref {
                base "fpcbase:fpc-forwaridingplane-role";
            }
        }
        leaf access-type {
            type identityref {
                base "fpcbase:fpc-access-type";
            }
        }
        leaf mobility-profile {
            type identityref {
                base "fpcbase:fpc-mobility-profile-type";
            }
        }
        list dpn-group-peers {
            key "remote-dpn-group-id";
            uses fpcbase:fpc-dpn-peer-group;
        }
    }

    // RPC
    // RPC Specific Structures
    //Input Structures
    typedef admin-status {
        type enumeration {
            enum enabled { value 0; }
            enum disabled { value 1; }
            enum virtual { value 2; }
        }
    }

    typedef session-status {
        type enumeration {
            enum complete { value 0; }
            enum incomplete { value 1; }
            enum outdated { value 2; }
        }
    }

    typedef op-delay {
        type uint32;
    }

    typedef op-identifier {
        type uint64;
    }

    typedef ref-scope {
      description "Search scope for references in the operation.
        op - All references are contained in the operation body (intra-op)
        bundle - All references in exist in bundle (inter-operation/intra-bundle).
          NOTE - If this value comes in CONFIG call it is equivalen to 'op'.
        storage - One or more references exist outside of the operation and bundle.
          A lookup to a cache / storage is required.
        unknown - the location of the references are unknown.  This is treated as
          a 'storage' type.";
      type enumeration {
        enum none { value 0; }
        enum op { value 1; }
        enum bundle { value 2; }
        enum storage { value 3; }
        enum unknown { value 4; }
      }
    }

    grouping instructions {
      container instructions {
        if-feature instruction-bitset;
        choice instr-type {
        }
      }
    }
    grouping op-header {
      leaf client-id {
        type fpcagent:client-identifier;
      }
      leaf delay {
        type op-delay;
      }
      leaf session-state {
        type session-status;
      }
      leaf admin-state {
        type admin-status;
      }
      leaf op-type {
        type enumeration {
          enum create { value 0; }
          enum update { value 1; }
          enum query { value 2; }
          enum delete { value 3; }
        }
      }
      leaf op-ref-scope {
          if-feature operation-ref-scope;
          type fpcagent:ref-scope;
      }
      uses fpcagent:instructions;
    }

    grouping clone-ref {
      leaf entity {
        type fpcbase:fpc-identity;
      }
      leaf source {
        type fpcbase:fpc-identity;
      }
    }

    identity command-set {
      description "protocol specific commands";
    }

    grouping context-operation {
      uses fpcbase:fpc-context;
      uses fpcagent:instructions;
    }

    grouping port-operation {
      uses fpcbase:fpc-port;
      uses fpcagent:instructions;
    }

    // Output Structure
    grouping payload {
      list ports {
        uses fpcagent:port-operation;
      }
      list contexts {
        uses fpcagent:context-operation;
      }
    }

    grouping op-input {
      uses fpcagent:op-header;
      leaf op-id {
        type op-identifier;
      }
      choice op_body {
        case create_or_update {
          list clones {
            if-feature fpc-cloning;
            key entity;
            uses fpcagent:clone-ref;
          }
          uses fpcagent:payload;
        }
        case delete_or_query {
          uses fpcbase:targets-value;
        }
      }
    }

    typedef result {
      type enumeration {
        enum ok { value 0; }
        enum err { value 1; }
        enum ok-notify-follows { value 2; }
      }
    }

    identity error-type {
      description "Base Error Type";
    }
    identity name-already-exists {
      description "Notification that an entity of the same name already exists";
    }
    typedef error-type-id {
      description "Integer form of the Error Type";
      type uint32;
    }

    grouping op-status-value {
      leaf op-status {
        type enumeration {
          enum ok { value 0; }
          enum err { value 1; }
        }
      }
    }

    grouping result-body {
      leaf op-id {
        type op-identifier;
      }
      choice result-type {
        case err {
          leaf error-type-id {
            type fpcagent:error-type-id;
          }
          leaf error-info {
            type string {
              length "1..1024";
            }
          }
        }
        case create-or-update-success {
          uses fpcagent:payload;
        }
        case delete_or_query-success {
          uses fpcbase:targets-value;
        }
        case empty-case {
        }
      }
    }

    // Common RPCs
    rpc configure {
      input {
        uses fpcagent:op-input;
      }
      output {
        leaf result {
          type result;

        }
        uses fpcagent:result-body;
      }
    }

    rpc configure-bundles {
      if-feature fpcagent:fpc-bundles;
      input {
        leaf highest-op-ref-scope {
            if-feature operation-ref-scope;
            type fpcagent:ref-scope;
        }
        list bundles {
          key op-id;
          uses fpcagent:op-input;
        }
      }
      output {
        list bundles {
          key op-id;
          uses fpcagent:result-body;
        }
      }
    }

    rpc bind-dpn {
      if-feature fpcagent:fpc-client-binding;
      input {
        leaf node-id {
          type inet:uri;
        }
        uses fpcbase:fpc-dpn;
      }
      output {
        uses fpcagent:result-body;
      }
    }
    rpc unbind-dpn {
      if-feature fpcagent:fpc-client-binding;
      input {
        leaf dpn-id {
          type fpcbase:fpc-dpn-id;
        }
      }
      output {
        uses fpcagent:result-body;
      }
    }
    // Notification Messages & Structures
    typedef notification-id {
      type uint32;
    }

    grouping notification-header {
      leaf notification-id {
          type fpcagent:notification-id;
      }
      leaf timestamp {
          type uint32;
      }
    }

    notification config-result-notification {
      uses fpcagent:notification-header;
      choice value {
        case config-result {
          uses fpcagent:op-status-value;
          uses fpcagent:result-body;
        }
        case config-bundle-result {
          list bundles {
            uses fpcagent:op-status-value;
            uses fpcagent:result-body;
          }
        }
      }
    }

    rpc event_register {
        description "Used to register monitoring of parameters/events";
        input {
          uses fpcbase:monitor-config;
        }
        output {
          leaf monitor-result {
            type fpcagent:result;
          }
        }
    }

    rpc event_deregister {
        description "Used to de-register monitoring of parameters/events";
        input {
          list monitors {
            uses fpcbase:monitor-id;
          }

        }
        output {
          leaf monitor-result {
            type fpcagent:result;
          }
        }
    }

    rpc probe {
        description "Probe the status of a registered monitor";
        input {
          uses fpcbase:targets-value;
        }
        output {
          leaf monitor-result {
            type fpcagent:result;
          }
        }
    }

    notification notify {
        uses fpcagent:notification-header;
        choice value {
            case dpn-candidate-available {
              if-feature fpcagent:fpc-auto-binding;
              leaf node-id {
                type inet:uri;
              }
              leaf-list access-types {
                type identityref {
                  base "fpcbase:fpc-access-type";
                }
              }
              leaf-list mobility-profiles {
                type identityref {
                  base "fpcbase:fpc-mobility-profile-type";
                }
              }
              leaf-list forwarding-plane-roles {
                type identityref {
                  base "fpcbase:fpc-forwaridingplane-role";
                }
              }
            }
            case monitor-notification {
              choice monitor-notification-value {
                case simple-monitor {
                  uses fpcbase:report;

                }
                case bulk-monitors {
                  list reports {
                    uses fpcbase:report;
                  }
                }
              }
            }
        }
    }
}

                         Figure 28: FPC YANG agent

A.1.3.  PMIP QoS Model

module ietf-pmip-qos {
    yang-version 1;

    namespace
      "urn:ietf:params:xml:ns:yang:ietf-pmip-qos";

    prefix "qos-pmip";

    import ietf-inet-types {
        prefix inet;
        revision-date 2013-07-15;
    }
    import ietf-traffic-selector-types { prefix traffic-selectors; }

    organization
      "IETF DMM (Dynamic Mobility Management) Working Group";

    contact
      "WG Web:   <https://datatracker.ietf.org/wg/dmm/>
     WG List:  <mailto:dmm@ietf.org>

     WG Chair: Dapeng Liu
               <mailto:maxpassion@gmail.com>

     WG Chair: Jouni Korhonen
               <mailto:jouni.nospam@gmail.com>

     Editor:
               <mailto:>";

    description
      "This module contains a collection of YANG definitions for

     quality of service paramaters used in Proxy Mobile IPv6.

     Copyright (c) 2015 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Simplified BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (http://trustee.ietf.org/license-info).

     This version of this YANG module was created as part of the IETF
        DMM FPC YANG modules; see the RFC itself for full legal notices.";

    revision 2016-02-10 {
        description "Initial revision";
        reference
         "RFC 7222: Quality-of-Service Option for Proxy Mobile IPv6";
    }

    // Type Definitions

    // QoS Option Field Type Definitions
        typedef sr-id {
                type uint8;
            description
             "An 8-bit unsigned integer used
              for identifying the QoS Service Request.  Its uniqueness is within
              the scope of a mobility session.  The local mobility anchor always
              allocates the Service Request Identifier.  When a new QoS Service
              Request is initiated by a mobile access gateway, the Service
              Request Identifier in the initial request message is set to a
              value of (0), and the local mobility anchor allocates a Service
              Request Identifier and includes it in the response.  For any new
              QoS Service Requests initiated by a local mobility anchor, the
              Service Request Identifier is set to the allocated value.";
          }

    typedef traffic-class {
        type inet:dscp;
        description
                "Traffic Class consists of a 6-bit DSCP field followed by a 2-bit
                reserved field.";
           reference
                     "RFC 3289: Management Information Base for the Differentiated
                                Services Architecture
                      RFC 2474: Definition of the Differentiated Services Field
                                (DS Field) in the IPv4 and IPv6 Headers
                      RFC 2780: IANA Allocation Guidelines For Values In
                                the Internet Protocol and Related Headers";
    }

    typedef operational-code {
        type enumeration {
                enum RESPONSE { value 0; }
                enum ALLOCATE { value 1; }
                enum DE-ALLOCATE { value 2; }
                enum MODIFY { value 3; }
                enum QUERY { value 4; }
                enum NEGOTIATE { value 5; }
        }
        description
                "1-octet Operational code indicates the type of QoS request.

              RESPONSE:   (0)
                 Response to a QoS request

              ALLOCATE:   (1)
                 Request to allocate QoS resources

              DE-ALLOCATE:   (2)
                 Request to de-Allocate QoS resources

              MODIFY:   (3)
                 Request to modify QoS parameters for a previously negotiated
                 QoS Service Request

              QUERY:   (4)
                 Query to list the previously negotiated QoS Service Requests
                 that are still active

              NEGOTIATE:   (5)
                Response to a QoS Service Request with a counter QoS proposal

              Reserved:   (6) to (255)
                Currently not used.  Receiver MUST ignore the option received
                with any value in this range.";
    }

    // QoS Attribute Types

    //The enumeration value for mapping - don't confuse with the identities
    typedef qos-attrubite-type-enum {
        type enumeration {
                enum Reserved { value 0; }
                enum Per-MN-Agg-Max-DL-Bit-Rate { value 1; }
                enum Per-MN-Agg-Max-UL-Bit-Rate { value 2; }
                enum Per-Session-Agg-Max-DL-Bit-Rate { value 3; }
                enum Per-Session-Agg-Max-UL-Bit-Rate { value 4; }
          enum Allocation-Retention-Priority { value 5; }
                enum Aggregate-Max-DL-Bit-Rate { value 6; }
                enum Aggregate-Max-UL-Bit-Rate { value 7; }
                enum Guaranteed-DL-Bit-Rate { value 8; }
                enum Guaranteed-UL-Bit-Rate { value 9; }
                enum QoS-Traffic-Selector { value 10; }
                enum QoS-Vendor-Specific-Attribute { value 11; }
        }
                description
                "8-bit unsigned integer indicating the type of the QoS
              attribute.  This specification reserves the following values.
              (0) -  Reserved
                 This value is reserved and cannot be used

              (1) -  Per-MN-Agg-Max-DL-Bit-Rate
                 Per-Mobile-Node Aggregate Maximum Downlink Bit Rate.

              (2) -  Per-MN-Agg-Max-UL-Bit-Rate
                 Per-Mobile-Node Aggregate Maximum Uplink Bit Rate.

              (3) -  Per-Session-Agg-Max-DL-Bit-Rate
                 Per-Mobility-Session Aggregate Maximum Downlink Bit Rate.

                    (4) -  Per-Session-Agg-Max-UL-Bit-Rate
              Per-Mobility-Session Aggregate Maximum Uplink Bit Rate.

              (5) -  Allocation-Retention-Priority
                 Allocation and Retention Priority.

              (6) -  Aggregate-Max-DL-Bit-Rate
                 Aggregate Maximum Downlink Bit Rate.

              (7) -  Aggregate-Max-UL-Bit-Rate
                 Aggregate Maximum Uplink Bit Rate.

              (8) -  Guaranteed-DL-Bit-Rate
                 Guaranteed Downlink Bit Rate.

              (9) -  Guaranteed-UL-Bit-Rate
                 Guaranteed Uplink Bit Rate.

              (10) -  QoS-Traffic-Selector
                 QoS Traffic Selector.

              (11) -  QoS-Vendor-Specific-Attribute
                QoS Vendor-Specific Attribute.

              (12) to (254) -  Reserved
                 These values are reserved for future allocation.

              (255) -  Reserved
                 This value is reserved and cannot be used.";
    }

    // Attribute Type as Identities
    // Added for convenience of inclusion and extension in other YANG modules.
    identity qos-attribute-type {
        description
                "Base type for Quality of Service Attributes";
    }

    identity Per-MN-Agg-Max-DL-Bit-Rate-type {
        base qos-attribute-type;
        description
                "Per-Mobile-Node Aggregate Maximum Downlink Bit Rate.";
        }

        identity Per-MN-Agg-Max-UL-Bit-Rate-type {
        base qos-attribute-type;
        description
                "Per-Mobile-Node Aggregate Maximum Uplink Bit Rate";
        }

        identity Per-Session-Agg-Max-DL-Bit-Rate-type {
        base qos-attribute-type;
        description
                "Per-Mobility-Session Aggregate Maximum Downlink Bit Rate.";
        }

        identity Per-Session-Agg-Max-UL-Bit-Rate-type {
        base qos-attribute-type;
        description
                "Per-Mobility-Session Aggregate Maximum Uplink Bit Rate.";
        }

        identity Allocation-Retention-Priority-type {
        base qos-attribute-type;
        description
                "Allocation and Retention Priority.";
        }

        identity Aggregate-Max-DL-Bit-Rate-type {
                base qos-attribute-type;
                description "Aggregate Maximum Downlink Bit Rate.";
        }

  identity Aggregate-Max-UL-Bit-Rate-type {
      base qos-attribute-type;
      description "Aggregate Maximum Uplink Bit Rate.";
  }

  identity Guaranteed-DL-Bit-Rate-type {
      base qos-attribute-type;
      description "Guaranteed Downlink Bit Rate.";
  }

  identity Guaranteed-UL-Bit-Rate-type {
      base qos-attribute-type;
      description "Guaranteed Uplink Bit Rate.";
  }

  identity QoS-Traffic-Selector-type {
      base qos-attribute-type;
      description "QoS Traffic Selector.";
  }

  identity QoS-Vendor-Specific-Attribute-type {
      base qos-attribute-type;
      description "QoS Vendor-Specific Attribute.";
  }

  //value definitions
  typedef Per-MN-Agg-Max-DL-Bit-Rate-Value {
      type uint32;
      description
          "This is a 32-bit unsigned integer that
          indicates the aggregate maximum downlink bit rate that is
          requested/allocated for all the mobile node's IP flows.  The
          measurement units for Per-MN-Agg-Max-DL-Bit-Rate are bits per
          second.";
        }

        typedef Per-MN-Agg-Max-UL-Bit-Rate-Value {
        type uint32;
        description
                "This is a 32-bit unsigned integer that
              indicates the aggregate maximum uplink bit rate that is requested/
              allocated for the mobile node's IP flows.  The measurement units
              for Per-MN-Agg-Max-UL-Bit-Rate are bits per second.";
        }
        // Generic Structure for the uplink and downlink
        grouping Per-Session-Agg-Max-Bit-Rate-Value {
                leaf max-rate {
                        type uint32;
                        mandatory true;
                        description
                                "This is a 32-bit unsigned integer
                              that indicates the aggregate maximum bit rate that is requested/allocated
                                  for all the IP flows associated with that mobility session.  The measurement
                                  units for Per-Session-Agg-Max-UL/DL-Bit-Rate are bits per second.";
                }
                leaf service-flag {
                        type boolean;
                        mandatory true;
                        description
                                "This flag is used for extending the scope of the
                              target flows for Per-Session-Agg-Max-UL/DL-Bit-Rate from(UL)/to(DL) the mobile
                              node's other mobility sessions sharing the same Service
                              Identifier. 3GPP Access Point Name (APN) is an example of a
                              Service Identifier, and that identifier is carried using the
                              Service Selection mobility option [RFC5149].

                              *  When the (S) flag is set to a value of (1), then the Per-
                                 Session-Agg-Max-Bit-Rate is measured as an aggregate across
                                 all the mobile node's other mobility sessions sharing the same
                                 Service Identifier associated with this mobility session.

                              *  When the (S) flag is set to a value of (0), then the target
                                 flows are limited to the current mobility session.

                              *  The (S) flag MUST NOT be set to a value of (1) when there is no
                                 Service Identifier associated with the mobility session.";
                        reference
                                "RFC 5149 - Service Selection mobility option";
                }
                leaf exclude-flag {
                        type boolean;
                        mandatory true;
                        description
                                "This flag is used to request that the uplink/downlink
                              flows for which the network is providing Guaranteed-Bit-Rate
                              service be excluded from the target IP flows for which Per-
                              Session-Agg-Max-UL/DL-Bit-Rate is measured.

                              *  When the (E) flag is set to a value of (1), then the request is
                                 to exclude the IP flows for which Guaranteed-UL/DL-Bit-Rate
                                 is negotiated from the flows for which Per-Session-Agg-Max-UL/DL-Bit-Rate
                                     is measured.

                              *  When the (E) flag is set to a value of (0), then the request is
                                 not to exclude any IP flows from the target IP flows for which
                                 Per-Session-Agg-Max-UL/DL-Bit-Rate is measured.

                              *  When the (S) flag and (E) flag are both set to a value of (1),
                                 then the request is to exclude all the IP flows sharing the
                                 Service Identifier associated with this mobility session from
                                 the target flows for which Per-Session-Agg-Max-UL/DL-Bit-Rate is
                                 measured.";
                }
        }

        grouping Allocation-Retention-Priority-Value {
                leaf prioirty-level {
                        type uint8 {
                                range "0..15";
                        }
                        mandatory true;
                        description
                                "This is a 4-bit unsigned integer value.  It
                              is used to decide whether a mobility session establishment or
                              modification request can be accepted; this is typically used for
                              admission control of Guaranteed Bit Rate traffic in case of
                              resource limitations.  The priority level can also be used to

                              decide which existing mobility session to preempt during resource
                              limitations.  The priority level defines the relative timeliness
                              of a resource request.

                              Values 1 to 15 are defined, with value 1 as the highest level of
                              priority.

                              Values 1 to 8 should only be assigned for services that are
                              authorized to receive prioritized treatment within an operator
                              domain.  Values 9 to 15 may be assigned to resources that are
                              authorized by the home network and thus applicable when a mobile
                              node is roaming.";
                }
                leaf premption-capability {
                        type enumeration {
                                enum enabled { value 0; }
                                enum disabled { value 1; }
                                enum reserved1 { value 2; }
                                enum reserved2 { value 3; }
                        }
                        mandatory true;
                        description
                                "This is a 2-bit unsigned integer

                              value.  It defines whether a service data flow can get resources
                              that were already assigned to another service data flow with a
                              lower priority level.  The following values are defined:

                                 Enabled (0): This value indicates that the service data flow is
                                 allowed to get resources that were already assigned to another
                                 IP data flow with a lower priority level.

                                 Disabled (1): This value indicates that the service data flow
                                 is not allowed to get resources that were already assigned to
                                 another IP data flow with a lower priority level.  The values
                                 (2) and (3) are reserved.";
                }
                leaf premption-vulnerability {
                        type enumeration {
                                enum enabled { value 0; }
                                enum disabled { value 1; }
                                enum reserved1 { value 2; }
                                enum reserved2 { value 3; }
                        }
                        mandatory true;
                        description
                                "This is a 2-bit unsigned integer
                              value.  It defines whether a service data flow can lose the
                              resources assigned to it in order to admit a service data flow
                              with a higher priority level.  The following values are defined:

                                 Enabled (0): This value indicates that the resources assigned
                                 to the IP data flow can be preempted and allocated to a service
                                 data flow with a higher priority level.

                                 Disabled (1): This value indicates that the resources assigned
                                 to the IP data flow shall not be preempted and allocated to a
                                 service data flow with a higher priority level.  The values (2)
                                 and (3) are reserved.";
                }
        }

        typedef Aggregate-Max-DL-Bit-Rate-Value {
                type uint32;
                description
                        "This is a 32-bit unsigned integer that
                indicates the aggregate maximum downlink bit rate that is
                requested/allocated for downlink IP flows.  The measurement units
                for Aggregate-Max-DL-Bit-Rate are bits per second.";
        }

        typedef Aggregate-Max-UL-Bit-Rate-Value {
        type uint32;
        description
                "This is a 32-bit unsigned integer that
              indicates the aggregate maximum downlink bit rate that is
              requested/allocated for downlink IP flows.  The measurement units
              for Aggregate-Max-DL-Bit-Rate are bits per second.";
        }

        typedef Guaranteed-DL-Bit-Rate-Value {
                type uint32;
                description
                        "This is a 32-bit unsigned integer that
                indicates the guaranteed bandwidth in bits per second for downlink
                IP flows.  The measurement units for Guaranteed-DL-Bit-Rate are
                bits per second.";
        }

        typedef Guaranteed-UL-Bit-Rate-Value {
        type uint32;
        description
                "This is a 32-bit unsigned integer that
              indicates the guaranteed bandwidth in bits per second for uplink
              IP flows.  The measurement units for Guaranteed-UL-Bit-Rate are
              bits per second.";
        }

        grouping QoS-Vendor-Specific-Attribute-Value-Base {
                leaf vendorid {
                        type uint32;
                        mandatory true;
                        description
                                "The Vendor ID is the SMI (Structure of Management
                      Information) Network Management Private Enterprise Code of the
                      IANA-maintained 'Private Enterprise Numbers' registry [SMI].";
                        reference
                                "'PRIVATE ENTERPRISE NUMBERS', SMI Network Management
                Private Enterprise Codes, April 2014,
                <http://www.iana.org/assignments/enterprise-numbers>";
                }
                leaf subtype {
                        type uint8;
                        mandatory true;
                        description
                                "An 8-bit field indicating the type of vendor-specific
                      information carried in the option.  The namespace for this sub-
                      type is managed by the vendor identified by the Vendor ID field.";
                }
        description
                "QoS Vendor-Specific Attribute.";
        }

    //NOTE - We do NOT add the Status Codes or other changes in PMIP in this module

        //Primary Structures (groupings)
    grouping qosattribute {
        leaf attributetype {
            type identityref {
                base qos-attribute-type;
            }
            mandatory true;
            description "the attribute type";
        }

                  //All of the sub-types by constraint
        choice attribute-choice {
            case per-mn-agg-max-dl-case {
                when "../attributetype = 'Per-MN-Agg-Max-DL-Bit-Rate-type'";
                leaf per-mn-agg-max-dl {
                    type qos-pmip:Per-MN-Agg-Max-DL-Bit-Rate-Value;
                }
            }
            case per-mn-agg-max-ul-case {
                when "../attributetype = 'Per-MN-Agg-Max-UL-Bit-Rate-type'";
                leaf per-mn-agg-max-ul {
                    type qos-pmip:Per-MN-Agg-Max-UL-Bit-Rate-Value;
                }
            }
            case per-session-agg-max-dl-case {
                when "../attributetype = 'Per-Session-Agg-Max-DL-Bit-Rate-type'";
                container per-session-agg-max-dl {
                    uses qos-pmip:Per-Session-Agg-Max-Bit-Rate-Value;
                }
            }
            case per-session-agg-max-ul-case {
                when "../attributetype = 'Per-Session-Agg-Max-UL-Bit-Rate-type'";
                container per-session-agg-max-ul {
                    uses qos-pmip:Per-Session-Agg-Max-Bit-Rate-Value;
                }
            }
            case allocation-retention-priority-case {
                when "../attributetype = 'Allocation-Retention-Priority-type'";
                uses qos-pmip:Allocation-Retention-Priority-Value;
            }
            case agg-max-dl-case {
                when "../attributetype = 'Aggregate-Max-DL-Bit-Rate-type'";
                leaf agg-max-dl {
                    type qos-pmip:Aggregate-Max-DL-Bit-Rate-Value;
                }
            }
            case agg-max-ul-case {
                when "../attributetype = 'Aggregate-Max-UL-Bit-Rate-type'";
                leaf agg-max-ul {
                    type qos-pmip:Aggregate-Max-UL-Bit-Rate-Value;
                }
            }
            case gbr-dl-case {
                when "../attributetype = 'Guaranteed-DL-Bit-Rate-type'";
                leaf gbr-dl {
                    type qos-pmip:Guaranteed-DL-Bit-Rate-Value;
                }
            }
            case gbr-ul-case {
                when "../attributetype = 'Guaranteed-UL-Bit-Rate-type'";
                leaf gbr-ul {
                    type qos-pmip:Guaranteed-UL-Bit-Rate-Value;
                }
            }
            case traffic-selector-case {
                when "../attributetype = 'QoS-Traffic-Selector-type'";
                container traffic-selector {
                    uses traffic-selectors:traffic-selector;
                }
            }
        }
    }

        grouping qosoption {
        leaf srid {
            type sr-id;
            mandatory true;
        }
        leaf trafficclass {
            type traffic-class;
            mandatory true;
        }
        leaf operationcode {
            type operational-code;
            mandatory true;
        }
        list attributes {
            unique "attributetype";
            uses qosattribute;
            min-elements 1;
        }
        }
}

                       Figure 29: FPC YANG PMIP QoS

A.1.4.  Traffic Selectors YANG Model

module ietf-traffic-selector-types {
    yang-version 1;

    namespace
      "urn:ietf:params:xml:ns:yang:ietf-traffic-selector-types";

    prefix "ietf-traffic-selectors";

    import ietf-inet-types {
        prefix inet;
        revision-date 2013-07-15;
    }

    organization
      "IETF DMM (Dynamic Mobility Management) Working Group";

    contact
      "WG Web:   <https://datatracker.ietf.org/wg/dmm/>
     WG List:  <mailto:dmm@ietf.org>

     WG Chair: Dapeng Liu
               <mailto:maxpassion@gmail.com>

     WG Chair: Jouni Korhonen
               <mailto:jouni.nospam@gmail.com>

     Editor:
               <mailto:>";

    description
      "This module contains a collection of YANG definitions for
     traffic selectors for flow bindings.

     Copyright (c) 2015 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Simplified BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (http://trustee.ietf.org/license-info).

     This version of this YANG module was created as part of the IETF
        DMM FPC YANG modules; see the RFC itself for full legal notices.";

    revision 2016-01-14 {
        description "Updated for IETF-PACKET-FIELDS module alignment";
        reference
                "draft-ietf-netmod-acl-model-06";
    }

    revision 2016-01-12 {
        description "Initial revision";
        reference
                "RFC 6088: Traffic Selectors for Flow Bindings";
    }

    // Identities
        identity traffic-selector-format {
                description "The base type for Traffic-Selector Formats";
        }

        identity ipv4-binary-selector-format {
                base traffic-selector-format;
                description
                        "IPv4 Binary Traffic Selector Format";
        }

        identity ipv6-binary-selector-format {
                base traffic-selector-format;
                description
                        "IPv6 Binary Traffic Selector Format";
        }

        // Type definitions and groupings
        typedef ipsec-spi {
                type uint32;
                description "This type defines the first 32-bit IPsec Security Parameter
                                Index (SPI) value on data packets sent from a corresponding
                                node to the mobile node as seen by the home agent. This field
                                is defined in [RFC4303].";
                        reference
                                "RFC 4303: IP Encapsulating Security Payload (ESP)";
        }

        grouping traffic-selector-base {
                description "A grouping of the commen leaves between the v4 and v6 Traffic Selectors";
            container ipsec-spi-range {
              presence "Enables setting ipsec spi range";
              description
                "Inclusive range representing IPSec Security Parameter Indices to be used.
                When only start-spi is present, it represents a single spi.";
                        leaf start-spi {
                                type ipsec-spi;
                                mandatory true;
                                description
                                        "This field identifies the first 32-bit IPsec SPI value, from the
                              range of SPI values to be matched, on data packets sent from a
                              corresponding node to the mobile node as seen by the home agent.
                              This field is defined in [RFC4303].";
                        }
                        leaf end-spi {
                                type ipsec-spi;
                        must ". >= ../start-spi" {
                          error-message
                            "The end-spi must be greater than or equal to start-spi";
                        }
                                description
                                        "If more than one contiguous SPI value needs to be matched, then
                              this field can be used to indicate the end value of a range
                              starting from the value of the Start SPI field.  This field
                              MUST NOT be included unless the Start SPI field is included
                                  and has a value less than or equal to this field.

                              When this field is included, the receiver will match all of the
                              SPI values between fields start-spi and end-spi,
                                  inclusive of start-spi and end-spi.";
                        }
            }
            container source-port-range {
              presence "Enables setting source port range";
              description
                "Inclusive range representing source ports to be used.
                When only start-port is present, it represents a single port.";
                        leaf start-port {
                                type inet:port-number;
                                mandatory true;
                                description
                                        "This field identifies the first 16-bit source port number, from
                              the range of port numbers to be matched, on data packets sent from
                              a corresponding node to the mobile node as seen by the home agent.
                              This is from the range of port numbers defined by IANA
                              (http://www.iana.org).";
                        }
                        leaf end-port {
                                type inet:port-number;
                                must ". >= ../start-port" {
                          error-message
                          "The end-port must be greater than or equal to start-port";
                        }
                                description
                                        "If more than one contiguous source port number needs to be
                              matched, then this field can be used to indicate the end value of
                              a range starting from the value of the Start Port field.
                              This field MUST NOT be included unless the Start Port field
                              is included and has a value less than or equal to this field.

                                  When this field is included, the receiver will match
                              all of the port numbers between fields start-port and
                                  end-port, inclusive of start-port and end-port.";
                        }
           }
          container destination-port-range {
              presence "Enables setting destination port range";
              description
                "Inclusive range representing destination ports to be used. When
                         only start-port is present, it represents a single port.";
                        leaf start-port {
                                type inet:port-number;
                                mandatory true;
                                description
                                        "This field identifies the first 16-bit destination port number,
                              from the range of port numbers to be matched, on data packets sent
                              from a corresponding node to the mobile node as seen by the home
                              agent.";
                        }
                        leaf end-port {
                                type inet:port-number;
                        must ". >= ../start-port" {
                          error-message
                            "The end-port must be greater than or equal to start-port";
                        }
                                description
                                        "If more than one contiguous destination port number needs to be
                              matched, then this field can be used to indicate the end value of
                              a range starting from the value of the Start Destination Port
                              field.  This field MUST NOT be included unless the Start
                              Port field is included and has a value less than or equal to this
                                  field.

                                  When this field is included, the receiver will match all of the
                                  port numbers between fields start-port and end-port, inclusive of
                                  start-port and end-port.";
                        }

          }
        }

        grouping ipv4-binary-traffic-selector {
          container source-address-range-v4 {
              presence "Enables setting source IPv4 address range";
              description
                "Inclusive range representing IPv4 addresses to be used. When
                         only start-address is present, it represents a single address.";
                        leaf start-address {
                                type inet:ipv4-address;
                                mandatory true;
                                description
                                        "This field identifies the first source address, from the range of
                              32-bit IPv4 addresses to be matched, on data packets sent from a
                              corresponding node to the mobile node as seen by the home agent.
                              In other words, this is one of the addresses of the correspondent
                              node.";
                        }
                        leaf end-address {
                                type inet:ipv4-address;
                                description
                                        "If more than one contiguous source address needs to be matched,
                              then this field can be used to indicate the end value of a range
                              starting from the value of the Start Address field.  This
                              field MUST NOT be included unless the Start Address field
                              is included.  When this field is included, the receiver will match
                              all of the addresses between fields start-address and
                                  end-address, inclusive of start-address and end-address.";
                        }
          }
          container destination-address-range-v4 {
              presence "Enables setting destination IPv4 address range";
              description
                "Inclusive range representing IPv4 addresses to be used. When
                         only start-address is present, it represents a single address.";
                        leaf start-address {
                                type inet:ipv4-address;
                                mandatory true;
                                description
                                        "This field identifies the first destination address, from the
                              range of 32-bit IPv4 addresses to be matched, on data packets sent
                              from a corresponding node to the mobile node as seen by the home
                              agent.  In other words, this is one of the registered home
                              addresses of the mobile node.";
                        }
                        leaf end-address {
                                type inet:ipv4-address;
                                description
                                        "If more than one contiguous destination address needs to be
                              matched, then this field can be used to indicate the end value of
                              a range starting from the value of the Start Destination Address
                              field.  This field MUST NOT be included unless the Start
                              Address field is included.  When this field is included, the receiver
                                  will match all of the addresses between fields start-address and
                                  end-address, inclusive of start-address and end-address.";
                        }
          }
          container ds-range {
              presence "Enables setting dscp range";
              description
                "Inclusive range representing DiffServ Codepoints to be used. When
                         only start-ds is present, it represents a single Codepoint.";
              leaf start-ds {
                        type inet:dscp;
                        mandatory true;
                        description
                                "This field identifies the first differential services value, from
                      the range of differential services values to be matched, on data
                      packets sent from a corresponding node to the mobile node as seen
                      by the home agent.  Note that this field is called a 'Type of
                      Service field' in [RFC0791].  [RFC3260] then clarified that the
                      field has been redefined as a 6-bit DS field with 2 bits reserved,
                      later claimed by Explicit Congestion Notification (ECN) [RFC3168].
                      For the purpose of this specification, the Start DS field is 8
                      bits long, where the 6 most significant bits indicate the DS field
                      to be matched and the 2 least significant bits' values MUST be
                      ignored in any comparison.";
                        }
                        leaf end-ds {
                                type inet:dscp;
                        must ". >= ../start-ds" {
                          error-message
                            "The end-ds must be greater than or equal to start-ds";
                        }
                                description
                                        "If more than one contiguous DS value needs to be matched, then
                              this field can be used to indicate the end value of a range
                              starting from the value of the Start DS field.  This field MUST
                              NOT be included unless the Start DS field is included.  When this
                              field is included, it MUST be coded the same way as defined for
                              start-ds.  When this field is included, the receiver will match all of
                              the values between fields start-ds and end-ds, inclusive of start-ds
                                  and end-ds.";
                        }
          }
          container protocol-range {
                presence "Enables setting protocol range";
                description
                        "Inclusive range representing IP protocol(s) to be used. When
                         only start-protocol is present, it represents a single protocol.";
                leaf start-protocol {
                        type uint8;
                        mandatory true;
                        description
                                "This field identifies the first 8-bit protocol value, from the
                      range of protocol values to be matched, on data packets sent from
                      a corresponding node to the mobile node as seen by the home agent.";
                }
                leaf end-protocol {
                        type uint8;
                must ". >= ../start-protocol" {
                  error-message
                    "The end-protocol must be greater than or equal to start-protocol";
                }
                        description
                                "If more than one contiguous protocol value needs to be matched,
                      then this field can be used to indicate the end value of a range
                      starting from the value of the Start Protocol field.  This field
                      MUST NOT be included unless the Start Protocol field is included.
                      When this field is included, the receiver will match all of the
                      values between fields start-protocol and end-protocol, inclusive
                          of start-protocol and end-protocol.";
                }
          }
        }

        grouping ipv6-binary-traffic-selector {
         container source-address-range-v6 {
              presence "Enables setting source IPv6 address range";
              description
                "Inclusive range representing IPv6 addresses to be used. When
                         only start-address is present, it represents a single address.";
                        leaf start-address {
                                type inet:ipv6-address;
                                mandatory true;
                                description
                                        "This field identifies the first source address, from the range of
                              128-bit IPv6 addresses to be matched, on data packets sent from a
                              corresponding node to the mobile node as seen by the home agent.
                              In other words, this is one of the addresses of the correspondent
                              node.";
                        }
                        leaf end-address {
                                type inet:ipv6-address;
                                description
                                        "If more than one contiguous source address needs to be matched,
                              then this field can be used to indicate the end value of a range
                              starting from the value of the Start Address field.  This
                              field MUST NOT be included unless the Start Address field is included.
                                  When this field is included, the receiver will match all of the addresses
                                  between fields start-address and end-address, inclusive of start-address
                                  and end-address .";
                        }
          }
          container destination-address-range-v6 {
              presence "Enables setting destination IPv6 address range";
              description
                "Inclusive range representing IPv6 addresses to be used. When
                         only start-address is present, it represents a single address.";
                        leaf start-address {
                                type inet:ipv6-address;
                                mandatory true;
                                description
                                        "This field identifies the first destination address, from the
                              range of 128-bit IPv6 addresses to be matched, on data packets
                              sent from a corresponding node to the mobile node as seen by the
                              home agent.  In other words, this is one of the registered home
                              addresses of the mobile node.";
                        }
                        leaf end-address {
                                type inet:ipv6-address;
                                description
                                        "If more than one contiguous destination address needs to be
                              matched, then this field can be used to indicate the end value of
                              a range starting from the value of the Start Address field. This
                                  field MUST NOT be included unless the Start Address field is included.
                                  When this field is included, the receiver will match all of the
                                  addresses between fields start-address and end-address, inclusive of
                                  start-address and end-address.";
                        }
          }
         container flow-label-range {
      presence "Enables setting Flow Label range";
      description
        "Inclusive range representing IPv4 addresses to be used. When
                 only start-flow-label is present, it represents a single flow label.";
                leaf start-flow-label {
                        type inet:ipv6-flow-label;
                        description
                                "This field identifies the first flow label value, from the range
                      of flow label values to be matched, on data packets sent from a
                      corresponding node to the mobile node as seen by the home agent.
                      According to [RFC2460], the flow label is 24 bits long.  For the
                      purpose of this specification, the sender of this option MUST
                      prefix the flow label value with 8 bits of '0' before inserting it
                      in the start-flow-label field.  The receiver SHOULD ignore the
                      first 8 bits of this field before using it in comparisons with
                      flow labels in packets.";
                }
                leaf end-flow-label {
                        type inet:ipv6-flow-label;
                must ". >= ../start-flow-label" {
                  error-message
                    "The end-flow-lable must be greater than or equal to start-flow-label";
                }
                        description
                                "If more than one contiguous flow label value needs to be matched,
                      then this field can be used to indicate the end value of a range
                      starting from the value of the Start Flow Label field.  This field
                      MUST NOT be included unless the Start Flow Label field is
                      included.  When this field is included, the receiver will match
                      all of the flow label values between fields start-flow-label
                          and end-flow-label, inclusive of start-flow-label and end-flow-label.
                          When this field is included, it MUST be coded the same way as defined
                          for end-flow-label.";
                }
         }
         container traffic-class-range {
      presence "Enables setting the traffic class range";
      description
        "Inclusive range representing IPv4 addresses to be used. When
                 only start-traffic-class is present, it represents a single traffic class.";
                leaf start-traffic-class {
                        type inet:dscp;
                        description
                                "This field identifies the first traffic class value, from the
                      range of traffic class values to be matched, on data packets sent
                      from a corresponding node to the mobile node as seen by the home
                      agent.  This field is equivalent to the Start DS field in the IPv4
                      traffic selector in Figure 1.  As per RFC 3260, the field is
                      defined as a 6-bit DS field with 2 bits reserved, later claimed by
                      Explicit Congestion Notification (ECN) RFC 3168.  For the purpose
                      of this specification, the start-traffic-class field is 8 bits long, where
                      the 6 most significant bits indicate the DS field to be matched
                      and the 2 least significant bits' values MUST be ignored in any
                      comparison.";
                        reference
                                "RFC 3260: New Terminology and Clarifications for Diffserv
                                 RFC 3168: The Addition of Explicit Congestion Notification (ECN) to IP";

                }
                leaf end-traffic-class {
                        type inet:dscp;
                must ". >= ../start-traffic-class" {
                  error-message
                    "The end-traffic-class must be greater than or equal to start-traffic-class";
                }
                        description
                                "If more than one contiguous TC value needs to be matched, then
                      this field can be used to indicate the end value of a range
                      starting from the value of the Start TC field.  This field MUST
                      NOT be included unless the Start TC field is included.  When this
                      field is included, it MUST be coded the same way as defined for
                          start-traffic-class.  When this field is included, the receiver
                          will match all of the values between fields start-traffic-class
                          and end-traffic-class, inclusive of start-traffic-class and
                      end-traffic-class.";
                }
         }
         container next-header-range {
      presence "Enables setting Next Header range";
      description
        "Inclusive range representing Next Headers to be used. When
                 only start-next-header is present, it represents a single Next Header.";
                leaf start-next-header {
                        type uint8;
                        description
                                "This field identifies the first 8-bit next header value, from the
                      range of next header values to be matched, on data packets sent
                      from a corresponding node to the mobile node as seen by the home
                      agent.";
                }
                leaf end-next-header {
                        type uint8;
                must ". >= ../start-next-header" {
                  error-message
                    "The end-next-header must be greater than or equal to start-next-header";
                }
                        description
                                "If more than one contiguous next header value needs to be matched,
                      then this field can be used to indicate the end value of a range
                      starting from the value of the Start NH field.  This field MUST
                      NOT be included unless the Start next header field is included.
                      When this field is included, the receiver will match all of the
                      values between fields start-next-header and end-next-header,
                          inclusive of start-next-header and end-next-header.";
                }
         }

        }

        grouping traffic-selector {
                leaf ts-format {
                        type identityref {
                                base traffic-selector-format;
                        }
                        description "Traffic Selector Format";
                }
                uses traffic-selector-base {
                        when "boolean(../ts-format/text() = 'ipv6-binary-selector-format') | boolean(../ts-format/text() = 'ipv4-binary-selector-format')";
                }
                uses ipv4-binary-traffic-selector {
                        when "boolean(../ts-format/text() = 'traffic-selector-mip6'"; 'ipv4-binary-selector-format')";
                }
                uses ipv6-binary-traffic-selector {
                        when "boolean(../ts-format/text() = 'ipv6-binary-selector-format')";
                }
                description
                        "The traffic selector includes the parameters used to match
                           packets for a specific flow binding.";
                reference
                        "RFC 6089: Flow Bindings in Mobile IPv6 and Network Mobility (NEMO) Basic Support";
        }

        grouping ts-list {
                list selectors {
                        key index;
                        leaf index {
                                type uint64;
                        }
                        uses traffic-selector;
                }
        }
}

                   Figure 30: FPC YANG Traffic Selectors

A.1.5.  FPC 3GPP Mobility YANG Model

module ietf-dmm-threegpp {
    namespace "urn:ietf:params:xml:ns:yang:threegpp";
    prefix threegpp;

    import ietf-inet-types { prefix inet; revision-date 2013-07-15; }
    import ietf-dmm-fpcagent { prefix fpcagent; }
    import ietf-dmm-fpcbase { prefix fpcbase; revision-date 2016-08-03; }
    import ietf-traffic-selector-types { prefix traffic-selectors; revision-date 2016-01-14; }
    import ietf-pmip-qos { prefix pmipqos; revision-date 2016-02-10; }

    organization "IETF DMM Working Group";
    contact "Satoru Matsushima <satoru.matsushima@g.softbank.co.jp>";

    description
    "This module contains YANG definition for
     3GPP Related Mobility Structures";

    revision 2016-08-03 {
        description "Initial";
        reference "draft-ietf-dmm-fpc-cpdp-04";
    }

    identity threeGPP-access-type {
      base "fpcbase:fpc-access-type";
    }

    // Profile Type
    identity threeGPP-mobility {
         base "fpcbase:fpc-mobility-profile-type";
    }

    // Tunnel Types
    identity threeGPP-tunnel-type {
        description "Base Tunnel Type";
    }

    identity gtpv1 {
        base "threegpp:threeGPP-tunnel-type";
    }

    identity gtpv2 {
        base "threegpp:threeGPP-tunnel-type";
    }

    grouping teid-value {
         leaf tunnel-identifier {
            description "TEID";
            type uint32;
        }
    }

    grouping threeGPP-tunnel {
        leaf tunnel-type {
            type identityref  {
              base "threegpp:threeGPP-tunnel-type";

            }
        }
        uses threegpp:teid-value;
    }

    // QoS Profile
    identity threeGPP-qos-profile-parameters {
        base "fpcbase:fpc-qos-type";
    }

    typedef fpc-qos-class-identifier {
        type uint8 {
            range "1..9";
        }
        description "QCI";
    }

    grouping threeGPP-QoS {
        leaf qci {
            type fpc-qos-class-identifier;
        }
        leaf gbr {
            type uint32;
        }
        leaf mbr {
            type uint32;
        }
        leaf apn-ambr {
            type uint32;
        }
        leaf ue-ambr {
            type uint32;
        }
        container arp {
            uses pmipqos:Allocation-Retention-Priority-Value;
        }
    }

    typedef ebi-type {
      type uint8 {
        range "0..15";
      }
    }

   // From 3GPP TS 24.008 version 13.5.0 Release 13
   typedef component-type-enum {
        type enumeration {
            enum ipv4RemoteAddress { value 16; }
            enum ipv4LocalAddress  { value 17; }
            enum ipv6RemoteAddress { value 32; }
            enum ipv6RemoteAddressPrefix { value 33; }
            enum ipv6LocalAddressPrefix { value 35; }
            enum protocolNextHeader { value 48; }
            enum localPort { value 64; }
            enum localPortRange { value 65; }
            enum reomotePort { value 80; }
            enum remotePortRange { value 81; }
            enum secParamIndex { value 96; }
            enum tosTraffClass { value 112; }
            enum flowLabel { value 128; }
        }
    }

    typedef packet-filter-direction {
        type enumeration {
          enum preRel7Tft { value 0; }
          enum uplink { value 1; }
          enum downlink { value 2; }
          enum bidirectional { value 3; }
        }
    }

    typedef component-type-id {
        type uint8 {
          range "16 | 17 | 32 | 33 | 35 | 48 | 64 | 65 | 80 | 81 | 96 | 112 | 128";
        }
    }

    grouping packet-filter {
      leaf direction {
          type threegpp:packet-filter-direction;
      }
      leaf identifier {
          type uint8 {
            range "1..15";
          }
      }
      leaf evaluation-precedence {
          type uint8;
      }
      list contents {
        key component-type-identifier;
        leaf component-type-identifier {
            type threegpp:component-type-id;
        }
        choice value {
          case ipv4-local {
            leaf ipv4-local {
              type inet:ipv4-address;
            }
          }
          case ipv6-prefix-local {
            leaf ipv6-prefix-local {
              type inet:ipv6-prefix;
            }
          }
          case ipv4-ipv6-remote {
            leaf ipv4-ipv6-remote {
              type inet:ip-address;
            }
          }
          case ipv6-prefix-remote {
            leaf ipv6-prefix-remote {
              type inet:ipv6-prefix;
            }
          }
          case next-header {
            leaf next-header {
              type uint8;
            }
          }
          case local-port {
            leaf local-port {
              type inet:port-number;
            }
          }
          case local-port-range {
            leaf local-port-lo {
              type inet:port-number;
            }
            leaf local-port-hi {
              type inet:port-number;
            }
          }
          case remote-port {
            leaf remote-port {
              type inet:port-number;
            }
          }
          case remote-port-range {
            leaf remote-port-lo {
              type inet:port-number;
            }
            leaf remote-port-hi {
              type inet:port-number;
            }
          }
          case ipsec-index {
            leaf ipsec-index {
              type traffic-selectors:ipsec-spi;
            }
          }
          case traffic-class {
            leaf traffic-class {
              type inet:dscp;
            }
          }
          case traffic-class-range {
              leaf traffic-class-lo {
                type inet:dscp;
              }
              leaf traffic-class-hi {
                type inet:dscp;
              }
          }
          case flow-label-type {
            leaf-list flow-label-type {
              type inet:ipv6-flow-label;
            }
          }
        }
      }
    }

    grouping tft {
      list packet-filters {
          key identifier;
          uses threegpp:packet-filter;
      }
    }

    typedef imsi-type {
        type uint64;
    }

    typedef threegpp-instr {
      description "Instruction Set for 3GPP R11";
      type bits {
        bit assign-ip {
          position 0;
        }
        bit assign-fteid-ip {
          position 1;
        }
        bit assign-fteid-teid {
          position 2;
        }
        bit session {
          position 3;
        }
        bit uplink {
          position 4;
        }
        bit downlink {
          position 5;
        }
        bit assign-dpn {
          position 6;
        }
      }
    }

    // Descriptors update - goes to Entities, Configure and Configure Bundles
    augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-policy/fpcagent:descriptors/fpcagent:descriptor-value" {
      case threegpp-tft {
          uses threegpp:tft;
      }
    }

    // Contexts Update - Contexts / UL / mob-profile
    augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:ul/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case threegpp-tunnel {
          uses threegpp:threeGPP-tunnel;
          uses threegpp:tft;
      }
    }
    augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:ul/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case threegpp-tunnel {
          uses threegpp:threeGPP-tunnel;
          uses threegpp:tft;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:ul/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case threegpp-tunnel {
          uses threegpp:threeGPP-tunnel;
          uses threegpp:tft;
      }
    }
    augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:ul/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case threegpp-tunnel {
          uses threegpp:threeGPP-tunnel;
          uses threegpp:tft;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:ul/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case threegpp-tunnel {
          uses threegpp:threeGPP-tunnel;
          uses threegpp:tft;
      }
    }

    // Contexts Update - Contexts / DL / mob-profile
    augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:dl/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case threegpp-tunnel {
          uses threegpp:threeGPP-tunnel;
          uses threegpp:tft;
      }
    }
    augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dl/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case threegpp-tunnel {
          uses threegpp:threeGPP-tunnel;
          uses threegpp:tft;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dl/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case threegpp-tunnel {
          uses threegpp:threeGPP-tunnel;
          uses threegpp:tft;
      }
    }
    augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:dl/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case threegpp-tunnel {
          uses threegpp:threeGPP-tunnel;
          uses threegpp:tft;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:dl/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case threegpp-tunnel {
          uses threegpp:threeGPP-tunnel;
          uses threegpp:tft;
      }
    }

    // Contexts Update -  Contexts / dpns / mobility-tunnel-parameters
    augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:dpns/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case threegpp-tunnel {
          uses threegpp:threeGPP-tunnel;
          uses threegpp:tft;
      }
    }
    augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dpns/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case threegpp-tunnel {
          uses threegpp:threeGPP-tunnel;
          uses threegpp:tft;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dpns/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case threegpp-tunnel {
          uses threegpp:threeGPP-tunnel;
          uses threegpp:tft;
      }
    }
    augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:dpns/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case threegpp-tunnel {
          uses threegpp:threeGPP-tunnel;
          uses threegpp:tft;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:dpns/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case threegpp-tunnel {
          uses threegpp:threeGPP-tunnel;
          uses threegpp:tft;
      }
    }

    // QoS Updates - Context / UL / qosprofile
    augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:ul/fpcagent:qos-profile-parameters/fpcagent:value" {
      case threegpp-qos {
          uses threegpp:threeGPP-QoS;
      }
    }
    augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:ul/fpcagent:qos-profile-parameters/fpcagent:value" {
      case threegpp-qos {
          uses threegpp:threeGPP-QoS;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:ul/fpcagent:qos-profile-parameters/fpcagent:value" {
      case threegpp-qos {
          uses threegpp:threeGPP-QoS;
      }
    }
    augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:ul/fpcagent:qos-profile-parameters/fpcagent:value" {
      case threegpp-qos {
          uses threegpp:threeGPP-QoS;

      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:ul/fpcagent:qos-profile-parameters/fpcagent:value" {
      case threegpp-qos {
          uses threegpp:threeGPP-QoS;
      }
    }

    // QoS Updates -  Context / DL / QoS Profile
    augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:dl/fpcagent:qos-profile-parameters/fpcagent:value" {
      case threegpp-qos {
          uses threegpp:threeGPP-QoS;
      }
    }
    augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dl/fpcagent:qos-profile-parameters/fpcagent:value" {
      case threegpp-qos {
          uses threegpp:threeGPP-QoS;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dl/fpcagent:qos-profile-parameters/fpcagent:value" {
      case threegpp-qos {
          uses threegpp:threeGPP-QoS;
      }
    }
    augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:dl/fpcagent:qos-profile-parameters/fpcagent:value" {
      case threegpp-qos {
          uses threegpp:threeGPP-QoS;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:dl/fpcagent:qos-profile-parameters/fpcagent:value" {
      case threegpp-qos {
          uses threegpp:threeGPP-QoS;
      }
    }

    grouping threegpp-properties {
      leaf imsi {
        type threegpp:imsi-type;
      }
      leaf ebi {
        type threegpp:ebi-type;
      }
      leaf lbi {
        type threegpp:ebi-type;
      }
    }

    augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts" {
      uses threegpp:threegpp-properties;
    }
    augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts" {
      uses threegpp:threegpp-properties;
    }
    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts" {
       uses threegpp:threegpp-properties;
    }
    augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts" {
      uses threegpp:threegpp-properties;
    }
    augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts" {
       uses threegpp:threegpp-properties;
    }

    grouping threegpp-commandset {
      leaf instr-3gpp-mob {
        type threegpp:threegpp-instr;
      }
    }

    augment "/fpcagent:configure/fpcagent:input/fpcagent:instructions/fpcagent:instr-type" {
      case instr-3gpp-mob {
        uses threegpp:threegpp-commandset;
      }
    }
    augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:instructions/fpcagent:instr-type" {
      case instr-3gpp-mob {
        uses threegpp:threegpp-commandset;
      }
    }
    augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:instructions/fpcagent:instr-type" {
      case instr-3gpp-mob {
        uses threegpp:threegpp-commandset;
      }
    }
    augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:ports/fpcagent:instructions/fpcagent:instr-type" {
      case instr-3gpp-mob {
        uses threegpp:threegpp-commandset;
      }
    }
    augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:ports/fpcagent:instructions/fpcagent:instr-type" {
      case instr-3gpp-mob {
        uses threegpp:threegpp-commandset;
      }
    }

    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:instructions/fpcagent:instr-type" {
      case instr-3gpp-mob {
        uses threegpp:threegpp-commandset;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:instructions/fpcagent:instr-type" {
      case instr-3gpp-mob {
        uses threegpp:threegpp-commandset;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:instructions/fpcagent:instr-type" {
      case instr-3gpp-mob {
        uses threegpp:threegpp-commandset;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:ports/fpcagent:instructions/fpcagent:instr-type" {
      case instr-3gpp-mob {
        uses threegpp:threegpp-commandset;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:ports/fpcagent:instructions/fpcagent:instr-type" {
      case instr-3gpp-mob {
        uses threegpp:threegpp-commandset;
      }
    }

    // Deletion Augments - We add the TEID to speed up deletion
    augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:delete_or_query/fpcagent:targets" {
      uses threegpp:teid-value;
    }
    augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:delete_or_query-success/fpcagent:targets" {
      uses threegpp:teid-value;
    }

    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:delete_or_query/fpcagent:targets" {
      uses threegpp:teid-value;
    }
    augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:delete_or_query-success/fpcagent:targets" {
      uses threegpp:teid-value;
    }
}

                     Figure 31: FPC YANG 3GPP Mobility

A.1.6.  FPC / PMIP Integration YANG Model

module ietf-dmm-fpc-pmip {
    namespace "urn:ietf:params:xml:ns:yang:ietf-dmm-fpc-pmip";
    prefix fpc-pmip;
    import ietf-dmm-fpcbase { prefix fpcbase; }
    import ietf-dmm-fpcagent { prefix fpcagent; }
    import ietf-pmip-qos { prefix qos-pmip; }
    import ietf-traffic-selector-types { prefix traffic-selectors; }

    organization "IETF DMM Working Group";
    contact "Satoru Matsushima <satoru.matsushima@g.softbank.co.jp>";

    description
    "This module contains YANG definition for
     Forwarding Policy Configuration Protocol.(FPCP)";

    revision 2016-01-19 {
        description "Changes based on -01 version of FPCP draft.";
        reference "draft-ietf-dmm-fpc-cpdp-01";
    }

    identity ietf-pmip-access-type {
      base "fpcbase:fpc-access-type";
    }

    identity fpcp-qos-index-pmip {
        base "fpcbase:fpc-qos-type";
    }
    identity traffic-selector-mip6 {
        base "fpcbase:fpc-descriptor-type";
    }
    identity ietf-pmip {
        base "fpcbase:fpc-mobility-profile-type";
    }

    identity pmip-tunnel-type {
        description "PMIP Tunnel Type";
    }
    identity grev1 {
        base "fpc-pmip:pmip-tunnel-type";
    }
    identity grev2 {
        base "fpc-pmip:pmip-tunnel-type";
    }
    identity ipinip {
        base "fpc-pmip:pmip-tunnel-type";
    }
    grouping pmip-mobility {
        leaf type {
            type identityref {
                base "fpc-pmip:pmip-tunnel-type";
            }

        }
        choice value {
            case gre {
                leaf key {
                    type uint32;
                    description "GRE_KEY";
                }
            }
        }
    }

    typedef pmip-instr {
      description "Instruction Set for PMIP";
      type bits {
        bit assign-ip {
          position 0;
        }
        bit assign-dpn {
          position 1;
        }
        bit session {
          position 2;
        }
        bit uplink {
          position 3;
        }
        bit downlink {
          position 4;
        }
      }
    }

    // Descriptors update - goes to Entities, Configure and Configure Bundles
    augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-policy/fpcagent:descriptors/fpcagent:descriptor-value" {
      case pmip-selector {
          uses traffic-selectors:traffic-selector;
      }
    }

    // Contexts Update - Contexts / UL / mob-profile, Contexts / DL / mob-profile and Contexts / dpns / mobility-tunnel-parameters
    augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:ul/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case pmip-tunnel {
        uses fpc-pmip:pmip-mobility;
        uses traffic-selectors:traffic-selector;
      }
    }
    augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:ul/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case pmip-tunnel {
        uses fpc-pmip:pmip-mobility;
        uses traffic-selectors:traffic-selector;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:ul/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case pmip-tunnel {
        uses fpc-pmip:pmip-mobility;
        uses traffic-selectors:traffic-selector;
      }
    }

    augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:dl/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case pmip-tunnel {
        uses fpc-pmip:pmip-mobility;
        uses traffic-selectors:traffic-selector;
      }
    }
    augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dl/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case pmip-tunnel {
        uses fpc-pmip:pmip-mobility;
        uses traffic-selectors:traffic-selector;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dl/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case pmip-tunnel {
        uses fpc-pmip:pmip-mobility;
        uses traffic-selectors:traffic-selector;
      }
    }

    augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:dpns/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case pmip-tunnel {
        uses fpc-pmip:pmip-mobility;
        uses traffic-selectors:traffic-selector;
      }
    }
    augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dpns/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case pmip-tunnel {
        uses fpc-pmip:pmip-mobility;
        uses traffic-selectors:traffic-selector;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dpns/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" {
      case pmip-tunnel {
        uses fpc-pmip:pmip-mobility;
        uses traffic-selectors:traffic-selector;
      }
    }
    // QoS Updates - Context / UL / qosprofile, Context / DL / QoS Profile
    augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:ul/fpcagent:qos-profile-parameters/fpcagent:value" {
      case qos-pmip {
          uses qos-pmip:qosattribute;
      }
    }
    augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:ul/fpcagent:qos-profile-parameters/fpcagent:value" {
      case qos-pmip {
          uses qos-pmip:qosattribute;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:ul/fpcagent:qos-profile-parameters/fpcagent:value" {
      case qos-pmip {
          uses qos-pmip:qosattribute;
      }
    }

    augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:dl/fpcagent:qos-profile-parameters/fpcagent:value" {
      case qos-pmip {
          uses qos-pmip:qosattribute;
      }
    }
    augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dl/fpcagent:qos-profile-parameters/fpcagent:value" {
      case qos-pmip {
          uses qos-pmip:qosattribute;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dl/fpcagent:qos-profile-parameters/fpcagent:value" {
      case qos-pmip {
          uses qos-pmip:qosattribute;
      }
    }

    grouping pmip-commandset {
      leaf instr-pmip {
        type fpc-pmip:pmip-instr;
      }
    }

    // Instructions Update - OP BODY, Context, Port
    augment "/fpcagent:configure/fpcagent:input/fpcagent:instructions/fpcagent:instr-type" {
      case pmip-instr {
        uses fpc-pmip:pmip-commandset;
      }
    }
    augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:instructions/fpcagent:instr-type" {
      case pmip-instr {
        uses fpc-pmip:pmip-commandset;

      }
    }
    augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:instructions/fpcagent:instr-type" {
      case pmip-instr {
        uses fpc-pmip:pmip-commandset;
      }
    }
    augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:ports/fpcagent:instructions/fpcagent:instr-type" {
      case pmip-instr {
        uses fpc-pmip:pmip-commandset;
      }
    }
    augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:ports/fpcagent:instructions/fpcagent:instr-type" {
      case pmip-instr {
        uses fpc-pmip:pmip-commandset;
      }
    }

    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:instructions/fpcagent:instr-type" {
      case pmip-instr {
        uses fpc-pmip:pmip-commandset;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:instructions/fpcagent:instr-type" {
      case pmip-instr {
        uses fpc-pmip:pmip-commandset;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:instructions/fpcagent:instr-type" {
      case pmip-instr {
        uses fpc-pmip:pmip-commandset;
      }
    }

    augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:ports/fpcagent:instructions/fpcagent:instr-type" {
      case pmip-instr {
        uses fpc-pmip:pmip-commandset;
      }
    }
    augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:ports/fpcagent:instructions/fpcagent:instr-type" {
      case pmip-instr {
        uses fpc-pmip:pmip-commandset;
      }
    }
}

                Figure 32: FPC YANG FPC / PMIP Integration

A.1.7.  FPC Policy Extension YANG Model

module ietf-dmm-fpc-policyext {
    namespace "urn:ietf:params:xml:ns:yang:fpcpolicyext";
    prefix fpcpolicyext;

    import ietf-dmm-fpcbase { prefix fpcbase; revision-date 2016-08-03; }
    import ietf-dmm-fpcagent { prefix fpcagent; revision-date 2016-08-03; }
    import ietf-inet-types { prefix inet; revision-date 2013-07-15; }

    organization "IETF DMM Working Group";
    contact "Satoru Matsushima <satoru.matsushima@g.softbank.co.jp>";

    description
    "This module contains YANG definition for
     Forwarding Policy Configuration Protocol (FPCP)
     common Policy Action and Descriptor extensions";

    revision 2016-08-03 {
        description "Changes based on -04 version of FPC draft.";
        reference "draft-ietf-dmm-fpc-cpdp-04";
    }

    identity service-function {
        base "fpcbase:fpc-descriptor-type";
        description "Base Identifier for Service Functions.";
    }

    identity napt-service {
        base "service-function";
    }
    grouping simple-nat {
      leaf outbound-nat-address {
        type inet:ip-address;
      }
    }

    identity nat-service {
        base "service-function";
    }
    grouping simple-napt {
      leaf source-port {
        type inet:port-number;
      }
      leaf outbound-napt-address {
        type inet:ip-address;
      }
      leaf destination-port {
        type inet:port-number;
      }
    }

    identity copy-forward {
      base "fpcbase:fpc-descriptor-type";
      description "Copies a packet then forwards to a specific destination";
    }
    grouping copy-forward {
      container destination {
        choice value {
          case port-ref {
            leaf port-ref {
              type fpcbase:fpc-port-id;
            }
          }
          case context-ref {
            leaf context-ref {
              type fpcbase:fpc-context-id;
            }
          }
        }
      }
    }

    augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-policy/fpcagent:actions/fpcagent:action-value" {
      case simple-nat {
          uses traffic-selectors:traffic-selector; fpcpolicyext:simple-nat;
      }
      case simple-napt {
          uses fpcpolicyext:simple-napt;
      }
      case copy-forward {
          uses fpcpolicyext:copy-forward;
      }
    }

    grouping prefix-traffic-descriptor {
        description
        "Traffic descriptor group collects parameters to
         identify target traffic flow.  It represents
         source/destination as IP prefixes";

        leaf destination-ip {
            type inet:ip-prefix;
            description "Rule of destination IP";
        }
        leaf source-ip {
            type inet:ip-prefix;
            description "Rule of source IP";
        }
    }

    augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-policy/fpcagent:descriptors/fpcagent:descriptor-value" {
      case prefix-descriptor {
          uses fpcpolicyext:prefix-traffic-descriptor;
      }
    }
}

              Figure 21: caption1

A.2.2. 33: FPC PMIP YANG 3GPP FPC Policy Extensions

A.2.  FPC Agent Information Model YANG Tree

   This section only shows the YANG tree for the information model.

module: ietf-dmm-fpcp-pmip
augment /fpcp-base:fpcp-carriers/fpcp-base:carrier/fpcp-base:qos-profile/fpcp-base:index-type:
   +--:(pmip) ietf-dmm-fpcagent
   +--rw tenants
   |  +--rw tenant* [tenant-id]
   |     +--rw tenant-id       fpcbase:fpc-identity
   |     +--rw fpc-policy
   |     |  +--rw policy-groups* [policy-group-id]
   |     |  |  +--rw policy-group-id    fpcbase:fpc-policy-group-id
   |     |  |  +--rw policies*          fpcbase:fpc-policy-id
   |     |  +--rw policies* [policy-id]
   |     |  |  +--rw policy-id    fpcbase:fpc-policy-id
   |     |  |  +--rw rules* [order]
   |     |  |     +--rw order          uint32
   |     |  |     +--rw descriptors* [descriptor-id]
   |     |  |     |  +--rw descriptor-id    fpcbase:fpc-identity
   |     |  |     |  +--rw direction?       fpc-direction
   |     |  |     +--rw actions* [action-id]
   |     |  |        +--rw order?       uint32
   |     |  |        +--rw action-id    fpcbase:fpc-action-id-type
   |     |  +--rw descriptors* [descriptor-id]
   |     |  |  +--rw descriptor-id      fpcbase:fpc-identity
   |     |  |  +--rw descriptor-type    identityref
   |     |  |  +--rw (descriptor-value)?
   |     |  |     +--:(all-traffic)
   |     |  |        +--rw all-traffic?       empty
   |     |  +--rw actions* [action-id]
   |     |     +--rw dscp?                inet:dscp action-id      fpcbase:fpc-action-id-type
   |     |     +--rw action-type    identityref
   |     |     +--rw (action-value)?
   |     |        +--:(drop)
   |     |           +--rw (attribute)?
         +--:(per-mn-agg-max-dl) drop?          empty
   |     +--ro fpc-mobility
   |     |  +--ro contexts* [context-id]
   |     |  |  +--ro context-id                fpcbase:fpc-context-id
   |     |  |  +--ro ports*                    fpcbase:fpc-port-id
   |     |  |  +--ro dpn-group?                fpcbase:fpc-dpn-group-id
   |     |  |  +--ro delegating-ip-prefixes*   inet:ip-prefix
   |     |  |  +--ro ul {fpcbase:fpc-basic-agent}?
   |     |  |  |  +--ro tunnel-local-address?         inet:ip-address
   |     |  |  |  +--ro tunnel-remote-address?        inet:ip-address
   |     |  |  |  +--ro tunnel-mtu-size?              uint32
   |     |  |  |  +--ro mobility-tunnel-parameters
   |     |  |  |  |  +--ro (profile-parameters)?
   |     |  |  |  |     +--:(nothing)
   |     |  |  |  |        +--ro none?   empty
   |     |  |  |  +--ro nexthop
   |     |  |  |  |  +--ro nexthop-type?   identityref
   |     |  |  |  |  +--ro (nexthop-value)?
   |     |  |  |  |     +--:(ip)
   |     |  |  |  |     |  +--ro ip?             inet:ip-address
   |     |  |  |  |     +--:(servicepath)
   |     |  |  |  |        +--ro servicepath?    fpcbase:fpcp-service-path-id
   |     |  |  |  +--ro qos-profile-parameters
   |     |  |  |  |  +--ro qos-type?   identityref
   |     |  |  |  |  +--ro (value)?
   |     |  |  |  +--ro dpn-parameters
   |     |  |  |  +--ro vendor-parameters* [vendor-id vendor-type]
   |     |  |  |     +--ro vendor-id      fpcbase:fpc-identity
   |     |  |  |     +--ro vendor-type    identityref
   |     |  |  |     +--ro (value)?
   |     |  |  |        +--:(empty-type)
   |     |  |  |           +--ro empty-type?    empty
   |     |  |  +--ro dl {fpcbase:fpc-basic-agent}?
   |     |  |  |  +--ro tunnel-local-address?         inet:ip-address
   |     |  |  |  +--ro tunnel-remote-address?        inet:ip-address
   |     |  |  |  +--ro tunnel-mtu-size?              uint32
   |     |  |  |  +--ro mobility-tunnel-parameters
   |     |  |  |  |  +--ro (profile-parameters)?
   |     |  |  |  |     +--:(nothing)
   |     |  |  |  |        +--ro none?   empty
   |     |  |  |  +--ro nexthop
   |     |  |  |  |  +--ro nexthop-type?   identityref
   |     |  |  |  |  +--ro (nexthop-value)?
   |     |  |  |  |     +--:(ip)
   |     |  |  |  |     |  +--ro ip?             inet:ip-address
   |     |  |  |  |     +--:(servicepath)
   |     |  |  |  |        +--ro servicepath?    fpcbase:fpcp-service-path-id
   |     |  |  |  +--ro qos-profile-parameters
   |     |  |  |  |  +--ro qos-type?   identityref
   |     |  |  |  |  +--ro (value)?
   |     |  |  |  +--ro dpn-parameters
   |     |  |  |  +--ro vendor-parameters* [vendor-id vendor-type]
   |     |  |  |     +--ro vendor-id      fpcbase:fpc-identity
   |     |  |  |     +--ro vendor-type    identityref
   |     |  |  |     +--ro (value)?
   |     |  |  |        +--:(empty-type)
   |     |  |  |           +--ro empty-type?    empty
   |     |  |  +--ro dpns* [dpn-id direction] {fpcbase:fpc-multi-dpn}?
   |     |  |  |  +--ro dpn-id                        fpcbase:fpc-dpn-id
   |     |  |  |  +--ro direction                     fpcbase:fpc-direction
   |     |  |  |  +--ro tunnel-local-address?         inet:ip-address
   |     |  |  |  +--ro tunnel-remote-address?        inet:ip-address
   |     |  |  |  +--ro tunnel-mtu-size?              uint32
   |     |  |  |  +--ro mobility-tunnel-parameters
   |     |  |  |  |  +--ro (profile-parameters)?
   |     |  |  |  |     +--:(nothing)
   |     |  |  |  |        +--ro none?   empty
   |     |  |  |  +--ro nexthop
   |     |  |  |  |  +--ro nexthop-type?   identityref
   |     |  |  |  |  +--ro (nexthop-value)?
   |     |  |  |  |     +--:(ip)
   |     |  |  |  |     |  +--ro ip?             inet:ip-address
   |     |  |  |  |     +--:(servicepath)
   |     |  |  |  |        +--ro servicepath?    fpcbase:fpcp-service-path-id
   |     |  |  |  +--ro qos-profile-parameters
   |     |  |  |  |  +--ro qos-type?   identityref
   |     |  |  |  |  +--ro (value)?
   |     |  |  |  +--ro dpn-parameters
   |     |  |  |  +--ro vendor-parameters* [vendor-id vendor-type]
   |     |  |  |     +--ro vendor-id      fpcbase:fpc-identity
   |     |  |  |     +--ro vendor-type    identityref
   |     |  |  |     +--ro (value)?
   |     |  |  |        +--:(empty-type)
   |     |  |  |           +--ro empty-type?    empty
   |     |  |  +--ro parent-context?           fpcbase:fpc-context-id
   |     |  +--ro ports* [port-id]
   |     |  |  +--ro port-id          fpcbase:fpc-port-id
   |     |  |  +--ro policy-groups*   fpcbase:fpc-policy-group-id
   |     |  +--ro monitors*
   |     |     +--ro monitor-id?         fpcbase:fpc-identity
   |     |     +--ro target?             fpc-identity
   |     |     +--ro (event-config-value)?
   |     |        +--:(periodic-config)
   |     |        |  +--ro period?             uint32
   |     |        +--:(threshold-config)
   |     |        |  +--ro lo-thresh?          uint32
   |     |        |  +--ro hi-thresh?          uint32
   |     |        +--:(scheduled-config)
   |     |  +--rw per-mn-agg-max-dl?   qos-pmip:Per-MN-Agg-Max-DL-Bit-Rate-Value
         +--:(per-mn-agg-max-ul)        |  +--rw per-mn-agg-max-ul?   qos-pmip:Per-MN-Agg-Max-UL-Bit-Rate-Value
         +--:(per-session-agg-max)  +--ro report-time?        uint32
   |  +--rw max-dl     |        +--:(events-config-ident)
   |     |        |  +--ro event-identities*   identityref
   |     |        +--:(events-config)
   |     |           +--ro event-ids*          uint32
   |     +--rw service-flag         boolean fpc-topology
   |        +--rw exclude-flag         boolean
         +--:(agg-max-dl) domains* [domain-id]
   |  +--rw agg-max-dl?          qos-pmip:Aggregate-Max-DL-Bit-Rate-Value
         +--:(agg-max-ul)        |  +--rw agg-max-ul?          qos-pmip:Aggregate-Max-UL-Bit-Rate-Value
         +--:(gbr-dl) domain-id          fpcbase:fpc-domain-id
   |        |  +--rw gbr-dl?              qos-pmip:Guaranteed-DL-Bit-Rate-Value
         +--:(gbr-ul)
            +--rw gbr-ul?              qos-pmip:Guaranteed-UL-Bit-Rate-Value
augment /fpcp-base:fpcp-carriers/fpcp-base:carrier/fpcp-base:traffic-descriptor/fpcp-base:descriptor-type:
   +--:(traffic-selector-mip6)
      +--rw ts-format?                      identityref domain-name?       string
   |        |  +--rw start-ipsec-spi?                ipsec-spi domain-type?       string
   |        |  +--rw end-ipsec-spi?                  ipsec-spi basename?          fpcbase:fpc-identity {fpcagent:fpc-basename-registry}?
   |        |  +--rw start-source-port?              inet:port-number base-state?        string {fpcagent:fpc-basename-registry}?
   |        |  +--rw end-source-port?                inet:port-number base-checkpoint?   string {fpcagent:fpc-basename-registry}?
   |        +--rw start-destination-port?         inet:port-number dpn-group-peers* [remote-dpn-group-id] {fpcbase:fpc-basic-agent}?
   |        |  +--rw end-destination-port?           inet:port-number remote-dpn-group-id        fpcbase:fpc-dpn-group-id
   |        |  +--rw start-source-address-v4?        inet:ipv4-address remote-mobility-profile?   identityref
   |        |  +--rw end-source-address-v4?          inet:ipv4-address remote-data-plane-role?    identityref
   |        |  +--rw start-destination-address-v4?   inet:ipv4-address remote-endpoint-address?   inet:ip-address
   |        |  +--rw end-destination-address-v4?     inet:ipv4-address local-endpoint-address?    inet:ip-address
   |        |  +--rw start-ds?                       inet:dscp tunnel-mtu-size?           uint32
   |        +--rw end-ds?                         inet:dscp dpn-id?              fpcbase:fpc-dpn-id {fpcbase:fpc-basic-agent}?
   |        +--rw start-protocol?                 uint8 control-protocols*   identityref {fpcbase:fpc-basic-agent}?
   |        +--rw end-protocol?                   uint8 dpn-groups* [dpn-group-id] {fpcbase:fpc-multi-dpn}?
   |        |  +--rw start-source-address-v6?        inet:ipv6-address dpn-group-id        fpcbase:fpc-dpn-group-id
   |        |  +--rw end-source-address-v6?          inet:ipv6-address data-plane-role?    identityref
   |        |  +--rw start-destination-address-v6?   inet:ipv6-address access-type?        identityref
   |        |  +--rw end-destination-address-v6?     inet:ipv6-address mobility-profile?   identityref
   |        |  +--rw start-flow-label?               inet:ipv6-flow-label dpn-group-peers* [remote-dpn-group-id]
   |        |  |  +--rw end-flow-label?                 inet:ipv6-flow-label remote-dpn-group-id        fpcbase:fpc-dpn-group-id
   |        |  |  +--rw start-traffic-class?            inet:dscp remote-mobility-profile?   identityref
   |        |  |  +--rw end-traffic-class?              inet:dscp remote-data-plane-role?    identityref
   |        |  |  +--rw start-next-header?              uint8 remote-endpoint-address?   inet:ip-address
   |        |  |  +--rw end-next-header?                uint8
augment /fpcp-base:port-entries/fpcp-base:port-entry/fpcp-base:property/fpcp-base:qos/fpcp-base:index-type:
   +--:(pmip)
      +--ro dscp?                inet:dscp
      +--ro (attribute)?
         +--:(per-mn-agg-max-dl) local-endpoint-address?    inet:ip-address
   |  +--ro per-mn-agg-max-dl?   qos-pmip:Per-MN-Agg-Max-DL-Bit-Rate-Value
         +--:(per-mn-agg-max-ul)        |  +--ro per-mn-agg-max-ul?   qos-pmip:Per-MN-Agg-Max-UL-Bit-Rate-Value
         +--:(per-session-agg-max)  |  +--ro max-dl  +--rw tunnel-mtu-size?           uint32
   |  +--ro service-flag         boolean        |  +--ro exclude-flag         boolean
         +--:(agg-max-dl)  +--rw domains* [domain-id]
   |  +--ro agg-max-dl?          qos-pmip:Aggregate-Max-DL-Bit-Rate-Value
         +--:(agg-max-ul)        |  +--ro agg-max-ul?          qos-pmip:Aggregate-Max-UL-Bit-Rate-Value
         +--:(gbr-dl)     +--rw domain-id          fpcbase:fpc-domain-id
   |  +--ro gbr-dl?              qos-pmip:Guaranteed-DL-Bit-Rate-Value
         +--:(gbr-ul)
            +--ro gbr-ul?              qos-pmip:Guaranteed-UL-Bit-Rate-Value
augment /fpcp-base:port-entries/fpcp-base:port-entry/fpcp-base:forwarding-rule/fpcp-base:descriptor-type:
   +--:(traffic-selector-mip6)
      +--ro ts-format?                      identityref
      +--ro start-ipsec-spi?                ipsec-spi
      +--ro end-ipsec-spi?                  ipsec-spi
      +--ro start-source-port?              inet:port-number
      +--ro end-source-port?                inet:port-number
      +--ro start-destination-port?         inet:port-number
      +--ro end-destination-port?           inet:port-number
      +--ro start-source-address-v4?        inet:ipv4-address
      +--ro end-source-address-v4?          inet:ipv4-address
      +--ro start-destination-address-v4?   inet:ipv4-address
      +--ro end-destination-address-v4?     inet:ipv4-address
      +--ro start-ds?                       inet:dscp
      +--ro end-ds?                         inet:dscp
      +--ro start-protocol?                 uint8
      +--ro end-protocol?                   uint8
      +--ro start-source-address-v6?        inet:ipv6-address
      +--ro end-source-address-v6?          inet:ipv6-address
      +--ro start-destination-address-v6?   inet:ipv6-address
      +--ro end-destination-address-v6?     inet:ipv6-address
      +--ro start-flow-label?               inet:ipv6-flow-label
      +--ro end-flow-label?                 inet:ipv6-flow-label
      +--ro start-traffic-class?            inet:dscp
      +--ro end-traffic-class?              inet:dscp
      +--ro start-next-header?              uint8
      +--ro end-next-header?                uint8
augment /fpcp-base:port_add/fpcp-base:input/fpcp-base:adding-port/fpcp-base:property/fpcp-base:qos/fpcp-base:index-type:
   +--:(pmip)
      +---- dscp?                inet:dscp
      +---- (attribute)?
         +--:(per-mn-agg-max-dl)
         |  +---- per-mn-agg-max-dl?   qos-pmip:Per-MN-Agg-Max-DL-Bit-Rate-Value
         +--:(per-mn-agg-max-ul)
         |  +---- per-mn-agg-max-ul?   qos-pmip:Per-MN-Agg-Max-UL-Bit-Rate-Value
         +--:(per-session-agg-max)        |  +---- max-dl               uint32     +--rw domain-name?       string
   |  +---- service-flag         boolean        |  +---- exclude-flag         boolean
         +--:(agg-max-dl)     +--rw domain-type?       string
   |  +---- agg-max-dl?          qos-pmip:Aggregate-Max-DL-Bit-Rate-Value
         +--:(agg-max-ul)
         |  +---- agg-max-ul?          qos-pmip:Aggregate-Max-UL-Bit-Rate-Value
         +--:(gbr-dl)
         |  +---- gbr-dl?              qos-pmip:Guaranteed-DL-Bit-Rate-Value
         +--:(gbr-ul)
            +---- gbr-ul?              qos-pmip:Guaranteed-UL-Bit-Rate-Value
augment /fpcp-base:port_add/fpcp-base:input/fpcp-base:adding-port/fpcp-base:forwarding-rule/fpcp-base:descriptor-type:
   +--:(traffic-selector-mip6)
      +---- ts-format?                      identityref
      +---- start-ipsec-spi?                ipsec-spi
      +---- end-ipsec-spi?                  ipsec-spi
      +---- start-source-port?              inet:port-number
      +---- end-source-port?                inet:port-number
      +---- start-destination-port?         inet:port-number
      +---- end-destination-port?           inet:port-number
      +---- start-source-address-v4?        inet:ipv4-address
      +---- end-source-address-v4?          inet:ipv4-address
      +---- start-destination-address-v4?   inet:ipv4-address
      +---- end-destination-address-v4?     inet:ipv4-address
      +---- start-ds?                       inet:dscp
      +---- end-ds?                         inet:dscp
      +---- start-protocol?                 uint8
      +---- end-protocol?                   uint8
      +---- start-source-address-v6?        inet:ipv6-address
      +---- end-source-address-v6?          inet:ipv6-address
      +---- start-destination-address-v6?   inet:ipv6-address
      +---- end-destination-address-v6?     inet:ipv6-address
      +---- start-flow-label?               inet:ipv6-flow-label
      +---- end-flow-label?                 inet:ipv6-flow-label
      +---- start-traffic-class?            inet:dscp
      +---- end-traffic-class?              inet:dscp
      +---- start-next-header?              uint8
      +---- end-next-header?                uint8
augment /fpcp-base:port_property_add/fpcp-base:input/fpcp-base:adding-property/fpcp-base:property/fpcp-base:qos/fpcp-base:index-type:
   +--:(pmip)
      +---- dscp?                inet:dscp
      +---- (attribute)?
         +--:(per-mn-agg-max-dl)
         |  +---- per-mn-agg-max-dl?   qos-pmip:Per-MN-Agg-Max-DL-Bit-Rate-Value
         +--:(per-mn-agg-max-ul)
         |  +---- per-mn-agg-max-ul?   qos-pmip:Per-MN-Agg-Max-UL-Bit-Rate-Value
         +--:(per-session-agg-max)        |  +---- max-dl               uint32     +--rw basename?          fpcbase:fpc-identity {fpcagent:fpc-basename-registry}?
   |  +---- service-flag         boolean        |  +---- exclude-flag         boolean
         +--:(agg-max-dl)     +--rw base-state?        string {fpcagent:fpc-basename-registry}?
   |  +---- agg-max-dl?          qos-pmip:Aggregate-Max-DL-Bit-Rate-Value
         +--:(agg-max-ul)
         |  +---- agg-max-ul?          qos-pmip:Aggregate-Max-UL-Bit-Rate-Value
         +--:(gbr-dl)
         |  +---- gbr-dl?              qos-pmip:Guaranteed-DL-Bit-Rate-Value
         +--:(gbr-ul)
            +---- gbr-ul?              qos-pmip:Guaranteed-UL-Bit-Rate-Value
augment /fpcp-base:port_property_modify/fpcp-base:input/fpcp-base:modifying-property/fpcp-base:property/fpcp-base:qos/fpcp-base:index-type:
   +--:(pmip)
      +---- dscp?                inet:dscp
      +---- (attribute)?
         +--:(per-mn-agg-max-dl)
         |  +---- per-mn-agg-max-dl?   qos-pmip:Per-MN-Agg-Max-DL-Bit-Rate-Value
         +--:(per-mn-agg-max-ul)
         |  +---- per-mn-agg-max-ul?   qos-pmip:Per-MN-Agg-Max-UL-Bit-Rate-Value
         +--:(per-session-agg-max)        |  +---- max-dl               uint32     +--rw base-checkpoint?   string {fpcagent:fpc-basename-registry}?
   |  +---- service-flag         boolean        +--rw dpns* [dpn-id] {fpcbase:fpc-multi-dpn}?
   |  +---- exclude-flag         boolean
         +--:(agg-max-dl)           +--rw dpn-id            fpcbase:fpc-dpn-id
   |           +--rw dpn-name?         string
   |           +--rw dpn-groups*       fpcbase:fpc-dpn-group-id
   |           +--rw node-reference?   instance-identifier
   +--rw fpc-agent-info
      +--rw supported-features*      string
      +--rw supported-events* [event]
      |  +---- agg-max-dl?          qos-pmip:Aggregate-Max-DL-Bit-Rate-Value
         +--:(agg-max-ul)
         |  +---- agg-max-ul?          qos-pmip:Aggregate-Max-UL-Bit-Rate-Value
         +--:(gbr-dl)
         |  +---- gbr-dl?              qos-pmip:Guaranteed-DL-Bit-Rate-Value
         +--:(gbr-ul)
            +---- gbr-ul?              qos-pmip:Guaranteed-UL-Bit-Rate-Value
augment /fpcp-base:rule_add/fpcp-base:input/fpcp-base:adding-rule/fpcp-base:forwarding-rule/fpcp-base:descriptor-type:
   +--:(traffic-selector-mip6)
      +---- ts-format?  +--rw event       identityref
      +---- start-ipsec-spi?                ipsec-spi
      +---- end-ipsec-spi?                  ipsec-spi
      +---- start-source-port?              inet:port-number
      +---- end-source-port?                inet:port-number
      +---- start-destination-port?         inet:port-number
      +---- end-destination-port?           inet:port-number
      +---- start-source-address-v4?        inet:ipv4-address
      +---- end-source-address-v4?          inet:ipv4-address
      +---- start-destination-address-v4?   inet:ipv4-address
      +---- end-destination-address-v4?     inet:ipv4-address
      +---- start-ds?                       inet:dscp
      +---- end-ds?                         inet:dscp
      +---- start-protocol?                 uint8
      +---- end-protocol?                   uint8
      +---- start-source-address-v6?        inet:ipv6-address
      +---- end-source-address-v6?          inet:ipv6-address
      +---- start-destination-address-v6?   inet:ipv6-address
      +---- end-destination-address-v6?     inet:ipv6-address
      +---- start-flow-label?               inet:ipv6-flow-label
      +---- end-flow-label?                 inet:ipv6-flow-label
      +---- start-traffic-class?            inet:dscp
      +---- end-traffic-class?              inet:dscp
      +---- start-next-header?              uint8
      +---- end-next-header?                uint8
augment /fpcp-base:rule_modify/fpcp-base:input/fpcp-base:modifying-rule/fpcp-base:forwarding-rule/fpcp-base:descriptor-type:
   +--:(traffic-selector-mip6)
      +---- ts-format?
      |  +--rw event-id?   fpcbase:event-type-id
      +--rw supported-error-types* [error-type]
         +--rw error-type       identityref
      +---- start-ipsec-spi?                ipsec-spi
      +---- end-ipsec-spi?                  ipsec-spi
      +---- start-source-port?              inet:port-number
      +---- end-source-port?                inet:port-number
      +---- start-destination-port?         inet:port-number
      +---- end-destination-port?           inet:port-number
      +---- start-source-address-v4?        inet:ipv4-address
      +---- end-source-address-v4?          inet:ipv4-address
      +---- start-destination-address-v4?   inet:ipv4-address
      +---- end-destination-address-v4?     inet:ipv4-address
      +---- start-ds?                       inet:dscp
      +---- end-ds?                         inet:dscp
      +---- start-protocol?                 uint8
      +---- end-protocol?                   uint8
      +---- start-source-address-v6?        inet:ipv6-address
      +---- end-source-address-v6?          inet:ipv6-address
      +---- start-destination-address-v6?   inet:ipv6-address
      +---- end-destination-address-v6?     inet:ipv6-address
      +---- start-flow-label?               inet:ipv6-flow-label
      +---- end-flow-label?                 inet:ipv6-flow-label
      +---- start-traffic-class?            inet:dscp
      +---- end-traffic-class?              inet:dscp
      +---- start-next-header?              uint8
      +---- end-next-header?                uint8
         +--rw error-type-id?   fpcagent:error-type-id
rpcs: ...

                      Figure 22: 34: YANG FPC PMIP tree Agent Tree

Authors' Addresses

   Satoru Matsushima
   SoftBank
   1-9-1,Higashi-Shimbashi,Minato-Ku
   Tokyo  105-7322
   Japan

   Email: satoru.matsushima@g.softbank.co.jp

   Lyle Bertz
   6220 Sprint Parkway
   Overland Park  KS, 66251
   USA

   Email: lyleb551144@gmail.com

   Marco Liebsch
   NEC Laboratories Europe
   NEC Europe Ltd.
   Kurfuersten-Anlage 36
   D-69115 Heidelberg
   Germany

   Phone: +49 6221 4342146
   Email: liebsch@neclab.eu

   Satoru Matsushima
   SoftBank
   1-9-1,Higashi-Shimbashi,Minato-Ku
   Tokyo  105-7322
   Japan

   Email: satoru.matsushima@g.softbank.co.jp

   Sri Gundavelli
   Cisco
   170 West Tasman Drive
   San Jose, CA  95134
   USA

   Email: sgundave@cisco.com
   Danny Moses

   Email: danny.moses@intel.com

   Lyle Bertz
   6220 Sprint Parkway
   Overland Park  KS, 66251
   USA

   Email: lyleb551144@gmail.com