idnits 2.17.1 draft-ietf-dmm-fpc-cpdp-04.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 413 instances of too long lines in the document, the longest one being 162 characters in excess of 72. == There are 1 instance of lines with private range IPv4 addresses in the document. If these are generic example addresses, they should be changed to use any of the ranges defined in RFC 6890 (or successor): 192.0.2.x, 198.51.100.x or 203.0.113.x. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 5679 has weird spacing: '...roup-id fpc...' == Line 5682 has weird spacing: '...licy-id fpc...' == Line 5686 has weird spacing: '...ptor-id fpc...' == Line 5690 has weird spacing: '...tion-id fpc...' == Line 5693 has weird spacing: '...or-type ide...' == (4 more instances...) -- The exact meaning of the all-uppercase expression 'MAY NOT' is not defined in RFC 2119. If it is intended as a requirements expression, it should be rewritten using one of the combinations defined in RFC 2119; otherwise it should not be all-uppercase. == The expression 'MAY NOT', while looking like RFC 2119 requirements text, is not defined in RFC 2119, and should not be used. Consider using 'MUST NOT' instead (if that is what you mean). Found 'MAY NOT' in this paragraph: SESSION_STATE: sets the expected state of the entities embedded in the operation body after successful completion of the operation. Values can be 'complete', 'incomplete' or 'outdated'. Any operation that is 'incomplete' MAY NOT result in communication between the Agent and DPN. If the result is 'outdated' any new operations on these entities or new references to these entities have unpredictable results. -- The document date (September 29, 2016) is 2760 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) -- Looks like a reference, but probably isn't: '16' on line 1795 == Missing Reference: 'INTEGER' is mentioned on line 1795, but not defined == Missing Reference: 'NOTE 1' is mentioned on line 1898, but not defined == Missing Reference: 'NOTE 2' is mentioned on line 1837, but not defined -- Looks like a reference, but probably isn't: '1024' on line 1930 == Missing Reference: 'OCTET STRING' is mentioned on line 1930, but not defined -- Looks like a reference, but probably isn't: '8' on line 1972 == Missing Reference: 'REPORT-TYPE' is mentioned on line 1972, but not defined == Missing Reference: 'DSCP' is mentioned on line 2206, but not defined == Missing Reference: 'RFC5149' is mentioned on line 3989, but not defined == Missing Reference: 'SMI' is mentioned on line 4148, but not defined == Missing Reference: 'RFC4303' is mentioned on line 4366, but not defined == Missing Reference: 'RFC0791' is mentioned on line 4523, but not defined == Missing Reference: 'RFC3260' is mentioned on line 4523, but not defined == Missing Reference: 'RFC3168' is mentioned on line 4525, but not defined == Missing Reference: 'RFC2460' is mentioned on line 4645, but not defined ** Obsolete undefined reference: RFC 2460 (Obsoleted by RFC 8200) == Unused Reference: 'RFC6089' is defined on line 2530, but no explicit reference was found in the text ** Downref: Normative reference to an Informational RFC: RFC 7333 == Outdated reference: A later version (-06) exists of draft-bertz-dime-policygroups-01 == Outdated reference: A later version (-04) exists of draft-ietf-dmm-deployment-models-00 == Outdated reference: A later version (-18) exists of draft-ietf-netconf-restconf-16 Summary: 3 errors (**), 0 flaws (~~), 26 warnings (==), 5 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 DMM Working Group S. Matsushima 3 Internet-Draft SoftBank 4 Intended status: Standards Track L. Bertz 5 Expires: April 2, 2017 Sprint 6 M. Liebsch 7 NEC 8 S. Gundavelli 9 Cisco 10 D. Moses 11 Intel Corporation 12 September 29, 2016 14 Protocol for Forwarding Policy Configuration (FPC) in DMM 15 draft-ietf-dmm-fpc-cpdp-04.txt 17 Abstract 19 This document describes the solution of data-plane separation from 20 control-plane which enables a flexible mobility management system 21 using agent and client functions. To configure data-plane nodes and 22 functions, the data-plane is abstracted by an agent interface to the 23 client. The data-plane abstraction model is extensible in order to 24 support many different type of mobility management systems and data- 25 plane functions. 27 Status of This Memo 29 This Internet-Draft is submitted in full conformance with the 30 provisions of BCP 78 and BCP 79. 32 Internet-Drafts are working documents of the Internet Engineering 33 Task Force (IETF). Note that other groups may also distribute 34 working documents as Internet-Drafts. The list of current Internet- 35 Drafts is at http://datatracker.ietf.org/drafts/current/. 37 Internet-Drafts are draft documents valid for a maximum of six months 38 and may be updated, replaced, or obsoleted by other documents at any 39 time. It is inappropriate to use Internet-Drafts as reference 40 material or to cite them other than as "work in progress." 42 This Internet-Draft will expire on April 2, 2017. 44 Copyright Notice 46 Copyright (c) 2016 IETF Trust and the persons identified as the 47 document authors. All rights reserved. 49 This document is subject to BCP 78 and the IETF Trust's Legal 50 Provisions Relating to IETF Documents 51 (http://trustee.ietf.org/license-info) in effect on the date of 52 publication of this document. Please review these documents 53 carefully, as they describe your rights and restrictions with respect 54 to this document. Code Components extracted from this document must 55 include Simplified BSD License text as described in Section 4.e of 56 the Trust Legal Provisions and are provided without warranty as 57 described in the Simplified BSD License. 59 Table of Contents 61 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 62 2. Conventions and Terminology . . . . . . . . . . . . . . . . . 4 63 3. FPC Architecture . . . . . . . . . . . . . . . . . . . . . . 4 64 4. Information Model . . . . . . . . . . . . . . . . . . . . . . 7 65 4.1. FPC-Topology . . . . . . . . . . . . . . . . . . . . . . 7 66 4.1.1. Domains . . . . . . . . . . . . . . . . . . . . . . . 8 67 4.1.2. DPN-groups . . . . . . . . . . . . . . . . . . . . . 8 68 4.1.3. DPNs . . . . . . . . . . . . . . . . . . . . . . . . 10 69 4.2. FPC-Policy . . . . . . . . . . . . . . . . . . . . . . . 11 70 4.2.1. Descriptors . . . . . . . . . . . . . . . . . . . . . 11 71 4.2.2. Actions . . . . . . . . . . . . . . . . . . . . . . . 12 72 4.2.3. Policies . . . . . . . . . . . . . . . . . . . . . . 13 73 4.2.4. Policy-groups . . . . . . . . . . . . . . . . . . . . 15 74 4.3. FPC-Mobility . . . . . . . . . . . . . . . . . . . . . . 15 75 4.3.1. Port . . . . . . . . . . . . . . . . . . . . . . . . 15 76 4.3.2. Context . . . . . . . . . . . . . . . . . . . . . . . 16 77 4.3.3. Monitors . . . . . . . . . . . . . . . . . . . . . . 21 78 4.4. Namespace and Format . . . . . . . . . . . . . . . . . . 22 79 5. Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . 23 80 5.1. Protocol Messages and Semantics . . . . . . . . . . . . . 23 81 5.1.1. CONF and CONF_BUNDLES Messages . . . . . . . . . . . 25 82 5.1.2. Monitors . . . . . . . . . . . . . . . . . . . . . . 28 83 5.2. Protocol Operation . . . . . . . . . . . . . . . . . . . 29 84 5.2.1. Simple RPC Operation . . . . . . . . . . . . . . . . 29 85 5.2.2. Policy And Mobility on the Agent . . . . . . . . . . 33 86 5.2.3. Optimization for Current and Subsequent Messages . . 35 87 5.2.4. Pre-provisioning . . . . . . . . . . . . . . . . . . 40 88 6. Protocol Message Details . . . . . . . . . . . . . . . . . . 41 89 6.1. Data Structures And Type Assignment . . . . . . . . . . . 41 90 6.1.1. Policy Structures . . . . . . . . . . . . . . . . . . 41 91 6.1.2. Mobilty Structures . . . . . . . . . . . . . . . . . 43 92 6.1.3. Topology Structures . . . . . . . . . . . . . . . . . 45 93 6.1.4. Monitors . . . . . . . . . . . . . . . . . . . . . . 46 94 6.2. Message Attributes . . . . . . . . . . . . . . . . . . . 48 95 6.2.1. Header . . . . . . . . . . . . . . . . . . . . . . . 48 96 6.2.2. CONF and CONF_BUNDLES Attributes and Notifications . 48 97 6.2.3. Monitors . . . . . . . . . . . . . . . . . . . . . . 50 98 7. Derived and Subtyped Attributes . . . . . . . . . . . . . . . 51 99 7.1. 3GPP Specific Extenstions . . . . . . . . . . . . . . . . 54 100 8. Implementation Status . . . . . . . . . . . . . . . . . . . . 56 101 9. Security Considerations . . . . . . . . . . . . . . . . . . . 60 102 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 60 103 11. Work Team Participants . . . . . . . . . . . . . . . . . . . 60 104 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 60 105 12.1. Normative References . . . . . . . . . . . . . . . . . . 60 106 12.2. Informative References . . . . . . . . . . . . . . . . . 61 107 Appendix A. YANG Data Model for the FPC protocol . . . . . . . . 62 108 A.1. YANG Models . . . . . . . . . . . . . . . . . . . . . . . 62 109 A.1.1. FPC Base YANG Model . . . . . . . . . . . . . . . . . 62 110 A.1.2. FPC Agent YANG Model . . . . . . . . . . . . . . . . 73 111 A.1.3. PMIP QoS Model . . . . . . . . . . . . . . . . . . . 85 112 A.1.4. Traffic Selectors YANG Model . . . . . . . . . . . . 97 113 A.1.5. FPC 3GPP Mobility YANG Model . . . . . . . . . . . . 107 114 A.1.6. FPC / PMIP Integration YANG Model . . . . . . . . . . 118 115 A.1.7. FPC Policy Extension YANG Model . . . . . . . . . . . 124 116 A.2. FPC Agent Information Model YANG Tree . . . . . . . . . . 126 117 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 130 119 1. Introduction 121 This document describes Forwarding Policy Configuration (FPC), the 122 solution of data-plane separation from control-plane which enables 123 flexible mobility management systems using agent and client 124 functions. To configure data-plane nodes and functions, the data- 125 plane is abstracted in the agent which provides an interface to the 126 client. 128 Control planes of mobility management systems, and/or any 129 applications which require data-plane control, can utilize the FPC 130 Client in flexible granularities of operation. The configuration 131 operations are capable of configuring not only single Data-Plane Node 132 (DPN) directly, but also multiple DPNs from abstracted data-plane 133 models on the FPC agent. 135 FPC agent provides the data-plane abstraction models in the following 136 three areas: 138 Topology: DPNs are grouped and abstracted in terms of roles of 139 mobility management such as access, anchors and domains. FPC 140 Agent abstracts DPN-groups and consists of forwarding plane 141 topology, such as access nodes assigned to a DPN-group which peers 142 to a DPN-group of anchor nodes. 144 Policy: Policy abstracts policies which handle specific traffic 145 flows or packets such as QoS, packet processing to rewrite 146 headers, etc. A policy consists of one or multiple rules which 147 are composed of Descriptors and Actions. Descriptors in a rule 148 identify traffic flows and Actions apply treatments to packets 149 matched to the Descriptors in the rule. An arbitrary set of 150 policies is abstracted as a Policy-group which is applied to 151 Ports. 153 Mobility: An endpoint of a mobility session is abstracted as a 154 Context with its associated runtime concrete attributes, such as 155 tunnel endpoints, tunnel identifiers, delegated prefix(es), 156 routing information, etc. Contexts are attached to DPN-groups 157 along with consequence of the control plane. One or multiple 158 Contexts which have same sets of policies are assigned Ports which 159 abstract those policiy sets. A Context can belong to multiple 160 Ports which serve different kinds of purpose and policy. Monitors 161 aprovide a mechanism to produce reports when events regarding 162 Ports, Sessions, DPNs or the Agent occurs. 164 The Agent collects applicable sets of forwarding policies for the 165 mobility sessions from the data model, and then renders those 166 policies into specific configurations for each DPN to which the 167 sessions attached. Specific protocols and configurations to 168 configure DPN from FPC Agent are out of scope of this document. 170 The data-plane abstraction model is extensible in order to support 171 many different types of mobility management systems and data-plane 172 functions. The architecture and protocol design of FPC intends not 173 to tie to specific types of access technologies and mobility 174 protocols. 176 2. Conventions and Terminology 178 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 179 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 180 document are to be interpreted as described in [RFC2119]. 182 3. FPC Architecture 184 In accordance with the requirements of flexible data-plane functions 185 deployment described in [RFC7333], FPC provides a means for mobility 186 control-plane and applications to handle DPNs that must be configured 187 with various roles of the mobility management aspect described in 188 [I-D.ietf-dmm-deployment-models]. 190 FPC uses building blocks of Agent, Client and data-plane abstraction 191 models as the interface between the agent and the client. 193 Mobility control-plane and applications integrate the FPC Client 194 function and connect to FPC Agent functions. The Client and the 195 Agent communicate based on data-plane abstraction models described in 196 Section 4. Along with models, the control-plane and the applications 197 put forwarding policies for their mobility sessions on the Agent. 199 The Agent connects to DPN(s) to manage their configuration. These 200 configurations are rendered from the forwarding policies by the 201 Agent. FPC Agent may be implemented in a network controller that 202 handles multiple DPNs or it also may be integrated into a DPN. 204 The FPC architecture supports multi-tenancy where the FPC enabled 205 data-plane supports multiple tenants of mobile operator networks and/ 206 or applications. DPNs on the data-plane run in multiple data-plane 207 roles which are defined per session, domain and tenant. 209 This architecture is illustrated in Figure 1. This document does not 210 adopt a specific protocol for the FPC envelope protocol and it is out 211 of scope. However it must be capable of supporting FPC protocol 212 messages and transactions described in Section 5. 214 +-------------------------+ 215 | Mobility Control-Plane | 216 | and | 217 | Applications | 218 |+-----------------------+| 219 || FPC Client || 220 |+----------^------------+| 221 +-----------|-------------+ 222 FPC envelope protocol | 223 +---------------+-----------------+ 224 | | 225 Network | | 226 Controller | DPN | 227 +-----------|-------------+ +----------|---------+ 228 |+----------v------------+| |+---------v--------+| 229 || [Data-plane model] || ||[Data-plane model]|| 230 || FPC Agent || || FPC Agent || 231 |+-----------------------+| |+------------------+| 232 |+------------+----------+| | | 233 ||SB Protocols|FPC Client|| | DPN Configuration | 234 || Modules | Module || +--------------------+ 235 |+------^-----+----^-----+| 236 +-------|----------|------+ 237 | | 238 Other | | FPC envelope 239 Southband | | Protocol 240 Protocols | | 241 | +-----------------+ 242 | | 243 DPN | DPN | 244 +----------|---------+ +----------|---------+ 245 |+---------v--------+| |+---------v--------+| 246 || Configuration || ||[Data-plane model]|| 247 || Protocol module || || FPC Agent || 248 |+------------------+| |+------------------+| 249 | | | | 250 | DPN Configuration | | DPN Configuration | 251 +--------------------+ +--------------------+ 253 Figure 1: Reference Forwarding Policy Configuration (FPC) 254 Architecture 256 Note that the FPC envelope protocol is only required to handle 257 runtime data in the Mobility model. The rest of the FPC models, 258 namely Topology and Policy, are pre-configured, therefore real-time 259 data handling capabilities are not required for them. Operators that 260 are tenants in the FPC data-plane can configure Toplogy and Policy on 261 the Agent through other means, such as Restconf 262 [I-D.ietf-netconf-restconf] or Netconf [RFC6241]. 264 4. Information Model 266 This section describes information model that represents the concept 267 of FPC which is language and protocol neutral. Figure 2 is an 268 overview of FPC data-plane abstraction model. 270 (Mobile operator tenant that abstracted data-plane is used) 271 | 272 +---FPC-Topology 273 | | 274 | +---Domains 275 | | 276 | +---DPN-groups 277 | | 278 | +---DPNs 279 | 280 +---FPC-Policy 281 | | 282 | +---Descriptors 283 | | 284 | +---Actions 285 | | 286 | +---Policies 287 | | 288 | +---Policy-groups 289 | 290 +---FPC-Mobility 291 | 292 +---Ports 293 | 294 +---Contexts 296 Figure 2: FPC Data-plane Abstraction Model 298 4.1. FPC-Topology 300 Topology abstraction enables an actual data-plane network to support 301 multiple mobile operator's topologies of their data-plane. The FPC- 302 Topology consists of DPNs, DPN-groups and Domains which abstract 303 data-plane topologies for the Client's mobility control-planes and 304 applications. 306 A mobile operator who utilizes a FPC enabled data-plane network can 307 virtually create their DPNs along with their data-plane design on the 308 Agent. The operator also creates a DPN-group of which the DPNs are 309 attributed roles of mobility management such as access, anchors and 310 domains. 312 4.1.1. Domains 314 A domain is defined by the operators to attribute DPN-groups to the 315 domain. Domains may represent services or applications within the 316 operator. 318 (FPC-Topology) 319 | 320 +---Domains 321 | 322 +---Domain-id 323 | 324 +---Domain-name 325 | 326 +---Domain-type 328 Figure 3: Domain Model Structure 330 Domain-id: Identifier of Domain. The ID format SHOULD refer to 331 Section 4.4. 333 Domain-name: Defines Domain name. 335 Domain-type: Specifies which type of communication allowed within 336 the domain, such as ipv4, ipv6, ipv4v6 or ieee802. 338 4.1.2. DPN-groups 340 A DPN-group defines a set of DPNs which share common data-plane 341 attributes. DPN-groups consist data-plane topology that consists of 342 a DPN-group of access nodes connecting to an anchor nodes DPN-group. 344 DPN Group has attributes such as the data-plane role, supported 345 access technologies, mobility profiles, connected peer groups and 346 domain. 348 (FPC-Topology) 349 | 350 +---DPN-groups 351 | 352 +---DPN-group-id 353 | 354 +---Data-plane-role 355 | 356 +---Domains 357 | 358 +---Access-type 359 | 360 +---Mobility-profile 361 | 362 +---DPN-group-peers 364 Figure 4: DPN-groups Model Structure 366 DPN-group-id: Defines identifier of DPN-group. The ID format SHOULD 367 refer to Section 4.4. 369 Data-plane-role: Defines data-plane role of the DPN-group, such as 370 access-dpn, L2/L3 or anchor-dpn. 372 Domains: Specifies domains which the DPN-group belongs to. 374 Access-type: Defines access type which the DPN-group supports such 375 as ethernet(802.3/11), 3gpp cellular(S1, RAB), if any. 377 Mobility-profile: Defines supported mobility profile, such as ietf- 378 pmip, 3gpp, or new profiles defined as extensions of this 379 specification. When those profiles are correctly defined, some 380 or all data-plane parameters of contexts can be automatically 381 derived from this profile by FPC Agent. 383 DPN-group-peers: Defines remote peers of DPN-group with parameters 384 described in Section 4.1.2.1. 386 4.1.2.1. DPN-group Peers 388 DPN-group-peers defines parameters of remote peer DPNs as illustrated 389 in Figure 5. 391 (DPN-groups) 392 | 393 +---DPN-group-peers 394 | 395 +---Remote-DPN-group-id 396 | 397 +---Remote-mobility-profile 398 | 399 +---Remote-data-plane-role 400 | 401 +---Remote-endpoint-address 402 | 403 +---Local-endpoint-address 404 | 405 +---Tunnel-MTU-size 407 Figure 5: DPN-groups Peer Model Structure 409 Remote-DPN-group-id: Indicates peering DPN-Group. 411 Remote-mobility-profile: Defines mobility-profile used for this 412 peer, currently defined profiles are ietf-pmip, 3gpp, or new 413 profiles defined as extensions of this specification. 415 Remote-data-plane-role: Defines forwarding-plane role of peering 416 DPN-group. 418 Remote-endpoint-address: Defines Endpoint address of the peering 419 DPN-group. 421 Local-endpoint-address: Defines Endpoint address of its own DPN- 422 group to peer the remote DPN-group. 424 Tunnel-MTU-size: Defines MTU size of tunnel. 426 4.1.3. DPNs 428 List of DPNs which defines all available nodes for a tenant of the 429 FPC data-plane network. Role of a DPN in the data-plane is not 430 determined until the DPN is attributed to a DPN-group. 432 A DPN may have multiple DPN-groups which are in different data-plane 433 roles or domains. Mobility sessions of that DPN-groups are installed 434 into actual data-plane nodes. The Agent defines DPN binding to 435 actual nodes. 437 (FPC-Topology) 438 | 439 +---DPNs 440 | 441 +---DPN-id 442 | 443 +---DPN-name 444 | 445 +---DPN-groups 446 | 447 +---Node-reference 449 Figure 6: DPNs Model Structure 451 DPN-id: Defines identifier of DPN. The ID format SHOULD refer to 452 Section 4.4. 454 DPN-name: Defines name of DPN. 456 DPN-groups: List of DPN-group which the DPN belongs to. 458 Node-reference: Indicates an actual node to which the Agent binds 459 the DPN. The Agent SHOULD maintain that nodes information 460 including IP address of management and control protocol to 461 connect them. 463 4.2. FPC-Policy 465 The FPC-Policy consists of Descriptors, Actions, Policies and Policy- 466 groups, which can be viewed as configuration data while Contexts and 467 Ports are akin to structures that are instantiated on the Agent. The 468 Descriptors and Actions in a Policy referenced by a Port are active 469 when the Port is in a active Context, i.e. they can be applied to 470 traffic on a DPN. 472 4.2.1. Descriptors 474 List of Descriptors which defines classifiers of specific traffic 475 flow, such as those based on source and destination addresses, 476 protocols, port numbers of TCP/UDP/SCTP/DCCP or any packet. Note 477 that Descriptors are extensibly defined by specific profiles which 478 3gpp, ietf or other SDOs produce. Many specifications also use the 479 terms Filter, Traffic Descriptor or Traffic Selector [RFC6088]. A 480 packet that meets the criteria of a Descriptor is said to satisfy, 481 pass or is consumed by the Descriptor. Descriptors are assigned an 482 identifier and contain a type and value. 484 (FPC-Policy) 485 | 486 +---Descriptors 487 | 488 +---Descriptor-id 489 | 490 +---Descriptor-type 491 | 492 +---Descriptor-value 494 Figure 7: Descriptor Model Structure 496 Descriptor-id: Identifier of Descriptor. The ID format SHOULD refer 497 to Section 4.4. 499 Descriptor-type: Defines descriptor type, which classifies specific 500 traffic flow, such as source and destination addresses, 501 protocols, port numbers of TCP/UDP/SCTP/DCCP or any packet. 503 Descriptor-value: Specifies the value of Descriptor such as IP 504 prefix/address, protocol number, port number, etc. 506 4.2.2. Actions 508 List of Actions which defines treatment/actions to apply to 509 classified traffic meeting the criteria defined by Descriptors. 510 Actions include traffic management related activity such as shaping, 511 policing based on given bandwidth, and connectivity management 512 actions such as pass, drop, forward to given nexthop. Note that 513 Actions are extensibly defined by specific profiles which 3gpp, ietf 514 or other SDOs produce. 516 (FPC-Policy) 517 | 518 +---Actions 519 | 520 +---Action-id 521 | 522 +---Action-type 523 | 524 +---Action-value 526 Figure 8: Action Model Structure 528 Action-id: Identifier of Action. The ID format SHOULD refer to 529 Section 4.4. 531 Action-type: Defines action type, i.e. how to treat the specified 532 traffic flow, e.g. pass, drop, forward to given nexthop value and 533 shape, police based on given bandwidth value, etc. 535 Action-value: Specifies value of Action, such as bandwidth, nexthop 536 address or drop explicitly, etc. 538 4.2.3. Policies 540 Policies are collections of Rules. Each Policy has a Policy 541 Identifier and a list of Rule/Order pairs. The Order and Rule values 542 MUST be unique in the Policy. Unlike the AND filter matching of each 543 Rule the Policy uses an OR matching to find the first Rule whose 544 Descriptors are satisfied by the packet. The search for a Rule to 545 apply to packet is executed according to the unique Order values of 546 the Rules. This is an ascending order search, i.e. the Rule with the 547 lowest Order value is tested first and if its Descriptors are not 548 satisfied by the packet the Rule with the next lowest Order value is 549 tested. If a Rule is not found then the Policy does not apply. 550 Policies contain Rules as opposed to references to Rules. 552 (FPC-Policy) 553 | 554 +---Policies 555 | 556 +---Policy-id 557 | 558 +---Rules 559 | 560 +---Order 561 | 562 +---Descriptors 563 | | 564 | +---Descriptor-id 565 | | 566 | +---Direction 567 | 568 +---Actions 569 | 570 +---Action-id 571 | 572 +---Order 574 Figure 9: Policies Model Structure 576 Policy-id: Identifier of Policy. The ID format SHOULD refer to 577 Section 4.4. 579 Rules: List of Rules which are a collection of Descriptors and 580 Actions. All Descriptors MUST be satisfied before the Actions 581 are taken. This is known as an AND Descriptor list, i.e. 582 Descriptor 1 AND Descriptor 2 AND ... Descriptor X MUST be 583 satisfied for the Rule to apply. These are internal structure to 584 the Policy, i.e. it is not a first class, visible object at the 585 top level of an Agent. 587 Order: Specifies ordering if the Rule has multiple Descriptors and 588 Action sets. 590 Descriptors: List of Descriptors. 592 Descriptor-id: Indicates each Descriptor in the Rule. 594 Direction: Specifies which direction applies, such as upstream, 595 downstream or both. 597 Actions: List of Actions. 599 Action-id: Indicates each Action in the rule. 601 Order: Specifies Action ordering if the Rule has multiple actions. 603 4.2.4. Policy-groups 605 List of Policy-groups which are an aggregation of Policies. Common 606 applications include aggregating Policies that are defined by 607 different functions, e.g. Network Address Translation, Security, 608 etc. The structure has an Identifier and references the Policies via 609 their Identifiers. 611 (FPC-Policy) 612 | 613 +---Policy-groups 614 | 615 +---Policy-group-id 616 | 617 +---Policies 619 Figure 10: Policy-group Model Structure 621 Policy-group-id: Identifier of Policy-group. The ID format SHOULD 622 refer to Section 4.4. 624 Policies: List of Policies in the Policy-group. 626 4.3. FPC-Mobility 628 The FPC-Mobility consists of Port and Context. A mobility session is 629 abstracted as a Context with its associated runtime concrete 630 attributes, such as tunnel endpoints, tunnel identifiers, delegated 631 prefix(es) and routing information, etc. A Port abstracts a set of 632 policies applied to the Context. 634 4.3.1. Port 636 A port represents a collection of policy groups, a group of rules 637 that can exist independent of the mobility/session lifecycle. 638 Mobility control-plane or applications create, modify and delete 639 Ports on FPC Agent through the FPC Client. 641 When a Port is indicated in a Context, the set of Descriptors and 642 Actions in the Policies of the Port are collected and applied to the 643 Context. They must be instantiated on the DPN as forwarding related 644 actions such as QoS differentiations, packet processing of encap/ 645 decap, header rewrite, route selection, etc. 647 (FPC-Mobility) 648 | 649 +---Ports 650 | 651 +---Port-id 652 | 653 +---Policy-groups 655 Figure 11: Port Model Structure 657 Port-id: Identifier of Port. The ID format SHOULD refer to 658 Section 4.4. 660 Policy-groups: List of references to Policy-groups which apply to 661 the Port. 663 4.3.2. Context 665 An endpoint of a mobility session or the instantiation of policy- 666 groups is abstracted as a Context with its associated runtime 667 concrete attributes, such as tunnel endpoints, tunnel identifiers, 668 delegated prefix(es) and routing information, etc. Mobility control- 669 plane or applications create, modify and delete contexts on FPC Agent 670 through the FPC Client. 672 A Context directly describes traffic treatment policies in QoS 673 profile and Mobility profiles or indirectly via Ports. Parameters in 674 these profiles may be set by the FPC Client directly or indirectly 675 derived from the set of Descriptors and Actions when the Ports 676 indicate Policies which specify those descriptors and actions. If a 677 Context doesn't have any Port, all parameters of the Context must be 678 set by the Client. 680 (FPC-Mobility) 681 | 682 +---Contexts 683 | 684 +---Context-id 685 | 686 +---Ports 687 | 688 +---DPN-group 689 | 690 +---Delegating-ip-prefixes 691 | 692 +---Parent-context 694 Figure 12: Common Context Model Structure 696 Context-id: Identifier of Context. The ID format SHOULD refer to 697 Section 4.4. 699 Ports: List of Ports. When a Context is applied to Port(s), the 700 context is configured by policies of those Port(s). Port-id 701 references indicate Ports which apply to the Context. Context 702 can be a part of multiple Ports which have different policies. 704 DPN-group: The DPN-group assigned to the Context. 706 Delegating-ip-prefixes: List of IP prefixes to be delegated to the 707 mobile node of the context. 709 Parent-context: Indicates context which the context inherits. 711 4.3.2.1. Single DPN Agent Case 713 In the case where a FPC Agent supports only one DPN, the Agent MUST 714 maintain context data just for the DPN. The Agent does not need to 715 maintain a Topology model. The Context in single DPN case consists 716 of following parameters for both direction of uplink and downlink. 718 (Contexts) 719 | 720 +---UL-Tunnel-local-address 721 | 722 +---UL-Tunnel-remote-address 723 | 724 +---UL-Tunnel-mtu-size 725 | 726 +---UL-Mobility-specific-tunnel-parameters 727 | 728 +---UL-Nexthop 729 | 730 +---UL-QoS-profile-specific-parameters 731 | 732 +---UL-DPN-specific-parameters 733 | 734 +---UL-Vendor-specific-parameters 736 Figure 13: Uplink Context Model of Single DPN Structure 738 UL-Tunnel-local-address: Specifies uplink endpoint address of the 739 DPN. 741 UL-Tunnel-remote-address: Specifies uplink endpoint address of the 742 remote DPN. 744 UL-Tunnel-Mtu-size: Specifies uplink MTU size of tunnel. 746 UL-Mobility-specific-tunnel-parameters: Specifies profile specific 747 uplink tunnel parameters to the DPN which the agent exists. The 748 profiles includes GTP/TEID for 3gpp profile, GRE/Key for ietf- 749 pmip profile, or new profiles defined by extensions of this 750 specification. 752 UL-Nexthop: Indicates nexthop information of uplink in external 753 network such as IP address, MAC address, SPI of service function 754 chain, SID of segment routing, etc. 756 UL-QoS-profile-specific-parameters: Specifies profile specific QoS 757 parameter of uplink, such as QCI/TFT for 3gpp profile, 758 [RFC6089]/[RFC7222] for ietf-pmip, or new profiles defined by 759 extensions of this specification. 761 UL-DPN-specific-parameters: Specifies optional node specific 762 parameters of uplink in need, such as if-index, tunnel-if-number 763 that must be unique in the DPN. 765 UL-Vendor-specific-parameters: Specifies a vendor specific parameter 766 space for uplink. 768 (Contexts) 769 | 770 +---DL-Tunnel-local-address 771 | 772 +---DL-Tunnel-remote-address 773 | 774 +---DL-Tunnel-Mtu-size 775 | 776 +---DL-Mobility-specific-tunnel-parameters 777 | 778 +---DL-Nexthop 779 | 780 +---DL-QoS-profile-specific-parameters 781 | 782 +---DL-DPN-specific-parameters 783 | 784 +---DL-Vendor-specific-parameters 786 Figure 14: Downlink Context Model of Single DPN Structure 788 DL-Tunnel-local-address: Specifies downlink endpoint address of the 789 DPN. 791 DL-Tunnel-remote-address: Specifies downlink endpoint address of the 792 remote DPN. 794 DL-Tunnel-Mtu-size: Specifies downlink MTU size of tunnel. 796 DL-Mobility-specific-tunnel-parameters: Specifies profile specific 797 downlink tunnel parameters to the DPN which the agent exists. 798 The profiles includes GTP/TEID for 3gpp profile, GRE/Key for 799 ietf-pmip profile, or new profiles defined by extensions of this 800 specification. 802 DL-Nexthop: Indicates nexthop information of downlink in external 803 network such as IP address, MAC address, SPI of service function 804 chain, SID of segment routing, etc. 806 DL-QoS-profile-specific-parameters: Specifies profile specific QoS 807 parameter of downlink, such as QCI/TFT for 3gpp profile, 808 [RFC6089]/[RFC7222] for ietf-pmip, or new profiles defined by 809 extensions of this specification. 811 DL-DPN-specific-parameters: Specifies optional node specific 812 parameters of downlink in need such as if-index, tunnel-if-number 813 that must be unique in the DPN. 815 DL-Vendor-specific-parameters: Specifies a vendor specific parameter 816 space for downlink. 818 4.3.2.2. Multiple DPN Agent Case 820 Another case is when a FPC Agent connects to multiple DPNs. This 821 Agent MUST maintain a set of Context data for each DPN. The Context 822 contains a DPNs list where each entry of the list consists of the 823 parameters in Figure 15. A Context data for one DPN has two entries 824 for each direction of uplink and downlink. 826 (Contexts) 827 | 828 +---DPNs 829 | 830 +---DPN-id 831 | 832 +---Direction 833 | 834 +---Tunnel-local-address 835 | 836 +---Tunnel-remote-address 837 | 838 +---Tunnel-mtu-size 839 | 840 +---Mobility-specific-tunnel-parameters 841 | 842 +---Nexthop 843 | 844 +---QoS-profile-specific-parameters 845 | 846 +---DPN-specific-parameters 847 | 848 +---Vendor-specific-parameters 850 Figure 15: Multiple-DPN Supported Context Model Structure 852 DPN-id: Indicates DPN of which the runtime context data installed. 854 Direction: Specifies which side of connection at the DPN indicated, 855 "uplink" or "downlink". 857 Tunnel-local-address: Specifies endpoint address of the DPN at the 858 uplink or downlink. 860 Tunnel-remote-address: Specifies endpoint address of remote DPN at 861 the uplink or downlink. 863 Tunnel-mtu-size: Specifies the MTU size of tunnel on uplink or 864 downlink. 866 Mobility-specific-tunnel-parameters: Specifies profile specific 867 tunnel parameters for uplink or downlink of the DPN. The 868 profiles includes GTP/TEID for 3gpp profile, GRE/Key for ietf- 869 pmip profile, or new profiles defined by extensions of this 870 specification. 872 Nexthop: Indicates nexthop information for uplink or downlink in 873 external network of the DPN such as IP address, MAC address, SPI 874 of service function chain, SID of segment routing, etc. 876 QoS-profile-specific-parameters: Specifies profile specific QoS 877 parameter for uplink or downlink of the DPN, such as QCI/TFT for 878 3gpp profile, [RFC6089]/[RFC7222] for ietf-pmip, or new profiles 879 defined by extensions of this specification. 881 DPN-specific-parameters: Specifies optional node specific parameters 882 for uplink or downlink of the DPN in need, such like if-index, 883 tunnel-if-number that must be unique in the DPN. 885 Vendor-specific-parameters: Specifies a vendor specific parameter 886 space for the DPN. 888 4.3.3. Monitors 890 Monitors provide a mechanism to produce reports when events occur. A 891 Monitor will have a target that specifies what is to be watched. 893 When a Monitor is specified, the configuration MUST be applicable to 894 the attribute/entity monitored, e.g. a Monitor using a Threshold 895 configuration cannot be applied to a context but it can be applied to 896 a numeric property. 898 (FPC-Mobility) 899 | 900 +---Monitors 901 | 902 +---Monitor-id 903 | 904 +---Target 905 | 906 +---Configuration 908 Figure 16: Common Monitor Model Structure 910 Monitor-id: Name of the Monitor. The ID format SHOULD refer to 911 Section 4.4. 913 Target: Target to be monitored. This may be an event, a Context, a 914 Port or attribute(s) of Contexts. When the type is an 915 attribute(s) of a Context, the target name is a concatenation of 916 the Context-Id and the relative path (separated by '/') to the 917 attribute(s)to be monitored. 919 Configuration: Determined by the Monitor subtype. Four report types 920 are defined: 922 * Periodic reporting specifies an interval by which a 923 notification is sent to the Client. 925 * Event reporting specifies a list of even types that, if they 926 occur and are related to the monitored attribute, will result 927 in sending a notfication to the Client 929 * Scheduled reporting specifies the time (in seconds since Jan 930 1, 1970) when a notificaiton for the monitor should be sent to 931 the Client. Once this Monitor's notification is completed the 932 Monitor is automatically de-registered. 934 * Threshold reporting specifies one or both of a low and high 935 threshold. When these values are crossed a corresponding 936 notification is sent to the Client. 938 4.4. Namespace and Format 940 The identifiers and names in FPC models which reside in the same 941 namespace must be unique. That uniqueness must be kept in agent or 942 data-plane tenant namespace on an Agent. The tenant namespace 943 uniquenes MUST be applied to all elements of the tenant model, i.e. 944 Topology, Policy and Mobility models. 946 When a Policy needs to be applied to Contexts in all tenants on an 947 Agent, the Agent SHOULD define that policy to be visible from all the 948 tenants. In this case, the Agent assign an unique identifier in the 949 agent namespace. 951 The format of identifiers can utilize any format with agreement 952 between data-plane agent and client operators. The formats include 953 but are not limited to Globally Unique IDentifiers (GUIDs), 954 Universally Unique IDentifiers (UUIDs), Fully Qualified Domain Names 955 (FQDNs), Fully Qualified Path Names ( FQPNs) and Uniform Resource 956 Identifiers (URIs). 958 The FPC model MUST NOT limit the types of format that dictate the 959 choice of FPC protocol. It is noted that the choice of identifiers 960 which are used in Mobility model should be suitable to handle runtime 961 parameters in real-time. The Topology and Policy models are not 962 restricted to meet that requirement as described in Section 3. 964 5. Protocol 966 5.1. Protocol Messages and Semantics 968 Five message types are supported: 970 +---------------+---------------+-----------------------------------+ 971 | Message | Type | Description | 972 +---------------+---------------+-----------------------------------+ 973 | CONF | HEADER | Configure processes a single | 974 | | ADMIN_STATE | operation. | 975 | | SESSION_STATE | | 976 | | OP_TYPE BODY | | 977 | | | | 978 | CONF_BUNDLES | 1*[HEADER | Configure-bundles takes multiple | 979 | | ADMIN_STATE | operations that are to be | 980 | | SESSION_STATE | executed as a group with partial | 981 | | OP_TYPE BODY] | failures allowed. They are | 982 | | | executed according to the OP_ID | 983 | | | value in the OP_BODY in ascendig | 984 | | | order. If a CONFIGURE_BUNDLES | 985 | | | fails, any entities provisioned | 986 | | | in the CURRENT operation are | 987 | | | removed, however, any successful | 988 | | | operations completed prior to the | 989 | | | current operation are preserved | 990 | | | in order to reduce system load. | 991 | | | | 992 | REG_MONITOR | HEADER | Install a monitor at an Agent. | 993 | | ADMIN_STATE | The message includes information | 994 | | *[ MONITOR ] | about the attribute to monitor | 995 | | | and the reporting method. Note | 996 | | | that a MONITOR_CONFIG is required | 997 | | | for this opeation. | 998 | | | | 999 | DEREG_MONITOR | HEADER *[ | Remove monitors from an Agent. | 1000 | | MONITOR_ID ] | Monitor IDs are provided. Boolean | 1001 | | [ boolean ] | (optional) indicates if a | 1002 | | | successful DEREG triggers a | 1003 | | | NOTIFY with final data. | 1004 | | | | 1005 | PROBE | HEADER | Probe the status of a registered | 1006 | | MONITOR_ID | monitor. | 1007 +---------------+---------------+-----------------------------------+ 1009 Table 1: Client to Agent Messages 1011 Each message contains a header with the Client Identifier, an 1012 execution delay timer and an operation identifier. The delay, in ms, 1013 is processed as the delay for operation execution from the time the 1014 operation is received by the Agent. 1016 Messages that create or update Monitors and Entities, i.e. CONF, 1017 CONF_BUNDLES and REG_MONITOR, specify an Administrative State which 1018 specifies the Administrative state of the message subject(s) after 1019 the successful completion of the operation. If the status is set to 1020 virtual, any existing data on the DPN is removed. If the value is 1021 set to disabled, then an operation will occur on the DPN IF the 1022 entity exists on the DPN. If set to 'active' the DPN will be 1023 provisioned. Values are 'enabled', 'disabled' or 'virtual'. 1025 An Agent will respond with an error, ok, or an ok with indication 1026 that remaining data will be sent via a notify from the Agent to the 1027 Client Section 5.1.1.5.2. When returning an 'ok' of any kind, 1028 optional data may be present. 1030 Two Agent notifications are supported: 1032 +----------------------+----------+---------------------------------+ 1033 | Message | Type | Description | 1034 +----------------------+----------+---------------------------------+ 1035 | CONFIG_RESULT_NOTIFY | See | An asynchronous notification | 1036 | | Table 15 | from Agent to Client based upon | 1037 | | | a previous CONFIG or | 1038 | | | CONFIG_BUNDLES request. | 1039 | | | | 1040 | NOTIFY | See | An asynchronous notification | 1041 | | Table 16 | from Agent to Client based upon | 1042 | | | a registered MONITOR. | 1043 +----------------------+----------+---------------------------------+ 1045 Table 2: Agent to Client Messages (Notfications) 1047 5.1.1. CONF and CONF_BUNDLES Messages 1049 CONF and CONF_BUNDLES specify the following information for each 1050 operation in addition to the header information: 1052 SESSION_STATE: sets the expected state of the entities embedded in 1053 the operation body after successful completion of the operation. 1054 Values can be 'complete', 'incomplete' or 'outdated'. Any 1055 operation that is 'incomplete' MAY NOT result in communication 1056 between the Agent and DPN. If the result is 'outdated' any new 1057 operations on these entities or new references to these entities 1058 have unpredictable results. 1060 OP_TYPE: specifies the type of operation. Valid values are 'create' 1061 (0), 'update' (1), 'query' (2) or 'delete' (3). 1063 COMMAND_SET: specifies the Command Set IF the feature is supported 1064 (see Section 5.1.1.3). 1066 BODY A list of Clones, if supported, Ports and Contexts when the 1067 OP_TYPE is 'create' or 'update'. Otherwise it is a list of 1068 Targets for 'query' or 'deletion'. See Section 6.2.2 for 1069 details. 1071 5.1.1.1. Agent Operation Processing 1073 The Agent will process entities provided in an operation in the 1074 following order: 1076 1. Clone Instructions, if the feature is supported 1078 2. Ports 1080 3. Contexts according to COMMAND_SET order processing 1082 The following Order Processing occurs when COMMAND Sets are present 1084 1. The Entity specific COMMAND_SET is processed according to its bit 1085 order unless otherwise specified by the technology specific 1086 COMMAND_SET definition. 1088 2. Operation specific COMMAND_SET is processed upon all applicable 1089 entities (even if they had Entity specific COMMAND_SET values 1090 present) according to its bit order unless otherwise specified by 1091 the technology specific COMMAND_SET definition. 1093 3. Operation OP_TYPE is processed for all entities. 1095 When deleting objects only their name needs to be provided. However, 1096 attributes MAY be provided if the Client wishes to avoid requiring 1097 the Agent cache lookups. 1099 When deleting an attribute, a leaf reference should be provided. 1100 This is a path to the attibutes. 1102 5.1.1.2. Cloning 1104 Cloning is an optional feature that allows a Client to copy one 1105 structure to another in an operation. Cloning is always done first 1106 within the operation (see Operation Order of Execution for more 1107 detail). If a Client wants to build an object then Clone it, use 1108 CONFIG_BUNDLES with the first operation being the entities to be 1109 copied and a second operation with the Cloning instructions. A CLONE 1110 operation takes two arguments, the first is the name of the target to 1111 clone and the second is the name of the newly created entity. 1112 Individual attributes are not clonable; only Ports and Contexts can 1113 be cloned. 1115 5.1.1.3. Command Bitsets 1117 The COMMAND_SET is a technology specific bitset that allows for a 1118 single entity to be sent in an operation with requested sub- 1119 transactions to be completed. For example, a Context could have the 1120 Home Network Prefix absent but it is unclear if the Client would like 1121 the address to be assigned by the Agent or if this is an error. 1122 Rather than creating a specific command for assigning the IP a bit 1123 position in a COMMAND_SET is reserved for Agent based IP assignment. 1124 Alternatively, an entity could be sent in an update operation that 1125 would be considered incomplete, e.g. missing some required data in 1126 for the entity, but has sufficient data to complete the instructions 1127 provided in the COMMAND_SET. 1129 5.1.1.4. Reference Scope 1131 The Reference Scope is an optional feature that provides the scope of 1132 references used in a configuration command, i.e. CONFIG or 1133 CONFIG_BUNDLES. These scopes are defined as 1135 o none - all entities have no references to other entities. This 1136 implies only Contexts are present Ports MUST have references to 1137 Policy-Groups. 1139 o op - All references are contained in the operation body, i.e. only 1140 intra-operaion references exist. 1142 o bundle - All references in exist in bundle (inter-operation/intra- 1143 bundle). NOTE - If this value comes in CONFIG call it is 1144 equivalent to 'op'. 1146 o storage - One or more references exist outside of the operation 1147 and bundle. A lookup to a cache / storage is required. 1149 o unknown - the location of the references are unknown. This is 1150 treated as a 'storage' type. 1152 If supported by the Agent, when cloning instructions are present, the 1153 scope MUST NOT be 'none'. When Ports are present the scope MUST be 1154 'storage' or 'uknown'. 1156 An agent that only accepts 'op' or 'bundle' reference scope messages 1157 is referred to as 'stateless' as it has no direct memory of 1158 references outside messages themselves. This permits low memory 1159 footprint Agents. Even when an Agent supports all message types an 1160 'op' or 'bundle' scoped message can be processed quickly by the Agent 1161 as it does not require storage access. 1163 5.1.1.5. Operation Response 1165 5.1.1.5.1. Immediate Response 1167 Results will be supplied per operation input. Each result contains 1168 the RESULT_STATUS and OP_ID that it corresponds to. RESULT_STATUS 1169 values are: 1171 OK - SUCCESS 1173 ERR - An Error has occurred 1175 OK_NOTIFY_FOLLOWS - The Operation has been accepted by the Agent 1176 but further processing is required. A CONFIG_RESULT_NOTIFY will 1177 be sent once the processing has succeeded or failed. 1179 Any result MAY contain nothing or a entities created or partially 1180 fulfilled as part of the operation as specified in Table 14. For 1181 Clients that need attributes back quickly for call processing, the 1182 AGENT MUST respond back with an OK_NOTIFY_FOLLOWS and minimally the 1183 attributes assigned by the Agent in the response. These situations 1184 MUST be determined through the use of Command Sets (see 1185 Section 5.1.1.3). 1187 If an error occurs the following information is returned. 1189 ERROR_TYPE_ID (Unsigned 32) - The identifier of a specific error 1190 type 1192 ERROR_INFORMATION - An OPTIONAL string of no more than 1024 1193 characters. 1195 5.1.1.5.2. Asynchronous Notification 1197 A CONFIG_RESULT_NOTIFY occurs after the Agent has completed 1198 processing related to a CONFIG or CONFIG_BUNDLES request. It is an 1199 asynchronous communication from the Agent to the Client. 1201 The values of the CONFIG_RESULT_NOTIFY are detailed in Table 15. 1203 5.1.2. Monitors 1205 When a monitor has a reporting configuration of SCHEDULED it is 1206 automatically de-registered after the NOTIFY occurs. An Agent or DPN 1207 may temporarily suspend monitoring if insufficient resources exist. 1208 In such a case the Agent MUST notify the Client. 1210 All monitored data can be requested by the Client at any time using 1211 the PROBE message. Thus, reporting configuration is optional and 1212 when not present only PROBE messages may be used for monitoring. If 1213 a SCHEDULED or PERIODIC configuration is provided during registration 1214 with the time related value (time or period respectively) of 0 a 1215 NOTIFY is immediately sent and the monitor is immediately de- 1216 registered. This method should, when a MONITOR has not been 1217 installed, result in an immediate NOTIFY sufficient for the Client's 1218 needs and lets the Agent realize the Client has no further need for 1219 the monitor to be registered. An Agent may reject a registration if 1220 it or the DPN has insufficient resources. 1222 PROBE messages are also used by a Client to retrieve information 1223 about a previously installed monitor. The PROBE message SHOULD 1224 identify one or more monitors by means of including the associated 1225 monitor identifier. An Agent receiving a PROBE message sends the 1226 requested information in a single or multiple NOTIFY messages. 1228 5.2. Protocol Operation 1230 5.2.1. Simple RPC Operation 1232 An FPC Client and Agent MUST identify themself using the CLI_ID and 1233 AGT_ID respectively to ensure that for all transactions a recipient 1234 of an FPC message can unambiguously identify the sender of the FPC 1235 message. A Client MAY direct the Agent to enforce a rule in a 1236 particular DPN by including a DPN_ID value in a Context. Otherwise 1237 the Agent selects a suitable DPN to enforce a Context and notifies 1238 the Client about the selected DPN using the DPN_ID. 1240 All messages sent from a Client to an Agent MUST be acknowledged by 1241 the Agent. The response must include all entities as well as status 1242 information, which indicates the result of processing the message, 1243 using the RESPONSE_BODY property. In case the processing of the 1244 message results in a failure, the Agent sets the ERROR_TYPE_ID and 1245 ERROR_INFORMATION accordingly and MAY clear the Context or Port, 1246 which caused the failure, in the response. 1248 If based upon Agent configuration or the processing of the request 1249 possibly taking a significant amount of time the Agent MAY respond 1250 with an OK_NOTIFY_FOLLOWS with an optional RESPONSE_BODY containing 1251 the paritially completed entities. When an OK_NOTIFY_FOLLOWS is 1252 sent, the Agent will, upon completion or failure of the operation, 1253 respond with an asynchronous CONFIG_RESULT_NOTIFY to the Client. 1255 A Client MAY add a property to a Context without providing all 1256 required details of the attribute's value. In such case the Agent 1257 SHOULD determine the missing details and provide the completed 1258 property description back to the Client. If the processing will take 1259 too long or based upon Agent configuration, the Agent MAY respond 1260 with an OK_NOTIFY_FOLLOWS with a RESPONSE_BODY containing the 1261 paritially completed entities. 1263 In case the Agent cannot determine the missing value of an 1264 attribute's value per the Client's request, it leaves the attribute's 1265 value cleared in the RESPONSE_BODY and sets the RESULT to Error, 1266 ERROR_TYPE_ID and ERROR_INFORMATION. As example, the Control-Plane 1267 needs to setup a tunnel configuration in the Data-Plane but has to 1268 rely on the Agent to determine the tunnel endpoint which is 1269 associated with the DPN that supports the Context. The Client adds 1270 the tunnel property attribute to the FPC message and clears the value 1271 of the attribute (e.g. IP address of the local tunnel endpoint). 1272 The Agent determines the tunnel endpoint and includes the completed 1273 tunnel property in its response to the Client. 1275 Figure 17 illustrates an exemplary session life-cycle based on Proxy 1276 Mobile IPv6 registration via MAG Control-Plane function 1 (MAG-C1) 1277 and handover to MAG Control-Plane function 2 (MAG-C2). Edge DPN1 1278 represents the Proxy CoA after attachment, whereas Edge DPN2 serves 1279 as Proxy CoA after handover. As exemplary architecture, the FPC 1280 Agent and the network control function are assumed to be co-located 1281 with the Anchor-DPN, e.g. a Router. 1283 +-------Router--------+ 1284 +-----------+ |+-------+ +---------+| 1285 +------+ +------+ +-----+ FPC | | FPC | | Anchor | 1286 |MAG-C1| |MAG-C2| |LMA-C| Client| | Agent | | DPN | 1287 +------+ +------+ +-----+-------+ +-------+ +---------+ 1288 [MN attach] | | | | 1289 |-------------PBU----->| | | 1290 | | |---(1)--CONFIG(CREATE)--->| | 1291 | | | [ CONTEXT_ID, |--tun1 up->| 1292 | | | DOWNLINK(QOS/TUN), | | 1293 | | | UPLINK(QOS/TUN), |--tc qos-->| 1294 | | | IP_PREFIX(HNP) ] | | 1295 | | |<---(2)- OK --------------|-route add>| 1296 | | | | | 1297 |<------------PBA------| | | 1298 | | | | | 1299 | +----+ | | | | 1300 | |Edge| | | | | 1301 | |DPN1| | | | | 1302 | +----+ | | | | 1303 | | | 1304 | |-=======================================================-| 1305 | | | | 1306 | [MN handover] | | | 1307 | |---PBU ---->| | | 1308 | | |--(3)- CONFIG(MODIFY)---->| | 1309 | |<--PBA------| [ CONTEXT_ID |-tun1 mod->| 1310 | | | DOWNLINK(TUN), | | 1311 | | +----+ | UPLINK(TUN) ] | | 1312 | | |Edge| |<---(4)- OK --------------| | 1313 | | |DPN2| | | | 1314 | | +----+ | | | 1315 | | | | | | 1316 | | |-============================================-| 1317 | | | | | 1319 Figure 17: Exemplary Message Sequence (focus on FPC reference point) 1321 After reception of the Proxy Binding Update (PBU) at the LMA Control- 1322 Plane function (LMA_C), the LMA-C selects a suitable DPN, which 1323 serves as Data-Plane anchor to the mobile node's (MN) traffic. The 1324 LMA-C adds a new logical Context to the DPN to treat the MN's traffic 1325 (1) and includes a Context Identifier (CONTEXT_ID) to the CONFIGURE 1326 command. The LMA-C identifies the selected Anchor DPN by including 1327 the associated DPN identifier. 1329 The LMA-C adds properties during the creaton of the new Context. One 1330 property is added to specify the forwarding tunnel type and endpoints 1331 (Anchor DPN, Edge DPN1) in each direction (as required). Another 1332 property is added to specify the QoS differentiation, which the MN's 1333 traffic should experience. At reception of the Context, the FPC 1334 Agent utilizes local configuration commands to create the tunnel 1335 (tun1) as well as the traffic control (tc) to enable QoS 1336 differentiation. After configuration has been completed, the Agent 1337 applies a new route to forward all traffic destined to the MN's HNP 1338 specified as a property in the Context to the configured tunnel 1339 interface (tun1). 1341 During handover, the LMA-C receives an updating PBU from the handover 1342 target MAG-C2. The PBU refers to a new Data-Plane node (Edge DPN2) 1343 to represent the new tunnel endpoints in the downlink and uplink, as 1344 requried. The LMA-C sends a CONFIGURE message (3) to the Agent to 1345 modify the existing tunnel property of the existing Context and to 1346 update the tunnel endpoint from Edge DPN1 to Edge DPN2. Upon 1347 reception of the CONFIGURE message, the Agent applies updated tunnel 1348 property to the local configuration and responds to the Client (4). 1350 +-------Router--------+ 1351 +-----------+ |+-------+ +---------+| 1352 +------+ +------+ +-----+ FPC | | FPC | | Anchor | 1353 |MAG-C1| |MAG-C2| |LMA-C| Client| | Agent | | DPN | 1354 +------+ +------+ +-----+-------+ +-------+ +---------+ 1355 [MN attach] | | | | 1356 |-------------PBU----->| | | 1357 | | |---(1)--CONFIG(MODIFY)--->| | 1358 |<------------PBA------| [ CONTEXT_ID, |--tun1 ->| 1359 | | | DOWNLINK(TUN delete), | down | 1360 | | | UPLINK(TUN delete) ] | | 1361 | | | | | 1362 | | |<-(2)- OK ----------------| | 1363 | | | | | 1364 | | [ MinDelayBeforeBCEDelete expires ] | | 1365 | | | | | 1366 | | |---(3)--CONFIG(DELETE)--->|-- tun1 -->| 1367 | | | | delete | 1368 | | |<-(4)- OK ----------------| | 1369 | | | |-- route ->| 1370 | | | | remove | 1371 | | | | | 1373 Figure 18: Exemplary Message Sequence (focus on FPC reference point) 1375 When a teardown of the session occurs, MAG-C1 will send a PBU with a 1376 lifteime value of zero. The LMA-C sends a CONFIGURE message (1) to 1377 the Agent to modify the existing tunnel property of the existing 1378 Context to delete the tunnel information.) Upon reception of the 1379 CONFIGRE message, the Agent removes the tunnel configuration and 1380 responds to the Client (2). Per [RFC5213], the PBA is sent back 1381 immediately after the PBA is received. 1383 If no valid PBA is recieved after the expiration of the 1384 MinDelayBeforeBCEDelete timer (see [RFC5213]), the LMA-C will send a 1385 CONFIGURE (3) message with a deletion request for the Context. Upon 1386 reception of the message, the Agent deletes the tunnel and route on 1387 the DPN and responds to the Client (4). 1389 5.2.2. Policy And Mobility on the Agent 1391 A Client may build Policy and Topology using any mechanism on the 1392 Agent. Such entities are not always required to be constructed in 1393 realtime and, therefore, there are no specific messages defined for 1394 them in this specification. 1396 The Client may add, modify or delete many Ports and Contexts in a 1397 single FPC message. This includes linking Contexts to Actions and 1398 Descriptors, i.e. a Rule. As example, a Rule which performs re- 1399 writing of an arriving packet's destination IP address from IP_A to 1400 IP_B matching an associated Descriptor, can be enforced in the Data- 1401 Plane via an Agent to implicitly consider matching arriving packet's 1402 source IP address against IP_B and re- write the source IP address to 1403 IP_A. 1405 Figure 19 illustrates the generic policy configuration model as used 1406 between a FPC Client and a FPC Agent. 1408 Descriptor_1 -+ +- Action_1 1409 | | 1410 Descriptor_2 -+----+- Action_2 1411 +------+ 1412 /Order#/-------------+ 1413 +------+ | 1414 | 1415 Descriptor_3 -+ +- Action_3 +- 1416 | | | ^ 1417 Descriptor_4 -+----+- Action_4 | | 1418 +------+ | 1419 /Order#/-------------+ ^ 1420 +------+ | 1421 1423 +-------------------+ +---------------------+ 1424 | Bind 1..M traffic | | Bind 1..N traffic | 1425 | Descriptors to | --> | treatment actions | 1426 | a Policy, | | to a Policy, | 1427 | Policy-Group and | | Policy-Group and | 1428 | Port | | Port | 1429 +-------------------+ +---------------------+ 1431 | | 1432 +-------------- Data-Plane Rule ------------------+ 1434 Figure 19: Structure of Policies and Ports 1436 As depicted in Figure 19, the Port represents the anchor of Rules 1437 through the Policy-group, Policy, Rule heirarchy configured by any 1438 mechanism including RPC or N. A Client and Agent use the identifier 1439 of the associated Policy to directly access the Rule and perform 1440 modifications of traffic Descriptors or Action references. A Client 1441 and Agent use the identifiers to access the Descriptors or Actions to 1442 perform modifications. From the viewpoint of packet processing, 1443 arriving packets are matched against traffic Descriptors and 1444 processed according to the treatment Actions specified in the list of 1445 properties associated with the Port. 1447 A Client complements a rule's Descriptors with a Rule's Order 1448 (priority) value to allow unambiguous traffic matching on the Data- 1449 Plane. 1451 Figure 20 illustrates the generic context configuration model as used 1452 between a FPC Client and a FPC Agent. 1454 TrafficSelector_1 1455 | 1456 profile-parameters 1457 | 1458 mobility-profile-- dl ------+ 1459 ^ | 1460 | qos-profile 1461 | 1462 ^ per-mn-agg-max-dl_2 1463 | 1464 1466 +-------------------+ +---------------------+ 1467 | Bind 1..M traffic | | Bind 1..N traffic | 1468 | selectors to | --> | treatment / qos | 1469 | a Context | | actions to a | 1470 | | | Context | 1471 +-------------------+ +---------------------+ 1473 | | 1474 +-------------- Data-Plane Rule ------------------+ 1476 Figure 20: Structure of Contexts 1478 As depicted in Figure 20, the Context represents a mobiility session 1479 heirarchy. A Client and Agent directly assigns values such as 1480 dowlink traffic descriptors, QoS information, etc. A Client and 1481 Agent use the context identifiers to access the descriptors, qos 1482 information, etc. to perform modifications. From the viewpoint of 1483 packet processing, arriving packets are matched against traffic 1484 Descriptors and processed according to the qos or other mobility 1485 profile related Actions specified in the Context's properties. If 1486 present, the final action is to use a Context's tunnel information to 1487 encapsulate and forward the packet. 1489 A second Context also references context1 in the figure. Based upon 1490 the techology a property in a parent context MAY be inherited by its 1491 descendants. This permits concise over the wire representation. 1492 When a Client deletes a parent Context all children are also deleted. 1494 5.2.3. Optimization for Current and Subsequent Messages 1496 5.2.3.1. Bulk Data in a Single Operation 1498 A single operation MAY contain multiple entities. This permits 1499 bundling of requests into a single operation. In the example below 1500 two PMIP sessions are created via two PBU messages and sent to the 1501 Agent in a single CONFIGURE message (1). Upon receiveing the 1502 message, the Agent responds back with an OK_NOTIFY_FOLLOWS (2), 1503 completes work on the DPN to activate the assocaited sessions then 1504 responds to the Client wiht a CONFIG_RESULT_NOTIFY (3). 1506 +-------Router--------+ 1507 +-----------+ |+-------+ +---------+| 1508 +------+ +------+ +-----+ FPC | | FPC | | Anchor | 1509 |MAG-C1| |MAG-C2| |LMA-C| Client| | Agent | | DPN | 1510 +------+ +------+ +-----+-------+ +-------+ +---------+ 1511 [MN1 attach] | | | | 1512 |-------------PBU----->| | | 1513 | [MN2 attach] | | | 1514 | |---PBU----->| | | 1515 | | | | | 1516 | | |---(1)--CONFIG(CREATE)--->| | 1517 |<------------PBA------| [ CONTEXT_ID 1, |--tun1 up->| 1518 | | | DOWNLINK(QOS/TUN), | | 1519 | |<--PBA------| UPLINK(QOS/TUN), |--tc1 qos->| 1520 | | | IP_PREFIX(HNP) ] | | 1521 | | | [ CONTEXT_ID 2, |-route1 | 1522 | | | DOWNLINK(QOS/TUN), | add> | 1523 | | | UPLINK(QOS/TUN), | | 1524 | | | IP_PREFIX(HNP) ] |--tun2 up->| 1525 | | |<-(2)- OK_NOTIFY_FOLLOWS--| | 1526 | | | |--tc2 qos->| 1527 |<------------PBA------| | | 1528 | | | |-route2 | 1529 | | |<(3) CONFIG_RESULT_NOTIFY | add> | 1530 | | | [ Response Data ] | | 1531 | | | | | 1532 | | | | | 1534 Figure 21: Exemplary Bulk Entity with Asynchronous Notification 1535 Sequence (focus on FPC reference point) 1537 5.2.3.2. Configuration Bundles 1539 Bundles provide transaction boundaries around work in a single 1540 message. Operations in a bundle MUST be successfully executed in the 1541 order specified. This allows references created in one operation to 1542 be used in a subsequent operation in the bundle. 1544 The example bundle shows in Operation 1 (OP 1) the creation of a 1545 Context 1 which is then referenced in Operation 2 (OP 2) by 1546 CONTEXT_ID 2. If OP 1 fails then OP 2 will not be executed. The 1547 advantage of the CONFIGURE_BUNDLES is preservation of dependency 1548 orders in a single message as opposed to sending multiple CONFIGURE 1549 messages and awaiting results from the Agent. 1551 When a CONFIGURE_BUNDLES fails, any entities provisioned in the 1552 CURRENT operation are removed, however, any successful operations 1553 completed prior to the current operation are preserved in order to 1554 reduce system load. 1556 +-------Router--------+ 1557 +-----------+ |+-------+ +---------+| 1558 | FPC | | FPC | | Anchor | 1559 | Client | | Agent | | DPN | 1560 +-----------+ +-------+ +---------+ 1561 | | | 1562 |-CONFIG_BUNDLES(CREATE)-->| | 1563 | [ OP 1, [PORT X ] | | 1564 | [ CONTEXT_ID 1, | | 1565 | DOWNLINK(QOS/TUN), | | 1566 | UPLINK(QOS/TUN), | | 1567 | IP_PREFIX(HNP) ] | | 1568 | [ OP 2, | | 1569 | [ CONTEXT_ID 2, | | 1570 | PARENT_CONTEXT_ID 1, | | 1571 | UPLINK(QOS/TUN), | | 1572 | DOWNLINK(QOS/TUN) ] ] | | 1573 | | | 1575 Figure 22: Exemplary Bundle Message (focus on FPC reference point) 1577 5.2.3.3. Cloning Feature (Optional) 1579 Cloning provides a high speed copy/paste mechanism. The example 1580 below shows a single Context that will be copied two times. A 1581 subsequent update then overrides the value. The avoid the accidental 1582 activation of the Contexts on the DPN, the CONFIGURE (1) message with 1583 the cloning instruction has a SESSION_STATE with a value of 1584 'incomplete' and OP_TYPE of 'CREATE'. A second CONFIGURE (2) is sent 1585 with the SESSION_STATE of 'complete' and OP_TYPE of 'UPDATE'. The 1586 second message includes any differences between the original (copied) 1587 Context and its Clones. 1589 +-------Router--------+ 1590 +-----------+ |+-------+ +---------+| 1591 | FPC | | FPC | | Anchor | 1592 | Client | | Agent | | DPN | 1593 +-----------+ +-------+ +---------+ 1594 | | | 1595 |-CONFIG_BUNDLES(CREATE)-->| | 1596 | [ OP 1, | | 1597 | [ SESSION_STATE | | 1598 | (incomplete) ], | | 1599 | [CLONE SRC=2, TARGET=3], | | 1600 | [CLONE SRC=2, TARGET=4], | | 1601 | [ CONTEXT_ID 2, | | 1602 | PARENT_CONTEXT_ID 1, | | 1603 | UPLINK(QOS/TUN), | | 1604 | DOWNLINK(QOS/TUN), | | 1605 | IP_PREFIX(HNP) ] ] | | 1606 |<----- OK ----------------| | 1607 | | | 1608 |-CONFIG_BUNDLES(UPDATE)-->| | 1609 | [ CONTEXT_ID 3, | | 1610 | PARENT_CONTEXT_ID(empty),| | 1611 | UPLINK(QOS/TUN), | | 1612 | DOWNLINK(QOS/TUN) ], | | 1613 | [ CONTEXT_ID 4, | | 1614 | PARENT_CONTEXT_ID(empty),| | 1615 | UPLINK(QOS/TUN), | | 1616 | DOWNLINK(QOS/TUN) ] ] | | 1617 |<----- OK ----------------| | 1618 | | | 1620 Figure 23: Exemplary Bundle Message (focus on FPC reference point) 1622 Cloning has the added advantage of reducing the over the wire data 1623 size required to create multiple entities. This can improve 1624 performance if serializaiton / deserialization of multiple entities 1625 incurs some form of performance penalty. 1627 5.2.3.4. Command Bitsets (Optional) 1629 Command Sets permit the ability to provide a single, unified data 1630 structure, e.g. CONTEXT, and specify which activities are expected 1631 to be performed on the DPN. This has some advantages 1633 o Rather than sending N messages with a single operation performed 1634 on the DPN a single message can be used with a Command Set that 1635 specifies the N DPN operations to be executed. 1637 o Errors become more obvious. For example, if the HNP is NOT 1638 provided but the Client did not specify that the HNP should be 1639 assigned by the Agent this error is easily detected. Without the 1640 Command Set the default behavior of the Agent would be to assign 1641 the HNP and then respond back to the Client where the error would 1642 be detected and subsequent messaging would be required to remedy 1643 the error. Such sitations can increase the time to error 1644 detection and overall system load withouth the Command Set 1645 present. 1647 o Unambiguous provisioning specification. The Agent is exactily in 1648 sync with the expectations of the Client as opposed to guessing 1649 what DPN work could be done based upon data present at the Agent. 1650 This greatly increases the speed by which the Agent can complete 1651 work. 1653 o Permits different technologies with different instructions to be 1654 sent in the same message. 1656 As Command Bitsets are technology specfic, e.g. PMIP or 3GPP 1657 Mobility, the type of work varies on the DPN and the amount of data 1658 present in a Context or Port will vary. Using the technology 1659 specific instructions allows the Client to serve multiple 1660 technologies and MAY result in a more statless Client as the 1661 instructions are transferred the Agent which will match the desired, 1662 technology specific instructions with the capabilities and over the 1663 wire protocol of the DPN more efficiently. 1665 5.2.3.5. Reference Scope(Optional) 1667 Although entities MAY refer to any other entity of an appropriate 1668 type, e.g. Contexts can refer to Ports or Contexts, the Reference 1669 Scope gives the Agent an idea of where those references reside. They 1670 may be in the same operation, an operation in the same CONFIG_BUNDLES 1671 message or in storage. There may also be no references. This 1672 permits the Agent to understand when it can stop searching for 1673 reference it cannot find. For example, if a CONFIG_BUNDLES message 1674 uses a Reference Scope of type 'op' then it merely needs to keep an 1675 operation level cache and consume no memory or resources searching 1676 across the many operations in the CONFIG_BUNDLES message or the data 1677 store. 1679 Agents can also be stateless by only supporting the 'none', 'op' and 1680 'bundle' reference scopes. This does not imply they lack storage but 1681 merely the search space they use when looking up references for an 1682 entity. The figure below shows the caching heirarchy provided by the 1683 Reference Scope 1684 Caches are temporarily created at each level and as the scope 1685 includes more caches the amount of entities that are searched 1686 increases. Figure 24 shows an example cache where each Cache where a 1687 containment heirarchy is provided for all caches. 1689 +---------------+ 1690 | Global Cache | 1691 | (storage) | 1692 +------+--------+ 1693 | 1694 +----------------------+ 1695 | | 1696 +------+--------+ +------+--------+ 1697 | Bundle Cache | | Bundle Cache | 1698 | (bundle) | .... | (bundle) | 1699 +------+--------+ +------+--------+ 1700 | 1701 +--------------------+--------------------+ 1702 | | | 1703 +--------+---------+ +--------+---------+ +--------+---------+ 1704 | Operation Cache | | Operation Cache | | Operation Cache | 1705 | (op) | | (op) | | (op) | 1706 +------------------+ +------------------+ +------------------+ 1708 (no cache) 1710 Figure 24: Exemplary Heirarchical Cache 1712 5.2.4. Pre-provisioning 1714 Although Contexts are used for Session based lifecycle elements, 1715 Ports may exist outside of a specific lifecycle and represent more 1716 general policies that may affect multiple Contexts (sessions). The 1717 use of pre-provisioning of Ports permits policy and administrative 1718 use cases to be exected. For example, creating tunnels to forward 1719 traffic to a trouble management platform and dropping packets to a 1720 defective web server can be accomplished via provisioning of Ports. 1722 The figure below shows a CONFIGURE (1) message used to install a 1723 Policy-group, policy-group1, using a Context set aside for pre- 1724 provisioning on a DPN. 1726 +-------Router--------+ 1727 +-----------+ |+-------+ +---------+| 1728 | FPC | | FPC | | Anchor | 1729 | Client | | Agent | | DPN | 1730 +-----------+ +-------+ +---------+ 1731 | | | 1732 |------CONFIG(CREATE)----->| | 1733 | [ PORT_ID port1, | | 1734 | [ policy-group1 ] ] | | 1735 | [ CONTEXT_ID preprov, | | 1736 | DPN_ID X, | | 1737 | [ port1 ] ] | | 1738 | | | 1740 Figure 25: Exemplary Bundle Message (focus on FPC reference point) 1742 5.2.4.1. Basename Registry Feature (Optional) 1744 The Optional BaseName Registry support feature is provided to permit 1745 Clients and tenants with common scopes, referred to in this 1746 specification as BaseNames, to track the state of provisioned policy 1747 information on an Agent. The registry records the BaseName and 1748 Checkpoint set by a Client. If a new Client attaches to the Agent it 1749 can query the Registry to determine the amount of work that must be 1750 executed to configure the Agent to a BaseName / checkpoint revision. 1751 A State value is also provided in the registry to help Clients 1752 coordinate work on common BaseNames. 1754 6. Protocol Message Details 1756 6.1. Data Structures And Type Assignment 1758 6.1.1. Policy Structures 1759 +--------------+-----------------+----------------------------+ 1760 | Structure | Field | Type | 1761 +--------------+-----------------+----------------------------+ 1762 | ACTION | ACTION_ID | FPC-Identity (Section 4.4) | 1763 | | | | 1764 | ACTION | TYPE | [32, unsigned integer] | 1765 | | | | 1766 | ACTION | VALUE | Type specific | 1767 | | | | 1768 | DESCRIPTOR | DESCRIPTOR_ID | FPC-Identity (Section 4.4) | 1769 | | | | 1770 | DESCRIPTOR | TYPE | [32, unsigned integer] | 1771 | | | | 1772 | DESCRIPTOR | VALUE | Type specific | 1773 | | | | 1774 | POLICY | POLICY_ID | FPC-Identity (Section 4.4) | 1775 | | | | 1776 | POLICY | RULES | *[ RULE ] (See Table 4) | 1777 | | | | 1778 | POLICY-GROUP | POLICY_GROUP_ID | FPC-Identity (Section 4.4) | 1779 | | | | 1780 | POLICY-GROUP | POLICIES | *[ POLICY_ID ] | 1781 +--------------+-----------------+----------------------------+ 1783 Table 3: Action Fields 1785 Policies contain a list of Rules by their order value. Each Rule 1786 contains Descriptors with optional directionality and Actions with 1787 order values that specifies action execution ordering if the Rule has 1788 multiple actions. 1790 Rules consist of the following fields. 1792 +------------------+---------------+--------------------------------+ 1793 | Field | Type | Sub-Fields | 1794 +------------------+---------------+--------------------------------+ 1795 | ORDER | [16, INTEGER] | | 1796 | | | | 1797 | RULE_DESCRIPTORS | *[ | DIRECTION [2, unsigned bits] | 1798 | | DESCRIPTOR_ID | is an ENUMERATION (uplink, | 1799 | | DIRECTION ] | downlink or both). | 1800 | | | | 1801 | RULE_ACTIONS | *[ ACTION_ID | ORDER [8, unsigned integer] | 1802 | | ORDER ] | specifies action execution | 1803 | | | order. | 1804 +------------------+---------------+--------------------------------+ 1806 Table 4: Rule Fields 1808 6.1.2. Mobilty Structures 1810 +----------+----------------------------+ 1811 | Field | Type | 1812 +----------+----------------------------+ 1813 | PORT_ID | FPC-Identity (Section 4.4) | 1814 | | | 1815 | POLICIES | *[ POLICY_GROUP_ID ] | 1816 +----------+----------------------------+ 1818 Table 5: Port Fields 1820 +------------------------+------------------------------------+ 1821 | Field | Type | 1822 +------------------------+------------------------------------+ 1823 | CONTEXT_ID | FPC-Identity (Section 4.4) | 1824 | | | 1825 | PORTS | *[ PORT_ID ] | 1826 | | | 1827 | DPN_GROUP_ID | FPC-Identity (Section 4.4) | 1828 | | | 1829 | DELEGATING IP PREFIXES | *[ IP_PREFIX ] | 1830 | | | 1831 | PARENT_CONTEXT_ID | FPC-Identity (Section 4.4) | 1832 | | | 1833 | UPLINK [NOTE 1] | MOB_FIELDS | 1834 | | | 1835 | DOWNLINK [NOTE 1] | MOB_FIELDS | 1836 | | | 1837 | DPNS [NOTE 2] | *[ DPN_ID DPN_DIRECTION MOB_FIELDS | 1838 | | | 1839 | MOB_FIELDS | All parameters from Table 7 | 1840 +------------------------+------------------------------------+ 1842 Table 6: Context Fields 1844 NOTE 1 - These fields are present when the Agent supports only a 1845 single DPN. 1847 NOTE 2 - This fields is present when the Agent supports multiple 1848 DPNs. 1850 +---------------------------+---------------------+-----------------+ 1851 | Field | Type | Detail | 1852 +---------------------------+---------------------+-----------------+ 1853 | TUN_LOCAL_ADDRESS | IP Address | [NOTE 1] | 1854 | | | | 1855 | TUN_REMOTE_ADDRESS | IP Address | [NOTE 1] | 1856 | | | | 1857 | TUN_MTU | [32, unsigned | | 1858 | | integer] | | 1859 | | | | 1860 | TUN_PAYLOAD_TYPE | [2, bits] | Enumeration: pa | 1861 | | | yload_ipv4(0), | 1862 | | | payload_ipv6(1) | 1863 | | | or payload_dual | 1864 | | | (2). | 1865 | | | | 1866 | TUN_TYPE | [8, unsigned | Enumeration: | 1867 | | integer] | IP-in-IP(0), | 1868 | | | UDP(1), GRE(2) | 1869 | | | and GTP(3). | 1870 | | | | 1871 | TUN_IF | [16, unsigned | Input interface | 1872 | | integer] | index. | 1873 | | | | 1874 | MOBILITY_SPECIFIC_TUN_PAR | [ IETF_PMIP_MOB_PRO | [NOTE 1] | 1875 | AMS | FILE | | | 1876 | | 3GPP_MOB_PROFILE ] | | 1877 | | | | 1878 | NEXTHOP | [ IP Address | MAC | [NOTE 1] | 1879 | | Address | SPI | | | 1880 | | MPLS Label | SID | | | 1881 | | Interface Index ] | | 1882 | | (See Table 19). | | 1883 | | | | 1884 | QOS_PROFILE_PARAMS | [ 3GPP_QOS | | [NOTE 1] | 1885 | | PMIP_QOS ] | | 1886 | | | | 1887 | DPN_SPECIFIC_PARAMS | [ TUN_IF or Varies] | Specifies | 1888 | | | optional node | 1889 | | | specific | 1890 | | | parameters in | 1891 | | | need such as | 1892 | | | if-index, | 1893 | | | tunnel-if- | 1894 | | | number that | 1895 | | | must be unique | 1896 | | | in the DPN. | 1897 | | | | 1898 | VENDOR_SPECIFIC_PARAM | *[ Varies ] | [NOTE 1] | 1899 +---------------------------+---------------------+-----------------+ 1901 NOTE 1 - These parameters are extensible. The Types may be extended 1902 for Field value by future specifications or in the case of Vendor 1903 Specific Attributes by enterprises. 1905 Table 7: Context Downlink/Uplink Field Definitions 1907 6.1.3. Topology Structures 1909 +----------------+------------------------------------+ 1910 | Field | Type | 1911 +----------------+------------------------------------+ 1912 | DPN_ID | FPC-Identity. See Section 4.4 | 1913 | | | 1914 | DPN_NAME | [1024, OCTET STRING] | 1915 | | | 1916 | DPN_GROUPS | * [ FPC-Identity ] See Section 4.4 | 1917 | | | 1918 | NODE_REFERENCE | [1024, OCTET STRING] | 1919 +----------------+------------------------------------+ 1921 Table 8: DPN Fields 1923 +-------------+----------------------+ 1924 | Field | Type | 1925 +-------------+----------------------+ 1926 | DOMAIN_ID | [1024, OCTET STRING] | 1927 | | | 1928 | DOMAIN_NAME | [1024, OCTET STRING] | 1929 | | | 1930 | DOMAIN_TYPE | [1024, OCTET STRING] | 1931 +-------------+----------------------+ 1933 Table 9: Domain Fields 1935 +------------------+------------------------------------------------+ 1936 | Field | Type | 1937 +------------------+------------------------------------------------+ 1938 | DPN_GROUP_ID | FPC-Identity. See Section 4.4 | 1939 | | | 1940 | DATA_PLANE_ROLE | [4, ENUMERATION (data-plane, such as access- | 1941 | | dpn, L2/L3 anchor-dpn.)] | 1942 | | | 1943 | ACCESS_TYPE | [4, ENUMERATION ()ethernet(802.3/11), 3gpp | 1944 | | cellular(S1,RAB)] | 1945 | | | 1946 | MOBILITY_PROFILE | [4, ENUMERATION (ietf-pmip, 3gpp, or new | 1947 | | profile)] | 1948 | | | 1949 | PEER_DPN_GROUPS | * [ DPN_GROUP_ID MOBILITY_PROFILE | 1950 | | REMOTE_ENDPOINT_ADDRESS LOCAL_ENDPOINT_ADDRESS | 1951 | | TUN_MTU DATA_PLANE_ROLE ] | 1952 +------------------+------------------------------------------------+ 1954 Table 10: DPN Groups Fields 1956 6.1.4. Monitors 1957 +------------------+----------------------+-------------------------+ 1958 | Field | Type | Description | 1959 +------------------+----------------------+-------------------------+ 1960 | MONITOR | MONITOR_ID TARGET | | 1961 | | [REPORT_CONFIG] | | 1962 | | | | 1963 | MONITOR_ID | FPC-Identity. See | | 1964 | | Section 4.4 | | 1965 | | | | 1966 | EVENT_TYPE_ID | [8, Event Type ID] | Event Type (unsigned | 1967 | | | integer). | 1968 | | | | 1969 | TARGET | OCTET STRING (See | | 1970 | | Section 4.3.3) | | 1971 | | | | 1972 | REPORT_CONFIG | [8, REPORT-TYPE] | | 1973 | | [TYPE_SPECIFIC_INFO] | | 1974 | | | | 1975 | PERIODIC_CONFIG | [32, period] | report interval (ms). | 1976 | | | | 1977 | THRESHOLD_CONFIG | [32, low] [32, hi] | thresholds (at least | 1978 | | | one value must be | 1979 | | | present) | 1980 | | | | 1981 | SCHEDULED_CONFIG | [32, time] | | 1982 | | | | 1983 | EVENTS_CONFIG | *[EVENT_TYPE_ID] | | 1984 +------------------+----------------------+-------------------------+ 1986 Table 11: Monitor Structures and Attributes 1988 TRIGGERS include but are not limited to the following values: 1990 o Events specified in the Event List of an EVENTS CONFIG 1992 o LOW_THRESHOLD_CROSSED 1994 o HIGH_THRESHOLD_CROSSED 1996 o PERIODIC_REPORT 1998 o SCHEDULED_REPORT 2000 o PROBED 2002 o DEREG_FINAL_VALUE 2004 6.2. Message Attributes 2006 6.2.1. Header 2008 Each operation contains a header with the following fields: 2010 +-------------+------------------------+----------------------------+ 2011 | Field | Type | Messages | 2012 +-------------+------------------------+----------------------------+ 2013 | CLIENT_ID | FPC-Identity (Section | All | 2014 | | 4.4) | | 2015 | | | | 2016 | DELAY | [32, unsigned integer] | All | 2017 | | | | 2018 | OP_ID | [64, unsigned integer] | All | 2019 | | | | 2020 | ADMIN_STATE | [8, admin state] | CONF, CONF_BUNDLES and | 2021 | | | REG_MONITOR | 2022 | | | | 2023 | OP_TYPE | [8, op type] | CONF and CONF_BUNDLES | 2024 +-------------+------------------------+----------------------------+ 2026 Table 12: Message Header Fields 2028 6.2.2. CONF and CONF_BUNDLES Attributes and Notifications 2029 +---------------+-----------------------+---------------------------+ 2030 | Field | Type | Operation Types | 2031 | | | Create(C), Update(U), | 2032 | | | Query(Q) and Delete(D) | 2033 +---------------+-----------------------+---------------------------+ 2034 | SESSION_STATE | [8, session state] | C,U | 2035 | | | | 2036 | COMMAND_SET | FPC Command Bitset. | C,U | 2037 | (1) | See Section 5.1.1.3. | | 2038 | | | | 2039 | CLONES (1) | *[ FPC-Identity FPC- | C,U | 2040 | | Identity ] (Section | | 2041 | | 4.4) | | 2042 | | | | 2043 | PORTS | *[ PORT ] | C,U | 2044 | | | | 2045 | CONTEXTS | *[ CONTEXT [ | C,U | 2046 | | COMMAND_SET (1) ] ] | | 2047 | | | | 2048 | TARGETS | FPC-Identity (Section | Q,D | 2049 | | 4.4) *[DPN_ID] | | 2050 +---------------+-----------------------+---------------------------+ 2052 (1) - Only present if the corresponding feature is supported by the 2053 Agent. 2055 Table 13: CONF and CONF_BUNDLES OP_BODY Fields 2057 +----------+-----------------------+--------------------------------+ 2058 | Field | Type | Operation Types Create(C), | 2059 | | | Update(U), Query(Q) and | 2060 | | | Delete(D) | 2061 +----------+-----------------------+--------------------------------+ 2062 | PORTS | *[ PORT ] | C,U | 2063 | | | | 2064 | CONTEXTS | *[ CONTEXT [ | C,U | 2065 | | COMMAND_SET (1) ] ] | | 2066 | | | | 2067 | TARGETS | *[ FPC-Identity | Q,D | 2068 | | (Section 4.4) | | 2069 | | *[DPN_ID] ] | | 2070 +----------+-----------------------+--------------------------------+ 2072 (1) - Only present if the corresponding feature is supported by the 2073 Agent. 2075 Table 14: Immediate Response RESPONSE_BODY Fields 2077 If an error occurs the following information is returned. 2079 ERROR_TYPE_ID (Unsigned 32) - The identifier of a specific error 2080 type 2082 ERROR_INFORMATION - An OPTIONAL string of no more than 1024 2083 characters. 2085 +-----------------+--------------------+----------------------------+ 2086 | Field | Type | Description | 2087 +-----------------+--------------------+----------------------------+ 2088 | AGENT_ID | FPC-Identity | | 2089 | | (Section 4.4) | | 2090 | | | | 2091 | NOTIFICATION_ID | [32, unsigned | A Notification Identifier | 2092 | | integer] | used to determine | 2093 | | | notification order. | 2094 | | | | 2095 | TIMESTAMP | [32, unsigned | The time that the | 2096 | | integer] | notification occured. | 2097 | | | | 2098 | DATA | *[ OP_ID | | 2099 | | RESPONSE_BODY | | 2100 | | (Table 14) ] | | 2101 +-----------------+--------------------+----------------------------+ 2103 Table 15: CONFIG_RESULT_NOTIFY Asynchronous Notification Fields 2105 6.2.3. Monitors 2107 +-----------------+---------------------+---------------------------+ 2108 | Field | Type | Description | 2109 +-----------------+---------------------+---------------------------+ 2110 | NOTIFICATION_ID | [32, unsiged | | 2111 | | integer] | | 2112 | | | | 2113 | TRIGGER | [32, unsigned | | 2114 | | integer] | | 2115 | | | | 2116 | NOTIFY | NOTIFICATION_ID | Timestamp notes when the | 2117 | | MONITOR_ID TRIGGER | event occurred. | 2118 | | [32, timestamp] | Notification Data is | 2119 | | [NOTIFICATION_DATA] | TRIGGER and Monitor type | 2120 | | | specific. | 2121 +-----------------+---------------------+---------------------------+ 2123 Table 16: Monitor Notifications 2125 7. Derived and Subtyped Attributes 2127 This section notes derived attributes. 2129 +------------------+-------+---------------+------------------------+ 2130 | Field | Type | Type | Description | 2131 | | Value | | | 2132 +------------------+-------+---------------+------------------------+ 2133 | TO_PREFIX | 0 | [IP Address] | Aggregated or per-host | 2134 | | | [ Prefix Len | destination IP | 2135 | | | ] | address/prefix | 2136 | | | | descriptor. | 2137 | | | | | 2138 | FROM_PREFIX | 1 | [IP Address] | Aggregated or per-host | 2139 | | | [ Prefix Len | source IP | 2140 | | | ] | address/prefix | 2141 | | | | descriptor. | 2142 | | | | | 2143 | TRAFFIC_SELECTOR | 2 | Format per | Traffic Selector. | 2144 | | | specification | | 2145 | | | [RFC6088]. | | 2146 +------------------+-------+---------------+------------------------+ 2148 Table 17: Descriptor Subtypes 2150 +--------------+-------+---------------------+----------------------+ 2151 | Field | Type | Type | Description | 2152 | | Value | | | 2153 +--------------+-------+---------------------+----------------------+ 2154 | DROP | 0 | Empty | Drop the associated | 2155 | | | | packets. | 2156 | | | | | 2157 | REWRITE | 1 | [in_src_ip] | Rewrite IP Address | 2158 | | | [out_src_ip] | (NAT) or IP Address | 2159 | | | [in_dst_ip] | / Port (NAPT). | 2160 | | | [out_dst_ip] | | 2161 | | | [in_src_port] | | 2162 | | | [out_src_port] | | 2163 | | | [in_dst_port] | | 2164 | | | [out_dst_port] | | 2165 | | | | | 2166 | COPY_FORWARD | 2 | FPC-Identity. See | Copy all packets and | 2167 | | | Section 4.4. | forward them to the | 2168 | | | | provided identity. | 2169 | | | | The value of the | 2170 | | | | identity MUST be a | 2171 | | | | port or context. | 2172 +--------------+-------+---------------------+----------------------+ 2174 Table 18: Action Subtypes 2176 +-----------------+-------+-------------------+---------------------+ 2177 | Field | Type | Type | Description | 2178 | | Value | | | 2179 +-----------------+-------+-------------------+---------------------+ 2180 | IP_ADDR | 0 | IP Address | An IP Address. | 2181 | | | | | 2182 | MAC_ADDR | 1 | MAC Address | A MAC Address. | 2183 | | | | | 2184 | SERVICE_PATH_ID | 2 | [24, unsigned | Service Path | 2185 | | | integer] | Identifier (SPI) | 2186 | | | | | 2187 | MPLS_LABEL | 3 | [20, unsigned | MPLS Label | 2188 | | | integer] | | 2189 | | | | | 2190 | NSH | 4 | [SERVICE_PATH_ID] | Included NSH which | 2191 | | | [8, unsigned | is a SPI and | 2192 | | | integer] | Service Index (8 | 2193 | | | | bits). | 2194 | | | | | 2195 | INTERFACE_INDEX | 5 | [16, unsigned | Interface Index (an | 2196 | | | integer] | unsigned integer). | 2197 +-----------------+-------+-------------------+---------------------+ 2199 Table 19: Next Hop Subtypes 2201 +----------+-------+------------------+-----------------------------+ 2202 | Field | Type | Type | Description | 2203 | | Value | | | 2204 +----------+-------+------------------+-----------------------------+ 2205 | QOS | 0 | [qos index type] | Refers to a single index | 2206 | | | [index] [DSCP] | and DSCP to write to the | 2207 | | | | packet. | 2208 | | | | | 2209 | GBR | 1 | [32, unsigned | Guaranteed bit rate. | 2210 | | | integer] | | 2211 | | | | | 2212 | MBR | 2 | [32, unsigned | Maximum bit rate. | 2213 | | | integer] | | 2214 | | | | | 2215 | PMIP_QOS | 3 | Varies by Type | A non-traffic selector PMIP | 2216 | | | | QoS Attribute per [RFC7222] | 2217 +----------+-------+------------------+-----------------------------+ 2219 Table 20: QoS Subtypes 2221 +----------+---------+----------------+-----------------------------+ 2222 | Field | Type | Type | Description | 2223 | | Value | | | 2224 +----------+---------+----------------+-----------------------------+ 2225 | IPIP_TUN | 0 | | IP in IP Configuration | 2226 | | | | | 2227 | UDP_TUN | 1 | [src_port] | UDP Tunnel - source and/or | 2228 | | | [dst_port] | destination port | 2229 | | | | | 2230 | GRE_TUN | 2 | [32, GRE Key] | GRE Tunnel. | 2231 +----------+---------+----------------+-----------------------------+ 2233 Table 21: Tunnel Subtypes 2235 The following COMMAND_SET values are supported for IETF_PMIP. 2237 o assign-ip - Assign the IP Address for the mobile session. 2239 o assign-dpn - Assign the Dataplane Node. 2241 o session - Assign values for the Session Level. 2243 o uplink - Command applies to uplink. 2245 o downlink - Command applies to downlink. 2247 7.1. 3GPP Specific Extenstions 2249 3GPP support is optional and detailed in this section. The following 2250 acronyms are used: 2252 APN-AMBR: Access Point Name Aggregate Maximum Bit Rate 2254 ARP: Allocation of Retention Priority 2256 EBI: EPS Bearer Identity 2258 GBR: Guaranteed Bit Rate 2260 GTP: GPRS (General Packet Radio Service) Tunneling Protocol 2262 IMSI: International Mobile Subscriber Identity 2264 MBR: Maximum Bit Rate 2266 QCI: QoS Class Identifier 2268 TEID: Tunnel Endpoint Identifier. 2270 TFT: Traffic Flow Template (TFT) 2272 UE-AMBR: User Equipment Aggregate Maximum Bit Rate 2274 NOTE: GTP Sequence Number (SEQ_NUMBER) is used in failover and 2275 handover. 2277 +-------------+-------+-------------+-------------------------------+ 2278 | Field | Type | Namespace / | Type | 2279 | | Value | Entity | | 2280 | | | Extended | | 2281 +-------------+-------+-------------+-------------------------------+ 2282 | GTPV1 | 3 | Tunnel | LOCAL_TEID REMOTE_TEID | 2283 | | | Subtypes | SEQ_NUMBER | 2284 | | | namespace. | | 2285 | | | | | 2286 | GTPV2 | 4 | Tunnel | LOCAL_TEID REMOTE_TEID | 2287 | | | Subtypes | SEQ_NUMBER | 2288 | | | namespace. | | 2289 | | | | | 2290 | LOCAL_TEID | N/A | N/A | [32, unisgned integer] | 2291 | | | | | 2292 | REMOTE_TEID | N/A | N/A | [32, unisgned integer] | 2293 | | | | | 2294 | SEQ_NUMBER | N/A | N/A | [32, unisgned integer] | 2295 | | | | | 2296 | TFT | 3 | Descriptors | Format per TS 24.008 Section | 2297 | | | Subtypes | 10.5.6.12. | 2298 | | | namespace. | | 2299 | | | | | 2300 | IMSI | N/A | Context | [64, unsigned integer] | 2301 | | | (new | | 2302 | | | attribute) | | 2303 | | | | | 2304 | EBI | N/A | Context | [4, unsigned integer] | 2305 | | | (new | | 2306 | | | attribute) | | 2307 | | | | | 2308 | 3GPP_QOS | 4 | QoS | [8, qci] [32, gbr] [32, mbr] | 2309 | | | Subtypes | [32, apn_ambr] [32, ue_ambr] | 2310 | | | namespace. | ARP | 2311 | | | | | 2312 | ARP | N/A | N/A | See Allocation-Retention- | 2313 | | | | Priority from [RFC7222] | 2314 +-------------+-------+-------------+-------------------------------+ 2316 Table 22: 3GPP Attributes and Structures 2318 The following COMMAND_SET values are supported for 3GPP. 2320 o assign-ip - Assign the IP Address for the mobile session. 2322 o assign-dpn - Assign the Dataplane Node. 2324 o assign-fteid-ip - Assign the Fully Qualified TEID (F-TEID) LOCAL 2325 IP address. 2327 o assign-fteid-teid - Assign the Fully Qualified TEID (F-TEID) LOCAL 2328 TEID. 2330 o session - Assign values for the Session Level. When this involves 2331 'assign-fteid-ip' and 'assign-fteid-teid' this implies the values 2332 are part of the default bearer. 2334 o uplink - Command applies to uplink. 2336 o downlink - Comman applies to downlink. 2338 8. Implementation Status 2340 Two FPC Agent implementations have been made to date. The first was 2341 based upon Version 03 of the draft and followed Model 1. The second 2342 follows Version 04 of the document. Both implementations were 2343 OpenDaylight plug-ins developed in Java by Sprint. Version 03 was 2344 known as fpcagent and version 04's implementation is simply referred 2345 to as 'fpc'. 2347 fpcagent's intent was to provide a proof of concept for FPC Version 2348 03 Model 1 in January 2016 and research various optimiziations, 2349 errors, corrections and optimizations that the Agent could make when 2350 supporting multiple DPNs. 2352 As the code developed to support OpenFlow and a proprietary DPN from 2353 a 3rd party, several of the advantages of a multi-DPN Agent became 2354 obvious including the use of machine learning to reduce the number of 2355 Flows and Policy entities placed on the DPN. This work has driven 2356 new efforts in the DIME WG, namely Diameter Policy Groups 2357 [I-D.bertz-dime-policygroups]. 2359 A throughput performance of tens per second using various NetConf 2360 based solutions in OpenDaylight made fpcagent undesirable for call 2361 processing. The RPC implementration improved throughput by an order 2362 of magnitude but was not useful based upon FPC's Version 03 design 2363 using either model. During this time the features of version 04 and 2364 its converged model became attractive and teh fpcagent project was 2365 closed in August 2016. fpcagent will no longer be developed and will 2366 remain a proprietary implemenation. 2368 The learnings of fpcagent has influenced the second project, fpc. 2369 Fpc is also an OpenDaylight project but is intended for open source 2370 release, if circumstances permit. It is also scoped to be a fully 2371 compliant FPC Agent that supports multiple DPNs including those that 2372 communicate via OpenFlow. The following features present in this 2373 draft and developed by the FPC co-authors have already lead to an 2374 order of magnitude improvement. 2376 Migration of non-realtime provisioning of entities such as 2377 topology and policy allowed the implementation to focus only on 2378 the rpc. 2380 Using only 5 messages and 2 notifications has also reduced 2381 implementation time. As of this writing the project is 4 weeks 2382 old and currently supports CONFIGURE and CONFIGURE_BUNDLES based 2383 upon the effort of 3 part time engineers. 2385 Command Sets, an optional feature in this specfication, have 2386 eliminated 80% of the time spent determining what needs to be 2387 done with a Context during a Create or Update operation. 2389 The addition of the DPN List in a Context Delete operation 2390 permits the Agent to avoid lookups of Context data in the Cache 2391 entirely. For 3GPP support, extra attributes are required in the 2392 Delete to avoid any cache lookup. 2394 Op Reference is an optional feature modeled after video delivery. 2395 It has reduced unnecessary cache lookups. It also has the 2396 additional benefit of allowing an Agent to become cacheless and 2397 effectively act as a FPC protocol adapater remotely with multi- 2398 DPN support or colocated on the DPN in a single-DPN support 2399 model. 2401 Multi-tenant support allows for Cache searches to be partitioned 2402 for clustering and perforamnce improvements. This has not been 2403 capitalized upon by the current implementation but is part of the 2404 development roadmap. 2406 Use of Contexts to pre-provision policy has also eliminated any 2407 processing of Ports for DPNs which permitted the code for 2408 CONFIGURE and CONFIGURE_BUNDLES to be implemented as a simple 2409 nested FOR loops (see below). 2411 Current performance results without code optimizations or tuning 2412 allow 2-5K FPC Contexts processed per second on a Mac laptop sourced 2413 in 2013. This results in 2x the number of transactions on the 2414 southbound interface to a proprietary DPN API on the same machine. 2416 fpc currently supports the following after 3 weeks of development by 2417 two part time engineers: 2419 1 proprietary DPN API 2421 Policy and Topology as defined in this 2422 specification using OpenDaylight North Bound 2423 Interfaces such as NetConf and RestConf 2425 CONFIGURE and CONFIGURE_BUNDLES (all 2426 operations) 2428 DPN assignment, Tunnel allocations and IPv4 2429 address assignment by the Agent or Client. 2431 Immediate Response is always an 2432 OK_NOTIFY_FOLLOWS. 2434 assignment system (receives rpc call): 2435 perform basic operation integrity check 2436 if CONFIGURE then 2437 goto assignments 2438 if assignments was ok then 2439 send request to activation system 2440 respond back to client with assignment data 2441 else 2442 send back error 2443 end if 2444 else if CONFIGURE_BUNDLES then 2445 for each operation in bundles 2446 goto assignments 2447 if assignments was ok then 2448 hold onto data 2449 else 2450 return error with the assignments that occurred in 2451 prior operations (best effort) 2452 end if 2453 end for 2454 send bundles to activation systems 2455 end if 2457 assignments: 2458 assign DPN, IPv4 Address and/or tunnel info as requried 2459 if an error occurs undo all assigments in this operation 2460 return result 2462 activation system: 2463 build cache according to op-ref and operation type 2464 for each operation 2465 for each Context 2466 for each DPN / direction in Context 2467 perform actions on DPN according to Command Set 2468 end for 2469 end for 2470 end for 2471 commit changes to in memory cache 2472 log transaction for tracking and nofication (CONFIG_RESULT_NOTIFY) 2474 Figure 26: fpc pseudo code 2476 As of this writing (Sept 2016) the implementation is 3 weeks old an 2477 considered pre-alpha. It is scheduled to be conformant to all FPC 2478 version 04 aspects within 60 days. 2480 For further information please contact Lyle Bertz who is also a co- 2481 author of this document. 2483 NOTE: Tenant support requires binding a Client ID to a Tenant ID (it 2484 is a one to many relation) but that is outside of the scope of this 2485 specification. Otherwise, the specification is complete in terms of 2486 providing sufficient information to implement an Agent. 2488 9. Security Considerations 2490 Detailed protocol implementations for DMM Forwarding Policy 2491 Configuration must ensure integrity of the information exchanged 2492 between an FPC Client and an FPC Agent. Required Security 2493 Associations may be derived from co-located functions, which utilize 2494 the FPC Client and FPC Agent respectively. 2496 10. IANA Considerations 2498 This document provides a data model and protocol operation for DMM 2499 Forwarding Policy Configuration. YANG models are currently included 2500 in the Appendix and will be updated per the next revision of this 2501 document to specify the data model as well as to enable an 2502 implementation of the FPC protocol using RPC. 2504 No actions from IANA are required. In case the semantics of this 2505 specification will be mapped to a particular wire protocol, authors 2506 of an associated separate document will approach IANA for the 2507 associated action to create a registry or add registry entries. 2509 11. Work Team Participants 2511 Participants in the FPSM work team discussion include Satoru 2512 Matsushima, Danny Moses, Sri Gundavelli, Marco Liebsch, Pierrick 2513 Seite, Alper Yegin, Carlos Bernardos, Charles Perkins and Fred 2514 Templin. 2516 12. References 2518 12.1. Normative References 2520 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2521 Requirement Levels", BCP 14, RFC 2119, 2522 DOI 10.17487/RFC2119, March 1997, 2523 . 2525 [RFC6088] Tsirtsis, G., Giarreta, G., Soliman, H., and N. Montavont, 2526 "Traffic Selectors for Flow Bindings", RFC 6088, 2527 DOI 10.17487/RFC6088, January 2011, 2528 . 2530 [RFC6089] Tsirtsis, G., Soliman, H., Montavont, N., Giaretta, G., 2531 and K. Kuladinithi, "Flow Bindings in Mobile IPv6 and 2532 Network Mobility (NEMO) Basic Support", RFC 6089, 2533 DOI 10.17487/RFC6089, January 2011, 2534 . 2536 [RFC7333] Chan, H., Ed., Liu, D., Seite, P., Yokota, H., and J. 2537 Korhonen, "Requirements for Distributed Mobility 2538 Management", RFC 7333, DOI 10.17487/RFC7333, August 2014, 2539 . 2541 12.2. Informative References 2543 [I-D.bertz-dime-policygroups] 2544 Bertz, L., "Diameter Policy Groups and Sets", draft-bertz- 2545 dime-policygroups-01 (work in progress), July 2016. 2547 [I-D.ietf-dmm-deployment-models] 2548 Gundavelli, S. and S. Jeon, "DMM Deployment Models and 2549 Architectural Considerations", draft-ietf-dmm-deployment- 2550 models-00 (work in progress), August 2016. 2552 [I-D.ietf-netconf-restconf] 2553 Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 2554 Protocol", draft-ietf-netconf-restconf-16 (work in 2555 progress), August 2016. 2557 [RFC5213] Gundavelli, S., Ed., Leung, K., Devarapalli, V., 2558 Chowdhury, K., and B. Patil, "Proxy Mobile IPv6", 2559 RFC 5213, DOI 10.17487/RFC5213, August 2008, 2560 . 2562 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 2563 and A. Bierman, Ed., "Network Configuration Protocol 2564 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 2565 . 2567 [RFC7222] Liebsch, M., Seite, P., Yokota, H., Korhonen, J., and S. 2568 Gundavelli, "Quality-of-Service Option for Proxy Mobile 2569 IPv6", RFC 7222, DOI 10.17487/RFC7222, May 2014, 2570 . 2572 Appendix A. YANG Data Model for the FPC protocol 2574 These modules define YANG definitions. Seven modules are defined: 2576 o ietf-dmm-fpcbase (fpcbase) - Defines the base model for model as 2577 defined in this document 2579 o ietf-dmm-fpcagent (fpcagent) - Defines the FPC Agent entites and 2580 messages as defined in this document 2582 o ietf-pmip-qos (pmip-qos) - Defines proxy mobile IPv6 QoS 2583 parameters per RFC 7222 2585 o ietf-traffic-selectors-types (traffic-selectors) - Defines Traffic 2586 Selectors per RFC 6088 2588 o ietf-dmm-threegpp - Defines the base structures for 3GPP based IP 2589 mobility and augments fpcagent to support these parameters. 2591 o ietf-dmm-fpc-pmip - Augments fpcp-base to include PMIP Traffic 2592 Selectors as a Traffic Descriptor subtype and pmip-qos QoS 2593 parameters, where applicable, as properties. 2595 o ietf-dmm-fpc-policyext - defines basic policy extensions, e.g. 2596 Actions and Descriptors, to fpcbase and as defined in this 2597 document. 2599 A.1. YANG Models 2601 A.1.1. FPC Base YANG Model 2603 module ietf-dmm-fpcbase { 2604 namespace "urn:ietf:params:xml:ns:yang:fpcbase"; 2605 prefix fpcbase; 2607 import ietf-inet-types { prefix inet; revision-date 2013-07-15; } 2609 organization "IETF DMM Working Group"; 2610 contact "Satoru Matsushima "; 2612 description 2613 "This module contains YANG definition for 2614 Forwarding Policy Configuration Protocol.(FPCP)"; 2616 revision 2016-08-03 { 2617 description "Changes based on -04 version of FPC draft."; 2618 reference "draft-ietf-dmm-fpc-cpdp-04"; 2619 } 2620 feature fpc-basic-agent { 2621 description "This is an agent co-located with a DPN. In this case 2622 only DPN Peer Groups, the DPN Id and Control Protocols are exposed 2623 along with the core structures."; 2624 } 2625 feature fpc-multi-dpn { 2626 description "The agent supports multiple DPNs."; 2627 } 2629 typedef fpc-identity { 2630 type union { 2631 type uint32; 2632 type string; 2633 type instance-identifier; 2634 } 2635 } 2637 grouping target-value { 2638 leaf target { 2639 type fpc-identity; 2640 } 2641 } 2643 grouping targets-value { 2644 list targets { 2645 key "target"; 2646 leaf target { 2647 type fpc-identity; 2648 } 2649 leaf dpn-id { 2650 type fpcbase:fpc-dpn-id; 2651 } 2652 } 2653 } 2655 // Descriptor Structure 2656 typedef fpc-descriptor-id-type { 2657 type fpcbase:fpc-identity; 2658 description "Descriptor-ID"; 2659 } 2660 identity fpc-descriptor-type { 2661 description "A traffic descriptor"; 2662 } 2663 grouping fpc-descriptor-id { 2664 leaf descriptor-id { 2665 type fpcbase:fpc-identity; 2666 } 2667 } 2668 grouping fpc-descriptor { 2669 uses fpcbase:fpc-descriptor-id; 2670 leaf descriptor-type { 2671 mandatory true; 2672 type identityref { 2673 base "fpc-descriptor-type"; 2674 } 2675 description "Descriptor Type"; 2676 } 2677 choice descriptor-value { 2678 case all-traffic { 2679 leaf all-traffic { 2680 type empty; 2681 } 2682 } 2683 } 2684 } 2686 // Action Structure 2687 typedef fpc-action-id-type { 2688 type fpcbase:fpc-identity; 2689 description "Action-ID"; 2690 } 2691 identity fpc-action-type { 2692 description "Action Type"; 2693 } 2694 grouping fpc-action-id { 2695 leaf action-id { 2696 type fpcbase:fpc-action-id-type; 2697 } 2698 } 2699 grouping fpc-action { 2700 uses fpcbase:fpc-action-id; 2701 leaf action-type { 2702 mandatory true; 2703 type identityref { 2704 base "fpc-action-type"; 2705 } 2706 description "Action Type"; 2707 } 2708 choice action-value { 2709 case drop { 2710 leaf drop { 2711 type empty; 2712 } 2713 } 2714 } 2715 } 2716 // Rule Structure 2717 grouping fpc-rule { 2718 description 2719 "FPC Rule. When no actions are present the action is DROP. 2720 When no Descriptors are empty the default is 'all traffic'."; 2721 list descriptors { 2722 key descriptor-id; 2723 uses fpcbase:fpc-descriptor-id; 2724 leaf direction { 2725 type fpc-direction; 2726 } 2727 } 2728 list actions { 2729 key action-id; 2730 leaf order { 2731 type uint32; 2732 } 2733 uses fpcbase:fpc-action-id; 2734 } 2735 } 2737 // Policy Structures 2738 typedef fpc-policy-id { 2739 type fpcbase:fpc-identity; 2740 } 2741 grouping fpc-policy { 2742 leaf policy-id { 2743 type fpcbase:fpc-policy-id; 2744 } 2745 list rules { 2746 key order; 2747 leaf order { 2748 type uint32; 2749 } 2750 uses fpcbase:fpc-rule; 2751 } 2752 } 2754 // Policy Group 2755 typedef fpc-policy-group-id { 2756 type fpcbase:fpc-identity; 2757 } 2758 grouping fpc-policy-group { 2759 leaf policy-group-id { 2760 type fpcbase:fpc-policy-group-id; 2761 } 2762 leaf-list policies { 2763 type fpcbase:fpc-policy-id; 2765 } 2766 } 2768 // Mobility Structures 2769 // Port Group 2770 typedef fpc-port-id { 2771 type fpcbase:fpc-identity; 2772 } 2773 grouping fpc-port { 2774 leaf port-id { 2775 type fpcbase:fpc-port-id; 2776 } 2777 leaf-list policy-groups { 2778 type fpcbase:fpc-policy-group-id; 2779 } 2780 } 2782 // Context Group 2783 typedef fpc-context-id { 2784 type fpcbase:fpc-identity; 2785 } 2786 grouping fpc-context-profile { 2787 description "A profile that applies to a specific direction"; 2788 leaf tunnel-local-address { 2789 type inet:ip-address; 2790 description "Uplink endpoint address of the DPN which agent exists."; 2791 } 2792 leaf tunnel-remote-address { 2793 type inet:ip-address; 2794 description "Uplink endpoint address of the DPN which agent exists."; 2795 } 2796 leaf tunnel-mtu-size { 2797 type uint32; 2798 description "Tunnel MTU size"; 2799 } 2800 container mobility-tunnel-parameters { 2801 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."; 2802 uses fpcbase:mobility-info; 2803 } 2804 container nexthop { 2805 uses fpcbase:fpc-nexthop; 2806 } 2807 container qos-profile-parameters { 2808 uses fpcbase:fpc-qos-profile; 2809 } 2810 container dpn-parameters { 2811 } 2812 list vendor-parameters { 2813 key "vendor-id vendor-type"; 2814 uses fpcbase:vendor-attributes; 2815 } 2816 } 2818 typedef fpc-direction { 2819 type enumeration { 2820 enum uplink; 2821 enum downlink; 2822 } 2823 } 2825 grouping fpc-context { 2826 leaf context-id { 2827 type fpcbase:fpc-context-id; 2828 } 2829 leaf-list ports { 2830 type fpcbase:fpc-port-id; 2831 } 2832 leaf dpn-group { 2833 type fpcbase:fpc-dpn-group-id; 2834 } 2835 leaf-list delegating-ip-prefixes { 2836 type inet:ip-prefix; 2837 } 2838 container ul { 2839 if-feature fpcbase:fpc-basic-agent; 2840 uses fpcbase:fpc-context-profile; 2841 } 2842 container dl { 2843 if-feature fpcbase:fpc-basic-agent; 2844 uses fpcbase:fpc-context-profile; 2845 } 2846 list dpns { 2847 if-feature fpcbase:fpc-multi-dpn; 2848 key "dpn-id direction"; 2849 leaf dpn-id { 2850 type fpcbase:fpc-dpn-id; 2851 } 2852 leaf direction { 2853 mandatory true; 2854 type fpcbase:fpc-direction; 2855 } 2856 uses fpcbase:fpc-context-profile; 2857 } 2858 leaf parent-context { 2859 type fpcbase:fpc-context-id; 2860 } 2862 } 2864 // Mobility (Tunnel) Information 2865 grouping mobility-info { 2866 choice profile-parameters { 2867 case nothing { 2868 leaf none { 2869 type empty; 2870 } 2871 } 2872 } 2873 } 2875 // Next Hop Structures 2876 typedef fpcp-service-path-id { 2877 type uint32 { 2878 range "0..33554431"; 2879 } 2880 description "SERVICE_PATH_ID"; 2881 } 2883 identity fpc-nexthop-type { 2884 description "Next Hop Type"; 2885 } 2886 identity fpc-nexthop-ip { 2887 base "fpcbase:fpc-nexthop-type"; 2888 } 2889 identity fpc-nexthop-servicepath { 2890 base "fpcbase:fpc-nexthop-type"; 2891 } 2892 grouping fpc-nexthop { 2893 leaf nexthop-type { 2894 type identityref { 2895 base "fpcbase:fpc-nexthop-type"; 2896 } 2897 } 2898 choice nexthop-value { 2899 case ip { 2900 leaf ip { 2901 type inet:ip-address; 2902 } 2903 } 2904 case servicepath { 2905 leaf servicepath { 2906 type fpcbase:fpcp-service-path-id; 2907 } 2908 } 2909 } 2911 } 2913 // QoS Information 2914 identity fpc-qos-type { 2915 description "Base identity from which specific uses of QoS types are derived."; 2916 } 2917 grouping fpc-qos-profile { 2918 leaf qos-type { 2919 type identityref { 2920 base fpcbase:fpc-qos-type; 2921 } 2922 description "the profile type"; 2923 } 2924 choice value { 2925 } 2926 } 2928 // Vendor Specific Attributes 2929 identity vendor-specific-type { 2930 description "Vendor Specific Attribute Type"; 2931 } 2932 grouping vendor-attributes { 2933 leaf vendor-id { 2934 type fpcbase:fpc-identity; 2935 } 2936 leaf vendor-type { 2937 type identityref { 2938 base "fpcbase:vendor-specific-type"; 2939 } 2940 } 2941 choice value { 2942 case empty-type { 2943 leaf empty-type { 2944 type empty; 2945 } 2946 } 2947 } 2948 } 2950 // Topology 2951 typedef fpc-domain-id { 2952 type fpcbase:fpc-identity; 2953 } 2954 grouping fpc-domain { 2955 leaf domain-id { 2956 type fpcbase:fpc-domain-id; 2957 } 2958 leaf domain-name { 2959 type string; 2960 } 2961 leaf domain-type { 2962 type string; 2963 } 2964 } 2966 typedef fpc-dpn-id { 2967 type fpcbase:fpc-identity; 2968 description "DPN Identifier"; 2969 } 2970 identity fpc-dpn-control-protocol { 2971 description "DPN Control Protocol"; 2972 } 2973 grouping fpc-dpn { 2974 leaf dpn-id { 2975 type fpcbase:fpc-dpn-id; 2976 } 2977 leaf dpn-name { 2978 type string; 2979 } 2980 leaf-list dpn-groups { 2981 type fpcbase:fpc-dpn-group-id; 2982 } 2983 leaf node-reference { 2984 type instance-identifier; 2985 } 2986 } 2988 typedef fpc-dpn-group-id { 2989 type fpcbase:fpc-identity; 2990 description "DPN Group Identifier"; 2991 } 2992 identity fpc-forwaridingplane-role { 2993 description "Role of DPN Group in the Forwarding Plane"; 2994 } 2995 identity fpc-access-type { 2996 description "Access Type of the DPN Group"; 2997 } 2998 identity fpc-mobility-profile-type { 2999 description "Mobility Profile Type"; 3000 } 3002 grouping fpc-dpn-peer-group { 3003 leaf remote-dpn-group-id { 3004 type fpcbase:fpc-dpn-group-id; 3005 } 3006 leaf remote-mobility-profile { 3007 type identityref { 3008 base "fpcbase:fpc-mobility-profile-type"; 3009 } 3010 } 3011 leaf remote-data-plane-role { 3012 type identityref { 3013 base "fpcbase:fpc-forwaridingplane-role"; 3014 } 3015 } 3016 leaf remote-endpoint-address { 3017 type inet:ip-address; 3018 } 3019 leaf local-endpoint-address { 3020 type inet:ip-address; 3021 } 3022 leaf tunnel-mtu-size { 3023 type uint32; 3024 } 3025 } 3027 // Events, Probes & Notifications 3028 identity event-type { 3029 description "Base Event Type"; 3030 } 3032 typedef event-type-id { 3033 type uint32; 3034 } 3036 grouping monitor-id { 3037 leaf monitor-id { 3038 type fpcbase:fpc-identity; 3039 } 3040 } 3042 identity report-type { 3043 description "Type of Report"; 3044 } 3045 identity periodic-report { 3046 base "fpcbase:report-type"; 3047 } 3048 identity threshold-report { 3049 base "fpcbase:report-type"; 3050 } 3051 identity scheduled-report { 3052 base "fpcbase:report-type"; 3053 } 3054 identity events-report { 3055 base "fpcbase:report-type"; 3056 } 3058 grouping report-config { 3059 choice event-config-value { 3060 case periodic-config { 3061 leaf period { 3062 type uint32; 3063 } 3064 } 3065 case threshold-config { 3066 leaf lo-thresh { 3067 type uint32; 3068 } 3069 leaf hi-thresh { 3070 type uint32; 3071 } 3072 } 3073 case scheduled-config { 3074 leaf report-time { 3075 type uint32; 3076 } 3077 } 3078 case events-config-ident { 3079 leaf-list event-identities { 3080 type identityref { 3081 base "fpcbase:event-type"; 3082 } 3083 } 3084 } 3085 case events-config { 3086 leaf-list event-ids { 3087 type uint32; 3088 } 3089 } 3090 } 3091 } 3093 grouping monitor-config { 3094 uses fpcbase:monitor-id; 3095 uses fpcbase:target-value; 3096 uses fpcbase:report-config; 3097 } 3099 grouping report { 3100 uses fpcbase:monitor-config; 3101 choice report-value { 3102 leaf trigger { 3103 type fpcbase:event-type-id; 3104 } 3105 case simple-empty { 3106 leaf nothing { 3107 type empty; 3108 } 3109 } 3110 case simple-val32 { 3111 leaf val32 { 3112 type uint32; 3113 } 3114 } 3115 } 3116 } 3117 } 3119 Figure 27: FPC YANG base 3121 A.1.2. FPC Agent YANG Model 3123 module ietf-dmm-fpcagent { 3124 namespace "urn:ietf:params:xml:ns:yang:fpcagent"; 3125 prefix fpcagent; 3127 import ietf-dmm-fpcbase { prefix fpcbase; revision-date 2016-08-03; } 3128 import ietf-inet-types { prefix inet; revision-date 2013-07-15; } 3130 organization "IETF DMM Working Group"; 3131 contact "Satoru Matsushima "; 3133 description 3134 "This module contains YANG definition for 3135 Forwarding Policy Configuration Protocol.(FPCP)"; 3137 revision 2016-08-03 { 3138 description "Changes based on -04 version of FPC draft."; 3139 reference "draft-ietf-dmm-fpc-cpdp-04"; 3140 } 3141 feature fpc-cloning { 3142 description "An ability to support cloning in the RPC."; 3143 } 3144 feature fpc-basename-registry { 3145 description "Ability to track Base Names already provisioned on the Agent"; 3146 } 3147 feature fpc-bundles { 3148 description "Ability for Client to send multiple bundles of actions to 3149 an Agent"; 3151 } 3152 feature fpc-client-binding { 3153 description "Allows a FPC Client to bind a DPN to an Topology Object"; 3154 } 3155 feature fpc-auto-binding { 3156 description "Allows a FPC Agent to advertise Topology Objects that could be DPNs"; 3157 } 3158 feature instruction-bitset { 3159 description "Allows the expression of instructions (bit sets) over FPC."; 3160 } 3161 feature operation-ref-scope { 3162 description "Provides the scope of refeneces in an operation. Used to optmize 3163 the Agent processing."; 3164 } 3166 typedef agent-identifier { 3167 type fpcbase:fpc-identity; 3168 } 3170 typedef client-identifier { 3171 type fpcbase:fpc-identity; 3172 } 3174 grouping basename-info { 3175 leaf basename { 3176 if-feature fpcagent:fpc-basename-registry; 3177 description "Rules Basename"; 3178 type fpcbase:fpc-identity; 3179 } 3180 leaf base-state { 3181 if-feature fpcagent:fpc-basename-registry; 3182 type string; 3183 } 3184 leaf base-checkpoint { 3185 if-feature fpcagent:fpc-basename-registry; 3186 type string; 3187 } 3188 } 3190 // Top Level Structures 3191 container tenants { 3192 description ""; 3194 list tenant { 3195 description ""; 3196 key "tenant-id"; 3197 leaf tenant-id { 3198 type fpcbase:fpc-identity; 3200 } 3202 container fpc-policy { 3203 list policy-groups { 3204 key "policy-group-id"; 3205 uses fpcbase:fpc-policy-group; 3206 } 3207 list policies { 3208 key "policy-id"; 3209 uses fpcbase:fpc-policy; 3210 } 3211 list descriptors { 3212 key descriptor-id; 3213 uses fpcbase:fpc-descriptor; 3214 } 3215 list actions { 3216 key action-id; 3217 uses fpcbase:fpc-action; 3218 } 3219 } 3221 container fpc-mobility { 3222 config false; 3223 list contexts { 3224 key context-id; 3225 uses fpcbase:fpc-context; 3226 } 3227 list ports { 3228 key port-id; 3229 uses fpcbase:fpc-port; 3230 } 3231 list monitors { 3232 uses fpcbase:monitor-config; 3233 } 3234 } 3235 container fpc-topology { 3236 // Basic Agent Topology Structures 3237 list domains { 3238 key domain-id; 3239 uses fpcbase:fpc-domain; 3240 uses fpcagent:basename-info; 3241 } 3243 list dpn-group-peers { 3244 if-feature fpcbase:fpc-basic-agent; 3245 key "remote-dpn-group-id"; 3246 uses fpcbase:fpc-dpn-peer-group; 3247 } 3248 leaf dpn-id { 3249 if-feature fpcbase:fpc-basic-agent; 3250 type fpcbase:fpc-dpn-id; 3251 } 3252 leaf-list control-protocols { 3253 if-feature fpcbase:fpc-basic-agent; 3254 type identityref { 3255 base "fpcbase:fpc-dpn-control-protocol"; 3256 } 3257 } 3259 list dpn-groups { 3260 if-feature fpcbase:fpc-multi-dpn; 3261 key dpn-group-id; 3262 uses fpcagent:fpc-dpn-group; 3263 list domains { 3264 key domain-id; 3265 uses fpcbase:fpc-domain; 3266 uses fpcagent:basename-info; 3267 } 3268 } 3269 list dpns { 3270 if-feature fpcbase:fpc-multi-dpn; 3271 key dpn-id; 3272 uses fpcbase:fpc-dpn; 3273 } 3274 } 3276 } 3277 } 3279 container fpc-agent-info { 3280 // General Agent Structures 3281 leaf-list supported-features { 3282 type string; 3283 } 3285 // Common Agent Info 3286 list supported-events { 3287 key event; 3288 leaf event { 3289 type identityref { 3290 base "fpcbase:event-type"; 3291 } 3292 } 3293 leaf event-id { 3294 type fpcbase:event-type-id; 3295 } 3297 } 3299 list supported-error-types { 3300 key error-type; 3301 leaf error-type { 3302 type identityref { 3303 base "fpcagent:error-type"; 3304 } 3305 } 3306 leaf error-type-id { 3307 type fpcagent:error-type-id; 3308 } 3309 } 3310 } 3312 // Multi-DPN Agent Structures 3313 grouping fpc-dpn-group { 3314 leaf dpn-group-id { 3315 type fpcbase:fpc-dpn-group-id; 3316 } 3317 leaf data-plane-role { 3318 type identityref { 3319 base "fpcbase:fpc-forwaridingplane-role"; 3320 } 3321 } 3322 leaf access-type { 3323 type identityref { 3324 base "fpcbase:fpc-access-type"; 3325 } 3326 } 3327 leaf mobility-profile { 3328 type identityref { 3329 base "fpcbase:fpc-mobility-profile-type"; 3330 } 3331 } 3332 list dpn-group-peers { 3333 key "remote-dpn-group-id"; 3334 uses fpcbase:fpc-dpn-peer-group; 3335 } 3336 } 3338 // RPC 3339 // RPC Specific Structures 3340 //Input Structures 3341 typedef admin-status { 3342 type enumeration { 3343 enum enabled { value 0; } 3344 enum disabled { value 1; } 3345 enum virtual { value 2; } 3346 } 3347 } 3349 typedef session-status { 3350 type enumeration { 3351 enum complete { value 0; } 3352 enum incomplete { value 1; } 3353 enum outdated { value 2; } 3354 } 3355 } 3357 typedef op-delay { 3358 type uint32; 3359 } 3361 typedef op-identifier { 3362 type uint64; 3363 } 3365 typedef ref-scope { 3366 description "Search scope for references in the operation. 3367 op - All references are contained in the operation body (intra-op) 3368 bundle - All references in exist in bundle (inter-operation/intra-bundle). 3369 NOTE - If this value comes in CONFIG call it is equivalen to 'op'. 3370 storage - One or more references exist outside of the operation and bundle. 3371 A lookup to a cache / storage is required. 3372 unknown - the location of the references are unknown. This is treated as 3373 a 'storage' type."; 3374 type enumeration { 3375 enum none { value 0; } 3376 enum op { value 1; } 3377 enum bundle { value 2; } 3378 enum storage { value 3; } 3379 enum unknown { value 4; } 3380 } 3381 } 3383 grouping instructions { 3384 container instructions { 3385 if-feature instruction-bitset; 3386 choice instr-type { 3387 } 3388 } 3389 } 3390 grouping op-header { 3391 leaf client-id { 3392 type fpcagent:client-identifier; 3393 } 3394 leaf delay { 3395 type op-delay; 3396 } 3397 leaf session-state { 3398 type session-status; 3399 } 3400 leaf admin-state { 3401 type admin-status; 3402 } 3403 leaf op-type { 3404 type enumeration { 3405 enum create { value 0; } 3406 enum update { value 1; } 3407 enum query { value 2; } 3408 enum delete { value 3; } 3409 } 3410 } 3411 leaf op-ref-scope { 3412 if-feature operation-ref-scope; 3413 type fpcagent:ref-scope; 3414 } 3415 uses fpcagent:instructions; 3416 } 3418 grouping clone-ref { 3419 leaf entity { 3420 type fpcbase:fpc-identity; 3421 } 3422 leaf source { 3423 type fpcbase:fpc-identity; 3424 } 3425 } 3427 identity command-set { 3428 description "protocol specific commands"; 3429 } 3431 grouping context-operation { 3432 uses fpcbase:fpc-context; 3433 uses fpcagent:instructions; 3434 } 3436 grouping port-operation { 3437 uses fpcbase:fpc-port; 3438 uses fpcagent:instructions; 3439 } 3441 // Output Structure 3442 grouping payload { 3443 list ports { 3444 uses fpcagent:port-operation; 3445 } 3446 list contexts { 3447 uses fpcagent:context-operation; 3448 } 3449 } 3451 grouping op-input { 3452 uses fpcagent:op-header; 3453 leaf op-id { 3454 type op-identifier; 3455 } 3456 choice op_body { 3457 case create_or_update { 3458 list clones { 3459 if-feature fpc-cloning; 3460 key entity; 3461 uses fpcagent:clone-ref; 3462 } 3463 uses fpcagent:payload; 3464 } 3465 case delete_or_query { 3466 uses fpcbase:targets-value; 3467 } 3468 } 3469 } 3471 typedef result { 3472 type enumeration { 3473 enum ok { value 0; } 3474 enum err { value 1; } 3475 enum ok-notify-follows { value 2; } 3476 } 3477 } 3479 identity error-type { 3480 description "Base Error Type"; 3481 } 3482 identity name-already-exists { 3483 description "Notification that an entity of the same name already exists"; 3484 } 3485 typedef error-type-id { 3486 description "Integer form of the Error Type"; 3487 type uint32; 3488 } 3490 grouping op-status-value { 3491 leaf op-status { 3492 type enumeration { 3493 enum ok { value 0; } 3494 enum err { value 1; } 3495 } 3496 } 3497 } 3499 grouping result-body { 3500 leaf op-id { 3501 type op-identifier; 3502 } 3503 choice result-type { 3504 case err { 3505 leaf error-type-id { 3506 type fpcagent:error-type-id; 3507 } 3508 leaf error-info { 3509 type string { 3510 length "1..1024"; 3511 } 3512 } 3513 } 3514 case create-or-update-success { 3515 uses fpcagent:payload; 3516 } 3517 case delete_or_query-success { 3518 uses fpcbase:targets-value; 3519 } 3520 case empty-case { 3521 } 3522 } 3523 } 3525 // Common RPCs 3526 rpc configure { 3527 input { 3528 uses fpcagent:op-input; 3529 } 3530 output { 3531 leaf result { 3532 type result; 3534 } 3535 uses fpcagent:result-body; 3536 } 3537 } 3539 rpc configure-bundles { 3540 if-feature fpcagent:fpc-bundles; 3541 input { 3542 leaf highest-op-ref-scope { 3543 if-feature operation-ref-scope; 3544 type fpcagent:ref-scope; 3545 } 3546 list bundles { 3547 key op-id; 3548 uses fpcagent:op-input; 3549 } 3550 } 3551 output { 3552 list bundles { 3553 key op-id; 3554 uses fpcagent:result-body; 3555 } 3556 } 3557 } 3559 rpc bind-dpn { 3560 if-feature fpcagent:fpc-client-binding; 3561 input { 3562 leaf node-id { 3563 type inet:uri; 3564 } 3565 uses fpcbase:fpc-dpn; 3566 } 3567 output { 3568 uses fpcagent:result-body; 3569 } 3570 } 3571 rpc unbind-dpn { 3572 if-feature fpcagent:fpc-client-binding; 3573 input { 3574 leaf dpn-id { 3575 type fpcbase:fpc-dpn-id; 3576 } 3577 } 3578 output { 3579 uses fpcagent:result-body; 3580 } 3581 } 3582 // Notification Messages & Structures 3583 typedef notification-id { 3584 type uint32; 3585 } 3587 grouping notification-header { 3588 leaf notification-id { 3589 type fpcagent:notification-id; 3590 } 3591 leaf timestamp { 3592 type uint32; 3593 } 3594 } 3596 notification config-result-notification { 3597 uses fpcagent:notification-header; 3598 choice value { 3599 case config-result { 3600 uses fpcagent:op-status-value; 3601 uses fpcagent:result-body; 3602 } 3603 case config-bundle-result { 3604 list bundles { 3605 uses fpcagent:op-status-value; 3606 uses fpcagent:result-body; 3607 } 3608 } 3609 } 3610 } 3612 rpc event_register { 3613 description "Used to register monitoring of parameters/events"; 3614 input { 3615 uses fpcbase:monitor-config; 3616 } 3617 output { 3618 leaf monitor-result { 3619 type fpcagent:result; 3620 } 3621 } 3622 } 3624 rpc event_deregister { 3625 description "Used to de-register monitoring of parameters/events"; 3626 input { 3627 list monitors { 3628 uses fpcbase:monitor-id; 3629 } 3631 } 3632 output { 3633 leaf monitor-result { 3634 type fpcagent:result; 3635 } 3636 } 3637 } 3639 rpc probe { 3640 description "Probe the status of a registered monitor"; 3641 input { 3642 uses fpcbase:targets-value; 3643 } 3644 output { 3645 leaf monitor-result { 3646 type fpcagent:result; 3647 } 3648 } 3649 } 3651 notification notify { 3652 uses fpcagent:notification-header; 3653 choice value { 3654 case dpn-candidate-available { 3655 if-feature fpcagent:fpc-auto-binding; 3656 leaf node-id { 3657 type inet:uri; 3658 } 3659 leaf-list access-types { 3660 type identityref { 3661 base "fpcbase:fpc-access-type"; 3662 } 3663 } 3664 leaf-list mobility-profiles { 3665 type identityref { 3666 base "fpcbase:fpc-mobility-profile-type"; 3667 } 3668 } 3669 leaf-list forwarding-plane-roles { 3670 type identityref { 3671 base "fpcbase:fpc-forwaridingplane-role"; 3672 } 3673 } 3674 } 3675 case monitor-notification { 3676 choice monitor-notification-value { 3677 case simple-monitor { 3678 uses fpcbase:report; 3680 } 3681 case bulk-monitors { 3682 list reports { 3683 uses fpcbase:report; 3684 } 3685 } 3686 } 3687 } 3688 } 3689 } 3690 } 3692 Figure 28: FPC YANG agent 3694 A.1.3. PMIP QoS Model 3696 module ietf-pmip-qos { 3697 yang-version 1; 3699 namespace 3700 "urn:ietf:params:xml:ns:yang:ietf-pmip-qos"; 3702 prefix "qos-pmip"; 3704 import ietf-inet-types { 3705 prefix inet; 3706 revision-date 2013-07-15; 3707 } 3708 import ietf-traffic-selector-types { prefix traffic-selectors; } 3710 organization 3711 "IETF DMM (Dynamic Mobility Management) Working Group"; 3713 contact 3714 "WG Web: 3715 WG List: 3717 WG Chair: Dapeng Liu 3718 3720 WG Chair: Jouni Korhonen 3721 3723 Editor: 3724 "; 3726 description 3727 "This module contains a collection of YANG definitions for 3729 quality of service paramaters used in Proxy Mobile IPv6. 3731 Copyright (c) 2015 IETF Trust and the persons identified as 3732 authors of the code. All rights reserved. 3734 Redistribution and use in source and binary forms, with or 3735 without modification, is permitted pursuant to, and subject 3736 to the license terms contained in, the Simplified BSD License 3737 set forth in Section 4.c of the IETF Trust's Legal Provisions 3738 Relating to IETF Documents 3739 (http://trustee.ietf.org/license-info). 3741 This version of this YANG module was created as part of the IETF 3742 DMM FPC YANG modules; see the RFC itself for full legal notices."; 3744 revision 2016-02-10 { 3745 description "Initial revision"; 3746 reference 3747 "RFC 7222: Quality-of-Service Option for Proxy Mobile IPv6"; 3748 } 3750 // Type Definitions 3752 // QoS Option Field Type Definitions 3753 typedef sr-id { 3754 type uint8; 3755 description 3756 "An 8-bit unsigned integer used 3757 for identifying the QoS Service Request. Its uniqueness is within 3758 the scope of a mobility session. The local mobility anchor always 3759 allocates the Service Request Identifier. When a new QoS Service 3760 Request is initiated by a mobile access gateway, the Service 3761 Request Identifier in the initial request message is set to a 3762 value of (0), and the local mobility anchor allocates a Service 3763 Request Identifier and includes it in the response. For any new 3764 QoS Service Requests initiated by a local mobility anchor, the 3765 Service Request Identifier is set to the allocated value."; 3766 } 3768 typedef traffic-class { 3769 type inet:dscp; 3770 description 3771 "Traffic Class consists of a 6-bit DSCP field followed by a 2-bit 3772 reserved field."; 3773 reference 3774 "RFC 3289: Management Information Base for the Differentiated 3775 Services Architecture 3776 RFC 2474: Definition of the Differentiated Services Field 3777 (DS Field) in the IPv4 and IPv6 Headers 3778 RFC 2780: IANA Allocation Guidelines For Values In 3779 the Internet Protocol and Related Headers"; 3780 } 3782 typedef operational-code { 3783 type enumeration { 3784 enum RESPONSE { value 0; } 3785 enum ALLOCATE { value 1; } 3786 enum DE-ALLOCATE { value 2; } 3787 enum MODIFY { value 3; } 3788 enum QUERY { value 4; } 3789 enum NEGOTIATE { value 5; } 3790 } 3791 description 3792 "1-octet Operational code indicates the type of QoS request. 3794 RESPONSE: (0) 3795 Response to a QoS request 3797 ALLOCATE: (1) 3798 Request to allocate QoS resources 3800 DE-ALLOCATE: (2) 3801 Request to de-Allocate QoS resources 3803 MODIFY: (3) 3804 Request to modify QoS parameters for a previously negotiated 3805 QoS Service Request 3807 QUERY: (4) 3808 Query to list the previously negotiated QoS Service Requests 3809 that are still active 3811 NEGOTIATE: (5) 3812 Response to a QoS Service Request with a counter QoS proposal 3814 Reserved: (6) to (255) 3815 Currently not used. Receiver MUST ignore the option received 3816 with any value in this range."; 3817 } 3819 // QoS Attribute Types 3821 //The enumeration value for mapping - don't confuse with the identities 3822 typedef qos-attrubite-type-enum { 3823 type enumeration { 3824 enum Reserved { value 0; } 3825 enum Per-MN-Agg-Max-DL-Bit-Rate { value 1; } 3826 enum Per-MN-Agg-Max-UL-Bit-Rate { value 2; } 3827 enum Per-Session-Agg-Max-DL-Bit-Rate { value 3; } 3828 enum Per-Session-Agg-Max-UL-Bit-Rate { value 4; } 3829 enum Allocation-Retention-Priority { value 5; } 3830 enum Aggregate-Max-DL-Bit-Rate { value 6; } 3831 enum Aggregate-Max-UL-Bit-Rate { value 7; } 3832 enum Guaranteed-DL-Bit-Rate { value 8; } 3833 enum Guaranteed-UL-Bit-Rate { value 9; } 3834 enum QoS-Traffic-Selector { value 10; } 3835 enum QoS-Vendor-Specific-Attribute { value 11; } 3836 } 3837 description 3838 "8-bit unsigned integer indicating the type of the QoS 3839 attribute. This specification reserves the following values. 3840 (0) - Reserved 3841 This value is reserved and cannot be used 3843 (1) - Per-MN-Agg-Max-DL-Bit-Rate 3844 Per-Mobile-Node Aggregate Maximum Downlink Bit Rate. 3846 (2) - Per-MN-Agg-Max-UL-Bit-Rate 3847 Per-Mobile-Node Aggregate Maximum Uplink Bit Rate. 3849 (3) - Per-Session-Agg-Max-DL-Bit-Rate 3850 Per-Mobility-Session Aggregate Maximum Downlink Bit Rate. 3852 (4) - Per-Session-Agg-Max-UL-Bit-Rate 3853 Per-Mobility-Session Aggregate Maximum Uplink Bit Rate. 3855 (5) - Allocation-Retention-Priority 3856 Allocation and Retention Priority. 3858 (6) - Aggregate-Max-DL-Bit-Rate 3859 Aggregate Maximum Downlink Bit Rate. 3861 (7) - Aggregate-Max-UL-Bit-Rate 3862 Aggregate Maximum Uplink Bit Rate. 3864 (8) - Guaranteed-DL-Bit-Rate 3865 Guaranteed Downlink Bit Rate. 3867 (9) - Guaranteed-UL-Bit-Rate 3868 Guaranteed Uplink Bit Rate. 3870 (10) - QoS-Traffic-Selector 3871 QoS Traffic Selector. 3873 (11) - QoS-Vendor-Specific-Attribute 3874 QoS Vendor-Specific Attribute. 3876 (12) to (254) - Reserved 3877 These values are reserved for future allocation. 3879 (255) - Reserved 3880 This value is reserved and cannot be used."; 3881 } 3883 // Attribute Type as Identities 3884 // Added for convenience of inclusion and extension in other YANG modules. 3885 identity qos-attribute-type { 3886 description 3887 "Base type for Quality of Service Attributes"; 3888 } 3890 identity Per-MN-Agg-Max-DL-Bit-Rate-type { 3891 base qos-attribute-type; 3892 description 3893 "Per-Mobile-Node Aggregate Maximum Downlink Bit Rate."; 3894 } 3896 identity Per-MN-Agg-Max-UL-Bit-Rate-type { 3897 base qos-attribute-type; 3898 description 3899 "Per-Mobile-Node Aggregate Maximum Uplink Bit Rate"; 3900 } 3902 identity Per-Session-Agg-Max-DL-Bit-Rate-type { 3903 base qos-attribute-type; 3904 description 3905 "Per-Mobility-Session Aggregate Maximum Downlink Bit Rate."; 3906 } 3908 identity Per-Session-Agg-Max-UL-Bit-Rate-type { 3909 base qos-attribute-type; 3910 description 3911 "Per-Mobility-Session Aggregate Maximum Uplink Bit Rate."; 3912 } 3914 identity Allocation-Retention-Priority-type { 3915 base qos-attribute-type; 3916 description 3917 "Allocation and Retention Priority."; 3918 } 3920 identity Aggregate-Max-DL-Bit-Rate-type { 3921 base qos-attribute-type; 3922 description "Aggregate Maximum Downlink Bit Rate."; 3923 } 3925 identity Aggregate-Max-UL-Bit-Rate-type { 3926 base qos-attribute-type; 3927 description "Aggregate Maximum Uplink Bit Rate."; 3928 } 3930 identity Guaranteed-DL-Bit-Rate-type { 3931 base qos-attribute-type; 3932 description "Guaranteed Downlink Bit Rate."; 3933 } 3935 identity Guaranteed-UL-Bit-Rate-type { 3936 base qos-attribute-type; 3937 description "Guaranteed Uplink Bit Rate."; 3938 } 3940 identity QoS-Traffic-Selector-type { 3941 base qos-attribute-type; 3942 description "QoS Traffic Selector."; 3943 } 3945 identity QoS-Vendor-Specific-Attribute-type { 3946 base qos-attribute-type; 3947 description "QoS Vendor-Specific Attribute."; 3948 } 3950 //value definitions 3951 typedef Per-MN-Agg-Max-DL-Bit-Rate-Value { 3952 type uint32; 3953 description 3954 "This is a 32-bit unsigned integer that 3955 indicates the aggregate maximum downlink bit rate that is 3956 requested/allocated for all the mobile node's IP flows. The 3957 measurement units for Per-MN-Agg-Max-DL-Bit-Rate are bits per 3958 second."; 3959 } 3961 typedef Per-MN-Agg-Max-UL-Bit-Rate-Value { 3962 type uint32; 3963 description 3964 "This is a 32-bit unsigned integer that 3965 indicates the aggregate maximum uplink bit rate that is requested/ 3966 allocated for the mobile node's IP flows. The measurement units 3967 for Per-MN-Agg-Max-UL-Bit-Rate are bits per second."; 3968 } 3969 // Generic Structure for the uplink and downlink 3970 grouping Per-Session-Agg-Max-Bit-Rate-Value { 3971 leaf max-rate { 3972 type uint32; 3973 mandatory true; 3974 description 3975 "This is a 32-bit unsigned integer 3976 that indicates the aggregate maximum bit rate that is requested/allocated 3977 for all the IP flows associated with that mobility session. The measurement 3978 units for Per-Session-Agg-Max-UL/DL-Bit-Rate are bits per second."; 3979 } 3980 leaf service-flag { 3981 type boolean; 3982 mandatory true; 3983 description 3984 "This flag is used for extending the scope of the 3985 target flows for Per-Session-Agg-Max-UL/DL-Bit-Rate from(UL)/to(DL) the mobile 3986 node's other mobility sessions sharing the same Service 3987 Identifier. 3GPP Access Point Name (APN) is an example of a 3988 Service Identifier, and that identifier is carried using the 3989 Service Selection mobility option [RFC5149]. 3991 * When the (S) flag is set to a value of (1), then the Per- 3992 Session-Agg-Max-Bit-Rate is measured as an aggregate across 3993 all the mobile node's other mobility sessions sharing the same 3994 Service Identifier associated with this mobility session. 3996 * When the (S) flag is set to a value of (0), then the target 3997 flows are limited to the current mobility session. 3999 * The (S) flag MUST NOT be set to a value of (1) when there is no 4000 Service Identifier associated with the mobility session."; 4001 reference 4002 "RFC 5149 - Service Selection mobility option"; 4003 } 4004 leaf exclude-flag { 4005 type boolean; 4006 mandatory true; 4007 description 4008 "This flag is used to request that the uplink/downlink 4009 flows for which the network is providing Guaranteed-Bit-Rate 4010 service be excluded from the target IP flows for which Per- 4011 Session-Agg-Max-UL/DL-Bit-Rate is measured. 4013 * When the (E) flag is set to a value of (1), then the request is 4014 to exclude the IP flows for which Guaranteed-UL/DL-Bit-Rate 4015 is negotiated from the flows for which Per-Session-Agg-Max-UL/DL-Bit-Rate 4016 is measured. 4018 * When the (E) flag is set to a value of (0), then the request is 4019 not to exclude any IP flows from the target IP flows for which 4020 Per-Session-Agg-Max-UL/DL-Bit-Rate is measured. 4022 * When the (S) flag and (E) flag are both set to a value of (1), 4023 then the request is to exclude all the IP flows sharing the 4024 Service Identifier associated with this mobility session from 4025 the target flows for which Per-Session-Agg-Max-UL/DL-Bit-Rate is 4026 measured."; 4027 } 4028 } 4030 grouping Allocation-Retention-Priority-Value { 4031 leaf prioirty-level { 4032 type uint8 { 4033 range "0..15"; 4034 } 4035 mandatory true; 4036 description 4037 "This is a 4-bit unsigned integer value. It 4038 is used to decide whether a mobility session establishment or 4039 modification request can be accepted; this is typically used for 4040 admission control of Guaranteed Bit Rate traffic in case of 4041 resource limitations. The priority level can also be used to 4043 decide which existing mobility session to preempt during resource 4044 limitations. The priority level defines the relative timeliness 4045 of a resource request. 4047 Values 1 to 15 are defined, with value 1 as the highest level of 4048 priority. 4050 Values 1 to 8 should only be assigned for services that are 4051 authorized to receive prioritized treatment within an operator 4052 domain. Values 9 to 15 may be assigned to resources that are 4053 authorized by the home network and thus applicable when a mobile 4054 node is roaming."; 4055 } 4056 leaf premption-capability { 4057 type enumeration { 4058 enum enabled { value 0; } 4059 enum disabled { value 1; } 4060 enum reserved1 { value 2; } 4061 enum reserved2 { value 3; } 4062 } 4063 mandatory true; 4064 description 4065 "This is a 2-bit unsigned integer 4067 value. It defines whether a service data flow can get resources 4068 that were already assigned to another service data flow with a 4069 lower priority level. The following values are defined: 4071 Enabled (0): This value indicates that the service data flow is 4072 allowed to get resources that were already assigned to another 4073 IP data flow with a lower priority level. 4075 Disabled (1): This value indicates that the service data flow 4076 is not allowed to get resources that were already assigned to 4077 another IP data flow with a lower priority level. The values 4078 (2) and (3) are reserved."; 4079 } 4080 leaf premption-vulnerability { 4081 type enumeration { 4082 enum enabled { value 0; } 4083 enum disabled { value 1; } 4084 enum reserved1 { value 2; } 4085 enum reserved2 { value 3; } 4086 } 4087 mandatory true; 4088 description 4089 "This is a 2-bit unsigned integer 4090 value. It defines whether a service data flow can lose the 4091 resources assigned to it in order to admit a service data flow 4092 with a higher priority level. The following values are defined: 4094 Enabled (0): This value indicates that the resources assigned 4095 to the IP data flow can be preempted and allocated to a service 4096 data flow with a higher priority level. 4098 Disabled (1): This value indicates that the resources assigned 4099 to the IP data flow shall not be preempted and allocated to a 4100 service data flow with a higher priority level. The values (2) 4101 and (3) are reserved."; 4102 } 4103 } 4105 typedef Aggregate-Max-DL-Bit-Rate-Value { 4106 type uint32; 4107 description 4108 "This is a 32-bit unsigned integer that 4109 indicates the aggregate maximum downlink bit rate that is 4110 requested/allocated for downlink IP flows. The measurement units 4111 for Aggregate-Max-DL-Bit-Rate are bits per second."; 4112 } 4114 typedef Aggregate-Max-UL-Bit-Rate-Value { 4115 type uint32; 4116 description 4117 "This is a 32-bit unsigned integer that 4118 indicates the aggregate maximum downlink bit rate that is 4119 requested/allocated for downlink IP flows. The measurement units 4120 for Aggregate-Max-DL-Bit-Rate are bits per second."; 4121 } 4123 typedef Guaranteed-DL-Bit-Rate-Value { 4124 type uint32; 4125 description 4126 "This is a 32-bit unsigned integer that 4127 indicates the guaranteed bandwidth in bits per second for downlink 4128 IP flows. The measurement units for Guaranteed-DL-Bit-Rate are 4129 bits per second."; 4130 } 4132 typedef Guaranteed-UL-Bit-Rate-Value { 4133 type uint32; 4134 description 4135 "This is a 32-bit unsigned integer that 4136 indicates the guaranteed bandwidth in bits per second for uplink 4137 IP flows. The measurement units for Guaranteed-UL-Bit-Rate are 4138 bits per second."; 4139 } 4141 grouping QoS-Vendor-Specific-Attribute-Value-Base { 4142 leaf vendorid { 4143 type uint32; 4144 mandatory true; 4145 description 4146 "The Vendor ID is the SMI (Structure of Management 4147 Information) Network Management Private Enterprise Code of the 4148 IANA-maintained 'Private Enterprise Numbers' registry [SMI]."; 4149 reference 4150 "'PRIVATE ENTERPRISE NUMBERS', SMI Network Management 4151 Private Enterprise Codes, April 2014, 4152 "; 4153 } 4154 leaf subtype { 4155 type uint8; 4156 mandatory true; 4157 description 4158 "An 8-bit field indicating the type of vendor-specific 4159 information carried in the option. The namespace for this sub- 4160 type is managed by the vendor identified by the Vendor ID field."; 4161 } 4162 description 4163 "QoS Vendor-Specific Attribute."; 4164 } 4166 //NOTE - We do NOT add the Status Codes or other changes in PMIP in this module 4168 //Primary Structures (groupings) 4169 grouping qosattribute { 4170 leaf attributetype { 4171 type identityref { 4172 base qos-attribute-type; 4173 } 4174 mandatory true; 4175 description "the attribute type"; 4176 } 4178 //All of the sub-types by constraint 4179 choice attribute-choice { 4180 case per-mn-agg-max-dl-case { 4181 when "../attributetype = 'Per-MN-Agg-Max-DL-Bit-Rate-type'"; 4182 leaf per-mn-agg-max-dl { 4183 type qos-pmip:Per-MN-Agg-Max-DL-Bit-Rate-Value; 4184 } 4185 } 4186 case per-mn-agg-max-ul-case { 4187 when "../attributetype = 'Per-MN-Agg-Max-UL-Bit-Rate-type'"; 4188 leaf per-mn-agg-max-ul { 4189 type qos-pmip:Per-MN-Agg-Max-UL-Bit-Rate-Value; 4190 } 4191 } 4192 case per-session-agg-max-dl-case { 4193 when "../attributetype = 'Per-Session-Agg-Max-DL-Bit-Rate-type'"; 4194 container per-session-agg-max-dl { 4195 uses qos-pmip:Per-Session-Agg-Max-Bit-Rate-Value; 4196 } 4197 } 4198 case per-session-agg-max-ul-case { 4199 when "../attributetype = 'Per-Session-Agg-Max-UL-Bit-Rate-type'"; 4200 container per-session-agg-max-ul { 4201 uses qos-pmip:Per-Session-Agg-Max-Bit-Rate-Value; 4202 } 4203 } 4204 case allocation-retention-priority-case { 4205 when "../attributetype = 'Allocation-Retention-Priority-type'"; 4206 uses qos-pmip:Allocation-Retention-Priority-Value; 4207 } 4208 case agg-max-dl-case { 4209 when "../attributetype = 'Aggregate-Max-DL-Bit-Rate-type'"; 4210 leaf agg-max-dl { 4211 type qos-pmip:Aggregate-Max-DL-Bit-Rate-Value; 4212 } 4213 } 4214 case agg-max-ul-case { 4215 when "../attributetype = 'Aggregate-Max-UL-Bit-Rate-type'"; 4216 leaf agg-max-ul { 4217 type qos-pmip:Aggregate-Max-UL-Bit-Rate-Value; 4218 } 4219 } 4220 case gbr-dl-case { 4221 when "../attributetype = 'Guaranteed-DL-Bit-Rate-type'"; 4222 leaf gbr-dl { 4223 type qos-pmip:Guaranteed-DL-Bit-Rate-Value; 4224 } 4225 } 4226 case gbr-ul-case { 4227 when "../attributetype = 'Guaranteed-UL-Bit-Rate-type'"; 4228 leaf gbr-ul { 4229 type qos-pmip:Guaranteed-UL-Bit-Rate-Value; 4230 } 4231 } 4232 case traffic-selector-case { 4233 when "../attributetype = 'QoS-Traffic-Selector-type'"; 4234 container traffic-selector { 4235 uses traffic-selectors:traffic-selector; 4236 } 4237 } 4238 } 4239 } 4241 grouping qosoption { 4242 leaf srid { 4243 type sr-id; 4244 mandatory true; 4245 } 4246 leaf trafficclass { 4247 type traffic-class; 4248 mandatory true; 4249 } 4250 leaf operationcode { 4251 type operational-code; 4252 mandatory true; 4253 } 4254 list attributes { 4255 unique "attributetype"; 4256 uses qosattribute; 4257 min-elements 1; 4258 } 4259 } 4260 } 4262 Figure 29: FPC YANG PMIP QoS 4264 A.1.4. Traffic Selectors YANG Model 4266 module ietf-traffic-selector-types { 4267 yang-version 1; 4269 namespace 4270 "urn:ietf:params:xml:ns:yang:ietf-traffic-selector-types"; 4272 prefix "ietf-traffic-selectors"; 4274 import ietf-inet-types { 4275 prefix inet; 4276 revision-date 2013-07-15; 4277 } 4279 organization 4280 "IETF DMM (Dynamic Mobility Management) Working Group"; 4282 contact 4283 "WG Web: 4284 WG List: 4286 WG Chair: Dapeng Liu 4287 4289 WG Chair: Jouni Korhonen 4290 4292 Editor: 4293 "; 4295 description 4296 "This module contains a collection of YANG definitions for 4297 traffic selectors for flow bindings. 4299 Copyright (c) 2015 IETF Trust and the persons identified as 4300 authors of the code. All rights reserved. 4302 Redistribution and use in source and binary forms, with or 4303 without modification, is permitted pursuant to, and subject 4304 to the license terms contained in, the Simplified BSD License 4305 set forth in Section 4.c of the IETF Trust's Legal Provisions 4306 Relating to IETF Documents 4307 (http://trustee.ietf.org/license-info). 4309 This version of this YANG module was created as part of the IETF 4310 DMM FPC YANG modules; see the RFC itself for full legal notices."; 4312 revision 2016-01-14 { 4313 description "Updated for IETF-PACKET-FIELDS module alignment"; 4314 reference 4315 "draft-ietf-netmod-acl-model-06"; 4316 } 4318 revision 2016-01-12 { 4319 description "Initial revision"; 4320 reference 4321 "RFC 6088: Traffic Selectors for Flow Bindings"; 4322 } 4324 // Identities 4325 identity traffic-selector-format { 4326 description "The base type for Traffic-Selector Formats"; 4327 } 4329 identity ipv4-binary-selector-format { 4330 base traffic-selector-format; 4331 description 4332 "IPv4 Binary Traffic Selector Format"; 4333 } 4335 identity ipv6-binary-selector-format { 4336 base traffic-selector-format; 4337 description 4338 "IPv6 Binary Traffic Selector Format"; 4339 } 4341 // Type definitions and groupings 4342 typedef ipsec-spi { 4343 type uint32; 4344 description "This type defines the first 32-bit IPsec Security Parameter 4345 Index (SPI) value on data packets sent from a corresponding 4346 node to the mobile node as seen by the home agent. This field 4347 is defined in [RFC4303]."; 4348 reference 4349 "RFC 4303: IP Encapsulating Security Payload (ESP)"; 4350 } 4352 grouping traffic-selector-base { 4353 description "A grouping of the commen leaves between the v4 and v6 Traffic Selectors"; 4354 container ipsec-spi-range { 4355 presence "Enables setting ipsec spi range"; 4356 description 4357 "Inclusive range representing IPSec Security Parameter Indices to be used. 4358 When only start-spi is present, it represents a single spi."; 4359 leaf start-spi { 4360 type ipsec-spi; 4361 mandatory true; 4362 description 4363 "This field identifies the first 32-bit IPsec SPI value, from the 4364 range of SPI values to be matched, on data packets sent from a 4365 corresponding node to the mobile node as seen by the home agent. 4366 This field is defined in [RFC4303]."; 4367 } 4368 leaf end-spi { 4369 type ipsec-spi; 4370 must ". >= ../start-spi" { 4371 error-message 4372 "The end-spi must be greater than or equal to start-spi"; 4373 } 4374 description 4375 "If more than one contiguous SPI value needs to be matched, then 4376 this field can be used to indicate the end value of a range 4377 starting from the value of the Start SPI field. This field 4378 MUST NOT be included unless the Start SPI field is included 4379 and has a value less than or equal to this field. 4381 When this field is included, the receiver will match all of the 4382 SPI values between fields start-spi and end-spi, 4383 inclusive of start-spi and end-spi."; 4384 } 4385 } 4386 container source-port-range { 4387 presence "Enables setting source port range"; 4388 description 4389 "Inclusive range representing source ports to be used. 4390 When only start-port is present, it represents a single port."; 4391 leaf start-port { 4392 type inet:port-number; 4393 mandatory true; 4394 description 4395 "This field identifies the first 16-bit source port number, from 4396 the range of port numbers to be matched, on data packets sent from 4397 a corresponding node to the mobile node as seen by the home agent. 4398 This is from the range of port numbers defined by IANA 4399 (http://www.iana.org)."; 4400 } 4401 leaf end-port { 4402 type inet:port-number; 4403 must ". >= ../start-port" { 4404 error-message 4405 "The end-port must be greater than or equal to start-port"; 4406 } 4407 description 4408 "If more than one contiguous source port number needs to be 4409 matched, then this field can be used to indicate the end value of 4410 a range starting from the value of the Start Port field. 4411 This field MUST NOT be included unless the Start Port field 4412 is included and has a value less than or equal to this field. 4414 When this field is included, the receiver will match 4415 all of the port numbers between fields start-port and 4416 end-port, inclusive of start-port and end-port."; 4417 } 4418 } 4419 container destination-port-range { 4420 presence "Enables setting destination port range"; 4421 description 4422 "Inclusive range representing destination ports to be used. When 4423 only start-port is present, it represents a single port."; 4424 leaf start-port { 4425 type inet:port-number; 4426 mandatory true; 4427 description 4428 "This field identifies the first 16-bit destination port number, 4429 from the range of port numbers to be matched, on data packets sent 4430 from a corresponding node to the mobile node as seen by the home 4431 agent."; 4432 } 4433 leaf end-port { 4434 type inet:port-number; 4435 must ". >= ../start-port" { 4436 error-message 4437 "The end-port must be greater than or equal to start-port"; 4438 } 4439 description 4440 "If more than one contiguous destination port number needs to be 4441 matched, then this field can be used to indicate the end value of 4442 a range starting from the value of the Start Destination Port 4443 field. This field MUST NOT be included unless the Start 4444 Port field is included and has a value less than or equal to this 4445 field. 4447 When this field is included, the receiver will match all of the 4448 port numbers between fields start-port and end-port, inclusive of 4449 start-port and end-port."; 4450 } 4452 } 4453 } 4455 grouping ipv4-binary-traffic-selector { 4456 container source-address-range-v4 { 4457 presence "Enables setting source IPv4 address range"; 4458 description 4459 "Inclusive range representing IPv4 addresses to be used. When 4460 only start-address is present, it represents a single address."; 4461 leaf start-address { 4462 type inet:ipv4-address; 4463 mandatory true; 4464 description 4465 "This field identifies the first source address, from the range of 4466 32-bit IPv4 addresses to be matched, on data packets sent from a 4467 corresponding node to the mobile node as seen by the home agent. 4468 In other words, this is one of the addresses of the correspondent 4469 node."; 4470 } 4471 leaf end-address { 4472 type inet:ipv4-address; 4473 description 4474 "If more than one contiguous source address needs to be matched, 4475 then this field can be used to indicate the end value of a range 4476 starting from the value of the Start Address field. This 4477 field MUST NOT be included unless the Start Address field 4478 is included. When this field is included, the receiver will match 4479 all of the addresses between fields start-address and 4480 end-address, inclusive of start-address and end-address."; 4481 } 4482 } 4483 container destination-address-range-v4 { 4484 presence "Enables setting destination IPv4 address range"; 4485 description 4486 "Inclusive range representing IPv4 addresses to be used. When 4487 only start-address is present, it represents a single address."; 4488 leaf start-address { 4489 type inet:ipv4-address; 4490 mandatory true; 4491 description 4492 "This field identifies the first destination address, from the 4493 range of 32-bit IPv4 addresses to be matched, on data packets sent 4494 from a corresponding node to the mobile node as seen by the home 4495 agent. In other words, this is one of the registered home 4496 addresses of the mobile node."; 4497 } 4498 leaf end-address { 4499 type inet:ipv4-address; 4500 description 4501 "If more than one contiguous destination address needs to be 4502 matched, then this field can be used to indicate the end value of 4503 a range starting from the value of the Start Destination Address 4504 field. This field MUST NOT be included unless the Start 4505 Address field is included. When this field is included, the receiver 4506 will match all of the addresses between fields start-address and 4507 end-address, inclusive of start-address and end-address."; 4508 } 4509 } 4510 container ds-range { 4511 presence "Enables setting dscp range"; 4512 description 4513 "Inclusive range representing DiffServ Codepoints to be used. When 4514 only start-ds is present, it represents a single Codepoint."; 4515 leaf start-ds { 4516 type inet:dscp; 4517 mandatory true; 4518 description 4519 "This field identifies the first differential services value, from 4520 the range of differential services values to be matched, on data 4521 packets sent from a corresponding node to the mobile node as seen 4522 by the home agent. Note that this field is called a 'Type of 4523 Service field' in [RFC0791]. [RFC3260] then clarified that the 4524 field has been redefined as a 6-bit DS field with 2 bits reserved, 4525 later claimed by Explicit Congestion Notification (ECN) [RFC3168]. 4526 For the purpose of this specification, the Start DS field is 8 4527 bits long, where the 6 most significant bits indicate the DS field 4528 to be matched and the 2 least significant bits' values MUST be 4529 ignored in any comparison."; 4530 } 4531 leaf end-ds { 4532 type inet:dscp; 4533 must ". >= ../start-ds" { 4534 error-message 4535 "The end-ds must be greater than or equal to start-ds"; 4536 } 4537 description 4538 "If more than one contiguous DS value needs to be matched, then 4539 this field can be used to indicate the end value of a range 4540 starting from the value of the Start DS field. This field MUST 4541 NOT be included unless the Start DS field is included. When this 4542 field is included, it MUST be coded the same way as defined for 4543 start-ds. When this field is included, the receiver will match all of 4544 the values between fields start-ds and end-ds, inclusive of start-ds 4545 and end-ds."; 4546 } 4547 } 4548 container protocol-range { 4549 presence "Enables setting protocol range"; 4550 description 4551 "Inclusive range representing IP protocol(s) to be used. When 4552 only start-protocol is present, it represents a single protocol."; 4553 leaf start-protocol { 4554 type uint8; 4555 mandatory true; 4556 description 4557 "This field identifies the first 8-bit protocol value, from the 4558 range of protocol values to be matched, on data packets sent from 4559 a corresponding node to the mobile node as seen by the home agent."; 4560 } 4561 leaf end-protocol { 4562 type uint8; 4563 must ". >= ../start-protocol" { 4564 error-message 4565 "The end-protocol must be greater than or equal to start-protocol"; 4566 } 4567 description 4568 "If more than one contiguous protocol value needs to be matched, 4569 then this field can be used to indicate the end value of a range 4570 starting from the value of the Start Protocol field. This field 4571 MUST NOT be included unless the Start Protocol field is included. 4572 When this field is included, the receiver will match all of the 4573 values between fields start-protocol and end-protocol, inclusive 4574 of start-protocol and end-protocol."; 4575 } 4576 } 4577 } 4579 grouping ipv6-binary-traffic-selector { 4580 container source-address-range-v6 { 4581 presence "Enables setting source IPv6 address range"; 4582 description 4583 "Inclusive range representing IPv6 addresses to be used. When 4584 only start-address is present, it represents a single address."; 4585 leaf start-address { 4586 type inet:ipv6-address; 4587 mandatory true; 4588 description 4589 "This field identifies the first source address, from the range of 4590 128-bit IPv6 addresses to be matched, on data packets sent from a 4591 corresponding node to the mobile node as seen by the home agent. 4592 In other words, this is one of the addresses of the correspondent 4593 node."; 4594 } 4595 leaf end-address { 4596 type inet:ipv6-address; 4597 description 4598 "If more than one contiguous source address needs to be matched, 4599 then this field can be used to indicate the end value of a range 4600 starting from the value of the Start Address field. This 4601 field MUST NOT be included unless the Start Address field is included. 4602 When this field is included, the receiver will match all of the addresses 4603 between fields start-address and end-address, inclusive of start-address 4604 and end-address ."; 4605 } 4606 } 4607 container destination-address-range-v6 { 4608 presence "Enables setting destination IPv6 address range"; 4609 description 4610 "Inclusive range representing IPv6 addresses to be used. When 4611 only start-address is present, it represents a single address."; 4612 leaf start-address { 4613 type inet:ipv6-address; 4614 mandatory true; 4615 description 4616 "This field identifies the first destination address, from the 4617 range of 128-bit IPv6 addresses to be matched, on data packets 4618 sent from a corresponding node to the mobile node as seen by the 4619 home agent. In other words, this is one of the registered home 4620 addresses of the mobile node."; 4621 } 4622 leaf end-address { 4623 type inet:ipv6-address; 4624 description 4625 "If more than one contiguous destination address needs to be 4626 matched, then this field can be used to indicate the end value of 4627 a range starting from the value of the Start Address field. This 4628 field MUST NOT be included unless the Start Address field is included. 4629 When this field is included, the receiver will match all of the 4630 addresses between fields start-address and end-address, inclusive of 4631 start-address and end-address."; 4632 } 4633 } 4634 container flow-label-range { 4635 presence "Enables setting Flow Label range"; 4636 description 4637 "Inclusive range representing IPv4 addresses to be used. When 4638 only start-flow-label is present, it represents a single flow label."; 4639 leaf start-flow-label { 4640 type inet:ipv6-flow-label; 4641 description 4642 "This field identifies the first flow label value, from the range 4643 of flow label values to be matched, on data packets sent from a 4644 corresponding node to the mobile node as seen by the home agent. 4645 According to [RFC2460], the flow label is 24 bits long. For the 4646 purpose of this specification, the sender of this option MUST 4647 prefix the flow label value with 8 bits of '0' before inserting it 4648 in the start-flow-label field. The receiver SHOULD ignore the 4649 first 8 bits of this field before using it in comparisons with 4650 flow labels in packets."; 4651 } 4652 leaf end-flow-label { 4653 type inet:ipv6-flow-label; 4654 must ". >= ../start-flow-label" { 4655 error-message 4656 "The end-flow-lable must be greater than or equal to start-flow-label"; 4657 } 4658 description 4659 "If more than one contiguous flow label value needs to be matched, 4660 then this field can be used to indicate the end value of a range 4661 starting from the value of the Start Flow Label field. This field 4662 MUST NOT be included unless the Start Flow Label field is 4663 included. When this field is included, the receiver will match 4664 all of the flow label values between fields start-flow-label 4665 and end-flow-label, inclusive of start-flow-label and end-flow-label. 4666 When this field is included, it MUST be coded the same way as defined 4667 for end-flow-label."; 4668 } 4669 } 4670 container traffic-class-range { 4671 presence "Enables setting the traffic class range"; 4672 description 4673 "Inclusive range representing IPv4 addresses to be used. When 4674 only start-traffic-class is present, it represents a single traffic class."; 4675 leaf start-traffic-class { 4676 type inet:dscp; 4677 description 4678 "This field identifies the first traffic class value, from the 4679 range of traffic class values to be matched, on data packets sent 4680 from a corresponding node to the mobile node as seen by the home 4681 agent. This field is equivalent to the Start DS field in the IPv4 4682 traffic selector in Figure 1. As per RFC 3260, the field is 4683 defined as a 6-bit DS field with 2 bits reserved, later claimed by 4684 Explicit Congestion Notification (ECN) RFC 3168. For the purpose 4685 of this specification, the start-traffic-class field is 8 bits long, where 4686 the 6 most significant bits indicate the DS field to be matched 4687 and the 2 least significant bits' values MUST be ignored in any 4688 comparison."; 4689 reference 4690 "RFC 3260: New Terminology and Clarifications for Diffserv 4691 RFC 3168: The Addition of Explicit Congestion Notification (ECN) to IP"; 4693 } 4694 leaf end-traffic-class { 4695 type inet:dscp; 4696 must ". >= ../start-traffic-class" { 4697 error-message 4698 "The end-traffic-class must be greater than or equal to start-traffic-class"; 4699 } 4700 description 4701 "If more than one contiguous TC value needs to be matched, then 4702 this field can be used to indicate the end value of a range 4703 starting from the value of the Start TC field. This field MUST 4704 NOT be included unless the Start TC field is included. When this 4705 field is included, it MUST be coded the same way as defined for 4706 start-traffic-class. When this field is included, the receiver 4707 will match all of the values between fields start-traffic-class 4708 and end-traffic-class, inclusive of start-traffic-class and 4709 end-traffic-class."; 4710 } 4711 } 4712 container next-header-range { 4713 presence "Enables setting Next Header range"; 4714 description 4715 "Inclusive range representing Next Headers to be used. When 4716 only start-next-header is present, it represents a single Next Header."; 4717 leaf start-next-header { 4718 type uint8; 4719 description 4720 "This field identifies the first 8-bit next header value, from the 4721 range of next header values to be matched, on data packets sent 4722 from a corresponding node to the mobile node as seen by the home 4723 agent."; 4724 } 4725 leaf end-next-header { 4726 type uint8; 4727 must ". >= ../start-next-header" { 4728 error-message 4729 "The end-next-header must be greater than or equal to start-next-header"; 4730 } 4731 description 4732 "If more than one contiguous next header value needs to be matched, 4733 then this field can be used to indicate the end value of a range 4734 starting from the value of the Start NH field. This field MUST 4735 NOT be included unless the Start next header field is included. 4736 When this field is included, the receiver will match all of the 4737 values between fields start-next-header and end-next-header, 4738 inclusive of start-next-header and end-next-header."; 4739 } 4740 } 4742 } 4744 grouping traffic-selector { 4745 leaf ts-format { 4746 type identityref { 4747 base traffic-selector-format; 4748 } 4749 description "Traffic Selector Format"; 4750 } 4751 uses traffic-selector-base { 4752 when "boolean(../ts-format/text() = 'ipv6-binary-selector-format') | boolean(../ts-format/text() = 'ipv4-binary-selector-format')"; 4753 } 4754 uses ipv4-binary-traffic-selector { 4755 when "boolean(../ts-format/text() = 'ipv4-binary-selector-format')"; 4756 } 4757 uses ipv6-binary-traffic-selector { 4758 when "boolean(../ts-format/text() = 'ipv6-binary-selector-format')"; 4759 } 4760 description 4761 "The traffic selector includes the parameters used to match 4762 packets for a specific flow binding."; 4763 reference 4764 "RFC 6089: Flow Bindings in Mobile IPv6 and Network Mobility (NEMO) Basic Support"; 4765 } 4767 grouping ts-list { 4768 list selectors { 4769 key index; 4770 leaf index { 4771 type uint64; 4772 } 4773 uses traffic-selector; 4774 } 4775 } 4776 } 4778 Figure 30: FPC YANG Traffic Selectors 4780 A.1.5. FPC 3GPP Mobility YANG Model 4782 module ietf-dmm-threegpp { 4783 namespace "urn:ietf:params:xml:ns:yang:threegpp"; 4784 prefix threegpp; 4786 import ietf-inet-types { prefix inet; revision-date 2013-07-15; } 4787 import ietf-dmm-fpcagent { prefix fpcagent; } 4788 import ietf-dmm-fpcbase { prefix fpcbase; revision-date 2016-08-03; } 4789 import ietf-traffic-selector-types { prefix traffic-selectors; revision-date 2016-01-14; } 4790 import ietf-pmip-qos { prefix pmipqos; revision-date 2016-02-10; } 4792 organization "IETF DMM Working Group"; 4793 contact "Satoru Matsushima "; 4795 description 4796 "This module contains YANG definition for 4797 3GPP Related Mobility Structures"; 4799 revision 2016-08-03 { 4800 description "Initial"; 4801 reference "draft-ietf-dmm-fpc-cpdp-04"; 4802 } 4804 identity threeGPP-access-type { 4805 base "fpcbase:fpc-access-type"; 4806 } 4808 // Profile Type 4809 identity threeGPP-mobility { 4810 base "fpcbase:fpc-mobility-profile-type"; 4811 } 4813 // Tunnel Types 4814 identity threeGPP-tunnel-type { 4815 description "Base Tunnel Type"; 4816 } 4818 identity gtpv1 { 4819 base "threegpp:threeGPP-tunnel-type"; 4820 } 4822 identity gtpv2 { 4823 base "threegpp:threeGPP-tunnel-type"; 4824 } 4826 grouping teid-value { 4827 leaf tunnel-identifier { 4828 description "TEID"; 4829 type uint32; 4830 } 4831 } 4833 grouping threeGPP-tunnel { 4834 leaf tunnel-type { 4835 type identityref { 4836 base "threegpp:threeGPP-tunnel-type"; 4838 } 4839 } 4840 uses threegpp:teid-value; 4841 } 4843 // QoS Profile 4844 identity threeGPP-qos-profile-parameters { 4845 base "fpcbase:fpc-qos-type"; 4846 } 4848 typedef fpc-qos-class-identifier { 4849 type uint8 { 4850 range "1..9"; 4851 } 4852 description "QCI"; 4853 } 4855 grouping threeGPP-QoS { 4856 leaf qci { 4857 type fpc-qos-class-identifier; 4858 } 4859 leaf gbr { 4860 type uint32; 4861 } 4862 leaf mbr { 4863 type uint32; 4864 } 4865 leaf apn-ambr { 4866 type uint32; 4867 } 4868 leaf ue-ambr { 4869 type uint32; 4870 } 4871 container arp { 4872 uses pmipqos:Allocation-Retention-Priority-Value; 4873 } 4874 } 4876 typedef ebi-type { 4877 type uint8 { 4878 range "0..15"; 4879 } 4880 } 4882 // From 3GPP TS 24.008 version 13.5.0 Release 13 4883 typedef component-type-enum { 4884 type enumeration { 4885 enum ipv4RemoteAddress { value 16; } 4886 enum ipv4LocalAddress { value 17; } 4887 enum ipv6RemoteAddress { value 32; } 4888 enum ipv6RemoteAddressPrefix { value 33; } 4889 enum ipv6LocalAddressPrefix { value 35; } 4890 enum protocolNextHeader { value 48; } 4891 enum localPort { value 64; } 4892 enum localPortRange { value 65; } 4893 enum reomotePort { value 80; } 4894 enum remotePortRange { value 81; } 4895 enum secParamIndex { value 96; } 4896 enum tosTraffClass { value 112; } 4897 enum flowLabel { value 128; } 4898 } 4899 } 4901 typedef packet-filter-direction { 4902 type enumeration { 4903 enum preRel7Tft { value 0; } 4904 enum uplink { value 1; } 4905 enum downlink { value 2; } 4906 enum bidirectional { value 3; } 4907 } 4908 } 4910 typedef component-type-id { 4911 type uint8 { 4912 range "16 | 17 | 32 | 33 | 35 | 48 | 64 | 65 | 80 | 81 | 96 | 112 | 128"; 4913 } 4914 } 4916 grouping packet-filter { 4917 leaf direction { 4918 type threegpp:packet-filter-direction; 4919 } 4920 leaf identifier { 4921 type uint8 { 4922 range "1..15"; 4923 } 4924 } 4925 leaf evaluation-precedence { 4926 type uint8; 4927 } 4928 list contents { 4929 key component-type-identifier; 4930 leaf component-type-identifier { 4931 type threegpp:component-type-id; 4932 } 4933 choice value { 4934 case ipv4-local { 4935 leaf ipv4-local { 4936 type inet:ipv4-address; 4937 } 4938 } 4939 case ipv6-prefix-local { 4940 leaf ipv6-prefix-local { 4941 type inet:ipv6-prefix; 4942 } 4943 } 4944 case ipv4-ipv6-remote { 4945 leaf ipv4-ipv6-remote { 4946 type inet:ip-address; 4947 } 4948 } 4949 case ipv6-prefix-remote { 4950 leaf ipv6-prefix-remote { 4951 type inet:ipv6-prefix; 4952 } 4953 } 4954 case next-header { 4955 leaf next-header { 4956 type uint8; 4957 } 4958 } 4959 case local-port { 4960 leaf local-port { 4961 type inet:port-number; 4962 } 4963 } 4964 case local-port-range { 4965 leaf local-port-lo { 4966 type inet:port-number; 4967 } 4968 leaf local-port-hi { 4969 type inet:port-number; 4970 } 4971 } 4972 case remote-port { 4973 leaf remote-port { 4974 type inet:port-number; 4975 } 4976 } 4977 case remote-port-range { 4978 leaf remote-port-lo { 4979 type inet:port-number; 4980 } 4981 leaf remote-port-hi { 4982 type inet:port-number; 4983 } 4984 } 4985 case ipsec-index { 4986 leaf ipsec-index { 4987 type traffic-selectors:ipsec-spi; 4988 } 4989 } 4990 case traffic-class { 4991 leaf traffic-class { 4992 type inet:dscp; 4993 } 4994 } 4995 case traffic-class-range { 4996 leaf traffic-class-lo { 4997 type inet:dscp; 4998 } 4999 leaf traffic-class-hi { 5000 type inet:dscp; 5001 } 5002 } 5003 case flow-label-type { 5004 leaf-list flow-label-type { 5005 type inet:ipv6-flow-label; 5006 } 5007 } 5008 } 5009 } 5010 } 5012 grouping tft { 5013 list packet-filters { 5014 key identifier; 5015 uses threegpp:packet-filter; 5016 } 5017 } 5019 typedef imsi-type { 5020 type uint64; 5021 } 5023 typedef threegpp-instr { 5024 description "Instruction Set for 3GPP R11"; 5025 type bits { 5026 bit assign-ip { 5027 position 0; 5028 } 5029 bit assign-fteid-ip { 5030 position 1; 5031 } 5032 bit assign-fteid-teid { 5033 position 2; 5034 } 5035 bit session { 5036 position 3; 5037 } 5038 bit uplink { 5039 position 4; 5040 } 5041 bit downlink { 5042 position 5; 5043 } 5044 bit assign-dpn { 5045 position 6; 5046 } 5047 } 5048 } 5050 // Descriptors update - goes to Entities, Configure and Configure Bundles 5051 augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-policy/fpcagent:descriptors/fpcagent:descriptor-value" { 5052 case threegpp-tft { 5053 uses threegpp:tft; 5054 } 5055 } 5057 // Contexts Update - Contexts / UL / mob-profile 5058 augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:ul/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" { 5059 case threegpp-tunnel { 5060 uses threegpp:threeGPP-tunnel; 5061 uses threegpp:tft; 5062 } 5063 } 5064 augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:ul/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" { 5065 case threegpp-tunnel { 5066 uses threegpp:threeGPP-tunnel; 5067 uses threegpp:tft; 5068 } 5069 } 5070 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" { 5071 case threegpp-tunnel { 5072 uses threegpp:threeGPP-tunnel; 5073 uses threegpp:tft; 5074 } 5075 } 5076 augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:ul/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" { 5077 case threegpp-tunnel { 5078 uses threegpp:threeGPP-tunnel; 5079 uses threegpp:tft; 5080 } 5081 } 5082 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" { 5083 case threegpp-tunnel { 5084 uses threegpp:threeGPP-tunnel; 5085 uses threegpp:tft; 5086 } 5087 } 5089 // Contexts Update - Contexts / DL / mob-profile 5090 augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:dl/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" { 5091 case threegpp-tunnel { 5092 uses threegpp:threeGPP-tunnel; 5093 uses threegpp:tft; 5094 } 5095 } 5096 augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dl/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" { 5097 case threegpp-tunnel { 5098 uses threegpp:threeGPP-tunnel; 5099 uses threegpp:tft; 5100 } 5101 } 5102 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" { 5103 case threegpp-tunnel { 5104 uses threegpp:threeGPP-tunnel; 5105 uses threegpp:tft; 5106 } 5107 } 5108 augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:dl/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" { 5109 case threegpp-tunnel { 5110 uses threegpp:threeGPP-tunnel; 5111 uses threegpp:tft; 5112 } 5113 } 5114 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" { 5115 case threegpp-tunnel { 5116 uses threegpp:threeGPP-tunnel; 5117 uses threegpp:tft; 5118 } 5119 } 5121 // Contexts Update - Contexts / dpns / mobility-tunnel-parameters 5122 augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:dpns/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" { 5123 case threegpp-tunnel { 5124 uses threegpp:threeGPP-tunnel; 5125 uses threegpp:tft; 5126 } 5127 } 5128 augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dpns/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" { 5129 case threegpp-tunnel { 5130 uses threegpp:threeGPP-tunnel; 5131 uses threegpp:tft; 5132 } 5133 } 5134 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" { 5135 case threegpp-tunnel { 5136 uses threegpp:threeGPP-tunnel; 5137 uses threegpp:tft; 5138 } 5139 } 5140 augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:dpns/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" { 5141 case threegpp-tunnel { 5142 uses threegpp:threeGPP-tunnel; 5143 uses threegpp:tft; 5144 } 5145 } 5146 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" { 5147 case threegpp-tunnel { 5148 uses threegpp:threeGPP-tunnel; 5149 uses threegpp:tft; 5150 } 5151 } 5153 // QoS Updates - Context / UL / qosprofile 5154 augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:ul/fpcagent:qos-profile-parameters/fpcagent:value" { 5155 case threegpp-qos { 5156 uses threegpp:threeGPP-QoS; 5157 } 5158 } 5159 augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:ul/fpcagent:qos-profile-parameters/fpcagent:value" { 5160 case threegpp-qos { 5161 uses threegpp:threeGPP-QoS; 5162 } 5163 } 5164 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" { 5165 case threegpp-qos { 5166 uses threegpp:threeGPP-QoS; 5167 } 5168 } 5169 augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:ul/fpcagent:qos-profile-parameters/fpcagent:value" { 5170 case threegpp-qos { 5171 uses threegpp:threeGPP-QoS; 5173 } 5174 } 5175 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" { 5176 case threegpp-qos { 5177 uses threegpp:threeGPP-QoS; 5178 } 5179 } 5181 // QoS Updates - Context / DL / QoS Profile 5182 augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:dl/fpcagent:qos-profile-parameters/fpcagent:value" { 5183 case threegpp-qos { 5184 uses threegpp:threeGPP-QoS; 5185 } 5186 } 5187 augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dl/fpcagent:qos-profile-parameters/fpcagent:value" { 5188 case threegpp-qos { 5189 uses threegpp:threeGPP-QoS; 5190 } 5191 } 5192 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" { 5193 case threegpp-qos { 5194 uses threegpp:threeGPP-QoS; 5195 } 5196 } 5197 augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:dl/fpcagent:qos-profile-parameters/fpcagent:value" { 5198 case threegpp-qos { 5199 uses threegpp:threeGPP-QoS; 5200 } 5201 } 5202 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" { 5203 case threegpp-qos { 5204 uses threegpp:threeGPP-QoS; 5205 } 5206 } 5208 grouping threegpp-properties { 5209 leaf imsi { 5210 type threegpp:imsi-type; 5211 } 5212 leaf ebi { 5213 type threegpp:ebi-type; 5214 } 5215 leaf lbi { 5216 type threegpp:ebi-type; 5217 } 5218 } 5220 augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts" { 5221 uses threegpp:threegpp-properties; 5222 } 5223 augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts" { 5224 uses threegpp:threegpp-properties; 5225 } 5226 augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts" { 5227 uses threegpp:threegpp-properties; 5228 } 5229 augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts" { 5230 uses threegpp:threegpp-properties; 5231 } 5232 augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts" { 5233 uses threegpp:threegpp-properties; 5234 } 5236 grouping threegpp-commandset { 5237 leaf instr-3gpp-mob { 5238 type threegpp:threegpp-instr; 5239 } 5240 } 5242 augment "/fpcagent:configure/fpcagent:input/fpcagent:instructions/fpcagent:instr-type" { 5243 case instr-3gpp-mob { 5244 uses threegpp:threegpp-commandset; 5245 } 5246 } 5247 augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:instructions/fpcagent:instr-type" { 5248 case instr-3gpp-mob { 5249 uses threegpp:threegpp-commandset; 5250 } 5251 } 5252 augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:instructions/fpcagent:instr-type" { 5253 case instr-3gpp-mob { 5254 uses threegpp:threegpp-commandset; 5255 } 5256 } 5257 augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:ports/fpcagent:instructions/fpcagent:instr-type" { 5258 case instr-3gpp-mob { 5259 uses threegpp:threegpp-commandset; 5260 } 5261 } 5262 augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:ports/fpcagent:instructions/fpcagent:instr-type" { 5263 case instr-3gpp-mob { 5264 uses threegpp:threegpp-commandset; 5265 } 5266 } 5268 augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:instructions/fpcagent:instr-type" { 5269 case instr-3gpp-mob { 5270 uses threegpp:threegpp-commandset; 5271 } 5272 } 5273 augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:instructions/fpcagent:instr-type" { 5274 case instr-3gpp-mob { 5275 uses threegpp:threegpp-commandset; 5276 } 5277 } 5278 augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:instructions/fpcagent:instr-type" { 5279 case instr-3gpp-mob { 5280 uses threegpp:threegpp-commandset; 5281 } 5282 } 5283 augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:ports/fpcagent:instructions/fpcagent:instr-type" { 5284 case instr-3gpp-mob { 5285 uses threegpp:threegpp-commandset; 5286 } 5287 } 5288 augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:ports/fpcagent:instructions/fpcagent:instr-type" { 5289 case instr-3gpp-mob { 5290 uses threegpp:threegpp-commandset; 5291 } 5292 } 5294 // Deletion Augments - We add the TEID to speed up deletion 5295 augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:delete_or_query/fpcagent:targets" { 5296 uses threegpp:teid-value; 5297 } 5298 augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:delete_or_query-success/fpcagent:targets" { 5299 uses threegpp:teid-value; 5300 } 5302 augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:delete_or_query/fpcagent:targets" { 5303 uses threegpp:teid-value; 5304 } 5305 augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:delete_or_query-success/fpcagent:targets" { 5306 uses threegpp:teid-value; 5307 } 5308 } 5310 Figure 31: FPC YANG 3GPP Mobility 5312 A.1.6. FPC / PMIP Integration YANG Model 5314 module ietf-dmm-fpc-pmip { 5315 namespace "urn:ietf:params:xml:ns:yang:ietf-dmm-fpc-pmip"; 5316 prefix fpc-pmip; 5317 import ietf-dmm-fpcbase { prefix fpcbase; } 5318 import ietf-dmm-fpcagent { prefix fpcagent; } 5319 import ietf-pmip-qos { prefix qos-pmip; } 5320 import ietf-traffic-selector-types { prefix traffic-selectors; } 5322 organization "IETF DMM Working Group"; 5323 contact "Satoru Matsushima "; 5325 description 5326 "This module contains YANG definition for 5327 Forwarding Policy Configuration Protocol.(FPCP)"; 5329 revision 2016-01-19 { 5330 description "Changes based on -01 version of FPCP draft."; 5331 reference "draft-ietf-dmm-fpc-cpdp-01"; 5332 } 5334 identity ietf-pmip-access-type { 5335 base "fpcbase:fpc-access-type"; 5336 } 5338 identity fpcp-qos-index-pmip { 5339 base "fpcbase:fpc-qos-type"; 5340 } 5341 identity traffic-selector-mip6 { 5342 base "fpcbase:fpc-descriptor-type"; 5343 } 5344 identity ietf-pmip { 5345 base "fpcbase:fpc-mobility-profile-type"; 5346 } 5348 identity pmip-tunnel-type { 5349 description "PMIP Tunnel Type"; 5350 } 5351 identity grev1 { 5352 base "fpc-pmip:pmip-tunnel-type"; 5353 } 5354 identity grev2 { 5355 base "fpc-pmip:pmip-tunnel-type"; 5356 } 5357 identity ipinip { 5358 base "fpc-pmip:pmip-tunnel-type"; 5359 } 5360 grouping pmip-mobility { 5361 leaf type { 5362 type identityref { 5363 base "fpc-pmip:pmip-tunnel-type"; 5364 } 5366 } 5367 choice value { 5368 case gre { 5369 leaf key { 5370 type uint32; 5371 description "GRE_KEY"; 5372 } 5373 } 5374 } 5375 } 5377 typedef pmip-instr { 5378 description "Instruction Set for PMIP"; 5379 type bits { 5380 bit assign-ip { 5381 position 0; 5382 } 5383 bit assign-dpn { 5384 position 1; 5385 } 5386 bit session { 5387 position 2; 5388 } 5389 bit uplink { 5390 position 3; 5391 } 5392 bit downlink { 5393 position 4; 5394 } 5395 } 5396 } 5398 // Descriptors update - goes to Entities, Configure and Configure Bundles 5399 augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-policy/fpcagent:descriptors/fpcagent:descriptor-value" { 5400 case pmip-selector { 5401 uses traffic-selectors:traffic-selector; 5402 } 5403 } 5405 // Contexts Update - Contexts / UL / mob-profile, Contexts / DL / mob-profile and Contexts / dpns / mobility-tunnel-parameters 5406 augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:ul/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" { 5407 case pmip-tunnel { 5408 uses fpc-pmip:pmip-mobility; 5409 uses traffic-selectors:traffic-selector; 5410 } 5411 } 5412 augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:ul/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" { 5413 case pmip-tunnel { 5414 uses fpc-pmip:pmip-mobility; 5415 uses traffic-selectors:traffic-selector; 5416 } 5417 } 5418 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" { 5419 case pmip-tunnel { 5420 uses fpc-pmip:pmip-mobility; 5421 uses traffic-selectors:traffic-selector; 5422 } 5423 } 5425 augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:dl/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" { 5426 case pmip-tunnel { 5427 uses fpc-pmip:pmip-mobility; 5428 uses traffic-selectors:traffic-selector; 5429 } 5430 } 5431 augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dl/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" { 5432 case pmip-tunnel { 5433 uses fpc-pmip:pmip-mobility; 5434 uses traffic-selectors:traffic-selector; 5435 } 5436 } 5437 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" { 5438 case pmip-tunnel { 5439 uses fpc-pmip:pmip-mobility; 5440 uses traffic-selectors:traffic-selector; 5441 } 5442 } 5444 augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:dpns/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" { 5445 case pmip-tunnel { 5446 uses fpc-pmip:pmip-mobility; 5447 uses traffic-selectors:traffic-selector; 5448 } 5449 } 5450 augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dpns/fpcagent:mobility-tunnel-parameters/fpcagent:profile-parameters" { 5451 case pmip-tunnel { 5452 uses fpc-pmip:pmip-mobility; 5453 uses traffic-selectors:traffic-selector; 5454 } 5455 } 5456 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" { 5457 case pmip-tunnel { 5458 uses fpc-pmip:pmip-mobility; 5459 uses traffic-selectors:traffic-selector; 5460 } 5461 } 5462 // QoS Updates - Context / UL / qosprofile, Context / DL / QoS Profile 5463 augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:ul/fpcagent:qos-profile-parameters/fpcagent:value" { 5464 case qos-pmip { 5465 uses qos-pmip:qosattribute; 5466 } 5467 } 5468 augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:ul/fpcagent:qos-profile-parameters/fpcagent:value" { 5469 case qos-pmip { 5470 uses qos-pmip:qosattribute; 5471 } 5472 } 5473 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" { 5474 case qos-pmip { 5475 uses qos-pmip:qosattribute; 5476 } 5477 } 5479 augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-mobility/fpcagent:contexts/fpcagent:dl/fpcagent:qos-profile-parameters/fpcagent:value" { 5480 case qos-pmip { 5481 uses qos-pmip:qosattribute; 5482 } 5483 } 5484 augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:dl/fpcagent:qos-profile-parameters/fpcagent:value" { 5485 case qos-pmip { 5486 uses qos-pmip:qosattribute; 5487 } 5488 } 5489 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" { 5490 case qos-pmip { 5491 uses qos-pmip:qosattribute; 5492 } 5493 } 5495 grouping pmip-commandset { 5496 leaf instr-pmip { 5497 type fpc-pmip:pmip-instr; 5498 } 5499 } 5501 // Instructions Update - OP BODY, Context, Port 5502 augment "/fpcagent:configure/fpcagent:input/fpcagent:instructions/fpcagent:instr-type" { 5503 case pmip-instr { 5504 uses fpc-pmip:pmip-commandset; 5505 } 5506 } 5507 augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:instructions/fpcagent:instr-type" { 5508 case pmip-instr { 5509 uses fpc-pmip:pmip-commandset; 5511 } 5512 } 5513 augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:instructions/fpcagent:instr-type" { 5514 case pmip-instr { 5515 uses fpc-pmip:pmip-commandset; 5516 } 5517 } 5518 augment "/fpcagent:configure/fpcagent:input/fpcagent:op_body/fpcagent:create_or_update/fpcagent:ports/fpcagent:instructions/fpcagent:instr-type" { 5519 case pmip-instr { 5520 uses fpc-pmip:pmip-commandset; 5521 } 5522 } 5523 augment "/fpcagent:configure/fpcagent:output/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:ports/fpcagent:instructions/fpcagent:instr-type" { 5524 case pmip-instr { 5525 uses fpc-pmip:pmip-commandset; 5526 } 5527 } 5529 augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:instructions/fpcagent:instr-type" { 5530 case pmip-instr { 5531 uses fpc-pmip:pmip-commandset; 5532 } 5533 } 5534 augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:contexts/fpcagent:instructions/fpcagent:instr-type" { 5535 case pmip-instr { 5536 uses fpc-pmip:pmip-commandset; 5537 } 5538 } 5539 augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:contexts/fpcagent:instructions/fpcagent:instr-type" { 5540 case pmip-instr { 5541 uses fpc-pmip:pmip-commandset; 5542 } 5543 } 5545 augment "/fpcagent:configure-bundles/fpcagent:input/fpcagent:bundles/fpcagent:op_body/fpcagent:create_or_update/fpcagent:ports/fpcagent:instructions/fpcagent:instr-type" { 5546 case pmip-instr { 5547 uses fpc-pmip:pmip-commandset; 5548 } 5549 } 5550 augment "/fpcagent:configure-bundles/fpcagent:output/fpcagent:bundles/fpcagent:result-type/fpcagent:create-or-update-success/fpcagent:ports/fpcagent:instructions/fpcagent:instr-type" { 5551 case pmip-instr { 5552 uses fpc-pmip:pmip-commandset; 5553 } 5554 } 5555 } 5557 Figure 32: FPC YANG FPC / PMIP Integration 5559 A.1.7. FPC Policy Extension YANG Model 5561 module ietf-dmm-fpc-policyext { 5562 namespace "urn:ietf:params:xml:ns:yang:fpcpolicyext"; 5563 prefix fpcpolicyext; 5565 import ietf-dmm-fpcbase { prefix fpcbase; revision-date 2016-08-03; } 5566 import ietf-dmm-fpcagent { prefix fpcagent; revision-date 2016-08-03; } 5567 import ietf-inet-types { prefix inet; revision-date 2013-07-15; } 5569 organization "IETF DMM Working Group"; 5570 contact "Satoru Matsushima "; 5572 description 5573 "This module contains YANG definition for 5574 Forwarding Policy Configuration Protocol (FPCP) 5575 common Policy Action and Descriptor extensions"; 5577 revision 2016-08-03 { 5578 description "Changes based on -04 version of FPC draft."; 5579 reference "draft-ietf-dmm-fpc-cpdp-04"; 5580 } 5582 identity service-function { 5583 base "fpcbase:fpc-descriptor-type"; 5584 description "Base Identifier for Service Functions."; 5585 } 5587 identity napt-service { 5588 base "service-function"; 5589 } 5590 grouping simple-nat { 5591 leaf outbound-nat-address { 5592 type inet:ip-address; 5593 } 5594 } 5596 identity nat-service { 5597 base "service-function"; 5598 } 5599 grouping simple-napt { 5600 leaf source-port { 5601 type inet:port-number; 5602 } 5603 leaf outbound-napt-address { 5604 type inet:ip-address; 5605 } 5606 leaf destination-port { 5607 type inet:port-number; 5608 } 5609 } 5611 identity copy-forward { 5612 base "fpcbase:fpc-descriptor-type"; 5613 description "Copies a packet then forwards to a specific destination"; 5614 } 5615 grouping copy-forward { 5616 container destination { 5617 choice value { 5618 case port-ref { 5619 leaf port-ref { 5620 type fpcbase:fpc-port-id; 5621 } 5622 } 5623 case context-ref { 5624 leaf context-ref { 5625 type fpcbase:fpc-context-id; 5626 } 5627 } 5628 } 5629 } 5630 } 5632 augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-policy/fpcagent:actions/fpcagent:action-value" { 5633 case simple-nat { 5634 uses fpcpolicyext:simple-nat; 5635 } 5636 case simple-napt { 5637 uses fpcpolicyext:simple-napt; 5638 } 5639 case copy-forward { 5640 uses fpcpolicyext:copy-forward; 5641 } 5642 } 5644 grouping prefix-traffic-descriptor { 5645 description 5646 "Traffic descriptor group collects parameters to 5647 identify target traffic flow. It represents 5648 source/destination as IP prefixes"; 5650 leaf destination-ip { 5651 type inet:ip-prefix; 5652 description "Rule of destination IP"; 5653 } 5654 leaf source-ip { 5655 type inet:ip-prefix; 5656 description "Rule of source IP"; 5657 } 5658 } 5660 augment "/fpcagent:tenants/fpcagent:tenant/fpcagent:fpc-policy/fpcagent:descriptors/fpcagent:descriptor-value" { 5661 case prefix-descriptor { 5662 uses fpcpolicyext:prefix-traffic-descriptor; 5663 } 5664 } 5665 } 5667 Figure 33: FPC YANG 3GPP FPC Policy Extensions 5669 A.2. FPC Agent Information Model YANG Tree 5671 This section only shows the YANG tree for the information model. 5673 module: ietf-dmm-fpcagent 5674 +--rw tenants 5675 | +--rw tenant* [tenant-id] 5676 | +--rw tenant-id fpcbase:fpc-identity 5677 | +--rw fpc-policy 5678 | | +--rw policy-groups* [policy-group-id] 5679 | | | +--rw policy-group-id fpcbase:fpc-policy-group-id 5680 | | | +--rw policies* fpcbase:fpc-policy-id 5681 | | +--rw policies* [policy-id] 5682 | | | +--rw policy-id fpcbase:fpc-policy-id 5683 | | | +--rw rules* [order] 5684 | | | +--rw order uint32 5685 | | | +--rw descriptors* [descriptor-id] 5686 | | | | +--rw descriptor-id fpcbase:fpc-identity 5687 | | | | +--rw direction? fpc-direction 5688 | | | +--rw actions* [action-id] 5689 | | | +--rw order? uint32 5690 | | | +--rw action-id fpcbase:fpc-action-id-type 5691 | | +--rw descriptors* [descriptor-id] 5692 | | | +--rw descriptor-id fpcbase:fpc-identity 5693 | | | +--rw descriptor-type identityref 5694 | | | +--rw (descriptor-value)? 5695 | | | +--:(all-traffic) 5696 | | | +--rw all-traffic? empty 5697 | | +--rw actions* [action-id] 5698 | | +--rw action-id fpcbase:fpc-action-id-type 5699 | | +--rw action-type identityref 5700 | | +--rw (action-value)? 5701 | | +--:(drop) 5702 | | +--rw drop? empty 5703 | +--ro fpc-mobility 5704 | | +--ro contexts* [context-id] 5705 | | | +--ro context-id fpcbase:fpc-context-id 5706 | | | +--ro ports* fpcbase:fpc-port-id 5707 | | | +--ro dpn-group? fpcbase:fpc-dpn-group-id 5708 | | | +--ro delegating-ip-prefixes* inet:ip-prefix 5709 | | | +--ro ul {fpcbase:fpc-basic-agent}? 5710 | | | | +--ro tunnel-local-address? inet:ip-address 5711 | | | | +--ro tunnel-remote-address? inet:ip-address 5712 | | | | +--ro tunnel-mtu-size? uint32 5713 | | | | +--ro mobility-tunnel-parameters 5714 | | | | | +--ro (profile-parameters)? 5715 | | | | | +--:(nothing) 5716 | | | | | +--ro none? empty 5717 | | | | +--ro nexthop 5718 | | | | | +--ro nexthop-type? identityref 5719 | | | | | +--ro (nexthop-value)? 5720 | | | | | +--:(ip) 5721 | | | | | | +--ro ip? inet:ip-address 5722 | | | | | +--:(servicepath) 5723 | | | | | +--ro servicepath? fpcbase:fpcp-service-path-id 5724 | | | | +--ro qos-profile-parameters 5725 | | | | | +--ro qos-type? identityref 5726 | | | | | +--ro (value)? 5727 | | | | +--ro dpn-parameters 5728 | | | | +--ro vendor-parameters* [vendor-id vendor-type] 5729 | | | | +--ro vendor-id fpcbase:fpc-identity 5730 | | | | +--ro vendor-type identityref 5731 | | | | +--ro (value)? 5732 | | | | +--:(empty-type) 5733 | | | | +--ro empty-type? empty 5734 | | | +--ro dl {fpcbase:fpc-basic-agent}? 5735 | | | | +--ro tunnel-local-address? inet:ip-address 5736 | | | | +--ro tunnel-remote-address? inet:ip-address 5737 | | | | +--ro tunnel-mtu-size? uint32 5738 | | | | +--ro mobility-tunnel-parameters 5739 | | | | | +--ro (profile-parameters)? 5740 | | | | | +--:(nothing) 5741 | | | | | +--ro none? empty 5742 | | | | +--ro nexthop 5743 | | | | | +--ro nexthop-type? identityref 5744 | | | | | +--ro (nexthop-value)? 5745 | | | | | +--:(ip) 5746 | | | | | | +--ro ip? inet:ip-address 5747 | | | | | +--:(servicepath) 5748 | | | | | +--ro servicepath? fpcbase:fpcp-service-path-id 5749 | | | | +--ro qos-profile-parameters 5750 | | | | | +--ro qos-type? identityref 5751 | | | | | +--ro (value)? 5752 | | | | +--ro dpn-parameters 5753 | | | | +--ro vendor-parameters* [vendor-id vendor-type] 5754 | | | | +--ro vendor-id fpcbase:fpc-identity 5755 | | | | +--ro vendor-type identityref 5756 | | | | +--ro (value)? 5757 | | | | +--:(empty-type) 5758 | | | | +--ro empty-type? empty 5759 | | | +--ro dpns* [dpn-id direction] {fpcbase:fpc-multi-dpn}? 5760 | | | | +--ro dpn-id fpcbase:fpc-dpn-id 5761 | | | | +--ro direction fpcbase:fpc-direction 5762 | | | | +--ro tunnel-local-address? inet:ip-address 5763 | | | | +--ro tunnel-remote-address? inet:ip-address 5764 | | | | +--ro tunnel-mtu-size? uint32 5765 | | | | +--ro mobility-tunnel-parameters 5766 | | | | | +--ro (profile-parameters)? 5767 | | | | | +--:(nothing) 5768 | | | | | +--ro none? empty 5769 | | | | +--ro nexthop 5770 | | | | | +--ro nexthop-type? identityref 5771 | | | | | +--ro (nexthop-value)? 5772 | | | | | +--:(ip) 5773 | | | | | | +--ro ip? inet:ip-address 5774 | | | | | +--:(servicepath) 5775 | | | | | +--ro servicepath? fpcbase:fpcp-service-path-id 5776 | | | | +--ro qos-profile-parameters 5777 | | | | | +--ro qos-type? identityref 5778 | | | | | +--ro (value)? 5779 | | | | +--ro dpn-parameters 5780 | | | | +--ro vendor-parameters* [vendor-id vendor-type] 5781 | | | | +--ro vendor-id fpcbase:fpc-identity 5782 | | | | +--ro vendor-type identityref 5783 | | | | +--ro (value)? 5784 | | | | +--:(empty-type) 5785 | | | | +--ro empty-type? empty 5786 | | | +--ro parent-context? fpcbase:fpc-context-id 5787 | | +--ro ports* [port-id] 5788 | | | +--ro port-id fpcbase:fpc-port-id 5789 | | | +--ro policy-groups* fpcbase:fpc-policy-group-id 5790 | | +--ro monitors* 5791 | | +--ro monitor-id? fpcbase:fpc-identity 5792 | | +--ro target? fpc-identity 5793 | | +--ro (event-config-value)? 5794 | | +--:(periodic-config) 5795 | | | +--ro period? uint32 5796 | | +--:(threshold-config) 5797 | | | +--ro lo-thresh? uint32 5798 | | | +--ro hi-thresh? uint32 5799 | | +--:(scheduled-config) 5800 | | | +--ro report-time? uint32 5801 | | +--:(events-config-ident) 5802 | | | +--ro event-identities* identityref 5803 | | +--:(events-config) 5804 | | +--ro event-ids* uint32 5805 | +--rw fpc-topology 5806 | +--rw domains* [domain-id] 5807 | | +--rw domain-id fpcbase:fpc-domain-id 5808 | | +--rw domain-name? string 5809 | | +--rw domain-type? string 5810 | | +--rw basename? fpcbase:fpc-identity {fpcagent:fpc-basename-registry}? 5811 | | +--rw base-state? string {fpcagent:fpc-basename-registry}? 5812 | | +--rw base-checkpoint? string {fpcagent:fpc-basename-registry}? 5813 | +--rw dpn-group-peers* [remote-dpn-group-id] {fpcbase:fpc-basic-agent}? 5814 | | +--rw remote-dpn-group-id fpcbase:fpc-dpn-group-id 5815 | | +--rw remote-mobility-profile? identityref 5816 | | +--rw remote-data-plane-role? identityref 5817 | | +--rw remote-endpoint-address? inet:ip-address 5818 | | +--rw local-endpoint-address? inet:ip-address 5819 | | +--rw tunnel-mtu-size? uint32 5820 | +--rw dpn-id? fpcbase:fpc-dpn-id {fpcbase:fpc-basic-agent}? 5821 | +--rw control-protocols* identityref {fpcbase:fpc-basic-agent}? 5822 | +--rw dpn-groups* [dpn-group-id] {fpcbase:fpc-multi-dpn}? 5823 | | +--rw dpn-group-id fpcbase:fpc-dpn-group-id 5824 | | +--rw data-plane-role? identityref 5825 | | +--rw access-type? identityref 5826 | | +--rw mobility-profile? identityref 5827 | | +--rw dpn-group-peers* [remote-dpn-group-id] 5828 | | | +--rw remote-dpn-group-id fpcbase:fpc-dpn-group-id 5829 | | | +--rw remote-mobility-profile? identityref 5830 | | | +--rw remote-data-plane-role? identityref 5831 | | | +--rw remote-endpoint-address? inet:ip-address 5832 | | | +--rw local-endpoint-address? inet:ip-address 5833 | | | +--rw tunnel-mtu-size? uint32 5834 | | +--rw domains* [domain-id] 5835 | | +--rw domain-id fpcbase:fpc-domain-id 5836 | | +--rw domain-name? string 5837 | | +--rw domain-type? string 5838 | | +--rw basename? fpcbase:fpc-identity {fpcagent:fpc-basename-registry}? 5839 | | +--rw base-state? string {fpcagent:fpc-basename-registry}? 5840 | | +--rw base-checkpoint? string {fpcagent:fpc-basename-registry}? 5841 | +--rw dpns* [dpn-id] {fpcbase:fpc-multi-dpn}? 5842 | +--rw dpn-id fpcbase:fpc-dpn-id 5843 | +--rw dpn-name? string 5844 | +--rw dpn-groups* fpcbase:fpc-dpn-group-id 5845 | +--rw node-reference? instance-identifier 5846 +--rw fpc-agent-info 5847 +--rw supported-features* string 5848 +--rw supported-events* [event] 5849 | +--rw event identityref 5850 | +--rw event-id? fpcbase:event-type-id 5851 +--rw supported-error-types* [error-type] 5852 +--rw error-type identityref 5853 +--rw error-type-id? fpcagent:error-type-id 5854 rpcs: ... 5856 Figure 34: YANG FPC Agent Tree 5858 Authors' Addresses 5860 Satoru Matsushima 5861 SoftBank 5862 1-9-1,Higashi-Shimbashi,Minato-Ku 5863 Tokyo 105-7322 5864 Japan 5866 Email: satoru.matsushima@g.softbank.co.jp 5868 Lyle Bertz 5869 6220 Sprint Parkway 5870 Overland Park KS, 66251 5871 USA 5873 Email: lyleb551144@gmail.com 5875 Marco Liebsch 5876 NEC Laboratories Europe 5877 NEC Europe Ltd. 5878 Kurfuersten-Anlage 36 5879 D-69115 Heidelberg 5880 Germany 5882 Phone: +49 6221 4342146 5883 Email: liebsch@neclab.eu 5885 Sri Gundavelli 5886 Cisco 5887 170 West Tasman Drive 5888 San Jose, CA 95134 5889 USA 5891 Email: sgundave@cisco.com 5892 Danny Moses 5894 Email: danny.moses@intel.com