idnits 2.17.00 (12 Aug 2021) /tmp/idnits33889/draft-penno-sfc-yang-13.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 24 instances of too long lines in the document, the longest one being 78 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 216 has weird spacing: '...ro name str...' == Line 246 has weird spacing: '...ro name str...' == Line 273 has weird spacing: '...ro name str...' == Line 506 has weird spacing: '...rw name str...' == Line 658 has weird spacing: '...ro name str...' == (3 more instances...) -- The document date (March 02, 2015) is 2637 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) == Missing Reference: 'RFC6020' is mentioned on line 105, but not defined == Missing Reference: 'RFC6241' is mentioned on line 107, but not defined == Unused Reference: 'RFC2616' is defined on line 2549, but no explicit reference was found in the text == Unused Reference: 'I-D.quinn-sfc-nsh' is defined on line 2565, but no explicit reference was found in the text ** Obsolete normative reference: RFC 2616 (Obsoleted by RFC 7230, RFC 7231, RFC 7232, RFC 7233, RFC 7234, RFC 7235) == Outdated reference: draft-ietf-sfc-architecture has been published as RFC 7665 == Outdated reference: draft-ietf-sfc-problem-statement has been published as RFC 7498 Summary: 2 errors (**), 0 flaws (~~), 13 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 SFC Netmod R. Penno 3 Internet-Draft P. Quinn 4 Intended status: Standards Track Cisco Systems 5 Expires: September 3, 2015 D. Zhou 6 J. Li 7 Intel Corporation 8 March 02, 2015 10 Yang Data Model for Service Function Chaining 11 draft-penno-sfc-yang-13 13 Abstract 15 This document defines a YANG data model that can be used to configure 16 and manage Service Function Chains. 18 Requirements Language 20 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 21 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 22 document are to be interpreted as described in RFC 2119 [RFC2119]. 24 Status of This Memo 26 This Internet-Draft is submitted in full conformance with the 27 provisions of BCP 78 and BCP 79. 29 Internet-Drafts are working documents of the Internet Engineering 30 Task Force (IETF). Note that other groups may also distribute 31 working documents as Internet-Drafts. The list of current Internet- 32 Drafts is at http://datatracker.ietf.org/drafts/current/. 34 Internet-Drafts are draft documents valid for a maximum of six months 35 and may be updated, replaced, or obsoleted by other documents at any 36 time. It is inappropriate to use Internet-Drafts as reference 37 material or to cite them other than as "work in progress." 39 This Internet-Draft will expire on September 3, 2015. 41 Copyright Notice 43 Copyright (c) 2015 IETF Trust and the persons identified as the 44 document authors. All rights reserved. 46 This document is subject to BCP 78 and the IETF Trust's Legal 47 Provisions Relating to IETF Documents 48 (http://trustee.ietf.org/license-info) in effect on the date of 49 publication of this document. Please review these documents 50 carefully, as they describe your rights and restrictions with respect 51 to this document. Code Components extracted from this document must 52 include Simplified BSD License text as described in Section 4.e of 53 the Trust Legal Provisions and are provided without warranty as 54 described in the Simplified BSD License. 56 Table of Contents 58 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 59 2. Definitions and Acronyms . . . . . . . . . . . . . . . . . . 3 60 3. Understanding SFC Yang Models . . . . . . . . . . . . . . . . 3 61 4. Service Function (SF) . . . . . . . . . . . . . . . . . . . . 4 62 4.1. Module Structure . . . . . . . . . . . . . . . . . . . . 4 63 4.2. Service Function Configuration Module . . . . . . . . . . 6 64 5. Service Function Type (SFT) . . . . . . . . . . . . . . . . . 11 65 5.1. Module Structure . . . . . . . . . . . . . . . . . . . . 11 66 5.2. Service Function Type Configuration Model . . . . . . . . 11 67 6. Service Function Chain (SFC) . . . . . . . . . . . . . . . . 14 68 6.1. Module Structure . . . . . . . . . . . . . . . . . . . . 14 69 6.2. Service Function Chain Configuration Model . . . . . . . 15 70 7. Service Function Path (SFP) . . . . . . . . . . . . . . . . . 19 71 7.1. Module Structure . . . . . . . . . . . . . . . . . . . . 19 72 7.2. Service Function Path Configuration Model . . . . . . . . 20 73 8. Service Function Forwarder (SFF) . . . . . . . . . . . . . . 24 74 8.1. Module Struture . . . . . . . . . . . . . . . . . . . . . 24 75 8.2. Service Function Forwarder Model . . . . . . . . . . . . 25 76 9. Service Function Forwarder Open vSwitch (SFF-OVS) . . . . . . 30 77 9.1. Module Structure . . . . . . . . . . . . . . . . . . . . 30 78 9.2. Service Function Forwarder OVS Model . . . . . . . . . . 30 79 10. Service Locator (SL) . . . . . . . . . . . . . . . . . . . . 32 80 10.1. Module Structure . . . . . . . . . . . . . . . . . . . . 32 81 10.2. Service Locator Module . . . . . . . . . . . . . . . . . 32 82 11. Rendered Service Path (RSP) . . . . . . . . . . . . . . . . . 36 83 11.1. Module Structure . . . . . . . . . . . . . . . . . . . . 36 84 11.2. Rendered Service Path Module . . . . . . . . . . . . . . 37 85 12. Service Function Classifier (SCF) . . . . . . . . . . . . . . 43 86 12.1. Module Structure . . . . . . . . . . . . . . . . . . . . 43 87 12.2. Service Function Classifier Module . . . . . . . . . . . 44 88 13. Service Function Description Monitor Report (SF-DESC-MON-RPT) 47 89 13.1. Module Structure . . . . . . . . . . . . . . . . . . . . 47 90 13.2. Service Function Description Monitor Report Module . . . 48 91 14. Service Function Description Monitor (SF-DESC-MON) . . . . . 52 92 14.1. Module Structure . . . . . . . . . . . . . . . . . . . . 52 93 14.2. Service Function Description Monitor Report Module . . . 52 94 15. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 53 95 16. Security Considerations . . . . . . . . . . . . . . . . . . . 53 96 17. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 53 97 18. Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 98 19. References . . . . . . . . . . . . . . . . . . . . . . . . . 56 99 19.1. Normative References . . . . . . . . . . . . . . . . . . 56 100 19.2. Informative References . . . . . . . . . . . . . . . . . 57 101 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 57 103 1. Introduction 105 YANG [RFC6020] is a data definition language that was introduced to 106 define the contents of a conceptual data store that allows networked 107 devices to be managed using NETCONF [RFC6241]. YANG is proving 108 relevant beyond its initial confines, as bindings to other interfaces 109 (e.g. ReST) and encodings other than XML (e.g. JSON) are being 110 defined. Furthermore, YANG data models can be used as the basis of 111 implementation for other interfaces, such as CLI and programmatic 112 APIs. 114 This document defines a YANG data model that can be used to configure 115 and manage Service Function Chains 117 2. Definitions and Acronyms 119 The reader should be familiar with the terms contained in 120 [I-D.ietf-sfc-architecture], [I-D.ietf-sfc-problem-statement] 121 ,[I-D.ietf-sfc-architecture] and [I-D.quinn-vxlan-gpe] 123 3. Understanding SFC Yang Models 125 There are two main models in SFC: service-function (SF) and service- 126 function-forwarder (SFF). Most other models are used or derived from 127 those models. SF describes a service function like firewall, napt44, 128 dpi, http-proxy, etc. SFF describes a forwarding element that moves 129 packets along a service path. A SFF to function only needs to be 130 able to associate a Service Path ID and SI to a next hop data plane 131 locator. 133 The service-locator model provides a centralized place to register 134 transport and endpoints used with SFFs and SFs. This allows reuse 135 across a large number of other models since in networking usually 136 data plane locators are widely used. Some examples of transport 137 types are GRE, VXLAN-GPE and the data plane locator are IP:port, 138 VLAN-ID and MPLS Label. This model is imported by SFF, SF and 139 Rendered Service Path (RSP) models. 141 Service Function Type model serves as a registry for SF types. The 142 model can be easily extended by anyone looking to define their own 143 service type. This model is imported by SF and Service Function 144 Chain (SFC). Since a SFC is an abstract order of service function 145 types, having a registry of types is important. Furthermore, when we 146 instantiate a SFP and RSP from a SFC we need to choose the actual SFs 147 that will be traversed by the packets and this requires us to know 148 the type associated with a Service Function. 150 A service function path (SFP) is an intermediate step between SFC and 151 RSP. It allows the user to provide input or constraints into the 152 construction of a RSP. This input ranges from nothing to specifying 153 the entire path. During RSP construction, the controller examines 154 the SFP and 'fill in the blanks'. 156 One of the most important configuration aspects of a SF is the data 157 plane locators. A SF's data plane locators indicates how the SF can 158 be reached. A SF can have multiple data plane locators of different 159 transport and types as specified in the service locator model. 161 A SFF has also can have multiple data plane locators that indicate 162 how it can be reached. It is very important when constructing a RSP 163 to pick SFFs that have data plane locators of the same transport and 164 type so that the path works. A SFF has an additional very important 165 configuration container, the service function dictionary. The 166 service function dictionary stores the SFF's view of the Service 167 Functions. It contains all SFs and their data plane locators. 169 Therefore the Service Function data plane locators and the SFF 170 service function dictionary constitute two pieces of a puzzle. If 171 they fit, it means they can be used in a path, otherwise they can 172 not. 174 The RSP model is the result of creating a Service Function Chain, 175 applying policies through the Service Function Path and finally 176 choosing a collection of (SFF, SF) tuples that meet these criteria. 177 The RSP is an operational model, meaning it can read but not changed. 179 4. Service Function (SF) 181 This module describe a Service Function, which is an essential 182 building block of other modules. 184 4.1. Module Structure 186 module: service-function 187 +--rw service-functions 188 | +--rw service-function* [name] 189 | +--rw name string 190 | +--rw type sfc-sft:service-function-type 191 | +--rw rest-uri? inet:uri 192 | +--rw ip-mgmt-address? inet:ip-address 193 | +--rw request_reclassification? boolean 194 | +--rw nsh-aware? boolean 195 | +--rw sf-data-plane-locator* [name] 196 | +--rw name string 197 | +--rw (locator-type) 198 | | +--:(ip) 199 | | | +--rw ip? inet:ip-address 200 | | | +--rw port? inet:port-number 201 | | +--:(lisp) 202 | | | +--rw eid? inet:ip-address 203 | | +--:(mac) 204 | | | +--rw mac? yang:mac-address 205 | | | +--rw vlan-id? uint16 206 | | +--:(function) 207 | | | +--rw function-name? string 208 | | +--:(mpls) 209 | | +--rw mpls-label? uint32 210 | +--rw transport? identityref 211 | +--rw service-function-forwarder? string 212 +--ro service-functions-state 213 +--ro service-function-state* [name] 214 +--ro name string 215 +--ro sf-service-path* [name] 216 +--ro name string 217 rpcs: 218 +---x delete-all-service-function 219 +---x put-service-function 220 | +--ro input 221 | +--ro name? string 222 | +--ro type sfc-sft:service-function-type 223 | +--ro rest-uri? inet:uri 224 | +--ro ip-mgmt-address? inet:ip-address 225 | +--ro request_reclassification? boolean 226 | +--ro nsh-aware? boolean 227 | +--ro sf-data-plane-locator* [name] 228 | +--ro name string 229 | +--ro (locator-type) 230 | | +--:(ip) 231 | | | +--ro ip? inet:ip-address 232 | | | +--ro port? inet:port-number 233 | | +--:(lisp) 234 | | | +--ro eid? inet:ip-address 235 | | +--:(mac) 236 | | | +--ro mac? yang:mac-address 237 | | | +--ro vlan-id? uint16 238 | | +--:(function) 239 | | | +--ro function-name? string 240 | | +--:(mpls) 241 | | +--ro mpls-label? uint32 242 | +--ro transport? identityref 243 | +--ro service-function-forwarder? string 244 +---x read-service-function 245 | +--ro input 246 | | +--ro name string 247 | +--ro output 248 | +--ro name? string 249 | +--ro type sfc-sft:service-function-type 250 | +--ro rest-uri? inet:uri 251 | +--ro ip-mgmt-address? inet:ip-address 252 | +--ro request_reclassification? boolean 253 | +--ro nsh-aware? boolean 254 | +--ro sf-data-plane-locator* [name] 255 | +--ro name string 256 | +--ro (locator-type) 257 | | +--:(ip) 258 | | | +--ro ip? inet:ip-address 259 | | | +--ro port? inet:port-number 260 | | +--:(lisp) 261 | | | +--ro eid? inet:ip-address 262 | | +--:(mac) 263 | | | +--ro mac? yang:mac-address 264 | | | +--ro vlan-id? uint16 265 | | +--:(function) 266 | | | +--ro function-name? string 267 | | +--:(mpls) 268 | | +--ro mpls-label? uint32 269 | +--ro transport? identityref 270 | +--ro service-function-forwarder? string 271 +---x delete-service-function 272 +--ro input 273 +--ro name string 275 4.2. Service Function Configuration Module 277 file "service-function@2014-07-01.yang" 279 module service-function { 281 namespace "urn:cisco:params:xml:ns:yang:sfc-sf"; 283 prefix sfc-sf; 285 import ietf-inet-types { prefix inet; } 286 import ietf-yang-types { prefix yang; } 287 import service-function-type {prefix sfc-sft;} 288 import service-locator {prefix sfc-sl;} 289 organization "Cisco Systems, Inc."; 290 contact "Reinaldo Penno "; 292 description 293 "This module contains a collection of YANG definitions for 294 managing service function. 296 It follows closely the constructs of 297 http://tools.ietf.org/html/draft-ietf-netmod-interfaces-cfg-12 299 Copyright (c) 2013 IETF Trust and the persons identified as 300 authors of the code. All rights reserved. 302 Redistribution and use in source and binary forms, with or 303 without modification, is permitted pursuant to, and subject 304 to the license terms contained in, the Simplified BSD License 305 set forth in Section 4.c of the IETF Trust's Legal Provisions 306 Relating to IETF Documents 307 (http://trustee.ietf.org/license-info). 309 This version of this YANG module is part of RFC XXXX; see 310 the RFC itself for full legal notices."; 312 // RFC Ed.: replace XXXX with actual RFC number and remove this 313 // note. 315 // RFC Ed.: update the date below with the date of RFC publication 316 // and remove this note. 318 revision 2014-07-01 { 319 description 320 "Changes based on Opendaylight Testing."; 321 } 323 typedef service-function-ref { 324 type leafref { 325 path "/sfc-sf:service-functions/sfc-sf:service-function/" 326 + "sfc-sf:name"; 327 } 328 description 329 "This type is used by data models that need to reference 330 configured service functions."; 331 } 333 grouping service-function-entry { 334 description 335 "This group bundles together all information related to a 336 single service function"; 337 leaf name { 338 type string; 339 description 340 "The name of the service function."; 341 } 342 leaf type { 343 type sfc-sft:service-function-type; 344 mandatory true; 345 description 346 "Service Function Type from service-function-type yang 347 model"; 348 } 349 leaf rest-uri { 350 description "URI of REST based management"; 351 type inet:uri; 352 } 353 leaf ip-mgmt-address { 354 type inet:ip-address; 355 description 356 "The IP and port used to configure this service-function"; 357 } 358 leaf request_reclassification { 359 description "This leaf determines whether SF can request 360 reclassification by the SFF"; 361 type boolean; 362 } 363 leaf nsh-aware { 364 type boolean; 365 description "Whether this SF can process NSH headers"; 366 } 368 list sf-data-plane-locator { 369 description 370 "A network data-plane locator"; 371 key "name"; 372 leaf name { 373 type string; 374 description 375 "A unique string that represents this 376 data-plane-locator"; 377 } 378 uses sfc-sl:data-plane-locator; 379 leaf service-function-forwarder { 380 type string; 381 description 382 "The service function forwarder associated with this 383 locator"; 384 } 385 } 386 } 388 container service-functions { 389 description 390 "A function that is responsible for specific 391 treatment of received packets. A Service Function can act at 392 various layers of a protocol stack (e.g., at the network layer 393 or other OSI layers). A Service Function can be a virtual 394 element or be embedded in a physical network element. One of 395 multiple Service Functions can be embedded in the same network 396 element. Multiple occurrences of the Service Function can be 397 enabled in the same administrative domain. 399 One or more Service Functions can be involved in the delivery 400 of added-value services. A non-exhaustive list of Service 401 Functions includes: firewalls, WAN and application 402 acceleration, Deep Packet Inspection (DPI),a LI (Lawful 403 Intercept) module, server load balancers, NAT44 [RFC3022], 404 NAT64 [RFC6146], NPTv6 [RFC6296], HOST_ID injection, HTTP 405 Header Enrichment functions, TCP optimizer, etc. 407 An SF may be SFC encapsulation aware, that is it receives, and 408 acts on information in the SFC encapsulation, or unaware in 409 which case data forwarded to the service does not contain the 410 SFC encapsulation."; 412 list service-function { 413 description 414 "This list holds configuration data for all service functions 415 in the domain"; 416 key "name"; 417 uses service-function-entry; 418 } 419 } 421 container service-functions-state { 422 description 423 "This container hold operational state for all service 424 functions"; 425 config false; 426 list service-function-state { 427 description 428 "This list holds operational data for all service functions 429 in the domain"; 430 key "name"; 431 leaf name { 432 type string; 433 description 434 "the name of the service function"; 435 } 436 list sf-service-path { 437 key "name"; 438 leaf name { 439 type string; 440 description 441 "The name of the Service Path"; 442 } 443 description 444 "A list of all service function paths that contain this 445 service function"; 446 } 447 } 448 } 450 rpc delete-all-service-function { 451 description 452 "Deletes all service functions"; 453 } 455 rpc put-service-function { 456 description 457 "Creates a service function"; 458 input { 459 uses service-function-entry; 460 } 461 } 462 rpc read-service-function { 463 description 464 "Reads a service function"; 465 input { 466 leaf name { 467 type string; 468 mandatory true; 469 description "The name of the service function."; 470 } 471 } 472 output { 473 uses service-function-entry; 474 } 475 } 476 rpc delete-service-function { 477 description 478 "Deletes a service function"; 480 input { 481 leaf name { 482 type string; 483 mandatory true; 484 description "The name of the service function."; 485 } 486 } 487 } 488 } 490 492 5. Service Function Type (SFT) 494 This module holds one list for each service function type found in 495 the system. Each one of these lists has the name of all service 496 functions configured on the system of that particular type. This 497 allows finding a service function of a given type simple. 499 5.1. Module Structure 501 module: service-function-type 502 +--rw service-function-types 503 +--rw service-function-type* [type] 504 +--rw type service-function-type 505 +--rw sft-service-function-name* [name] 506 +--rw name string 508 5.2. Service Function Type Configuration Model 510 file "service-function-type@2014-07-01.yang" 512 module service-function-type { 514 namespace "urn:cisco:params:xml:ns:yang:sfc-sft"; 516 prefix sfc-sft; 518 import ietf-inet-types { prefix inet; } 519 import ietf-yang-types { prefix yang; } 521 organization "Cisco Systems, Inc."; 522 contact "Reinaldo Penno "; 524 description 525 "This module contains a collection of YANG definitions for 526 managing service function types. 528 It follows closely the constructs of 529 http://tools.ietf.org/html/draft-ietf-netmod-interfaces-cfg-12 531 Copyright (c) 2013 IETF Trust and the persons identified as 532 authors of the code. All rights reserved. 534 Redistribution and use in source and binary forms, with or 535 without modification, is permitted pursuant to, and subject 536 to the license terms contained in, the Simplified BSD License 537 set forth in Section 4.c of the IETF Trust's Legal Provisions 538 Relating to IETF Documents 539 (http://trustee.ietf.org/license-info). 541 This version of this YANG module is part of RFC XXXX; see 542 the RFC itself for full legal notices."; 544 // RFC Ed.: replace XXXX with actual RFC number and remove this 545 // note. 547 // RFC Ed.: update the date below with the date of RFC publication 548 // and remove this note. 550 revision 2014-07-01 { 551 description 552 "Changes based on Opendaylight Testing."; 553 } 555 // Service Function 557 // Service Function Type definitions 559 identity service-function-type-identity { 560 description 561 "Base identity from which specific service function 562 types are derived."; 563 } 565 identity firewall { 566 base "service-function-type-identity"; 567 description "Firewall"; 568 } 570 identity dpi { 571 base "service-function-type-identity"; 572 description "Deep Packet Inspection"; 573 } 575 identity napt44 { 576 base "service-function-type-identity"; 577 description "Network Address and Port Translation 44"; 578 } 580 identity qos { 581 base "service-function-type-identity"; 582 description "Quality of Service"; 583 } 585 identity ids { 586 base "service-function-type-identity"; 587 description "Intrusion Detection System"; 588 } 590 identity http-header-enrichment { 591 base "service-function-type-identity"; 592 description "HTTP services that add HTTP headers for charging and adding subscriber metadata"; 593 } 595 typedef service-function-type { 596 type identityref { 597 base "service-function-type-identity"; 598 } 599 description "This type is used to reference all 600 registered service function types"; 601 } 603 container service-function-types { 604 description 605 "A list of Service function Types. For each type we keep 606 a list of Service Functions"; 608 list service-function-type { 609 key "type"; 610 leaf type { 611 type service-function-type; 612 description 613 "The service function type"; 614 } 615 list sft-service-function-name { 616 key "name"; 617 leaf name { 618 type string; 619 description 620 "The name of the service function."; 621 } 622 description 623 "The list of all service functions of a specific type"; 624 } 625 description 626 "A list of all service types. Each service-type entry holds 627 a list of all service functions of the type"; 628 } 629 } 630 } 632 634 6. Service Function Chain (SFC) 636 This model describes a service function chain which is basically an 637 ordered list of services. But a service function chain does not 638 specify exactly which service (firewal1 vs. firewall2) will be used 639 to actually process packets. 641 6.1. Module Structure 642 module: service-function-chain 643 +--rw service-function-chains 644 | +--rw service-function-chain* [name] 645 | +--rw name string 646 | +--rw symmetric? boolean 647 | +--rw sfc-service-function* [name] 648 | +--rw name string 649 | +--rw type sfc-sft:service-function-type 650 | +--rw order? uint8 651 +--ro service-function-chains-state 652 +--ro service-function-chain-state* [name] 653 +--ro name string 654 +--ro sfc-service-function-path* string 655 rpcs: 656 +---x instantiate-service-function-chain 657 | +--ro input 658 | | +--ro name string 659 | +--ro output 660 | +--ro name? string 661 +---x put-service-function-chains 662 +--ro input 663 +--ro service-function-chain* [name] 664 +--ro name string 665 +--ro symmetric? boolean 666 +--ro sfc-service-function* [name] 667 +--ro name string 668 +--ro type sfc-sft:service-function-type 669 +--ro order? uint8 671 6.2. Service Function Chain Configuration Model 673 file "service-function-chain@2014-07-01.yang" 675 module service-function-chain { 677 namespace "urn:cisco:params:xml:ns:yang:sfc-sfc"; 679 prefix sfc-sfc; 681 import ietf-inet-types { prefix inet; } 682 import ietf-yang-types { prefix yang; } 683 import service-function {prefix sfc-sf; } 684 import service-function-type {prefix sfc-sft;} 686 organization "Cisco Systems, Inc."; 687 contact "Reinaldo Penno "; 688 description 689 "This module contains a collection of YANG definitions for 690 managing service function chains. 692 Copyright (c) 2013 IETF Trust and the persons identified as 693 authors of the code. All rights reserved. 695 Redistribution and use in source and binary forms, with or 696 without modification, is permitted pursuant to, and subject 697 to the license terms contained in, the Simplified BSD License 698 set forth in Section 4.c of the IETF Trust's Legal Provisions 699 Relating to IETF Documents 700 (http://trustee.ietf.org/license-info). 702 This version of this YANG module is part of RFC XXXX; see 703 the RFC itself for full legal notices."; 705 // RFC Ed.: replace XXXX with actual RFC number and remove this 706 // note. 708 // RFC Ed.: update the date below with the date of RFC publication 709 // and remove this note. 711 revision 2014-07-01 { 712 description 713 "Revised based on Opendaylight Project feedback"; 714 } 716 grouping service-function-chain-grouping { 717 list service-function-chain { 718 description 719 "A list that holds all service function chains in the 720 domain"; 721 key "name"; 722 leaf name { 723 type string; 724 description 725 "the name of the service function chain"; 726 } 727 leaf symmetric { 728 type boolean; 729 default false; 730 description 731 "If the chain is symmetric we will create two service 732 paths, one ingress and another egress. Packets traverse 733 the egress service path in the reverse order of the 734 ingress path"; 735 } 736 list sfc-service-function { 737 key "name"; 738 leaf name { 739 type string; 740 description 741 "A unique handle that describes the service function 742 that will be chosen for this type, such as 743 ingress-dpi. This is not the service function name"; 744 } 745 leaf type { 746 type sfc-sft:service-function-type; 747 mandatory true; 748 description 749 "Service Function Type from service-function-type.yang"; 750 } 751 leaf order { 752 type uint8; 753 } 754 ordered-by user; 755 description 756 "A list of service functions that compose the service 757 chain"; 758 } 759 } 760 description 761 "This group bundles together all service function chains in the 762 domain"; 763 } 765 // Service Function Chains 767 container service-function-chains { 768 uses service-function-chain-grouping; 769 description 770 "A service Function chain defines an 771 abstract set of service functions and their ordering 772 constraints that must be applied to packets and/or frames 773 selected as a result of classification. The implied order 774 may not be a linear progression as the architecture allows 775 for nodes that copy to more than one branch, and also allows 776 for cases where there is flexibility in the order in which 777 services need to be applied. The term service chain is often 778 used as shorthand for service function chain."; 779 } 781 container service-function-chains-state { 782 config false; 783 list service-function-chain-state { 784 description 785 "A list that contains operational service function 786 chain state"; 787 key "name"; 788 leaf name { 789 type string; 790 description 791 "the name of the service function chain"; 792 } 793 leaf-list sfc-service-function-path { 794 type string; 795 description 796 "A list of all service function paths instantiated from 797 this chain"; 798 } 799 } 800 description 801 "This containers holds operational service function 802 chain state and their associated service path"; 803 } 805 // Remote procedure calls 807 // (main feature: instantiation of a SFC) 809 rpc instantiate-service-function-chain { 810 description 811 "Instantiates a single service function"; 812 input { 813 leaf name { 814 type string; 815 mandatory true; 816 description 817 "The name of the service function chain to be 818 instantiated."; 819 } 820 } 821 output { 822 leaf name { 823 type string; 824 description 825 "The name of the created service function path."; 826 } 827 } 828 } 830 // (RPC for testing) 831 rpc put-service-function-chains { 832 description 833 "Creates Service-Functions"; 834 input { 835 uses service-function-chain-grouping; 836 } 837 } 838 } 840 842 7. Service Function Path (SFP) 844 A Service Function Path is an instantiation of a service function 845 chain. It allows be user to provide constrains for the rendering of 846 the service path such as specific service-hops that need to be 847 visited, the transport encapsulation used in the overlay, whether 848 paths should be symmetric, amongst others. 850 7.1. Module Structure 852 module: service-function-path 853 +--rw service-function-paths 854 | +--rw service-function-path* [name] 855 | +--rw name string 856 | +--rw symmetric? boolean 857 | +--rw classifier? string 858 | +--rw symmetric-classifier? string 859 | +--rw context-metadata? sfc-md:context-metadata-ref 860 | +--rw variable-metadata? sfc-md:variable-metadata-ref 861 | +--rw service-path-hop* [hop-number] 862 | | +--rw hop-number uint8 863 | | +--rw service-function-name? string 864 | | +--rw service-function-forwarder? string 865 | | +--rw service-index? uint8 866 | +--rw service-chain-name string 867 | +--rw starting-index? uint8 868 | +--rw path-id? uint32 869 +--ro service-function-paths-state 870 +--ro service-function-path-state* [name] 871 +--ro name string 872 +--ro sfp-rendered-service-path* [name] 873 +--ro name string 875 7.2. Service Function Path Configuration Model 877 file "service-function-path@2014-07-01.yang" 879 module service-function-path { 881 namespace "urn:cisco:params:xml:ns:yang:sfc-sfp"; 883 prefix sfc-sfp; 885 import ietf-inet-types { prefix inet; } 886 import ietf-yang-types { prefix yang; } 887 import service-function {prefix sfc-sf; } 888 import service-function-metadata {prefix sfc-md; } 890 organization "Cisco Systems, Inc."; 891 contact "Reinaldo Penno "; 893 description 894 "This module contains a collection of YANG definitions for 895 managing service function chains. 897 Copyright (c) 2013 IETF Trust and the persons identified as 898 authors of the code. All rights reserved. 900 Redistribution and use in source and binary forms, with or 901 without modification, is permitted pursuant to, and subject 902 to the license terms contained in, the Simplified BSD License 903 set forth in Section 4.c of the IETF Trust's Legal Provisions 904 Relating to IETF Documents 905 (http://trustee.ietf.org/license-info). 907 This version of this YANG module is part of RFC XXXX; see 908 the RFC itself for full legal notices."; 910 // RFC Ed.: replace XXXX with actual RFC number and remove this 911 // note. 913 // RFC Ed.: update the date below with the date of RFC publication 914 // and remove this note. 916 revision 2014-07-01 { 917 description 918 "Changes based on Opendaylight Testing and IETF SFC ml."; 919 } 920 typedef service-function-path-ref { 921 type leafref { 922 path "/sfc-sfp:service-function-paths/" + 923 "sfc-sfp:service-function-path/sfc-sfp:name"; 924 } 925 description 926 "This type is used by data models that need to reference 927 configured service functions."; 928 } 930 // Service Function Path 932 container service-function-paths { 933 description 934 "The SFP provides a level of indirection 935 between the fully abstract notion of service chain as an 936 abstract sequence of functions to be delivered, and the 937 fully specified notion of exactly what SFF/SFs the packet 938 will visit when it actually traverses the network. By 939 allowing the control components to specify the use of this 940 level of indirection, the deployment may choose the degree 941 of SFF/SF selection authority that is delegated to the 942 network"; 943 list service-function-path { 944 description 945 "A list that holds configuration data for all SFPs in the 946 domain"; 947 key "name"; 948 leaf name { 949 type string; 950 description 951 "The name of this service function path"; 952 } 953 leaf symmetric { 954 type boolean; 955 default false; 956 description 957 "If the chain is symmetric we will create two service 958 paths, one ingress and another egress. Packets traverse 959 the egress service path in the reverse order of the 960 ingress path"; 961 } 962 leaf classifier { 963 type string; 964 description "The classifier responsible for directing" 965 + "packets to this service path"; 966 } 967 leaf symmetric-classifier { 968 type string; 969 description "The classifier responsible for directing" 970 + "packets to this service path"; 971 } 972 leaf context-metadata { 973 type sfc-md:context-metadata-ref; 974 description 975 "The name of the associated context metadata"; 976 } 977 leaf variable-metadata { 978 type sfc-md:variable-metadata-ref; 979 description 980 "The name of the associated variable metadata"; 981 } 982 list service-path-hop { 983 key "hop-number"; 984 leaf hop-number { 985 type uint8; 986 description 987 "A Monotonically increasing number"; 988 } 989 leaf service-function-name { 990 type string; 991 description 992 "Service Function name"; 993 } 994 leaf service-function-forwarder { 995 type string; 996 description 997 "Service Function Forwarder name"; 998 } 999 leaf service-index { 1000 type uint8; 1001 description 1002 "Provides location within the service path. 1003 Service index MUST be decremented by service functions 1004 or proxy nodes after performing required services. MAY 1005 be used in conjunction with service path for path 1006 selection. Service Index is also valuable when 1007 troubleshooting/reporting service paths. In addition to 1008 location within a path, SI can be used for loop 1009 detection."; 1010 } 1011 ordered-by user; 1012 description 1013 "A list of service functions that compose the 1014 service path"; 1015 } 1016 leaf service-chain-name { 1017 type string; 1018 mandatory true; 1019 description 1020 "The Service Function Chain used as blueprint for this 1021 path"; 1022 } 1023 leaf starting-index { 1024 type uint8; 1025 description 1026 "Starting service index"; 1027 } 1028 leaf path-id { 1029 type uint32 { 1030 range "0..16777216"; 1031 } 1032 description 1033 "Identifies a service path. 1034 Participating nodes MUST use this identifier for path 1035 selection. An administrator can use the service path 1036 value for reporting and troubleshooting packets along 1037 a specific path."; 1038 } 1039 } 1040 } 1042 container service-function-paths-state { 1043 description 1044 "This container hold operational state for all service 1045 function paths"; 1046 config false; 1047 list service-function-path-state { 1048 description 1049 "This list holds operational data for all service function 1050 paths in the domain"; 1051 key "name"; 1052 leaf name { 1053 type string; 1054 description 1055 "The name of the service function path"; 1056 } 1057 list sfp-rendered-service-path { 1058 key "name"; 1059 leaf name { 1060 type string; 1061 description 1062 "The name of the Rendered Service Path"; 1063 } 1064 description 1065 "A list of all rendered service paths instantiated 1066 from this service path"; 1067 } 1068 } 1069 } 1071 } 1073 1075 8. Service Function Forwarder (SFF) 1077 This module describes the configuration a SFF needs to have in order 1078 to route packets to the service functions it serves. the SFF needs to 1079 have a table with service function name and associated locator. The 1080 locator could be an IP address and port, an internal function call or 1081 some other unique identifier. 1083 8.1. Module Struture 1085 module: service-function-forwarder 1086 +--rw service-function-forwarders 1087 | +--rw service-function-forwarder* [name] 1088 | +--rw name string 1089 | +--rw service-node? string 1090 | +--rw ip-mgmt-address? inet:ip-address 1091 | +--rw rest-uri? inet:uri 1092 | +--rw sff-data-plane-locator* [name] 1093 | | +--rw name string 1094 | | +--rw data-plane-locator 1095 | | +--rw (locator-type) 1096 | | | +--:(ip) 1097 | | | | +--rw ip? inet:ip-address 1098 | | | | +--rw port? inet:port-number 1099 | | | +--:(lisp) 1100 | | | | +--rw eid? inet:ip-address 1101 | | | +--:(mac) 1102 | | | | +--rw mac? yang:mac-address 1103 | | | | +--rw vlan-id? uint16 1104 | | | +--:(function) 1105 | | | | +--rw function-name? string 1106 | | | +--:(mpls) 1107 | | | +--rw mpls-label? uint32 1108 | | +--rw transport? identityref 1109 | +--rw service-function-dictionary* [name] 1110 | +--rw name string 1111 | +--rw type? sfc-sft:service-function-type 1112 | +--rw sff-sf-data-plane-locator 1113 | | +--rw (locator-type) 1114 | | | +--:(ip) 1115 | | | | +--rw ip? inet:ip-address 1116 | | | | +--rw port? inet:port-number 1117 | | | +--:(lisp) 1118 | | | | +--rw eid? inet:ip-address 1119 | | | +--:(mac) 1120 | | | | +--rw mac? yang:mac-address 1121 | | | | +--rw vlan-id? uint16 1122 | | | +--:(function) 1123 | | | | +--rw function-name? string 1124 | | | +--:(mpls) 1125 | | | +--rw mpls-label? uint32 1126 | | +--rw transport? identityref 1127 | +--rw sff-interfaces* [sff-interface] 1128 | | +--rw sff-interface string 1129 | +--rw failmode? failmode-type 1130 +--ro service-function-forwarders-state 1131 +--ro service-function-forwarder-state* [name] 1132 +--ro name string 1133 +--ro sff-service-path* [name] 1134 +--ro name string 1136 8.2. Service Function Forwarder Model 1138 file "service-function-forwarder@2014-07-01.yang" 1140 module service-function-forwarder { 1142 namespace "urn:cisco:params:xml:ns:yang:sfc-sff"; 1144 prefix sfc-sff; 1146 import ietf-inet-types { prefix inet;} 1147 import ietf-yang-types { 1148 prefix "yang"; 1149 revision-date 2013-07-15; 1150 } 1151 import service-locator { prefix sfc-sl; } 1152 import service-function-type {prefix sfc-sft;} 1154 organization "Cisco Systems, Inc."; 1155 contact "Reinaldo Penno "; 1157 description 1158 "This module contains a collection of YANG definitions for 1159 managing service function forwarders. 1161 Copyright (c) 2013 IETF Trust and the persons identified as 1162 authors of the code. All rights reserved. 1164 Redistribution and use in source and binary forms, with or 1165 without modification, is permitted pursuant to, and subject 1166 to the license terms contained in, the Simplified BSD License 1167 set forth in Section 4.c of the IETF Trust's Legal Provisions 1168 Relating to IETF Documents 1169 (http://trustee.ietf.org/license-info). 1171 This version of this YANG module is part of RFC XXXX; see 1172 the RFC itself for full legal notices."; 1174 // RFC Ed.: replace XXXX with actual RFC number and remove this 1175 // note. 1177 // RFC Ed.: update the date below with the date of RFC publication 1178 // and remove this note. 1180 revision 2014-07-01 { 1181 description 1182 "Revision based on Opendaylight project feedback"; 1183 } 1185 // Failmode type definitions 1187 identity failmode-type-identity { 1188 description 1189 "Base identity from which specific failmode 1190 types are derived. Fail mode specifies the behavior 1191 when the interface does not have connectivity to the 1192 service node."; 1193 } 1195 typedef failmode-type { 1196 type identityref { 1197 base "failmode-type-identity"; 1198 } 1199 description "This type is used to reference all 1200 registered failmode types"; 1201 } 1202 identity close { 1203 base "failmode-type-identity"; 1204 description "When service-function can not reach service 1205 function, packets will be dropped"; 1206 } 1208 identity open { 1209 base "failmode-type-identity"; 1210 description "When service-function can not reach service 1211 function, packets will be forwarded"; 1212 } 1214 container service-function-forwarders { 1215 description 1216 "A service function forwarder is 1217 responsible for delivering traffic received from the SFC 1218 network forwarder to one or more connected service 1219 functions via information carried in the SFC encapsulation. 1220 "; 1221 list service-function-forwarder { 1222 description 1223 "A list that holds configuration of all SFFs in the domain"; 1224 key "name"; 1225 leaf name { 1226 type string; 1227 description 1228 "The unique name of this service function forwarder, such 1229 as SFF1"; 1230 } 1232 leaf service-node { 1233 type string; 1234 description "The service node that hosts this SFF"; 1235 } 1237 leaf ip-mgmt-address { 1238 type inet:ip-address; 1239 description 1240 "The IP and port used to configure this service-function-forwarder"; 1241 } 1243 leaf rest-uri { 1244 description "URI of REST based management"; 1245 type inet:uri; 1246 } 1248 list sff-data-plane-locator { 1249 description 1250 "A list of all data-plane-locators of this SFF."; 1251 key "name"; 1252 leaf name { 1253 type string; 1254 description 1255 "A unique string that represents this data-plane-locator"; 1256 } 1258 container data-plane-locator { 1259 description 1260 "This container holds configuration for the overlay data plane" 1261 + "locator used by this SFF. This could be VXLAN, GRE, etc"; 1262 uses sfc-sl:data-plane-locator; 1263 } 1264 } 1266 list service-function-dictionary { 1267 key "name"; 1268 leaf name { 1269 type string; 1270 description 1271 "The name of the service function."; 1272 } 1273 leaf type { 1274 type sfc-sft:service-function-type; 1275 description 1276 "Service Function Type from service-function-type yang 1277 model"; 1278 } 1279 container sff-sf-data-plane-locator { 1280 description 1281 "The SFF uses this data plane locator when sending packets to the" 1282 + "associated service function"; 1283 uses sfc-sl:data-plane-locator; 1284 } 1285 list sff-interfaces { 1286 key "sff-interface"; 1287 leaf sff-interface { 1288 type string; 1289 description 1290 "An individual interface on the SFF connected to the 1291 SF"; 1292 } 1293 description 1294 "A list of interfaces on the SFF which are connected to this SF," 1295 + "usually one 1 or 2 elements"; 1296 } 1297 leaf failmode { 1298 type failmode-type; 1299 description 1300 "This leaf defines what should the SFF do if it can not 1301 send packets to the SF"; 1303 } 1304 description 1305 "A list of all Service Functions attached to this SFF."; 1306 } 1307 } 1308 } 1310 container service-function-forwarders-state { 1311 description 1312 "This container hold operational state for all service 1313 function forwarders"; 1314 config false; 1315 list service-function-forwarder-state { 1316 description 1317 "This list holds operational data for all service functions 1318 forwarders in the domain"; 1319 key "name"; 1320 leaf name { 1321 type string; 1322 description 1323 "the name of the service function forwarder"; 1324 } 1325 list sff-service-path { 1326 key "name"; 1327 leaf name { 1328 type string; 1329 description 1330 "The name of the Service Path"; 1331 } 1332 description 1333 "A list of all service function paths that contain this 1334 service function forwarder"; 1335 } 1336 } 1337 } 1338 } 1339 1341 9. Service Function Forwarder Open vSwitch (SFF-OVS) 1343 This module augments the SFF model for Open vSwitch, meaning when 1344 Open vSwitche (OVS) bridges are used as SFF. 1346 9.1. Module Structure 1348 module: service-function-forwarder-ovs 1349 augment /sfc-sff:service-function-forwarders/sfc-sff:service-function-forwarder/sfc-sff:sff-data-plane-locator: 1350 +--rw ovs-bridge 1351 +--rw bridge-name? string 1352 +--rw uuid? yang:uuid 1353 +--rw external-ids* [name] 1354 | +--rw name string 1355 | +--rw value? string 1356 +--rw rest-uri? inet:uri 1357 augment /sfc-sff:service-function-forwarders/sfc-sff:service-function-forwarder/sfc-sff:service-function-dictionary/sfc-sff:sff-sf-data-plane-locator: 1358 +--rw ovs-bridge 1359 +--rw bridge-name? string 1360 +--rw uuid? yang:uuid 1361 +--rw external-ids* [name] 1362 | +--rw name string 1363 | +--rw value? string 1364 +--rw rest-uri? inet:uri 1366 9.2. Service Function Forwarder OVS Model 1368 file "service-function-forwarder-ovs@2014-07-01.yang" 1370 module service-function-forwarder-ovs { 1371 yang-version 1; 1373 namespace "urn:cisco:params:xml:ns:yang:sfc-sff-ovs"; 1375 prefix sfc-sff-ovs; 1377 import service-function-forwarder { 1378 prefix "sfc-sff"; 1379 } 1381 import ietf-inet-types { 1382 prefix "inet"; 1383 } 1384 import ietf-yang-types { 1385 prefix "yang"; 1386 revision-date 2013-07-15; 1387 } 1389 organization "Cisco Systems, Inc."; 1390 contact "Reinaldo Penno "; 1392 revision 2014-07-01 { 1393 description "Augmentation of SFF for OVS"; 1394 } 1396 grouping bridge { 1397 container ovs-bridge { 1398 leaf bridge-name { 1399 description "Open vSwitch bridge name. In Openstack it is usually" 1400 + "br-tun or br-int depending if it is used in the overlay or" 1401 + "facing virtual machines respectively"; 1402 type string; 1403 } 1404 leaf uuid { 1405 description "Open vSwitch bridge UUID"; 1406 type yang:uuid; 1407 } 1408 list external-ids { 1409 description 1410 "The list of external ids associated with this 1411 bridge"; 1412 key "name"; 1413 leaf name { 1414 type string; 1415 description 1416 "A unique string that represents this external-id such 1417 as attached-mac"; 1418 } 1419 leaf value { 1420 type string; 1421 description 1422 "A unique string that represents the value of the 1423 external-id such as fa:16:3e:56:47:10"; 1424 } 1425 } 1426 } 1427 } 1429 augment "/sfc-sff:service-function-forwarders/" 1430 + "sfc-sff:service-function-forwarder/" 1431 + "sfc-sff:sff-data-plane-locator" { 1433 uses bridge; 1434 } 1436 augment "/sfc-sff:service-function-forwarders/" 1437 + "sfc-sff:service-function-forwarder/" 1438 + "sfc-sff:service-function-dictionary/" 1439 + "sfc-sff:sff-sf-data-plane-locator" { 1441 uses bridge; 1442 } 1443 } 1445 1447 10. Service Locator (SL) 1449 This module provides a single point of registration for all network 1450 locators types used in Services Function Chaining. the model can be 1451 augmented at will with locators appropriate for each use-case. 1453 10.1. Module Structure 1455 10.2. Service Locator Module 1457 file "service-locator@2014-07-01.yang" 1459 module service-locator { 1461 namespace "urn:cisco:params:xml:ns:yang:sfc-sl"; 1463 prefix sfc-sl; 1465 import ietf-inet-types { prefix inet; } 1466 import ietf-yang-types { prefix yang; } 1468 organization "Cisco Systems, Inc."; 1469 contact "Reinaldo Penno "; 1471 description 1472 "This module contains a collection of YANG definitions for 1473 managing service locators. Service locators are used as 1474 data plane network destinations for Service Functions and 1475 Service Function Forwarders 1476 It follows closely the constructs of 1477 http://tools.ietf.org/html/draft-ietf-netmod-interfaces-cfg-12 1479 Copyright (c) 2013 IETF Trust and the persons identified as 1480 authors of the code. All rights reserved. 1482 Redistribution and use in source and binary forms, with or 1483 without modification, is permitted pursuant to, and subject 1484 to the license terms contained in, the Simplified BSD License 1485 set forth in Section 4.c of the IETF Trust's Legal Provisions 1486 Relating to IETF Documents 1487 (http://trustee.ietf.org/license-info). 1489 This version of this YANG module is part of RFC XXXX; see 1490 the RFC itself for full legal notices."; 1492 // RFC Ed.: replace XXXX with actual RFC number and remove this 1493 // note. 1495 // RFC Ed.: update the date below with the date of RFC publication 1496 // and remove this note. 1498 revision 2014-07-01 { 1499 description 1500 "Changes based on Opendaylight Testing."; 1501 } 1503 // Locator definitions 1505 // Transport type definitions 1506 identity transport-type { 1507 description 1508 "Base identity from which specific transport types are 1509 derived."; 1510 } 1512 identity vxlan-gpe { 1513 base "sl-transport-type"; 1514 description "Programmable vxlan transport type"; 1515 } 1517 identity gre { 1518 base "sl-transport-type"; 1519 description "GRE transport type"; 1520 } 1522 identity mpls { 1523 base "sl-transport-type"; 1524 description "Multi Protocol Label Switching transport type"; 1525 } 1527 identity other { 1528 base "sl-transport-type"; 1529 description "unspecified transport type"; 1530 } 1532 identity sl-transport-type { 1533 base "transport-type"; 1534 description 1535 "This identity is used as a base for all transport 1536 types"; 1538 } 1540 grouping lisp-locator { 1541 description 1542 "Data plane-locator: Lisp Eid(IP)"; 1543 leaf eid { 1544 type inet:ip-address; 1545 description "Data-plane IP address"; 1546 } 1547 } 1549 grouping ip-port-locator { 1550 description 1551 "Data plane-locator: IP address and L4 port"; 1552 leaf ip { 1553 type inet:ip-address; 1554 description "Data-plane IP address"; 1555 } 1556 leaf port { 1557 type inet:port-number; 1558 description "Data-plane port number"; 1559 } 1560 } 1562 grouping mac-address-locator { 1563 description 1564 "Data plane-locator: mac address and optional vlan-id"; 1565 leaf mac { 1566 type yang:mac-address; 1567 description "Data-plane MAC address"; 1568 } 1569 leaf vlan-id { 1570 type uint16 { 1571 range "1..4094"; 1573 } 1574 description "Data-plane VLAN ID address"; 1575 } 1576 } 1578 grouping mpls-locator { 1579 description 1580 "Data plane-locator: MPLS"; 1581 leaf mpls-label { 1582 type uint32 { 1583 range "1..1048575"; 1584 } 1585 description "MPLS Label, 20 bits"; 1586 } 1587 } 1589 grouping function-locator { 1590 description 1591 "When SF is co-located with SFF, this could be the name of a 1592 function or method."; 1593 leaf function-name { 1594 type string; 1595 description "Function or method name"; 1596 } 1597 } 1599 grouping data-plane-locator { 1600 description 1601 "This group presents data-plane locator 1602 information for service function elements in the domain"; 1603 choice locator-type { 1604 mandatory true; 1605 case ip { 1606 uses ip-port-locator; 1607 } 1608 case lisp { 1609 uses lisp-locator; 1610 } 1611 case mac { 1612 uses mac-address-locator; 1613 } 1614 case function { 1615 uses function-locator; 1616 } 1617 case mpls { 1618 uses mpls-locator; 1619 } 1620 description "The collection of all possible data-plane 1621 locators. Only one can be chosen"; 1622 } 1623 leaf transport { 1624 type identityref { 1625 base sfc-sl:sl-transport-type; 1626 } 1627 } 1628 } 1629 } 1631 1633 11. Rendered Service Path (RSP) 1635 This module holds the actual service-hops a packet will traverse when 1636 forwarded through a specific service path. 1638 11.1. Module Structure 1639 module: rendered-service-path 1640 +--ro rendered-service-paths 1641 +--ro rendered-service-path* [name] 1642 +--ro name string 1643 +--ro parent-service-function-path? string 1644 +--ro context-metadata? sfc-md:context-metadata-ref 1645 +--ro variable-metadata? sfc-md:variable-metadata-ref 1646 +--ro rendered-service-path-hop* [hop-number] 1647 | +--ro hop-number uint8 1648 | +--ro service-function-name? string 1649 | +--ro service-function-forwarder? string 1650 | +--ro service-index? uint8 1651 +--ro service-chain-name string 1652 +--ro starting-index? uint8 1653 +--ro path-id? uint32 1654 rpcs: 1655 +---x delete-rendered-path 1656 | +--ro input 1657 | | +--ro name? string 1658 | +--ro output 1659 | +--ro result? boolean 1660 +---x create-rendered-path 1661 +--ro input 1662 | +--ro name? string 1663 | +--ro parent-service-function-path? string 1664 | +--ro symmetric? boolean 1665 | +--ro classifier? string 1666 | +--ro symmetric-classifier? string 1667 +--ro output 1668 +--ro result? boolean 1670 11.2. Rendered Service Path Module 1672 file "rendered-service-path.yang" 1674 module rendered-service-path { 1676 namespace "urn:cisco:params:xml:ns:yang:sfc-rsp"; 1678 prefix sfc-rsp; 1680 import ietf-inet-types { prefix inet; } 1681 import ietf-yang-types { prefix yang; } 1682 import service-function {prefix sfc-sf; } 1683 import service-function-metadata {prefix sfc-md; } 1684 import service-function-forwarder {prefix sfc-sff; } 1685 import service-locator {prefix sfc-sl;} 1686 organization "Cisco Systems, Inc."; 1687 contact "Reinaldo Penno "; 1689 description 1690 "This module contains a collection of YANG definitions to 1691 manage Rendered Service Paths. 1693 Copyright (c) 2013 IETF Trust and the persons identified as 1694 authors of the code. All rights reserved. 1696 Redistribution and use in source and binary forms, with or 1697 without modification, is permitted pursuant to, and subject 1698 to the license terms contained in, the Simplified BSD License 1699 set forth in Section 4.c of the IETF Trust's Legal Provisions 1700 Relating to IETF Documents 1701 (http://trustee.ietf.org/license-info). 1703 This version of this YANG module is part of RFC XXXX; see 1704 the RFC itself for full legal notices."; 1706 // RFC Ed.: replace XXXX with actual RFC number and remove this 1707 // note. 1709 // RFC Ed.: update the date below with the date of RFC publication 1710 // and remove this note. 1712 revision 2014-07-01 { 1713 description 1714 "Changes based on Opendaylight Testing and IETF SFC ml."; 1715 } 1717 typedef rendered-service-path-ref { 1718 type leafref { 1719 path "/sfc-rsp:service-function-paths/" + 1720 "sfc-rsp:rendered-service-path/sfc-rsp:name"; 1721 } 1722 description 1723 "This type is used by data models that need to reference 1724 rendered service paths."; 1725 } 1727 // Rendered Service Path 1729 container rendered-service-paths { 1730 config false; 1731 description 1732 "The SFP provides a level of indirection 1733 between the fully abstract notion of service chain as an 1734 abstract sequence of functions to be delivered, and the 1735 fully specified notion of exactly what SFF/SFs the packet 1736 will visit when it actually traverses the network. By 1737 allowing the control components to specify the use of this 1738 level of indirection, the deployment may choose the degree 1739 of SFF/SF selection authority that is delegated to the 1740 network"; 1741 list rendered-service-path { 1742 description 1743 "A list that holds operational data for all RSPs in the 1744 domain"; 1745 key "name"; 1746 leaf name { 1747 type string; 1748 description 1749 "The name of this rendered function path. This is the same 1750 name as the associated SFP"; 1751 } 1752 leaf parent-service-function-path { 1753 type string; 1754 description 1755 "Service Function Path from which this RSP was instantiated"; 1757 } 1758 leaf context-metadata { 1759 type sfc-md:context-metadata-ref; 1760 description 1761 "The name of the associated context metadata"; 1762 } 1763 leaf variable-metadata { 1764 type sfc-md:variable-metadata-ref; 1765 description 1766 "The name of the associated variable metadata"; 1767 } 1768 list rendered-service-path-hop { 1769 key "hop-number"; 1770 leaf hop-number { 1771 type uint8; 1772 description 1773 "A Monotonically increasing number"; 1774 } 1775 leaf service-function-name { 1776 type string; 1777 description 1778 "Service Function name"; 1779 } 1780 leaf service-function-forwarder { 1781 type string; 1782 description 1783 "Service Function Forwarder name"; 1784 } 1785 leaf service-function-forwarder-locator { 1786 type sfc-sff:service-function-forwarder-locator-ref; 1787 description 1788 "The name of the SFF data plane locator"; 1789 } 1790 leaf service-index { 1791 type uint8; 1792 description 1793 "Provides location within the service path. 1794 Service index MUST be decremented by service functions 1795 or proxy nodes after performing required services. MAY 1796 be used in conjunction with service path for path 1797 selection. Service Index is also valuable when 1798 troubleshooting/reporting service paths. In addition to 1799 location within a path, SI can be used for loop 1800 detection."; 1801 } 1802 ordered-by user; 1803 description 1804 "A list of service functions that compose the 1805 service path"; 1806 } 1807 leaf service-chain-name { 1808 type string; 1809 mandatory true; 1810 description 1811 "The Service Function Chain used as blueprint for this 1812 path"; 1813 } 1814 leaf starting-index { 1815 type uint8; 1816 description 1817 "Starting service index"; 1818 } 1819 leaf path-id { 1820 type uint32 { 1821 range "0..16777216"; 1822 } 1823 description 1824 "Identifies a service path. 1825 Participating nodes MUST use this identifier for path 1826 selection. An administrator can use the service path 1827 value for reporting and troubleshooting packets along 1828 a specific path."; 1830 } 1831 } 1832 } 1834 rpc delete-rendered-path { 1835 description 1836 "Delete a Rendered Service Path"; 1837 input { 1838 leaf name { 1839 type string; 1840 description 1841 "The name of this rendered function path. This is the same 1842 name as the associated SFP"; 1843 } 1844 } 1845 output { 1846 leaf result { 1847 type boolean; 1848 } 1849 } 1850 } 1852 rpc create-rendered-path { 1853 description 1854 "Created a Rendered Service Path"; 1855 input { 1856 leaf name { 1857 type string; 1858 description 1859 "The name of this rendered function path. This is the same 1860 name as the associated SFP"; 1861 } 1862 leaf parent-service-function-path { 1863 type string; 1864 description 1865 "Service Function Path from which this RSP was instantiated"; 1866 } 1867 leaf symmetric { 1868 type boolean; 1869 default false; 1870 description 1871 "If the chain is symmetric we will create two service 1872 paths, one ingress and another egress. Packets traverse 1873 the egress service path in the reverse order of the 1874 ingress path"; 1875 } 1876 leaf classifier { 1877 type string; 1878 description "The classifier responsible for directing" 1879 + "packets to this service path"; 1880 } 1881 leaf symmetric-classifier { 1882 type string; 1883 description "The classifier responsible for directing" 1884 + "packets to this service path"; 1885 } 1886 } 1887 output { 1888 leaf result { 1889 type boolean; 1890 } 1891 } 1892 } 1894 container rendered-service-path-first-hop { 1895 description 1896 "Provides all necessary information for a system to construct 1897 a NSH header and associated overlay packet to target the first 1898 service hop of a Rendered Service Path"; 1899 leaf starting-index { 1900 type uint8; 1901 description 1902 "Starting service index"; 1903 } 1904 leaf symmetric-path-id { 1905 type uint32 { 1906 range "0..16777216"; 1907 } 1908 description 1909 "Identifies the associated symmetric path, if any."; 1910 } 1911 leaf path-id { 1912 type uint32 { 1913 range "0..16777216"; 1914 } 1915 description 1916 "Identifies a service path. 1917 Participating nodes MUST use this identifier for path 1918 selection. An administrator can use the service path 1919 value for reporting and troubleshooting packets along 1920 a specific path."; 1921 } 1923 leaf transport-type { 1924 type sfc-sl:sl-transport-type-def; 1925 } 1926 uses sfc-sl:ip-port-locator; 1927 uses sfc-sl:mpls-locator; 1928 } 1930 } 1932 1934 12. Service Function Classifier (SCF) 1936 This module contains a collection of YANG definitions for managing 1937 service classification functions. 1939 12.1. Module Structure 1940 module: rendered-service-path 1941 +--ro rendered-service-paths 1942 +--ro rendered-service-path* [name] 1943 +--ro name string 1944 +--ro parent-service-function-path? string 1945 +--ro context-metadata? sfc-md:context-metadata-ref 1946 +--ro variable-metadata? sfc-md:variable-metadata-ref 1947 +--ro rendered-service-path-hop* [hop-number] 1948 | +--ro hop-number uint8 1949 | +--ro service-function-name? string 1950 | +--ro service-function-forwarder? string 1951 | +--ro service-index? uint8 1952 +--ro service-chain-name string 1953 +--ro starting-index? uint8 1954 +--ro path-id? uint32 1955 rpcs: 1956 +---x delete-rendered-path 1957 | +--ro input 1958 | | +--ro name? string 1959 | +--ro output 1960 | +--ro result? boolean 1961 +---x create-rendered-path 1962 +--ro input 1963 | +--ro name? string 1964 | +--ro parent-service-function-path? string 1965 | +--ro symmetric? boolean 1966 | +--ro classifier? string 1967 | +--ro symmetric-classifier? string 1968 +--ro output 1969 +--ro result? boolean 1971 12.2. Service Function Classifier Module 1973 file "service-function-classifier@2014-07-01.yang" 1975 module service-function-classifier { 1976 yang-version 1; 1978 namespace "urn:cisco:params:xml:ns:yang:sfc-scf"; 1980 prefix sfc-scf; 1982 import ietf-acl {prefix "ietf-acl";} 1984 organization "Cisco Systems, Inc."; 1985 contact "Reinaldo Penno "; 1987 description 1988 "This module contains a collection of YANG definitions for 1989 managing service classification functions."; 1991 revision 2014-07-01 { 1992 description 1993 "Revised based on Opendaylight Project feedback"; 1994 } 1996 grouping attachment-point { 1997 description 1998 "Reusable group of all possible attachment point types"; 1999 choice attachment-point-type { 2000 description 2001 "Provides a choice between access list 2002 attachment point types"; 2003 case bridge { 2004 leaf bridge { 2005 type string; 2006 description 2007 "OVS bridge as an attachment point"; 2008 } 2009 } 2010 case interface { 2011 leaf interface { 2012 type string; 2013 description 2014 "interface name as attachment point"; 2015 } 2016 } 2017 } 2018 } 2020 container service-function-classifiers { 2021 description 2022 "Classifier container which represents the ACL being applied, 2023 attachment point and the chain associated with that ACL."; 2024 list service-function-classifier { 2025 description 2026 "A list that holds all service function classifiers"; 2027 key "name"; 2028 leaf name { 2029 type string; 2030 description 2031 "Classification function name"; 2032 } 2033 leaf access-list { 2034 description 2035 "The ACL name associated with this classifier"; 2037 type string; 2038 } 2040 leaf rendered-service-path { 2041 description 2042 "The classifier will direct packets to the SFP 2043 specified here"; 2044 type string; 2045 } 2046 list scl-service-function-forwarder { 2047 description 2048 "The classifier will be attached to these SFFs"; 2049 key "name"; 2050 leaf name { 2051 description 2052 "The classifier will be attached to this SFF"; 2053 type string; 2054 } 2055 uses attachment-point { 2056 description "Classifier attachment point"; 2057 } 2058 } 2059 } 2060 } 2062 container service-function-classifiers-state { 2063 description 2064 "This container hold operational state for all service 2065 function classifiers"; 2066 config false; 2067 list service-function-classifier-state { 2068 description 2069 "This list holds operational data for all service function 2070 classifiers in the domain"; 2071 key "name"; 2072 leaf name { 2073 type string; 2074 description 2075 "The name of the service function classifier"; 2076 } 2077 list scl-rendered-service-path { 2078 key "name"; 2079 leaf name { 2080 type string; 2081 description 2082 "The name of the Rendered Service Path"; 2083 } 2084 description 2085 "A list of all rendered service paths that use this classifier"; 2086 } 2087 } 2088 } 2089 } 2091 2093 13. Service Function Description Monitor Report (SF-DESC-MON-RPT) 2095 This module for entities implementing the network service functions 2096 for Service Function Chaining 2098 13.1. Module Structure 2100 module: service-function-description-monitor-report 2101 +--rw service-function 2102 +--rw description-info 2103 | +--rw number-of-dataports? uint32 2104 | +--rw capabilities 2105 | +--rw supported-packet-rate? uint32 2106 | +--rw supported-bandwidth? uint32 2107 | +--rw supported-ACL-number? uint32 2108 | +--rw RIB-size? uint32 2109 | +--rw FIB-size? uint32 2110 | +--rw ports-bandwidth 2111 | +--rw port-bandwidth* [port-id] 2112 | +--rw port-id uint32 2113 | +--rw ipaddress? inet:ipv4-address 2114 | +--rw macaddress? yang:mac-address 2115 | +--rw supported-bandwidth? uint32 2116 +--rw monitoring-info 2117 +--rw liveness? boolean 2118 +--rw resource-utilization 2119 +--rw packet-rate-utilization? uint32 2120 +--rw bandwidth-utilization? uint32 2121 +--rw CPU-utilization? uint32 2122 +--rw memory-utilization? uint32 2123 +--rw available-memory? uint32 2124 +--rw RIB-utilization? uint32 2125 +--rw FIB-utilization? uint32 2126 +--rw power-utilization? uint32 2127 +--rw SF-ports-bandwidth-utilization 2128 +--rw port-bandwidth-utilization* [port-id] 2129 +--rw port-id uint32 2130 +--rw bandwidth-utilization? uint32 2131 rpcs: 2132 +---x get-SF-description 2133 | +--ro output 2134 | +--ro description-info 2135 | +--ro number-of-dataports? uint32 2136 | +--ro capabilities 2137 | +--ro supported-packet-rate? uint32 2138 | +--ro supported-bandwidth? uint32 2139 | +--ro supported-ACL-number? uint32 2140 | +--ro RIB-size? uint32 2141 | +--ro FIB-size? uint32 2142 | +--ro ports-bandwidth 2143 | +--ro port-bandwidth* [port-id] 2144 | +--ro port-id uint32 2145 | +--ro ipaddress? inet:ipv4-address 2146 | +--ro macaddress? yang:mac-address 2147 | +--ro supported-bandwidth? uint32 2148 +---x get-SF-monitoring-info 2149 +--ro output 2150 +--ro monitoring-info 2151 +--ro liveness? boolean 2152 +--ro resource-utilization 2153 +--ro packet-rate-utilization? uint32 2154 +--ro bandwidth-utilization? uint32 2155 +--ro CPU-utilization? uint32 2156 +--ro memory-utilization? uint32 2157 +--ro available-memory? uint32 2158 +--ro RIB-utilization? uint32 2159 +--ro FIB-utilization? uint32 2160 +--ro power-utilization? uint32 2161 +--ro SF-ports-bandwidth-utilization 2162 +--ro port-bandwidth-utilization* [port-id] 2163 +--ro port-id uint32 2164 +--ro bandwidth-utilization? uint32 2166 13.2. Service Function Description Monitor Report Module 2168 file "service-function-description-monitor-report.yang" 2170 module service-function-description-monitor-report { 2171 namespace "urn.intel.params:xml:ns:sf-desc-mon-rpt"; 2172 prefix sf-desc-mon-rpt; 2174 import ietf-inet-types { prefix inet;} 2175 import ietf-yang-types { prefix yang;} 2177 organization "Intel Inc."; 2178 contact "honglix.chen@intel.com"; 2179 description 2180 "The module for entities implementing the network service 2181 functions for Service Function Chaining"; 2183 revision 2014-11-05 { 2184 description "Initial revision."; 2185 } 2187 grouping SF-description { 2188 leaf number-of-dataports { 2189 type uint32; 2190 description "Number of dataports"; 2191 } 2192 container capabilities { 2193 leaf supported-packet-rate { 2194 type uint32; 2195 description "Maximum Mpps supported"; 2196 } 2197 leaf supported-bandwidth { 2198 type uint32; 2199 description "Maximum Mbps supported "; 2200 } 2201 leaf supported-ACL-number { 2202 type uint32; 2203 description "ACL number of the service function"; 2204 } 2205 leaf RIB-size { 2206 type uint32; 2207 description "Number of Routing Information Table's entries."; 2208 } 2209 leaf FIB-size { 2210 type uint32; 2211 description "Number of Forwarding Information Table's entries."; 2212 } 2213 container ports-bandwidth { 2214 list port-bandwidth { 2215 key port-id; 2216 leaf port-id { 2217 type uint32; 2218 description "The id of the port "; 2219 } 2220 leaf ipaddress { 2221 type inet:ipv4-address; 2222 description "IP address of the port"; 2223 } 2224 leaf macaddress { 2225 type yang:mac-address; 2226 description "MAC address of the the port"; 2227 } 2228 leaf supported-bandwidth { 2229 type uint32; 2230 description "Maximum Mbps supported by the port"; 2231 } 2232 } 2233 } 2234 } 2235 } 2237 grouping SF-monitoring-info { 2238 leaf liveness { 2239 type boolean; 2240 description "Liveness flag of the service function"; 2241 } 2242 container resource-utilization { 2243 leaf packet-rate-utilization { 2244 type uint32; 2245 description "Percentage of current package rate utilization."; 2246 } 2247 leaf bandwidth-utilization { 2248 type uint32; 2249 description "Percentage of bandwidth utilization."; 2250 } 2251 leaf CPU-utilization { 2252 type uint32; 2253 description "Percentage of CPU utilization."; 2254 } 2255 leaf memory-utilization { 2256 type uint32; 2257 description "Percentage of memory utilization."; 2258 } 2259 leaf available-memory { 2260 type uint32; 2261 description "Available memory size of the service function in MB."; 2262 } 2263 leaf RIB-utilization { 2264 type uint32; 2265 description "Percentage of Routing Information Table utilization."; 2266 } 2267 leaf FIB-utilization { 2268 type uint32; 2269 description "Percentage of Forwarding Information Table utilization."; 2270 } 2271 leaf power-utilization { 2272 type uint32; 2273 description "power utilization in W."; 2275 } 2276 container SF-ports-bandwidth-utilization { 2277 list port-bandwidth-utilization { 2278 key port-id; 2279 leaf port-id { 2280 type uint32; 2281 description "The id of the port "; 2282 } 2283 leaf bandwidth-utilization { 2284 type uint32; 2285 description "Percentage of the port's supported bandwidth utilization."; 2286 } 2287 } 2288 } 2289 } 2290 } 2292 container service-function { 2293 container description-info { 2294 uses SF-description; 2295 } 2296 container monitoring-info { 2297 uses SF-monitoring-info; 2298 } 2299 } 2301 rpc get-SF-description { 2302 description 2303 "Get service function description information."; 2304 output { 2305 container description-info { 2306 uses SF-description; 2307 } 2308 } 2309 } 2311 rpc get-SF-monitoring-info { 2312 description 2313 "Get current service function monitoring information."; 2314 output { 2315 container monitoring-info { 2316 uses SF-monitoring-info; 2317 } 2318 } 2319 } 2320 } 2321 2323 14. Service Function Description Monitor (SF-DESC-MON) 2325 This module is used to create description and monitoring information 2326 of Service Function extensions to service-function model 2328 14.1. Module Structure 2330 module service-function-description-monitor { 2331 namespace "urn.intel.params:xml:ns:sf-desc-mon"; 2332 prefix sf-desc-mon; 2334 import service-function { prefix sfc-sf;} 2335 import service-function-description-monitor-report { prefix sf-desc-mon-rpt;} 2337 organization "Intel Inc."; 2338 contact "honglix.chen@intel.com"; 2339 description 2340 "Create description and monitoring information of Service 2341 Function extensions to service-function model"; 2343 revision 2014-12-01 { 2344 description "Initial revision."; 2345 } 2347 augment "/sfc-sf:service-functions-state/sfc-sf:service-function-state" { 2348 description "Service function description and monitoring information"; 2349 container sfc-sf-desc-mon { 2350 container description-info { 2351 uses sf-desc-mon-rpt:SF-description; 2352 } 2353 container monitoring-info { 2354 uses sf-desc-mon-rpt:SF-monitoring-info; 2355 } 2356 } 2357 } 2358 } 2360 14.2. Service Function Description Monitor Report Module 2361 file "service-function-description-monitor.yang" 2363 module service-function-description-monitor { 2364 namespace "urn.intel.params:xml:ns:sf-desc-mon"; 2365 prefix sf-desc-mon; 2367 import service-function { prefix sfc-sf;} 2368 import service-function-description-monitor-report { prefix sf-desc-mon-rpt;} 2370 organization "Intel Inc."; 2371 contact "honglix.chen@intel.com"; 2372 description 2373 "Create description and monitoring information of Service 2374 Function extensions to service-function model"; 2376 revision 2014-12-01 { 2377 description "Initial revision."; 2378 } 2380 augment "/sfc-sf:service-functions-state/sfc-sf:service-function-state" { 2381 description "Service function description and monitoring information"; 2382 container sfc-sf-desc-mon { 2383 container description-info { 2384 uses sf-desc-mon-rpt:SF-description; 2385 } 2386 container monitoring-info { 2387 uses sf-desc-mon-rpt:SF-monitoring-info; 2388 } 2389 } 2390 } 2391 } 2393 2395 15. IANA Considerations 2397 TBD 2399 16. Security Considerations 2401 17. Acknowledgements 2403 Thanks to Jan Medved, Ron Parker, Jan Lindblad, David Goldberg, Vina 2404 Ermagan, Sam Hague and Vinayak Joshi and for reviews and suggestions. 2406 18. Changes 2408 -11 2410 o Added new co-authors 2412 o changed RSP and SFP models to allow multiple encap paths. 2414 o Added the "need reclassififcation" leaf to allow a Service 2415 Function to tell a SFF that packet reclassification is needed 2417 o Added RSP first hop container to allow SFC applications to request 2418 the ingress hop to a RSP. These applciations (such as dynamic 2419 classifier) treat RSP as a black box and only need ingress 2420 locator. 2422 -10 2424 This new revision comes after considerable control and dataplane 2425 interop testing. The new changes reflect what we found necessary for 2426 building a well-rounded solution. 2428 o Added Rendered Service Path Model 2430 o Added Service Function Description Monitor and Report Models 2432 o Updated Service Function Path (It allow users to control certain 2433 aspects of RSPs, new symmetric and metadata leaves) 2435 o Updated Service Function Forwarder model 2437 o Updated Service Function Model 2439 o Updated Service Function Type Model (HTTP Header Enrichment 2440 service) 2442 o Update Service Locator Model (MPLS encap) 2444 o Removed Service Node 2446 o Others 2448 -09 2450 o Modifed Service Function Forwarder OVS model based on OVS/ 2451 Openstack deployment experience 2453 -08 2454 o Removed VXLAN-GPE model 2456 o Added Service Function Forwarder OVS model 2458 o Added metadata reference to Service Function Path 2460 -07 2462 o All models that need data plane locators reference service locator 2463 model 2465 o Service Locator module has locators for IP:port, VLAN:MAC, LISP 2467 o A SF can have multiple data place locators 2469 o SF and SFF are decoupled and have their own views of the network 2471 o Service Function Chains and derived path can be symmtric (bi-dir) 2472 or not 2474 o Service Function Types separated into a model 2476 o Service Function Path is a collection of service hops. This 2477 allows hops such as SFF + classifier. 2479 -06 2481 o Introduced operational tree in some models based on testing and 2482 user feedback. 2484 o Introduced RPCs in some models 2486 o Service Function Path needs SFC from which it will be instantiated 2488 o Updated all module structures 2490 o Introduced Service Locator module 2492 -05 2494 Changes based on Opendaylight Implementation Testing and Sfc-dev 2495 mailing list feedback 2497 o Service Node becomes a container for Service Functions. Moved 2498 data plane items to SFF. 2500 o Fixed Service Function Forwarders into a list so we cna have 2501 multiple in a system 2503 o Fixed Service Function Chain so it becomes a list of lists. 2505 o Created RPCs for Service Functions and Service Chain 2507 -04 2509 o Fixed list inside Service Function Chain to read service-function- 2510 type 2512 o Small comment fixes 2514 -03 2516 o Revision dates consistent 2518 o Service function chain to container + list in order to allow 2519 multiple 2521 o Service Function Path to cotainer + list 2523 o VXLAN-gpe vni to multiple 8-bit fields 2525 o Consistent typeref use 2527 o Other consistency fixes 2529 -02 2531 o After Opendaylight Testing converted multiple leafs to lists 2532 throughout all models 2534 o Removed transport dependency. Transport could be layer-2, layer- 2535 3, etc 2537 o Used pathrefs similar to ietf-interfaces to reference 2538 configuration names 2540 o Other consistency fixes 2542 19. References 2544 19.1. Normative References 2546 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2547 Requirement Levels", BCP 14, RFC 2119, March 1997. 2549 [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., 2550 Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext 2551 Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. 2553 19.2. Informative References 2555 [I-D.ietf-sfc-architecture] 2556 Halpern, J. and C. Pignataro, "Service Function Chaining 2557 (SFC) Architecture", draft-ietf-sfc-architecture-05 (work 2558 in progress), February 2015. 2560 [I-D.ietf-sfc-problem-statement] 2561 Quinn, P. and T. Nadeau, "Service Function Chaining 2562 Problem Statement", draft-ietf-sfc-problem-statement-13 2563 (work in progress), February 2015. 2565 [I-D.quinn-sfc-nsh] 2566 Quinn, P., Guichard, J., Surendra, S., Smith, M., 2567 Henderickx, W., Nadeau, T., Agarwal, P., Manur, R., 2568 Chauhan, A., Halpern, J., Majee, S., Elzur, U., Melman, 2569 D., Garg, P., McConnell, B., Wright, C., and K. Kevin, 2570 "Network Service Header", draft-quinn-sfc-nsh-07 (work in 2571 progress), February 2015. 2573 [I-D.quinn-vxlan-gpe] 2574 Quinn, P., Manur, R., Kreeger, L., Lewis, D., Maino, F., 2575 Smith, M., Agarwal, P., Yong, L., Xu, X., Elzur, U., Garg, 2576 P., and D. Melman, "Generic Protocol Extension for VXLAN", 2577 draft-quinn-vxlan-gpe-04 (work in progress), February 2578 2015. 2580 Authors' Addresses 2582 Reinaldo Penno 2583 Cisco Systems 2584 170 West Tasman Dr 2585 San Jose CA 2586 USA 2588 Email: repenno@cisco.com 2589 Paul Quinn 2590 Cisco Systems 2591 170 West Tasman Dr 2592 San Jose CA 2593 USA 2595 Email: paulq@cisco.com 2597 Danny Zhou 2598 Intel Corporation 2599 2200 Mission College Blvd. 2600 Santa Clara CA 2601 USA 2603 Email: danny.zhou@intel.com 2605 Johnson Li 2606 Intel Corporation 2607 2200 Mission College Blvd. 2608 Santa Clara CA 2609 USA 2611 Email: johnson.li@intel.com