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