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