idnits 2.17.1 draft-ietf-detnet-yang-12.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 306 has weird spacing: '...er-port ine...' == Line 307 has weird spacing: '...er-port ine...' == Line 314 has weird spacing: '...er-port ine...' == Line 315 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 (19 May 2021) is 1045 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) No issues found here. Summary: 0 errors (**), 0 flaws (~~), 6 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: 20 November 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 19 May 2021 15 Deterministic Networking (DetNet) YANG Model 16 draft-ietf-detnet-yang-12 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 20 November 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 (https://trustee.ietf.org/ 58 license-info) in effect on the date of publication of this document. 59 Please review these documents carefully, as they describe your rights 60 and restrictions with respect to this document. Code Components 61 extracted from this document must include Simplified BSD License text 62 as described in Section 4.e of the Trust Legal Provisions and are 63 provided without warranty as described in the Simplified BSD License. 65 Table of Contents 67 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 68 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 69 3. DetNet YANG Module . . . . . . . . . . . . . . . . . . . . . 3 70 3.1. DetNet Application Flow YANG Attributes . . . . . . . . . 3 71 3.2. DetNet Service Sub-layer YANG Attributes . . . . . . . . 3 72 3.3. DetNet Forwarding Sub-layer YANG 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 . . . . . . . . . . . . . . . 15 77 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 44 78 9. Security Considerations . . . . . . . . . . . . . . . . . . . 44 79 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 44 80 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 44 81 11.1. Normative References . . . . . . . . . . . . . . . . . . 44 82 11.2. Informative References . . . . . . . . . . . . . . . . . 45 83 Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 45 84 A.1. Example A-1 JSON Configuration/Operational . . . . . . . 45 85 A.2. Example B-1 XML Config: Aggregation using a Forwarding 86 Sub-layer . . . . . . . . . . . . . . . . . . . . . . . . 50 87 A.3. Example B-2 JSON Service Aggregation Configuration . . . 55 88 A.4. Example C-1 JSON Relay Aggregation/Disaggregation 89 Configuration . . . . . . . . . . . . . . . . . . . . . . 60 90 A.5. Example C-2 JSON Relay Aggregation Service Sub-Layer . . 77 91 A.6. Example C-3 JSON Relay Service Sub-Layer Aggregation/ 92 Disaggregation . . . . . . . . . . . . . . . . . . . . . 89 93 A.7. Example C-4 JSON Relay Service Sub-Layer Aggregation/ 94 Disaggregation . . . . . . . . . . . . . . . . . . . . . 103 95 A.8. Example D-1 JSON Transit Forwarding Sub-Layer Aggregation/ 96 Disaggregation . . . . . . . . . . . . . . . . . . . . . 120 98 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 127 100 1. Introduction 102 DetNet (Deterministic Networking) provides a capability to carry 103 specified unicast or multicast data flows for real-time applications 104 with extremely low packet loss rates and assured maximum end-to-end 105 delivery latency. A description of the general background and 106 concepts of DetNet can be found in [RFC8655]. 108 This document defines a YANG model for DetNet based on YANG data 109 types and modeling language defined in [RFC6991] and [RFC7950]. 110 DetNet service, which is designed for describing the characteristics 111 of services being provided for application flows over a network, and 112 DetNet configuration, which is designed for DetNet flow path 113 establishment, flow status reporting, and DetNet functions 114 configuration in order to achieve end-to-end bounded latency and zero 115 congestion loss, are both included in this document. 117 2. Terminology 119 This document uses the terminology defined in [RFC8655]. 121 3. DetNet YANG Module 123 The DetNet YANG module includes DetNet App-flow, DetNet Service Sub- 124 layer, and DetNet Forwarding Sub-layer configuration and operational 125 objects. The corresponding attributes used in different sub-layers 126 are defined in Section 3.1, 3.2, 3.3 respectively. 128 3.1. DetNet Application Flow YANG Attributes 130 DetNet application flow is responsible for mapping between 131 application flows and DetNet flows at the edge node(egress/ingress 132 node). The application flows can be either layer 2 or layer 3 flows. 133 To map a flow at the User Network Interface (UNI), the corresponding 134 attributes are defined in [I-D.ietf-detnet-flow-information-model]. 136 3.2. DetNet Service Sub-layer YANG Attributes 138 DetNet service functions, e.g., DetNet tunnel initialization/ 139 termination and service protection, are provided in the DetNet 140 service sub-layer. To support these functions, the following service 141 attributes need to be configured: 143 * DetNet flow identification 144 * Service function indication, indicates which service function will 145 be invoked at a DetNet edge, relay node or end station. (DetNet 146 tunnel initialization or termination are default functions in 147 DetNet service layer, so there is no need for explicit 148 indication). The corresponding arguments for service functions 149 also needs to be defined. 151 3.3. DetNet Forwarding Sub-layer YANG Attributes 153 As defined in [RFC8655], DetNet forwarding sub-layer optionally 154 provides congestion protection for DetNet flows over paths provided 155 by the underlying network. Explicit route is another mechanism that 156 is used by DetNet to avoid temporary interruptions caused by the 157 convergence of routing or bridging protocols, and it is also 158 implemented at the DetNet forwarding sub-layer. 160 To support congestion protection and explicit route, the following 161 transport layer related attributes are necessary: 163 * Flow Specification and Traffic Requirements, refers to 164 [I-D.ietf-detnet-flow-information-model]. These may used for 165 resource reservation, flow shaping, filtering and policing by a 166 control plane or other network management and control mechanisms. 168 * Since this model programs the data plane existing explicit route 169 mechanisms can be reused. If a static MPLS tunnel is used as the 170 transport tunnel, the configuration need to be at every transit 171 node along the path. For an IP based path, the static 172 configuration is similar to the static MPLS case. This document 173 provides data-plane configuration of IP addresses or MPLS labels 174 but it does not provide control plane mapping or other aspects. 176 4. DetNet Flow Aggregation 178 DetNet provides the capability of flow aggregation to improve 179 scalability of DetNet data, management and control planes. 180 Aggregated flows can be viewed by the some DetNet nodes as individual 181 DetNet flows. When aggregating DetNet flows, the flows should be 182 compatible: if bandwidth reservations are used, the reservation 183 should be a reasonable representation of the individual reservations; 184 if maximum delay bounds are used, the system should ensure that the 185 aggregate does not exceed the delay bounds of the individual flows. 187 The DetNet YANG model defined in this document supports DetNet flow 188 aggregation with the following functions: 190 * Aggregation flow encapsulation/decapsulation/identification 191 * Mapping individual DetNet flows to an aggregated flow 193 * Changing traffic specification parameters for aggregated flow 195 The following cases of DetNet aggregation are supported: 197 * Ingress node aggregates App flows into a service sub-layer of 198 DetNet flow 200 * In ingress node, the service sub-layers of DetNet flows are 201 aggregated into a forwarding sub-layer 203 * In ingress node, the service sub-layers of DetNet flows are 204 aggregated into a service sub-layer of an aggregated DetNet flow 206 * Relay node aggregates the forwarding sub-layers DetNet flows into 207 a forwarding sub-layer 209 * Relay node aggregates the service sub-layers of DetNet flows into 210 a forwarding sub-layer 212 * Relay node aggregates the service sub-layers of DetNet flows into 213 a service sub-layer of Aggregated DetNet flow 215 * Relay node aggregates the forwarding sub-layers of DetNet flow 216 into a service sub-layer of Aggregated DetNet flow 218 * Transit node aggregates the forwarding sub-layers of DetNet flows 219 into a forwarding sub-layer 221 Traffic requirements and traffic specification may be tracked for 222 individual or aggregate flows but reserving resources and tracking 223 the services in the aggregated flow is out of scope. 225 5. DetNet YANG Structure Considerations 227 The picture shows that the general structure of the DetNet YANG 228 Model: 230 +-----------+ 231 |ietf-detnet| 232 +-----+-----+ 233 | 234 +-------------+---------------+-------------------+ 235 | | | | 236 +-----+-----+ +-----+-----+ +-------+------+ | 237 | App Flows | |service s-l| |forwarding s-l| | 238 +-----+-----+ +-----+-----+ +-------+------+ | 239 | | | | 240 +-----+-----+ +-----+-----+ +-------+------+ +--------+-------+ 241 | Ref to TR | | Ref to TR | | Ref to TR | | Traffic Profile| 242 +-----------+ +-----------+ +--------------+ +----------------+ 244 There are three instances in DetNet YANG Model: App-flow instance, 245 service sub-layer instance and forwarding sub-layer instance, 246 respectively corresponding to four parts of DetNet functions defined 247 in section 3. 249 6. DetNet Configuration YANG Structures 251 module: ietf-detnet 252 +--rw detnet 253 +--rw traffic-profile* [profile-name] 254 | +--rw profile-name string 255 | +--rw traffic-requirements 256 | | +--rw min-bandwidth? uint64 257 | | +--rw max-latency? uint32 258 | | +--rw max-latency-variation? uint32 259 | | +--rw max-loss? uint32 260 | | +--rw max-consecutive-loss-tolerance? uint32 261 | | +--rw max-misordering? uint32 262 | +--rw flow-spec 263 | | +--rw interval? uint32 264 | | +--rw max-pkts-per-interval? uint32 265 | | +--rw max-payload-size? uint32 266 | | +--rw min-payload-size? uint32 267 | | +--rw min-pkts-per-interval? uint32 268 | +--ro member-apps* app-flow-ref 269 | +--ro member-services* service-sub-layer-ref 270 | +--ro member-fwd-sublayers* forwarding-sub-layer-ref 271 +--rw app-flows 272 | +--rw app-flow* [name] 273 | +--rw name string 274 | +--rw app-flow-bidir-congruent? boolean 275 | +--ro outgoing-service? service-sub-layer-ref 276 | +--ro incoming-service? service-sub-layer-ref 277 | +--rw traffic-profile? traffic-profile-ref 278 | +--rw ingress 279 | | +--rw name? string 280 | | +--ro app-flow-status? identityref 281 | | +--rw interface? if:interface-ref 282 | | +--rw (data-flow-type)? 283 | | +--:(tsn-app-flow) 284 | | | +--rw tsn-app-flow 285 | | | +--rw source-mac-address? 286 | | | | yang:mac-address 287 | | | +--rw destination-mac-address? 288 | | | | yang:mac-address 289 | | | +--rw ethertype? 290 | | | | ethertypes:ethertype 291 | | | +--rw vlan-id? 292 | | | | dot1q-types:vlanid 293 | | | +--rw pcp? 294 | | | dot1q-types:priority-type 295 | | +--:(ip-app-flow) 296 | | | +--rw ip-app-flow 297 | | | +--rw src-ip-prefix? inet:ip-prefix 298 | | | +--rw dest-ip-prefix? inet:ip-prefix 299 | | | +--rw protocol-next-header? uint8 300 | | | +--rw dscp? inet:dscp 301 | | | +--rw flow-label? 302 | | | | inet:ipv6-flow-label 303 | | | +--rw source-port 304 | | | | +--rw (port-range-or-operator)? 305 | | | | +--:(range) 306 | | | | | +--rw lower-port inet:port-number 307 | | | | | +--rw upper-port inet:port-number 308 | | | | +--:(operator) 309 | | | | +--rw operator? operator 310 | | | | +--rw port inet:port-number 311 | | | +--rw destination-port 312 | | | | +--rw (port-range-or-operator)? 313 | | | | +--:(range) 314 | | | | | +--rw lower-port inet:port-number 315 | | | | | +--rw upper-port inet:port-number 316 | | | | +--:(operator) 317 | | | | +--rw operator? operator 318 | | | | +--rw port inet:port-number 319 | | | +--rw ipsec-spi? ipsec-spi 320 | | +--:(mpls-app-flow) 321 | | +--rw mpls-app-flow 322 | | +--rw (label-space)? 323 | | +--:(context-label-space) 324 | | | +--rw mpls-label-stack 325 | | | +--rw entry* [id] 326 | | | +--rw id uint8 327 | | | +--rw label? 328 | | | | rt-types:mpls-label 329 | | | +--rw ttl? uint8 330 | | | +--rw traffic-class? uint8 331 | | +--:(platform-label-space) 332 | | +--rw label? 333 | | rt-types:mpls-label 334 | +--rw egress 335 | +--rw name? string 336 | +--rw (application-type)? 337 | +--:(ethernet) 338 | | +--rw ethernet 339 | | +--rw interface? if:interface-ref 340 | +--:(ip-mpls) 341 | +--rw ip-mpls 342 | +--rw (next-hop-options) 343 | +--:(simple-next-hop) 344 | | +--rw outgoing-interface? 345 | | | if:interface-ref 346 | | +--rw (flow-type)? 347 | | +--:(ip) 348 | | | +--rw next-hop-address? 349 | | | inet:ip-address 350 | | +--:(mpls) 351 | | +--rw mpls-label-stack 352 | | +--rw entry* [id] 353 | | +--rw id uint8 354 | | +--rw label? 355 | | | rt-types:mpls-label 356 | | +--rw ttl? uint8 357 | | +--rw traffic-class? uint8 358 | +--:(next-hop-list) 359 | +--rw next-hop* [hop-index] 360 | +--rw hop-index uint8 361 | +--rw outgoing-interface? 362 | | if:interface-ref 363 | +--rw (flow-type)? 364 | +--:(ip) 365 | | +--rw next-hop-address? 366 | | inet:ip-address 367 | +--:(mpls) 368 | +--rw mpls-label-stack 369 | +--rw entry* [id] 370 | +--rw id 371 | | uint8 372 | +--rw label? 373 | | rt-types:mpls-label 374 | +--rw ttl? 375 | | uint8 376 | +--rw traffic-class? 377 | uint8 378 +--rw service-sub-layer 379 | +--rw service-sub-layer-list* [name] 380 | +--rw name string 381 | +--rw service-rank? uint8 382 | +--rw traffic-profile? traffic-profile-ref 383 | +--rw service-protection 384 | | +--rw service-protection-type? service-protection-type 385 | | +--rw sequence-number-length? sequence-number-field 386 | +--rw service-operation-type? service-operation-type 387 | +--rw incoming-type 388 | | +--rw (incoming-type) 389 | | +--:(app-flow) 390 | | | +--rw app-flow 391 | | | +--rw app-flow-list* app-flow-ref 392 | | +--:(service-aggregation) 393 | | | +--rw service-aggregation 394 | | | +--rw service-sub-layer* 395 | | | service-sub-layer-ref 396 | | +--:(forwarding-aggregation) 397 | | | +--rw forwarding-aggregation 398 | | | +--rw forwarding-sub-layer* 399 | | | forwarding-sub-layer-ref 400 | | +--:(service-id) 401 | | +--rw service-id 402 | | +--rw (detnet-flow-type)? 403 | | +--:(ip-detnet-flow) 404 | | | +--rw src-ip-prefix? 405 | | | | inet:ip-prefix 406 | | | +--rw dest-ip-prefix? 407 | | | | inet:ip-prefix 408 | | | +--rw protocol-next-header? uint8 409 | | | +--rw dscp? inet:dscp 410 | | | +--rw flow-label? 411 | | | | inet:ipv6-flow-label 412 | | | +--rw source-port 413 | | | | +--rw (port-range-or-operator)? 414 | | | | +--:(range) 415 | | | | | +--rw lower-port 416 | | | | | | inet:port-number 417 | | | | | +--rw upper-port 418 | | | | | inet:port-number 419 | | | | +--:(operator) 420 | | | | +--rw operator? operator 421 | | | | +--rw port 422 | | | | inet:port-number 423 | | | +--rw destination-port 424 | | | | +--rw (port-range-or-operator)? 425 | | | | +--:(range) 426 | | | | | +--rw lower-port 427 | | | | | | inet:port-number 428 | | | | | +--rw upper-port 429 | | | | | inet:port-number 430 | | | | +--:(operator) 431 | | | | +--rw operator? operator 432 | | | | +--rw port 433 | | | | inet:port-number 434 | | | +--rw ipsec-spi? ipsec-spi 435 | | +--:(mpls-detnet-flow) 436 | | +--rw (label-space)? 437 | | +--:(context-label-space) 438 | | | +--rw mpls-label-stack 439 | | | +--rw entry* [id] 440 | | | +--rw id uint8 441 | | | +--rw label? 442 | | | | rt-types:mpls-label 443 | | | +--rw ttl? uint8 444 | | | +--rw traffic-class? uint8 445 | | +--:(platform-label-space) 446 | | +--rw label? 447 | | rt-types:mpls-label 448 | +--rw outgoing-type 449 | +--rw (outgoing-type) 450 | +--:(forwarding-sub-layer) 451 | | +--rw forwarding-sub-layer 452 | | +--rw service-outgoing-list* 453 | | [service-outgoing-index] 454 | | +--rw service-outgoing-index uint8 455 | | +--rw (header-type)? 456 | | | +--:(detnet-mpls-header) 457 | | | | +--rw mpls-label-stack 458 | | | | +--rw entry* [id] 459 | | | | +--rw id uint8 460 | | | | +--rw label? 461 | | | | | rt-types:mpls-label 462 | | | | +--rw ttl? uint8 463 | | | | +--rw traffic-class? uint8 464 | | | +--:(detnet-ip-header) 465 | | | +--rw src-ip-address? 466 | | | | inet:ip-address 467 | | | +--rw dest-ip-address? 468 | | | | inet:ip-address 469 | | | +--rw protocol-next-header? uint8 470 | | | +--rw dscp? 471 | | | | inet:dscp 472 | | | +--rw flow-label? 473 | | | | inet:ipv6-flow-label 474 | | | +--rw source-port? 475 | | | | inet:port-number 476 | | | +--rw destination-port? 477 | | | inet:port-number 478 | | +--rw forwarding-sub-layer* 479 | | forwarding-sub-layer-ref 480 | +--:(service-sub-layer) 481 | | +--rw service-sub-layer 482 | | +--rw aggregation-service-sub-layer? 483 | | | service-sub-layer-ref 484 | | +--rw service-label 485 | | +--rw mpls-label-stack 486 | | +--rw entry* [id] 487 | | +--rw id uint8 488 | | +--rw label? 489 | | | rt-types:mpls-label 490 | | +--rw ttl? uint8 491 | | +--rw traffic-class? uint8 492 | +--:(app-flow) 493 | | +--rw app-flow 494 | | +--rw app-flow-list* app-flow-ref 495 | +--:(service-disaggregation) 496 | | +--rw service-disaggregation 497 | | +--rw service-sub-layer* 498 | | service-sub-layer-ref 499 | +--:(forwarding-disaggregation) 500 | +--rw forwarding-disaggregation 501 | +--rw forwarding-sub-layer* 502 | forwarding-sub-layer-ref 503 +--rw forwarding-sub-layer 504 +--rw forwarding-sub-layer-list* [name] 505 +--rw name string 506 +--rw traffic-profile? traffic-profile-ref 507 +--rw forwarding-operation-type? 508 | forwarding-operations-type 509 +--rw incoming-type 510 | +--rw (incoming-type) 511 | +--:(service-sub-layer) 512 | | +--rw service-sub-layer 513 | | +--rw service-sub-layer* 514 | | service-sub-layer-ref 515 | +--:(forwarding-aggregation) 516 | | +--rw forwarding-aggregation 517 | | +--rw forwarding-sub-layer* 518 | | forwarding-sub-layer-ref 519 | +--:(forwarding-id) 520 | +--rw forwarding-id 521 | +--rw interface? 522 | | if:interface-ref 523 | +--rw (detnet-flow-type)? 524 | +--:(ip-detnet-flow) 525 | | +--rw src-ip-prefix? 526 | | | inet:ip-prefix 527 | | +--rw dest-ip-prefix? 528 | | | inet:ip-prefix 529 | | +--rw protocol-next-header? uint8 530 | | +--rw dscp? inet:dscp 531 | | +--rw flow-label? 532 | | | inet:ipv6-flow-label 533 | | +--rw source-port 534 | | | +--rw (port-range-or-operator)? 535 | | | +--:(range) 536 | | | | +--rw lower-port 537 | | | | | inet:port-number 538 | | | | +--rw upper-port 539 | | | | inet:port-number 540 | | | +--:(operator) 541 | | | +--rw operator? operator 542 | | | +--rw port 543 | | | inet:port-number 544 | | +--rw destination-port 545 | | | +--rw (port-range-or-operator)? 546 | | | +--:(range) 547 | | | | +--rw lower-port 548 | | | | | inet:port-number 549 | | | | +--rw upper-port 550 | | | | inet:port-number 551 | | | +--:(operator) 552 | | | +--rw operator? operator 553 | | | +--rw port 554 | | | inet:port-number 555 | | +--rw ipsec-spi? ipsec-spi 556 | +--:(mpls-detnet-flow) 557 | +--rw (label-space)? 558 | +--:(context-label-space) 559 | | +--rw mpls-label-stack 560 | | +--rw entry* [id] 561 | | +--rw id uint8 562 | | +--rw label? 563 | | | rt-types:mpls-label 564 | | +--rw ttl? uint8 565 | | +--rw traffic-class? uint8 566 | +--:(platform-label-space) 567 | +--rw label? 568 | rt-types:mpls-label 569 +--rw outgoing-type 570 +--rw (outgoing-type) 571 +--:(interface) 572 | +--rw interface 573 | +--rw (next-hop-options) 574 | +--:(simple-next-hop) 575 | | +--rw outgoing-interface? 576 | | | if:interface-ref 577 | | +--rw (flow-type)? 578 | | +--:(ip) 579 | | | +--rw (operation-type)? 580 | | | +--:(ip-forwarding) 581 | | | | +--rw next-hop-address? 582 | | | | inet:ip-address 583 | | | +--:(mpls-over-ip-encapsulation) 584 | | | +--rw src-ip-address? 585 | | | | inet:ip-address 586 | | | +--rw dest-ip-address? 587 | | | | inet:ip-address 588 | | | +--rw protocol-next-header? 589 | | | | uint8 590 | | | +--rw dscp? 591 | | | | inet:dscp 592 | | | +--rw flow-label? 593 | | | | inet:ipv6-flow-label 594 | | | +--rw source-port? 595 | | | | inet:port-number 596 | | | +--rw destination-port? 597 | | | inet:port-number 598 | | +--:(mpls) 599 | | +--rw mpls-label-stack 600 | | +--rw entry* [id] 601 | | +--rw id uint8 602 | | +--rw label? 603 | | | rt-types:mpls-label 604 | | +--rw ttl? uint8 605 | | +--rw traffic-class? uint8 606 | +--:(next-hop-list) 607 | +--rw next-hop* [hop-index] 608 | +--rw hop-index 609 | | uint8 610 | +--rw outgoing-interface? 611 | | if:interface-ref 612 | +--rw (flow-type)? 613 | +--:(ip) 614 | | +--rw (operation-type)? 615 | | +--:(ip-forwarding) 616 | | | +--rw next-hop-address? 617 | | | inet:ip-address 618 | | +--:(mpls-over-ip- 619 | | encapsulation) 620 | | +--rw src-ip-address? 621 | | | inet:ip-address 622 | | +--rw dest-ip-address? 623 | | | inet:ip-address 624 | | +--rw protocol-next-header? 625 | | | uint8 626 | | +--rw dscp? 627 | | | inet:dscp 628 | | +--rw flow-label? 629 | | | inet:ipv6-flow-label 630 | | +--rw source-port? 631 | | | inet:port-number 632 | | +--rw destination-port? 633 | | inet:port-number 634 | +--:(mpls) 635 | +--rw mpls-label-stack 636 | +--rw entry* [id] 637 | +--rw id 638 | | uint8 639 | +--rw label? 640 | | rt-types:mpls-label 641 | +--rw ttl? 642 | | uint8 643 | +--rw traffic-class? 644 | uint8 645 +--:(service-aggregation) 646 | +--rw service-aggregation 647 | +--rw aggregation-service-sub-layer? 648 | | service-sub-layer-ref 649 | +--rw optional-forwarding-label 650 | +--rw mpls-label-stack 651 | +--rw entry* [id] 652 | +--rw id uint8 653 | +--rw label? 654 | | rt-types:mpls-label 655 | +--rw ttl? uint8 656 | +--rw traffic-class? uint8 657 +--:(forwarding-sub-layer) 658 | +--rw forwarding-sub-layer 659 | +--rw aggregation-forwarding-sub-layer? 660 | | forwarding-sub-layer-ref 661 | +--rw forwarding-label 662 | +--rw mpls-label-stack 663 | +--rw entry* [id] 664 | +--rw id uint8 665 | +--rw label? 666 | | rt-types:mpls-label 667 | +--rw ttl? uint8 668 | +--rw traffic-class? uint8 669 +--:(service-sub-layer) 670 | +--rw service-sub-layer 671 | +--rw service-sub-layer* 672 | service-sub-layer-ref 673 +--:(forwarding-disaggregation) 674 +--rw forwarding-disaggregation 675 +--rw forwarding-sub-layer* 676 forwarding-sub-layer-ref 678 7. DetNet Configuration YANG Model 680 681 module ietf-detnet { 682 yang-version 1.1; 683 namespace "urn:ietf:params:xml:ns:yang:ietf-detnet"; 684 prefix ietf-detnet; 686 import ietf-yang-types { 687 prefix yang; 688 reference 689 "RFC 6021 - Common YANG Data Types."; 690 } 691 import ietf-inet-types { 692 prefix inet; 693 reference 694 "RFC 6991 - Common YANG Data Types."; 695 } 696 import ietf-ethertypes { 697 prefix ethertypes; 698 reference 699 "RFC 8519 - YANG Data Model for Network Access Control 700 Lists (ACLs)."; 701 } 702 import ietf-routing-types { 703 prefix rt-types; 704 reference 705 "RFC 8294 - Common YANG Data Types for the Routing Area."; 706 } 707 import ietf-packet-fields { 708 prefix packet-fields; 709 reference 710 "RFC 8519 - YANG Data Model for Network Access Control Lists 711 (ACLs)."; 712 } 713 import ietf-interfaces { 714 prefix if; 715 reference 716 "RFC 8343 - A YANG Data Model for Interface Management."; 717 } 718 import ieee802-dot1q-types { 719 prefix dot1q-types; 720 reference 721 "IEEE 802.1Qcx-2020 - IEEE Standard for Local and Metropolitan 722 Area Networks--Bridges and Bridged Networks Amendment 33: YANG 723 Data Model for Connectivity Fault Management."; 724 } 726 organization 727 "IETF DetNet Working Group"; 728 contact 729 "WG Web: 730 WG List: 732 Editor: Xuesong Geng 733 735 Editor: Yeoncheol Ryoo 736 738 Editor: Don Fedyk 739 ; 741 Editor: Reshad Rahman 742 744 Editor: Mach Chen 745 747 Editor: Zhenqiang Li 748 "; 749 description 750 "This YANG module describes the parameters needed 751 for DetNet flow configuration and flow status 752 reporting. 754 Copyright (c) 2021 IETF Trust and the persons identified as 755 authors of the code. All rights reserved. 757 Redistribution and use in source and binary forms, with or 758 without modification, is permitted pursuant to, and subject to 759 the license terms contained in, the Simplified BSD License set 760 forth in Section 4.c of the IETF Trust's Legal Provisions 761 Relating to IETF Documents 762 (https://trustee.ietf.org/license-info). 764 This version of this YANG module is part of RFC XXXX 765 (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself 766 for full legal notices. 768 The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL 769 NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', 770 'MAY', and 'OPTIONAL' in this document are to be interpreted as 771 described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, 772 they appear in all capitals, as shown here. "; 774 revision 2021-02-17 { 775 description 776 "initial revision"; 777 reference 778 "RFC XXXX: draft-ietf-detnet-yang-10"; 779 } 781 identity app-status { 782 description 783 "Base identity from which all application-status 784 status types are derived."; 785 reference 786 "draft-ietf-detnet-flow-information-model Section 5.8"; 787 } 789 identity none { 790 base app-status; 791 description 792 "This Application has no status. This type of status is 793 expected when the configuration is incomplete."; 794 reference 795 "draft-ietf-detnet-flow-information-model Section 5.8"; 796 } 798 identity ready { 799 base app-status; 800 description 801 "Application ingress/egress ready."; 802 reference 803 "draft-ietf-detnet-flow-information-model Section 5.8"; 804 } 805 identity failed { 806 base app-status; 807 description 808 "Application ingres/egresss failed."; 809 reference 810 "draft-ietf-detnet-flow-information-model Section 5.8"; 811 } 813 identity out-of-service { 814 base app-status; 815 description 816 "Application Administratively blocked."; 817 reference 818 "draft-ietf-detnet-flow-information-model Section 5.8"; 819 } 821 identity partial-failed { 822 base app-status; 823 description 824 "This is an Application with one or more Egress ready, and one 825 or more Egress failed. The DetNet flow can be used if the 826 Ingress is Ready."; 827 reference 828 "draft-ietf-detnet-flow-information-model Section 5.8"; 829 } 831 typedef app-flow-ref { 832 type leafref { 833 path "/ietf-detnet:detnet" 834 + "/ietf-detnet:app-flows" 835 + "/ietf-detnet:app-flow" 836 + "/ietf-detnet:name"; 837 } 838 description 839 "This is an Application Reference."; 840 } 842 typedef service-sub-layer-ref { 843 type leafref { 844 path "/ietf-detnet:detnet" 845 + "/ietf-detnet:service-sub-layer" 846 + "/ietf-detnet:service-sub-layer-list" 847 + "/ietf-detnet:name"; 848 } 849 description 850 "This is a Service sub-layer Reference."; 851 } 852 typedef forwarding-sub-layer-ref { 853 type leafref { 854 path "/ietf-detnet:detnet" 855 + "/ietf-detnet:forwarding-sub-layer" 856 + "/ietf-detnet:forwarding-sub-layer-list" 857 + "/ietf-detnet:name"; 858 } 859 description 860 "This is a Forwarding sub-layer Reference."; 861 } 863 typedef traffic-profile-ref { 864 type leafref { 865 path "/ietf-detnet:detnet" 866 + "/ietf-detnet:traffic-profile" 867 + "/ietf-detnet:profile-name"; 868 } 869 description 870 "This is a Traffic Profile Reference."; 871 } 873 typedef ipsec-spi { 874 type uint32 { 875 range "1..max"; 876 } 877 description 878 "IPsec Security Parameters Index."; 879 reference 880 "IETF RFC 6071"; 881 } 883 typedef service-operation-type { 884 type enumeration { 885 enum service-initiation { 886 description 887 "This is an initiating service sub-layer encapsulation."; 888 } 889 enum service-termination { 890 description 891 "Operation for DetNet service sub-layer decapsulation."; 892 } 893 enum service-relay { 894 description 895 "Operation for DetNet service sub-layer swap."; 896 } 897 enum non-detnet { 898 description 899 "No operation for DetNet service sub-layer."; 901 } 902 } 903 description 904 "Operation type identifies the behavior for this service 905 sub-layer instance. Operations are described as unidirectional 906 but a service sub-layer may combine operation types."; 907 } 909 typedef forwarding-operations-type { 910 type enumeration { 911 enum impose-and-forward { 912 description 913 "This operation impose outgoing label(s) and forward to 914 next-hop."; 915 reference 916 " A YANG Data Model for MPLS Base 917 draft-ietf-mpls-base-yang."; 918 } 919 enum pop-and-forward { 920 description 921 "This operation pops the incoming label and forwards to 922 the next-hop."; 923 reference 924 " A YANG Data Model for MPLS Base 925 draft-ietf-mpls-base-yang."; 926 } 927 enum pop-impose-and-forward { 928 description 929 "This operation pops the incoming label, imposes one or 930 more outgoing label(s) and forwards to the next-hop."; 931 reference 932 " A YANG Data Model for MPLS Base 933 draft-ietf-mpls-base-yang."; 934 } 935 enum swap-and-forward { 936 description 937 "This operation swaps incoming label, with an outgoing 938 label and forwards to the next-hop."; 939 reference 940 " A YANG Data Model for MPLS Base 941 draft-ietf-mpls-base-yang."; 942 } 943 enum forward { 944 description 945 "This operation forward to next-hop."; 946 } 947 enum pop-and-lookup { 948 description 949 "This operation pops incoming label and performs a 950 lookup."; 951 } 952 } 953 description 954 "MPLS operations types. This is an enum modeled after the 955 MPLS enum. The first 4 enums are the same as A YANG Data 956 Model for MPLS Base. draft-ietf-mpls-base-yang."; 957 } 959 typedef service-protection-type { 960 type enumeration { 961 enum none { 962 description 963 "No service protection provided."; 964 } 965 enum replication { 966 description 967 "A Packet Replication Function (PRF) replicates DetNet 968 flow packets and forwards them to one or more next hops in 969 the DetNet domain. The number of packet copies sent to 970 each next hop is a DetNet flow specific parameter at the 971 node doing the replication. PRF can be implemented by an 972 edge node, a relay node, or an end system."; 973 } 974 enum elimination { 975 description 976 "A Packet Elimination Function (PEF) eliminates duplicate 977 copies of packets to prevent excess packets flooding the 978 network or duplicate packets being sent out of the DetNet 979 domain. PEF can be implemented by an edge node, a relay 980 node, or an end system."; 981 } 982 enum ordering { 983 description 984 "A Packet Ordering Function (POF) re-orders packets within 985 a DetNet flow that are received out of order. This 986 function can be implemented by an edge node, a relay node, 987 or an end system."; 988 } 989 enum elimination-ordering { 990 description 991 "A combination of PEF and POF that can be implemented by 992 an edge node, a relay node, or an end system."; 993 } 994 enum elimination-replication { 995 description 996 "A combination of PEF and PRF that can be implemented by 997 an edge node, a relay node, or an end system."; 998 } 999 enum elimination-ordering-replication { 1000 description 1001 "A combination of PEF, POF and PRF that can be implemented 1002 by an edge node, a relay node, or an end system."; 1003 } 1004 } 1005 description 1006 "This typedef describes the service protection types."; 1007 } 1009 typedef sequence-number-generation-type { 1010 type enumeration { 1011 enum copy-from-app-flow { 1012 description 1013 "This type means copy the app-flow sequence number to the 1014 DetNet-flow."; 1015 } 1016 enum generate-by-detnet-flow { 1017 description 1018 "This type means generate the sequence number by the 1019 DetNet flow."; 1020 } 1021 } 1022 description 1023 "An enumeration for the sequence number behaviors supported."; 1024 } 1026 typedef sequence-number-field { 1027 type enumeration { 1028 enum zero-sn { 1029 description 1030 "No DetNet sequence number field is used."; 1031 } 1032 enum short-sn { 1033 value 16; 1034 description 1035 "A 16-bit DetNet sequence number field is used."; 1036 } 1037 enum long-sn { 1038 value 28; 1039 description 1040 "A 28-bit DetNet sequence number field is used."; 1041 } 1042 } 1043 description 1044 "This type captures the sequence number behavior."; 1046 } 1048 grouping ip-header { 1049 description 1050 "This grouping captures the IPv4/IPv6 packet header 1051 information. it is modeled after existing fields."; 1052 leaf src-ip-address { 1053 type inet:ip-address-no-zone; 1054 description 1055 "The source IP address in the header."; 1056 reference 1057 "RFC 6021 Common YANG Data Types"; 1058 } 1059 leaf dest-ip-address { 1060 type inet:ip-address-no-zone; 1061 description 1062 "The destination IP address in the header."; 1063 reference 1064 "RFC 6021 Common YANG Data Types"; 1065 } 1066 leaf protocol-next-header { 1067 type uint8; 1068 description 1069 "Internet Protocol number. Refers to the protocol of the 1070 payload. In IPv6, this field is known as 'next-header', 1071 and if extension headers are present, the protocol is 1072 present in the 'upper-layer' header."; 1073 reference 1074 "RFC 791: Internet Protocol 1075 RFC 8200: Internet Protocol, Version 6 (IPv6) 1076 Specification."; 1077 } 1078 leaf dscp { 1079 type inet:dscp; 1080 description 1081 "The traffic class value in the header."; 1082 reference 1083 "RFC 6021 Common YANG Data Types"; 1084 } 1085 leaf flow-label { 1086 type inet:ipv6-flow-label; 1087 description 1088 "The flow label value of the header.IPV6 only."; 1089 reference 1090 "RFC 6021 Common YANG Data Types"; 1091 } 1092 leaf source-port { 1093 type inet:port-number; 1094 description 1095 "The source port number."; 1096 reference 1097 "RFC 6021 Common YANG Data Types"; 1098 } 1099 leaf destination-port { 1100 type inet:port-number; 1101 description 1102 "The destination port number."; 1103 reference 1104 "RFC 6021 Common YANG Data Types"; 1105 } 1106 } 1108 grouping l2-header { 1109 description 1110 "The Ethernet or TSN packet header information."; 1111 leaf source-mac-address { 1112 type yang:mac-address; 1113 description 1114 "The source MAC address value of the Ethernet header."; 1115 } 1116 leaf destination-mac-address { 1117 type yang:mac-address; 1118 description 1119 "The destination MAC address value of the Ethernet header."; 1120 } 1121 leaf ethertype { 1122 type ethertypes:ethertype; 1123 description 1124 "The Ethernet packet type value of the Ethernet header."; 1125 } 1126 leaf vlan-id { 1127 type dot1q-types:vlanid; 1128 description 1129 "The VLAN value of the Ethernet header."; 1130 reference 1131 "IEEE 802.1Qcx-2020."; 1132 } 1133 leaf pcp { 1134 type dot1q-types:priority-type; 1135 description 1136 "The priority value of the Ethernet header."; 1137 reference 1138 "IEEE 802.1Qcx-2020."; 1139 } 1140 } 1141 grouping destination-ip-port-id { 1142 description 1143 "The TCP/UDP port(source/destination) identification 1144 information."; 1145 container destination-port { 1146 uses packet-fields:port-range-or-operator; 1147 description 1148 "This grouping captures the destination port fields."; 1149 } 1150 } 1152 grouping source-ip-port-id { 1153 description 1154 "The TCP/UDP port(source/destination) identification 1155 information."; 1156 container source-port { 1157 uses packet-fields:port-range-or-operator; 1158 description 1159 "This grouping captures the source port fields."; 1160 } 1161 } 1163 grouping ip-flow-id { 1164 description 1165 "The IPv4/IPv6 packet header identification information."; 1166 leaf src-ip-prefix { 1167 type inet:ip-prefix; 1168 description 1169 "The source IP prefix."; 1170 reference 1171 "RFC 6021 Common YANG Data Types"; 1172 } 1173 leaf dest-ip-prefix { 1174 type inet:ip-prefix; 1175 description 1176 "The destination IP prefix."; 1177 reference 1178 "RFC 6021 Common YANG Data Types"; 1179 } 1180 leaf protocol-next-header { 1181 type uint8; 1182 description 1183 "Internet Protocol number. Refers to the protocol of the 1184 payload. In IPv6, this field is known as 'next-header', and 1185 if extension headers are present, the protocol is present in 1186 the 'upper-layer' header."; 1187 reference 1188 "RFC 791: Internet Protocol 1189 RFC 8200: Internet Protocol, Version 6 (IPv6) 1190 Specification."; 1191 } 1192 leaf dscp { 1193 type inet:dscp; 1194 description 1195 "The traffic class value in the header."; 1196 reference 1197 "RFC 6021 Common YANG Data Types"; 1198 } 1199 leaf flow-label { 1200 type inet:ipv6-flow-label; 1201 description 1202 "The flow label value of the header."; 1203 reference 1204 "RFC 6021 Common YANG Data Types"; 1205 } 1206 uses source-ip-port-id; 1207 uses destination-ip-port-id; 1208 leaf ipsec-spi { 1209 type ipsec-spi; 1210 description 1211 "IPsec Security Parameters Index of the Security 1212 Association."; 1213 reference 1214 "IETF RFC 6071 IP Security (IPsec) and Internet Key Exchange 1215 (IKE) Document Roadmap."; 1216 } 1217 } 1219 grouping mpls-flow-id { 1220 description 1221 "The MPLS packet header identification information."; 1222 choice label-space { 1223 description 1224 "Designates the label space being used."; 1225 case context-label-space { 1226 uses rt-types:mpls-label-stack; 1227 } 1228 case platform-label-space { 1229 leaf label { 1230 type rt-types:mpls-label; 1231 description 1232 "This is the case for Platform label space."; 1233 } 1234 } 1235 } 1236 } 1237 grouping data-flow-spec { 1238 description 1239 "app-flow identification."; 1240 choice data-flow-type { 1241 description 1242 "The Application flow type choices."; 1243 container tsn-app-flow { 1244 uses l2-header; 1245 description 1246 "The L2 header for application."; 1247 } 1248 container ip-app-flow { 1249 uses ip-flow-id; 1250 description 1251 "The IP header for application."; 1252 } 1253 container mpls-app-flow { 1254 uses mpls-flow-id; 1255 description 1256 "The MPLS header for application."; 1257 } 1258 } 1259 } 1261 grouping detnet-flow-spec { 1262 description 1263 "detnet-flow identification."; 1264 choice detnet-flow-type { 1265 description 1266 "The Detnet flow type choices."; 1267 case ip-detnet-flow { 1268 uses ip-flow-id; 1269 } 1270 case mpls-detnet-flow { 1271 uses mpls-flow-id; 1272 } 1273 } 1274 } 1276 grouping app-flows-group { 1277 description 1278 "Incoming or outgoing app-flow reference group."; 1279 leaf-list app-flow-list { 1280 type app-flow-ref; 1281 description 1282 "List of ingress or egress app-flows."; 1283 } 1284 } 1285 grouping service-sub-layer-group { 1286 description 1287 "Incoming or outgoing service sub-layer reference group."; 1288 leaf-list service-sub-layer { 1289 type service-sub-layer-ref; 1290 description 1291 "List of incoming or outgoing service sub-layers that have 1292 to aggregate or disaggregate."; 1293 } 1294 } 1296 grouping forwarding-sub-layer-group { 1297 description 1298 "Incoming or outgoing forwarding sub-layer reference group."; 1299 leaf-list forwarding-sub-layer { 1300 type forwarding-sub-layer-ref; 1301 description 1302 "List of incoming or outgoing forwarding sub-layers that 1303 have to aggregate or disaggregate."; 1304 } 1305 } 1307 grouping detnet-header { 1308 description 1309 "DetNet header info for DetNet encapsulation or swap."; 1310 choice header-type { 1311 description 1312 "The choice of DetNet header type."; 1313 case detnet-mpls-header { 1314 description 1315 "MPLS label stack for DetNet MPLS encapsulation or 1316 forwarding."; 1317 uses rt-types:mpls-label-stack; 1318 } 1319 case detnet-ip-header { 1320 description 1321 "IPv4/IPv6 packet header for DetNet IP encapsulation."; 1322 uses ip-header; 1323 } 1324 } 1325 } 1327 grouping detnet-app-next-hop-content { 1328 description 1329 "Generic parameters of DetNet next hops."; 1330 choice next-hop-options { 1331 mandatory true; 1332 description 1333 "Options for next hops. It is expected that further cases 1334 will be added through 1335 augments from other modules, e.g., for recursive 1336 next hops."; 1337 case simple-next-hop { 1338 description 1339 "This case represents a simple next hop consisting of the 1340 next-hop address and/or outgoing interface. 1341 Modules for address families MUST augment this case with a 1342 leaf containing a next-hop address of that address 1343 family."; 1344 leaf outgoing-interface { 1345 type if:interface-ref; 1346 description 1347 "The outgoing interface, if this is a whole interface."; 1348 } 1349 choice flow-type { 1350 description 1351 "The flow type choices."; 1352 case ip { 1353 leaf next-hop-address { 1354 type inet:ip-address-no-zone; 1355 description 1356 "The IP next hop case."; 1357 } 1358 } 1359 case mpls { 1360 uses rt-types:mpls-label-stack; 1361 description 1362 "The MPLS Label stack next hop case."; 1363 } 1364 } 1365 } 1366 case next-hop-list { 1367 description 1368 "Container for multiple next hops."; 1369 list next-hop { 1370 key "hop-index"; 1371 description 1372 "An entry in a next-hop list. Modules for address 1373 families MUST augment this list with a leaf containing a 1374 next-hop address of that address family."; 1375 leaf hop-index { 1376 type uint8; 1377 description 1378 "A user-specified identifier utilized to uniquely 1379 reference the next-hop entry in the next-hop list. 1380 The value of this index has no semantic meaning other 1381 than for referencing the entry."; 1382 } 1383 leaf outgoing-interface { 1384 type if:interface-ref; 1385 description 1386 "Name of the outgoing interface."; 1387 } 1388 choice flow-type { 1389 description 1390 "The flow types supported."; 1391 case ip { 1392 leaf next-hop-address { 1393 type inet:ip-address-no-zone; 1394 description 1395 "This is the IP flow type next hop."; 1396 } 1397 } 1398 case mpls { 1399 uses rt-types:mpls-label-stack; 1400 } 1401 } 1402 } 1403 } 1404 } 1405 } 1407 grouping detnet-forwarding-next-hop-content { 1408 description 1409 "Generic parameters of DetNet next hops."; 1410 choice next-hop-options { 1411 mandatory true; 1412 description 1413 "Options for next hops. 1414 It is expected that further cases will be added through 1415 augments from other modules, e.g., for recursive 1416 next hops."; 1417 case simple-next-hop { 1418 description 1419 "This case represents a simple next hop consisting of the 1420 next-hop address and/or outgoing interface. 1421 Modules for address families MUST augment this case with a 1422 leaf containing a next-hop address of that address 1423 family."; 1424 leaf outgoing-interface { 1425 type if:interface-ref; 1426 description 1427 "This is the interface as an outgoing type."; 1428 } 1429 choice flow-type { 1430 description 1431 "These are the flow type next hop choices."; 1432 case ip { 1433 choice operation-type { 1434 description 1435 "This is the IP forwarding operation choices."; 1436 case ip-forwarding { 1437 leaf next-hop-address { 1438 type inet:ip-address-no-zone; 1439 description 1440 "This is an IP address as a next hop."; 1441 } 1442 } 1443 case mpls-over-ip-encapsulation { 1444 uses ip-header; 1445 } 1446 } 1447 } 1448 case mpls { 1449 uses rt-types:mpls-label-stack; 1450 } 1451 } 1452 } 1453 case next-hop-list { 1454 description 1455 "Container for multiple next hops."; 1456 list next-hop { 1457 key "hop-index"; 1458 description 1459 "An entry in a next-hop list. Modules for address 1460 families MUST augment this list with a leaf containing a 1461 next-hop address of that address family."; 1462 leaf hop-index { 1463 type uint8; 1464 description 1465 "The value of the index for a hop."; 1466 } 1467 leaf outgoing-interface { 1468 type if:interface-ref; 1469 description 1470 "This is a whole interface as the next hop."; 1471 } 1472 choice flow-type { 1473 description 1474 "These are the flow type next hop choices."; 1475 case ip { 1476 choice operation-type { 1477 description 1478 "These are the next hop choices."; 1479 case ip-forwarding { 1480 leaf next-hop-address { 1481 type inet:ip-address-no-zone; 1482 description 1483 "This is an IP address as a next hop."; 1484 } 1485 } 1486 case mpls-over-ip-encapsulation { 1487 uses ip-header; 1488 } 1489 } 1490 } 1491 case mpls { 1492 uses rt-types:mpls-label-stack; 1493 } 1494 } 1495 } 1496 } 1497 } 1498 } 1500 container detnet { 1501 description 1502 "The top level DetNet container. This contains 1503 applications, service sub-layers and forwarding sub-layers 1504 as well as the traffic profiles."; 1505 list traffic-profile { 1506 key "profile-name"; 1507 description 1508 "A traffic profile."; 1509 leaf profile-name { 1510 type string; 1511 description 1512 "An Aggregation group ID. Zero means the service is not 1513 part of a group."; 1514 } 1515 container traffic-requirements { 1516 description 1517 "This defines the attributes of the App-flow 1518 regarding bandwidth, latency, latency variation, loss, and 1519 misordering tolerance."; 1520 reference 1521 "draft-ietf-detnet-flow-information-model Section 4.2"; 1522 leaf min-bandwidth { 1523 type uint64; 1524 units "bps"; 1525 description 1526 "This is the minimum bandwidth that has to be 1527 guaranteed for the DetNet service. MinBandwidth is 1528 specified in octets per second."; 1529 } 1530 leaf max-latency { 1531 type uint32; 1532 units "nanoseconds"; 1533 description 1534 "This is the maximum latency from Ingress to 1535 Egress(es) for a single packet of the DetNet flow. 1536 MaxLatency is specified as an integer number of 1537 nanoseconds."; 1538 } 1539 leaf max-latency-variation { 1540 type uint32; 1541 units "nanoseconds"; 1542 description 1543 "This is the difference between the 1544 minimum and the maximum end-to-end one-way latency. 1545 MaxLatencyVariation is specified as an integer number of 1546 nanoseconds."; 1547 } 1548 leaf max-loss { 1549 type uint32; 1550 description 1551 "This defines the maximum Packet Loss Ratio (PLR) 1552 parameter for the DetNet service between the Ingress and 1553 Egress(es) of the DetNet domain."; 1554 } 1555 leaf max-consecutive-loss-tolerance { 1556 type uint32; 1557 units "packets"; 1558 description 1559 "Some applications have special loss requirement, such 1560 as MaxConsecutiveLossTolerance. The maximum consecutive 1561 loss tolerance parameter describes the maximum number of 1562 consecutive packets whose loss can be tolerated. The 1563 maximum consecutive loss tolerance can be measured for 1564 example based on sequence number."; 1565 } 1566 leaf max-misordering { 1567 type uint32; 1568 units "packets"; 1569 description 1570 "This describes the tolerable maximum number 1571 of packets that can be received out of order. The 1572 maximum allowed misordering can be measured for example 1573 based on sequence number. The value zero for the 1574 maximum allowed misordering indicates that in order 1575 delivery is required, misordering cannot be tolerated."; 1576 } 1577 } 1578 container flow-spec { 1579 description 1580 "Flow-specification specifies how the Source transmits 1581 packets for the flow. This is the promise/request of the 1582 Source to the network. The network uses this flow 1583 specification to allocate resources and adjust queue 1584 parameters in network nodes."; 1585 reference 1586 "draft-ietf-detnet-flow-information-model Section 5.5"; 1587 leaf interval { 1588 type uint32; 1589 units "nanoseconds"; 1590 description 1591 "The period of time in which the traffic 1592 specification cannot be exceeded."; 1593 } 1594 leaf max-pkts-per-interval { 1595 type uint32; 1596 description 1597 "The maximum number of packets that the 1598 source will transmit in one interval."; 1599 } 1600 leaf max-payload-size { 1601 type uint32; 1602 description 1603 "The maximum payload size that the source 1604 will transmit."; 1605 } 1606 leaf min-payload-size { 1607 type uint32; 1608 description 1609 "The minimum payload size that the source 1610 will transmit."; 1611 } 1612 leaf min-pkts-per-interval { 1613 type uint32; 1614 description 1615 "The minimum number of packets that the 1616 source will transmit in one interval."; 1617 } 1618 } 1619 leaf-list member-apps { 1620 type app-flow-ref; 1621 config false; 1622 description 1623 "Applications attached to this profile."; 1624 } 1625 leaf-list member-services { 1626 type service-sub-layer-ref; 1627 config false; 1628 description 1629 "Services attached to this profile."; 1630 } 1631 leaf-list member-fwd-sublayers { 1632 type forwarding-sub-layer-ref; 1633 config false; 1634 description 1635 "Forwarding sub-layer attached to this profile."; 1636 } 1637 } 1638 container app-flows { 1639 description 1640 "The DetNet app-flow configuration."; 1641 reference 1642 "draft-ietf-detnet-flow-information-model Section 4.1"; 1643 list app-flow { 1644 key "name"; 1645 description 1646 "A unique (management) identifier of the App-flow."; 1647 leaf name { 1648 type string; 1649 description 1650 "A unique (management) identifier of the App-flow."; 1651 reference 1652 "draft-ietf-detnet-flow-information-model 1653 Sections 4.1, 5.1"; 1654 } 1655 leaf app-flow-bidir-congruent { 1656 type boolean; 1657 default false; 1658 description 1659 "Defines the data path requirement of the App-flow 1660 whether it must share the same data path and physical 1661 path for both directions through the network, e.g., to 1662 provide congruent paths in the two directions."; 1663 reference 1664 "draft-ietf-detnet-flow-information-model 1665 Section 4.2"; 1666 } 1667 leaf outgoing-service { 1668 type service-sub-layer-ref; 1669 config false; 1670 description 1671 "Binding to this applications outgoing 1672 service."; 1673 } 1674 leaf incoming-service { 1675 type service-sub-layer-ref; 1676 config false; 1677 description 1678 "Binding to this applications incoming service."; 1679 } 1680 leaf traffic-profile { 1681 type traffic-profile-ref; 1682 description 1683 "The Traffic Profile for this group."; 1684 } 1685 container ingress { 1686 description 1687 "Ingress DetNet application flows or a compound flow."; 1688 leaf name { 1689 type string; 1690 description 1691 "Ingress DetNet application."; 1692 } 1693 leaf app-flow-status { 1694 type identityref { 1695 base app-status; 1696 } 1697 config false; 1698 description 1699 "Status of ingress application flow."; 1700 reference 1701 "draft-ietf-detnet-flow-information-model Sections 1702 4.1, 5.8"; 1703 } 1704 leaf interface { 1705 type if:interface-ref; 1706 description 1707 "Interface is used for any service type where a whole 1708 interface is mapped to the applications. It may be 1709 further filtered by type."; 1710 } 1711 uses data-flow-spec; 1712 } //End of app-ingress 1713 container egress { 1714 description 1715 "Route's next-hop attribute."; 1716 leaf name { 1717 type string; 1718 description 1719 "Egress DetNet application."; 1720 } 1721 choice application-type { 1722 description 1723 "This is the application type choices."; 1724 container ethernet { 1725 description 1726 "This is TSN unaware traffic that maps to an 1727 interface."; 1728 leaf interface { 1729 type if:interface-ref; 1730 description 1731 "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."; 1814 uses service-sub-layer-group; 1815 } 1816 container forwarding-aggregation { 1817 description 1818 "This service sub-layer is related to the forwarding 1819 sub-layer of the upper layer and provide 1820 forwarding-to-service aggregation at the ingress 1821 node or relay node."; 1822 uses forwarding-sub-layer-group; 1823 } 1824 container service-id { 1825 description 1826 "This service sub-layer is related to the service or 1827 forwarding sub-layer of the lower layer and provide 1828 DetNet service relay or termination at the relay 1829 node or egress node."; 1830 uses detnet-flow-spec; 1831 } 1832 } 1833 } 1834 container outgoing-type { 1835 description 1836 "The DetNet service sub-layer outgoing configuration."; 1837 choice outgoing-type { 1838 mandatory true; 1839 description 1840 "The out-going type may be a forwarding Sub-layer or a 1841 service sub-layer or ? types need to be named."; 1842 container forwarding-sub-layer { 1843 description 1844 "This service sub-layer is sent to the forwarding 1845 sub-layers of the lower layer for DetNet service 1846 forwarding or service-to-forwarding aggregation at 1847 the ingress node or relay node. When the operation 1848 type is service-initiation, The service sub-layer 1849 encapsulates the DetNet Control-Word and services 1850 label, which are for individual DetNet flow when the 1851 incoming type is app-flow and for aggregated DetNet 1852 flow when the incoming type is service or 1853 forwarding. The service sub-layer swaps the service 1854 label when the operation type is service-relay."; 1855 list service-outgoing-list { 1856 key "service-outgoing-index"; 1857 description 1858 "List of the outgoing service 1859 that separately for each node 1860 where services will be eliminated."; 1861 leaf service-outgoing-index { 1862 type uint8; 1863 description 1864 "This index allows a list of multiple outgoing 1865 forwarding sub-layers"; 1866 } 1867 uses detnet-header; 1868 uses forwarding-sub-layer-group; 1869 } 1870 } 1871 container service-sub-layer { 1872 description 1873 "This service sub-layer is sent to the service 1874 sub-layers of the lower layer for service-to-service 1875 aggregation at the ingress node or relay node. The 1876 service sub-layer encapsulates the DetNet 1877 Control-Word and S-label when the operation type is 1878 service-initiation, and swaps the S-label when the 1879 operation type is service-relay."; 1880 leaf aggregation-service-sub-layer { 1881 type service-sub-layer-ref; 1882 description 1883 "reference point of the service-sub-layer 1884 at which this service will be aggregated."; 1885 } 1886 container service-label { 1887 description 1888 "This is the MPLS service sub-layer label."; 1889 uses rt-types:mpls-label-stack; 1890 } 1891 } 1892 container app-flow { 1893 description 1894 "This service sub-layer is sent to the app-flow of 1895 the upper layer for egress proxy at the egress node, 1896 and decapsulates the DetNet Control-Word and S-label 1897 for individual DetNet service. This outgoing type 1898 only can be chosen when the operation type is 1899 service-termination."; 1900 uses app-flows-group; 1901 } 1902 container service-disaggregation { 1903 description 1904 "This service sub-layer is sent to the service 1905 sub-layer of the upper layer for service-to-service 1906 disaggregation at the relay node or egress node, and 1907 decapsulates the DetNet Control-Word and A-label for 1908 aggregated DetNet service. This outgoing type only 1909 can be chosen when the operation type is 1910 service-termination."; 1911 uses service-sub-layer-group; 1912 } 1913 container forwarding-disaggregation { 1914 description 1915 "This service sub-layer is sent to the forwarding 1916 sub-layer of the upper layer for 1917 forwarding-to-service disaggregation at the relay 1918 node or egress node, and decapsulates the DetNet 1919 Control-Word and A-label for aggregated DetNet 1920 service. This outgoing type only can be chosen when 1921 the operation type is service-termination."; 1922 uses forwarding-sub-layer-group; 1923 } 1924 } 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 1955 configuration."; 1956 choice incoming-type { 1957 mandatory true; 1958 description 1959 "Cases of incoming types."; 1960 container service-sub-layer { 1961 description 1962 "This forwarding sub-layer is related to the service 1963 sub-layers of the upper layer and provide DetNet 1964 forwarding or service-to-forwarding aggregation at 1965 the ingress node or relay node."; 1966 uses service-sub-layer-group; 1967 } 1968 container forwarding-aggregation { 1969 description 1970 "This forwarding sub-layer is related to the 1971 forwarding sub-layer of the upper layer and provide 1972 forwarding-to-forwarding aggregation at the ingress 1973 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; 2055 } 2056 container forwarding-disaggregation { 2057 description 2058 "This forwarding sub-layer is sent to the forwarding 2059 sub-layer of the upper layer and decapsulate the 2060 F-label for forwarding-to-forwarding disaggregation 2061 at the transit node or relay node or egress node. 2062 This outgoing type only can be chosen when the 2063 operation type is pop-and-lookup."; 2064 uses forwarding-sub-layer-group; 2065 } 2066 } 2067 } 2068 } 2069 } 2070 } 2071 } 2072 2074 8. IANA Considerations 2076 This document makes no request of IANA. 2078 Note to RFC Editor: this section may be removed on publication as an 2079 RFC. 2081 9. Security Considerations 2083 2085 10. Acknowledgements 2087 11. References 2089 11.1. Normative References 2091 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2092 Requirement Levels", BCP 14, RFC 2119, 2093 DOI 10.17487/RFC2119, March 1997, 2094 . 2096 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 2097 RFC 6991, DOI 10.17487/RFC6991, July 2013, 2098 . 2100 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 2101 RFC 7950, DOI 10.17487/RFC7950, August 2016, 2102 . 2104 [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, 2105 "Deterministic Networking Architecture", RFC 8655, 2106 DOI 10.17487/RFC8655, October 2019, 2107 . 2109 11.2. Informative References 2111 [I-D.ietf-detnet-flow-information-model] 2112 Varga, B., Farkas, J., Cummings, R., Jiang, Y., and D. 2113 Fedyk, "DetNet Flow and Service Information Model", Work 2114 in Progress, Internet-Draft, draft-ietf-detnet-flow- 2115 information-model-14, 24 January 2021, 2116 . 2119 Appendix A. Examples 2121 The following examples are provided. These examples are tested with 2122 Yanglint and use operational output to exercise both config true and 2123 config false objects. 2125 The following are examples of aggregation and disaggregation at 2126 various points in Detnet. Figures are provided in the PDF version of 2127 this document. 2129 A.1. Example A-1 JSON Configuration/Operational 2131 This illustrates simple aggregation. Ingress node 1 aggregates App 2132 flows 0 and 1 into a service sub-layer of DetNet flow 1. Two ways of 2133 illustrating this follow, then the JSON operational data model 2134 corresponding to the diagrams follows. 2136 Please consult the PDF or HTML versions for the Case A-1 Diagram. 2138 Figure 1: Case A-1 Example JSON Operational/Configuration 2140 Please consult the PDF or HTML versions for the Case A-1 Diagram. 2142 Figure 2: Case A-1 Example JSON Operational/Configuration 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.8/32", 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": "1.1.1.1/32", 2217 "dest-ip-prefix": "8.8.8.8/32", 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 2263 }, 2264 "member-services": [ 2265 "ssl-1" 2266 ] 2267 }, 2268 { 2269 "profile-name": "pf-3", 2270 "flow-spec": { 2271 "interval": 5, 2272 "max-pkts-per-interval": 10, 2273 "max-payload-size": 1500 2274 }, 2275 "member-fwd-sublayers": [ 2276 "fsl-1" 2277 ] 2278 } 2279 ], 2280 "service-sub-layer": { 2281 "service-sub-layer-list": [ 2282 { 2283 "name": "ssl-1", 2284 "service-rank": 10, 2285 "traffic-profile": "pf-2", 2286 "service-operation-type": "service-initiation", 2287 "service-protection": { 2288 "service-protection-type": "none", 2289 "sequence-number-length": "long-sn" 2290 }, 2291 "incoming-type": { 2292 "app-flow": { 2293 "app-flow-list": [ 2294 "app-0", 2295 "app-1" 2296 ] 2297 } 2298 }, 2299 "outgoing-type": { 2300 "forwarding-sub-layer": { 2301 "service-outgoing-list": [ 2302 { 2303 "service-outgoing-index": 0, 2304 "mpls-label-stack": { 2305 "entry": [ 2306 { 2307 "id": 0, 2308 "label": 100 2309 } 2310 ] 2311 }, 2312 "forwarding-sub-layer": [ 2313 "fsl-1" 2314 ] 2315 } 2316 ] 2317 } 2318 } 2319 } 2320 ] 2321 }, 2322 "forwarding-sub-layer": { 2323 "forwarding-sub-layer-list": [ 2324 { 2325 "name": "fsl-1", 2326 "traffic-profile": "pf-3", 2327 "forwarding-operation-type": "impose-and-forward", 2328 "incoming-type": { 2329 "service-sub-layer": { 2330 "service-sub-layer": [ 2331 "ssl-1" 2332 ] 2333 } 2334 }, 2335 "outgoing-type": { 2336 "interface": { 2337 "outgoing-interface": "eth2", 2338 "mpls-label-stack": { 2339 "entry": [ 2340 { 2341 "id": 0, 2342 "label": 10000 2343 } 2344 ] 2345 } 2346 } 2347 } 2348 } 2349 ] 2350 } 2351 } 2352 } 2354 Figure 3: Example A-1 DetNet JSON configuration 2356 A.2. Example B-1 XML Config: Aggregation using a Forwarding Sub-layer 2358 This illustrates aggrgation in the service sub-layers of DetNet. 2359 Flows 1 and 2 are aggregated into a forwarding sub-layer. A diagram 2360 illustrating this case is shown and then the corresponding XML 2361 operational data follows. 2363 Please consult the PDF or HTML versions for the Case B-1 Diagram. 2365 Figure 4: Case B-1 Example XML Config: Aggregation using a 2366 Forwarding Sub-layer 2368 2371 2372 eth0 2373 ia:ethernetCsmacd 2374 up 2375 2376 2020-12-18T23:59:00Z 2377 2378 2379 2380 eth1 2381 ia:ethernetCsmacd 2382 up 2383 2384 2020-12-18T23:59:00Z 2385 2386 2387 2388 eth2 2389 ia:ethernetCsmacd 2390 up 2391 2392 2020-12-18T23:59:00Z 2393 2394 2395 2396 eth3 2397 ia:ethernetCsmacd 2398 up 2399 2400 2020-12-18T23:59:00Z 2401 2402 2403 2404 eth4 2405 ia:ethernetCsmacd 2406 up 2407 2408 2020-12-18T23:59:00Z 2409 2410 2411 2412 2414 2415 2416 app-1 2417 false 2418 ssl-1 2419 1 2420 2421 ready 2422 eth0 2423 2424 1.1.1.1/32 2425 8.8.8.8/32 2426 6 2427 2428 2429 2430 2431 app-2 2432 false 2433 ssl-2 2434 1 2435 2436 ready 2437 eth1 2438 2439 1.1.1.2/32 2440 8.8.8.9/32 2441 7 2442 2443 7 2444 2445 2446 2447 2448 1 2449 2450 100000000 2451 100000000 2452 200000000 2453 2 2454 5 2455 0 2456 2457 app-1 2458 app-2 2459 2460 2461 2 2462 2463 100000000 2464 100000000 2465 200000000 2466 2 2467 5 2468 0 2469 2470 ssl-1 2471 ssl-2 2472 2473 2474 3 2475 2476 5 2477 10 2478 1500 2480 2481 afl-1 2482 2483 2484 2485 ssl-1 2486 10 2487 2 2488 service-initiation 2489 2490 2491 none 2492 long-sn 2493 2494 2495 2496 app-1 2497 2498 2499 2500 2501 2502 0 2503 2504 2505 0 2506 2507 2508 2509 afl-1 2510 2511 2512 2513 2514 2515 ssl-2 2516 10 2517 2 2518 service-initiation 2519 2520 2521 none 2522 long-sn 2523 2524 2525 2526 app-2 2527 2529 2530 2531 2532 2533 0 2534 2535 2536 0 2537 2538 2539 2540 afl-1 2541 2542 2543 2544 2545 2546 2547 2548 afl-1 2549 3 2550 impose-and-forward 2551 2552 2553 2554 ssl-1 2555 ssl-2 2556 2557 2558 2559 2560 eth2 2561 2562 2563 0 2564 2565 2566 2567 2568 2569 2570 2571 2573 Figure 5: Example B-1 DetNet XML configuration 2575 A.3. Example B-2 JSON Service Aggregation Configuration 2577 This illustrates the service sub-layers of DetNet. Flows 1 and 2 are 2578 aggregated into a service sub-layer of aggregated DetNet flow 1. A 2579 diagram illustrating this case is shown and then the corresponding 2580 JSON operational data follows. 2582 Please consult the PDF or HTML versions for the Case B-2 Diagram. 2584 Figure 6: Case B-2 Example JSON Service Aggregation 2586 { 2587 "ietf-interfaces:interfaces": { 2588 "interface": [ 2589 { 2590 "name": "eth0", 2591 "type": "iana-if-type:ethernetCsmacd", 2592 "oper-status": "up", 2593 "statistics": { 2594 "discontinuity-time": "2020-10-02T23:59:00Z" 2595 } 2596 }, 2597 { 2598 "name": "eth1", 2599 "type": "iana-if-type:ethernetCsmacd", 2600 "oper-status": "up", 2601 "statistics": { 2602 "discontinuity-time": "2020-10-02T23:59:00Z" 2603 } 2604 }, 2605 { 2606 "name": "eth2", 2607 "type": "iana-if-type:ethernetCsmacd", 2608 "oper-status": "up", 2609 "statistics": { 2610 "discontinuity-time": "2020-10-02T23:59:00Z" 2611 } 2612 }, 2613 { 2614 "name": "eth3", 2615 "type": "iana-if-type:ethernetCsmacd", 2616 "oper-status": "up", 2617 "statistics": { 2618 "discontinuity-time": "2020-10-02T23:59:00Z" 2619 } 2620 }, 2621 { 2622 "name": "eth4", 2623 "type": "iana-if-type:ethernetCsmacd", 2624 "oper-status": "up", 2625 "statistics": { 2626 "discontinuity-time": "2020-10-02T23:59:00Z" 2627 } 2628 } 2629 ] 2630 }, 2631 "ietf-detnet:detnet": { 2632 "app-flows": { 2633 "app-flow": [ 2634 { 2635 "name": "app-1", 2636 "app-flow-bidir-congruent": false, 2637 "outgoing-service": "ssl-1", 2638 "traffic-profile": "1", 2639 "ingress": { 2640 "app-flow-status": "ready", 2641 "interface": "eth0", 2642 "ip-app-flow": { 2643 "src-ip-prefix": "1.1.1.1/32", 2644 "dest-ip-prefix": "8.8.8.8/32", 2645 "dscp": 6 2646 } 2647 } 2648 }, 2649 { 2650 "name": "app-2", 2651 "app-flow-bidir-congruent": false, 2652 "outgoing-service": "ssl-2", 2653 "traffic-profile": "1", 2654 "ingress": { 2655 "app-flow-status": "ready", 2656 "interface": "eth0", 2657 "ip-app-flow": { 2658 "src-ip-prefix": "1.1.1.2/32", 2659 "dest-ip-prefix": "8.8.8.9/32", 2660 "dscp": 7 2661 } 2662 } 2663 } 2664 ] 2665 }, 2666 "traffic-profile": [ 2667 { 2668 "profile-name": "1", 2669 "traffic-requirements": { 2670 "min-bandwidth": "100000000", 2671 "max-latency": 100000000, 2672 "max-latency-variation": 200000000, 2673 "max-loss": 2, 2674 "max-consecutive-loss-tolerance": 5, 2675 "max-misordering": 0 2676 }, 2677 "member-apps": [ 2678 "app-1", 2679 "app-2" 2680 ] 2681 }, 2682 { 2683 "profile-name": "2", 2684 "traffic-requirements": { 2685 "min-bandwidth": "100000000", 2686 "max-latency": 100000000, 2687 "max-latency-variation": 200000000, 2688 "max-loss": 2, 2689 "max-consecutive-loss-tolerance": 5, 2690 "max-misordering": 0 2691 }, 2692 "member-services": [ 2693 "ssl-1", 2694 "ssl-2" 2695 ] 2696 }, 2697 { 2698 "profile-name": "3", 2699 "flow-spec": { 2700 "interval": 5, 2701 "max-pkts-per-interval": 10, 2702 "max-payload-size": 1500 2703 }, 2704 "member-fwd-sublayers": [ 2705 "afl-1" 2706 ] 2707 } 2708 ], 2709 "service-sub-layer": { 2710 "service-sub-layer-list": [ 2711 { 2712 "name": "ssl-1", 2713 "service-rank": 10, 2714 "traffic-profile": "2", 2715 "service-protection": { 2716 "service-protection-type": "none", 2717 "sequence-number-length": "long-sn" 2719 }, 2720 "service-operation-type": "service-initiation", 2721 "incoming-type": { 2722 "app-flow": { 2723 "app-flow-list": [ 2724 "app-1" 2725 ] 2726 } 2727 }, 2728 "outgoing-type": { 2729 "service-sub-layer": { 2730 "aggregation-service-sub-layer": "asl-1", 2731 "service-label": { 2732 "mpls-label-stack": { 2733 "entry": [ 2734 { 2735 "id": 0, 2736 "label": 102 2737 } 2738 ] 2739 } 2740 } 2741 } 2742 } 2743 }, 2744 { 2745 "name": "ssl-2", 2746 "service-rank": 10, 2747 "traffic-profile": "2", 2748 "service-operation-type": "service-initiation", 2749 "service-protection": { 2750 "service-protection-type": "none", 2751 "sequence-number-length": "long-sn" 2752 }, 2753 "incoming-type": { 2754 "app-flow": { 2755 "app-flow-list": [ 2756 "app-2" 2757 ] 2758 } 2759 }, 2760 "outgoing-type": { 2761 "service-sub-layer": { 2762 "aggregation-service-sub-layer": "asl-1", 2763 "service-label": { 2764 "mpls-label-stack": { 2765 "entry": [ 2766 { 2767 "id": 0, 2768 "label": 105 2769 } 2770 ] 2771 } 2772 } 2773 } 2774 } 2775 }, 2776 { 2777 "name": "asl-1", 2778 "service-rank": 10, 2779 "service-protection": { 2780 "service-protection-type": "none", 2781 "sequence-number-length": "long-sn" 2782 }, 2783 "incoming-type": { 2784 "service-aggregation": { 2785 "service-sub-layer": [ 2786 "ssl-1", 2787 "ssl-2" 2788 ] 2789 } 2790 }, 2791 "outgoing-type": { 2792 "forwarding-sub-layer": { 2793 "service-outgoing-list": [ 2794 { 2795 "service-outgoing-index": 0, 2796 "mpls-label-stack": { 2797 "entry": [ 2798 { 2799 "id": 0, 2800 "label": 1000 2801 } 2802 ] 2803 }, 2804 "forwarding-sub-layer": [ 2805 "afl-1" 2806 ] 2807 } 2808 ] 2809 } 2810 } 2811 } 2812 ] 2813 }, 2814 "forwarding-sub-layer": { 2815 "forwarding-sub-layer-list": [ 2816 { 2817 "name": "afl-1", 2818 "traffic-profile": "3", 2819 "forwarding-operation-type": "impose-and-forward", 2820 "incoming-type": { 2821 "service-sub-layer": { 2822 "service-sub-layer": [ 2823 "asl-1" 2824 ] 2825 } 2826 }, 2827 "outgoing-type": { 2828 "interface": { 2829 "outgoing-interface": "eth2", 2830 "mpls-label-stack": { 2831 "entry": [ 2832 { 2833 "id": 0, 2834 "label": 20000 2835 } 2836 ] 2837 } 2838 } 2839 } 2840 } 2841 ] 2842 } 2843 } 2844 } 2846 Figure 7: Example B-2 DetNet JSON Service Aggregation 2848 A.4. Example C-1 JSON Relay Aggregation/Disaggregation Configuration 2850 This illustrates the Relay node 1 aggregating the forwarding sub- 2851 layers of DetNet flows 1 and 2 into a forwarding sub-layer. A 2852 diagram illustrating both aggregation and disaggregation is shown and 2853 then the corresponding JSON operational data follows. 2855 Please consult the PDF or HTML versions for the Case C-1 Diagram. 2857 Figure 8: Case C-1 Example JSON Service Aggregation/Disaggregation 2859 { 2860 "ietf-interfaces:interfaces": { 2861 "interface": [ 2862 { 2863 "name": "eth0", 2864 "type": "iana-if-type:ethernetCsmacd", 2865 "oper-status": "up", 2866 "statistics": { 2867 "discontinuity-time": "2020-12-18T23:59:00Z" 2868 } 2869 }, 2870 { 2871 "name": "eth1", 2872 "type": "iana-if-type:ethernetCsmacd", 2873 "oper-status": "up", 2874 "statistics": { 2875 "discontinuity-time": "2020-12-18T23:59:00Z" 2876 } 2877 }, 2878 { 2879 "name": "eth2", 2880 "type": "iana-if-type:ethernetCsmacd", 2881 "oper-status": "up", 2882 "statistics": { 2883 "discontinuity-time": "2020-12-18T23:59:00Z" 2884 } 2885 }, 2886 { 2887 "name": "eth3", 2888 "type": "iana-if-type:ethernetCsmacd", 2889 "oper-status": "up", 2890 "statistics": { 2891 "discontinuity-time": "2020-12-18T23:59:00Z" 2892 } 2893 }, 2894 { 2895 "name": "eth4", 2896 "type": "iana-if-type:ethernetCsmacd", 2897 "oper-status": "up", 2898 "statistics": { 2899 "discontinuity-time": "2020-12-18T23:59:00Z" 2900 } 2901 } 2902 ] 2903 }, 2904 "ietf-detnet:detnet": { 2905 "traffic-profile": [ 2906 { 2907 "profile-name": "pf-1", 2908 "traffic-requirements": { 2909 "min-bandwidth": "100000000", 2910 "max-latency": 100000000, 2911 "max-latency-variation": 100000000, 2912 "max-loss": 2, 2913 "max-consecutive-loss-tolerance": 5, 2914 "max-misordering": 0 2915 }, 2916 "member-services": [ 2917 "ssl-1", 2918 "ssl-2" 2919 ] 2920 }, 2921 { 2922 "profile-name": "pf-2", 2923 "flow-spec": { 2924 "interval": 125, 2925 "max-pkts-per-interval": 2, 2926 "max-payload-size": 1518 2927 }, 2928 "member-fwd-sublayers": [ 2929 "afl-1", 2930 "afl-2" 2931 ] 2932 }, 2933 { 2934 "profile-name": "pf-3", 2935 "flow-spec": { 2936 "interval": 125, 2937 "max-pkts-per-interval": 1, 2938 "max-payload-size": 1518 2939 }, 2940 "member-fwd-sublayers": [ 2941 "fsl-1", 2942 "fsl-2", 2943 "fsl-3", 2944 "fsl-4", 2945 "fsl-5", 2946 "fsl-6" 2947 ] 2948 } 2949 ], 2950 "service-sub-layer": { 2951 "service-sub-layer-list": [ 2952 { 2953 "name": "ssl-1", 2954 "service-rank": 10, 2955 "traffic-profile": "pf-1", 2956 "service-protection": { 2957 "service-protection-type": "replication", 2958 "sequence-number-length": "long-sn" 2959 }, 2960 "service-operation-type": "service-relay", 2961 "incoming-type": { 2962 "service-id": { 2963 "mpls-label-stack": { 2964 "entry": [ 2965 { 2966 "id": 0, 2967 "label": 100 2968 } 2969 ] 2970 } 2971 } 2972 }, 2973 "outgoing-type": { 2974 "forwarding-sub-layer": { 2975 "service-outgoing-list": [ 2976 { 2977 "service-outgoing-index": 0, 2978 "mpls-label-stack": { 2979 "entry": [ 2980 { 2981 "id": 0, 2982 "label": 101 2983 } 2984 ] 2985 }, 2986 "forwarding-sub-layer": [ 2987 "fsl-2", 2988 "fsl-3" 2989 ] 2990 } 2991 ] 2992 } 2993 } 2994 }, 2995 { 2996 "name": "ssl-2", 2997 "service-rank": 10, 2998 "traffic-profile": "pf-1", 2999 "service-protection": { 3000 "service-protection-type": "replication", 3001 "sequence-number-length": "long-sn" 3002 }, 3003 "service-operation-type": "service-relay", 3004 "incoming-type": { 3005 "service-id": { 3006 "mpls-label-stack": { 3007 "entry": [ 3008 { 3009 "id": 0, 3010 "label": 103 3011 } 3012 ] 3013 } 3014 } 3015 }, 3016 "outgoing-type": { 3017 "forwarding-sub-layer": { 3018 "service-outgoing-list": [ 3019 { 3020 "service-outgoing-index": 0, 3021 "mpls-label-stack": { 3022 "entry": [ 3023 { 3024 "id": 0, 3025 "label": 104 3026 } 3027 ] 3028 }, 3029 "forwarding-sub-layer": [ 3030 "fsl-5", 3031 "fsl-6" 3032 ] 3033 } 3034 ] 3035 } 3036 } 3037 } 3038 ] 3039 }, 3040 "forwarding-sub-layer": { 3041 "forwarding-sub-layer-list": [ 3042 { 3043 "name": "fsl-1", 3044 "traffic-profile": "pf-3", 3045 "forwarding-operation-type": "pop-and-lookup", 3046 "incoming-type": { 3047 "forwarding-id": { 3048 "interface": "eth0", 3049 "mpls-label-stack": { 3050 "entry": [ 3051 { 3052 "id": 0, 3053 "label": 10000 3054 } 3055 ] 3056 } 3057 } 3058 }, 3059 "outgoing-type": { 3060 "service-sub-layer": { 3061 "service-sub-layer": [ 3062 "ssl-1" 3063 ] 3064 } 3065 } 3066 }, 3067 { 3068 "name": "fsl-2", 3069 "traffic-profile": "pf-3", 3070 "forwarding-operation-type": "impose-and-forward", 3071 "incoming-type": { 3072 "service-sub-layer": { 3073 "service-sub-layer": [ 3074 "ssl-1" 3075 ] 3076 } 3077 }, 3078 "outgoing-type": { 3079 "forwarding-sub-layer": { 3080 "aggregation-forwarding-sub-layer": "afl-1", 3081 "forwarding-label": { 3082 "mpls-label-stack": { 3083 "entry": [ 3084 { 3085 "id": 0, 3086 "label": 10003 3087 } 3088 ] 3089 } 3090 } 3091 } 3092 } 3093 }, 3094 { 3095 "name": "fsl-3", 3096 "traffic-profile": "pf-3", 3097 "forwarding-operation-type": "impose-and-forward", 3098 "incoming-type": { 3099 "service-sub-layer": { 3100 "service-sub-layer": [ 3101 "ssl-1" 3102 ] 3103 } 3104 }, 3105 "outgoing-type": { 3106 "forwarding-sub-layer": { 3107 "aggregation-forwarding-sub-layer": "afl-2", 3108 "forwarding-label": { 3109 "mpls-label-stack": { 3110 "entry": [ 3111 { 3112 "id": 0, 3113 "label": 10004 3114 } 3115 ] 3116 } 3117 } 3118 } 3119 } 3120 }, 3121 { 3122 "name": "fsl-4", 3123 "traffic-profile": "pf-3", 3124 "forwarding-operation-type": "pop-and-lookup", 3125 "incoming-type": { 3126 "forwarding-id": { 3127 "interface": "eth1", 3128 "mpls-label-stack": { 3129 "entry": [ 3130 { 3131 "id": 0, 3132 "label": 10006 3133 } 3134 ] 3135 } 3136 } 3137 }, 3138 "outgoing-type": { 3139 "service-sub-layer": { 3140 "service-sub-layer": [ 3141 "ssl-2" 3142 ] 3143 } 3144 } 3145 }, 3146 { 3147 "name": "fsl-5", 3148 "traffic-profile": "pf-3", 3149 "forwarding-operation-type": "impose-and-forward", 3150 "incoming-type": { 3151 "service-sub-layer": { 3152 "service-sub-layer": [ 3153 "ssl-2" 3154 ] 3155 } 3156 }, 3157 "outgoing-type": { 3158 "forwarding-sub-layer": { 3159 "aggregation-forwarding-sub-layer": "afl-1", 3160 "forwarding-label": { 3161 "mpls-label-stack": { 3162 "entry": [ 3163 { 3164 "id": 0, 3165 "label": 10009 3166 } 3167 ] 3168 } 3169 } 3170 } 3171 } 3172 }, 3173 { 3174 "name": "fsl-6", 3175 "traffic-profile": "pf-3", 3176 "forwarding-operation-type": "impose-and-forward", 3177 "incoming-type": { 3178 "service-sub-layer": { 3179 "service-sub-layer": [ 3180 "ssl-2" 3181 ] 3182 } 3183 }, 3184 "outgoing-type": { 3185 "forwarding-sub-layer": { 3186 "aggregation-forwarding-sub-layer": "afl-2", 3187 "forwarding-label": { 3188 "mpls-label-stack": { 3189 "entry": [ 3190 { 3191 "id": 0, 3192 "label": 10010 3193 } 3194 ] 3196 } 3197 } 3198 } 3199 } 3200 }, 3201 { 3202 "name": "afl-1", 3203 "traffic-profile": "pf-2", 3204 "forwarding-operation-type": "impose-and-forward", 3205 "incoming-type": { 3206 "forwarding-aggregation": { 3207 "forwarding-sub-layer": [ 3208 "fsl-2", 3209 "fsl-5" 3210 ] 3211 } 3212 }, 3213 "outgoing-type": { 3214 "interface": { 3215 "outgoing-interface": "eth2", 3216 "mpls-label-stack": { 3217 "entry": [ 3218 { 3219 "id": 0, 3220 "label": 20000 3221 } 3222 ] 3223 } 3224 } 3225 } 3226 }, 3227 { 3228 "name": "afl-2", 3229 "traffic-profile": "pf-2", 3230 "forwarding-operation-type": "impose-and-forward", 3231 "incoming-type": { 3232 "forwarding-aggregation": { 3233 "forwarding-sub-layer": [ 3234 "fsl-3", 3235 "fsl-6" 3236 ] 3237 } 3238 }, 3239 "outgoing-type": { 3240 "interface": { 3241 "outgoing-interface": "eth3", 3242 "mpls-label-stack": { 3243 "entry": [ 3244 { 3245 "id": 0, 3246 "label": 20001 3247 } 3248 ] 3249 } 3250 } 3251 } 3252 } 3253 ] 3254 } 3255 } 3256 } 3258 Figure 9: Example C-1 DetNet JSON Relay Service Aggregation 3260 { 3261 "ietf-interfaces:interfaces": { 3262 "interface": [ 3263 { 3264 "name": "eth0", 3265 "type": "iana-if-type:ethernetCsmacd", 3266 "oper-status": "up", 3267 "statistics": { 3268 "discontinuity-time": "2020-12-18T23:59:00Z" 3269 } 3270 }, 3271 { 3272 "name": "eth1", 3273 "type": "iana-if-type:ethernetCsmacd", 3274 "oper-status": "up", 3275 "statistics": { 3276 "discontinuity-time": "2020-12-18T23:59:00Z" 3277 } 3278 }, 3279 { 3280 "name": "eth2", 3281 "type": "iana-if-type:ethernetCsmacd", 3282 "oper-status": "up", 3283 "statistics": { 3284 "discontinuity-time": "2020-12-18T23:59:00Z" 3285 } 3286 }, 3287 { 3288 "name": "eth3", 3289 "type": "iana-if-type:ethernetCsmacd", 3290 "oper-status": "up", 3291 "statistics": { 3292 "discontinuity-time": "2020-12-18T23:59:00Z" 3293 } 3294 }, 3295 { 3296 "name": "eth4", 3297 "type": "iana-if-type:ethernetCsmacd", 3298 "oper-status": "up", 3299 "statistics": { 3300 "discontinuity-time": "2020-12-18T23:59:00Z" 3301 } 3302 } 3303 ] 3304 }, 3305 "ietf-detnet:detnet": { 3306 "traffic-profile": [ 3307 { 3308 "profile-name": "pf-1", 3309 "traffic-requirements": { 3310 "min-bandwidth": "100000000", 3311 "max-latency": 100000000, 3312 "max-latency-variation": 100000000, 3313 "max-loss": 2, 3314 "max-consecutive-loss-tolerance": 5, 3315 "max-misordering": 0 3316 }, 3317 "member-services": [ 3318 "ssl-1", 3319 "ssl-2" 3320 ] 3321 }, 3322 { 3323 "profile-name": "pf-2", 3324 "flow-spec": { 3325 "interval": 125, 3326 "max-pkts-per-interval": 2, 3327 "max-payload-size": 1518 3328 }, 3329 "member-fwd-sublayers": [ 3330 "afl-1", 3331 "afl-2" 3332 ] 3333 }, 3334 { 3335 "profile-name": "pf-3", 3336 "flow-spec": { 3337 "interval": 125, 3338 "max-pkts-per-interval": 1, 3339 "max-payload-size": 1518 3341 }, 3342 "member-fwd-sublayers": [ 3343 "fsl-1", 3344 "fsl-2", 3345 "fsl-3", 3346 "fsl-4", 3347 "fsl-5", 3348 "fsl-6" 3349 ] 3350 } 3351 ], 3352 "service-sub-layer": { 3353 "service-sub-layer-list": [ 3354 { 3355 "name": "ssl-1", 3356 "service-rank": 10, 3357 "traffic-profile": "pf-1", 3358 "service-protection": { 3359 "service-protection-type": "elimination", 3360 "sequence-number-length": "long-sn" 3361 }, 3362 "service-operation-type": "service-relay", 3363 "incoming-type": { 3364 "service-id": { 3365 "mpls-label-stack": { 3366 "entry": [ 3367 { 3368 "id": 0, 3369 "label": 101 3370 } 3371 ] 3372 } 3373 } 3374 }, 3375 "outgoing-type": { 3376 "forwarding-sub-layer": { 3377 "service-outgoing-list": [ 3378 { 3379 "service-outgoing-index": 0, 3380 "mpls-label-stack": { 3381 "entry": [ 3382 { 3383 "id": 0, 3384 "label": 102 3385 } 3386 ] 3387 }, 3388 "forwarding-sub-layer": [ 3389 "fsl-3" 3390 ] 3391 } 3392 ] 3393 } 3394 } 3395 }, 3396 { 3397 "name": "ssl-2", 3398 "service-rank": 10, 3399 "traffic-profile": "pf-1", 3400 "service-protection": { 3401 "service-protection-type": "elimination", 3402 "sequence-number-length": "long-sn" 3403 }, 3404 "service-operation-type": "service-relay", 3405 "incoming-type": { 3406 "service-id": { 3407 "mpls-label-stack": { 3408 "entry": [ 3409 { 3410 "id": 0, 3411 "label": 104 3412 } 3413 ] 3414 } 3415 } 3416 }, 3417 "outgoing-type": { 3418 "forwarding-sub-layer": { 3419 "service-outgoing-list": [ 3420 { 3421 "service-outgoing-index": 0, 3422 "mpls-label-stack": { 3423 "entry": [ 3424 { 3425 "id": 0, 3426 "label": 105 3427 } 3428 ] 3429 }, 3430 "forwarding-sub-layer": [ 3431 "fsl-6" 3432 ] 3433 } 3434 ] 3435 } 3436 } 3438 } 3439 ] 3440 }, 3441 "forwarding-sub-layer": { 3442 "forwarding-sub-layer-list": [ 3443 { 3444 "name": "afl-1", 3445 "traffic-profile": "pf-2", 3446 "forwarding-operation-type": "pop-and-lookup", 3447 "incoming-type": { 3448 "forwarding-id": { 3449 "interface": "eth0", 3450 "mpls-label-stack": { 3451 "entry": [ 3452 { 3453 "id": 0, 3454 "label": 20002 3455 } 3456 ] 3457 } 3458 } 3459 }, 3460 "outgoing-type": { 3461 "forwarding-disaggregation": { 3462 "forwarding-sub-layer": [ 3463 "fsl-1", 3464 "fsl-4" 3465 ] 3466 } 3467 } 3468 }, 3469 { 3470 "name": "afl-2", 3471 "traffic-profile": "pf-2", 3472 "forwarding-operation-type": "pop-and-lookup", 3473 "incoming-type": { 3474 "forwarding-id": { 3475 "interface": "eth1", 3476 "mpls-label-stack": { 3477 "entry": [ 3478 { 3479 "id": 0, 3480 "label": 20003 3481 } 3482 ] 3483 } 3484 } 3485 }, 3486 "outgoing-type": { 3487 "forwarding-disaggregation": { 3488 "forwarding-sub-layer": [ 3489 "fsl-2", 3490 "fsl-5" 3491 ] 3492 } 3493 } 3494 }, 3495 { 3496 "name": "fsl-1", 3497 "traffic-profile": "pf-3", 3498 "forwarding-operation-type": "pop-and-lookup", 3499 "incoming-type": { 3500 "forwarding-id": { 3501 "interface": "eth0", 3502 "mpls-label-stack": { 3503 "entry": [ 3504 { 3505 "id": 0, 3506 "label": 10003 3507 } 3508 ] 3509 } 3510 } 3511 }, 3512 "outgoing-type": { 3513 "service-sub-layer": { 3514 "service-sub-layer": [ 3515 "ssl-1" 3516 ] 3517 } 3518 } 3519 }, 3520 { 3521 "name": "fsl-2", 3522 "traffic-profile": "pf-3", 3523 "forwarding-operation-type": "pop-and-lookup", 3524 "incoming-type": { 3525 "forwarding-id": { 3526 "interface": "eth1", 3527 "mpls-label-stack": { 3528 "entry": [ 3529 { 3530 "id": 0, 3531 "label": 10004 3532 } 3533 ] 3535 } 3536 } 3537 }, 3538 "outgoing-type": { 3539 "service-sub-layer": { 3540 "service-sub-layer": [ 3541 "ssl-1" 3542 ] 3543 } 3544 } 3545 }, 3546 { 3547 "name": "fsl-3", 3548 "traffic-profile": "pf-3", 3549 "forwarding-operation-type": "impose-and-forward", 3550 "incoming-type": { 3551 "service-sub-layer": { 3552 "service-sub-layer": [ 3553 "ssl-1" 3554 ] 3555 } 3556 }, 3557 "outgoing-type": { 3558 "interface": { 3559 "outgoing-interface": "eth2", 3560 "mpls-label-stack": { 3561 "entry": [ 3562 { 3563 "id": 0, 3564 "label": 10005 3565 } 3566 ] 3567 } 3568 } 3569 } 3570 }, 3571 { 3572 "name": "fsl-4", 3573 "traffic-profile": "pf-3", 3574 "forwarding-operation-type": "pop-and-lookup", 3575 "incoming-type": { 3576 "forwarding-id": { 3577 "interface": "eth0", 3578 "mpls-label-stack": { 3579 "entry": [ 3580 { 3581 "id": 0, 3582 "label": 10009 3584 } 3585 ] 3586 } 3587 } 3588 }, 3589 "outgoing-type": { 3590 "service-sub-layer": { 3591 "service-sub-layer": [ 3592 "ssl-2" 3593 ] 3594 } 3595 } 3596 }, 3597 { 3598 "name": "fsl-5", 3599 "traffic-profile": "pf-3", 3600 "forwarding-operation-type": "pop-and-lookup", 3601 "incoming-type": { 3602 "forwarding-id": { 3603 "interface": "eth1", 3604 "mpls-label-stack": { 3605 "entry": [ 3606 { 3607 "id": 0, 3608 "label": 10010 3609 } 3610 ] 3611 } 3612 } 3613 }, 3614 "outgoing-type": { 3615 "service-sub-layer": { 3616 "service-sub-layer": [ 3617 "ssl-2" 3618 ] 3619 } 3620 } 3621 }, 3622 { 3623 "name": "fsl-6", 3624 "traffic-profile": "pf-3", 3625 "forwarding-operation-type": "impose-and-forward", 3626 "incoming-type": { 3627 "service-sub-layer": { 3628 "service-sub-layer": [ 3629 "ssl-2" 3630 ] 3631 } 3633 }, 3634 "outgoing-type": { 3635 "interface": { 3636 "outgoing-interface": "eth3", 3637 "mpls-label-stack": { 3638 "entry": [ 3639 { 3640 "id": 0, 3641 "label": 10011 3642 } 3643 ] 3644 } 3645 } 3646 } 3647 } 3648 ] 3649 } 3650 } 3651 } 3653 Figure 10: Example C-1 DetNet JSON Relay Service Disaggregation 3655 A.5. Example C-2 JSON Relay Aggregation Service Sub-Layer 3657 This illustrates the Relay node 1 aggregating the service sub-layers 3658 of DetNet flows 1 and 2 into a forwarding sub-layer A diagram 3659 illustrating both aggregation and disaggregation is shown and then 3660 the corresponding JSON operational data follows. 3662 Please consult the PDF or HTML versions for the Case C-2 Diagram. 3664 Figure 11: Case C-2 Example JSON Service Aggregation/Disaggregation 3666 { 3667 "ietf-interfaces:interfaces": { 3668 "interface": [ 3669 { 3670 "name": "eth0", 3671 "type": "iana-if-type:ethernetCsmacd", 3672 "oper-status": "up", 3673 "statistics": { 3674 "discontinuity-time": "2020-12-18T23:59:00Z" 3675 } 3676 }, 3677 { 3678 "name": "eth1", 3679 "type": "iana-if-type:ethernetCsmacd", 3680 "oper-status": "up", 3681 "statistics": { 3682 "discontinuity-time": "2020-12-18T23:59:00Z" 3683 } 3684 }, 3685 { 3686 "name": "eth2", 3687 "type": "iana-if-type:ethernetCsmacd", 3688 "oper-status": "up", 3689 "statistics": { 3690 "discontinuity-time": "2020-12-18T23:59:00Z" 3691 } 3692 }, 3693 { 3694 "name": "eth3", 3695 "type": "iana-if-type:ethernetCsmacd", 3696 "oper-status": "up", 3697 "statistics": { 3698 "discontinuity-time": "2020-12-18T23:59:00Z" 3699 } 3700 }, 3701 { 3702 "name": "eth4", 3703 "type": "iana-if-type:ethernetCsmacd", 3704 "oper-status": "up", 3705 "statistics": { 3706 "discontinuity-time": "2020-12-18T23:59:00Z" 3707 } 3708 } 3709 ] 3710 }, 3711 "ietf-detnet:detnet": { 3712 "traffic-profile": [ 3713 { 3714 "profile-name": "pf-1", 3715 "traffic-requirements": { 3716 "min-bandwidth": "100000000", 3717 "max-latency": 100000000, 3718 "max-latency-variation": 100000000, 3719 "max-loss": 2, 3720 "max-consecutive-loss-tolerance": 5, 3721 "max-misordering": 0 3722 }, 3723 "member-services": [ 3724 "ssl-1", 3725 "ssl-2" 3726 ] 3727 }, 3728 { 3729 "profile-name": "pf-2", 3730 "flow-spec": { 3731 "interval": 125, 3732 "max-pkts-per-interval": 1, 3733 "max-payload-size": 1518 3734 }, 3735 "member-fwd-sublayers": [ 3736 "fsl-1", 3737 "fsl-2" 3738 ] 3739 }, 3740 { 3741 "profile-name": "pf-3", 3742 "flow-spec": { 3743 "interval": 125, 3744 "max-pkts-per-interval": 2, 3745 "max-payload-size": 1518 3746 }, 3747 "member-fwd-sublayers": [ 3748 "afl-1", 3749 "afl-2" 3750 ] 3751 } 3752 ], 3753 "service-sub-layer": { 3754 "service-sub-layer-list": [ 3755 { 3756 "name": "ssl-1", 3757 "service-rank": 10, 3758 "traffic-profile": "pf-1", 3759 "service-protection": { 3760 "service-protection-type": "replication", 3761 "sequence-number-length": "long-sn" 3762 }, 3763 "service-operation-type": "service-relay", 3764 "incoming-type": { 3765 "service-id": { 3766 "mpls-label-stack": { 3767 "entry": [ 3768 { 3769 "id": 0, 3770 "label": 100 3771 } 3772 ] 3773 } 3774 } 3775 }, 3776 "outgoing-type": { 3777 "forwarding-sub-layer": { 3778 "service-outgoing-list": [ 3779 { 3780 "service-outgoing-index": 0, 3781 "mpls-label-stack": { 3782 "entry": [ 3783 { 3784 "id": 0, 3785 "label": 101 3786 } 3787 ] 3788 }, 3789 "forwarding-sub-layer": [ 3790 "afl-1", 3791 "afl-2" 3792 ] 3793 } 3794 ] 3795 } 3796 } 3797 }, 3798 { 3799 "name": "ssl-2", 3800 "service-rank": 10, 3801 "traffic-profile": "pf-1", 3802 "service-protection": { 3803 "service-protection-type": "replication", 3804 "sequence-number-length": "long-sn" 3805 }, 3806 "service-operation-type": "service-relay", 3807 "incoming-type": { 3808 "service-id": { 3809 "mpls-label-stack": { 3810 "entry": [ 3811 { 3812 "id": 0, 3813 "label": 103 3814 } 3815 ] 3816 } 3817 } 3818 }, 3819 "outgoing-type": { 3820 "forwarding-sub-layer": { 3821 "service-outgoing-list": [ 3822 { 3823 "service-outgoing-index": 0, 3824 "mpls-label-stack": { 3825 "entry": [ 3826 { 3827 "id": 0, 3828 "label": 104 3829 } 3830 ] 3831 }, 3832 "forwarding-sub-layer": [ 3833 "afl-1", 3834 "afl-2" 3835 ] 3836 } 3837 ] 3838 } 3839 } 3840 } 3841 ] 3842 }, 3843 "forwarding-sub-layer": { 3844 "forwarding-sub-layer-list": [ 3845 { 3846 "name": "fsl-1", 3847 "traffic-profile": "pf-2", 3848 "forwarding-operation-type": "pop-and-lookup", 3849 "incoming-type": { 3850 "forwarding-id": { 3851 "interface": "eth0", 3852 "mpls-label-stack": { 3853 "entry": [ 3854 { 3855 "id": 0, 3856 "label": 10000 3857 } 3858 ] 3859 } 3860 } 3861 }, 3862 "outgoing-type": { 3863 "service-sub-layer": { 3864 "service-sub-layer": [ 3865 "ssl-1" 3866 ] 3867 } 3868 } 3869 }, 3870 { 3871 "name": "fsl-2", 3872 "traffic-profile": "pf-2", 3873 "forwarding-operation-type": "pop-and-lookup", 3874 "incoming-type": { 3875 "forwarding-id": { 3876 "interface": "eth1", 3877 "mpls-label-stack": { 3878 "entry": [ 3879 { 3880 "id": 0, 3881 "label": 10006 3882 } 3883 ] 3884 } 3885 } 3886 }, 3887 "outgoing-type": { 3888 "service-sub-layer": { 3889 "service-sub-layer": [ 3890 "ssl-2" 3891 ] 3892 } 3893 } 3894 }, 3895 { 3896 "name": "afl-1", 3897 "traffic-profile": "pf-3", 3898 "forwarding-operation-type": "impose-and-forward", 3899 "incoming-type": { 3900 "service-sub-layer": { 3901 "service-sub-layer": [ 3902 "ssl-1", 3903 "ssl-2" 3904 ] 3905 } 3906 }, 3907 "outgoing-type": { 3908 "interface": { 3909 "outgoing-interface": "eth2", 3910 "mpls-label-stack": { 3911 "entry": [ 3912 { 3913 "id": 0, 3914 "label": 20000 3915 } 3916 ] 3917 } 3918 } 3919 } 3921 }, 3922 { 3923 "name": "afl-2", 3924 "traffic-profile": "pf-3", 3925 "forwarding-operation-type": "impose-and-forward", 3926 "incoming-type": { 3927 "service-sub-layer": { 3928 "service-sub-layer": [ 3929 "ssl-1", 3930 "ssl-2" 3931 ] 3932 } 3933 }, 3934 "outgoing-type": { 3935 "interface": { 3936 "outgoing-interface": "eth3", 3937 "mpls-label-stack": { 3938 "entry": [ 3939 { 3940 "id": 0, 3941 "label": 20001 3942 } 3943 ] 3944 } 3945 } 3946 } 3947 } 3948 ] 3949 } 3950 } 3951 } 3953 Figure 12: Example C-2 DetNet JSON Relay Aggregation Service Sub- 3954 Layer 3956 { 3957 "ietf-interfaces:interfaces": { 3958 "interface": [ 3959 { 3960 "name": "eth0", 3961 "type": "iana-if-type:ethernetCsmacd", 3962 "oper-status": "up", 3963 "statistics": { 3964 "discontinuity-time": "2020-12-18T23:59:00Z" 3965 } 3966 }, 3967 { 3968 "name": "eth1", 3969 "type": "iana-if-type:ethernetCsmacd", 3970 "oper-status": "up", 3971 "statistics": { 3972 "discontinuity-time": "2020-12-18T23:59:00Z" 3973 } 3974 }, 3975 { 3976 "name": "eth2", 3977 "type": "iana-if-type:ethernetCsmacd", 3978 "oper-status": "up", 3979 "statistics": { 3980 "discontinuity-time": "2020-12-18T23:59:00Z" 3981 } 3982 }, 3983 { 3984 "name": "eth3", 3985 "type": "iana-if-type:ethernetCsmacd", 3986 "oper-status": "up", 3987 "statistics": { 3988 "discontinuity-time": "2020-12-18T23:59:00Z" 3989 } 3990 }, 3991 { 3992 "name": "eth4", 3993 "type": "iana-if-type:ethernetCsmacd", 3994 "oper-status": "up", 3995 "statistics": { 3996 "discontinuity-time": "2020-12-18T23:59:00Z" 3997 } 3998 } 3999 ] 4000 }, 4001 "ietf-detnet:detnet": { 4002 "traffic-profile": [ 4003 { 4004 "profile-name": "pf-1", 4005 "traffic-requirements": { 4006 "min-bandwidth": "100000000", 4007 "max-latency": 100000000, 4008 "max-latency-variation": 100000000, 4009 "max-loss": 2, 4010 "max-consecutive-loss-tolerance": 5, 4011 "max-misordering": 0 4012 }, 4013 "member-services": [ 4014 "ssl-1", 4015 "ssl-2" 4016 ] 4018 }, 4019 { 4020 "profile-name": "pf-2", 4021 "flow-spec": { 4022 "interval": 125, 4023 "max-pkts-per-interval": 1, 4024 "max-payload-size": 1518 4025 }, 4026 "member-fwd-sublayers": [ 4027 "fsl-1", 4028 "fsl-2" 4029 ] 4030 }, 4031 { 4032 "profile-name": "pf-3", 4033 "flow-spec": { 4034 "interval": 125, 4035 "max-pkts-per-interval": 2, 4036 "max-payload-size": 1518 4037 }, 4038 "member-fwd-sublayers": [ 4039 "afl-1", 4040 "afl-2" 4041 ] 4042 } 4043 ], 4044 "service-sub-layer": { 4045 "service-sub-layer-list": [ 4046 { 4047 "name": "ssl-1", 4048 "service-rank": 10, 4049 "traffic-profile": "pf-1", 4050 "service-protection": { 4051 "service-protection-type": "elimination", 4052 "sequence-number-length": "long-sn" 4053 }, 4054 "service-operation-type": "service-relay", 4055 "incoming-type": { 4056 "service-id": { 4057 "mpls-label-stack": { 4058 "entry": [ 4059 { 4060 "id": 0, 4061 "label": 101 4062 } 4063 ] 4064 } 4065 } 4067 }, 4068 "outgoing-type": { 4069 "forwarding-sub-layer": { 4070 "service-outgoing-list": [ 4071 { 4072 "service-outgoing-index": 0, 4073 "mpls-label-stack": { 4074 "entry": [ 4075 { 4076 "id": 0, 4077 "label": 102 4078 } 4079 ] 4080 }, 4081 "forwarding-sub-layer": [ 4082 "fsl-1" 4083 ] 4084 } 4085 ] 4086 } 4087 } 4088 }, 4089 { 4090 "name": "ssl-2", 4091 "service-rank": 10, 4092 "traffic-profile": "pf-1", 4093 "service-protection": { 4094 "service-protection-type": "elimination", 4095 "sequence-number-length": "long-sn" 4096 }, 4097 "service-operation-type": "service-relay", 4098 "incoming-type": { 4099 "service-id": { 4100 "mpls-label-stack": { 4101 "entry": [ 4102 { 4103 "id": 0, 4104 "label": 104 4105 } 4106 ] 4107 } 4108 } 4109 }, 4110 "outgoing-type": { 4111 "forwarding-sub-layer": { 4112 "service-outgoing-list": [ 4113 { 4114 "service-outgoing-index": 0, 4115 "mpls-label-stack": { 4116 "entry": [ 4117 { 4118 "id": 0, 4119 "label": 105 4120 } 4121 ] 4122 }, 4123 "forwarding-sub-layer": [ 4124 "fsl-2" 4125 ] 4126 } 4127 ] 4128 } 4129 } 4130 } 4131 ] 4132 }, 4133 "forwarding-sub-layer": { 4134 "forwarding-sub-layer-list": [ 4135 { 4136 "name": "afl-1", 4137 "traffic-profile": "pf-3", 4138 "forwarding-operation-type": "pop-and-lookup", 4139 "incoming-type": { 4140 "forwarding-id": { 4141 "interface": "eth0", 4142 "mpls-label-stack": { 4143 "entry": [ 4144 { 4145 "id": 0, 4146 "label": 20002 4147 } 4148 ] 4149 } 4150 } 4151 }, 4152 "outgoing-type": { 4153 "service-sub-layer": { 4154 "service-sub-layer": [ 4155 "ssl-1", 4156 "ssl-2" 4157 ] 4158 } 4159 } 4160 }, 4161 { 4162 "name": "afl-2", 4163 "traffic-profile": "pf-3", 4164 "forwarding-operation-type": "pop-and-lookup", 4165 "incoming-type": { 4166 "forwarding-id": { 4167 "interface": "eth1", 4168 "mpls-label-stack": { 4169 "entry": [ 4170 { 4171 "id": 0, 4172 "label": 20003 4173 } 4174 ] 4175 } 4176 } 4177 }, 4178 "outgoing-type": { 4179 "service-sub-layer": { 4180 "service-sub-layer": [ 4181 "ssl-1", 4182 "ssl-2" 4183 ] 4184 } 4185 } 4186 }, 4187 { 4188 "name": "fsl-1", 4189 "traffic-profile": "pf-2", 4190 "forwarding-operation-type": "impose-and-forward", 4191 "incoming-type": { 4192 "service-sub-layer": { 4193 "service-sub-layer": [ 4194 "ssl-1" 4195 ] 4196 } 4197 }, 4198 "outgoing-type": { 4199 "interface": { 4200 "outgoing-interface": "eth2", 4201 "mpls-label-stack": { 4202 "entry": [ 4203 { 4204 "id": 0, 4205 "label": 10005 4206 } 4207 ] 4208 } 4209 } 4210 } 4212 }, 4213 { 4214 "name": "fsl-2", 4215 "traffic-profile": "pf-2", 4216 "forwarding-operation-type": "impose-and-forward", 4217 "incoming-type": { 4218 "service-sub-layer": { 4219 "service-sub-layer": [ 4220 "ssl-2" 4221 ] 4222 } 4223 }, 4224 "outgoing-type": { 4225 "interface": { 4226 "outgoing-interface": "eth3", 4227 "mpls-label-stack": { 4228 "entry": [ 4229 { 4230 "id": 0, 4231 "label": 10011 4232 } 4233 ] 4234 } 4235 } 4236 } 4237 } 4238 ] 4239 } 4240 } 4241 } 4243 Figure 13: Example C-2 DetNet JSON Relay Disaggregation Service 4244 Sub-Layer 4246 A.6. Example C-3 JSON Relay Service Sub-Layer Aggregation/ 4247 Disaggregation 4249 This illustrates the Relay node 1 aggregating the service sub-layers 4250 of DetNet flows 1 and 2 into a service sub-layer of Aggregated DetNet 4251 flow 1. It also illustrates the Relay node 2 disaggregating the 4252 aggregated DetNet flow 1 into the DetNet flows 1 and 2 service sub- 4253 layers. A diagram illustrating both aggregation and disaggregation 4254 is shown and then the corresponding JSON operational data follows. 4256 Please consult the PDF or HTML versions for the Case C-3 Diagram. 4258 Figure 14: Case C-3 Example JSON Service Aggregation/Disaggregation 4260 { 4261 "ietf-interfaces:interfaces": { 4262 "interface": [ 4263 { 4264 "name": "eth0", 4265 "type": "iana-if-type:ethernetCsmacd", 4266 "oper-status": "up", 4267 "statistics": { 4268 "discontinuity-time": "2020-12-18T23:59:00Z" 4269 } 4270 }, 4271 { 4272 "name": "eth1", 4273 "type": "iana-if-type:ethernetCsmacd", 4274 "oper-status": "up", 4275 "statistics": { 4276 "discontinuity-time": "2020-12-18T23:59:00Z" 4277 } 4278 }, 4279 { 4280 "name": "eth2", 4281 "type": "iana-if-type:ethernetCsmacd", 4282 "oper-status": "up", 4283 "statistics": { 4284 "discontinuity-time": "2020-12-18T23:59:00Z" 4285 } 4286 }, 4287 { 4288 "name": "eth3", 4289 "type": "iana-if-type:ethernetCsmacd", 4290 "oper-status": "up", 4291 "statistics": { 4292 "discontinuity-time": "2020-12-18T23:59:00Z" 4293 } 4294 }, 4295 { 4296 "name": "eth4", 4297 "type": "iana-if-type:ethernetCsmacd", 4298 "oper-status": "up", 4299 "statistics": { 4300 "discontinuity-time": "2020-12-18T23:59:00Z" 4301 } 4302 } 4303 ] 4304 }, 4305 "ietf-detnet:detnet": { 4306 "traffic-profile": [ 4307 { 4308 "profile-name": "pf-1", 4309 "traffic-requirements": { 4310 "min-bandwidth": "100000000", 4311 "max-latency": 100000000, 4312 "max-latency-variation": 100000000, 4313 "max-loss": 2, 4314 "max-consecutive-loss-tolerance": 5, 4315 "max-misordering": 0 4316 }, 4317 "member-services": [ 4318 "ssl-1", 4319 "ssl-2" 4320 ] 4321 }, 4322 { 4323 "profile-name": "pf-2", 4324 "traffic-requirements": { 4325 "min-bandwidth": "200000000", 4326 "max-latency": 100000000, 4327 "max-latency-variation": 100000000, 4328 "max-loss": 2, 4329 "max-consecutive-loss-tolerance": 5, 4330 "max-misordering": 0 4331 }, 4332 "member-services": [ 4333 "asl-1" 4334 ] 4335 }, 4336 { 4337 "profile-name": "pf-3", 4338 "flow-spec": { 4339 "interval": 125, 4340 "max-pkts-per-interval": 1, 4341 "max-payload-size": 1518 4342 }, 4343 "member-fwd-sublayers": [ 4344 "fsl-1", 4345 "fsl-2" 4346 ] 4347 }, 4348 { 4349 "profile-name": "pf-4", 4350 "flow-spec": { 4351 "interval": 125, 4352 "max-pkts-per-interval": 2, 4353 "max-payload-size": 1518 4354 }, 4355 "member-fwd-sublayers": [ 4356 "fsl-3", 4357 "fsl-4" 4358 ] 4359 } 4360 ], 4361 "service-sub-layer": { 4362 "service-sub-layer-list": [ 4363 { 4364 "name": "ssl-1", 4365 "service-rank": 10, 4366 "traffic-profile": "pf-1", 4367 "service-protection": { 4368 "service-protection-type": "none", 4369 "sequence-number-length": "long-sn" 4370 }, 4371 "service-operation-type": "service-relay", 4372 "incoming-type": { 4373 "service-id": { 4374 "mpls-label-stack": { 4375 "entry": [ 4376 { 4377 "id": 0, 4378 "label": 100 4379 } 4380 ] 4381 } 4382 } 4383 }, 4384 "outgoing-type": { 4385 "service-sub-layer": { 4386 "aggregation-service-sub-layer": "asl-1", 4387 "service-label": { 4388 "mpls-label-stack": { 4389 "entry": [ 4390 { 4391 "id": 0, 4392 "label": 101 4393 } 4394 ] 4395 } 4396 } 4397 } 4398 } 4399 }, 4400 { 4401 "name": "ssl-2", 4402 "service-rank": 10, 4403 "traffic-profile": "pf-1", 4404 "service-protection": { 4405 "service-protection-type": "none", 4406 "sequence-number-length": "long-sn" 4407 }, 4408 "service-operation-type": "service-relay", 4409 "incoming-type": { 4410 "service-id": { 4411 "mpls-label-stack": { 4412 "entry": [ 4413 { 4414 "id": 0, 4415 "label": 103 4416 } 4417 ] 4418 } 4419 } 4420 }, 4421 "outgoing-type": { 4422 "service-sub-layer": { 4423 "aggregation-service-sub-layer": "asl-1", 4424 "service-label": { 4425 "mpls-label-stack": { 4426 "entry": [ 4427 { 4428 "id": 0, 4429 "label": 104 4430 } 4431 ] 4432 } 4433 } 4434 } 4435 } 4436 }, 4437 { 4438 "name": "asl-1", 4439 "service-rank": 10, 4440 "traffic-profile": "pf-2", 4441 "service-protection": { 4442 "service-protection-type": "replication", 4443 "sequence-number-length": "long-sn" 4444 }, 4445 "service-operation-type": "service-initiation", 4446 "incoming-type": { 4447 "service-aggregation": { 4448 "service-sub-layer": [ 4449 "ssl-1", 4450 "ssl-2" 4451 ] 4453 } 4454 }, 4455 "outgoing-type": { 4456 "forwarding-sub-layer": { 4457 "service-outgoing-list": [ 4458 { 4459 "service-outgoing-index": 0, 4460 "mpls-label-stack": { 4461 "entry": [ 4462 { 4463 "id": 0, 4464 "label": 1000 4465 } 4466 ] 4467 }, 4468 "forwarding-sub-layer": [ 4469 "fsl-3", 4470 "fsl-4" 4471 ] 4472 } 4473 ] 4474 } 4475 } 4476 } 4477 ] 4478 }, 4479 "forwarding-sub-layer": { 4480 "forwarding-sub-layer-list": [ 4481 { 4482 "name": "fsl-1", 4483 "traffic-profile": "pf-3", 4484 "forwarding-operation-type": "pop-and-lookup", 4485 "incoming-type": { 4486 "forwarding-id": { 4487 "interface": "eth0", 4488 "mpls-label-stack": { 4489 "entry": [ 4490 { 4491 "id": 0, 4492 "label": 10000 4493 } 4494 ] 4495 } 4496 } 4497 }, 4498 "outgoing-type": { 4499 "service-sub-layer": { 4500 "service-sub-layer": [ 4501 "ssl-1" 4502 ] 4503 } 4504 } 4505 }, 4506 { 4507 "name": "fsl-2", 4508 "traffic-profile": "pf-3", 4509 "forwarding-operation-type": "pop-and-lookup", 4510 "incoming-type": { 4511 "forwarding-id": { 4512 "interface": "eth1", 4513 "mpls-label-stack": { 4514 "entry": [ 4515 { 4516 "id": 0, 4517 "label": 10006 4518 } 4519 ] 4520 } 4521 } 4522 }, 4523 "outgoing-type": { 4524 "service-sub-layer": { 4525 "service-sub-layer": [ 4526 "ssl-2" 4527 ] 4528 } 4529 } 4530 }, 4531 { 4532 "name": "fsl-3", 4533 "traffic-profile": "pf-4", 4534 "forwarding-operation-type": "impose-and-forward", 4535 "incoming-type": { 4536 "service-sub-layer": { 4537 "service-sub-layer": [ 4538 "asl-1" 4539 ] 4540 } 4541 }, 4542 "outgoing-type": { 4543 "interface": { 4544 "outgoing-interface": "eth2", 4545 "mpls-label-stack": { 4546 "entry": [ 4547 { 4548 "id": 0, 4549 "label": 20000 4550 } 4551 ] 4552 } 4553 } 4554 } 4555 }, 4556 { 4557 "name": "fsl-4", 4558 "traffic-profile": "pf-4", 4559 "forwarding-operation-type": "impose-and-forward", 4560 "incoming-type": { 4561 "service-sub-layer": { 4562 "service-sub-layer": [ 4563 "asl-1" 4564 ] 4565 } 4566 }, 4567 "outgoing-type": { 4568 "interface": { 4569 "outgoing-interface": "eth3", 4570 "mpls-label-stack": { 4571 "entry": [ 4572 { 4573 "id": 0, 4574 "label": 20001 4575 } 4576 ] 4577 } 4578 } 4579 } 4580 } 4581 ] 4582 } 4583 } 4584 } 4586 Figure 15: Example C-3 DetNet JSON Relay Service Sub-Layer 4587 Aggregation 4589 { 4590 "ietf-interfaces:interfaces": { 4591 "interface": [ 4592 { 4593 "name": "eth0", 4594 "type": "iana-if-type:ethernetCsmacd", 4595 "oper-status": "up", 4596 "statistics": { 4597 "discontinuity-time": "2020-12-18T23:59:00Z" 4598 } 4599 }, 4600 { 4601 "name": "eth1", 4602 "type": "iana-if-type:ethernetCsmacd", 4603 "oper-status": "up", 4604 "statistics": { 4605 "discontinuity-time": "2020-12-18T23:59:00Z" 4606 } 4607 }, 4608 { 4609 "name": "eth2", 4610 "type": "iana-if-type:ethernetCsmacd", 4611 "oper-status": "up", 4612 "statistics": { 4613 "discontinuity-time": "2020-12-18T23:59:00Z" 4614 } 4615 }, 4616 { 4617 "name": "eth3", 4618 "type": "iana-if-type:ethernetCsmacd", 4619 "oper-status": "up", 4620 "statistics": { 4621 "discontinuity-time": "2020-12-18T23:59:00Z" 4622 } 4623 }, 4624 { 4625 "name": "eth4", 4626 "type": "iana-if-type:ethernetCsmacd", 4627 "oper-status": "up", 4628 "statistics": { 4629 "discontinuity-time": "2020-12-18T23:59:00Z" 4630 } 4631 } 4632 ] 4633 }, 4634 "ietf-detnet:detnet": { 4635 "traffic-profile": [ 4636 { 4637 "profile-name": "pf-1", 4638 "traffic-requirements": { 4639 "min-bandwidth": "100000000", 4640 "max-latency": 100000000, 4641 "max-latency-variation": 100000000, 4642 "max-loss": 2, 4643 "max-consecutive-loss-tolerance": 5, 4644 "max-misordering": 0 4646 }, 4647 "member-services": [ 4648 "ssl-1", 4649 "ssl-2" 4650 ] 4651 }, 4652 { 4653 "profile-name": "pf-2", 4654 "traffic-requirements": { 4655 "min-bandwidth": "200000000", 4656 "max-latency": 100000000, 4657 "max-latency-variation": 100000000, 4658 "max-loss": 2, 4659 "max-consecutive-loss-tolerance": 5, 4660 "max-misordering": 0 4661 }, 4662 "member-services": [ 4663 "asl-1" 4664 ] 4665 }, 4666 { 4667 "profile-name": "pf-3", 4668 "flow-spec": { 4669 "interval": 125, 4670 "max-pkts-per-interval": 1, 4671 "max-payload-size": 1518 4672 }, 4673 "member-fwd-sublayers": [ 4674 "fsl-3", 4675 "fsl-4" 4676 ] 4677 }, 4678 { 4679 "profile-name": "pf-4", 4680 "flow-spec": { 4681 "interval": 125, 4682 "max-pkts-per-interval": 2, 4683 "max-payload-size": 1518 4684 }, 4685 "member-fwd-sublayers": [ 4686 "fsl-1", 4687 "fsl-2" 4688 ] 4689 } 4690 ], 4691 "service-sub-layer": { 4692 "service-sub-layer-list": [ 4693 { 4694 "name": "ssl-1", 4695 "service-rank": 10, 4696 "traffic-profile": "pf-1", 4697 "service-protection": { 4698 "service-protection-type": "none", 4699 "sequence-number-length": "long-sn" 4700 }, 4701 "service-operation-type": "service-relay", 4702 "incoming-type": { 4703 "service-id": { 4704 "mpls-label-stack": { 4705 "entry": [ 4706 { 4707 "id": 0, 4708 "label": 101 4709 } 4710 ] 4711 } 4712 } 4713 }, 4714 "outgoing-type": { 4715 "forwarding-sub-layer": { 4716 "service-outgoing-list": [ 4717 { 4718 "service-outgoing-index": 0, 4719 "mpls-label-stack": { 4720 "entry": [ 4721 { 4722 "id": 0, 4723 "label": 102 4724 } 4725 ] 4726 }, 4727 "forwarding-sub-layer": [ 4728 "fsl-3" 4729 ] 4730 } 4731 ] 4732 } 4733 } 4734 }, 4735 { 4736 "name": "ssl-2", 4737 "service-rank": 10, 4738 "traffic-profile": "pf-1", 4739 "service-protection": { 4740 "service-protection-type": "none", 4741 "sequence-number-length": "long-sn" 4743 }, 4744 "service-operation-type": "service-relay", 4745 "incoming-type": { 4746 "service-id": { 4747 "mpls-label-stack": { 4748 "entry": [ 4749 { 4750 "id": 0, 4751 "label": 104 4752 } 4753 ] 4754 } 4755 } 4756 }, 4757 "outgoing-type": { 4758 "forwarding-sub-layer": { 4759 "service-outgoing-list": [ 4760 { 4761 "service-outgoing-index": 0, 4762 "mpls-label-stack": { 4763 "entry": [ 4764 { 4765 "id": 0, 4766 "label": 105 4767 } 4768 ] 4769 }, 4770 "forwarding-sub-layer": [ 4771 "fsl-4" 4772 ] 4773 } 4774 ] 4775 } 4776 } 4777 }, 4778 { 4779 "name": "asl-1", 4780 "service-rank": 10, 4781 "traffic-profile": "pf-2", 4782 "service-protection": { 4783 "service-protection-type": "elimination", 4784 "sequence-number-length": "long-sn" 4785 }, 4786 "service-operation-type": "service-termination", 4787 "incoming-type": { 4788 "service-id": { 4789 "mpls-label-stack": { 4790 "entry": [ 4791 { 4792 "id": 0, 4793 "label": 1000 4794 } 4795 ] 4796 } 4797 } 4798 }, 4799 "outgoing-type": { 4800 "service-disaggregation": { 4801 "service-sub-layer": [ 4802 "ssl-1", 4803 "ssl-2" 4804 ] 4805 } 4806 } 4807 } 4808 ] 4809 }, 4810 "forwarding-sub-layer": { 4811 "forwarding-sub-layer-list": [ 4812 { 4813 "name": "fsl-1", 4814 "traffic-profile": "pf-4", 4815 "forwarding-operation-type": "pop-and-lookup", 4816 "incoming-type": { 4817 "forwarding-id": { 4818 "interface": "eth0", 4819 "mpls-label-stack": { 4820 "entry": [ 4821 { 4822 "id": 0, 4823 "label": 20002 4824 } 4825 ] 4826 } 4827 } 4828 }, 4829 "outgoing-type": { 4830 "service-sub-layer": { 4831 "service-sub-layer": [ 4832 "asl-1" 4833 ] 4834 } 4835 } 4836 }, 4837 { 4838 "name": "fsl-2", 4839 "traffic-profile": "pf-4", 4840 "forwarding-operation-type": "pop-and-lookup", 4841 "incoming-type": { 4842 "forwarding-id": { 4843 "interface": "eth1", 4844 "mpls-label-stack": { 4845 "entry": [ 4846 { 4847 "id": 0, 4848 "label": 20003 4849 } 4850 ] 4851 } 4852 } 4853 }, 4854 "outgoing-type": { 4855 "service-sub-layer": { 4856 "service-sub-layer": [ 4857 "asl-1" 4858 ] 4859 } 4860 } 4861 }, 4862 { 4863 "name": "fsl-3", 4864 "traffic-profile": "pf-3", 4865 "forwarding-operation-type": "impose-and-forward", 4866 "incoming-type": { 4867 "service-sub-layer": { 4868 "service-sub-layer": [ 4869 "ssl-1" 4870 ] 4871 } 4872 }, 4873 "outgoing-type": { 4874 "interface": { 4875 "outgoing-interface": "eth2", 4876 "mpls-label-stack": { 4877 "entry": [ 4878 { 4879 "id": 0, 4880 "label": 10005 4881 } 4882 ] 4883 } 4884 } 4885 } 4886 }, 4887 { 4888 "name": "fsl-4", 4889 "traffic-profile": "pf-3", 4890 "forwarding-operation-type": "impose-and-forward", 4891 "incoming-type": { 4892 "service-sub-layer": { 4893 "service-sub-layer": [ 4894 "ssl-2" 4895 ] 4896 } 4897 }, 4898 "outgoing-type": { 4899 "interface": { 4900 "outgoing-interface": "eth3", 4901 "mpls-label-stack": { 4902 "entry": [ 4903 { 4904 "id": 0, 4905 "label": 10011 4906 } 4907 ] 4908 } 4909 } 4910 } 4911 } 4912 ] 4913 } 4914 } 4915 } 4917 Figure 16: Example C-3 DetNet JSON Relay Service Sub-Layer 4918 Disaggregation 4920 A.7. Example C-4 JSON Relay Service Sub-Layer Aggregation/ 4921 Disaggregation 4923 This illustrates the Relay node 1 aggregating the forwarding sub- 4924 layers of DetNet flow 1 and 2 into a service sub-layer of Aggregated 4925 DetNet flow 1. This also illustrates the Relay node 2 disaggregating 4926 the service sub-layer of Aggregated DetNet flow 1 to forwarding sub- 4927 layers of DetNet flow 1 and 2. A diagram illustrating both 4928 aggregation and disaggregation is shown and then the corresponding 4929 JSON operational data follows. 4931 Please consult the PDF or HTML versions for the Case C-4 Diagram 4933 Figure 17: Case C-4 Example JSON Service Aggregation/Disaggregation 4935 { 4936 "ietf-interfaces:interfaces": { 4937 "interface": [ 4938 { 4939 "name": "eth0", 4940 "type": "iana-if-type:ethernetCsmacd", 4941 "oper-status": "up", 4942 "statistics": { 4943 "discontinuity-time": "2020-12-18T23:59:00Z" 4944 } 4945 }, 4946 { 4947 "name": "eth1", 4948 "type": "iana-if-type:ethernetCsmacd", 4949 "oper-status": "up", 4950 "statistics": { 4951 "discontinuity-time": "2020-12-18T23:59:00Z" 4952 } 4953 }, 4954 { 4955 "name": "eth2", 4956 "type": "iana-if-type:ethernetCsmacd", 4957 "oper-status": "up", 4958 "statistics": { 4959 "discontinuity-time": "2020-12-18T23:59:00Z" 4960 } 4961 }, 4962 { 4963 "name": "eth3", 4964 "type": "iana-if-type:ethernetCsmacd", 4965 "oper-status": "up", 4966 "statistics": { 4967 "discontinuity-time": "2020-12-18T23:59:00Z" 4968 } 4969 }, 4970 { 4971 "name": "eth4", 4972 "type": "iana-if-type:ethernetCsmacd", 4973 "oper-status": "up", 4974 "statistics": { 4975 "discontinuity-time": "2020-12-18T23:59:00Z" 4976 } 4977 } 4978 ] 4979 }, 4980 "ietf-detnet:detnet": { 4981 "traffic-profile": [ 4982 { 4983 "profile-name": "pf-1", 4984 "traffic-requirements": { 4985 "min-bandwidth": "100000000", 4986 "max-latency": 100000000, 4987 "max-latency-variation": 100000000, 4988 "max-loss": 2, 4989 "max-consecutive-loss-tolerance": 5, 4990 "max-misordering": 0 4991 }, 4992 "member-services": [ 4993 "ssl-1", 4994 "ssl-2" 4995 ] 4996 }, 4997 { 4998 "profile-name": "pf-2", 4999 "traffic-requirements": { 5000 "min-bandwidth": "200000000", 5001 "max-latency": 100000000, 5002 "max-latency-variation": 100000000, 5003 "max-loss": 2, 5004 "max-consecutive-loss-tolerance": 5, 5005 "max-misordering": 0 5006 }, 5007 "member-services": [ 5008 "asl-1" 5009 ] 5010 }, 5011 { 5012 "profile-name": "pf-3", 5013 "flow-spec": { 5014 "interval": 125, 5015 "max-pkts-per-interval": 1, 5016 "max-payload-size": 1518 5017 }, 5018 "member-fwd-sublayers": [ 5019 "fsl-1", 5020 "fsl-2", 5021 "fsl-3", 5022 "fsl-4" 5023 ] 5024 }, 5025 { 5026 "profile-name": "pf-4", 5027 "flow-spec": { 5028 "interval": 125, 5029 "max-pkts-per-interval": 2, 5030 "max-payload-size": 1518 5032 }, 5033 "member-fwd-sublayers": [ 5034 "fsl-5", 5035 "fsl-6" 5036 ] 5037 } 5038 ], 5039 "service-sub-layer": { 5040 "service-sub-layer-list": [ 5041 { 5042 "name": "ssl-1", 5043 "service-rank": 10, 5044 "traffic-profile": "pf-1", 5045 "service-protection": { 5046 "service-protection-type": "none", 5047 "sequence-number-length": "long-sn" 5048 }, 5049 "service-operation-type": "service-relay", 5050 "incoming-type": { 5051 "service-id": { 5052 "mpls-label-stack": { 5053 "entry": [ 5054 { 5055 "id": 0, 5056 "label": 100 5057 } 5058 ] 5059 } 5060 } 5061 }, 5062 "outgoing-type": { 5063 "forwarding-sub-layer": { 5064 "service-outgoing-list": [ 5065 { 5066 "service-outgoing-index": 0, 5067 "mpls-label-stack": { 5068 "entry": [ 5069 { 5070 "id": 0, 5071 "label": 101 5072 } 5073 ] 5074 }, 5075 "forwarding-sub-layer": [ 5076 "fsl-3" 5077 ] 5078 } 5079 ] 5081 } 5082 } 5083 }, 5084 { 5085 "name": "ssl-2", 5086 "service-rank": 10, 5087 "traffic-profile": "pf-1", 5088 "service-protection": { 5089 "service-protection-type": "none", 5090 "sequence-number-length": "long-sn" 5091 }, 5092 "service-operation-type": "service-relay", 5093 "incoming-type": { 5094 "service-id": { 5095 "mpls-label-stack": { 5096 "entry": [ 5097 { 5098 "id": 0, 5099 "label": 103 5100 } 5101 ] 5102 } 5103 } 5104 }, 5105 "outgoing-type": { 5106 "forwarding-sub-layer": { 5107 "service-outgoing-list": [ 5108 { 5109 "service-outgoing-index": 0, 5110 "mpls-label-stack": { 5111 "entry": [ 5112 { 5113 "id": 0, 5114 "label": 104 5115 } 5116 ] 5117 }, 5118 "forwarding-sub-layer": [ 5119 "fsl-4" 5120 ] 5121 } 5122 ] 5123 } 5124 } 5125 }, 5126 { 5127 "name": "asl-1", 5128 "service-rank": 10, 5129 "traffic-profile": "pf-2", 5130 "service-protection": { 5131 "service-protection-type": "replication", 5132 "sequence-number-length": "long-sn" 5133 }, 5134 "service-operation-type": "service-initiation", 5135 "incoming-type": { 5136 "forwarding-aggregation": { 5137 "forwarding-sub-layer": [ 5138 "fsl-3", 5139 "fsl-4" 5140 ] 5141 } 5142 }, 5143 "outgoing-type": { 5144 "forwarding-sub-layer": { 5145 "service-outgoing-list": [ 5146 { 5147 "service-outgoing-index": 0, 5148 "mpls-label-stack": { 5149 "entry": [ 5150 { 5151 "id": 0, 5152 "label": 1000 5153 } 5154 ] 5155 }, 5156 "forwarding-sub-layer": [ 5157 "fsl-5", 5158 "fsl-6" 5159 ] 5160 } 5161 ] 5162 } 5163 } 5164 } 5165 ] 5166 }, 5167 "forwarding-sub-layer": { 5168 "forwarding-sub-layer-list": [ 5169 { 5170 "name": "fsl-1", 5171 "traffic-profile": "pf-3", 5172 "forwarding-operation-type": "pop-and-lookup", 5173 "incoming-type": { 5174 "forwarding-id": { 5175 "interface": "eth0", 5176 "mpls-label-stack": { 5177 "entry": [ 5178 { 5179 "id": 0, 5180 "label": 10000 5181 } 5182 ] 5183 } 5184 } 5185 }, 5186 "outgoing-type": { 5187 "service-sub-layer": { 5188 "service-sub-layer": [ 5189 "ssl-1" 5190 ] 5191 } 5192 } 5193 }, 5194 { 5195 "name": "fsl-2", 5196 "traffic-profile": "pf-3", 5197 "forwarding-operation-type": "pop-and-lookup", 5198 "incoming-type": { 5199 "forwarding-id": { 5200 "interface": "eth1", 5201 "mpls-label-stack": { 5202 "entry": [ 5203 { 5204 "id": 0, 5205 "label": 10006 5206 } 5207 ] 5208 } 5209 } 5210 }, 5211 "outgoing-type": { 5212 "service-sub-layer": { 5213 "service-sub-layer": [ 5214 "ssl-2" 5215 ] 5216 } 5217 } 5218 }, 5219 { 5220 "name": "fsl-3", 5221 "traffic-profile": "pf-3", 5222 "forwarding-operation-type": "impose-and-forward", 5223 "incoming-type": { 5224 "service-sub-layer": { 5225 "service-sub-layer": [ 5226 "ssl-1" 5227 ] 5228 } 5229 }, 5230 "outgoing-type": { 5231 "service-aggregation": { 5232 "aggregation-service-sub-layer": "asl-1", 5233 "optional-forwarding-label": { 5234 "mpls-label-stack": { 5235 "entry": [ 5236 { 5237 "id": 0, 5238 "label": 20004 5239 } 5240 ] 5241 } 5242 } 5243 } 5244 } 5245 }, 5246 { 5247 "name": "fsl-4", 5248 "traffic-profile": "pf-3", 5249 "forwarding-operation-type": "impose-and-forward", 5250 "incoming-type": { 5251 "service-sub-layer": { 5252 "service-sub-layer": [ 5253 "ssl-2" 5254 ] 5255 } 5256 }, 5257 "outgoing-type": { 5258 "service-aggregation": { 5259 "aggregation-service-sub-layer": "asl-1", 5260 "optional-forwarding-label": { 5261 "mpls-label-stack": { 5262 "entry": [ 5263 { 5264 "id": 0, 5265 "label": 20005 5266 } 5267 ] 5268 } 5269 } 5270 } 5271 } 5272 }, 5273 { 5274 "name": "fsl-5", 5275 "traffic-profile": "pf-4", 5276 "forwarding-operation-type": "impose-and-forward", 5277 "incoming-type": { 5278 "service-sub-layer": { 5279 "service-sub-layer": [ 5280 "asl-1" 5281 ] 5282 } 5283 }, 5284 "outgoing-type": { 5285 "interface": { 5286 "outgoing-interface": "eth2", 5287 "mpls-label-stack": { 5288 "entry": [ 5289 { 5290 "id": 0, 5291 "label": 20000 5292 } 5293 ] 5294 } 5295 } 5296 } 5297 }, 5298 { 5299 "name": "fsl-6", 5300 "traffic-profile": "pf-4", 5301 "forwarding-operation-type": "impose-and-forward", 5302 "incoming-type": { 5303 "service-sub-layer": { 5304 "service-sub-layer": [ 5305 "asl-1" 5306 ] 5307 } 5308 }, 5309 "outgoing-type": { 5310 "interface": { 5311 "outgoing-interface": "eth3", 5312 "mpls-label-stack": { 5313 "entry": [ 5314 { 5315 "id": 0, 5316 "label": 20001 5317 } 5318 ] 5319 } 5320 } 5322 } 5323 } 5324 ] 5325 } 5326 } 5327 } 5329 Figure 18: Example C-4 DetNet JSON Relay Service Sub-Layer 5330 Aggregation 5332 { 5333 "ietf-interfaces:interfaces": { 5334 "interface": [ 5335 { 5336 "name": "eth0", 5337 "type": "iana-if-type:ethernetCsmacd", 5338 "oper-status": "up", 5339 "statistics": { 5340 "discontinuity-time": "2020-12-18T23:59:00Z" 5341 } 5342 }, 5343 { 5344 "name": "eth1", 5345 "type": "iana-if-type:ethernetCsmacd", 5346 "oper-status": "up", 5347 "statistics": { 5348 "discontinuity-time": "2020-12-18T23:59:00Z" 5349 } 5350 }, 5351 { 5352 "name": "eth2", 5353 "type": "iana-if-type:ethernetCsmacd", 5354 "oper-status": "up", 5355 "statistics": { 5356 "discontinuity-time": "2020-12-18T23:59:00Z" 5357 } 5358 }, 5359 { 5360 "name": "eth3", 5361 "type": "iana-if-type:ethernetCsmacd", 5362 "oper-status": "up", 5363 "statistics": { 5364 "discontinuity-time": "2020-12-18T23:59:00Z" 5365 } 5366 }, 5367 { 5368 "name": "eth4", 5369 "type": "iana-if-type:ethernetCsmacd", 5370 "oper-status": "up", 5371 "statistics": { 5372 "discontinuity-time": "2020-12-18T23:59:00Z" 5373 } 5374 } 5375 ] 5376 }, 5377 "ietf-detnet:detnet": { 5378 "traffic-profile": [ 5379 { 5380 "profile-name": "pf-1", 5381 "traffic-requirements": { 5382 "min-bandwidth": "100000000", 5383 "max-latency": 100000000, 5384 "max-latency-variation": 100000000, 5385 "max-loss": 2, 5386 "max-consecutive-loss-tolerance": 5, 5387 "max-misordering": 0 5388 }, 5389 "member-services": [ 5390 "ssl-1", 5391 "ssl-2" 5392 ] 5393 }, 5394 { 5395 "profile-name": "pf-2", 5396 "traffic-requirements": { 5397 "min-bandwidth": "200000000", 5398 "max-latency": 100000000, 5399 "max-latency-variation": 100000000, 5400 "max-loss": 2, 5401 "max-consecutive-loss-tolerance": 5, 5402 "max-misordering": 0 5403 }, 5404 "member-services": [ 5405 "asl-1" 5406 ] 5407 }, 5408 { 5409 "profile-name": "pf-3", 5410 "flow-spec": { 5411 "interval": 125, 5412 "max-pkts-per-interval": 1, 5413 "max-payload-size": 1518 5414 }, 5415 "member-fwd-sublayers": [ 5416 "fsl-3", 5417 "fsl-4", 5418 "fsl-5", 5419 "fsl-6" 5420 ] 5421 }, 5422 { 5423 "profile-name": "pf-4", 5424 "flow-spec": { 5425 "interval": 125, 5426 "max-pkts-per-interval": 2, 5427 "max-payload-size": 1518 5428 }, 5429 "member-fwd-sublayers": [ 5430 "fsl-1", 5431 "fsl-2" 5432 ] 5433 } 5434 ], 5435 "service-sub-layer": { 5436 "service-sub-layer-list": [ 5437 { 5438 "name": "ssl-1", 5439 "service-rank": 10, 5440 "traffic-profile": "pf-1", 5441 "service-protection": { 5442 "service-protection-type": "none", 5443 "sequence-number-length": "long-sn" 5444 }, 5445 "service-operation-type": "service-relay", 5446 "incoming-type": { 5447 "service-id": { 5448 "mpls-label-stack": { 5449 "entry": [ 5450 { 5451 "id": 0, 5452 "label": 101 5453 } 5454 ] 5455 } 5456 } 5457 }, 5458 "outgoing-type": { 5459 "forwarding-sub-layer": { 5460 "service-outgoing-list": [ 5461 { 5462 "service-outgoing-index": 0, 5463 "mpls-label-stack": { 5464 "entry": [ 5465 { 5466 "id": 0, 5467 "label": 102 5468 } 5469 ] 5470 }, 5471 "forwarding-sub-layer": [ 5472 "fsl-5" 5473 ] 5474 } 5475 ] 5476 } 5477 } 5478 }, 5479 { 5480 "name": "ssl-2", 5481 "service-rank": 10, 5482 "traffic-profile": "pf-1", 5483 "service-protection": { 5484 "service-protection-type": "none", 5485 "sequence-number-length": "long-sn" 5486 }, 5487 "service-operation-type": "service-relay", 5488 "incoming-type": { 5489 "service-id": { 5490 "mpls-label-stack": { 5491 "entry": [ 5492 { 5493 "id": 0, 5494 "label": 104 5495 } 5496 ] 5497 } 5498 } 5499 }, 5500 "outgoing-type": { 5501 "forwarding-sub-layer": { 5502 "service-outgoing-list": [ 5503 { 5504 "service-outgoing-index": 0, 5505 "mpls-label-stack": { 5506 "entry": [ 5507 { 5508 "id": 0, 5509 "label": 105 5510 } 5511 ] 5512 }, 5513 "forwarding-sub-layer": [ 5514 "fsl-6" 5515 ] 5516 } 5517 ] 5518 } 5519 } 5520 }, 5521 { 5522 "name": "asl-1", 5523 "service-rank": 10, 5524 "traffic-profile": "pf-2", 5525 "service-protection": { 5526 "service-protection-type": "elimination", 5527 "sequence-number-length": "long-sn" 5528 }, 5529 "service-operation-type": "service-termination", 5530 "incoming-type": { 5531 "service-id": { 5532 "mpls-label-stack": { 5533 "entry": [ 5534 { 5535 "id": 0, 5536 "label": 1000 5537 } 5538 ] 5539 } 5540 } 5541 }, 5542 "outgoing-type": { 5543 "forwarding-disaggregation": { 5544 "forwarding-sub-layer": [ 5545 "fsl-3", 5546 "fsl-4" 5547 ] 5548 } 5549 } 5550 } 5551 ] 5552 }, 5553 "forwarding-sub-layer": { 5554 "forwarding-sub-layer-list": [ 5555 { 5556 "name": "fsl-1", 5557 "traffic-profile": "pf-4", 5558 "forwarding-operation-type": "pop-and-lookup", 5559 "incoming-type": { 5560 "forwarding-id": { 5561 "interface": "eth0", 5562 "mpls-label-stack": { 5563 "entry": [ 5564 { 5565 "id": 0, 5566 "label": 20002 5567 } 5568 ] 5569 } 5570 } 5571 }, 5572 "outgoing-type": { 5573 "service-sub-layer": { 5574 "service-sub-layer": [ 5575 "asl-1" 5576 ] 5577 } 5578 } 5579 }, 5580 { 5581 "name": "fsl-2", 5582 "traffic-profile": "pf-4", 5583 "forwarding-operation-type": "pop-and-lookup", 5584 "incoming-type": { 5585 "forwarding-id": { 5586 "interface": "eth1", 5587 "mpls-label-stack": { 5588 "entry": [ 5589 { 5590 "id": 0, 5591 "label": 20003 5592 } 5593 ] 5594 } 5595 } 5596 }, 5597 "outgoing-type": { 5598 "service-sub-layer": { 5599 "service-sub-layer": [ 5600 "asl-1" 5601 ] 5602 } 5603 } 5604 }, 5605 { 5606 "name": "fsl-3", 5607 "traffic-profile": "pf-3", 5608 "forwarding-operation-type": "pop-and-lookup", 5609 "incoming-type": { 5610 "forwarding-id": { 5611 "interface": "eth0", 5612 "mpls-label-stack": { 5613 "entry": [ 5614 { 5615 "id": 0, 5616 "label": 20004 5617 } 5618 ] 5619 } 5620 } 5621 }, 5622 "outgoing-type": { 5623 "service-sub-layer": { 5624 "service-sub-layer": [ 5625 "ssl-1" 5626 ] 5627 } 5628 } 5629 }, 5630 { 5631 "name": "fsl-4", 5632 "traffic-profile": "pf-3", 5633 "forwarding-operation-type": "pop-and-lookup", 5634 "incoming-type": { 5635 "forwarding-id": { 5636 "interface": "eth1", 5637 "mpls-label-stack": { 5638 "entry": [ 5639 { 5640 "id": 0, 5641 "label": 20005 5642 } 5643 ] 5644 } 5645 } 5646 }, 5647 "outgoing-type": { 5648 "service-sub-layer": { 5649 "service-sub-layer": [ 5650 "ssl-2" 5651 ] 5652 } 5653 } 5654 }, 5655 { 5656 "name": "fsl-5", 5657 "traffic-profile": "pf-3", 5658 "forwarding-operation-type": "impose-and-forward", 5659 "incoming-type": { 5660 "service-sub-layer": { 5661 "service-sub-layer": [ 5662 "ssl-1" 5663 ] 5664 } 5665 }, 5666 "outgoing-type": { 5667 "interface": { 5668 "outgoing-interface": "eth2", 5669 "mpls-label-stack": { 5670 "entry": [ 5671 { 5672 "id": 0, 5673 "label": 10005 5674 } 5675 ] 5676 } 5677 } 5678 } 5679 }, 5680 { 5681 "name": "fsl-6", 5682 "traffic-profile": "pf-3", 5683 "forwarding-operation-type": "impose-and-forward", 5684 "incoming-type": { 5685 "service-sub-layer": { 5686 "service-sub-layer": [ 5687 "ssl-2" 5688 ] 5689 } 5690 }, 5691 "outgoing-type": { 5692 "interface": { 5693 "outgoing-interface": "eth3", 5694 "mpls-label-stack": { 5695 "entry": [ 5696 { 5697 "id": 0, 5698 "label": 10011 5699 } 5700 ] 5701 } 5702 } 5703 } 5704 } 5705 ] 5707 } 5708 } 5709 } 5711 Figure 19: Example C-4 DetNet JSON Relay Service Sub-Layer 5712 Disaggregation 5714 A.8. Example D-1 JSON Transit Forwarding Sub-Layer Aggregation/ 5715 Disaggregation 5717 This illustrates the Transit node 1 aggregating the forwarding sub- 5718 layers of DetNet flow 1 and 2 into a forwarding sub-layer. This also 5719 illustrates a Transit node 4 disaggregating a forwarding sub-layer 5720 into DetNet flow 1 and 2 forwarding sub-layers. 5722 Please consult the PDF or HTML versions for the Case D-1 Diagram 5724 Figure 20: Case D-1 Example Service Aggregation/Disaggregation 5726 { 5727 "ietf-interfaces:interfaces": { 5728 "interface": [ 5729 { 5730 "name": "eth0", 5731 "type": "iana-if-type:ethernetCsmacd", 5732 "oper-status": "up", 5733 "statistics": { 5734 "discontinuity-time": "2020-12-18T23:59:00Z" 5735 } 5736 }, 5737 { 5738 "name": "eth1", 5739 "type": "iana-if-type:ethernetCsmacd", 5740 "oper-status": "up", 5741 "statistics": { 5742 "discontinuity-time": "2020-12-18T23:59:00Z" 5743 } 5744 }, 5745 { 5746 "name": "eth2", 5747 "type": "iana-if-type:ethernetCsmacd", 5748 "oper-status": "up", 5749 "statistics": { 5750 "discontinuity-time": "2020-12-18T23:59:00Z" 5751 } 5752 }, 5753 { 5754 "name": "eth3", 5755 "type": "iana-if-type:ethernetCsmacd", 5756 "oper-status": "up", 5757 "statistics": { 5758 "discontinuity-time": "2020-12-18T23:59:00Z" 5759 } 5760 }, 5761 { 5762 "name": "eth4", 5763 "type": "iana-if-type:ethernetCsmacd", 5764 "oper-status": "up", 5765 "statistics": { 5766 "discontinuity-time": "2020-12-18T23:59:00Z" 5767 } 5768 } 5769 ] 5770 }, 5771 "ietf-detnet:detnet": { 5772 "traffic-profile": [ 5773 { 5774 "profile-name": "pf-1", 5775 "flow-spec": { 5776 "interval": 125, 5777 "max-pkts-per-interval": 1, 5778 "max-payload-size": 1518 5779 }, 5780 "member-fwd-sublayers": [ 5781 "fsl-1", 5782 "fsl-2" 5783 ] 5784 }, 5785 { 5786 "profile-name": "pf-2", 5787 "flow-spec": { 5788 "interval": 125, 5789 "max-pkts-per-interval": 2, 5790 "max-payload-size": 1518 5791 }, 5792 "member-fwd-sublayers": [ 5793 "afl-1" 5794 ] 5795 } 5796 ], 5797 "forwarding-sub-layer": { 5798 "forwarding-sub-layer-list": [ 5799 { 5800 "name": "fsl-1", 5801 "traffic-profile": "pf-1", 5802 "forwarding-operation-type": "pop-impose-and-forward", 5803 "incoming-type": { 5804 "forwarding-id": { 5805 "interface": "eth0", 5806 "mpls-label-stack": { 5807 "entry": [ 5808 { 5809 "id": 0, 5810 "label": 10000 5811 } 5812 ] 5813 } 5814 } 5815 }, 5816 "outgoing-type": { 5817 "forwarding-sub-layer": { 5818 "aggregation-forwarding-sub-layer": "afl-1", 5819 "forwarding-label": { 5820 "mpls-label-stack": { 5821 "entry": [ 5822 { 5823 "id": 0, 5824 "label": 10002 5825 } 5826 ] 5827 } 5828 } 5829 } 5830 } 5831 }, 5832 { 5833 "name": "fsl-2", 5834 "traffic-profile": "pf-1", 5835 "forwarding-operation-type": "pop-impose-and-forward", 5836 "incoming-type": { 5837 "forwarding-id": { 5838 "interface": "eth1", 5839 "mpls-label-stack": { 5840 "entry": [ 5841 { 5842 "id": 0, 5843 "label": 10004 5844 } 5845 ] 5846 } 5847 } 5848 }, 5849 "outgoing-type": { 5850 "forwarding-sub-layer": { 5851 "aggregation-forwarding-sub-layer": "afl-1", 5852 "forwarding-label": { 5853 "mpls-label-stack": { 5854 "entry": [ 5855 { 5856 "id": 0, 5857 "label": 10006 5858 } 5859 ] 5860 } 5861 } 5862 } 5863 } 5864 }, 5865 { 5866 "name": "afl-1", 5867 "traffic-profile": "pf-2", 5868 "forwarding-operation-type": "impose-and-forward", 5869 "incoming-type": { 5870 "forwarding-aggregation": { 5871 "forwarding-sub-layer": [ 5872 "fsl-1", 5873 "fsl-2" 5874 ] 5875 } 5876 }, 5877 "outgoing-type": { 5878 "interface": { 5879 "outgoing-interface": "eth3", 5880 "mpls-label-stack": { 5881 "entry": [ 5882 { 5883 "id": 0, 5884 "label": 20000 5885 } 5886 ] 5887 } 5888 } 5889 } 5890 } 5891 ] 5892 } 5893 } 5894 } 5896 Figure 21: Example D-1 DetNet JSON Relay Service Sub-Layer 5897 Aggregation 5899 { 5900 "ietf-interfaces:interfaces": { 5901 "interface": [ 5902 { 5903 "name": "eth0", 5904 "type": "iana-if-type:ethernetCsmacd", 5905 "oper-status": "up", 5906 "statistics": { 5907 "discontinuity-time": "2020-12-18T23:59:00Z" 5908 } 5909 }, 5910 { 5911 "name": "eth1", 5912 "type": "iana-if-type:ethernetCsmacd", 5913 "oper-status": "up", 5914 "statistics": { 5915 "discontinuity-time": "2020-12-18T23:59:00Z" 5916 } 5917 }, 5918 { 5919 "name": "eth2", 5920 "type": "iana-if-type:ethernetCsmacd", 5921 "oper-status": "up", 5922 "statistics": { 5923 "discontinuity-time": "2020-12-18T23:59:00Z" 5924 } 5925 }, 5926 { 5927 "name": "eth3", 5928 "type": "iana-if-type:ethernetCsmacd", 5929 "oper-status": "up", 5930 "statistics": { 5931 "discontinuity-time": "2020-12-18T23:59:00Z" 5932 } 5933 }, 5934 { 5935 "name": "eth4", 5936 "type": "iana-if-type:ethernetCsmacd", 5937 "oper-status": "up", 5938 "statistics": { 5939 "discontinuity-time": "2020-12-18T23:59:00Z" 5940 } 5941 } 5942 ] 5943 }, 5944 "ietf-detnet:detnet": { 5945 "traffic-profile": [ 5946 { 5947 "profile-name": "pf-1", 5948 "flow-spec": { 5949 "interval": 125, 5950 "max-pkts-per-interval": 1, 5951 "max-payload-size": 1518 5952 }, 5953 "member-fwd-sublayers": [ 5954 "fsl-1", 5955 "fsl-2" 5956 ] 5957 }, 5958 { 5959 "profile-name": "pf-2", 5960 "flow-spec": { 5961 "interval": 125, 5962 "max-pkts-per-interval": 2, 5963 "max-payload-size": 1518 5964 }, 5965 "member-fwd-sublayers": [ 5966 "afl-1" 5967 ] 5968 } 5969 ], 5970 "forwarding-sub-layer": { 5971 "forwarding-sub-layer-list": [ 5972 { 5973 "name": "fsl-1", 5974 "traffic-profile": "pf-1", 5975 "forwarding-operation-type": "swap-and-forward", 5976 "incoming-type": { 5977 "forwarding-id": { 5978 "interface": "eth1", 5979 "mpls-label-stack": { 5980 "entry": [ 5981 { 5982 "id": 0, 5983 "label": 10002 5984 } 5985 ] 5986 } 5987 } 5988 }, 5989 "outgoing-type": { 5990 "interface": { 5991 "outgoing-interface": "eth3", 5992 "mpls-label-stack": { 5993 "entry": [ 5994 { 5995 "id": 0, 5996 "label": 10003 5997 } 5998 ] 5999 } 6000 } 6001 } 6002 }, 6003 { 6004 "name": "fsl-2", 6005 "traffic-profile": "pf-1", 6006 "forwarding-operation-type": "swap-and-forward", 6007 "incoming-type": { 6008 "forwarding-id": { 6009 "interface": "eth1", 6010 "mpls-label-stack": { 6011 "entry": [ 6012 { 6013 "id": 0, 6014 "label": 10006 6015 } 6016 ] 6017 } 6018 } 6019 }, 6020 "outgoing-type": { 6021 "interface": { 6022 "outgoing-interface": "eth2", 6023 "mpls-label-stack": { 6024 "entry": [ 6025 { 6026 "id": 0, 6027 "label": 10007 6028 } 6029 ] 6030 } 6031 } 6032 } 6033 }, 6034 { 6035 "name": "afl-1", 6036 "traffic-profile": "pf-2", 6037 "forwarding-operation-type": "pop-and-lookup", 6038 "incoming-type": { 6039 "forwarding-id": { 6040 "interface": "eth1", 6041 "mpls-label-stack": { 6042 "entry": [ 6043 { 6044 "id": 0, 6045 "label": 20001 6046 } 6047 ] 6048 } 6049 } 6050 }, 6051 "outgoing-type": { 6052 "forwarding-disaggregation": { 6053 "forwarding-sub-layer": [ 6054 "fsl-1", 6055 "fsl-2" 6056 ] 6057 } 6058 } 6059 } 6060 ] 6061 } 6062 } 6063 } 6065 Figure 22: Example D-1 DetNet JSON Relay Service Sub-Layer 6066 Disaggregation 6068 Authors' Addresses 6070 Xuesong Geng 6071 Huawei Technologies 6073 Email: gengxuesong@huawei.com 6075 Mach(Guoyi) Chen 6076 Huawei Technologies 6078 Email: mach.chen@huawei.com 6080 Yeoncheol Ryoo 6081 ETRI 6083 Email: dbduscjf@etri.re.kr 6085 Don Fedyk 6086 LabN Consulting, L.L.C. 6088 Email: dfedyk@labn.net 6090 Reshad Rahman 6091 Individual 6093 Email: reshad@yahoo.com 6095 Zhenqiang Li 6096 China Mobile 6098 Email: lizhenqiang@chinamobile.com