idnits 2.17.1 draft-ietf-detnet-yang-09.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 : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 291 has weird spacing: '...er-port ine...' == Line 292 has weird spacing: '...er-port ine...' == Line 299 has weird spacing: '...er-port ine...' == Line 300 has weird spacing: '...er-port ine...' == Line 441 has weird spacing: '...g-index uin...' -- The document date (November 16, 2020) is 1258 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) == Outdated reference: A later version (-14) exists of draft-ietf-detnet-flow-information-model-11 Summary: 0 errors (**), 0 flaws (~~), 7 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group X. Geng 3 Internet-Draft M. Chen 4 Intended status: Standards Track Huawei Technologies 5 Expires: May 20, 2021 Y. Ryoo 6 ETRI 7 D. Fedyk 8 LabN Consulting, L.L.C. 9 R. Rahman 10 Individual 11 Z. Li 12 China Mobile 13 November 16, 2020 15 Deterministic Networking (DetNet) Configuration YANG Model 16 draft-ietf-detnet-yang-09 18 Abstract 20 This document contains the specification for Deterministic Networking 21 flow configuration YANG Model. The model allows for provisioning of 22 end-to-end DetNet service along the path without dependency on any 23 signaling protocol. 25 The YANG module defined in this document conforms to the Network 26 Management Datastore Architecture (NMDA). 28 Requirements Language 30 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 31 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 32 document are to be interpreted as described in RFC 2119 [RFC2119]. 34 Status of This Memo 36 This Internet-Draft is submitted in full conformance with the 37 provisions of BCP 78 and BCP 79. 39 Internet-Drafts are working documents of the Internet Engineering 40 Task Force (IETF). Note that other groups may also distribute 41 working documents as Internet-Drafts. The list of current Internet- 42 Drafts is at https://datatracker.ietf.org/drafts/current/. 44 Internet-Drafts are draft documents valid for a maximum of six months 45 and may be updated, replaced, or obsoleted by other documents at any 46 time. It is inappropriate to use Internet-Drafts as reference 47 material or to cite them other than as "work in progress." 48 This Internet-Draft will expire on May 20, 2021. 50 Copyright Notice 52 Copyright (c) 2020 IETF Trust and the persons identified as the 53 document authors. All rights reserved. 55 This document is subject to BCP 78 and the IETF Trust's Legal 56 Provisions Relating to IETF Documents 57 (https://trustee.ietf.org/license-info) in effect on the date of 58 publication of this document. Please review these documents 59 carefully, as they describe your rights and restrictions with respect 60 to this document. Code Components extracted from this document must 61 include Simplified BSD License text as described in Section 4.e of 62 the Trust Legal Provisions and are provided without warranty as 63 described in the Simplified BSD License. 65 Table of Contents 67 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 68 2. Terminologies . . . . . . . . . . . . . . . . . . . . . . . . 3 69 3. DetNet Configuration Module . . . . . . . . . . . . . . . . . 3 70 3.1. DetNet Appliction Flow Configuration Attributes . . . . . 3 71 3.2. DetNet Service Sub-layer Configuration Attributes . . . . 3 72 3.3. DetNet Forwarding Sub-layer Configuration Attributes . . 4 73 4. DetNet Flow Aggregation . . . . . . . . . . . . . . . . . . . 4 74 5. DetNet YANG Structure Considerations . . . . . . . . . . . . 5 75 6. DetNet Configuration YANG Structures . . . . . . . . . . . . 6 76 7. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 14 77 8. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 40 78 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 40 79 10. Security Considerations . . . . . . . . . . . . . . . . . . . 40 80 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 40 81 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 40 82 12.1. Normative References . . . . . . . . . . . . . . . . . . 40 83 12.2. Informative References . . . . . . . . . . . . . . . . . 41 84 Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 41 85 A.1. Example JSON Configuration . . . . . . . . . . . . . . . 41 86 A.2. Example XML Config: Aggregation using a Forwarding 87 Sublayer . . . . . . . . . . . . . . . . . . . . . . . . 45 88 A.3. Example JSON Service Aggregation Configuration . . . . . 49 89 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 55 91 1. Introduction 93 DetNet (Deterministic Networking) provides a capability to carry 94 specified unicast or multicast data flows for real-time applications 95 with extremely low packet loss rates and assured maximum end-to-end 96 delivery latency. A description of the general background and 97 concepts of DetNet can be found in [RFC8655]. 99 This document defines a YANG model for DetNet based on YANG data 100 types and modeling language defined in [RFC6991] and [RFC7950]. 101 DetNet service, which is designed for describing the characteristics 102 of services being provided for application flows over a network, and 103 DetNet configuration, which is designed for DetNet flow path 104 establishment, flow status reporting, and DetNet functions 105 configuration in order to achieve end-to-end bounded latency and zero 106 congestion loss, are both included in this document. 108 2. Terminologies 110 This documents uses the terminologies defined in [RFC8655]. 112 3. DetNet Configuration Module 114 DetNet configuration module includes DetNet App-flow configuration, 115 DetNet Service Sub-layer configuration, and DetNet Forwarding Sub- 116 layer configuration. The corresponding attributes used in different 117 sub-layers are defined in Section 3.1, 3.2, 3.3 respectively. 119 3.1. DetNet Appliction Flow Configuration Attributes 121 DetNet application flow is responsible for mapping between 122 application flows and DetNet flows at the edge node(egress/ingress 123 node). Where the application flows can be either layer 2 or layer 3 124 flows. To map a flow at the User Network Interface (UNI), the 125 corresponding attributes are defined in 126 [I-D.ietf-detnet-flow-information-model]. 128 3.2. DetNet Service Sub-layer Configuration Attributes 130 DetNet service functions, e.g., DetNet tunnel initialization/ 131 termination and service protection, are provided in DetNet service 132 sub-layer. To support these functions, the following service 133 attributes need to be configured: 135 o DetNet flow identification 137 o Service function indication, indicates which service function will 138 be invoked at a DetNet edge, relay node or end station. (DetNet 139 tunnel initialization or termination are default functions in 140 DetNet service layer, so there is no need for explicit 141 indication). The corresponding arguments for service functions 142 also needs to be defined. 144 3.3. DetNet Forwarding Sub-layer Configuration Attributes 146 As defined in [RFC8655], DetNet forwarding sub-layer optionally 147 provides congestion protection for DetNet flows over paths provided 148 by the underlying network. Explicit route is another mechanism that 149 is used by DetNet to avoid temporary interruptions caused by the 150 convergence of routing or bridging protocols, and it is also 151 implemented at the DetNet forwarding sub-layer. 153 To support congestion protection and explicit route, the following 154 transport layer related attributes are necessary: 156 o Traffic Specification, refers to Section 7.2 of 157 [I-D.ietf-detnet-flow-information-model]. It may used for 158 resource reservation, flow shaping, filtering and policing. 160 o Explicit path, existing explicit route mechanisms can be reused. 161 For example, if Segment Routing (SR) tunnel is used as the 162 transport tunnel, the configuration is mainly at the ingress node 163 of the transport layer; if the static MPLS tunnel is used as the 164 transport tunnel, the configurations need to be at every transit 165 node along the path; for pure IP based transport tunnel, it's 166 similar to the static MPLS case. 168 4. DetNet Flow Aggregation 170 DetNet provides the capability of flow aggregation to improve 171 scaleability of DetNet data, management and control planes. 172 Aggregated flows can be viewed by the some DetNet nodes as individual 173 DetNet flows. When aggregating DetNet flows, the flows should be 174 compatible: if bandwidth reservations are used, the reservation 175 should be a reasonable representation of the individual reservations; 176 if maximum delay bounds are used, the system should ensure that the 177 aggregate does not exceed the delay bounds of the individual flows. 179 The DetNet YANG model defined in this document supports DetNet flow 180 aggregation with the following functions: 182 o Aggregation flow encapsulation/decapsulation/identification 184 o Mapping individual DetNet flows to an aggregated flow 186 o Changing traffic specification parameters for aggregated flow 188 The following cases of DetNet aggregation are supported: 190 o aggregate data flows into an application which is then mapped to a 191 service sub-layer at the ingress node. Note the data flows may be 192 other DetNet flows. 194 o map each DetNet application to a single service sub-layer and 195 allowing the aggregation of multiple applications at the ingress 196 node, and vice versa for de-aggregation. A classifier may be 197 required to de-aggregate the respective applications. 199 o map each DetNet application uniquely to a single service sub-layer 200 where those sub-layers may be encapsulated as a single service 201 sub-layer and hence aggregating the applications at the ingress 202 node, and vice versa for de-aggregation. In this case, the 203 service sub-layer identifier may be sufficient to identify the 204 application. A classifier may be required to de-aggregate the 205 service sub-layers. 207 o aggregate DetNet service sub-layers into an aggregated flow by 208 using the same forwarding sub-layer at ingress node or relay node, 209 and vice versa for de-aggregation. 211 o aggregate DetNet flows with different forwarding sub-layer into an 212 aggregated flow by using the same forwarding sub-layer at transit 213 node, and vice versa for de-aggregation. 215 Traffic requirements and traffic specification may be tracked for 216 individual or aggregate flows but reserving resources and tracking 217 the services in the aggregated flow is out of scope. 219 5. DetNet YANG Structure Considerations 221 The picture shows that the general structure of the DetNet YANG 222 Model: 224 +-----------+ 225 |ietf-detnet| 226 +-----+-----+ 227 | 228 +-------------+---------------+ 229 | | | 230 +-----+-----+ +-----+-----+ +-------+------+ 231 | App Flows | |service s-l| |forwarding s-l| 232 +-----------+ +-----------+ +--------------+ 234 There are three instances in DetNet YANG Model: App-flow instance, 235 service sub-layer instance and forwarding sub-layer instance, 236 respectively corresponding to four parts of DetNet functions defined 237 in section 3. 239 6. DetNet Configuration YANG Structures 241 module: ietf-detnet 242 +--rw detnet 243 +--rw traffic-profile* [profile-name] 244 | +--rw profile-name string 245 | +--rw traffic-requirements 246 | | +--rw min-bandwidth? uint64 247 | | +--rw max-latency? uint32 248 | | +--rw max-latency-variation? uint32 249 | | +--rw max-loss? uint32 250 | | +--rw max-consecutive-loss-tolerance? uint32 251 | | +--rw max-misordering? uint32 252 | +--rw traffic-specification 253 | | +--rw interval? uint32 254 | | +--rw max-packets-per-interval? uint32 255 | | +--rw max-payload-size? uint32 256 | | +--rw average-packets-per-interval? uint32 257 | | +--rw average-payload-size? uint32 258 | +--ro member-applications* app-flow-ref 259 | +--ro member-services* service-sub-layer-ref 260 | +--ro member-forwarding-sublayers* forwarding-sub-layer-ref 261 +--rw app-flows 262 | +--rw app-flow* [name] 263 | +--rw name string 264 | +--rw app-flow-bidir-congruent? boolean 265 | +--ro outgoing-service? service-sub-layer-ref 266 | +--ro incoming-service? service-sub-layer-ref 267 | +--rw traffic-profile? traffic-profile-ref 268 | +--rw ingress 269 | | +--rw name? string 270 | | +--ro app-flow-status? identityref 271 | | +--rw interface? if:interface-ref 272 | | +--rw (data-flow-type)? 273 | | +--:(tsn-app-flow) 274 | | | +--rw source-mac-address? yang:mac-address 275 | | | +--rw destination-mac-address? yang:mac-address 276 | | | +--rw ethertype? 277 | | | | ethertypes:ethertype 278 | | | +--rw vlan-id? 279 | | | | dot1q-types:vlanid 280 | | | +--rw pcp? uint8 281 | | +--:(ip-app-flow) 282 | | | +--rw src-ip-prefix? inet:ip-prefix 283 | | | +--rw dest-ip-prefix? inet:ip-prefix 284 | | | +--rw next-header? uint8 285 | | | +--rw traffic-class? uint8 286 | | | +--rw flow-label? 287 | | | | inet:ipv6-flow-label 288 | | | +--rw source-port 289 | | | | +--rw (port-range-or-operator)? 290 | | | | +--:(range) 291 | | | | | +--rw lower-port inet:port-number 292 | | | | | +--rw upper-port inet:port-number 293 | | | | +--:(operator) 294 | | | | +--rw operator? operator 295 | | | | +--rw port inet:port-number 296 | | | +--rw destination-port 297 | | | | +--rw (port-range-or-operator)? 298 | | | | +--:(range) 299 | | | | | +--rw lower-port inet:port-number 300 | | | | | +--rw upper-port inet:port-number 301 | | | | +--:(operator) 302 | | | | +--rw operator? operator 303 | | | | +--rw port inet:port-number 304 | | | +--rw ipsec-spi? ipsec-spi 305 | | +--:(mpls-app-flow) 306 | | +--rw (label-space)? 307 | | +--:(context-label-space) 308 | | | +--rw mpls-label-stack 309 | | | +--rw entry* [id] 310 | | | +--rw id uint8 311 | | | +--rw label? 312 | | | | rt-types:mpls-label 313 | | | +--rw ttl? uint8 314 | | | +--rw traffic-class? uint8 315 | | +--:(platform-label-space) 316 | | +--rw label? 317 | | rt-types:mpls-label 318 | +--rw egress 319 | +--rw name? string 320 | +--rw (application-type)? 321 | +--:(Ethernet) 322 | | +--rw Ethernet 323 | | +--rw Ethernet-place-holder? string 324 | +--:(ip-mpls) 325 | +--rw ip-mpls 326 | +--rw (next-hop-options) 327 | +--:(simple-next-hop) 328 | | +--rw outgoing-interface? 329 | | | if:interface-ref 330 | | +--rw (flow-type)? 331 | | +--:(ip) 332 | | | +--rw next-hop-address? 333 | | | inet:ip-address 334 | | +--:(mpls) 335 | | +--rw mpls-label-stack 336 | | +--rw entry* [id] 337 | | +--rw id uint8 338 | | +--rw label? 339 | | | rt-types:mpls-label 340 | | +--rw ttl? uint8 341 | | +--rw traffic-class? uint8 342 | +--:(next-hop-list) 343 | +--rw next-hop-list 344 | +--rw next-hop* [hop-index] 345 | +--rw hop-index 346 | | uint8 347 | +--rw outgoing-interface? 348 | | if:interface-ref 349 | +--rw (flow-type)? 350 | +--:(ip) 351 | | +--rw next-hop-address? 352 | | inet:ip-address 353 | +--:(mpls) 354 | +--rw mpls-label-stack 355 | +--rw entry* [id] 356 | +--rw id 357 | | uint8 358 | +--rw label? 359 | | rt-types: 360 | | mpls-label 361 | +--rw ttl? 362 | | uint8 363 | +--rw traffic-class? 364 | uint8 365 +--rw service-sub-layer 366 | +--rw service-sub-layer-list* [name] 367 | +--rw name string 368 | +--rw service-rank? uint8 369 | +--rw traffic-profile? traffic-profile-ref 370 | +--rw service-protection 371 | | +--rw service-protection-type? service-protection-type 372 | | +--rw sequence-number-length? sequence-number-field 373 | +--rw service-operation-type? service-operation-type 374 | +--rw incoming-type 375 | | +--rw (incoming-type) 376 | | +--:(app-flow) 377 | | | +--rw app-flow 378 | | | +--rw flow-list* app-flow-ref 379 | | +--:(service) 380 | | | +--rw service 381 | | | +--rw service-sub-layer* 382 | | | service-sub-layer-ref 383 | | +--:(forwarding) 384 | | | +--rw forwarding 385 | | | +--rw forwarding-sub-layer* 386 | | | forwarding-sub-layer-ref 387 | | +--:(service-identification) 388 | | +--rw service-identification 389 | | +--rw (detnet-flow-type)? 390 | | +--:(ip-detnet-flow) 391 | | | +--rw src-ip-prefix? 392 | | | | inet:ip-prefix 393 | | | +--rw dest-ip-prefix? 394 | | | | inet:ip-prefix 395 | | | +--rw next-header? uint8 396 | | | +--rw traffic-class? uint8 397 | | | +--rw flow-label? 398 | | | | inet:ipv6-flow-label 399 | | | +--rw source-port 400 | | | | +--rw (port-range-or-operator)? 401 | | | | +--:(range) 402 | | | | | +--rw lower-port 403 | | | | | | inet:port-number 404 | | | | | +--rw upper-port 405 | | | | | inet:port-number 406 | | | | +--:(operator) 407 | | | | +--rw operator? operator 408 | | | | +--rw port 409 | | | | inet:port-number 410 | | | +--rw destination-port 411 | | | | +--rw (port-range-or-operator)? 412 | | | | +--:(range) 413 | | | | | +--rw lower-port 414 | | | | | | inet:port-number 415 | | | | | +--rw upper-port 416 | | | | | inet:port-number 417 | | | | +--:(operator) 418 | | | | +--rw operator? operator 419 | | | | +--rw port 420 | | | | inet:port-number 421 | | | +--rw ipsec-spi? ipsec-spi 422 | | +--:(mpls-detnet-flow) 423 | | +--rw (label-space)? 424 | | +--:(context-label-space) 425 | | | +--rw mpls-label-stack 426 | | | +--rw entry* [id] 427 | | | +--rw id uint8 428 | | | +--rw label? 429 | | | | rt-types:mpls-label 430 | | | +--rw ttl? uint8 431 | | | +--rw traffic-class? uint8 432 | | +--:(platform-label-space) 433 | | +--rw label? 434 | | rt-types:mpls-label 435 | +--rw outgoing-type 436 | +--rw (outgoing-type) 437 | +--:(forwarding-sub-layer) 438 | | +--rw forwarding-sub-layer 439 | | +--rw service-outgoing-list* 440 | | [service-outgoing-index] 441 | | +--rw service-outgoing-index uint8 442 | | +--rw (header-type)? 443 | | | +--:(detnet-mpls-header) 444 | | | | +--rw mpls-label-stack 445 | | | | +--rw entry* [id] 446 | | | | +--rw id uint8 447 | | | | +--rw label? 448 | | | | | rt-types:mpls-label 449 | | | | +--rw ttl? uint8 450 | | | | +--rw traffic-class? uint8 451 | | | +--:(detnet-ip-header) 452 | | | +--rw src-ip-address? 453 | | | | inet:ip-address 454 | | | +--rw dest-ip-address? 455 | | | | inet:ip-address 456 | | | +--rw next-header? uint8 457 | | | +--rw traffic-class? uint8 458 | | | +--rw flow-label? 459 | | | | inet:ipv6-flow-label 460 | | | +--rw source-port? 461 | | | | inet:port-number 462 | | | +--rw destination-port? 463 | | | inet:port-number 464 | | +--rw next-layer* [index] 465 | | +--rw index uint8 466 | | +--rw forwarding-sub-layer? 467 | | forwarding-sub-layer-ref 468 | +--:(service-sub-layer) 469 | | +--rw service-sub-layer 470 | | +--rw aggregation-service-sub-layer? 471 | | | service-sub-layer-ref 472 | | +--rw service-label 473 | | +--rw mpls-label-stack 474 | | +--rw entry* [id] 475 | | +--rw id uint8 476 | | +--rw label? 477 | | | rt-types:mpls-label 478 | | +--rw ttl? uint8 479 | | +--rw traffic-class? uint8 480 | +--:(upper-app-flow) 481 | | +--rw upper-app-flow 482 | | +--rw flow-list* app-flow-ref 483 | +--:(upper-service-sub-layer) 484 | | +--rw upper-service-sub-layer 485 | | +--rw service-sub-layer* 486 | | service-sub-layer-ref 487 | +--:(upper-forwarding-sub-layer) 488 | +--rw upper-forwarding-sub-layer 489 | +--rw forwarding-sub-layer* 490 | forwarding-sub-layer-ref 491 +--rw forwarding-sub-layer 492 +--rw forwarding-sub-layer-list* [name] 493 +--rw name string 494 +--rw traffic-profile? traffic-profile-ref 495 +--rw forwarding-operation-type? 496 | forwarding-operations-type 497 +--rw incoming-type 498 | +--rw (incoming-type) 499 | +--:(service-sub-layer) 500 | | +--rw service-sub-layer 501 | | +--ro sub-layer-list* service-sub-layer-ref 502 | +--:(upper-forwarding-sub-layer) 503 | | +--rw forwarding-sub-layer* 504 | | forwarding-sub-layer-ref 505 | +--:(lower-forwarding-sub-layer) 506 | +--rw interface? 507 | | if:interface-ref 508 | +--rw (detnet-flow-type)? 509 | +--:(ip-detnet-flow) 510 | | +--rw src-ip-prefix? 511 | | | inet:ip-prefix 512 | | +--rw dest-ip-prefix? 513 | | | inet:ip-prefix 514 | | +--rw next-header? uint8 515 | | +--rw traffic-class? uint8 516 | | +--rw flow-label? 517 | | | inet:ipv6-flow-label 518 | | +--rw source-port 519 | | | +--rw (port-range-or-operator)? 520 | | | +--:(range) 521 | | | | +--rw lower-port 522 | | | | | inet:port-number 523 | | | | +--rw upper-port 524 | | | | inet:port-number 525 | | | +--:(operator) 526 | | | +--rw operator? operator 527 | | | +--rw port 528 | | | inet:port-number 529 | | +--rw destination-port 530 | | | +--rw (port-range-or-operator)? 531 | | | +--:(range) 532 | | | | +--rw lower-port 533 | | | | | inet:port-number 534 | | | | +--rw upper-port 535 | | | | inet:port-number 536 | | | +--:(operator) 537 | | | +--rw operator? operator 538 | | | +--rw port 539 | | | inet:port-number 540 | | +--rw ipsec-spi? ipsec-spi 541 | +--:(mpls-detnet-flow) 542 | +--rw (label-space)? 543 | +--:(context-label-space) 544 | | +--rw mpls-label-stack 545 | | +--rw entry* [id] 546 | | +--rw id uint8 547 | | +--rw label? 548 | | | rt-types:mpls-label 549 | | +--rw ttl? uint8 550 | | +--rw traffic-class? uint8 551 | +--:(platform-label-space) 552 | +--rw label? 553 | rt-types:mpls-label 554 +--rw outgoing-type 555 +--rw (outgoing-type) 556 +--:(interface) 557 | +--rw interface 558 | +--rw (next-hop-options) 559 | +--:(simple-next-hop) 560 | | +--rw outgoing-interface? 561 | | | if:interface-ref 562 | | +--rw (flow-type)? 563 | | +--:(ip) 564 | | | +--rw (operation-type)? 565 | | | +--:(ip-forwarding) 566 | | | | +--rw next-hop-address? 567 | | | | inet:ip-address 568 | | | +--:(mpls-over-ip-encapsulation) 569 | | | +--rw src-ip-address? 570 | | | | inet:ip-address 571 | | | +--rw dest-ip-address? 572 | | | | inet:ip-address 573 | | | +--rw next-header? 574 | | | | uint8 575 | | | +--rw traffic-class? 576 | | | | uint8 577 | | | +--rw flow-label? 578 | | | | inet:ipv6-flow-label 579 | | | +--rw source-port? 580 | | | | inet:port-number 581 | | | +--rw destination-port? 582 | | | inet:port-number 583 | | +--:(mpls) 584 | | +--rw mpls-label-stack 585 | | +--rw entry* [id] 586 | | +--rw id uint8 587 | | +--rw label? 588 | | | rt-types:mpls-label 589 | | +--rw ttl? uint8 590 | | +--rw traffic-class? uint8 591 | +--:(next-hop-list) 592 | +--rw next-hop-list 593 | +--rw next-hop* [hop-index] 594 | +--rw hop-index 595 | | uint8 596 | +--rw outgoing-interface? 597 | | if:interface-ref 598 | +--rw (flow-type)? 599 | +--:(ip) 600 | | +--rw (operation-type)? 601 | | +--:(ip-forwarding) 602 | | | +--rw next-hop-address? 603 | | | inet:ip-address 604 | | +--:(mpls-over-ip- 605 | | | encapsulation) 606 | | +--rw src-ip-address? 607 | | | inet:ip-address 608 | | +--rw dest-ip-address? 609 | | | inet:ip-address 610 | | +--rw next-header? 611 | | | uint8 612 | | +--rw traffic-class? 613 | | | uint8 614 | | +--rw flow-label? 615 | | | inet: 616 | | | ipv6-flow-label 617 | | +--rw source-port? 618 | | | inet:port-number 619 | | +--rw destination-port? 620 | | inet:port-number 621 | +--:(mpls) 622 | +--rw mpls-label-stack 623 | +--rw entry* [id] 624 | +--rw id 625 | | uint8 626 | +--rw label? 627 | | rt-types: 628 | | mpls-label 629 | +--rw ttl? 630 | | uint8 631 | +--rw traffic-class? 632 | uint8 633 +--:(service) 634 | +--rw aggregation-service-sub-layer? 635 | | service-sub-layer-ref 636 | +--rw optional-forwarding-label 637 | +--rw mpls-label-stack 638 | +--rw entry* [id] 639 | +--rw id uint8 640 | +--rw label? 641 | | rt-types:mpls-label 642 | +--rw ttl? uint8 643 | +--rw traffic-class? uint8 644 +--:(forwarding) 645 | +--rw aggregation-forwarding-sub-layer? 646 | | forwarding-sub-layer-ref 647 | +--rw forwarding-label 648 | +--rw mpls-label-stack 649 | +--rw entry* [id] 650 | +--rw id uint8 651 | +--rw label? 652 | | rt-types:mpls-label 653 | +--rw ttl? uint8 654 | +--rw traffic-class? uint8 655 +--:(upper-service) 656 | +--rw service-sub-layer* 657 | service-sub-layer-ref 658 +--:(upper-forwarding) 659 +--rw forwarding-sub-layer* 660 forwarding-sub-layer-ref 662 7. DetNet Configuration YANG Model 664 665 module ietf-detnet{ 666 namespace "urn:ietf:params:xml:ns:yang:ietf-detnet"; 667 prefix ietf-detnet; 669 import ietf-yang-types { 670 prefix yang; 672 } 673 import ietf-inet-types { 674 prefix inet; 675 } 676 import ietf-ethertypes { 677 prefix ethertypes; 678 } 679 import ietf-routing-types { 680 prefix rt-types; 681 } 682 import ietf-packet-fields { 683 prefix packet-fields; 684 } 685 import ietf-interfaces { 686 prefix if; 687 } 688 import ieee802-dot1q-types{ 689 prefix dot1q-types; 690 } 692 organization 693 "IETF DetNet Working Group"; 694 contact 695 "WG Web: 696 WG List: 697 WG Chair: Lou Berger 698 700 Janos Farkas 701 703 Editor: Xuesong Geng 704 706 Editor: Mach Chen 707 709 Editor: Yeoncheol Ryoo 710 712 Editor: Don Fedyk 713 ; 715 Editor: Reshad Rahman 716 718 Editor: Zhenqiang Li 719 "; 721 description 722 "This YANG module describes the parameters needed 723 for DetNet flow configuration and flow status 724 reporting"; 726 revision 2020-11-12 { 727 description 728 "initial revision"; 729 reference 730 "RFC XXXX: draft-ietf-detnet-yang-09"; 731 } 733 identity app-status { 734 description 735 "Base identity from which all application-status 736 actions are derived"; 737 } 739 identity none { 740 base app-status; 741 description 742 "Application no ingress/egress"; 743 reference 744 "draft-ietf-detnet-flow-information-model Section 5.8"; 745 } 747 identity ready { 748 base app-status; 749 description 750 "Application ingress/egress ready"; 751 reference 752 "draft-ietf-detnet-flow-information-model Section 5.8"; 753 } 755 identity failed { 756 base app-status; 757 description 758 "Application ingres/egresss failed"; 759 reference 760 "draft-ietf-detnet-flow-information-model Section 5.8"; 761 } 763 identity out-of-service { 764 base app-status; 765 description 766 "Application Administratively blocked"; 767 reference 768 "draft-ietf-detnet-flow-information-model Section 5.8"; 770 } 772 identity partial-failed { 773 base app-status; 774 description 775 "Application One or more Egress ready, and one or more Egress 776 failed. The DetNet flow can be used if the Ingress is 777 Ready."; 778 reference 779 "draft-ietf-detnet-flow-information-model Section 5.8"; 780 } 782 typedef app-flow-ref { 783 type leafref { 784 path "/ietf-detnet:detnet" 785 + "/ietf-detnet:app-flows" 786 + "/ietf-detnet:app-flow" 787 + "/ietf-detnet:name"; 788 } 789 } 791 typedef service-sub-layer-ref { 792 type leafref { 793 path "/ietf-detnet:detnet" 794 + "/ietf-detnet:service-sub-layer" 795 + "/ietf-detnet:service-sub-layer-list" 796 + "/ietf-detnet:name"; 797 } 798 } 800 typedef forwarding-sub-layer-ref { 801 type leafref { 802 path "/ietf-detnet:detnet" 803 + "/ietf-detnet:forwarding-sub-layer" 804 + "/ietf-detnet:forwarding-sub-layer-list" 805 + "/ietf-detnet:name"; 806 } 807 } 809 typedef traffic-profile-ref { 810 type leafref { 811 path "/ietf-detnet:detnet" 812 + "/ietf-detnet:traffic-profile" 813 + "/ietf-detnet:profile-name"; 814 } 815 } 817 typedef ipsec-spi { 818 type uint32 { 819 range "1..max"; 820 } 821 description 822 "IPsec Security Parameters Index"; 823 reference 824 "IETF RFC 6071"; 825 } 827 typedef service-operation-type { 828 type enumeration { 829 enum service-initiation { 830 description 831 "Operation for DetNet service sub-layer encapsulation"; 832 } 833 enum service-termination { 834 description 835 "Operation for DetNet service sub-layer decapsulation"; 836 } 837 enum service-relay { 838 description 839 "Operation for DetNet service sub-layer swap"; 840 } 841 enum non-detnet { 842 description 843 "No operation for DetNet service sub-layer"; 844 } 845 } 846 } 848 typedef forwarding-operations-type { 849 type enumeration { 850 enum forward { 851 description 852 "Operation forward to next-hop"; 853 } 854 enum impose-and-forward { 855 description 856 "Operation impose outgoing label(s) and forward to 857 next-hop"; 858 } 859 enum pop-and-forward { 860 description 861 "Operation pop incoming label and forward to next-hop"; 862 } 863 enum pop-impose-and-forward { 864 description 865 "Operation pop incoming label, impose one or more 866 outgoing label(s) and forward to next-hop"; 867 } 868 enum swap-and-forward { 869 description 870 "Operation swap incoming label, with outgoing label and 871 forward to next-hop"; 872 } 873 enum pop-and-lookup { 874 description 875 "Operation pop incoming label and perform a lookup"; 876 } 877 } 878 description 879 "MPLS operations types"; 880 } 882 typedef service-protection-type { 883 type enumeration { 884 enum none { 885 description 886 "no service protection provide"; 887 } 888 enum replication { 889 description 890 "A Packet Replication Function (PRF) replicates 891 DetNet flow packets and forwards them to one or 892 more next hops in the DetNet domain. The number 893 of packet copies sent to each next hop is a 894 DetNet flow specific parameter at the node doing 895 the replication. PRF can be implemented by an 896 edge node, a relay node, or an end system"; 897 } 898 enum elimination { 899 description 900 "A Packet Elimination Function (PEF) eliminates 901 duplicate copies of packets to prevent excess 902 packets flooding the network or duplicate 903 packets being sent out of the DetNet domain. 904 PEF can be implemented by an edge node, a relay 905 node, or an end system."; 906 } 907 enum ordering { 908 description 909 "A Packet Ordering Function (POF) re-orders 910 packets within a DetNet flow that are received 911 out of order. This function can be implemented 912 by an edge node, a relay node, or an end system."; 913 } 914 enum elimination-ordering { 915 description 916 "A combination of PEF and POF that can be 917 implemented by an edge node, a relay node, or 918 an end system."; 919 } 920 enum elimination-replication { 921 description 922 "A combination of PEF and PRF that can be 923 implemented by an edge node, a relay node, or 924 an end system"; 925 } 926 enum elimination-ordering-replicaiton { 927 description 928 "A combination of PEF, POF and PRF that can be 929 implemented by an edge node, a relay node, or 930 an end system"; 931 } 932 } 933 } 935 typedef sequence-number-generation-type { 936 type enumeration { 937 enum copy-from-app-flow { 938 description 939 "Copy the app-flow sequence number to the DetNet-flow"; 940 } 941 enum generate-by-detnet-flow { 942 description 943 "Generate the sequence number by DetNet flow"; 944 } 945 } 946 } 948 typedef sequence-number-field { 949 type enumeration { 950 enum zero-sn { 951 description 952 "There is no DetNet sequence number field."; 953 } 954 enum short-sn { 955 value 16; 956 description 957 "There is 16bit DetNet sequence number field"; 958 } 959 enum long-sn { 960 value 28; 961 description 962 "There is 28bit DetNet sequence number field"; 963 } 964 } 965 } 967 grouping ip-header { 968 description 969 "The IPv4/IPv6 packet header information"; 970 leaf src-ip-address { 971 type inet:ip-address; 972 description 973 "The source IP address in the header"; 974 } 975 leaf dest-ip-address { 976 type inet:ip-address; 977 description 978 "The destination IP address in the header"; 979 } 980 leaf next-header { 981 type uint8; 982 description 983 "The next header of the IPv6 header"; 984 } 985 leaf traffic-class { 986 type uint8; 987 description 988 "The traffic class value of the header"; 989 } 990 leaf flow-label { 991 type inet:ipv6-flow-label; 992 description 993 "The flow label value of the header"; 994 } 995 leaf source-port { 996 type inet:port-number; 997 description 998 "The source port number"; 999 } 1000 leaf destination-port { 1001 type inet:port-number; 1002 description 1003 "The destination port number"; 1004 } 1005 } 1007 grouping l2-header { 1008 description 1009 "The Ethernet or TSN packet header information"; 1011 leaf source-mac-address { 1012 type yang:mac-address; 1013 description 1014 "The source MAC address value of the Ethernet header"; 1015 } 1016 leaf destination-mac-address { 1017 type yang:mac-address; 1018 description 1019 "The destination MAC address value of the Ethernet header"; 1020 } 1021 leaf ethertype { 1022 type ethertypes:ethertype; 1023 description 1024 "The Ethernet packet type value of the Ethernet header"; 1025 } 1026 leaf vlan-id { 1027 type dot1q-types:vlanid; 1028 description 1029 "The VLAN value of the Ethernet header"; 1030 } 1031 leaf pcp { 1032 type uint8; 1033 description 1034 "The priority value of the Ethernet header"; 1035 } 1036 } 1038 grouping destination-ip-port-identification { 1039 description 1040 "The TCP/UDP port(source/destination) identification information"; 1041 container destination-port { 1042 uses packet-fields:port-range-or-operator; 1043 } 1044 } 1046 grouping source-ip-port-identification { 1047 description 1048 "The TCP/UDP port(source/destination) identification information"; 1049 container source-port { 1050 uses packet-fields:port-range-or-operator; 1051 } 1052 } 1054 grouping ip-flow-identification { 1055 description 1056 "The IPv4/IPv6 packet header identification information"; 1057 leaf src-ip-prefix { 1058 type inet:ip-prefix; 1059 description 1060 "The source IP address of the header"; 1061 } 1062 leaf dest-ip-prefix { 1063 type inet:ip-prefix; 1064 description 1065 "The destination IP address of the header"; 1066 } 1067 leaf next-header { 1068 type uint8; 1069 description 1070 "The next header of the IPv6 header"; 1071 } 1072 leaf traffic-class { 1073 type uint8; 1074 description 1075 "The traffic class value of the header"; 1076 } 1077 leaf flow-label { 1078 type inet:ipv6-flow-label; 1079 description 1080 "The flow label value of the header"; 1081 } 1082 uses source-ip-port-identification; 1083 uses destination-ip-port-identification; 1084 leaf ipsec-spi { 1085 type ipsec-spi; 1086 description 1087 "IPsec Security Parameters Index of the Security Association"; 1088 reference 1089 "IETF RFC 6071"; 1090 } 1091 } 1093 grouping mpls-flow-identification { 1094 description 1095 "The MPLS packet header identification information"; 1096 choice label-space { 1097 description 1098 "Designates the label space being used."; 1099 case context-label-space { 1100 uses rt-types:mpls-label-stack; 1101 } 1102 case platform-label-space { 1103 leaf label { 1104 type rt-types:mpls-label; 1105 } 1106 } 1108 } 1109 } 1111 grouping traffic-specification { 1112 container traffic-specification { 1113 description 1114 "traffic-specification specifies how the Source 1115 transmits packets for the flow. This is the 1116 promise/request of the Source to the network. 1117 The network uses this traffic specification 1118 to allocate resources and adjust queue 1119 parameters in network nodes."; 1120 reference 1121 "draft-ietf-detnet-flow-information-model Section 4.1"; 1122 leaf interval { 1123 type uint32; 1124 units microseconds; 1125 description 1126 "The period of time in which the traffic 1127 specification cannot be exceeded."; 1129 } 1130 leaf max-packets-per-interval { 1131 type uint32; 1132 description 1133 "The maximum number of packets that the 1134 source will transmit in one Interval."; 1135 } 1136 leaf max-payload-size { 1137 type uint32; 1138 description 1139 "The maximum payload size that the source 1140 will transmit."; 1141 } 1142 leaf average-packets-per-interval { 1143 type uint32; 1144 description 1145 "The average number of packets that the 1146 source will transmit in one interval"; 1147 } 1148 leaf average-payload-size { 1149 type uint32; 1150 description 1151 "The average payload size that the 1152 source will transmit."; 1153 } 1154 } 1155 } 1156 grouping traffic-requirements { 1157 container traffic-requirements { 1158 description 1159 "FlowRequirements: defines the attributes of the App-flow 1160 regarding bandwidth, latency, latency variation, loss, and 1161 misordering tolerance."; 1162 reference 1163 "draft-ietf-detnet-flow-information-model Section 4.2"; 1164 leaf min-bandwidth { 1165 type uint64; 1166 units bytes-per-second; 1167 description 1168 "MinBandwidth is the minimum bandwidth that has to be 1169 guaranteed for the DetNet service. MinBandwidth is 1170 specified in octets per second."; 1171 } 1172 leaf max-latency { 1173 type uint32; 1174 units microseconds; 1175 description 1176 "MaxLatency is the maximum latency from Ingress to Egress(es) 1177 for a single packet of the DetNet flow. MaxLatency is 1178 specified as an integer number of nanoseconds"; 1179 } 1180 leaf max-latency-variation { 1181 type uint32; 1182 description 1183 "MaxLatencyVariation is the difference between the minimum and 1184 the maximum end-to-end one-way latency. MaxLatencyVariation 1185 is specified as an integer number of nanoseconds."; 1186 } 1187 leaf max-loss { 1188 type uint32; 1189 description 1190 "MaxLoss defines the maximum Packet Loss Ratio (PLR) parameter 1191 for the DetNet service between the Ingress and Egress(es) of 1192 the DetNet domain."; 1193 } 1194 leaf max-consecutive-loss-tolerance { 1195 type uint32; 1196 units packets; 1197 description 1198 "Some applications have special loss requirement, such as 1199 MaxConsecutiveLossTolerance. The maximum consecutive loss 1200 tolerance parameter describes the maximum number of 1201 consecutive packets whose loss can be tolerated. The maximum 1202 consecutive loss tolerance can be measured for example based 1203 on sequence number"; 1205 } 1206 leaf max-misordering { 1207 type uint32; 1208 units packets; 1209 description 1210 "MaxMisordering describes the tolerable maximum number of 1211 packets that can be received out of order. The maximum 1212 allowed misordering can be measured for example based on 1213 sequence number. The value zero for the maximum allowed 1214 misordering indicates that in order delivery is required, 1215 misordering cannot be tolerated."; 1216 } 1217 } 1218 } 1220 grouping data-flow-spec { 1221 description 1222 "app-flow identification"; 1223 choice data-flow-type { 1224 case tsn-app-flow { 1225 uses l2-header; 1226 } 1227 case ip-app-flow { 1228 uses ip-flow-identification; 1229 } 1230 case mpls-app-flow { 1231 uses mpls-flow-identification; 1232 } 1233 } 1234 } 1236 grouping detnet-flow-spec { 1237 description 1238 "detnet-flow identification"; 1239 choice detnet-flow-type { 1240 case ip-detnet-flow { 1241 uses ip-flow-identification; 1242 } 1243 case mpls-detnet-flow { 1244 uses mpls-flow-identification; 1245 } 1246 } 1247 } 1249 grouping app-flows-ref { 1250 description 1251 "incoming or outgoing app-flow reference group"; 1252 leaf-list flow-list{ 1253 type app-flow-ref; 1254 description 1255 "List of ingress or egress app-flows"; 1256 } 1257 } 1259 grouping service-sub-layer-ref { 1260 description 1261 "incoming or outgoing service sub-layer reference group"; 1262 leaf-list service-sub-layer { 1263 type service-sub-layer-ref; 1264 description 1265 "List of incoming or outgoing service sub-layers 1266 that have to aggregate or disaggregate"; 1267 } 1268 } 1270 grouping forwarding-sub-layer-ref { 1271 description 1272 "incoming or outgoing forwarding sub-layer reference group"; 1273 leaf-list forwarding-sub-layer { 1274 type forwarding-sub-layer-ref; 1275 description 1276 "List of incoming or outgoing forwarding sub-layers 1277 that have to aggregate or disaggregate"; 1278 } 1279 } 1281 grouping detnet-header { 1282 description 1283 "DetNet header info for DetNet encapsulation or swap"; 1284 choice header-type { 1285 case detnet-mpls-header { 1286 description 1287 "MPLS label stack for DetNet MPLS encapsulation or 1288 forwarding"; 1289 uses rt-types:mpls-label-stack; 1290 } 1291 case detnet-ip-header { 1292 description 1293 "IPv4/IPv6 packet header for DetNet IP encapsulation"; 1294 uses ip-header; 1295 } 1296 } 1297 } 1299 grouping detnet-app-next-hop-content { 1300 description 1301 "Generic parameters of DetNet next hops."; 1302 choice next-hop-options { 1303 mandatory true; 1304 description 1305 "Options for next hops. 1306 It is expected that further cases will be added through 1307 augments from other modules, e.g., for recursive 1308 next hops."; 1309 case simple-next-hop { 1310 description 1311 "This case represents a simple next hop consisting of the 1312 next-hop address and/or outgoing interface. 1313 Modules for address families MUST augment this case with a 1314 leaf containing a next-hop address of that address 1315 family."; 1316 leaf outgoing-interface { 1317 type if:interface-ref; 1318 } 1319 choice flow-type { 1320 case ip { 1321 leaf next-hop-address { 1322 type inet:ip-address; 1323 } 1324 } 1325 case mpls { 1326 uses rt-types:mpls-label-stack; 1327 } 1328 } 1329 } 1330 case next-hop-list { 1331 container next-hop-list { 1332 description 1333 "Container for multiple next hops."; 1334 list next-hop { 1335 key "hop-index"; 1336 description 1337 "An entry in a next-hop list. 1338 Modules for address families MUST augment this list 1339 with a leaf containing a next-hop address of that 1340 address family."; 1341 leaf hop-index { 1342 type uint8; 1343 description 1344 "The value if the index of for a hop."; 1345 } 1346 leaf outgoing-interface { 1347 type if:interface-ref; 1348 } 1349 choice flow-type { 1350 case ip { 1351 leaf next-hop-address { 1352 type inet:ip-address; 1353 } 1354 } 1355 case mpls { 1356 uses rt-types:mpls-label-stack; 1357 } 1358 } 1359 } 1360 } 1361 } 1362 } 1363 } 1365 grouping detnet-forwarding-next-hop-content { 1366 description 1367 "Generic parameters of DetNet next hops."; 1368 choice next-hop-options { 1369 mandatory true; 1370 description 1371 "Options for next hops. 1372 It is expected that further cases will be added through 1373 augments from other modules, e.g., for recursive 1374 next hops."; 1375 case simple-next-hop { 1376 description 1377 "This case represents a simple next hop consisting of the 1378 next-hop address and/or outgoing interface. 1379 Modules for address families MUST augment this case with a 1380 leaf containing a next-hop address of that address 1381 family."; 1382 leaf outgoing-interface { 1383 type if:interface-ref; 1384 } 1385 choice flow-type { 1386 case ip { 1387 choice operation-type { 1388 case ip-forwarding { 1389 leaf next-hop-address { 1390 type inet:ip-address; 1391 } 1392 } 1393 case mpls-over-ip-encapsulation { 1394 uses ip-header; 1395 } 1396 } 1398 } 1399 case mpls { 1400 uses rt-types:mpls-label-stack; 1401 } 1402 } 1403 } 1404 case next-hop-list { 1405 container next-hop-list { 1406 description 1407 "Container for multiple next hops."; 1408 list next-hop { 1409 key "hop-index"; 1410 description 1411 "An entry in a next-hop list. 1413 Modules for address families MUST augment this list 1414 with a leaf containing a next-hop address of that 1415 address family."; 1416 leaf hop-index { 1417 type uint8; 1418 description 1419 "The value if the index of for a hop."; 1420 } 1421 leaf outgoing-interface { 1422 type if:interface-ref; 1423 } 1424 choice flow-type { 1425 case ip { 1426 choice operation-type { 1427 case ip-forwarding { 1428 leaf next-hop-address { 1429 type inet:ip-address; 1430 } 1431 } 1432 case mpls-over-ip-encapsulation { 1433 uses ip-header; 1434 } 1435 } 1436 } 1437 case mpls { 1438 uses rt-types:mpls-label-stack; 1439 } 1440 } 1441 } 1442 } 1443 } 1444 } 1445 } 1446 container detnet { 1447 list traffic-profile { 1448 key "profile-name"; 1449 description 1450 "A traffic profile"; 1451 leaf profile-name { 1452 type string; 1453 description 1454 "An Aggregation group ID. Zero means the service is not 1455 part of a group"; 1456 } 1457 uses traffic-requirements; 1458 uses traffic-specification; 1459 leaf-list member-applications { 1460 type app-flow-ref; 1461 config false; 1462 description 1463 "Applications attached to this profile"; 1464 } 1465 leaf-list member-services { 1466 type service-sub-layer-ref; 1467 config false; 1468 description 1469 "Services attached to this profile"; 1470 } 1471 leaf-list member-forwarding-sublayers { 1472 type forwarding-sub-layer-ref; 1473 config false; 1474 description 1475 "Forwarding sub-layer attached to this profile"; 1476 } 1477 } 1478 container app-flows { 1479 description 1480 "The DetNet app-flow configuration"; 1481 reference 1482 "draft-ietf-detnet-flow-information-model Section Section 4.1"; 1483 list app-flow { 1484 key "name"; 1485 description 1486 "A unique (management) identifier of the App-flow."; 1487 leaf name { 1488 type string; 1489 description 1490 "A unique (management) identifier of the App-flow."; 1491 reference 1492 "draft-ietf-detnet-flow-information-model 1493 Sections 4.1, 5.1"; 1495 } 1496 leaf app-flow-bidir-congruent { 1497 type boolean; 1498 description 1499 "Defines the data path requirement of the App-flow whether 1500 it must share the same data path and physical path 1501 for both directions through the network, 1502 e.g., to provide congruent paths in the two directions."; 1503 reference 1504 "draft-ietf-detnet-flow-information-model Section 4.2"; 1505 } 1506 leaf outgoing-service { 1507 type service-sub-layer-ref; 1508 config false; 1509 description 1510 "Binding to this applications outgoing 1511 service"; 1512 } 1513 leaf incoming-service { 1514 type service-sub-layer-ref; 1515 config false; 1516 description 1517 "Binding to this applications incoming 1518 service"; 1519 } 1520 leaf traffic-profile { 1521 type traffic-profile-ref; 1522 description 1523 "The Traffic Profile for this group"; 1524 } 1525 container ingress { 1526 // key "name"; This should be a list for aggregation 1527 description 1528 "Ingress DetNet application flows or a compound flow"; 1529 leaf name { 1530 type string; 1531 description 1532 "Ingress DetNet application"; 1533 } 1534 leaf app-flow-status { 1535 type identityref { 1536 base app-status; 1537 } 1538 config false; 1539 description 1540 "Status of ingress application flow"; 1541 reference 1542 "draft-ietf-detnet-flow-information-model 1543 Sections 4.1, 5.8"; 1544 } 1545 leaf interface { 1546 type if:interface-ref; 1547 } 1548 uses data-flow-spec; 1549 } //End of app-ingress 1550 container egress { 1551 description 1552 "Route's next-hop attribute."; 1553 // key "name"; This should be a list for aggregation 1554 leaf name { 1555 type string; 1556 description 1557 "Egress DetNet application"; 1558 } 1559 choice application-type { 1560 container Ethernet { 1561 leaf Ethernet-place-holder { 1562 type string; 1563 description 1564 "Place holder for matching Ethernet"; 1565 } 1566 } 1567 container ip-mpls { 1568 uses detnet-app-next-hop-content; 1569 } 1570 } 1571 } 1572 } 1573 } 1574 container service-sub-layer { 1575 description 1576 "The DetNet service sub-layer configuration"; 1577 list service-sub-layer-list { 1578 key "name"; 1579 description 1580 "Services are indexed by name"; 1581 leaf name { 1582 type string; 1583 description 1584 "The name of the DetNet service sub-layer"; 1585 } 1586 leaf service-rank { 1587 type uint8; 1588 description 1589 "The DetNet rank for this service"; 1590 reference 1591 "draft-ietf-detnet-flow-information-model Section 5.7"; 1592 } 1593 leaf traffic-profile { 1594 type traffic-profile-ref; 1595 description 1596 "The Traffic Profile for this service"; 1597 } 1598 container service-protection { 1599 leaf service-protection-type { 1600 type service-protection-type; 1601 description 1602 "The DetNet service protection type such as PRF, PEF, 1603 PEOF,PERF, and PEORF"; 1604 reference 1605 "draft-ietf-detnet-data-plane-framework Section 4.3"; 1606 } 1607 leaf sequence-number-length { 1608 type sequence-number-field; 1609 description 1610 "Sequence number field length can be one of 0 (none), 1611 16 bits or 28 bits."; 1612 } 1613 } 1614 leaf service-operation-type { 1615 type service-operation-type; 1616 } 1617 container incoming-type { 1618 description 1619 "The DetNet service sub-layer incoming configuration."; 1620 choice incoming-type { 1621 mandatory true; 1622 description 1623 ""; 1624 container app-flow { 1625 description 1626 "This service sub-layer is related to 1627 the app-flows of the upper layer 1628 and provide ingress proxy or ingress aggregation 1629 at the ingress node."; 1630 uses app-flows-ref; 1631 } 1632 container service { 1633 description 1634 "This service sub-layer is related to 1635 the service sub-layer of the upper layer 1636 and provide service-to-service aggregation 1637 at the ingress node or relay node."; 1638 uses service-sub-layer-ref; 1640 } 1641 container forwarding { 1642 description 1643 "This service sub-layer is related to 1644 the forwarding sub-layer of the upper layer 1645 and provide forwarding-to-service aggregation 1646 at the ingress node or relay node."; 1647 uses forwarding-sub-layer-ref; 1648 } 1649 container service-identification { 1650 description 1651 "This service sub-layer is related to 1652 the service or forwarding sub-layer of the lower layer 1653 and provide DetNet service relay or termination 1654 at the relay node or egress node."; 1655 uses detnet-flow-spec; 1656 } 1657 } 1658 } 1659 container outgoing-type { 1660 description 1661 "The DetNet service sub-layer outgoing configuration."; 1662 choice outgoing-type { 1663 mandatory true; 1664 description 1665 ""; 1666 container forwarding-sub-layer { 1667 description 1668 "This service sub-layer is sent to the forwarding 1669 sub-layers of the lower layer for DetNet service 1670 forwarding or service-to-forwarding aggregation at 1671 the ingress node or relay node. When the operation 1672 type is service-initiation, The service sub-layer 1673 encapsulates the DetNet Control-Word and services 1674 label, which are for individual DetNet flow when the 1675 incoming type is app-flow and for aggregated DetNet 1676 flow when the incoming type is service or 1677 forwarding. The service sub-layer swaps the service 1678 label when the operation type is service-relay."; 1679 list service-outgoing-list { 1680 key "service-outgoing-index"; 1681 description 1682 "list of the outgoing service 1683 that separately for each node 1684 where services will be eliminated"; 1685 leaf service-outgoing-index { 1686 type uint8; 1687 } 1688 uses detnet-header; 1689 list next-layer { 1690 key "index"; 1691 description 1692 "list of the forwarding-sub-layer 1693 for replicate to multiple paths"; 1694 leaf index { 1695 type uint8; 1696 } 1697 leaf forwarding-sub-layer { 1698 type forwarding-sub-layer-ref; 1699 description 1700 "forwarding-sub-layer reference point"; 1701 } 1702 } 1703 } 1704 } 1705 container service-sub-layer { 1706 description 1707 "This service sub-layer is sent to the service 1708 sub-layers of the lower layer for service-to-service 1709 aggregation at the ingress node or relay node. The 1710 service sub-layer encapsulates the DetNet 1711 Control-Word and S-label when the operation type is 1712 service-initiation, and swaps the S-label when the 1713 operation type is service-relay."; 1714 leaf aggregation-service-sub-layer { 1715 type service-sub-layer-ref; 1716 description 1717 "reference point of the service-sub-layer 1718 at which this service will be aggregated"; 1719 } 1720 container service-label { 1721 uses rt-types:mpls-label-stack; 1722 } 1723 } 1724 container upper-app-flow { 1725 description 1726 "This service sub-layer is sent to the app-flow of 1727 the upper layer for egress proxy at the egress node, 1728 and decapsulates the DetNet Control-Word and S-label 1729 for individual DetNet service. This outgoing type 1730 only can be chosen when the operation type is 1731 service-termination."; 1732 uses app-flows-ref; 1733 } 1734 container upper-service-sub-layer { 1735 description 1736 "This service sub-layer is sent to the service 1737 sub-layer of the upper layer for service-to-service 1738 disaggregation at the relay node or egress node, and 1739 decapsulates the DetNet Control-Word and A-label for 1740 aggregated DetNet service. This outgoing type only 1741 can be chosen when the operation type is 1742 service-termination."; 1743 uses service-sub-layer-ref; 1744 } 1745 container upper-forwarding-sub-layer { 1746 description 1747 "This service sub-layer is sent to the forwarding 1748 sub-layer of the upper layer for 1749 forwarding-to-service disaggregation at the relay 1750 node or egress node, and decapsulates the DetNet 1751 Control-Word and A-label for aggregated DetNet 1752 service. This outgoing type only can be chosen when 1753 the operation type is service-termination"; 1754 uses forwarding-sub-layer-ref; 1755 } 1756 } 1757 } 1758 } 1759 } 1760 container forwarding-sub-layer { 1761 description 1762 "The DetNet forwarding sub-layer configuration"; 1763 list forwarding-sub-layer-list { 1764 key "name"; 1765 description 1766 ""; 1767 leaf name { 1768 type string; 1769 description 1770 "The name of the DetNet forwarding sub-layer"; 1771 } 1772 leaf traffic-profile { 1773 type traffic-profile-ref; 1774 description 1775 "The Traffic Profile for this group"; 1776 } 1777 leaf forwarding-operation-type { 1778 type forwarding-operations-type; 1779 } 1780 container incoming-type { 1781 description 1782 "The DetNet forwarding sub-layer incoming configuration."; 1783 choice incoming-type { 1784 mandatory true; 1785 description 1786 "Cases of incoming types"; 1787 container service-sub-layer { 1788 description 1789 "This forwarding sub-layer is related to the service 1790 sub-layers of the upper layer and provide DetNet 1791 forwarding or service-to-forwarding aggregation at 1792 the ingress node or relay node."; 1793 leaf-list sub-layer-list { 1794 type service-sub-layer-ref; 1795 config false; 1796 description 1797 ""; 1798 } 1799 } 1800 case upper-forwarding-sub-layer { 1801 description 1802 "This forwarding sub-layer is related to the 1803 forwarding sub-layer of the upper layer and provide 1804 forwarding-to-forwarding aggregation at the ingress 1805 node or relay node or transit node."; 1806 uses forwarding-sub-layer-ref; 1807 } 1808 case lower-forwarding-sub-layer { 1809 //case forwarding-identification { 1810 description 1811 "This forwarding sub-layer is related to all of the 1812 lower layer and provide DetNet forwarding swap or 1813 termination at the transit node or relay node or 1814 egress node."; 1815 leaf interface { 1816 type if:interface-ref; 1817 description 1818 "This is the interface associated with the forwarding 1819 sub-layer"; 1820 } 1821 uses detnet-flow-spec; 1822 } 1823 } 1824 } 1825 container outgoing-type { 1826 description 1827 "The DetNet forwarding sub-layer outbound configuration."; 1828 choice outgoing-type { 1829 mandatory true; 1830 description 1831 ""; 1833 container interface { 1834 description 1835 "This forwarding sub-layer is sent to the interface 1836 for send to next-hop at the ingress node or relay 1837 node or transit node."; 1838 uses detnet-forwarding-next-hop-content; 1839 } 1840 case service { 1841 description 1842 "This forwarding sub-layer is sent to the service 1843 sub-layers of the lower layer for 1844 forwarding-to-service aggregation at the ingress 1845 node or relay node."; 1846 leaf aggregation-service-sub-layer { 1847 type service-sub-layer-ref; 1848 } 1849 container optional-forwarding-label { 1850 uses rt-types:mpls-label-stack; 1851 } 1852 } 1853 case forwarding { 1854 description 1855 "This forwarding sub-layer is sent to the forwarding 1856 sub-layers of the lower layer for 1857 forwarding-to-forwarding aggregation at the ingress 1858 node or relay node or transit node."; 1859 leaf aggregation-forwarding-sub-layer { 1860 type forwarding-sub-layer-ref; 1861 } 1862 container forwarding-label { 1863 uses rt-types:mpls-label-stack; 1864 } 1865 } 1866 case upper-service { 1867 description 1868 "This forwarding sub-layer is sent to the service 1869 sub-layer of the upper layer and decapsulate the 1870 F-label for DetNet service or service-to-forwarding 1871 disaggregation at the relay node or egress node. 1872 This outgoing type only can be chosen when the 1873 operation type is pop-and-lookup"; 1874 uses service-sub-layer-ref; 1875 } 1876 case upper-forwarding { 1877 description 1878 "This forwarding sub-layer is sent to the forwarding 1879 sub-layer of the upper layer and decapsulate the 1880 F-label for forwarding-to-forwarding disaggregation 1881 at the transit node or relay node or egress node. 1882 This outgoing type only can be chosen when the 1883 operation type is pop-and-lookup"; 1884 uses forwarding-sub-layer-ref; 1885 } 1886 } 1887 } 1888 } 1889 } 1890 } 1891 } 1892 1894 8. Open Issues 1896 There are some open issues that are still under discussion: 1898 o Terminology. 1900 o Security Considerations. 1902 These issues will be resolved in the following versions of the draft. 1904 9. IANA Considerations 1906 This document makes no request of IANA. 1908 Note to RFC Editor: this section may be removed on publication as an 1909 RFC. 1911 10. Security Considerations 1913 1915 11. Acknowledgements 1917 12. References 1919 12.1. Normative References 1921 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1922 Requirement Levels", BCP 14, RFC 2119, 1923 DOI 10.17487/RFC2119, March 1997, 1924 . 1926 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 1927 RFC 6991, DOI 10.17487/RFC6991, July 2013, 1928 . 1930 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1931 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1932 . 1934 [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, 1935 "Deterministic Networking Architecture", RFC 8655, 1936 DOI 10.17487/RFC8655, October 2019, 1937 . 1939 12.2. Informative References 1941 [I-D.ietf-detnet-flow-information-model] 1942 Varga, B., Farkas, J., Cummings, R., Jiang, Y., and D. 1943 Fedyk, "DetNet Flow Information Model", draft-ietf-detnet- 1944 flow-information-model-11 (work in progress), October 1945 2020. 1947 Appendix A. Examples 1949 The following examples are provided. 1951 o A simple DetNet application illustrting multiplexing of 1952 Application Flows. 1954 o A case of Forwarding sub-layer aggregation using a single 1955 forwarding sublayer. 1957 o A case of Service sub-layer aggregation with and aggrgation label. 1959 A.1. Example JSON Configuration 1961 { 1962 "ietf-interfaces:interfaces": { 1963 "interface": [ 1964 { 1965 "name": "eth0", 1966 "type": "iana-if-type:ethernetCsmacd", 1967 "oper-status": "up", 1968 "statistics": { 1969 "discontinuity-time": "2020-10-02T23:59:00Z" 1970 } 1971 }, 1972 { 1973 "name": "eth1", 1974 "type": "iana-if-type:ethernetCsmacd", 1975 "oper-status": "up", 1976 "statistics": { 1977 "discontinuity-time": "2020-10-02T23:59:00Z" 1979 } 1980 }, 1981 { 1982 "name": "eth2", 1983 "type": "iana-if-type:ethernetCsmacd", 1984 "oper-status": "up", 1985 "statistics": { 1986 "discontinuity-time": "2020-10-02T23:59:00Z" 1987 } 1988 }, 1989 { 1990 "name": "eth3", 1991 "type": "iana-if-type:ethernetCsmacd", 1992 "oper-status": "up", 1993 "statistics": { 1994 "discontinuity-time": "2020-10-02T23:59:00Z" 1995 } 1996 }, 1997 { 1998 "name": "eth4", 1999 "type": "iana-if-type:ethernetCsmacd", 2000 "oper-status": "up", 2001 "statistics": { 2002 "discontinuity-time": "2020-10-02T23:59:00Z" 2003 } 2004 } 2005 ] 2006 }, 2007 "ietf-detnet:detnet": { 2008 "app-flows": { 2009 "app-flow": [ 2010 { 2011 "name": "app-0", 2012 "app-flow-bidir-congruent": false, 2013 "outgoing-service": "ssl-1", 2014 "traffic-profile": "pf-1", 2015 "ingress": { 2016 "app-flow-status": "ready", 2017 "interface": "eth0", 2018 "src-ip-prefix": "1.1.1.1/32", 2019 "dest-ip-prefix": "8.8.8.8/32", 2020 "traffic-class": 6 2021 } 2022 }, 2023 { 2024 "name": "app-1", 2025 "app-flow-bidir-congruent": false, 2026 "outgoing-service": "ssl-1", 2027 "traffic-profile": "pf-1", 2028 "ingress": { 2029 "app-flow-status": "ready", 2030 "interface": "eth0", 2031 "src-ip-prefix": "1.1.1.1/32", 2032 "dest-ip-prefix": "8.8.8.8/32", 2033 "traffic-class": 7 2034 } 2035 } 2036 ] 2037 }, 2038 "traffic-profile": [ 2039 { 2040 "profile-name": "pf-1", 2041 "traffic-requirements": { 2042 "min-bandwidth": "100000000", 2043 "max-latency": 100000000, 2044 "max-latency-variation": 200000000, 2045 "max-loss": 2, 2046 "max-consecutive-loss-tolerance": 5, 2047 "max-misordering": 0 2048 }, 2049 "traffic-specification": { 2050 "interval": 5, 2051 "max-packets-per-interval": 10, 2052 "max-payload-size": 1500, 2053 "average-packets-per-interval": 5, 2054 "average-payload-size": 1000 2055 }, 2056 "member-applications": [ 2057 "app-0", 2058 "app-1" 2059 ] 2060 }, 2061 { 2062 "profile-name": "pf-2", 2063 "traffic-requirements": { 2064 "min-bandwidth": "200000000", 2065 "max-latency": 100000000, 2066 "max-latency-variation": 200000000, 2067 "max-loss": 2, 2068 "max-consecutive-loss-tolerance": 5, 2069 "max-misordering": 0 2070 }, 2071 "traffic-specification": { 2072 "interval": 5, 2073 "max-packets-per-interval": 10, 2074 "max-payload-size": 1500, 2075 "average-packets-per-interval": 5, 2076 "average-payload-size": 1000 2077 }, 2078 "member-services": [ 2079 "ssl-1" 2080 ] 2081 }, 2082 { 2083 "profile-name": "pf-3", 2084 "traffic-specification": { 2085 "interval": 5, 2086 "max-packets-per-interval": 10, 2087 "max-payload-size": 1500 2088 }, 2089 "member-forwarding-sublayers": [ 2090 "fsl-1" 2091 ] 2092 } 2093 ], 2094 "service-sub-layer": { 2095 "service-sub-layer-list": [ 2096 { 2097 "name": "ssl-1", 2098 "service-rank": 10, 2099 "traffic-profile": "pf-2", 2100 "service-operation-type": "service-initiation", 2101 "service-protection": { 2102 "service-protection-type": "none", 2103 "sequence-number-length": "long-sn" 2104 }, 2105 "incoming-type": { 2106 "app-flow": { 2107 "flow-list": [ 2108 "app-0", 2109 "app-1" 2110 ] 2111 } 2112 }, 2113 "outgoing-type": { 2114 "forwarding-sub-layer": { 2115 "service-outgoing-list": [ 2116 { 2117 "service-outgoing-index": 0, 2118 "mpls-label-stack": { 2119 "entry": [ 2120 { 2121 "id": 0, 2122 "label": 100 2124 } 2125 ] 2126 }, 2127 "next-layer": [ 2128 { 2129 "index": 0, 2130 "forwarding-sub-layer": "fsl-1" 2131 } 2132 ] 2133 } 2134 ] 2135 } 2136 } 2137 } 2138 ] 2139 } 2140 } 2141 } 2143 Figure 1: Example DetNet JSON configuration 2145 A.2. Example XML Config: Aggregation using a Forwarding Sublayer 2147 2150 2151 eth0 2152 ia:ethernetCsmacd 2153 up 2154 2155 2020-10-02T23:59:00Z 2156 2157 2158 2159 eth1 2160 ia:ethernetCsmacd 2161 up 2162 2163 2020-10-02T23:59:00Z 2164 2165 2166 2167 eth2 2168 ia:ethernetCsmacd 2169 up 2170 2171 2020-10-02T23:59:00Z 2173 2174 2175 2176 eth3 2177 ia:ethernetCsmacd 2178 up 2179 2180 2020-10-02T23:59:00Z 2181 2182 2183 2184 eth4 2185 ia:ethernetCsmacd 2186 up 2187 2188 2020-10-02T23:59:00Z 2189 2190 2191 2192 2194 2195 2196 app-1 2197 false 2198 ssl-1 2199 1 2200 2201 eth0 2202 1.1.1.1/32 2203 8.8.8.8/32 2204 2205 2206 2207 app-2 2208 false 2209 ssl-2 2210 1 2211 2212 eth1 2213 1.1.1.2/32 2214 8.8.8.9/32 2215 2216 2217 2218 2219 1 2220 2221 100000000 2222 100000000 2223 200000000 2224 2 2225 5 2226 0 2227 2228 app-1 2229 app-2 2230 2231 2232 2 2233 2234 100000000 2235 100000000 2236 200000000 2237 2 2238 5 2239 0 2240 2241 ssl-1 2242 ssl-2 2243 2244 2245 3 2246 2247 5 2248 10 2249 1500 2250 2251 afl-1 2252 2253 2254 2255 ssl-1 2256 10 2257 2 2258 service-initiation 2260 2261 none 2262 long-sn 2263 2264 2265 2266 app-1 2267 2268 2269 2270 2271 2272 0 2273 2274 2275 0 2276 2277 2278 2279 2280 0 2281 afl-1 2282 2283 2284 2285 2286 2287 2288 ssl-2 2289 10 2290 2 2291 service-initiation 2293 2294 none 2295 long-sn 2296 2297 2298 2299 app-2 2300 2301 2302 2303 2304 2305 0 2306 2307 2308 0 2309 2310 2311 2312 2313 0 2314 afl-1 2315 2316 2318 2319 2320 2321 2322 2323 2324 afl-1 2325 3 2326 impose-and-forward 2328 2329 2330 ssl-1 2331 ssl-2 2332 2333 2334 2335 2336 2337 2338 0 2339 2340 2341 2342 eth2 2343 2344 2345 2346 2347 2349 Figure 2: Example DetNet XML configuration 2351 A.3. Example JSON Service Aggregation Configuration 2353 { 2354 "ietf-interfaces:interfaces": { 2355 "interface": [ 2356 { 2357 "name": "eth0", 2358 "type": "iana-if-type:ethernetCsmacd", 2359 "oper-status": "up", 2360 "statistics": { 2361 "discontinuity-time": "2020-10-02T23:59:00Z" 2362 } 2363 }, 2364 { 2365 "name": "eth1", 2366 "type": "iana-if-type:ethernetCsmacd", 2367 "oper-status": "up", 2368 "statistics": { 2369 "discontinuity-time": "2020-10-02T23:59:00Z" 2370 } 2371 }, 2372 { 2373 "name": "eth2", 2374 "type": "iana-if-type:ethernetCsmacd", 2375 "oper-status": "up", 2376 "statistics": { 2377 "discontinuity-time": "2020-10-02T23:59:00Z" 2378 } 2379 }, 2380 { 2381 "name": "eth3", 2382 "type": "iana-if-type:ethernetCsmacd", 2383 "oper-status": "up", 2384 "statistics": { 2385 "discontinuity-time": "2020-10-02T23:59:00Z" 2386 } 2387 }, 2388 { 2389 "name": "eth4", 2390 "type": "iana-if-type:ethernetCsmacd", 2391 "oper-status": "up", 2392 "statistics": { 2393 "discontinuity-time": "2020-10-02T23:59:00Z" 2394 } 2395 } 2396 ] 2397 }, 2398 "ietf-detnet:detnet": { 2399 "app-flows": { 2400 "app-flow": [ 2401 { 2402 "name": "app-1", 2403 "app-flow-bidir-congruent": false, 2404 "outgoing-service": "ssl-1", 2405 "traffic-profile": "1", 2406 "ingress": { 2407 "interface": "eth0", 2408 "src-ip-prefix": "1.1.1.1/32", 2409 "dest-ip-prefix": "8.8.8.8/32" 2410 } 2411 }, 2412 { 2413 "name": "app-2", 2414 "app-flow-bidir-congruent": false, 2415 "outgoing-service": "ssl-2", 2416 "traffic-profile": "1", 2417 "ingress": { 2418 "interface": "eth1", 2419 "src-ip-prefix": "1.1.1.2/32", 2420 "dest-ip-prefix": "8.8.8.9/32" 2421 } 2422 } 2423 ] 2424 }, 2425 "traffic-profile": [ 2426 { 2427 "profile-name": "1", 2428 "traffic-requirements": { 2429 "min-bandwidth": "100000000", 2430 "max-latency": 100000000, 2431 "max-latency-variation": 200000000, 2432 "max-loss": 2, 2433 "max-consecutive-loss-tolerance": 5, 2434 "max-misordering": 0 2435 }, 2436 "member-applications": [ 2437 "app-1", 2438 "app-2" 2439 ] 2440 }, 2441 { 2442 "profile-name": "2", 2443 "traffic-requirements": { 2444 "min-bandwidth": "100000000", 2445 "max-latency": 100000000, 2446 "max-latency-variation": 200000000, 2447 "max-loss": 2, 2448 "max-consecutive-loss-tolerance": 5, 2449 "max-misordering": 0 2450 }, 2451 "member-services": [ 2452 "ssl-1", 2453 "ssl-2" 2454 ] 2455 }, 2456 { 2457 "profile-name": "3", 2458 "traffic-specification": { 2459 "interval": 5, 2460 "max-packets-per-interval": 10, 2461 "max-payload-size": 1500 2463 }, 2464 "member-forwarding-sublayers": [ 2465 "afl-1" 2466 ] 2467 } 2468 ], 2469 "service-sub-layer": { 2470 "service-sub-layer-list": [ 2471 { 2472 "name": "ssl-1", 2473 "service-rank": 10, 2474 "traffic-profile": "2", 2475 "service-protection": { 2476 "service-protection-type": "none", 2477 "sequence-number-length": "long-sn" 2478 }, 2479 "service-operation-type": "service-initiation", 2480 "incoming-type": { 2481 "app-flow": { 2482 "flow-list": [ 2483 "app-1" 2484 ] 2485 } 2486 }, 2487 "outgoing-type": { 2488 "service-sub-layer": { 2489 "aggregation-service-sub-layer": "asl-1", 2490 "service-label": { 2491 "mpls-label-stack": { 2492 "entry": [ 2493 { 2494 "id": 0, 2495 "label": 102 2496 } 2497 ] 2498 } 2499 } 2500 } 2501 } 2502 }, 2503 { 2504 "name": "ssl-2", 2505 "service-rank": 10, 2506 "traffic-profile": "2", 2507 "service-operation-type": "service-initiation", 2508 "service-protection": { 2509 "service-protection-type": "none", 2510 "sequence-number-length": "long-sn" 2512 }, 2513 "incoming-type": { 2514 "app-flow": { 2515 "flow-list": [ 2516 "app-2" 2517 ] 2518 } 2519 }, 2520 "outgoing-type": { 2521 "service-sub-layer": { 2522 "aggregation-service-sub-layer": "asl-1", 2523 "service-label": { 2524 "mpls-label-stack": { 2525 "entry": [ 2526 { 2527 "id": 0, 2528 "label": 105 2529 } 2530 ] 2531 } 2532 } 2533 } 2534 } 2535 }, 2536 { 2537 "name": "asl-1", 2538 "service-rank": 10, 2539 "service-protection": { 2540 "service-protection-type": "none", 2541 "sequence-number-length": "long-sn" 2542 }, 2543 "incoming-type": { 2544 "service": { 2545 "service-sub-layer": [ 2546 "ssl-1", 2547 "ssl-2" 2548 ] 2549 } 2550 }, 2551 "outgoing-type": { 2552 "forwarding-sub-layer": { 2553 "service-outgoing-list": [ 2554 { 2555 "service-outgoing-index": 0, 2556 "mpls-label-stack": { 2557 "entry": [ 2558 { 2559 "id": 0, 2560 "label": 1000 2561 } 2562 ] 2563 }, 2564 "next-layer": [ 2565 { 2566 "index": 0, 2567 "forwarding-sub-layer": "afl-1" 2568 } 2569 ] 2570 } 2571 ] 2572 } 2573 } 2574 } 2575 ] 2576 }, 2577 "forwarding-sub-layer": { 2578 "forwarding-sub-layer-list": [ 2579 { 2580 "name": "afl-1", 2581 "traffic-profile": "3", 2582 "forwarding-operation-type": "impose-and-forward", 2583 "outgoing-type": { 2584 "interface": { 2585 "outgoing-interface": "eth2", 2586 "mpls-label-stack": { 2587 "entry": [ 2588 { 2589 "id": 0, 2590 "label": 20000 2591 } 2592 ] 2593 } 2594 } 2595 } 2596 } 2597 ] 2598 } 2599 } 2600 } 2602 Figure 3: Example DetNet JSON Service Aggregation 2604 Authors' Addresses 2606 Xuesong Geng 2607 Huawei Technologies 2609 Email: gengxuesong@huawei.com 2611 Mach(Guoyi) Chen 2612 Huawei Technologies 2614 Email: mach.chen@huawei.com 2616 Yeoncheol Ryoo 2617 ETRI 2619 Email: dbduscjf@etri.re.kr 2621 Don Fedyk 2622 LabN Consulting, L.L.C. 2624 Email: dfedyk@labn.net 2626 Reshad Rahman 2627 Individual 2629 Email: reshad@yahoo.com 2631 Zhenqiang Li 2632 China Mobile 2634 Email: lizhenqiang@chinamobile.com