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