DMM Working GroupM. LiebschS. Matsushima Internet-DraftNECSoftBank Intended status: Standards TrackS. MatsushimaL. Bertz Expires:September 22, 2016 SoftBankApril 2, 2017 Sprint M. Liebsch NEC S. Gundavelli Cisco D. Moses Intel CorporationL. Bertz Sprint March 21,September 29, 2016 Protocol for Forwarding Policy Configuration (FPC) in DMMdraft-ietf-dmm-fpc-cpdp-03.txtdraft-ietf-dmm-fpc-cpdp-04.txt Abstract Thisspecification supportsdocument describes theseparationsolution ofthe Control-Plane for mobility- and session managementdata-plane separation fromthe Data-Plane. The protocol semantics abstract the configuration of Data-Planecontrol-plane which enables a flexible mobility management system using agent and client functions. To configure data-plane nodes andapplies it between a Client function, whichfunctions, the data-plane isusedabstracted by anapplication of the mobility Control-Plane, and an Agent function, which is associated with the configuration of Data-Plane nodes, accordingagent interface to theData- Plane rules issued by the mobility Control-Plane.client. Thescope of the rules comprises traffic description and treatment of packetsdata-plane abstraction model is extensible interms of encapsulation, IP address re-writing and QoS. Additional protocol semantics are describedorder to supportthe maintenancemany different type ofthe 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 onSeptember 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.ReferenceFPC Architectureand 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. . . . . . . . . . . 73.2.2. Role of the FPC Agent Function4.1. FPC-Topology . . . . . . . . . . .7 3.3. Model 2. . . . . . . . . . . 7 4.1.1. Domains . . . . . . . . . . . . . .8 3.3.1. Role of the DMM FPC Client Function. . . . . . . . . 83.3.2. Role of the DMM FPC Agent Function4.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 theFPC protocolAgent . . . . . . . . . . 33 5.2.3. Optimization for Current and Subsequent Messages . . 35A.1. FPC Base5.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 andData-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 andsupports two operational models, Model INotifications . 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 ModelII. 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 offor theNetwork Controller. Support for bothFPC 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), themodelssolution of data-plane separation from control-plane which enablesan operator to transition their network in incremental phases. The architectureflexible mobility management systems using agent andreference interface specified in this document is not tied to any specific Control-Plane protocol thatclient functions. To configure data-plane nodes and functions, the data- plane isin useabstracted in themobility network, oragent which provides an interface toany typethe client. Control planes ofaccess technology. Themobilityprotocols in usemanagement systems, and/or any applications which require data-plane control, canbe Proxy Mobile IPv6, GTP, IPSec or other protocols; andutilize theaccess network can be 4G LTE, WiFi, or 5G. These aspects have no direct implicationFPC 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 FPCinterface 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 inthis documentthe following three areas: Topology: DPNs areto be interpreted as described in [RFC2119]. 3. Reference Architecturegrouped andDeployment Options 3.1. Architecture for DMM Forwarding Policy Configuration The DMM Forwarding Policy Configuration (FPC) protocol enables the separationabstracted in terms of roles ofthemobility managementControl-Plane from the Data- Planesuch as access, anchors andprovides the required controldomains. FPC Agent abstracts DPN-groups andsemantics in between these two planes. Figure 1 depicts an exemplary use case where IP traffic betweenconsists of forwarding plane topology, such as access nodes assigned to aCorrespondent Node (CN) andDPN-group which peers to aMobile Node (MN) traverses multiple DPNs, each applyingDPN-group of anchor nodes. Policy: Policy abstracts policies which handle specific traffic flows or packets such asper the Control- Plane's request. Policies in theQoS, packet processing to rewrite headers, etc. A policy consists of one or multipleDPNs can resultrules which are composed of Descriptors and Actions. Descriptors in a rule identify trafficsteering accordingflows and Actions apply treatments to packets matched to the Descriptors in the rule. An arbitrary set of policies is abstracted as ahost-route, packet scheduling and marking accordingPolicy-group which is applied to Ports. Mobility: An endpoint of asubscriber'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 ofmobilitysignaling between different Mobility Control-Plane functions. o Ensure that required rules to establish and maintain connectivity of an MNsession is abstracted as a Context with itscorrespondent nodesassociated runtime concrete attributes, such as tunnel endpoints, tunnel identifiers, delegated prefix(es), routing information, etc. Contexts areenforced in the Data- Plane. o Participate in monitoring the DPNs' operation and support the handling of exceptions, e.g. the detectionattached to DPN-groups along with consequence ofa partial DPN failure andthediversion of traffic through a different DPN. o Maintain consistency betweencontrol plane. One or multipleDPNsContexts whichenforce policy rules to ensure connectivity between a MN and its correspondent services. Mobility Data-Plane functionshavethe following roles in common: o Forward and treat traffic according to thesame sets of policies are assigned Ports which abstract those policiy sets. A Context can belong to multiple Ports which serve different kinds of purpose anddirectives sent by the Mobility Control-Plane o Provide status information (e.g. load, health, statistics and traffic volume) and events relatedpolicy. Monitors aprovide a mechanism toservice failure upon request o Participate inproduce reports when events regarding Ports, Sessions, DPNs or theprocessAgent occurs. The Agent collects applicable sets oftopology acquisition, e.g. by exposing relevant topological and capability information, such as supportforwarding policies forQoS differentiationthe mobility sessions from the data model, andsupported encapsulation protocols The protocolthen renders those policies into specific configurations forDMM FPC applieseach DPN to which theinterface between a FPC Client functionsessions attached. Specific protocols andaconfigurations to configure DPN from FPC Agentfunction, as depicted in Figure 2.are out of scope of this document. TheFPC Client functiondata-plane abstraction model isassociated with an application functionextensible in order to support many different types ofthemobility managementControl-Plane, e.g. a Local Mobility Anchor Control-Plane function per the Proxy Mobile IPv6 protocol.systems and data-plane functions. TheFPC Agent function processes the FPC protocol semanticsarchitecture andtranslates them into configuration commands per the DPN's technology. In one example, anprotocol design of FPCAgent can be co-located with a Network Controller, which enforces forwarding rules on a setintends not to tie to specific types ofData-plane nodes. In another example, the Agent canaccess 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 beco-locatedinterpreted as described in [RFC2119]. 3. FPC Architecture In accordance with the requirements of flexible data-plane functions deployment described in [RFC7333], FPC provides aData-Plane nodemeans for mobility control-plane and applications todirectly interacthandle DPNs that must be configured withinterface management and the router's RIB Manager. The mappingvarious roles of thecommonmobility management aspect described in [I-D.ietf-dmm-deployment-models]. FPCsemanticsuses building blocks of Agent, Client andpolicy description todata-plane abstraction models as theconfiguration commands of a particular DPN is specific tointerface between theDPN's technologyagent and theAgent's implementation. +-------------------------+ |client. MobilityControl-Plane | | | |+--------[API]----------+| ||control-plane and applications integrate the FPC ClientFunction || |+----------^------------+| +-----------|-------------+ | | DMM FPC protocol | +-----------|-------------+ |+----------v------------+| ||function and connect to FPC AgentFunction || |+-----------------------+| | | | 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 Functionfunctions. TheFPCClientfunction, which follows Model I operation, includesand thefollowing tasks: o Build one or multiple FPC Control messages/attributes to establish, update or delete rulesAgent communicate based onone or multiple DPN(s) according todata-plane abstraction models described in Section 4. Along with models, theMobility 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 thebasis of properties boundAgent. The Agent connects tological ports (similarDPN(s) to manage their configuration. These configurations are rendered from thebearer conceptforwarding policies by the Agent. FPC Agent may be implemented incellular networks) o Build, modify or delete logical ports as needed o Bind associated policy rules as one ora network controller that handles multipleproperties toDPNs or it also may be integrated into alogical 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 generatedDPN. The FPCcontrol message toarchitecture supports multi-tenancy where the FPCAgent o Keep recordenabled data-plane supports multiple tenants of mobile operator networks and/ or applications. DPNs on theconfigured policy rulesdata-plane run in multiple data-plane roles which are defined per session, domain andinteract withtenant. This architecture is illustrated in Figure 1. This document does not adopt a specific protocol for the FPCAgent to ensure proper synchronization between Mobility Control-Plane statesenvelope protocol andrules configured on theit is out of scope. However it must be capable of supporting FPCAgent o Process received Response, Notification and Queryprotocol messagesissued by a FPC Agentandinteract with thetransactions described in Section 5. +-------------------------+ | Mobility Control-Planeto 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 AgentFunction The|| || FPC Agentfunction, 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 | | FPCClient Function o Apply received rules to local configuration (e.g. encapsulation, NA(P)T, traffic prioritization and scheduling) inenvelope 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 theData-Plane o Maintain administrativeFPC envelope protocol is only required to handle runtime dataas well as operational data, which describesin thestatusMobility model. The rest of therulesFPC models, namely Topology and Policy, are pre-configured, therefore real-time data handling capabilities are not required for them. Operators that are tenants in theData-Plane o Monitor events (e.g. failure, incomplete rule)FPC data-plane can configure Toplogy andissue an associated message toPolicy on theFPC 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 23.3.1. Roleis an overview ofthe DMMFPCClient Function Thedata-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: FPCClient function, which followsData-plane Abstraction ModelII operation, includes the following tasks: o4.1. FPC-Topology Topology abstraction enables an actual data-plane network to support multiple mobile operator's topologies of their data-plane. TheFPC Client offers a setFPC- Topology consists ofservices toDPNs, DPN-groups and Domains which abstract data-plane topologies for the Client's mobilitycontrol plane entities. These services are for activating/deactivating specific configuration on a Data-Plane node supported bycontrol-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; oTheFPC Client translates the request from the mobile control plane asoperator also creates aFPC message. The message identifiesDPN-group of which theservice name and includes a setDPNs are attributed roles ofinformation elements. This messagemobility management such as access, anchors and domains. 4.1.1. Domains A domain issent todefined by theFPC Agent overoperators to attribute DPN-groups to theFPC interface. 3.3.2. Role ofdomain. Domains may represent services or applications within theDMM FPC Agent Function The FPC Agent function, which followsoperator. (FPC-Topology) | +---Domains | +---Domain-id | +---Domain-name | +---Domain-type Figure 3: Domain ModelII operation, includes the following tasks: o FPC Agent offers a setStructure Domain-id: Identifier ofservicesDomain. The ID format SHOULD refer tothe FPC client. EachSection 4.4. Domain-name: Defines Domain name. Domain-type: Specifies which type ofthese services have a well-defined meaning and can be invoked bycommunication allowed within theFPC Client passingdomain, such as ipv4, ipv6, ipv4v6 or ieee802. 4.1.2. DPN-groups A DPN-group defines a set ofparameters. These services for example are creation/deletionDPNs which share common data-plane attributes. DPN-groups consist data-plane topology that consists of alayer-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 identificationDPN-group of access nodes connecting to an anchor nodes DPN-group. DPN Group has attributes such as theservice requestdata-plane role, supported access technologies, mobility profiles, connected peer groups andfor inclusiondomain. (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 ofthe parameters relevant for that service request. o FPC Agent processes a FPC message and identifies the service request.DPN-group. TheFPC Agent maps the service requestID format SHOULD refer toa local configuration and enables that configuration in the forwarding plane. For example, if there is a service request for Tunnel creation includingSection 4.4. Data-plane-role: Defines data-plane role of therelevant parametersDPN-group, such assource 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 howaccess-dpn, L2/L3 or anchor-dpn. Domains: Specifies domains which therequest was executed byDPN-group belongs to. Access-type: Defines access type which theagent. 4. Protocol to support Model I 4.1. Data Structure To abstract from configuration detailsDPN-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 ofan IP switchthis specification. When those profiles are correctly defined, some orIP router on theall data-plane parameters of contexts can be automatically derived from this profile by FPCprotocol interface, Model I adopts the constructAgent. DPN-group-peers: Defines remote peers oflogical ports to describe rulesDPN-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 forD-Plane processing. A port binds onethis peer, currently defined profiles are ietf-pmip, 3gpp, ormultiple properties, which describe traffic treatment actions, suchnew profiles defined asa QoS policy, IPextensions of this specification. Remote-data-plane-role: Defines forwarding-plane role of peering DPN-group. Remote-endpoint-address: Defines Endpoint addressre-write or packet encapsulation. Which traffic is treated is determined by one or multiple traffic descriptors, which also bind to that port. A groupofone or multiple traffic descriptors, one or multiple properties defining traffic treatment actions andtheport identifier make a rule. The port identifier serves as keypeering DPN-group. Local-endpoint-address: Defines Endpoint address of its own DPN- group toaccesspeer therule. All traffic arriving at a Data-Plane node and matchingremote DPN-group. Tunnel-MTU-size: Defines MTU size of tunnel. 4.1.3. DPNs List of DPNs which defines all available nodes for atraffic descriptor will be treated pertenant of theproperties bound toFPC data-plane network. Role of a DPN in theportdata-plane is not determined until thetraffic descriptorDPN isalso bound to. For example, Traffic Selectors [RFC6088], which can be boundattributed to aport, can identify single orDPN-group. A DPN may have multipleIP flows. Aggregated IP traffic destined toward a given IP address prefixDPN-groups which are in different data-plane roles ororiginated fromdomains. 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 anaddress matching a particularactual node to which the Agent binds the DPN. The Agent SHOULD maintain that nodes information including IP addressrangeof management and control protocol to connect them. 4.2. FPC-Policy The FPC-Policy consists of Descriptors, Actions, Policies and Policy- groups, which can bedescribed using the Traffic Selector or an IP prefix traffic descriptor per this specification. In additionviewed as configuration data while Contexts and Ports are akin totraffic descriptorsstructures that are instantiated on the Agent. The Descriptors andtraffic treatment actions, which buildActions in aData-Plane processing rule,Policy referenced by aport has associated operational data, which tracksPort are active when thestatus of rule enforcementPort is in aselected Data-Plane node. A ruleactive Context, i.e. they canalso have administrative databe applied to traffic on a DPN. 4.2.1. Descriptors List of Descriptors which defines classifiers of specific traffic flow, such asits directionality (uni- or bi-directional)those based on source andadministrative status such as enabled, disabled or virtual. Furthermore, an identifierdestination addresses, protocols, port numbers ofthe Data-Plane node toTCP/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 therule applies is kept interms Filter, Traffic Descriptor or Traffic Selector [RFC6088]. A packet that meets theoperational data associated withcriteria of aport. When the Client desires specific operational state forDescriptor is said to satisfy, pass or is consumed by theport, 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 fromDescriptor. Descriptors are assigned anAgent. A Client adds, modifies or deletesidentifier and contain arule 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. Theprotocol enables a ClientID format SHOULD refer toprovide additional administrative information about a particularSection 4.4. Descriptor-type: Defines descriptor type, which classifies specific traffic flow, such as source and destination addresses, protocols, portor a group of ports to the Agent. This includes controlnumbers of TCP/UDP/SCTP/DCCP or any packet. Descriptor-value: Specifies theoperationvalue ofa rule, e.g. whether a rule associated with a particularDescriptor such as IP prefix/address, protocol number, portapplies only uni-directionally or bi-directionally. In casenumber, etc. 4.2.2. Actions List ofbi- directionality, an Agent can apply a rule associated with a single port in the Data-Plane to both directions. As example, a ruleActions whichperforms 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 Agentdefines treatment/actions toimplicitly consider matching arriving packet's source IP address against IP_B and re- write the source IP addressapply toIP_A. Figure 3 illustratesclassified traffic meeting thegeneric policy configuration modelcriteria defined by Descriptors. Actions include traffic management related activity such asused between a FPC Clientshaping, policing based on given bandwidth, anda FPC Agent. TrafficDescriptor_1-+ +--Property_1connectivity 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| | templatesflow, 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 aport | | toPolicy Identifier and aport | +-------------------+ +---------------------+ | | +------------------ Data-Plane Rule --------------------+ Figure 3: Structurelist ofrules on Client/Agent defining Data-Plane traffic treatment As depictedRule/Order pairs. The Order and Rule values MUST be unique inFigure 3,theport representsPolicy. Unlike theanchorAND filter matching ofa rule. A Client and Agent useeach Rule theidentifier of a portPolicy uses an OR matching toaccessfind therule and perform modifications of traffic descriptors or properties. Fromfirst Rule whose Descriptors are satisfied by theviewpoint ofpacket. The search for a Rule to apply to packetprocessing, arriving packets are matched against traffic descriptors and processedis executed according to thetreatment actions specified in the listunique Order values ofproperties associated withtheport. A Client can assign an existing or new port to a group of ports using a port group identifier. The logic behind grouping multiple portsRules. This isup toan ascending order search, i.e. theControl-Plane. As example, multiple rules associatedRule witha single mobile node can be groupedthe lowest Order value is tested first andidentifiedif its Descriptors are not satisfied by theport group identifier. In casepacket theControl-Plane needs to delete all rules associatedRule with themobile node, the Client can issue a message to deletenext lowest Order value is tested. If aport one and identifyRule is not found then thegroup 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 ClientPolicy does notprovide 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 nodeapply. Policies contain Rules as opposed toenable 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 aport | | | | (cleared = unidirectional) | +----------------+----------------------+-----------------------------+ | ADMIN_STATUS | [8, admin status] | Requested statuscollection 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 arule | | | |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 ina Data-Plane node | | | | (enabled, disabled, virtual)| +---------------------------------------------------------------------+ | SESSION_STATUS | [8, session status] | Statusthe Rule. Direction: Specifies which direction applies, such as upstream, downstream or both. Actions: List ofa sessionActions. 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 ofports | | | |Policy-group. The ID format SHOULD refer towhich this port belongs | +---------------------------------------------------------------------+ | CLI_ID | Sect. 4.2 | Identifies the Client which | | | | created this port | +---------------------------------------------------------------------+ | AGT_ID | Sect. 4.2 | Identifies the Agent which | | | | enforcesSection 4.4. Policies: List of Policies in therulePolicy-group. 4.3. FPC-Mobility The FPC-Mobility consists of Port and Context. A mobility session is abstracted asper | | | | this port | +---------------------------------------------------------------------+ Figure 4: Administrative Data associateda 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] | Statusrepresents a collection of policy groups, arulegroup 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] | AbilityContext, the set ofan enabled rule | | | |Descriptors and Actions in the Policies of the Port are collected and applied toserve 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 Figure5: Operational Data associated with a port A Client MAY11: 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 applyan administrative state propertytoa port indicatingthedesired operational statusPort. 4.3.2. Context An endpoint of aport, e.g. enabled, disabledmobility session orvirtual (not intended to serve traffic but usedthe instantiation of policy- groups is abstracted as atemplate for other ports). Rules specified by an enabled port are enforced in the Data-Plane node. A disabled portContext 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 onanFPC Agentcan be useful for pre-configuration, e.g. other operations can be performed onthrough theport 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 thenFPC Client. A Context directly describes traffic treatment policies in QoS profile and Mobility profiles or indirectly via Ports. Parameters in these profiles may beenabled. When creating a cloned port,set by the FPC Clientcan updatedirectly oradd properties to suit the rule that should be enforced inindirectly derived from theData-Plane. A Client MAYset of Descriptors and Actions when the Ports indicate Policies which specify those descriptors and actions. If aSession state for a particular port or groupContext doesn't have any Port, all parameters ofports ontheAgent to guideContext must be set by theAgent on how to treat local events. As example, an AgentClient. (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 SHOULDrefrain from sending an FPC messagerefer tothe Client as resultSection 4.4. Ports: List of Ports. When alocal event, which indicates a missing rule, in caseContext is applied to Port(s), thesession statecontext is'incomplete', asconfigured by policies of those Port(s). Port-id references indicate Ports which apply to theAgentContext. Context canexpectbe a part of multiple Ports which have different policies. DPN-group: The DPN-group assigned to theControl-PlaneContext. Delegating-ip-prefixes: List of IP prefixes to be delegated toprovidethemissing rule unsolicited. In casemobile node of thesession state is 'outdated',context. Parent-context: Indicates context which the context inherits. 4.3.2.1. Single DPN AgentMAY notify the Client to updateCase In theassociated rule oncase where a FPC Agent supports only one DPN, theAgent. 4.2. Protocol Attributes Protocol messages as per Section 4.3 identify an FPC Client orAgentfunction, 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 propertiesMUST maintain context data just for the DPN. The Agent does not need to maintain amessage to indicate the desired statusTopology model. The Context in single DPN case consists ofa port to the Agent. This document specifies attributes from thefollowingcategories: 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 groupparameters for both direction of| | | | logical Ports | +---------------------------------------------------------------------+ | PRT_PROP_ID | [32,PRT_ID] | Identifies a logical Port | | | [8,PROP_ID] |uplink andone of its properties | +---------------------------------------------------------------------+ | PRT_TD_ID | [32,PRT_ID] | Identifies a logical Portdownlink. (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 theportDPN 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 Agentfunction | | | [32,connects to multiple DPNs. This AgentID] | | +---------------------------------------------------------------------+ | DPN_ID | [16, Carrier ID] | IdentifiesMUST maintain aData Plane | | | [16, Network ID] | Node (DPN) | | | [32, DPN ID] | | +---------------------------------------------------------------------+ | MONITOR_ID | [32, Monitor ID] | Identifiesset of Context data for each DPN. The Context contains aregistered | | |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 Figure6:15: Multiple-DPN Supported Context ModelI 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 toStructure 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 toruntime context data installed. Direction: Specifies which side of connection at the| | | | MBR applies when being | | | | aggregated | +---------------+----------------------------+-------------------------+ | PROP_GW | [ipDPN indicated, "uplink" or "downlink". Tunnel-local-address: Specifies endpoint addressnext hop] | IPof the DPN at the uplink or downlink. Tunnel-remote-address: Specifies endpoint address of remote DPN at theNext | | | | Hop to which IP packets | | | | should be forwarded | +----------------------------------------------------------------------+ | PROP_CPY_FORW | [PRT_ID] | Copy IP packets, treat | | | |uplink or downlink. Tunnel-mtu-size: Specifies theduplicates perMTU size of tunnel on uplink or downlink. Mobility-specific-tunnel-parameters: Specifies profile specific tunnel parameters for uplink or downlink of the| | | | propertiesDPN. 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 | | DropDPN such as IPpacket | +----------------------------------------------------------------------+ | 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, therule | +----------------------------------------------------------------------+ | 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] |configurationattribute | +---------------------------------------------------------------------+ | GTP_CONF | [TEID_local] | GTP-U encapsulation | | | [TEID_remote] |MUST be applicable to the attribute/entity monitored, e.g. a Monitor using a Threshold configurationattribute |cannot be applied to a context but it can be applied to a numeric property. (FPC-Mobility) | +---Monitors |[seq-#]+---Monitor-id | +---Target |+---------------------------------------------------------------------++---Configuration Figure8:16: Common Monitor ModelI 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] | AggregatedStructure 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 orper-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] | Cloningattribute(s) ofa 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. Whenset,therule per | | | | this porttype isapplied | | | | bi-directionally | +----------------------------------------------------------------------+ | RESULT | [result] | Resultan attribute(s) ofprocessing | | | |amessage: | | | | 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 typeContext, the target name is a concatenation ofreportthe Context-Id and| | | [TYPE_SPECIFIC_INFO] | type-specific | | | | configurations | +----------------------------------------------------------------------+ | PERIODIC_CONFIG | [32, period] | REPORT-TYPE is PERIODIC, | | | | period specifiesthe| | | |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 NOTIFYby which a notification is sent| | | | | +----------------------------------------------------------------------+ | EVENTS_CONFIG | *[EVENT_TYPE_ID] | List of Events that | | | | trigger the Monitor | +----------------------------------------------------------------------+ | DEREG_INFO | *[MONITOR_ID] | Monitorstoderegister, | | | [boolean] | Boolean (optional) | | | | indicates ifthe Client. * Event reporting specifies asuccessful | | | | DEREG triggerslist of even types that, if they occur and are related to the monitored attribute, will result in sending aNOTIFY | | | | with final data | +----------------------------------------------------------------------+ | NOTIFY_INFO | [32, Notification-Id] |ID used fornotfication to the Clientordering| | | [MONITOR-ID] |Monitor-ID of* Scheduled reporting specifies theNOTIFY, | | | [32, TRIGGER] |TRIGGERtime (in seconds since Jan 1, 1970) when a notificaiton for theNOTIFY, | | | [32, timestamp] |Timestamp of whenmonitor 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 andNotify Attributes TRIGGERS include buthigh threshold. When these values arenot limitedcrossed a corresponding notification is sent to thefollowing values: o Events specifiedClient. 4.4. Namespace and Format The identifiers and names in FPC models which reside in theEvent List ofsame namespace must be unique. That uniqueness must be kept in agent or data-plane tenant namespace on anEVENTS 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 SemanticsAgent. Thefollowing table specifies all protocol messagestenant namespace uniquenes MUST be applied tocreateall elements of the tenant model, i.e. Topology, Policy andmodifyMobility models. When arule by creating and deleting logical Ports, adding and modifying properties and binding traffic descriptorsPolicy needs toa port. Furthermore, messages can schedule tasks, such as monitoring, atbe applied to Contexts in all tenants on an Agent, the Agentor probeSHOULD define that policy to be visible from all thestatus oftenants. In this case, thescheduled task from a Client. Additional messages enableAgent assign an unique identifier in theData-Planeagent 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 tonotify or queryGlobally 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 theControl-Plane throughtypes of format that dictate theAgentchoice 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 andClient 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 |DescriptionType |+=====================================================================+Description |Messages issued by the FPC Client+---------------+---------------+-----------------------------------+ |+---------------------------------------------------------------------+CONF |PRT_ADDHEADER |AddConfigure processes alogical portsingle |+---------------------------------------------------------------------+|PRT_DEL|Delete a logical portADMIN_STATE |+---------------------------------------------------------------------+operation. |PROP_ADD|Add a property to a logical port|+---------------------------------------------------------------------+SESSION_STATE |PROP_MOD|Modify a property of a logical port|+---------------------------------------------------------------------+|PROP_DELOP_TYPE BODY |Delete a property from a logical port|+---------------------------------------------------------------------+|TD_ADD|Add traffic descriptor to a logical port|+---------------------------------------------------------------------+|TD_MOD|Modify an existing traffic descriptorCONF_BUNDLES |+---------------------------------------------------------------------+1*[HEADER |TD_DELConfigure-bundles takes multiple |Delete an existing traffic descriptor|+---------------------------------------------------------------------+|MONITOR_REGADMIN_STATE |Install a monitor at an Agent. The messageoperations that are to be | | |includes information about the attribute toSESSION_STATE | executed as a group with partial | |monitor and the reporting method.|+---------------------------------------------------------------------+OP_TYPE BODY] |MONITOR_DEREGfailures allowed. They are |Remove a monitor at an Agent.|+---------------------------------------------------------------------+|PROBE|Probeexecuted according to thestatus of a registered eventOP_ID |+---------------------------------------------------------------------+|Messages issued by| | value in theFPC AgentOP_BODY in ascendig |+---------------------------------------------------------------------+| |Notify the Client about the status of| order. If a CONFIGURE_BUNDLES | |NOTIFY|monitored attribute per| fails, any entities provisioned | | | | in thereporting methodCURRENT operation are | | |(periodic / event trigger / probed)|+---------------------------------------------------------------------+removed, however, any successful |QUERY|Query| | operations completed prior to theClient 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 toensure that for all transactionsreduce system load. | | | | | | REG_MONITOR | HEADER | Install arecipient ofmonitor at anFPCAgent. | | | ADMIN_STATE | The messagecan unambiguously identify the sender of the FPC message. A Client MAY directincludes information | | | *[ MONITOR ] | about theAgentattribute toenforcemonitor | | | | and the reporting method. Note | | | | that arule inMONITOR_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 aparticular DPN by including| | | | successful DEREG triggers aDPN_ID value. Otherwise| | | | NOTIFY with final data. | | | | | | PROBE | HEADER | Probe theAgent selectsstatus of asuitable DPNregistered | | | MONITOR_ID | monitor. | +---------------+---------------+-----------------------------------+ Table 1: Client toenforceAgent Messages Each message contains arule and notifiesheader with the ClientaboutIdentifier, an execution delay timer and an operation identifier. The delay, in ms, is processed as theselected DPN usingdelay for operation execution from theDPN_ID. o PRT_ADD - Issuedtime the operation is received bya Client to add a new logical port at an Agent. An Agent receivingthePRT_ADD message identifiesAgent. Messages that create or update Monitors and Entities, i.e. CONF, CONF_BUNDLES and REG_MONITOR, specify an Administrative State which specifies thenew 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 thePRT_ADDmessageMAY include properties as well as traffic descriptors, which are bound and refer tosubject(s) after thenew 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 groupsuccessful completion ofports 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 withtheidentified port. o PROP_ADD - Used byoperation. If theClient to add a new propertystatus is set toanvirtual, any existingport. The property is unambiguously identified through a property identifier (PRT_PROP_ID). All traffic, whichdata on the DPN isdirected to this portremoved. If the value istreated accordingset to disabled, then an operation will occur on theexisting and newly added property. Optionally,DPN IF thePROP_ADD message can include traffic descriptors, which refer toentity exists on theportDPN. If set towhich'active' thepropertiesDPN will be provisioned. Values arebound. 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 aClient to add new rules tonotify from theexisting portAgent towhichthenew properties have been bound in a single transaction. o PROP_MOD - Used by aClientto modifySection 5.1.1.5.2. When returning anexisting property. For example, a tunnel property can be changed to direct traffic to a different tunnel endpoint in case'ok' ofa mobile node's handover. Optionally, the PROP_MOD message can include rules descriptions, which refer to the port whose propertiesany kind, optional data may be present. Two Agent notifications aremodified. This enables a Client to add new rulessupported: +----------------------+----------+---------------------------------+ | Message | Type | Description | +----------------------+----------+---------------------------------+ | CONFIG_RESULT_NOTIFY | See | An asynchronous notification | | | Table 15 | from Agent tothe existing port whose properties have been modified in a single transaction. o PROP_DEL - Used by aClientto delete one or multiple properties, each being identified by a property identifier. o TD_ADD - Used bybased upon | | | | aClientprevious CONFIG or | | | | CONFIG_BUNDLES request. | | | | | | NOTIFY | See | An asynchronous notification | | | Table 16 | from Agent toaddClient based upon | | | | atraffic descriptorregistered MONITOR. | +----------------------+----------+---------------------------------+ Table 2: Agent toa port. The traffic descriptor SHOULD unambiguously identify aggregated traffic (longest prefix), per host IP traffic or per-flow traffic in the TD_ADD commandClient Messages (Notfications) 5.1.1. CONF andbindCONF_BUNDLES Messages CONF and CONF_BUNDLES specify theidentified trafficfollowing information for each operation in addition toa port. Traffic descriptors are carriedthe header information: SESSION_STATE: sets the expected state of the entities embedded ina TD_CONTAINER, which allowstheidentificationoperation body after successful completion ofa traffic description as well astheindication if a traffic handling priorityoperation. Values can be 'complete', 'incomplete' or 'outdated'. Any operation that is 'incomplete' MAY NOT result incasecommunication between thesole traffic description does not suffice unambiguous traffic matching. AnAgentreceiving a TD_ADD command MUST add the traffic descriptor to its local conceptual data structuresandapply commands for local configuration to addDPN. If the result is 'outdated' any newtraffic descriptor to the ruleoperations onthe DPN. Multiple traffic descriptors can bindthese entities or new references to these entities have unpredictable results. OP_TYPE: specifies thesame port. All traffic captured by the traffic descriptor will experiencetype of operation. Valid values are 'create' (0), 'update' (1), 'query' (2) or 'delete' (3). COMMAND_SET: specifies thesame treatment perCommand Set IF theproperties which bind to that port. o TD_MOD - Used byfeature 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 aClient to modify an existing traffic descriptor. Anlist of Targets for 'query' or 'deletion'. See Section 6.2.2 for details. 5.1.1.1. Agentreceiving such messages MUST apply commands to the local configuration and updateOperation Processing The Agent will process entities provided in an operation in therule onfollowing order: 1. Clone Instructions, if theDPN accordingly. o TD_DEL - Usedfeature is supported 2. Ports 3. Contexts according toremove an existing traffic descriptor from a port.COMMAND_SET order processing TheAgent receiving such messages MUST deletefollowing 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 theidentified traffic descriptor fromtechnology 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 thelocal configuration and updatetechnology 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 therule onClient wishes to avoid requiring theDPN accordingly. o MONITOR_REG - Used byAgent 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 toinstallcopy one structure to another in an operation. Cloning is always done first within the operation (see Operation Order of Execution for more detail). If amonitor atClient wants to build anAgent. A monitor containsobject then Clone it, use CONFIG_BUNDLES with themonitor id, attributefirst operation being the entities tomonitor, and optional reporting configuration. The attribute maybeany IDcopied and a second operation with theexceptionCloning instructions. A CLONE operation takes two arguments, the first is the name ofMONITOR_IDthe target to clone andEVENT_TYPE_ID. When a Monitor registrationthe second isapplied,thereporting configuration MUST be applicable toname of theattribute 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 aMonitor usingtechnology specific bitset that allows for aThreshold configuration cannotsingle entity to beappliedsent in an operation with requested sub- transactions to be completed. For example, aPortContext could have the Home Network Prefix absent but itcan be applied to a numeric Port Property. Four report types are defined: (1) Periodic reporting specifies an interval by which a NOTIFYissent to the Client, (2) Event reporting specifies a list of EVENT_TYPE_IDs that,unclear ifthey occur and are related to the monitored attribute, will result in sending a NOTIFY to the Client, (3) Scheduled reporting specifiesthetime (in seconds since Jan 1, 1970) when a NOTIFY forClient would like themonitor should be sentaddress to be assigned by theClient. OnceAgent or if thisMonitor's NOTIFYiscompletedan error. Rather than creating a specific command for assigning theMonitor is automatically de-registered, (4) Threshold reporting specifies one or both ofIP alow and high threshold. When these values are crossedbit position in acorresponding NOTIFYCOMMAND_SET is reserved for Agent based IP assignment. Alternatively, an entity could be senttoin an update operation that would be considered incomplete, e.g. missing some required data in for theClient. All monitoredentity, but has sufficient datacan be requested byto complete theClient at any time usinginstructions provided in thePROBE message. Thus, reporting configurationCOMMAND_SET. 5.1.1.4. Reference Scope The Reference Scope is an optionaland when not present only PROBE messages may befeature that provides the scope of references usedfor monitoring. Ifin aSCHEDULED or PERIODICconfigurationis provided during registration with the time related value (timecommand, i.e. CONFIG orperiod 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 hasCONFIG_BUNDLES. These scopes are defined as o none - all entities have nofurther need for the monitorreferences tobe 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. oMONITOR_DEREGop -Used by a Client to remove a monitor from an Agent. The message identifies one or multiple monitors by includingAll references are contained in theMONITOR_ID. The message also includes an optional Booleanoperation body, i.e. only intra-operaion references exist. o bundle - All references in exist in bundle (inter-operation/intra- bundle). NOTE - If this valuethat, when true, will resultcomes inNOTIFY messages being sent for the MONITOR_ID to the Client. When a monitor has a reporting configuration of SCHEDULEDCONFIG call it isautomatically 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'. oPROBEstorage -Used by a Client to retrieve information about a previously installed monitor. The PROBE message SHOULD identify oneOne or moremonitors by meansreferences exist outside ofincluding the associated monitor identifier. An Agent receiving a PROBE message SHOULD sendtherequested information inoperation and bundle. A lookup to asingle or multiple NOTIFY messages.cache / storage is required. oNOTIFYunknown -Used by an Agent to reportthestatuslocation ofa monitor to a Client. This message contains the MONITOR_ID, a NOTIFICATION_ID to permittheClient to distinguish amongst many monitoring related requests,references are unknown. This is treated as aTRIGGER that caused the NOTIFY message,'storage' type. If supported by thetimestamp ofAgent, when cloning instructions are present, themonitored information was record for the message along with the value ofscope MUST NOT be 'none'. When Ports are present themonitored attribute. o QUERY - Used by an Agent to request an update of port properties via a Client. The Agent adds onescope MUST be 'storage' ormultiple 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' ormultiple PROP_MOD'bundle' reference scope messageswith the requested propertiesis referred tothe Agent. Allas 'stateless' as it has no direct memory of references outside messagessent from a Client tothemselves. This permits low memory footprint Agents. Even when an AgentMUSTsupports all message types an 'op' or 'bundle' scoped message can beacknowledgedprocessed quickly by theAgent. The response must include all attributes as wellAgent asstatus information, which indicates theit 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 resultof processingcontains themessage, usingRESULT_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 theRESULT property. In caseAgent 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 themessage resultsoperation as specified ina failure, the Agent setsTable 14. For Clients that need attributes back quickly for call processing, theRESULT accordinglyAGENT MUST respond back with an OK_NOTIFY_FOLLOWS andMAY clearminimally theproperty or traffic descriptor, which causedattributes assigned by thefailure,Agent in the response.A Client MAY add a property to a port without providing all required detailsThese situations MUST be determined through the use of Command Sets (see Section 5.1.1.3). If an error occurs theattribute's value. In such casefollowing 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 AgentSHOULD determine the missing details and provide thehas completedproperty description backprocessing related tothe Client. In casea CONFIG or CONFIG_BUNDLES request. It is an asynchronous communication from the Agentcannot determineto themissing valueClient. The values ofan attribute's value per the Client's request, it leavestheattribute's value clearedCONFIG_RESULT_NOTIFY are detailed inthe response and sets the RESULT to failure. As example, the Control-Plane needs to setupTable 15. 5.1.2. Monitors When atunnel configuration in the Data-Plane butmonitor hasto rely ona reporting configuration of SCHEDULED it is automatically de-registered after the NOTIFY occurs. An Agentto determineor DPN may temporarily suspend monitoring if insufficient resources exist. In such a case thetunnel endpoint which is associated withAgent MUST notify theDPN that enforcesClient. All monitored data can be requested by therule. TheClientadds the tunnel property attribute toat any time using theFPC messagePROBE message. Thus, reporting configuration is optional andclearswhen 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 theattribute (e.g. IP address of the local tunnel endpoint). The Agent determinesmonitor is immediately de- registered. This method should, when a MONITOR has not been installed, result in an immediate NOTIFY sufficient for thetunnel endpointClient's needs andincludeslets thecompleted tunnel property in its response toAgent realize theClient. The following list provides information on the use and semantics of attributesClient has no further need fortraffic treatment: o PROP_TUN - Definestheproperties for encapsulation into different tunnel headers. The property includes IP address information of tunnel endpoints as well asmonitor to be registered. An Agent may reject atype identifier specifyingregistration if it or theencapsulation type. Further attributes may be includedDPN has insufficient resources. PROBE messages are also used by a Client toprovideretrieve informationwhich is relevant for the configuration and initializationabout a previously installed monitor. The PROBE message SHOULD identify one or more monitors by means of including thetunnel. o PROP_REWR - Defines the properties for IP address and port re- write. o PROP_QOS - Definesassociated monitor identifier. An Agent receiving a PROBE message sends theQoS propertiesrequested information interms 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 toa singleportor multipleports. 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 toNOTIFY messages. 5.2. Protocol Operation 5.2.1. Simple RPC Operation An FPC Client and Agent MUST identify themself using theports which are to be monitoredCLI_ID and AGT_ID respectively todetermineensure that for all transactions a recipient of an FPC message can unambiguously identify theaggregated viewsender of thebit rate. As alternativeFPC message. A Client MAY direct the Agent tobindingenforce aPROP_QOS_MBR property to each port whose traffic is to be taken into account for Aggregate Maximum Bitrate (AMBR) metering,rule in aClient can createparticular DPN by including aseparate port withDPN_ID value in asingle PROP_QOS_MBR property. Other ports, whose traffic is to be metered perContext. Otherwise theAMBR, can referAgent selects a suitable DPN to enforce a Context and notifies theport withClient about thePROP_QOS_MBR propertyselected DPN using thePROP_CONCAT property. The scope of attributes for QoS is alignedDPN_ID. All messages sent from a Client to[RFC7222].an Agent MUST be acknowledged by the Agent. TheAllocation and Retention Priority (ARP)response must include all entities asper [RFC7222] is not present inwell as status information, which indicates thelistresult ofQoS-specific attributes, since ARP is treated and kept inprocessing theControl-Plane for granting requests for new resources and QoS, as well as for preempting other QoS configuration, if needed. o PROP_QOS_GBR - Definesmessage, using theGBR bound for traffic associated with a port. o PROP_QOS_MBR - DefinesRESPONSE_BODY property. In case theMBR 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 theControl-Plane can configure a host-routemessage results inthe Data-Plane to deviate from default routes. o PROP_CPY_FORW - Refers toadifferent portfailure, the Agent sets the ERROR_TYPE_ID andresultsERROR_INFORMATION accordingly and MAY clear the Context or Port, which caused the failure, intreatmentthe response. If based upon Agent configuration or the processing of the request possibly taking acopysignificant amount ofpackets pertime theproperties bound toAgent MAY respond with an OK_NOTIFY_FOLLOWS with an optional RESPONSE_BODY containing thereferred port. o PROP_DROP - Defines a treatment action to drop packetsparitially completed entities. When an OK_NOTIFY_FOLLOWS is sent, the Agent will, upon completion or failure oftraffic associatedthe operation, respond with an asynchronous CONFIG_RESULT_NOTIFY to the Client. A Client MAY add aport. As example, this treatment action can be usedproperty toenforce 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 treatmenta Context without providing all required details oftraffic accordingthe attribute's value. In such case the Agent SHOULD determine the missing details and provide the completed property description back to theproperties ofClient. If the processing will take too long or based upon Agent configuration, the Agent MAY respond with an OK_NOTIFY_FOLLOWS with aport, additional treatment actionsRESPONSE_BODY containing the paritially completed entities. In case the Agent cannot determine the missing value of an attribute's value per theproperties bound to a separate port, which is referred toClient's request, it leaves the attribute's value cleared in thePROP_CONCAT property, apply toRESPONSE_BODY and sets thetraffic.RESULT to Error, ERROR_TYPE_ID and ERROR_INFORMATION. As example,port concatenation can be usedthe Control-Plane needs toenable AMBR meteringsetup a tunnel configuration in the Data-Plane but has totrafficrely on the Agent to determine the tunnel endpoint which is associated withmultiple other ports. o PROP_NSH - Definestheproperties for a Network Service Header (NSH).DPN that supports the Context. Theheader is includedClient adds the tunnel property attribute to theclassified IP flows. Unlike descriptors, overlapping or contradictory properties cannot be resolved byFPC message and clears theAgent. For example, addingvalue of the attribute (e.g. IP addresstranslation related properties and a Drop property to a single port may result in needless activity inof theDPN or it may reflect a temporary administrative activity wherelocal tunnel endpoint). The Agent determines theport must Drop traffic. Other properties may be intentionally set, e.g. a property that invokes and accounting activitytunnel endpoint anda Dropincludes the completed tunnel propertypresent onin its response to thesame 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 applyClient. Figure 17 illustrates anadministrative 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. Aexemplary sessionstate 'complete' confirms that a rule is validlife-cycle based on Proxy Mobile IPv6 registration via MAG Control-Plane function 1 (MAG-C1) andready to serve Data-Plane traffic. A session state 'incomplete' hintshandover to MAG Control-Plane function 2 (MAG-C2). Edge DPN1 represents theAgent that more FPC message will arrive from the Client to complete a rule,Proxy CoA after attachment, whereassession state 'outdated' requiresEdge DPN2 serves as Proxy CoA after handover. As exemplary architecture, the FPC Agentto 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 propertiesandtraffic descriptors for similar rules, a Client can take a clone of a previously configured rule as base for a new one by usingtheCLONE_REF property with a PRT_ADD message and refernetwork control function are assumed toan existing port. The cloned port willbea copy of the referred port and serve as base forco-located with thenew port. The cloned port will have its own port identifier, which will also be present in the port identifier portion of the property identifiers. AfterAnchor-DPN, e.g. acloned port has been created, it represents its own rule without any further dependencyRouter. +-------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 ontheFPC referenceportpoint) After reception of the Proxy Binding Update (PBU) at the LMA Control- Plane function (LMA_C), the LMA-C selects a suitable DPN, whichservedserves assource to create the clone. A Client MAY apply updatesData-Plane anchor toexisting properties ofthe mobile node's (MN) traffic. The LMA-C adds a newport, as well as delete or add properties. Updateslogical Context to theport in terms of new or changed properties and traffic descriptors MAY already come with the PRT_ADD message or subsequently using messagesDPN tohandle properties and traffic descriptors. A Client can usetreat theCLONE_REF property with messages to handle properties andMN's trafficdescriptors to achieve a different result. In such case these messages identify an existing port already(1) andprocessing the CLONE_REF property on the receiving Agent will result inincludes areset of the identified portContext Identifier (CONTEXT_ID) tomatchthe 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 theport referrednew Context. One property is added toinspecify theCLONE_REF property. o ACT_DELAY - A Client can use thisforwarding tunnel type and endpoints (Anchor DPN, Edge DPN1) in each direction (as required). Another property is added todefine a delay in ms before an updated rule takes effect at an Agent, e.g. an administrative state 'enabled' will be enforced byspecify theAgent afterQoS differentiation, which thedelay perMN's traffic should experience. At reception of theClient's request. o PRT_BIDIR - A Client uses this property to indicate to anContext, the FPC Agent utilizes local configuration commands toapply a rule associated with a port bi-directionally. In casecreate thePRT_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 Agentassumes a ruleappliesuni-directionally. o RESULT - An Agent uses this propertya new route tosignalforward all traffic destined to theClient inMN's HNP specified as aresponseproperty in the Context to the configured tunnel interface (tun1). During handover, the LMA-C receives an updating PBU from theresult 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) andhandover target MAG-C2. The PBU refers toMAG Control-Plane function 2 (MAG-C2). Edge DPN1 representsa new Data-Plane node (Edge DPN2) to represent theProxy CoA after attachment, whereas Edge DPN2 servesnew tunnel endpoints in the downlink and uplink, asProxy CoA after handover. As exemplary architecture,requried. The LMA-C sends a CONFIGURE message (3) to theFPCAgent to modify the existing tunnel property of the existing Context and to update thenetwork control function are assumedtunnel endpoint from Edge DPN1 tobe co-located withEdge DPN2. Upon reception of theAnchor-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, |--tun1up->| | | | | | | | |--(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 ||-============================================-|| | | | | Figure14:18: Exemplary Message Sequence (focus on FPC reference point)After receptionWhen a teardown of theProxy Binding Update (PBU) at the LMA Control- Plane function (LMA_C), the LMA-C selectssession occurs, MAG-C1 will send asuitable DPN, which serves as Data-Plane anchor to the mobile node's (MN) traffic.PBU with a lifteime value of zero. The LMA-Caddssends anew logical portCONFIGURE message (1) to theDPNAgent totreatmodify theMN'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 forwardingexisting tunneltype and endpoints (Anchor DPN, Edge DPN1). Anotherpropertyis added (3) to specifyof theQoS differentiation, whichexisting Context to delete theMN's traffic should experience. Attunnel information.) Upon reception of theproperties,CONFIGRE message, theFPCAgentutilizes local configuration commands to createremoves the tunnel(tun1) as well as the traffic control (tc) to enable QoS differentiation. Afterconfigurationof port properties have been completed, the LMA binds the traffic description for the MN's traffic to the port by sending a TS_CONTAINERand responds to theAgent and identifyingClient (2). Per [RFC5213], theMN's Nome Network Prefix (HNP) inPBA is sent back immediately after thetraffic descriptor. AtPBA is received. If no valid PBA is recieved after thereceptionexpiration of thetraffic 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 representMinDelayBeforeBCEDelete timer (see [RFC5213]), thenew tunnel endpoint. TheLMA-Csendswill send aPROP_MODCONFIGURE (3) message(5) to the Agent to modify the existing tunnel property of the existing port and to updatewith a deletion request for thetunnel endpoint from Edge DPN1 to Edge DPN2.Context. Upon reception of thePROP_MODmessage, the Agentapplies updated tunnel property to the local configuration. To reduce the number of protocol handshakes betweendeletes theLMA-Ctunnel and route on theDPN, the LMA-C can append properties (PROP_TUN, PROP_QOS)DPN andtraffic descriptor attributesresponds to thePRT_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 ------------------+ Figure15: Example: Sequence for Message Aggregation (focus on FPC reference point) 5. Protocol19: 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 tosupport 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 orDestination | +---------------------------------------------------------------------+ |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)] |Bitrateprofile-parameters |+---------------------------------------------------------------------+ |GBR |[Unsigned Integer |Guaranteed Bitratemobility-profile-- dl ------+ ^ | | qos-profile <ContextID1> |(32 bit)]^ per-mn-agg-max-dl_2 | <ContextID2> +-------------------+ +---------------------+ |+---------------------------------------------------------------------+ |TCLASS |[Unsigned Integer |Traffic ClassBind 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 ------------------+ Figure16: Model II Protocol Attributes: Traffic Treatment +---------------------------------------------------------------------+ | Attribute | Format | Description | +=====================================================================+ | Identifier | +---------------------------------------------------------------------+ |TUNNEL_IF_ID |[IF_INDEX] |Tunnel Interface20: 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 IdentifierAnchor |+---------------------------------------------------------------------+ |PBR_ID |[Unsigned INT] |Policy Based Routing|MAG-C1| |MAG-C2| |LMA-C| Client| | Agent | ||IdentifierDPN |+---------------------------------------------------------------------+ |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->| | | |tunnelDOWNLINK(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 fromUPLINK(QOS/TUN), | | |a Policy-based Route|+---------------------------------------------------------------------+|QUERY_POLICY_ROUTEIP_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 thespecified 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 classifiedAnchor | | Client |IP flows|+---------------------------------------------------------------------+Agent | |DELETE_NSH_HEADERDPN | +-----------+ +-------+ +---------+ | | | |-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|+---------------------------------------------------------------------+Figure18: Model II Protocol Messages 5.3. Protocol Operation22: Exemplary Bundle Message (focus on FPC reference point) 5.2.3.3. Cloning Feature (Optional) Cloning provides a high speed copy/paste mechanism. Thefollowing list comprisesexample below shows adescription 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 integritysingle Context that will be copied two times. A subsequent update then overrides the value. The avoid the accidental activation of theinformation exchanged between an FPC Client and an FPC Agent. Required Security Associations may be derived from co-located functions, which utilizeContexts on theFPC 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 inDPN, theAppendix and will be updated perCONFIGURE (1) message with thenext revisioncloning instruction has a SESSION_STATE with a value ofthis 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 theFPC protocol using RPC. No actions from IANA are required. In case the semanticsSESSION_STATE ofthis specification will be mapped to a particular wire protocol, authors'complete' and OP_TYPE ofan 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 theFPSM 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 andS. 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 theits Clones. +-------Router--------+ +-----------+ |+-------+ +---------+| | FPCprotocol 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| | FPCas 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 usepoint) Cloning has the added advantage oftunnels 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 fromreducing 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 whichspecific IP protocol typesactivities arederived."; } identity property-type { description "Base identityexpected 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 ofproperty"; } 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 usesthe 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 ofQoS types are derived."; } identity fpcp-qos-type { base "qos-type"; description "Base identity fromthe Client as opposed to guessing what DPN work could be done based upon data present at the Agent. This greatly increases the speed by whichspecific QoS typesthe Agent can complete work. o Permits different technologies with different instructions to be sent inFPCP usesthe same message. As Command Bitsets arederived."; } 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 typefpcp-name-type; description "Client Name"; } uses client; } list dpn { key dpn-id; description "ListofFPCP DPNs"; leaf name { type fpcp-name-type; description "DPN Name"; } uses dpn; } } grouping dpn-set { description "DPNs which consist awork varies on the DPNset."; 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 propertiesand the amount of data present in aset 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 consistContext or Port will vary. Using the technology specific instructions allows the Client to serve multiple technologies and MAY result in aDPN set."; leaf name { type fpcp-name-type; description "DPN set name"; } leaf network { type leafref { path "/fpcp-carriers/carrier/network/network-id"; } description "Network-IDmore statless Client as the instructions are transferred the Agent whicha 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 "Listwill match the desired, technology specific instructions with the capabilities and over the wire protocol ofdata-plane endpoint propertiesthe DPN more efficiently. 5.2.3.5. Reference Scope(Optional) Although entities MAY refer to any other entity ofa setan appropriate type, e.g. Contexts can refer to Ports or Contexts, the Reference Scope gives the Agent an idea ofDPNs."; 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 listwhere 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 aDPN set"; } } grouping tunnel-endpoints { description "PROP_TUN property asCONFIG_BUNDLES message uses asetReference Scope oftunnel 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 {typeinet: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 ofremote-endpoint"; } leaf local-teid { type uint32; description "TEIDentities 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 oflocal-endpoint"; } } grouping gre-attributes { description "GRE_CONF as GRE tunnela specificattribute"; leaf key { type uint32; description "GRE_KEY"; } } grouping rewriting-properties { description "PROP_REWR. TBD for which typelifecycle and represent more general policies that may affect multiple Contexts (sessions). The use ofrewriting functions needpre-provisioning of Ports permits policy and administrative use cases to bedefined"; 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 parametersexected. For example, creating tunnels toidentify targetforward trafficflow."; 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 into acarrier."; leaf name { type fpcp-name-type; description "Define visible name oftrouble management platform and dropping packets to anetwork."; } uses network; } list dpn-group { key name; description "Listdefective web server can be accomplished via provisioning ofDPN groups inPorts. The figure below shows acarrier."; 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 propertiesCONFIGURE (1) message used to install aport and lists them asPolicy-group, policy-group1, using aport entry."; list port-entry { key port-id; description "List of port entries"; uses port-field; list property { key property-id; description "AttributesContext setof properties"; uses fpcp-port-properties; } list forwarding-rule { key rule-id; description "Ruleaside 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 andtraffic-descriptor"; uses fpcp-forwarding-rule; } } } // PRT_ADD rpc port_add { description "PRT_ADD"; input { list adding-port { description "Ports that are addedtenants with common scopes, referred to in this specification as BaseNames, to track the state of provisioned policy information on anagent"; uses port-field; list forwarding-rule { key rule-id; description "RuleAgent. The registry records the BaseName andtraffic-descriptor"; uses fpcp-forwarding-rule; } list property { key property-id; description "AttributesCheckpoint setof 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 addedby a Client. If a new Client attaches toan agent"; uses port-field; list property { key property-id; description "Attributes setthe Agent it can query the Registry to determine the amount ofproperties"; uses fpcp-port-properties; } } } } // PROP_MOD rpc port_property_modify { description "PROP_MOD"; input { list modifying-property { description "Propertieswork thatare modifiedmust be executed to configure the Agent to a BaseName / checkpoint revision. A State value is also provided inan 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 reportedthe registry toclient."; } } 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-typehelp 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-idField |+--rw dpn* [dpn-id]Type | +--------------+-----------------+----------------------------+ |+--rw name? fpcp-name-typeACTION | ACTION_ID |+--rw dpn-id fpcp-dpn-idFPC-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? identityrefDESCRIPTOR_ID | FPC-Identity (Section 4.4) |+--rw dpn* [dpn-id]| |+--rw dpn-id fpcp-dpn-id|+--rw qos-profile* [name]| |+--rw name fpcp-name-typeDESCRIPTOR | TYPE |+--rw qos-index-type? identityref[32, unsigned integer] | |+--rw (index-type)?| |+--:(qci)| |+--rw uplinkDESCRIPTOR | VALUE | Type specific |+--rw qci? fpcp-qos-class-identifier| | |+--rw attributetype? identityref| | POLICY |+--rw bandwidth? fpcp-qos-bandwidthPOLICY_ID | FPC-Identity (Section 4.4) |+--rw downlink| |+--rw qci? fpcp-qos-class-identifier| |+--rw attributetype? identityref| POLICY |+--rw bandwidth? fpcp-qos-bandwidthRULES |+--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-idPOLICY_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-addressPOLICIES | *[ 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 qosDIRECTION [2, unsigned bits] | |+--ro name? fpcp-name-type| DESCRIPTOR_ID |+--ro qos-index-type? identityrefis an ENUMERATION (uplink, | |+--ro (index-type)?| DIRECTION ] | downlink or both). |+--:(qci)| | |+--ro uplink| | RULE_ACTIONS | *[ ACTION_ID |+--ro qci? fpcp-qos-class-identifierORDER [8, unsigned integer] | | | ORDER ] |+--ro attributetype? identityrefspecifies action execution | | | |+--ro bandwidth? fpcp-qos-bandwidthorder. | +------------------+---------------+--------------------------------+ Table 4: Rule Fields 6.1.2. Mobilty Structures +----------+----------------------------+ | Field |+--ro downlinkType | +----------+----------------------------+ | PORT_ID |+--ro qci? fpcp-qos-class-identifierFPC-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 rewritingCONTEXT_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_addFPC-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-idPORTS |+---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? identityrefFPC-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-addressMOB_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 qosMOB_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? identityrefType | Detail |+---w (index-type)?+---------------------------+---------------------+-----------------+ | TUN_LOCAL_ADDRESS | IP Address |+--:(qci)[NOTE 1] | | |+---w uplink| | | TUN_REMOTE_ADDRESS |+---w qci? fpcp-qos-class-identifierIP 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 rewritingyload_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_addpayload_ipv6(1) |+---w input|+---w adding-property*|+---w port-id? fpcp-port-id|+---w carrier-id fpcp-carrier-idor 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? uint32UDP(1), GRE(2) | | |+---w local-teid? uint32| and GTP(3). |+--:(gre)| |+---w key? uint32|+---w qos| |+---w name? fpcp-name-typeTUN_IF | [16, unsigned |+---w qos-index-type? identityrefInput 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-bandwidth3GPP_MOB_PROFILE ] | | |+---w downlink| | |+---w qci? fpcp-qos-class-identifier| NEXTHOP | [ IP Address |+---w attributetype? identityrefMAC | [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 inputMPLS 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-idInterface 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? uint32PMIP_QOS ] | | |+---w local-teid? uint32| |+--:(gre)| |+---w key? uint32DPN_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? identityrefmust 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 inputVENDOR_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-idType |+---w carrier-id fpcp-carrier-id+----------------+------------------------------------+ |+---w network-id? fpcp-network-idDPN_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-idDPN_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_deleteField |+---w inputType |+---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 thefpcp-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 inEvent 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 thefpcp-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 infollowing 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 thefpcp-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 incorresponding feature is supported by thefpcp-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-typeAgent. 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 { usestraffic-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; } } } Figure21: caption1 A.2.2.33: FPCPMIPYANG 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] | | +--rwdscp? inet:dscpaction-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 | +--rwservice-flag booleanfpc-topology | +--rwexclude-flag boolean +--:(agg-max-dl)domains* [domain-id] |+--rw agg-max-dl? qos-pmip:Aggregate-Max-DL-Bit-Rate-Value +--:(agg-max-ul)| +--rwagg-max-ul? qos-pmip:Aggregate-Max-UL-Bit-Rate-Value +--:(gbr-dl)domain-id fpcbase:fpc-domain-id | | +--rwgbr-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? identityrefdomain-name? string | | +--rwstart-ipsec-spi? ipsec-spidomain-type? string | | +--rwend-ipsec-spi? ipsec-spibasename? fpcbase:fpc-identity {fpcagent:fpc-basename-registry}? | | +--rwstart-source-port? inet:port-numberbase-state? string {fpcagent:fpc-basename-registry}? | | +--rwend-source-port? inet:port-numberbase-checkpoint? string {fpcagent:fpc-basename-registry}? | +--rwstart-destination-port? inet:port-numberdpn-group-peers* [remote-dpn-group-id] {fpcbase:fpc-basic-agent}? | | +--rwend-destination-port? inet:port-numberremote-dpn-group-id fpcbase:fpc-dpn-group-id | | +--rwstart-source-address-v4? inet:ipv4-addressremote-mobility-profile? identityref | | +--rwend-source-address-v4? inet:ipv4-addressremote-data-plane-role? identityref | | +--rwstart-destination-address-v4? inet:ipv4-addressremote-endpoint-address? inet:ip-address | | +--rwend-destination-address-v4? inet:ipv4-addresslocal-endpoint-address? inet:ip-address | | +--rwstart-ds? inet:dscptunnel-mtu-size? uint32 | +--rwend-ds? inet:dscpdpn-id? fpcbase:fpc-dpn-id {fpcbase:fpc-basic-agent}? | +--rwstart-protocol? uint8control-protocols* identityref {fpcbase:fpc-basic-agent}? | +--rwend-protocol? uint8dpn-groups* [dpn-group-id] {fpcbase:fpc-multi-dpn}? | | +--rwstart-source-address-v6? inet:ipv6-addressdpn-group-id fpcbase:fpc-dpn-group-id | | +--rwend-source-address-v6? inet:ipv6-addressdata-plane-role? identityref | | +--rwstart-destination-address-v6? inet:ipv6-addressaccess-type? identityref | | +--rwend-destination-address-v6? inet:ipv6-addressmobility-profile? identityref | | +--rwstart-flow-label? inet:ipv6-flow-labeldpn-group-peers* [remote-dpn-group-id] | | | +--rwend-flow-label? inet:ipv6-flow-labelremote-dpn-group-id fpcbase:fpc-dpn-group-id | | | +--rwstart-traffic-class? inet:dscpremote-mobility-profile? identityref | | | +--rwend-traffic-class? inet:dscpremote-data-plane-role? identityref | | | +--rwstart-next-header? uint8remote-endpoint-address? inet:ip-address | | | +--rwend-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: ... Figure22:34: YANG FPCPMIP treeAgent 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.euSatoru Matsushima SoftBank 1-9-1,Higashi-Shimbashi,Minato-Ku Tokyo 105-7322 Japan Email: satoru.matsushima@g.softbank.co.jpSri Gundavelli Cisco 170 West Tasman Drive San Jose, CA 95134 USA Email: sgundave@cisco.com Danny Moses Email: danny.moses@intel.comLyle Bertz 6220 Sprint Parkway Overland Park KS, 66251 USA Email: lyleb551144@gmail.com