idnits 2.17.1 draft-ietf-detnet-yang-15.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (6 December 2021) is 872 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 9016 ** Downref: Normative reference to an Informational RFC: RFC 9055 Summary: 2 errors (**), 0 flaws (~~), 1 warning (==), 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 June 2022 ETRI 6 D. Fedyk 7 LabN Consulting, L.L.C. 8 R. Rahman 9 Individual 10 Z. Li 11 China Mobile 12 6 December 2021 14 Deterministic Networking (DetNet) YANG Model 15 draft-ietf-detnet-yang-15 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 June 2022. 47 Copyright Notice 49 Copyright (c) 2021 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 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 38 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 . . . 61 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 six 171 tuple parameters may not be required to be programmed again. In the 172 IP case, without encapsulation, various IP flow id parameters must be 173 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 up 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], and [IEEE8021Q]. This YANG model also has the 378 folowing references to RFCs that are not in the document text body 379 [RFC0791], [RFC4303], [RFC8349], [RFC8960], [RFC8964], and [RFC8200]. 381 file "ietf-detnet@2021-10-20.yang" 382 module ietf-detnet { 383 yang-version 1.1; 384 namespace "urn:ietf:params:xml:ns:yang:ietf-detnet"; 385 prefix dnet; 387 import ietf-yang-types { 388 prefix yang; 389 reference 390 "RFC 6991 - Common YANG Data Types."; 391 } 392 import ietf-inet-types { 393 prefix inet; 394 reference 395 "RFC 6991 - Common YANG Data Types."; 396 } 397 import ietf-ethertypes { 398 prefix ethertypes; 399 reference 400 "RFC 8519 - YANG Data Model for Network Access Control 401 Lists (ACLs)."; 402 } 403 import ietf-routing-types { 404 prefix rt-types; 405 reference 406 "RFC 8294 - Common YANG Data Types for the Routing Area."; 407 } 408 import ietf-packet-fields { 409 prefix packet-fields; 410 reference 411 "RFC 8519 - YANG Data Model for Network Access Control Lists 412 (ACLs)."; 413 } 414 import ietf-interfaces { 415 prefix if; 416 reference 417 "RFC 8343 - A YANG Data Model for Interface Management."; 418 } 419 import ieee802-dot1q-types { 420 prefix dot1q-types; 421 reference 422 "IEEE 802.1Qcx-2020 - IEEE Standard for Local and Metropolitan 423 Area Networks--Bridges and Bridged Networks Amendment 33: YANG 424 Data Model for Connectivity Fault Management."; 425 } 427 organization 428 "IETF DetNet Working Group"; 429 contact 430 "WG Web: 431 WG List: 433 Editor: Xuesong Geng 434 436 Editor: Yeoncheol Ryoo 437 439 Editor: Don Fedyk 440 ; 442 Editor: Reshad Rahman 443 445 Editor: Mach Chen 446 448 Editor: Zhenqiang Li 449 "; 450 description 451 "This YANG module describes the parameters needed 452 for DetNet flow configuration and flow status 453 reporting. This YANG module conforms to the Network 454 Management Datastore Architecture (NMDA). 456 Copyright (c) 2021 IETF Trust and the persons identified as 457 authors of the code. All rights reserved. 459 Redistribution and use in source and binary forms, with or 460 without modification, is permitted pursuant to, and subject to 461 the license terms contained in, the Simplified BSD License set 462 forth in Section 4.c of the IETF Trust's Legal Provisions 463 Relating to IETF Documents 464 (https://trustee.ietf.org/license-info). 466 This version of this YANG module is part of RFC XXXX 467 (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself 468 for full legal notices."; 470 revision 2021-11-18 { 471 description 472 "initial revision"; 473 reference 474 "RFC XXXX: Deterministic Networking (DetNet) YANG Model"; 475 } 477 identity app-status { 478 description 479 "Base identity from which all application-status 480 status types are derived."; 481 reference 482 "RFC 9016 Section 5.8"; 483 } 485 identity none { 486 base app-status; 487 description 488 "This Application has no status. This type of status is 489 expected when the configuration is incomplete."; 490 reference 491 "RFC 9016 Section 5.8"; 492 } 494 identity ready { 495 base app-status; 496 description 497 "Application ingress/egress ready."; 498 reference 499 "RFC 9016 Section 5.8"; 500 } 502 identity failed { 503 base app-status; 504 description 505 "Application ingres/egresss failed."; 506 reference 507 "RFC 9016 Section 5.8"; 508 } 510 identity out-of-service { 511 base app-status; 512 description 513 "Application Administratively blocked."; 514 reference 515 "RFC 9016 Section 5.8"; 516 } 517 identity partial-failed { 518 base app-status; 519 description 520 "This is an Application with one or more Egress ready, and one 521 or more Egress failed. The DetNet flow can be used if the 522 Ingress is Ready."; 523 reference 524 "RFC 9016 Section 5.8"; 525 } 527 typedef app-flow-ref { 528 type leafref { 529 path "/dnet:detnet" 530 + "/dnet:app-flows" 531 + "/dnet:app-flow" 532 + "/dnet:name"; 533 } 534 description 535 "This is an Application Reference."; 536 } 538 typedef service-sub-layer-ref { 539 type leafref { 540 path "/dnet:detnet" 541 + "/dnet:service" 542 + "/dnet:sub-layer" 543 + "/dnet:name"; 544 } 545 description 546 "This is a Service sub-layer Reference."; 547 } 549 typedef forwarding-sub-layer-ref { 550 type leafref { 551 path "/dnet:detnet" 552 + "/dnet:forwarding" 553 + "/dnet:sub-layer" 554 + "/dnet:name"; 555 } 556 description 557 "This is a Forwarding sub-layer Reference."; 558 } 560 typedef traffic-profile-ref { 561 type leafref { 562 path "/dnet:detnet" 563 + "/dnet:traffic-profile" 564 + "/dnet:name"; 566 } 567 description 568 "This is a Traffic Profile Reference."; 569 } 571 typedef ipsec-spi { 572 type uint32 { 573 range "1..max"; 574 } 575 description 576 "IPsec Security Parameters Index. A 32 bit value 577 where 0 is reserved."; 578 reference 579 "IETF RFC 4303 Encapsulating Security Payload (ESP)."; 580 } 582 typedef operation { 583 type enumeration { 584 enum initiation { 585 description 586 "This is an initiating service sub-layer encapsulation."; 587 } 588 enum termination { 589 description 590 "Operation for DetNet service sub-layer decapsulation."; 591 } 592 enum relay { 593 description 594 "Operation for DetNet service sub-layer swap."; 595 } 596 enum non-detnet { 597 description 598 "No operation for DetNet service sub-layer."; 599 } 600 } 601 description 602 "Operation type identifies the behavior for this service 603 sub-layer. Operations are described as unidirectional 604 but a service sub-layer may combine operation types."; 605 } 607 typedef forwarding-operations { 608 type enumeration { 609 enum impose-and-forward { 610 description 611 "This operation impose outgoing label(s) and forward to 612 next-hop."; 613 reference 614 " A YANG Data Model for MPLS Base RFC 8960."; 615 } 616 enum pop-and-forward { 617 description 618 "This operation pops the incoming label and forwards to 619 the next-hop."; 620 reference 621 " A YANG Data Model for MPLS Base RFC 8960."; 622 } 623 enum pop-impose-and-forward { 624 description 625 "This operation pops the incoming label, imposes one or 626 more outgoing label(s) and forwards to the next-hop."; 627 reference 628 " A YANG Data Model for MPLS Base RFC 8960."; 629 } 630 enum swap-and-forward { 631 description 632 "This operation swaps incoming label, with an outgoing 633 label and forwards to the next-hop."; 634 reference 635 " A YANG Data Model for MPLS Base RFC 8960."; 636 } 637 enum forward { 638 description 639 "This operation forward to next-hop."; 640 } 641 enum pop-and-lookup { 642 description 643 "This operation pops incoming label and performs a 644 lookup."; 645 } 646 } 647 description 648 "MPLS operations types. This is an enum modeled after the 649 MPLS enum. The enums are the same as A YANG Data Model 650 for MPLS Base. RFC 8960."; 651 } 653 typedef service-protection { 654 type enumeration { 655 enum none { 656 description 657 "No service protection provided."; 658 } 659 enum replication { 660 description 661 "A Packet Replication Function (PRF) replicates DetNet 662 flow packets and forwards them to one or more next hops in 663 the DetNet domain. The number of packet copies sent to 664 each next hop is a DetNet flow specific parameter at the 665 node doing the replication. PRF can be implemented by an 666 edge node, a relay node, or an end system."; 667 } 668 enum elimination { 669 description 670 "A Packet Elimination Function (PEF) eliminates duplicate 671 copies of packets to prevent excess packets flooding the 672 network or duplicate packets being sent out of the DetNet 673 domain. PEF can be implemented by an edge node, a relay 674 node, or an end system."; 675 } 676 enum ordering { 677 description 678 "A Packet Ordering Function (POF) re-orders packets within 679 a DetNet flow that are received out of order. This 680 function can be implemented by an edge node, a relay node, 681 or an end system."; 682 } 683 enum elimination-ordering { 684 description 685 "A combination of PEF and POF that can be implemented by 686 an edge node, a relay node, or an end system."; 687 } 688 enum elimination-replication { 689 description 690 "A combination of PEF and PRF that can be implemented by 691 an edge node, a relay node, or an end system."; 692 } 693 enum elimination-ordering-replication { 694 description 695 "A combination of PEF, POF and PRF that can be implemented 696 by an edge node, a relay node, or an end system."; 697 } 698 } 699 description 700 "This typedef describes the service protection types."; 701 } 703 typedef sequence-number-generation { 704 type enumeration { 705 enum copy-from-app-flow { 706 description 707 "This type means copy the app-flow sequence number to the 708 DetNet-flow."; 709 } 710 enum generate-by-detnet-flow { 711 description 712 "This type 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 type captures 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, IEEE802.1Q"; 1302 } 1303 leaf max-pkts-per-interval { 1304 type uint32; 1305 description 1306 "The maximum number of packets that the 1307 source will transmit in one interval."; 1308 reference 1309 "RFC 9016 Section 5.5, IEEE802.1Q"; 1310 } 1311 leaf max-payload-size { 1312 type uint32; 1313 description 1314 "The maximum payload size that the source 1315 will transmit."; 1316 reference 1317 "RFC 9016 Section 5.5, IEEE802.1Q"; 1318 } 1319 leaf min-payload-size { 1320 type uint32; 1321 description 1322 "The minimum payload size that the source 1323 will transmit., IEEE802.1Q"; 1324 } 1325 leaf min-pkts-per-interval { 1326 type uint32; 1327 description 1328 "The minimum number of packets that the 1329 source will transmit in one interval."; 1330 reference 1331 "RFC 9016 Section 5.5, IEEE802.1Q"; 1332 } 1333 } 1334 leaf-list member-app { 1335 type app-flow-ref; 1336 config false; 1337 description 1338 "A list of Applications attached to this profile. Each 1339 application that uses a profile has an automatically 1340 populated reference."; 1341 reference 1342 "RFC XXXX: Deterministic Networking (DetNet) YANG Model 1343 Section 5"; 1344 } 1345 leaf-list member-service { 1346 type service-sub-layer-ref; 1347 config false; 1348 description 1349 "A list of Service Sub-layers attached to this profile. 1350 Each Service Sub-layers that uses a profile has an 1351 automatically populated reference."; 1352 reference 1353 "RFC XXXX: Deterministic Networking (DetNet) YANG Model 1354 Section 5"; 1355 } 1356 leaf-list member-fwd-sublayer { 1357 type forwarding-sub-layer-ref; 1358 config false; 1359 description 1360 "A list of Forwarding Sub-layers attached to this profile. 1361 Each Forwarding Sub-layers that uses a profile has an 1362 automatically populated reference."; 1363 reference 1364 "RFC XXXX: Deterministic Networking (DetNet) YANG Model 1365 Section 5"; 1366 } 1367 } 1368 container app-flows { 1369 description 1370 "The DetNet app-flow configuration."; 1371 reference 1372 "RFC 9016 Section 4.1"; 1373 list app-flow { 1374 key "name"; 1375 description 1376 "A unique (management) identifier of the App-flow."; 1377 leaf name { 1378 type string; 1379 description 1380 "A unique (management) identifier of the App-flow."; 1381 reference 1382 "RFC 9016 1383 Sections 4.1, 5.1"; 1384 } 1385 leaf bidir-congruent { 1386 type boolean; 1387 default false; 1388 description 1389 "Defines the data path requirement of the App-flow 1390 whether it must share the same data path and physical 1391 path for both directions through the network, e.g., to 1392 provide congruent paths in the two directions."; 1393 reference 1394 "RFC 9016 1395 Section 4.2"; 1396 } 1397 leaf outgoing-service { 1398 type service-sub-layer-ref; 1399 config false; 1400 description 1401 "Binding to this applications outgoing 1402 service."; 1403 } 1404 leaf incoming-service { 1405 type service-sub-layer-ref; 1406 config false; 1407 description 1408 "Binding to this applications incoming service."; 1409 } 1410 leaf traffic-profile { 1411 type traffic-profile-ref; 1412 description 1413 "The Traffic Profile for this group."; 1414 } 1415 container ingress { 1416 description 1417 "Ingress DetNet application flows or a compound flow."; 1418 leaf app-flow-status { 1419 type identityref { 1420 base app-status; 1421 } 1422 default none; 1423 config false; 1424 description 1425 "Status of ingress application flow. This is an 1426 operational status and defaults to none if 1427 incomplete."; 1428 reference 1429 "RFC 9016 Sections 1430 4.1, 5.8"; 1431 } 1432 leaf interface { 1433 type if:interface-ref; 1434 mandatory true; 1435 description 1436 "Interface is used for any service type when 1437 matching all flows to the interface."; 1438 } 1439 uses data-flow-spec; 1440 } //End of app-ingress 1441 container egress { 1442 description 1443 "Route's next-hop attribute."; 1444 choice application-type { 1445 description 1446 "This is the application type choices."; 1447 container ethernet { 1448 description 1449 "This is TSN unaware traffic that maps to an 1450 interface."; 1451 leaf interface { 1452 type if:interface-ref; 1453 description 1454 "This is an Ethernet or TSN interfaces."; 1455 } 1456 } 1457 container ip-mpls { 1458 description 1459 "This is IP or MPLS DetNet application types."; 1460 uses detnet-app-next-hop-content; 1461 } 1462 } 1463 } 1464 } 1465 } 1466 container service { 1467 description 1468 "The DetNet service sub-layer configuration."; 1469 list sub-layer { 1470 key "name"; 1471 description 1472 "Services are indexed by name."; 1473 leaf name { 1474 type string; 1475 description 1476 "The name of the DetNet service sub-layer."; 1477 } 1478 leaf service-rank { 1479 type uint8; 1480 default 255; 1481 description 1482 "The DetNet rank for this service. Defaults to 255 1483 lowest rank if not specified."; 1484 reference 1485 "RFC 9016 Section 5.7."; 1486 } 1487 leaf traffic-profile { 1488 type traffic-profile-ref; 1489 description 1490 "The Traffic Profile for this service."; 1491 } 1492 container service-protection { 1493 description 1494 "This is the service protection type and sequence number 1495 options."; 1496 leaf protection { 1497 type service-protection; 1498 description 1499 "The DetNet service protection type such as 1500 Packet Replication Function (PRF), 1501 Packet Elimination Function (PEF), 1502 Packet Replication, Elimination, and Ordering Functions 1503 (PREOF)."; 1504 reference 1505 "RFC 8938 Section 4.3"; 1506 } 1507 leaf sequence-number-length { 1508 type sequence-number-field; 1509 default zero-sn; 1510 description 1511 "Sequence number field length can be one of 0 (none), 1512 16-bits or 28-bits. The default is none."; 1513 } 1514 } 1515 leaf operation { 1516 type operation; 1517 description 1518 "This is the service operation type for this service 1519 sub-layer;"; 1520 } 1521 container incoming { 1522 description 1523 "The DetNet service sub-layer incoming configuration."; 1524 choice incoming { 1525 mandatory true; 1526 description 1527 "A service sub-layer may have App flows or other 1528 service sub-layers."; 1529 container app-flow { 1530 description 1531 "This service sub-layer is related to the app-flows 1532 of the upper layer and provide ingress proxy or 1533 ingress aggregation at the ingress node."; 1534 uses app-flows-group; 1535 } 1536 container service-aggregation { 1537 description 1538 "This service sub-layer is related to the service 1539 sub-layer of the upper layer and provide 1540 service-to-service aggregation at the ingress node 1541 or relay node."; 1542 uses service-sub-layer-group; 1543 } 1544 container forwarding-aggregation { 1545 description 1546 "This service sub-layer is related to the forwarding 1547 sub-layer of the upper layer and provide 1548 forwarding-to-service aggregation at the ingress 1549 node or relay node."; 1550 uses forwarding-sub-layer-group; 1551 } 1552 container service-id { 1553 description 1554 "This service sub-layer is related to the service or 1555 forwarding sub-layer of the lower layer and provide 1556 DetNet service relay or termination at the relay 1557 node or egress node."; 1558 uses detnet-flow-spec; 1559 } 1560 } 1561 } 1562 container outgoing { 1563 description 1564 "The DetNet service sub-layer outgoing configuration."; 1565 choice outgoing { 1566 mandatory true; 1567 description 1568 "The outgoing type may be a forwarding Sub-layer or a 1569 service sub-layer or aggregation type."; 1570 container forwarding-sub-layer { 1571 description 1572 "This service sub-layer is sent to the forwarding 1573 sub-layers of the lower layer for DetNet service 1574 forwarding or service-to-forwarding aggregation at 1575 the ingress node or relay node. When the operation 1576 type is service-initiation, The service sub-layer 1577 encapsulates the DetNet Control-Word and services 1578 label, which are for individual DetNet flow when the 1579 incoming type is app-flow and for aggregated DetNet 1580 flow when the incoming type is service or 1581 forwarding. The service sub-layer swaps the service 1582 label when the operation type is service-relay."; 1583 reference 1584 "RFC 8964 Section 4.2.1 and 4.2.2."; 1585 list service-outgoing { 1586 key "index"; 1587 description 1588 "List of the outgoing service 1589 that separately for each node 1590 where services will be eliminated."; 1591 leaf index { 1592 type uint8; 1593 description 1594 "This index allows a list of multiple outgoing 1595 forwarding sub-layers"; 1596 } 1597 uses detnet-header; 1598 uses forwarding-sub-layer-group; 1599 } 1600 } 1601 container service-sub-layer { 1602 description 1603 "This service sub-layer is sent to the service 1604 sub-layers of the lower layer for service-to-service 1605 aggregation at the ingress node or relay node. The 1606 service sub-layer encapsulates the DetNet 1607 Control-Word and S-label when the operation type is 1608 service-initiation, and swaps the S-label when the 1609 operation type is service-relay."; 1610 reference 1611 "RFC 8964 Section 4.2.1 and 4.2.2."; 1612 leaf aggregation-sub-layer { 1613 type service-sub-layer-ref; 1614 description 1615 "reference point of the service-sub-layer 1616 at which this service will be aggregated."; 1617 } 1618 container service-label { 1619 description 1620 "This is the MPLS service sub-layer label. This 1621 is optional and only used when the service 1622 sublayer uses MPLS. It is an MPLS stack since 1623 more than a single label may be used."; 1624 uses rt-types:mpls-label-stack; 1625 } 1626 } 1627 container app-flow { 1628 description 1629 "This service sub-layer is sent to the app-flow of 1630 the upper layer for egress proxy at the egress node, 1631 and decapsulates the DetNet Control-Word and S-label 1632 for individual DetNet service. This outgoing type 1633 only can be chosen when the operation type is 1634 service-termination."; 1635 reference 1636 "RFC 8964 Section 4.2.1 and 4.2.2."; 1637 uses app-flows-group; 1638 } 1639 container service-disaggregation { 1640 description 1641 "This service sub-layer is sent to the service 1642 sub-layer of the upper layer for service-to-service 1643 disaggregation at the relay node or egress node, and 1644 decapsulates the DetNet Control-Word and A-label for 1645 aggregated DetNet service. This outgoing type only 1646 can be chosen when the operation type is 1647 service-termination."; 1648 reference 1649 "RFC 8964 Section 4.2.1 and 4.2.2."; 1650 uses service-sub-layer-group; 1651 } 1652 container forwarding-disaggregation { 1653 description 1654 "This service sub-layer is sent to the forwarding 1655 sub-layer of the upper layer for 1656 forwarding-to-service disaggregation at the relay 1657 node or egress node, and decapsulates the DetNet 1658 Control-Word and A-label for aggregated DetNet 1659 service. This outgoing type only can be chosen when 1660 the operation type is service-termination."; 1661 reference 1662 "RFC 8964 Section 4.2.1 and 4.2.2."; 1663 uses forwarding-sub-layer-group; 1664 } 1665 } 1666 } 1667 } 1668 } 1669 container forwarding { 1670 description 1671 "The DetNet forwarding sub-layer configuration."; 1672 list sub-layer { 1673 key "name"; 1674 description 1675 "The List is one or more DetNet Traffic types."; 1676 leaf name { 1677 type string; 1678 description 1679 "The name of the DetNet forwarding sub-layer."; 1680 } 1681 leaf traffic-profile { 1682 type traffic-profile-ref; 1683 description 1684 "The Traffic Profile for this group."; 1685 } 1686 leaf operation { 1687 type forwarding-operations; 1688 description 1689 "This is the forwarding operation types 1690 impose-and-forward, pop-and-forward, 1691 pop-impose-and-forward, forward, pop-and-lookup."; 1692 } 1693 container incoming { 1694 description 1695 "The DetNet forwarding sub-layer incoming 1696 configuration."; 1697 choice incoming { 1698 mandatory true; 1699 description 1700 "Cases of incoming types."; 1701 container service-sub-layer { 1702 description 1703 "This forwarding sub-layer is related to the service 1704 sub-layers of the upper layer and provide DetNet 1705 forwarding or service-to-forwarding aggregation at 1706 the ingress node or relay node."; 1707 uses service-sub-layer-group; 1708 } 1709 container forwarding-aggregation { 1710 description 1711 "This forwarding sub-layer is related to the 1712 forwarding sub-layer of the upper layer and provide 1713 forwarding-to-forwarding aggregation at the ingress 1714 node or relay node or transit node."; 1715 uses forwarding-sub-layer-group; 1716 } 1717 container forwarding-id { 1718 description 1719 "This forwarding sub-layer is related to all of the 1720 lower layer and provide DetNet forwarding swap or 1721 termination at the transit node or relay node or 1722 egress node."; 1724 leaf interface { 1725 type if:interface-ref; 1726 description 1727 "This is the interface associated with the 1728 forwarding sub-layer."; 1729 } 1730 uses detnet-flow-spec; 1731 } 1732 } 1733 } 1734 container outgoing { 1735 description 1736 "The DetNet forwarding sub-layer outbound 1737 configuration."; 1738 choice outgoing { 1739 mandatory true; 1740 description 1741 "This is when a service connected directly to an 1742 interface with no forwarding sub-layer."; 1743 container 1744 interface { 1745 description 1746 "This forwarding sub-layer is sent to the interface 1747 for send to next-hop at the ingress node or relay 1748 node or transit node."; 1749 uses detnet-forwarding-next-hop-content; 1750 } 1751 container service-aggregation { 1752 description 1753 "This forwarding sub-layer is sent to the service 1754 sub-layers of the lower layer for 1755 forwarding-to-service aggregation at the ingress 1756 node or relay node."; 1757 leaf aggregation-sub-layer { 1758 type service-sub-layer-ref; 1759 description 1760 "This is a reference to the service sub-layer."; 1761 } 1762 container optional-forwarding-label { 1763 description 1764 "This is the optional forwarding label for service 1765 aggregation."; 1766 uses rt-types:mpls-label-stack; 1767 } 1768 } 1769 container forwarding-sub-layer { 1770 description 1771 "This forwarding sub-layer is sent to the forwarding 1772 sub-layers of the lower layer for 1773 forwarding-to-forwarding aggregation at the ingress 1774 node or relay node or transit node."; 1775 leaf aggregation-sub-layer { 1776 type forwarding-sub-layer-ref; 1777 description 1778 "This is a reference to the forwarding sub-layer."; 1779 } 1780 container forwarding-label { 1781 description 1782 "This is the forwarding label for forwarding 1783 sub-layer aggregation."; 1784 uses rt-types:mpls-label-stack; 1785 } 1786 } 1787 container service-sub-layer { 1788 description 1789 "This forwarding sub-layer is sent to the service 1790 sub-layer of the upper layer and decapsulate the 1791 F-label for DetNet service or service-to-forwarding 1792 disaggregation at the relay node or egress node. 1793 This outgoing type only can be chosen when the 1794 operation type is pop-and-lookup."; 1795 uses service-sub-layer-group; 1796 } 1797 container forwarding-disaggregation { 1798 description 1799 "This forwarding sub-layer is sent to the forwarding 1800 sub-layer of the upper layer and decapsulate the 1801 F-label for forwarding-to-forwarding disaggregation 1802 at the transit node or relay node or egress node. 1803 This outgoing type only can be chosen when the 1804 operation type is pop-and-lookup."; 1805 uses forwarding-sub-layer-group; 1806 } 1807 } 1808 } 1809 } 1810 } 1811 } 1812 } 1813 1815 10. IANA Considerations 1817 This document registers a URI in the "IETF XML Registry" [RFC3688]. 1818 Following the format in [RFC3688], the following registration is 1819 requested to be made: 1821 ID: yang:ietf-detnet 1822 URI: urn:ietf:params:xml:ns:yang:ietf-detnet 1823 Registrant Contact: The IESG. 1824 XML: N/A, the requested URI is an XML namespace. 1826 This document registers YANG modules in the "YANG Module Names" 1827 registry [RFC6020]. 1829 Name: ietf-detnet 1830 Maintained by IANA: N 1831 Namespace: urn:ietf:params:xml:ns:yang:ietf-detnet 1832 Prefix: dnet 1833 Reference: This RFC when published. 1835 10. Security Considerations 1837 Security considerations for DetNet are covered in the DetNet 1838 Archtiecture [RFC8655] and DetNet Security Considerations [RFC9055] . 1840 The YANG modules specified in this document define a schema for data 1841 that is designed to be accessed via network management protocols, 1842 such as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF 1843 layer is the secure transport layer, and the mandatory-to-implement 1844 secure transport is Secure Shell (SSH) [RFC6242]. The lowest 1845 RESTCONF layer is HTTPS, and the mandatory-to-implement secure 1846 transport is TLS [RFC8446]. 1848 The Network Configuration Access Control Model (NACM) [RFC8341] 1849 provides the means to restrict access for particular NETCONF or 1850 RESTCONF users to a preconfigured subset of all available NETCONF or 1851 RESTCONF protocol operations and content. 1853 There are a number of data nodes defined in the module that are 1854 writable/creatable/deletable (i.e., config true, which is the 1855 default). These data nodes may be considered sensitive or vulnerable 1856 in some network environments. Write operations (e.g., edit-config) 1857 to these data nodes without proper protection can break or 1858 incorrectly connect DetNet flows. Since this is a configured Data 1859 Plane any changes that are not coordinated with all devices along the 1860 path the whole DetNet module is considered vulnerable and should have 1861 authorized access only. 1863 Similarly, the data nodes in these YANG modules may be considered 1864 sensitive or vulnerable in some network environments. It is thus 1865 important to control read access (e.g., via get, get-config, or 1866 notification) to these data nodes. These are the subtrees and data 1867 node and their sensitivity/vulnerability: 1869 /detnet/app-flows: This controls the application details so it could 1870 be considered sensitive. 1872 /detnet/traffic-profile/member-app: This links traffic profiles to 1873 applications, o this also coudl be considered moer sensitive. The 1874 trafic profiles liked to service sub-layer and forwarding sub-layer 1875 are less sensitive. 1877 /detnet/service/sub-layer/incoming/app-flow: This links applications 1878 to services. 1880 /detnet/service/sub-layer/outgoing/app-flow: This links applications 1881 to services. 1883 11. Contributors 1885 The editors of this document wish to thank and acknowledge the 1886 following people who contributed substantially to the content of this 1887 document and should be considered coauthors: 1889 Mach(Guoyi) Chen 1890 Huawei Technologies 1892 Email: mach.chen@huawei.com 1894 12. Acknowledgments 1896 The editors of this document would like to thank Lou Berger, Tom 1897 Petch and Xufeng Lui for their detailed comments. 1899 13. References 1901 13.1. Normative References 1903 [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, 1904 DOI 10.17487/RFC0791, September 1981, 1905 . 1907 [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", 1908 RFC 4303, DOI 10.17487/RFC4303, December 2005, 1909 . 1911 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1912 the Network Configuration Protocol (NETCONF)", RFC 6020, 1913 DOI 10.17487/RFC6020, October 2010, 1914 . 1916 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 1917 RFC 6991, DOI 10.17487/RFC6991, July 2013, 1918 . 1920 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1921 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1922 . 1924 [RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 1925 (IPv6) Specification", STD 86, RFC 8200, 1926 DOI 10.17487/RFC8200, July 2017, 1927 . 1929 [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger, 1930 "Common YANG Data Types for the Routing Area", RFC 8294, 1931 DOI 10.17487/RFC8294, December 2017, 1932 . 1934 [RFC8343] Bjorklund, M., "A YANG Data Model for Interface 1935 Management", RFC 8343, DOI 10.17487/RFC8343, March 2018, 1936 . 1938 [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for 1939 Routing Management (NMDA Version)", RFC 8349, 1940 DOI 10.17487/RFC8349, March 2018, 1941 . 1943 [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol 1944 Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, 1945 . 1947 [RFC8519] Jethanandani, M., Agarwal, S., Huang, L., and D. Blair, 1948 "YANG Data Model for Network Access Control Lists (ACLs)", 1949 RFC 8519, DOI 10.17487/RFC8519, March 2019, 1950 . 1952 [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, 1953 "Deterministic Networking Architecture", RFC 8655, 1954 DOI 10.17487/RFC8655, October 2019, 1955 . 1957 [RFC8960] Saad, T., Raza, K., Gandhi, R., Liu, X., and V. Beeram, "A 1958 YANG Data Model for MPLS Base", RFC 8960, 1959 DOI 10.17487/RFC8960, December 2020, 1960 . 1962 [RFC8964] Varga, B., Ed., Farkas, J., Berger, L., Malis, A., Bryant, 1963 S., and J. Korhonen, "Deterministic Networking (DetNet) 1964 Data Plane: MPLS", RFC 8964, DOI 10.17487/RFC8964, January 1965 2021, . 1967 [RFC9016] Varga, B., Farkas, J., Cummings, R., Jiang, Y., and D. 1968 Fedyk, "Flow and Service Information Model for 1969 Deterministic Networking (DetNet)", RFC 9016, 1970 DOI 10.17487/RFC9016, March 2021, 1971 . 1973 [RFC9055] Grossman, E., Ed., Mizrahi, T., and A. Hacker, 1974 "Deterministic Networking (DetNet) Security 1975 Considerations", RFC 9055, DOI 10.17487/RFC9055, June 1976 2021, . 1978 13.2. Informative References 1980 [IEEE8021Q] 1981 IEEE, "IEEE Standard for Local and Metropolitan Area 1982 Networks--Bridges and Bridged Networks", 1983 DOI 10.1109/IEEESTD.2018.8403927, IEEE 802.1Q-2018, July 1984 2018, . 1986 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 1987 DOI 10.17487/RFC3688, January 2004, 1988 . 1990 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1991 and A. Bierman, Ed., "Network Configuration Protocol 1992 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 1993 . 1995 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 1996 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 1997 . 1999 [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF 2000 Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, 2001 . 2003 [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", 2004 BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, 2005 . 2007 [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration 2008 Access Control Model", STD 91, RFC 8341, 2009 DOI 10.17487/RFC8341, March 2018, 2010 . 2012 Appendix A. DetNet Configuration YANG Tree 2014 This is the full YANG tree as described in [RFC8340]. 2016 module: ietf-detnet 2017 +--rw detnet 2018 +--rw traffic-profile* [name] 2019 | +--rw name string 2020 | +--rw traffic-requirements 2021 | | +--rw min-bandwidth? uint64 2022 | | +--rw max-latency? uint32 2023 | | +--rw max-latency-variation? uint32 2024 | | +--rw max-loss? uint32 2025 | | +--rw max-consecutive-loss-tolerance? uint32 2026 | | +--rw max-misordering? uint32 2027 | +--rw traffic-spec 2028 | | +--rw interval? uint32 2029 | | +--rw max-pkts-per-interval? uint32 2030 | | +--rw max-payload-size? uint32 2031 | | +--rw min-payload-size? uint32 2032 | | +--rw min-pkts-per-interval? uint32 2033 | +--ro member-app* app-flow-ref 2034 | +--ro member-service* service-sub-layer-ref 2035 | +--ro member-fwd-sublayer* forwarding-sub-layer-ref 2036 +--rw app-flows 2037 | +--rw app-flow* [name] 2038 | +--rw name string 2039 | +--rw bidir-congruent? boolean 2040 | +--ro outgoing-service? service-sub-layer-ref 2041 | +--ro incoming-service? service-sub-layer-ref 2042 | +--rw traffic-profile? traffic-profile-ref 2043 | +--rw ingress 2044 | | +--ro app-flow-status? identityref 2045 | | +--rw interface if:interface-ref 2046 | | +--rw (data-flow-type)? 2047 | | +--:(tsn-app-flow) 2048 | | | +--rw tsn-app-flow 2049 | | | +--rw source-mac-address? 2050 | | | | yang:mac-address 2051 | | | +--rw destination-mac-address? 2052 | | | | yang:mac-address 2053 | | | +--rw ethertype? 2054 | | | | ethertypes:ethertype 2055 | | | +--rw vlan-id? 2056 | | | | dot1q-types:vlanid 2057 | | | +--rw pcp? 2058 | | | dot1q-types:priority-type 2059 | | +--:(ip-app-flow) 2060 | | | +--rw ip-app-flow 2061 | | | +--rw src-ip-prefix? inet:ip-prefix 2062 | | | +--rw dest-ip-prefix? inet:ip-prefix 2063 | | | +--rw protocol-next-header? uint8 2064 | | | +--rw dscp? inet:dscp 2065 | | | +--rw flow-label? 2066 | | | | inet:ipv6-flow-label 2067 | | | +--rw source-port 2068 | | | | +--rw (port-range-or-operator)? 2069 | | | | +--:(range) 2070 | | | | | +--rw lower-port 2071 | | | | | | inet:port-number 2072 | | | | | +--rw upper-port 2073 | | | | | inet:port-number 2074 | | | | +--:(operator) 2075 | | | | +--rw operator? operator 2076 | | | | +--rw port inet:port-number 2077 | | | +--rw destination-port 2078 | | | | +--rw (port-range-or-operator)? 2079 | | | | +--:(range) 2080 | | | | | +--rw lower-port 2081 | | | | | | inet:port-number 2082 | | | | | +--rw upper-port 2083 | | | | | inet:port-number 2084 | | | | +--:(operator) 2085 | | | | +--rw operator? operator 2086 | | | | +--rw port inet:port-number 2087 | | | +--rw ipsec-spi? ipsec-spi 2088 | | +--:(mpls-app-flow) 2089 | | +--rw mpls-app-flow 2090 | | +--rw (label-space)? 2091 | | +--:(context-label-space) 2092 | | | +--rw mpls-label-stack 2093 | | | +--rw entry* [id] 2094 | | | +--rw id uint8 2095 | | | +--rw label? 2096 | | | | rt-types:mpls-label 2097 | | | +--rw ttl? uint8 2098 | | | +--rw traffic-class? uint8 2099 | | +--:(platform-label-space) 2100 | | +--rw label? 2101 | | rt-types:mpls-label 2102 | +--rw egress 2103 | +--rw (application-type)? 2104 | +--:(ethernet) 2105 | | +--rw ethernet 2106 | | +--rw interface? if:interface-ref 2107 | +--:(ip-mpls) 2108 | +--rw ip-mpls 2109 | +--rw (next-hop-options) 2110 | +--:(simple-next-hop) 2111 | | +--rw outgoing-interface? 2112 | | | if:interface-ref 2113 | | +--rw (flow-type)? 2114 | | +--:(ip) 2115 | | | +--rw next-hop-address? 2116 | | | inet:ip-address-no-zone 2117 | | +--:(mpls) 2118 | | +--rw mpls-label-stack 2119 | | +--rw entry* [id] 2120 | | +--rw id uint8 2121 | | +--rw label? 2122 | | | rt-types:mpls-label 2123 | | +--rw ttl? uint8 2124 | | +--rw traffic-class? uint8 2125 | +--:(next-hop-list) 2126 | +--rw next-hop* [hop-index] 2127 | +--rw hop-index uint8 2128 | +--rw outgoing-interface? 2129 | | if:interface-ref 2130 | +--rw (flow-type)? 2131 | +--:(ip) 2132 | | +--rw next-hop-address? 2133 | | inet:ip-address-no- 2134 | | zone 2135 | +--:(mpls) 2136 | +--rw mpls-label-stack 2137 | +--rw entry* [id] 2138 | +--rw id 2139 | | uint8 2140 | +--rw label? 2141 | | rt-types:mpls- 2142 | | label 2143 | +--rw ttl? 2144 | | uint8 2145 | +--rw traffic-class? 2146 | uint8 2147 +--rw service 2148 | +--rw sub-layer* [name] 2149 | +--rw name string 2150 | +--rw service-rank? uint8 2151 | +--rw traffic-profile? traffic-profile-ref 2152 | +--rw service-protection 2153 | | +--rw protection? service-protection 2154 | | +--rw sequence-number-length? sequence-number-field 2155 | +--rw operation? operation 2156 | +--rw incoming 2157 | | +--rw (incoming) 2158 | | +--:(app-flow) 2159 | | | +--rw app-flow 2160 | | | +--rw flow* app-flow-ref 2161 | | +--:(service-aggregation) 2162 | | | +--rw service-aggregation 2163 | | | +--rw sub-layer* service-sub-layer-ref 2164 | | +--:(forwarding-aggregation) 2165 | | | +--rw forwarding-aggregation 2166 | | | +--rw sub-layer* forwarding-sub-layer-ref 2167 | | +--:(service-id) 2168 | | +--rw service-id 2169 | | +--rw (detnet-flow-type)? 2170 | | +--:(ip-detnet-flow) 2171 | | | +--rw src-ip-prefix? 2172 | | | | inet:ip-prefix 2173 | | | +--rw dest-ip-prefix? 2174 | | | | inet:ip-prefix 2175 | | | +--rw protocol-next-header? uint8 2176 | | | +--rw dscp? inet:dscp 2177 | | | +--rw flow-label? 2178 | | | | inet:ipv6-flow-label 2179 | | | +--rw source-port 2180 | | | | +--rw (port-range-or-operator)? 2181 | | | | +--:(range) 2182 | | | | | +--rw lower-port 2183 | | | | | | inet:port-number 2184 | | | | | +--rw upper-port 2185 | | | | | inet:port-number 2186 | | | | +--:(operator) 2187 | | | | +--rw operator? operator 2188 | | | | +--rw port 2189 | | | | inet:port-number 2190 | | | +--rw destination-port 2191 | | | | +--rw (port-range-or-operator)? 2192 | | | | +--:(range) 2193 | | | | | +--rw lower-port 2194 | | | | | | inet:port-number 2195 | | | | | +--rw upper-port 2196 | | | | | inet:port-number 2197 | | | | +--:(operator) 2198 | | | | +--rw operator? operator 2199 | | | | +--rw port 2200 | | | | inet:port-number 2201 | | | +--rw ipsec-spi? ipsec-spi 2202 | | +--:(mpls-detnet-flow) 2203 | | +--rw (label-space)? 2204 | | +--:(context-label-space) 2205 | | | +--rw mpls-label-stack 2206 | | | +--rw entry* [id] 2207 | | | +--rw id uint8 2208 | | | +--rw label? 2209 | | | | rt-types:mpls-label 2210 | | | +--rw ttl? uint8 2211 | | | +--rw traffic-class? uint8 2212 | | +--:(platform-label-space) 2213 | | +--rw label? 2214 | | rt-types:mpls-label 2215 | +--rw outgoing 2216 | +--rw (outgoing) 2217 | +--:(forwarding-sub-layer) 2218 | | +--rw forwarding-sub-layer 2219 | | +--rw service-outgoing* [index] 2220 | | +--rw index uint8 2221 | | +--rw (header-type)? 2222 | | | +--:(mpls) 2223 | | | | +--rw mpls-label-stack 2224 | | | | +--rw entry* [id] 2225 | | | | +--rw id uint8 2226 | | | | +--rw label? 2227 | | | | | rt-types:mpls-label 2228 | | | | +--rw ttl? uint8 2229 | | | | +--rw traffic-class? uint8 2230 | | | +--:(ip) 2231 | | | +--rw src-ip-address? 2232 | | | | inet:ip-address-no-zone 2233 | | | +--rw dest-ip-address? 2234 | | | | inet:ip-address-no-zone 2235 | | | +--rw protocol-next-header? uint8 2236 | | | +--rw dscp? 2237 | | | | inet:dscp 2238 | | | +--rw flow-label? 2239 | | | | inet:ipv6-flow-label 2240 | | | +--rw source-port? 2241 | | | | inet:port-number 2242 | | | +--rw destination-port? 2243 | | | inet:port-number 2244 | | +--rw sub-layer* 2245 | | forwarding-sub-layer-ref 2246 | +--:(service-sub-layer) 2247 | | +--rw service-sub-layer 2248 | | +--rw aggregation-sub-layer? 2249 | | | service-sub-layer-ref 2250 | | +--rw service-label 2251 | | +--rw mpls-label-stack 2252 | | +--rw entry* [id] 2253 | | +--rw id uint8 2254 | | +--rw label? 2255 | | | rt-types:mpls-label 2256 | | +--rw ttl? uint8 2257 | | +--rw traffic-class? uint8 2258 | +--:(app-flow) 2259 | | +--rw app-flow 2260 | | +--rw flow* app-flow-ref 2261 | +--:(service-disaggregation) 2262 | | +--rw service-disaggregation 2263 | | +--rw sub-layer* service-sub-layer-ref 2264 | +--:(forwarding-disaggregation) 2265 | +--rw forwarding-disaggregation 2266 | +--rw sub-layer* forwarding-sub-layer-ref 2267 +--rw forwarding 2268 +--rw sub-layer* [name] 2269 +--rw name string 2270 +--rw traffic-profile? traffic-profile-ref 2271 +--rw operation? forwarding-operations 2272 +--rw incoming 2273 | +--rw (incoming) 2274 | +--:(service-sub-layer) 2275 | | +--rw service-sub-layer 2276 | | +--rw sub-layer* service-sub-layer-ref 2277 | +--:(forwarding-aggregation) 2278 | | +--rw forwarding-aggregation 2279 | | +--rw sub-layer* forwarding-sub-layer-ref 2280 | +--:(forwarding-id) 2281 | +--rw forwarding-id 2282 | +--rw interface? 2283 | | if:interface-ref 2284 | +--rw (detnet-flow-type)? 2285 | +--:(ip-detnet-flow) 2286 | | +--rw src-ip-prefix? 2287 | | | inet:ip-prefix 2288 | | +--rw dest-ip-prefix? 2289 | | | inet:ip-prefix 2290 | | +--rw protocol-next-header? uint8 2291 | | +--rw dscp? inet:dscp 2292 | | +--rw flow-label? 2293 | | | inet:ipv6-flow-label 2294 | | +--rw source-port 2295 | | | +--rw (port-range-or-operator)? 2296 | | | +--:(range) 2297 | | | | +--rw lower-port 2298 | | | | | inet:port-number 2299 | | | | +--rw upper-port 2300 | | | | inet:port-number 2301 | | | +--:(operator) 2302 | | | +--rw operator? operator 2303 | | | +--rw port 2304 | | | inet:port-number 2305 | | +--rw destination-port 2306 | | | +--rw (port-range-or-operator)? 2307 | | | +--:(range) 2308 | | | | +--rw lower-port 2309 | | | | | inet:port-number 2310 | | | | +--rw upper-port 2311 | | | | inet:port-number 2312 | | | +--:(operator) 2313 | | | +--rw operator? operator 2314 | | | +--rw port 2315 | | | inet:port-number 2316 | | +--rw ipsec-spi? ipsec-spi 2317 | +--:(mpls-detnet-flow) 2318 | +--rw (label-space)? 2319 | +--:(context-label-space) 2320 | | +--rw mpls-label-stack 2321 | | +--rw entry* [id] 2322 | | +--rw id uint8 2323 | | +--rw label? 2324 | | | rt-types:mpls-label 2325 | | +--rw ttl? uint8 2326 | | +--rw traffic-class? uint8 2327 | +--:(platform-label-space) 2328 | +--rw label? 2329 | rt-types:mpls-label 2330 +--rw outgoing 2331 +--rw (outgoing) 2332 +--:(interface) 2333 | +--rw interface 2334 | +--rw (next-hop-options) 2335 | +--:(simple-next-hop) 2336 | | +--rw outgoing-interface? 2337 | | | if:interface-ref 2338 | | +--rw (flow-type)? 2339 | | +--:(ip) 2340 | | | +--rw (operation-type)? 2341 | | | +--:(ip-forwarding) 2342 | | | | +--rw next-hop-address? 2343 | | | | inet:ip-address-no-zone 2344 | | | +--:(mpls-over-ip- 2345 | | | encapsulation) 2346 | | | +--rw src-ip-address? 2347 | | | | inet:ip-address-no-zone 2348 | | | +--rw dest-ip-address? 2349 | | | | inet:ip-address-no-zone 2350 | | | +--rw protocol-next-header? 2351 | | | | uint8 2352 | | | +--rw dscp? 2353 | | | | inet:dscp 2354 | | | +--rw flow-label? 2355 | | | | inet:ipv6-flow-label 2356 | | | +--rw source-port? 2357 | | | | inet:port-number 2358 | | | +--rw destination-port? 2359 | | | inet:port-number 2360 | | +--:(mpls) 2361 | | +--rw mpls-label-stack 2362 | | +--rw entry* [id] 2363 | | +--rw id uint8 2364 | | +--rw label? 2365 | | | rt-types:mpls-label 2366 | | +--rw ttl? uint8 2367 | | +--rw traffic-class? uint8 2368 | +--:(next-hop-list) 2369 | +--rw next-hop* [hop-index] 2370 | +--rw hop-index 2371 | | uint8 2372 | +--rw outgoing-interface? 2373 | | if:interface-ref 2374 | +--rw (flow-type)? 2375 | +--:(ip) 2376 | | +--rw (operation-type)? 2377 | | +--:(ip-forwarding) 2378 | | | +--rw next-hop-address? 2379 | | | inet:ip-address-no- 2380 | | | zone 2381 | | +--:(mpls-over-ip- 2382 | | encapsulation) 2383 | | +--rw src-ip-address? 2384 | | | inet:ip-address-no- 2385 | | | zone 2386 | | +--rw dest-ip-address? 2387 | | | inet:ip-address-no- 2388 | | | zone 2389 | | +--rw protocol-next- 2390 | | | header? 2391 | | | uint8 2392 | | +--rw dscp? 2393 | | | inet:dscp 2394 | | +--rw flow-label? 2395 | | | inet:ipv6-flow- 2396 | | | label 2397 | | +--rw source-port? 2398 | | | inet:port-number 2399 | | +--rw destination-port? 2400 | | inet:port-number 2401 | +--:(mpls) 2402 | +--rw mpls-label-stack 2403 | +--rw entry* [id] 2404 | +--rw id 2405 | | uint8 2406 | +--rw label? 2407 | | rt-types:mpls- 2408 | | label 2409 | +--rw ttl? 2410 | | uint8 2411 | +--rw traffic-class? 2412 | uint8 2413 +--:(service-aggregation) 2414 | +--rw service-aggregation 2415 | +--rw aggregation-sub-layer? 2416 | | service-sub-layer-ref 2417 | +--rw optional-forwarding-label 2418 | +--rw mpls-label-stack 2419 | +--rw entry* [id] 2420 | +--rw id uint8 2421 | +--rw label? 2422 | | rt-types:mpls-label 2423 | +--rw ttl? uint8 2424 | +--rw traffic-class? uint8 2425 +--:(forwarding-sub-layer) 2426 | +--rw forwarding-sub-layer 2427 | +--rw aggregation-sub-layer? 2428 | | forwarding-sub-layer-ref 2429 | +--rw forwarding-label 2430 | +--rw mpls-label-stack 2431 | +--rw entry* [id] 2432 | +--rw id uint8 2433 | +--rw label? 2434 | | rt-types:mpls-label 2435 | +--rw ttl? uint8 2436 | +--rw traffic-class? uint8 2437 +--:(service-sub-layer) 2438 | +--rw service-sub-layer 2439 | +--rw sub-layer* service-sub-layer-ref 2440 +--:(forwarding-disaggregation) 2441 +--rw forwarding-disaggregation 2442 +--rw sub-layer* forwarding-sub-layer-ref 2444 Appendix B. Examples 2446 The following examples are provided. These examples are tested with 2447 Yanglint and use operational output to exercise both config true and 2448 config false objects. Note that IPv4 and IPv6 addresses are 2449 supported but for clarity in the examples and diagrams IPv4 has been 2450 used in most examples. The IP types are imported from [RFC6991] and 2451 these support both IPv4 and IPv6. 2453 The following are examples of aggregation and disaggregation at 2454 various points in Detnet. Figures are provided in the PDF version of 2455 this document. 2457 B.1. Example A-1 JSON Configuration/Operational 2459 This illustrates simple aggregation. Ingress node 1 aggregates App 2460 flows 0 and 1 into a service sub-layer of DetNet flow 1. Two ways of 2461 illustrating this follow, then the JSON operational data model 2462 corresponding to the diagrams follows. This example uses IPv6 2463 address format. 2465 Please consult the PDF or HTML versions for the Case A-1 Diagram. 2467 Figure 2: Case A-1 Example JSON Operational/Configuration 2469 Please consult the PDF or HTML versions for the Case A-1 Diagram. 2471 Figure 3: Case A-1 Example JSON Operational/Configuration 2473 { 2474 "ietf-detnet:detnet": { 2475 "traffic-profile": [ 2476 { 2477 "name": "pf-1", 2478 "traffic-requirements": { 2479 "min-bandwidth": "100000000", 2480 "max-latency": 100000000, 2481 "max-latency-variation": 200000000, 2482 "max-loss": 2, 2483 "max-consecutive-loss-tolerance": 5, 2484 "max-misordering": 0 2485 }, 2486 "traffic-spec": { 2487 "interval": 5, 2488 "max-pkts-per-interval": 10, 2489 "max-payload-size": 1500, 2490 "min-payload-size": 100, 2491 "min-pkts-per-interval": 1 2492 }, 2493 "member-app": [ 2494 "app-0", 2495 "app-1" 2496 ] 2497 }, 2498 { 2499 "name": "pf-2", 2500 "traffic-requirements": { 2501 "min-bandwidth": "200000000", 2502 "max-latency": 100000000, 2503 "max-latency-variation": 200000000, 2504 "max-loss": 2, 2505 "max-consecutive-loss-tolerance": 5, 2506 "max-misordering": 0 2507 }, 2508 "traffic-spec": { 2509 "interval": 5, 2510 "max-pkts-per-interval": 10, 2511 "max-payload-size": 1500, 2512 "min-payload-size": 100, 2513 "min-pkts-per-interval": 1 2514 }, 2515 "member-service": [ 2516 "ssl-1" 2517 ] 2518 }, 2519 { 2520 "name": "pf-3", 2521 "traffic-spec": { 2522 "interval": 5, 2523 "max-pkts-per-interval": 10, 2524 "max-payload-size": 1500 2525 }, 2526 "member-fwd-sublayer": [ 2527 "fsl-1" 2528 ] 2529 } 2530 ], 2531 "app-flows": { 2532 "app-flow": [ 2533 { 2534 "name": "app-0", 2535 "bidir-congruent": false, 2536 "outgoing-service": "ssl-1", 2537 "traffic-profile": "pf-1", 2538 "ingress": { 2539 "app-flow-status": "ietf-detnet:ready", 2540 "interface": "eth0", 2541 "ip-app-flow": { 2542 "src-ip-prefix": "2001:db8::1/128", 2543 "dest-ip-prefix": "2001:db8::8/128", 2544 "dscp": 6 2545 } 2546 } 2547 }, 2548 { 2549 "name": "app-1", 2550 "bidir-congruent": false, 2551 "outgoing-service": "ssl-1", 2552 "traffic-profile": "pf-1", 2553 "ingress": { 2554 "app-flow-status": "ietf-detnet:ready", 2555 "interface": "eth0", 2556 "ip-app-flow": { 2557 "src-ip-prefix": "2001:db8::1/128", 2558 "dest-ip-prefix": "2001:db8::8/128", 2559 "dscp": 7 2560 } 2561 } 2562 } 2563 ] 2564 }, 2565 "service": { 2566 "sub-layer": [ 2567 { 2568 "name": "ssl-1", 2569 "service-rank": 10, 2570 "traffic-profile": "pf-2", 2571 "service-protection": { 2572 "protection": "none", 2573 "sequence-number-length": "long-sn" 2574 }, 2575 "operation": "initiation", 2576 "incoming": { 2577 "app-flow": { 2578 "flow": [ 2579 "app-0", 2580 "app-1" 2581 ] 2582 } 2584 }, 2585 "outgoing": { 2586 "forwarding-sub-layer": { 2587 "service-outgoing": [ 2588 { 2589 "index": 0, 2590 "mpls-label-stack": { 2591 "entry": [ 2592 { 2593 "id": 0, 2594 "label": "100" 2595 } 2596 ] 2597 }, 2598 "sub-layer": [ 2599 "fsl-1" 2600 ] 2601 } 2602 ] 2603 } 2604 } 2605 } 2606 ] 2607 }, 2608 "forwarding": { 2609 "sub-layer": [ 2610 { 2611 "name": "fsl-1", 2612 "traffic-profile": "pf-3", 2613 "operation": "impose-and-forward", 2614 "incoming": { 2615 "service-sub-layer": { 2616 "sub-layer": [ 2617 "ssl-1" 2618 ] 2619 } 2620 }, 2621 "outgoing": { 2622 "interface": { 2623 "outgoing-interface": "eth2", 2624 "mpls-label-stack": { 2625 "entry": [ 2626 { 2627 "id": 0, 2628 "label": "10000" 2629 } 2630 ] 2631 } 2633 } 2634 } 2635 } 2636 ] 2637 } 2638 }, 2639 "ietf-interfaces:interfaces": { 2640 "interface": [ 2641 { 2642 "name": "eth0", 2643 "type": "iana-if-type:ethernetCsmacd", 2644 "oper-status": "up", 2645 "statistics": { 2646 "discontinuity-time": "2020-12-18T18:59:00-05:00" 2647 } 2648 }, 2649 { 2650 "name": "eth1", 2651 "type": "iana-if-type:ethernetCsmacd", 2652 "oper-status": "up", 2653 "statistics": { 2654 "discontinuity-time": "2020-12-18T18:59:00-05:00" 2655 } 2656 }, 2657 { 2658 "name": "eth2", 2659 "type": "iana-if-type:ethernetCsmacd", 2660 "oper-status": "up", 2661 "statistics": { 2662 "discontinuity-time": "2020-12-18T18:59:00-05:00" 2663 } 2664 }, 2665 { 2666 "name": "eth3", 2667 "type": "iana-if-type:ethernetCsmacd", 2668 "oper-status": "up", 2669 "statistics": { 2670 "discontinuity-time": "2020-12-18T18:59:00-05:00" 2671 } 2672 }, 2673 { 2674 "name": "eth4", 2675 "type": "iana-if-type:ethernetCsmacd", 2676 "oper-status": "up", 2677 "statistics": { 2678 "discontinuity-time": "2020-12-18T18:59:00-05:00" 2679 } 2680 } 2682 ] 2683 } 2684 } 2686 Figure 4: Example A-1 DetNet JSON configuration 2688 B.2. Example B-1 XML Config: Aggregation using a Forwarding Sub-layer 2690 This illustrates aggrgation in the service sub-layers of DetNet. 2691 Flows 1 and 2 are aggregated into a forwarding sub-layer. A diagram 2692 illustrating this case is shown and then the corresponding XML 2693 operational data follows. 2695 Please consult the PDF or HTML versions for the Case B-1 Diagram. 2697 Figure 5: Case B-1 Example XML Config: Aggregation using a 2698 Forwarding Sub-layer 2700 2703 2704 eth0 2705 ia:ethernetCsmacd 2706 up 2707 2708 2020-12-18T23:59:00Z 2710 2711 2712 2713 eth1 2714 ia:ethernetCsmacd 2715 up 2716 2717 2020-12-18T23:59:00Z 2719 2720 2721 2722 eth2 2723 ia:ethernetCsmacd 2724 up 2725 2726 2020-12-18T23:59:00Z 2728 2729 2730 2731 eth3 2732 ia:ethernetCsmacd 2733 up 2734 2735 2020-12-18T23:59:00Z 2737 2738 2739 2740 eth4 2741 ia:ethernetCsmacd 2742 up 2743 2744 2020-12-18T23:59:00Z 2746 2747 2748 2749 2751 2752 2753 app-1 2754 false 2755 ssl-1 2756 1 2757 2758 ready 2759 eth0 2760 2761 192.0.2.1/32 2762 192.0.2.8/32 2763 6 2764 2765 2766 2767 2768 app-2 2769 false 2770 ssl-2 2771 1 2772 2773 ready 2774 eth1 2775 2776 192.0.2.2/32 2777 192.0.2.9/32 2778 7 2779 2780 2781 2782 2783 2784 1 2785 2786 100000000 2787 100000000 2788 200000000 2789 2 2790 5 2792 0 2793 2794 app-1 2795 app-2 2796 2797 2798 2 2799 2800 100000000 2801 100000000 2802 200000000 2803 2 2804 5 2806 0 2807 2808 ssl-1 2809 ssl-2 2810 2811 2812 3 2813 2814 5 2815 10 2816 1500 2817 2818 afl-1 2819 2820 2821 2822 ssl-1 2823 10 2824 2 2825 initiation 2826 2827 none 2828 long-sn 2829 2830 2831 2832 app-1 2833 2834 2835 2836 2837 2838 0 2839 2840 2841 0 2842 2843 2844 2845 afl-1 2846 2847 2848 2849 2850 2851 ssl-2 2852 10 2853 2 2854 initiation 2855 2856 none 2857 long-sn 2858 2859 2860 2861 app-2 2862 2863 2864 2865 2866 2867 0 2868 2869 2870 0 2871 2872 2873 2874 afl-1 2875 2876 2877 2878 2879 2880 2881 2882 afl-1 2883 3 2884 impose-and-forward 2885 2886 2887 ssl-1 2888 ssl-2 2889 2890 2891 2892 2893 eth2 2894 2895 2896 0 2897 2898 2899 2900 2901 2902 2903 2904 2906 Figure 6: Example B-1 DetNet XML configuration 2908 B.3. Example B-2 JSON Service Aggregation Configuration 2910 This illustrates the service sub-layers of DetNet. Flows 1 and 2 are 2911 aggregated into a service sub-layer of aggregated DetNet flow 1. A 2912 diagram illustrating this case is shown and then the corresponding 2913 JSON operational data follows. 2915 Please consult the PDF or HTML versions for the Case B-2 Diagram. 2917 Figure 7: Case B-2 Example JSON Service Aggregation 2919 { 2920 "ietf-detnet:detnet": { 2921 "traffic-profile": [ 2922 { 2923 "name": "1", 2924 "traffic-requirements": { 2925 "min-bandwidth": "100000000", 2926 "max-latency": 100000000, 2927 "max-latency-variation": 200000000, 2928 "max-loss": 2, 2929 "max-consecutive-loss-tolerance": 5, 2930 "max-misordering": 0 2931 }, 2932 "member-app": [ 2933 "app-1", 2934 "app-2" 2935 ] 2936 }, 2937 { 2938 "name": "2", 2939 "traffic-requirements": { 2940 "min-bandwidth": "100000000", 2941 "max-latency": 100000000, 2942 "max-latency-variation": 200000000, 2943 "max-loss": 2, 2944 "max-consecutive-loss-tolerance": 5, 2945 "max-misordering": 0 2946 }, 2947 "member-service": [ 2948 "ssl-1", 2949 "ssl-2" 2950 ] 2951 }, 2952 { 2953 "name": "3", 2954 "traffic-spec": { 2955 "interval": 5, 2956 "max-pkts-per-interval": 10, 2957 "max-payload-size": 1500 2958 }, 2959 "member-fwd-sublayer": [ 2960 "afl-1" 2961 ] 2962 } 2963 ], 2964 "app-flows": { 2965 "app-flow": [ 2966 { 2967 "name": "app-1", 2968 "bidir-congruent": false, 2969 "outgoing-service": "ssl-1", 2970 "traffic-profile": "1", 2971 "ingress": { 2972 "app-flow-status": "ietf-detnet:ready", 2973 "interface": "eth0", 2974 "ip-app-flow": { 2975 "src-ip-prefix": "192.0.2.1/32", 2976 "dest-ip-prefix": "192.0.2.8/32", 2977 "dscp": 6 2978 } 2979 } 2980 }, 2981 { 2982 "name": "app-2", 2983 "bidir-congruent": false, 2984 "outgoing-service": "ssl-2", 2985 "traffic-profile": "1", 2986 "ingress": { 2987 "app-flow-status": "ietf-detnet:ready", 2988 "interface": "eth0", 2989 "ip-app-flow": { 2990 "src-ip-prefix": "192.0.2.2/32", 2991 "dest-ip-prefix": "192.0.2.9/32", 2992 "dscp": 7 2993 } 2994 } 2995 } 2996 ] 2997 }, 2998 "service": { 2999 "sub-layer": [ 3000 { 3001 "name": "ssl-1", 3002 "service-rank": 10, 3003 "traffic-profile": "2", 3004 "service-protection": { 3005 "protection": "none", 3006 "sequence-number-length": "long-sn" 3007 }, 3008 "operation": "initiation", 3009 "incoming": { 3010 "app-flow": { 3011 "flow": [ 3012 "app-1" 3013 ] 3014 } 3016 }, 3017 "outgoing": { 3018 "service-sub-layer": { 3019 "aggregation-sub-layer": "asl-1", 3020 "service-label": { 3021 "mpls-label-stack": { 3022 "entry": [ 3023 { 3024 "id": 0, 3025 "label": "102" 3026 } 3027 ] 3028 } 3029 } 3030 } 3031 } 3032 }, 3033 { 3034 "name": "ssl-2", 3035 "service-rank": 10, 3036 "traffic-profile": "2", 3037 "service-protection": { 3038 "protection": "none", 3039 "sequence-number-length": "long-sn" 3040 }, 3041 "operation": "initiation", 3042 "incoming": { 3043 "app-flow": { 3044 "flow": [ 3045 "app-2" 3046 ] 3047 } 3048 }, 3049 "outgoing": { 3050 "service-sub-layer": { 3051 "aggregation-sub-layer": "asl-1", 3052 "service-label": { 3053 "mpls-label-stack": { 3054 "entry": [ 3055 { 3056 "id": 0, 3057 "label": "105" 3058 } 3059 ] 3060 } 3061 } 3062 } 3063 } 3065 }, 3066 { 3067 "name": "asl-1", 3068 "service-rank": 10, 3069 "traffic-profile": "2", 3070 "service-protection": { 3071 "protection": "none", 3072 "sequence-number-length": "long-sn" 3073 }, 3074 "operation": "initiation", 3075 "incoming": { 3076 "service-aggregation": { 3077 "sub-layer": [ 3078 "ssl-1", 3079 "ssl-2" 3080 ] 3081 } 3082 }, 3083 "outgoing": { 3084 "forwarding-sub-layer": { 3085 "service-outgoing": [ 3086 { 3087 "index": 0, 3088 "mpls-label-stack": { 3089 "entry": [ 3090 { 3091 "id": 0, 3092 "label": "1000" 3093 } 3094 ] 3095 }, 3096 "sub-layer": [ 3097 "afl-1" 3098 ] 3099 } 3100 ] 3101 } 3102 } 3103 } 3104 ] 3105 }, 3106 "forwarding": { 3107 "sub-layer": [ 3108 { 3109 "name": "afl-1", 3110 "traffic-profile": "3", 3111 "operation": "impose-and-forward", 3112 "incoming": { 3113 "service-sub-layer": { 3114 "sub-layer": [ 3115 "asl-1" 3116 ] 3117 } 3118 }, 3119 "outgoing": { 3120 "interface": { 3121 "outgoing-interface": "eth2", 3122 "mpls-label-stack": { 3123 "entry": [ 3124 { 3125 "id": 0, 3126 "label": "20000" 3127 } 3128 ] 3129 } 3130 } 3131 } 3132 } 3133 ] 3134 } 3135 }, 3136 "ietf-interfaces:interfaces": { 3137 "interface": [ 3138 { 3139 "name": "eth0", 3140 "type": "iana-if-type:ethernetCsmacd", 3141 "oper-status": "up", 3142 "statistics": { 3143 "discontinuity-time": "2020-10-02T19:59:00-04:00" 3144 } 3145 }, 3146 { 3147 "name": "eth1", 3148 "type": "iana-if-type:ethernetCsmacd", 3149 "oper-status": "up", 3150 "statistics": { 3151 "discontinuity-time": "2020-10-02T19:59:00-04:00" 3152 } 3153 }, 3154 { 3155 "name": "eth2", 3156 "type": "iana-if-type:ethernetCsmacd", 3157 "oper-status": "up", 3158 "statistics": { 3159 "discontinuity-time": "2020-10-02T19:59:00-04:00" 3160 } 3162 }, 3163 { 3164 "name": "eth3", 3165 "type": "iana-if-type:ethernetCsmacd", 3166 "oper-status": "up", 3167 "statistics": { 3168 "discontinuity-time": "2020-10-02T19:59:00-04:00" 3169 } 3170 }, 3171 { 3172 "name": "eth4", 3173 "type": "iana-if-type:ethernetCsmacd", 3174 "oper-status": "up", 3175 "statistics": { 3176 "discontinuity-time": "2020-10-02T19:59:00-04:00" 3177 } 3178 } 3179 ] 3180 } 3181 } 3183 Figure 8: Example B-2 DetNet JSON Service Aggregation 3185 B.4. Example C-1 JSON Relay Aggregation/Disaggregation Configuration 3187 This illustrates the Relay node 1 aggregating the forwarding sub- 3188 layers of DetNet flows 1 and 2 into a forwarding sub-layer. A 3189 diagram illustrating both aggregation and disaggregation is shown and 3190 then the corresponding JSON operational data follows. 3192 Please consult the PDF or HTML versions for the Case C-1 Diagram. 3194 Figure 9: Case C-1 Example JSON Service Aggregation/Disaggregation 3196 { 3197 "ietf-detnet:detnet": { 3198 "traffic-profile": [ 3199 { 3200 "name": "pf-1", 3201 "traffic-requirements": { 3202 "min-bandwidth": "100000000", 3203 "max-latency": 100000000, 3204 "max-latency-variation": 100000000, 3205 "max-loss": 2, 3206 "max-consecutive-loss-tolerance": 5, 3207 "max-misordering": 0 3208 }, 3209 "member-service": [ 3210 "ssl-1", 3211 "ssl-2" 3212 ] 3213 }, 3214 { 3215 "name": "pf-2", 3216 "traffic-spec": { 3217 "interval": 125, 3218 "max-pkts-per-interval": 2, 3219 "max-payload-size": 1518 3220 }, 3221 "member-fwd-sublayer": [ 3222 "afl-1", 3223 "afl-2" 3224 ] 3225 }, 3226 { 3227 "name": "pf-3", 3228 "traffic-spec": { 3229 "interval": 125, 3230 "max-pkts-per-interval": 1, 3231 "max-payload-size": 1518 3232 }, 3233 "member-fwd-sublayer": [ 3234 "fsl-1", 3235 "fsl-2", 3236 "fsl-3", 3237 "fsl-4", 3238 "fsl-5", 3239 "fsl-6" 3240 ] 3241 } 3242 ], 3243 "service": { 3244 "sub-layer": [ 3245 { 3246 "name": "ssl-1", 3247 "service-rank": 10, 3248 "traffic-profile": "pf-1", 3249 "service-protection": { 3250 "protection": "replication", 3251 "sequence-number-length": "long-sn" 3252 }, 3253 "operation": "relay", 3254 "incoming": { 3255 "service-id": { 3256 "mpls-label-stack": { 3257 "entry": [ 3258 { 3259 "id": 0, 3260 "label": "100" 3261 } 3262 ] 3263 } 3264 } 3265 }, 3266 "outgoing": { 3267 "forwarding-sub-layer": { 3268 "service-outgoing": [ 3269 { 3270 "index": 0, 3271 "mpls-label-stack": { 3272 "entry": [ 3273 { 3274 "id": 0, 3275 "label": "101" 3276 } 3277 ] 3278 }, 3279 "sub-layer": [ 3280 "fsl-2", 3281 "fsl-3" 3282 ] 3283 } 3284 ] 3285 } 3286 } 3287 }, 3288 { 3289 "name": "ssl-2", 3290 "service-rank": 10, 3291 "traffic-profile": "pf-1", 3292 "service-protection": { 3293 "protection": "replication", 3294 "sequence-number-length": "long-sn" 3295 }, 3296 "operation": "relay", 3297 "incoming": { 3298 "service-id": { 3299 "mpls-label-stack": { 3300 "entry": [ 3301 { 3302 "id": 0, 3303 "label": "103" 3304 } 3305 ] 3307 } 3308 } 3309 }, 3310 "outgoing": { 3311 "forwarding-sub-layer": { 3312 "service-outgoing": [ 3313 { 3314 "index": 0, 3315 "mpls-label-stack": { 3316 "entry": [ 3317 { 3318 "id": 0, 3319 "label": "104" 3320 } 3321 ] 3322 }, 3323 "sub-layer": [ 3324 "fsl-5", 3325 "fsl-6" 3326 ] 3327 } 3328 ] 3329 } 3330 } 3331 } 3332 ] 3333 }, 3334 "forwarding": { 3335 "sub-layer": [ 3336 { 3337 "name": "fsl-1", 3338 "traffic-profile": "pf-3", 3339 "operation": "pop-and-lookup", 3340 "incoming": { 3341 "forwarding-id": { 3342 "interface": "eth0", 3343 "mpls-label-stack": { 3344 "entry": [ 3345 { 3346 "id": 0, 3347 "label": "10000" 3348 } 3349 ] 3350 } 3351 } 3352 }, 3353 "outgoing": { 3354 "service-sub-layer": { 3355 "sub-layer": [ 3356 "ssl-1" 3357 ] 3358 } 3359 } 3360 }, 3361 { 3362 "name": "fsl-2", 3363 "traffic-profile": "pf-3", 3364 "operation": "impose-and-forward", 3365 "incoming": { 3366 "service-sub-layer": { 3367 "sub-layer": [ 3368 "ssl-1" 3369 ] 3370 } 3371 }, 3372 "outgoing": { 3373 "forwarding-sub-layer": { 3374 "aggregation-sub-layer": "afl-1", 3375 "forwarding-label": { 3376 "mpls-label-stack": { 3377 "entry": [ 3378 { 3379 "id": 0, 3380 "label": "10003" 3381 } 3382 ] 3383 } 3384 } 3385 } 3386 } 3387 }, 3388 { 3389 "name": "fsl-3", 3390 "traffic-profile": "pf-3", 3391 "operation": "impose-and-forward", 3392 "incoming": { 3393 "service-sub-layer": { 3394 "sub-layer": [ 3395 "ssl-1" 3396 ] 3397 } 3398 }, 3399 "outgoing": { 3400 "forwarding-sub-layer": { 3401 "aggregation-sub-layer": "afl-2", 3402 "forwarding-label": { 3403 "mpls-label-stack": { 3404 "entry": [ 3405 { 3406 "id": 0, 3407 "label": "10004" 3408 } 3409 ] 3410 } 3411 } 3412 } 3413 } 3414 }, 3415 { 3416 "name": "fsl-4", 3417 "traffic-profile": "pf-3", 3418 "operation": "pop-and-lookup", 3419 "incoming": { 3420 "forwarding-id": { 3421 "interface": "eth1", 3422 "mpls-label-stack": { 3423 "entry": [ 3424 { 3425 "id": 0, 3426 "label": "10006" 3427 } 3428 ] 3429 } 3430 } 3431 }, 3432 "outgoing": { 3433 "service-sub-layer": { 3434 "sub-layer": [ 3435 "ssl-2" 3436 ] 3437 } 3438 } 3439 }, 3440 { 3441 "name": "fsl-5", 3442 "traffic-profile": "pf-3", 3443 "operation": "impose-and-forward", 3444 "incoming": { 3445 "service-sub-layer": { 3446 "sub-layer": [ 3447 "ssl-2" 3448 ] 3449 } 3450 }, 3451 "outgoing": { 3452 "forwarding-sub-layer": { 3453 "aggregation-sub-layer": "afl-1", 3454 "forwarding-label": { 3455 "mpls-label-stack": { 3456 "entry": [ 3457 { 3458 "id": 0, 3459 "label": "10009" 3460 } 3461 ] 3462 } 3463 } 3464 } 3465 } 3466 }, 3467 { 3468 "name": "fsl-6", 3469 "traffic-profile": "pf-3", 3470 "operation": "impose-and-forward", 3471 "incoming": { 3472 "service-sub-layer": { 3473 "sub-layer": [ 3474 "ssl-2" 3475 ] 3476 } 3477 }, 3478 "outgoing": { 3479 "forwarding-sub-layer": { 3480 "aggregation-sub-layer": "afl-2", 3481 "forwarding-label": { 3482 "mpls-label-stack": { 3483 "entry": [ 3484 { 3485 "id": 0, 3486 "label": "10010" 3487 } 3488 ] 3489 } 3490 } 3491 } 3492 } 3493 }, 3494 { 3495 "name": "afl-1", 3496 "traffic-profile": "pf-2", 3497 "operation": "impose-and-forward", 3498 "incoming": { 3499 "forwarding-aggregation": { 3500 "sub-layer": [ 3501 "fsl-2", 3502 "fsl-5" 3503 ] 3504 } 3505 }, 3506 "outgoing": { 3507 "interface": { 3508 "outgoing-interface": "eth2", 3509 "mpls-label-stack": { 3510 "entry": [ 3511 { 3512 "id": 0, 3513 "label": "20000" 3514 } 3515 ] 3516 } 3517 } 3518 } 3519 }, 3520 { 3521 "name": "afl-2", 3522 "traffic-profile": "pf-2", 3523 "operation": "impose-and-forward", 3524 "incoming": { 3525 "forwarding-aggregation": { 3526 "sub-layer": [ 3527 "fsl-3", 3528 "fsl-6" 3529 ] 3530 } 3531 }, 3532 "outgoing": { 3533 "interface": { 3534 "outgoing-interface": "eth3", 3535 "mpls-label-stack": { 3536 "entry": [ 3537 { 3538 "id": 0, 3539 "label": "20001" 3540 } 3541 ] 3542 } 3543 } 3544 } 3545 } 3546 ] 3548 } 3549 }, 3550 "ietf-interfaces:interfaces": { 3551 "interface": [ 3552 { 3553 "name": "eth0", 3554 "type": "iana-if-type:ethernetCsmacd", 3555 "oper-status": "up", 3556 "statistics": { 3557 "discontinuity-time": "2020-12-18T18:59:00-05:00" 3558 } 3559 }, 3560 { 3561 "name": "eth1", 3562 "type": "iana-if-type:ethernetCsmacd", 3563 "oper-status": "up", 3564 "statistics": { 3565 "discontinuity-time": "2020-12-18T18:59:00-05:00" 3566 } 3567 }, 3568 { 3569 "name": "eth2", 3570 "type": "iana-if-type:ethernetCsmacd", 3571 "oper-status": "up", 3572 "statistics": { 3573 "discontinuity-time": "2020-12-18T18:59:00-05:00" 3574 } 3575 }, 3576 { 3577 "name": "eth3", 3578 "type": "iana-if-type:ethernetCsmacd", 3579 "oper-status": "up", 3580 "statistics": { 3581 "discontinuity-time": "2020-12-18T18:59:00-05:00" 3582 } 3583 }, 3584 { 3585 "name": "eth4", 3586 "type": "iana-if-type:ethernetCsmacd", 3587 "oper-status": "up", 3588 "statistics": { 3589 "discontinuity-time": "2020-12-18T18:59:00-05:00" 3590 } 3591 } 3592 ] 3593 } 3594 } 3595 Figure 10: Example C-1 DetNet JSON Relay Service Aggregation 3597 { 3598 "ietf-detnet:detnet": { 3599 "traffic-profile": [ 3600 { 3601 "name": "pf-1", 3602 "traffic-requirements": { 3603 "min-bandwidth": "100000000", 3604 "max-latency": 100000000, 3605 "max-latency-variation": 100000000, 3606 "max-loss": 2, 3607 "max-consecutive-loss-tolerance": 5, 3608 "max-misordering": 0 3609 }, 3610 "member-service": [ 3611 "ssl-1", 3612 "ssl-2" 3613 ] 3614 }, 3615 { 3616 "name": "pf-2", 3617 "traffic-spec": { 3618 "interval": 125, 3619 "max-pkts-per-interval": 2, 3620 "max-payload-size": 1518 3621 }, 3622 "member-fwd-sublayer": [ 3623 "afl-1", 3624 "afl-2" 3625 ] 3626 }, 3627 { 3628 "name": "pf-3", 3629 "traffic-spec": { 3630 "interval": 125, 3631 "max-pkts-per-interval": 1, 3632 "max-payload-size": 1518 3633 }, 3634 "member-fwd-sublayer": [ 3635 "fsl-1", 3636 "fsl-2", 3637 "fsl-3", 3638 "fsl-4", 3639 "fsl-5", 3640 "fsl-6" 3641 ] 3642 } 3644 ], 3645 "service": { 3646 "sub-layer": [ 3647 { 3648 "name": "ssl-1", 3649 "service-rank": 10, 3650 "traffic-profile": "pf-1", 3651 "service-protection": { 3652 "protection": "elimination", 3653 "sequence-number-length": "long-sn" 3654 }, 3655 "operation": "relay", 3656 "incoming": { 3657 "service-id": { 3658 "mpls-label-stack": { 3659 "entry": [ 3660 { 3661 "id": 0, 3662 "label": "101" 3663 } 3664 ] 3665 } 3666 } 3667 }, 3668 "outgoing": { 3669 "forwarding-sub-layer": { 3670 "service-outgoing": [ 3671 { 3672 "index": 0, 3673 "mpls-label-stack": { 3674 "entry": [ 3675 { 3676 "id": 0, 3677 "label": "102" 3678 } 3679 ] 3680 }, 3681 "sub-layer": [ 3682 "fsl-3" 3683 ] 3684 } 3685 ] 3686 } 3687 } 3688 }, 3689 { 3690 "name": "ssl-2", 3691 "service-rank": 10, 3692 "traffic-profile": "pf-1", 3693 "service-protection": { 3694 "protection": "elimination", 3695 "sequence-number-length": "long-sn" 3696 }, 3697 "operation": "relay", 3698 "incoming": { 3699 "service-id": { 3700 "mpls-label-stack": { 3701 "entry": [ 3702 { 3703 "id": 0, 3704 "label": "104" 3705 } 3706 ] 3707 } 3708 } 3709 }, 3710 "outgoing": { 3711 "forwarding-sub-layer": { 3712 "service-outgoing": [ 3713 { 3714 "index": 0, 3715 "mpls-label-stack": { 3716 "entry": [ 3717 { 3718 "id": 0, 3719 "label": "105" 3720 } 3721 ] 3722 }, 3723 "sub-layer": [ 3724 "fsl-6" 3725 ] 3726 } 3727 ] 3728 } 3729 } 3730 } 3731 ] 3732 }, 3733 "forwarding": { 3734 "sub-layer": [ 3735 { 3736 "name": "afl-1", 3737 "traffic-profile": "pf-2", 3738 "operation": "pop-and-lookup", 3739 "incoming": { 3740 "forwarding-id": { 3741 "interface": "eth0", 3742 "mpls-label-stack": { 3743 "entry": [ 3744 { 3745 "id": 0, 3746 "label": "20002" 3747 } 3748 ] 3749 } 3750 } 3751 }, 3752 "outgoing": { 3753 "forwarding-disaggregation": { 3754 "sub-layer": [ 3755 "fsl-1", 3756 "fsl-4" 3757 ] 3758 } 3759 } 3760 }, 3761 { 3762 "name": "afl-2", 3763 "traffic-profile": "pf-2", 3764 "operation": "pop-and-lookup", 3765 "incoming": { 3766 "forwarding-id": { 3767 "interface": "eth1", 3768 "mpls-label-stack": { 3769 "entry": [ 3770 { 3771 "id": 0, 3772 "label": "20003" 3773 } 3774 ] 3775 } 3776 } 3777 }, 3778 "outgoing": { 3779 "forwarding-disaggregation": { 3780 "sub-layer": [ 3781 "fsl-2", 3782 "fsl-5" 3783 ] 3784 } 3785 } 3786 }, 3787 { 3788 "name": "fsl-1", 3789 "traffic-profile": "pf-3", 3790 "operation": "pop-and-lookup", 3791 "incoming": { 3792 "forwarding-id": { 3793 "interface": "eth0", 3794 "mpls-label-stack": { 3795 "entry": [ 3796 { 3797 "id": 0, 3798 "label": "10003" 3799 } 3800 ] 3801 } 3802 } 3803 }, 3804 "outgoing": { 3805 "service-sub-layer": { 3806 "sub-layer": [ 3807 "ssl-1" 3808 ] 3809 } 3810 } 3811 }, 3812 { 3813 "name": "fsl-2", 3814 "traffic-profile": "pf-3", 3815 "operation": "pop-and-lookup", 3816 "incoming": { 3817 "forwarding-id": { 3818 "interface": "eth1", 3819 "mpls-label-stack": { 3820 "entry": [ 3821 { 3822 "id": 0, 3823 "label": "10004" 3824 } 3825 ] 3826 } 3827 } 3828 }, 3829 "outgoing": { 3830 "service-sub-layer": { 3831 "sub-layer": [ 3832 "ssl-1" 3833 ] 3834 } 3835 } 3837 }, 3838 { 3839 "name": "fsl-3", 3840 "traffic-profile": "pf-3", 3841 "operation": "impose-and-forward", 3842 "incoming": { 3843 "service-sub-layer": { 3844 "sub-layer": [ 3845 "ssl-1" 3846 ] 3847 } 3848 }, 3849 "outgoing": { 3850 "interface": { 3851 "outgoing-interface": "eth2", 3852 "mpls-label-stack": { 3853 "entry": [ 3854 { 3855 "id": 0, 3856 "label": "10005" 3857 } 3858 ] 3859 } 3860 } 3861 } 3862 }, 3863 { 3864 "name": "fsl-4", 3865 "traffic-profile": "pf-3", 3866 "operation": "pop-and-lookup", 3867 "incoming": { 3868 "forwarding-id": { 3869 "interface": "eth0", 3870 "mpls-label-stack": { 3871 "entry": [ 3872 { 3873 "id": 0, 3874 "label": "10009" 3875 } 3876 ] 3877 } 3878 } 3879 }, 3880 "outgoing": { 3881 "service-sub-layer": { 3882 "sub-layer": [ 3883 "ssl-2" 3884 ] 3886 } 3887 } 3888 }, 3889 { 3890 "name": "fsl-5", 3891 "traffic-profile": "pf-3", 3892 "operation": "pop-and-lookup", 3893 "incoming": { 3894 "forwarding-id": { 3895 "interface": "eth1", 3896 "mpls-label-stack": { 3897 "entry": [ 3898 { 3899 "id": 0, 3900 "label": "10010" 3901 } 3902 ] 3903 } 3904 } 3905 }, 3906 "outgoing": { 3907 "service-sub-layer": { 3908 "sub-layer": [ 3909 "ssl-2" 3910 ] 3911 } 3912 } 3913 }, 3914 { 3915 "name": "fsl-6", 3916 "traffic-profile": "pf-3", 3917 "operation": "impose-and-forward", 3918 "incoming": { 3919 "service-sub-layer": { 3920 "sub-layer": [ 3921 "ssl-2" 3922 ] 3923 } 3924 }, 3925 "outgoing": { 3926 "interface": { 3927 "outgoing-interface": "eth3", 3928 "mpls-label-stack": { 3929 "entry": [ 3930 { 3931 "id": 0, 3932 "label": "10011" 3933 } 3935 ] 3936 } 3937 } 3938 } 3939 } 3940 ] 3941 } 3942 }, 3943 "ietf-interfaces:interfaces": { 3944 "interface": [ 3945 { 3946 "name": "eth0", 3947 "type": "iana-if-type:ethernetCsmacd", 3948 "oper-status": "up", 3949 "statistics": { 3950 "discontinuity-time": "2020-12-18T18:59:00-05:00" 3951 } 3952 }, 3953 { 3954 "name": "eth1", 3955 "type": "iana-if-type:ethernetCsmacd", 3956 "oper-status": "up", 3957 "statistics": { 3958 "discontinuity-time": "2020-12-18T18:59:00-05:00" 3959 } 3960 }, 3961 { 3962 "name": "eth2", 3963 "type": "iana-if-type:ethernetCsmacd", 3964 "oper-status": "up", 3965 "statistics": { 3966 "discontinuity-time": "2020-12-18T18:59:00-05:00" 3967 } 3968 }, 3969 { 3970 "name": "eth3", 3971 "type": "iana-if-type:ethernetCsmacd", 3972 "oper-status": "up", 3973 "statistics": { 3974 "discontinuity-time": "2020-12-18T18:59:00-05:00" 3975 } 3976 }, 3977 { 3978 "name": "eth4", 3979 "type": "iana-if-type:ethernetCsmacd", 3980 "oper-status": "up", 3981 "statistics": { 3982 "discontinuity-time": "2020-12-18T18:59:00-05:00" 3984 } 3985 } 3986 ] 3987 } 3988 } 3990 Figure 11: Example C-1 DetNet JSON Relay Service Disaggregation 3992 B.5. Example C-2 JSON Relay Aggregation Service Sub-Layer 3994 This illustrates the Relay node 1 aggregating the service sub-layers 3995 of DetNet flows 1 and 2 into a forwarding sub-layer A diagram 3996 illustrating both aggregation and disaggregation is shown and then 3997 the corresponding JSON operational data follows. 3999 Please consult the PDF or HTML versions for the Case C-2 Diagram. 4001 Figure 12: Case C-2 Example JSON Service Aggregation/Disaggregation 4003 { 4004 "ietf-detnet:detnet": { 4005 "traffic-profile": [ 4006 { 4007 "name": "pf-1", 4008 "traffic-requirements": { 4009 "min-bandwidth": "100000000", 4010 "max-latency": 100000000, 4011 "max-latency-variation": 100000000, 4012 "max-loss": 2, 4013 "max-consecutive-loss-tolerance": 5, 4014 "max-misordering": 0 4015 }, 4016 "member-service": [ 4017 "ssl-1", 4018 "ssl-2" 4019 ] 4020 }, 4021 { 4022 "name": "pf-2", 4023 "traffic-spec": { 4024 "interval": 125, 4025 "max-pkts-per-interval": 1, 4026 "max-payload-size": 1518 4027 }, 4028 "member-fwd-sublayer": [ 4029 "fsl-1", 4030 "fsl-2" 4031 ] 4033 }, 4034 { 4035 "name": "pf-3", 4036 "traffic-spec": { 4037 "interval": 125, 4038 "max-pkts-per-interval": 2, 4039 "max-payload-size": 1518 4040 }, 4041 "member-fwd-sublayer": [ 4042 "afl-1", 4043 "afl-2" 4044 ] 4045 } 4046 ], 4047 "service": { 4048 "sub-layer": [ 4049 { 4050 "name": "ssl-1", 4051 "service-rank": 10, 4052 "traffic-profile": "pf-1", 4053 "service-protection": { 4054 "protection": "replication", 4055 "sequence-number-length": "long-sn" 4056 }, 4057 "operation": "relay", 4058 "incoming": { 4059 "service-id": { 4060 "mpls-label-stack": { 4061 "entry": [ 4062 { 4063 "id": 0, 4064 "label": "100" 4065 } 4066 ] 4067 } 4068 } 4069 }, 4070 "outgoing": { 4071 "forwarding-sub-layer": { 4072 "service-outgoing": [ 4073 { 4074 "index": 0, 4075 "mpls-label-stack": { 4076 "entry": [ 4077 { 4078 "id": 0, 4079 "label": "101" 4080 } 4082 ] 4083 }, 4084 "sub-layer": [ 4085 "afl-1", 4086 "afl-2" 4087 ] 4088 } 4089 ] 4090 } 4091 } 4092 }, 4093 { 4094 "name": "ssl-2", 4095 "service-rank": 10, 4096 "traffic-profile": "pf-1", 4097 "service-protection": { 4098 "protection": "replication", 4099 "sequence-number-length": "long-sn" 4100 }, 4101 "operation": "relay", 4102 "incoming": { 4103 "service-id": { 4104 "mpls-label-stack": { 4105 "entry": [ 4106 { 4107 "id": 0, 4108 "label": "103" 4109 } 4110 ] 4111 } 4112 } 4113 }, 4114 "outgoing": { 4115 "forwarding-sub-layer": { 4116 "service-outgoing": [ 4117 { 4118 "index": 0, 4119 "mpls-label-stack": { 4120 "entry": [ 4121 { 4122 "id": 0, 4123 "label": "104" 4124 } 4125 ] 4126 }, 4127 "sub-layer": [ 4128 "afl-1", 4129 "afl-2" 4131 ] 4132 } 4133 ] 4134 } 4135 } 4136 } 4137 ] 4138 }, 4139 "forwarding": { 4140 "sub-layer": [ 4141 { 4142 "name": "fsl-1", 4143 "traffic-profile": "pf-2", 4144 "operation": "pop-and-lookup", 4145 "incoming": { 4146 "forwarding-id": { 4147 "interface": "eth0", 4148 "mpls-label-stack": { 4149 "entry": [ 4150 { 4151 "id": 0, 4152 "label": "10000" 4153 } 4154 ] 4155 } 4156 } 4157 }, 4158 "outgoing": { 4159 "service-sub-layer": { 4160 "sub-layer": [ 4161 "ssl-1" 4162 ] 4163 } 4164 } 4165 }, 4166 { 4167 "name": "fsl-2", 4168 "traffic-profile": "pf-2", 4169 "operation": "pop-and-lookup", 4170 "incoming": { 4171 "forwarding-id": { 4172 "interface": "eth1", 4173 "mpls-label-stack": { 4174 "entry": [ 4175 { 4176 "id": 0, 4177 "label": "10006" 4178 } 4180 ] 4181 } 4182 } 4183 }, 4184 "outgoing": { 4185 "service-sub-layer": { 4186 "sub-layer": [ 4187 "ssl-2" 4188 ] 4189 } 4190 } 4191 }, 4192 { 4193 "name": "afl-1", 4194 "traffic-profile": "pf-3", 4195 "operation": "impose-and-forward", 4196 "incoming": { 4197 "service-sub-layer": { 4198 "sub-layer": [ 4199 "ssl-1", 4200 "ssl-2" 4201 ] 4202 } 4203 }, 4204 "outgoing": { 4205 "interface": { 4206 "outgoing-interface": "eth2", 4207 "mpls-label-stack": { 4208 "entry": [ 4209 { 4210 "id": 0, 4211 "label": "20000" 4212 } 4213 ] 4214 } 4215 } 4216 } 4217 }, 4218 { 4219 "name": "afl-2", 4220 "traffic-profile": "pf-3", 4221 "operation": "impose-and-forward", 4222 "incoming": { 4223 "service-sub-layer": { 4224 "sub-layer": [ 4225 "ssl-1", 4226 "ssl-2" 4227 ] 4229 } 4230 }, 4231 "outgoing": { 4232 "interface": { 4233 "outgoing-interface": "eth3", 4234 "mpls-label-stack": { 4235 "entry": [ 4236 { 4237 "id": 0, 4238 "label": "20001" 4239 } 4240 ] 4241 } 4242 } 4243 } 4244 } 4245 ] 4246 } 4247 }, 4248 "ietf-interfaces:interfaces": { 4249 "interface": [ 4250 { 4251 "name": "eth0", 4252 "type": "iana-if-type:ethernetCsmacd", 4253 "oper-status": "up", 4254 "statistics": { 4255 "discontinuity-time": "2020-12-18T18:59:00-05:00" 4256 } 4257 }, 4258 { 4259 "name": "eth1", 4260 "type": "iana-if-type:ethernetCsmacd", 4261 "oper-status": "up", 4262 "statistics": { 4263 "discontinuity-time": "2020-12-18T18:59:00-05:00" 4264 } 4265 }, 4266 { 4267 "name": "eth2", 4268 "type": "iana-if-type:ethernetCsmacd", 4269 "oper-status": "up", 4270 "statistics": { 4271 "discontinuity-time": "2020-12-18T18:59:00-05:00" 4272 } 4273 }, 4274 { 4275 "name": "eth3", 4276 "type": "iana-if-type:ethernetCsmacd", 4277 "oper-status": "up", 4278 "statistics": { 4279 "discontinuity-time": "2020-12-18T18:59:00-05:00" 4280 } 4281 }, 4282 { 4283 "name": "eth4", 4284 "type": "iana-if-type:ethernetCsmacd", 4285 "oper-status": "up", 4286 "statistics": { 4287 "discontinuity-time": "2020-12-18T18:59:00-05:00" 4288 } 4289 } 4290 ] 4291 } 4292 } 4294 Figure 13: Example C-2 DetNet JSON Relay Aggregation Service Sub- 4295 Layer 4297 { 4298 "ietf-detnet:detnet": { 4299 "traffic-profile": [ 4300 { 4301 "name": "pf-1", 4302 "traffic-requirements": { 4303 "min-bandwidth": "100000000", 4304 "max-latency": 100000000, 4305 "max-latency-variation": 100000000, 4306 "max-loss": 2, 4307 "max-consecutive-loss-tolerance": 5, 4308 "max-misordering": 0 4309 }, 4310 "member-service": [ 4311 "ssl-1", 4312 "ssl-2" 4313 ] 4314 }, 4315 { 4316 "name": "pf-2", 4317 "traffic-spec": { 4318 "interval": 125, 4319 "max-pkts-per-interval": 1, 4320 "max-payload-size": 1518 4321 }, 4322 "member-fwd-sublayer": [ 4323 "fsl-1", 4324 "fsl-2" 4326 ] 4327 }, 4328 { 4329 "name": "pf-3", 4330 "traffic-spec": { 4331 "interval": 125, 4332 "max-pkts-per-interval": 2, 4333 "max-payload-size": 1518 4334 }, 4335 "member-fwd-sublayer": [ 4336 "afl-1", 4337 "afl-2" 4338 ] 4339 } 4340 ], 4341 "service": { 4342 "sub-layer": [ 4343 { 4344 "name": "ssl-1", 4345 "service-rank": 10, 4346 "traffic-profile": "pf-1", 4347 "service-protection": { 4348 "protection": "elimination", 4349 "sequence-number-length": "long-sn" 4350 }, 4351 "operation": "relay", 4352 "incoming": { 4353 "service-id": { 4354 "mpls-label-stack": { 4355 "entry": [ 4356 { 4357 "id": 0, 4358 "label": "101" 4359 } 4360 ] 4361 } 4362 } 4363 }, 4364 "outgoing": { 4365 "forwarding-sub-layer": { 4366 "service-outgoing": [ 4367 { 4368 "index": 0, 4369 "mpls-label-stack": { 4370 "entry": [ 4371 { 4372 "id": 0, 4373 "label": "102" 4375 } 4376 ] 4377 }, 4378 "sub-layer": [ 4379 "fsl-1" 4380 ] 4381 } 4382 ] 4383 } 4384 } 4385 }, 4386 { 4387 "name": "ssl-2", 4388 "service-rank": 10, 4389 "traffic-profile": "pf-1", 4390 "service-protection": { 4391 "protection": "elimination", 4392 "sequence-number-length": "long-sn" 4393 }, 4394 "operation": "relay", 4395 "incoming": { 4396 "service-id": { 4397 "mpls-label-stack": { 4398 "entry": [ 4399 { 4400 "id": 0, 4401 "label": "104" 4402 } 4403 ] 4404 } 4405 } 4406 }, 4407 "outgoing": { 4408 "forwarding-sub-layer": { 4409 "service-outgoing": [ 4410 { 4411 "index": 0, 4412 "mpls-label-stack": { 4413 "entry": [ 4414 { 4415 "id": 0, 4416 "label": "105" 4417 } 4418 ] 4419 }, 4420 "sub-layer": [ 4421 "fsl-2" 4422 ] 4424 } 4425 ] 4426 } 4427 } 4428 } 4429 ] 4430 }, 4431 "forwarding": { 4432 "sub-layer": [ 4433 { 4434 "name": "afl-1", 4435 "traffic-profile": "pf-3", 4436 "operation": "pop-and-lookup", 4437 "incoming": { 4438 "forwarding-id": { 4439 "interface": "eth0", 4440 "mpls-label-stack": { 4441 "entry": [ 4442 { 4443 "id": 0, 4444 "label": "20002" 4445 } 4446 ] 4447 } 4448 } 4449 }, 4450 "outgoing": { 4451 "service-sub-layer": { 4452 "sub-layer": [ 4453 "ssl-1", 4454 "ssl-2" 4455 ] 4456 } 4457 } 4458 }, 4459 { 4460 "name": "afl-2", 4461 "traffic-profile": "pf-3", 4462 "operation": "pop-and-lookup", 4463 "incoming": { 4464 "forwarding-id": { 4465 "interface": "eth1", 4466 "mpls-label-stack": { 4467 "entry": [ 4468 { 4469 "id": 0, 4470 "label": "20003" 4471 } 4473 ] 4474 } 4475 } 4476 }, 4477 "outgoing": { 4478 "service-sub-layer": { 4479 "sub-layer": [ 4480 "ssl-1", 4481 "ssl-2" 4482 ] 4483 } 4484 } 4485 }, 4486 { 4487 "name": "fsl-1", 4488 "traffic-profile": "pf-2", 4489 "operation": "impose-and-forward", 4490 "incoming": { 4491 "service-sub-layer": { 4492 "sub-layer": [ 4493 "ssl-1" 4494 ] 4495 } 4496 }, 4497 "outgoing": { 4498 "interface": { 4499 "outgoing-interface": "eth2", 4500 "mpls-label-stack": { 4501 "entry": [ 4502 { 4503 "id": 0, 4504 "label": "10005" 4505 } 4506 ] 4507 } 4508 } 4509 } 4510 }, 4511 { 4512 "name": "fsl-2", 4513 "traffic-profile": "pf-2", 4514 "operation": "impose-and-forward", 4515 "incoming": { 4516 "service-sub-layer": { 4517 "sub-layer": [ 4518 "ssl-2" 4519 ] 4520 } 4522 }, 4523 "outgoing": { 4524 "interface": { 4525 "outgoing-interface": "eth3", 4526 "mpls-label-stack": { 4527 "entry": [ 4528 { 4529 "id": 0, 4530 "label": "10011" 4531 } 4532 ] 4533 } 4534 } 4535 } 4536 } 4537 ] 4538 } 4539 }, 4540 "ietf-interfaces:interfaces": { 4541 "interface": [ 4542 { 4543 "name": "eth0", 4544 "type": "iana-if-type:ethernetCsmacd", 4545 "oper-status": "up", 4546 "statistics": { 4547 "discontinuity-time": "2020-12-18T18:59:00-05:00" 4548 } 4549 }, 4550 { 4551 "name": "eth1", 4552 "type": "iana-if-type:ethernetCsmacd", 4553 "oper-status": "up", 4554 "statistics": { 4555 "discontinuity-time": "2020-12-18T18:59:00-05:00" 4556 } 4557 }, 4558 { 4559 "name": "eth2", 4560 "type": "iana-if-type:ethernetCsmacd", 4561 "oper-status": "up", 4562 "statistics": { 4563 "discontinuity-time": "2020-12-18T18:59:00-05:00" 4564 } 4565 }, 4566 { 4567 "name": "eth3", 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": "eth4", 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 } 4584 } 4586 Figure 14: Example C-2 DetNet JSON Relay Disaggregation Service 4587 Sub-Layer 4589 B.6. Example C-3 JSON Relay Service Sub-Layer Aggregation/ 4590 Disaggregation 4592 This illustrates the Relay node 1 aggregating the service sub-layers 4593 of DetNet flows 1 and 2 into a service sub-layer of Aggregated DetNet 4594 flow 1. It also illustrates the Relay node 2 disaggregating the 4595 aggregated DetNet flow 1 into the DetNet flows 1 and 2 service sub- 4596 layers. A diagram illustrating both aggregation and disaggregation 4597 is shown and then the corresponding JSON operational data follows. 4599 Please consult the PDF or HTML versions for the Case C-3 Diagram. 4601 Figure 15: Case C-3 Example JSON Service Aggregation/Disaggregation 4603 { 4604 "ietf-detnet:detnet": { 4605 "traffic-profile": [ 4606 { 4607 "name": "pf-1", 4608 "traffic-requirements": { 4609 "min-bandwidth": "100000000", 4610 "max-latency": 100000000, 4611 "max-latency-variation": 100000000, 4612 "max-loss": 2, 4613 "max-consecutive-loss-tolerance": 5, 4614 "max-misordering": 0 4615 }, 4616 "member-service": [ 4617 "ssl-1", 4618 "ssl-2" 4619 ] 4620 }, 4621 { 4622 "name": "pf-2", 4623 "traffic-requirements": { 4624 "min-bandwidth": "200000000", 4625 "max-latency": 100000000, 4626 "max-latency-variation": 100000000, 4627 "max-loss": 2, 4628 "max-consecutive-loss-tolerance": 5, 4629 "max-misordering": 0 4630 }, 4631 "member-service": [ 4632 "asl-1" 4633 ] 4634 }, 4635 { 4636 "name": "pf-3", 4637 "traffic-spec": { 4638 "interval": 125, 4639 "max-pkts-per-interval": 1, 4640 "max-payload-size": 1518 4641 }, 4642 "member-fwd-sublayer": [ 4643 "fsl-1", 4644 "fsl-2" 4645 ] 4646 }, 4647 { 4648 "name": "pf-4", 4649 "traffic-spec": { 4650 "interval": 125, 4651 "max-pkts-per-interval": 2, 4652 "max-payload-size": 1518 4653 }, 4654 "member-fwd-sublayer": [ 4655 "fsl-3", 4656 "fsl-4" 4657 ] 4658 } 4659 ], 4660 "service": { 4661 "sub-layer": [ 4662 { 4663 "name": "ssl-1", 4664 "service-rank": 10, 4665 "traffic-profile": "pf-1", 4666 "service-protection": { 4667 "protection": "none", 4668 "sequence-number-length": "long-sn" 4669 }, 4670 "operation": "relay", 4671 "incoming": { 4672 "service-id": { 4673 "mpls-label-stack": { 4674 "entry": [ 4675 { 4676 "id": 0, 4677 "label": "100" 4678 } 4679 ] 4680 } 4681 } 4682 }, 4683 "outgoing": { 4684 "service-sub-layer": { 4685 "aggregation-sub-layer": "asl-1", 4686 "service-label": { 4687 "mpls-label-stack": { 4688 "entry": [ 4689 { 4690 "id": 0, 4691 "label": "101" 4692 } 4693 ] 4694 } 4695 } 4696 } 4697 } 4698 }, 4699 { 4700 "name": "ssl-2", 4701 "service-rank": 10, 4702 "traffic-profile": "pf-1", 4703 "service-protection": { 4704 "protection": "none", 4705 "sequence-number-length": "long-sn" 4706 }, 4707 "operation": "relay", 4708 "incoming": { 4709 "service-id": { 4710 "mpls-label-stack": { 4711 "entry": [ 4712 { 4713 "id": 0, 4714 "label": "103" 4715 } 4716 ] 4717 } 4718 } 4719 }, 4720 "outgoing": { 4721 "service-sub-layer": { 4722 "aggregation-sub-layer": "asl-1", 4723 "service-label": { 4724 "mpls-label-stack": { 4725 "entry": [ 4726 { 4727 "id": 0, 4728 "label": "104" 4729 } 4730 ] 4731 } 4732 } 4733 } 4734 } 4735 }, 4736 { 4737 "name": "asl-1", 4738 "service-rank": 10, 4739 "traffic-profile": "pf-2", 4740 "service-protection": { 4741 "protection": "replication", 4742 "sequence-number-length": "long-sn" 4743 }, 4744 "operation": "initiation", 4745 "incoming": { 4746 "service-aggregation": { 4747 "sub-layer": [ 4748 "ssl-1", 4749 "ssl-2" 4750 ] 4751 } 4752 }, 4753 "outgoing": { 4754 "forwarding-sub-layer": { 4755 "service-outgoing": [ 4756 { 4757 "index": 0, 4758 "mpls-label-stack": { 4759 "entry": [ 4760 { 4761 "id": 0, 4762 "label": "1000" 4763 } 4764 ] 4765 }, 4766 "sub-layer": [ 4767 "fsl-3", 4768 "fsl-4" 4769 ] 4770 } 4771 ] 4772 } 4773 } 4774 } 4775 ] 4776 }, 4777 "forwarding": { 4778 "sub-layer": [ 4779 { 4780 "name": "fsl-1", 4781 "traffic-profile": "pf-3", 4782 "operation": "pop-and-lookup", 4783 "incoming": { 4784 "forwarding-id": { 4785 "interface": "eth0", 4786 "mpls-label-stack": { 4787 "entry": [ 4788 { 4789 "id": 0, 4790 "label": "10000" 4791 } 4792 ] 4793 } 4794 } 4795 }, 4796 "outgoing": { 4797 "service-sub-layer": { 4798 "sub-layer": [ 4799 "ssl-1" 4800 ] 4801 } 4802 } 4803 }, 4804 { 4805 "name": "fsl-2", 4806 "traffic-profile": "pf-3", 4807 "operation": "pop-and-lookup", 4808 "incoming": { 4809 "forwarding-id": { 4810 "interface": "eth1", 4811 "mpls-label-stack": { 4812 "entry": [ 4813 { 4814 "id": 0, 4815 "label": "10006" 4816 } 4817 ] 4818 } 4819 } 4820 }, 4821 "outgoing": { 4822 "service-sub-layer": { 4823 "sub-layer": [ 4824 "ssl-2" 4825 ] 4826 } 4827 } 4828 }, 4829 { 4830 "name": "fsl-3", 4831 "traffic-profile": "pf-4", 4832 "operation": "impose-and-forward", 4833 "incoming": { 4834 "service-sub-layer": { 4835 "sub-layer": [ 4836 "asl-1" 4837 ] 4838 } 4839 }, 4840 "outgoing": { 4841 "interface": { 4842 "outgoing-interface": "eth2", 4843 "mpls-label-stack": { 4844 "entry": [ 4845 { 4846 "id": 0, 4847 "label": "20000" 4848 } 4849 ] 4850 } 4851 } 4852 } 4853 }, 4854 { 4855 "name": "fsl-4", 4856 "traffic-profile": "pf-4", 4857 "operation": "impose-and-forward", 4858 "incoming": { 4859 "service-sub-layer": { 4860 "sub-layer": [ 4861 "asl-1" 4862 ] 4863 } 4864 }, 4865 "outgoing": { 4866 "interface": { 4867 "outgoing-interface": "eth3", 4868 "mpls-label-stack": { 4869 "entry": [ 4870 { 4871 "id": 0, 4872 "label": "20001" 4873 } 4874 ] 4875 } 4876 } 4877 } 4878 } 4879 ] 4880 } 4881 }, 4882 "ietf-interfaces:interfaces": { 4883 "interface": [ 4884 { 4885 "name": "eth0", 4886 "type": "iana-if-type:ethernetCsmacd", 4887 "oper-status": "up", 4888 "statistics": { 4889 "discontinuity-time": "2020-12-18T18:59:00-05:00" 4890 } 4891 }, 4892 { 4893 "name": "eth1", 4894 "type": "iana-if-type:ethernetCsmacd", 4895 "oper-status": "up", 4896 "statistics": { 4897 "discontinuity-time": "2020-12-18T18:59:00-05:00" 4898 } 4899 }, 4900 { 4901 "name": "eth2", 4902 "type": "iana-if-type:ethernetCsmacd", 4903 "oper-status": "up", 4904 "statistics": { 4905 "discontinuity-time": "2020-12-18T18:59:00-05:00" 4907 } 4908 }, 4909 { 4910 "name": "eth3", 4911 "type": "iana-if-type:ethernetCsmacd", 4912 "oper-status": "up", 4913 "statistics": { 4914 "discontinuity-time": "2020-12-18T18:59:00-05:00" 4915 } 4916 }, 4917 { 4918 "name": "eth4", 4919 "type": "iana-if-type:ethernetCsmacd", 4920 "oper-status": "up", 4921 "statistics": { 4922 "discontinuity-time": "2020-12-18T18:59:00-05:00" 4923 } 4924 } 4925 ] 4926 } 4927 } 4929 Figure 16: Example C-3 DetNet JSON Relay Service Sub-Layer 4930 Aggregation 4932 { 4933 "ietf-detnet:detnet": { 4934 "traffic-profile": [ 4935 { 4936 "name": "pf-1", 4937 "traffic-requirements": { 4938 "min-bandwidth": "100000000", 4939 "max-latency": 100000000, 4940 "max-latency-variation": 100000000, 4941 "max-loss": 2, 4942 "max-consecutive-loss-tolerance": 5, 4943 "max-misordering": 0 4944 }, 4945 "member-service": [ 4946 "ssl-1", 4947 "ssl-2" 4948 ] 4949 }, 4950 { 4951 "name": "pf-2", 4952 "traffic-requirements": { 4953 "min-bandwidth": "200000000", 4954 "max-latency": 100000000, 4955 "max-latency-variation": 100000000, 4956 "max-loss": 2, 4957 "max-consecutive-loss-tolerance": 5, 4958 "max-misordering": 0 4959 }, 4960 "member-service": [ 4961 "asl-1" 4962 ] 4963 }, 4964 { 4965 "name": "pf-3", 4966 "traffic-spec": { 4967 "interval": 125, 4968 "max-pkts-per-interval": 1, 4969 "max-payload-size": 1518 4970 }, 4971 "member-fwd-sublayer": [ 4972 "fsl-3", 4973 "fsl-4" 4974 ] 4975 }, 4976 { 4977 "name": "pf-4", 4978 "traffic-spec": { 4979 "interval": 125, 4980 "max-pkts-per-interval": 2, 4981 "max-payload-size": 1518 4982 }, 4983 "member-fwd-sublayer": [ 4984 "fsl-1", 4985 "fsl-2" 4986 ] 4987 } 4988 ], 4989 "service": { 4990 "sub-layer": [ 4991 { 4992 "name": "ssl-1", 4993 "service-rank": 10, 4994 "traffic-profile": "pf-1", 4995 "service-protection": { 4996 "protection": "none", 4997 "sequence-number-length": "long-sn" 4998 }, 4999 "operation": "relay", 5000 "incoming": { 5001 "service-id": { 5002 "mpls-label-stack": { 5003 "entry": [ 5004 { 5005 "id": 0, 5006 "label": "101" 5007 } 5008 ] 5009 } 5010 } 5011 }, 5012 "outgoing": { 5013 "forwarding-sub-layer": { 5014 "service-outgoing": [ 5015 { 5016 "index": 0, 5017 "mpls-label-stack": { 5018 "entry": [ 5019 { 5020 "id": 0, 5021 "label": "102" 5022 } 5023 ] 5024 }, 5025 "sub-layer": [ 5026 "fsl-3" 5027 ] 5028 } 5029 ] 5030 } 5031 } 5032 }, 5033 { 5034 "name": "ssl-2", 5035 "service-rank": 10, 5036 "traffic-profile": "pf-1", 5037 "service-protection": { 5038 "protection": "none", 5039 "sequence-number-length": "long-sn" 5040 }, 5041 "operation": "relay", 5042 "incoming": { 5043 "service-id": { 5044 "mpls-label-stack": { 5045 "entry": [ 5046 { 5047 "id": 0, 5048 "label": "104" 5049 } 5050 ] 5052 } 5053 } 5054 }, 5055 "outgoing": { 5056 "forwarding-sub-layer": { 5057 "service-outgoing": [ 5058 { 5059 "index": 0, 5060 "mpls-label-stack": { 5061 "entry": [ 5062 { 5063 "id": 0, 5064 "label": "105" 5065 } 5066 ] 5067 }, 5068 "sub-layer": [ 5069 "fsl-4" 5070 ] 5071 } 5072 ] 5073 } 5074 } 5075 }, 5076 { 5077 "name": "asl-1", 5078 "service-rank": 10, 5079 "traffic-profile": "pf-2", 5080 "service-protection": { 5081 "protection": "elimination", 5082 "sequence-number-length": "long-sn" 5083 }, 5084 "operation": "termination", 5085 "incoming": { 5086 "service-id": { 5087 "mpls-label-stack": { 5088 "entry": [ 5089 { 5090 "id": 0, 5091 "label": "1000" 5092 } 5093 ] 5094 } 5095 } 5096 }, 5097 "outgoing": { 5098 "service-disaggregation": { 5099 "sub-layer": [ 5100 "ssl-1", 5101 "ssl-2" 5102 ] 5103 } 5104 } 5105 } 5106 ] 5107 }, 5108 "forwarding": { 5109 "sub-layer": [ 5110 { 5111 "name": "fsl-1", 5112 "traffic-profile": "pf-4", 5113 "operation": "pop-and-lookup", 5114 "incoming": { 5115 "forwarding-id": { 5116 "interface": "eth0", 5117 "mpls-label-stack": { 5118 "entry": [ 5119 { 5120 "id": 0, 5121 "label": "20002" 5122 } 5123 ] 5124 } 5125 } 5126 }, 5127 "outgoing": { 5128 "service-sub-layer": { 5129 "sub-layer": [ 5130 "asl-1" 5131 ] 5132 } 5133 } 5134 }, 5135 { 5136 "name": "fsl-2", 5137 "traffic-profile": "pf-4", 5138 "operation": "pop-and-lookup", 5139 "incoming": { 5140 "forwarding-id": { 5141 "interface": "eth1", 5142 "mpls-label-stack": { 5143 "entry": [ 5144 { 5145 "id": 0, 5146 "label": "20003" 5147 } 5149 ] 5150 } 5151 } 5152 }, 5153 "outgoing": { 5154 "service-sub-layer": { 5155 "sub-layer": [ 5156 "asl-1" 5157 ] 5158 } 5159 } 5160 }, 5161 { 5162 "name": "fsl-3", 5163 "traffic-profile": "pf-3", 5164 "operation": "impose-and-forward", 5165 "incoming": { 5166 "service-sub-layer": { 5167 "sub-layer": [ 5168 "ssl-1" 5169 ] 5170 } 5171 }, 5172 "outgoing": { 5173 "interface": { 5174 "outgoing-interface": "eth2", 5175 "mpls-label-stack": { 5176 "entry": [ 5177 { 5178 "id": 0, 5179 "label": "10005" 5180 } 5181 ] 5182 } 5183 } 5184 } 5185 }, 5186 { 5187 "name": "fsl-4", 5188 "traffic-profile": "pf-3", 5189 "operation": "impose-and-forward", 5190 "incoming": { 5191 "service-sub-layer": { 5192 "sub-layer": [ 5193 "ssl-2" 5194 ] 5195 } 5196 }, 5197 "outgoing": { 5198 "interface": { 5199 "outgoing-interface": "eth3", 5200 "mpls-label-stack": { 5201 "entry": [ 5202 { 5203 "id": 0, 5204 "label": "10011" 5205 } 5206 ] 5207 } 5208 } 5209 } 5210 } 5211 ] 5212 } 5213 }, 5214 "ietf-interfaces:interfaces": { 5215 "interface": [ 5216 { 5217 "name": "eth0", 5218 "type": "iana-if-type:ethernetCsmacd", 5219 "oper-status": "up", 5220 "statistics": { 5221 "discontinuity-time": "2020-12-18T18:59:00-05:00" 5222 } 5223 }, 5224 { 5225 "name": "eth1", 5226 "type": "iana-if-type:ethernetCsmacd", 5227 "oper-status": "up", 5228 "statistics": { 5229 "discontinuity-time": "2020-12-18T18:59:00-05:00" 5230 } 5231 }, 5232 { 5233 "name": "eth2", 5234 "type": "iana-if-type:ethernetCsmacd", 5235 "oper-status": "up", 5236 "statistics": { 5237 "discontinuity-time": "2020-12-18T18:59:00-05:00" 5238 } 5239 }, 5240 { 5241 "name": "eth3", 5242 "type": "iana-if-type:ethernetCsmacd", 5243 "oper-status": "up", 5244 "statistics": { 5245 "discontinuity-time": "2020-12-18T18:59:00-05:00" 5246 } 5247 }, 5248 { 5249 "name": "eth4", 5250 "type": "iana-if-type:ethernetCsmacd", 5251 "oper-status": "up", 5252 "statistics": { 5253 "discontinuity-time": "2020-12-18T18:59:00-05:00" 5254 } 5255 } 5256 ] 5257 } 5258 } 5260 Figure 17: Example C-3 DetNet JSON Relay Service Sub-Layer 5261 Disaggregation 5263 B.7. Example C-4 JSON Relay Service Sub-Layer Aggregation/ 5264 Disaggregation 5266 This illustrates the Relay node 1 aggregating the forwarding sub- 5267 layers of DetNet flow 1 and 2 into a service sub-layer of Aggregated 5268 DetNet flow 1. This also illustrates the Relay node 2 disaggregating 5269 the service sub-layer of Aggregated DetNet flow 1 to forwarding sub- 5270 layers of DetNet flow 1 and 2. A diagram illustrating both 5271 aggregation and disaggregation is shown and then the corresponding 5272 JSON operational data follows. 5274 Please consult the PDF or HTML versions for the Case C-4 Diagram 5276 Figure 18: Case C-4 Example JSON Service Aggregation/Disaggregation 5278 { 5279 "ietf-detnet:detnet": { 5280 "traffic-profile": [ 5281 { 5282 "name": "pf-1", 5283 "traffic-requirements": { 5284 "min-bandwidth": "100000000", 5285 "max-latency": 100000000, 5286 "max-latency-variation": 100000000, 5287 "max-loss": 2, 5288 "max-consecutive-loss-tolerance": 5, 5289 "max-misordering": 0 5290 }, 5291 "member-service": [ 5292 "ssl-1", 5293 "ssl-2" 5294 ] 5295 }, 5296 { 5297 "name": "pf-2", 5298 "traffic-requirements": { 5299 "min-bandwidth": "200000000", 5300 "max-latency": 100000000, 5301 "max-latency-variation": 100000000, 5302 "max-loss": 2, 5303 "max-consecutive-loss-tolerance": 5, 5304 "max-misordering": 0 5305 }, 5306 "member-service": [ 5307 "asl-1" 5308 ] 5309 }, 5310 { 5311 "name": "pf-3", 5312 "traffic-spec": { 5313 "interval": 125, 5314 "max-pkts-per-interval": 1, 5315 "max-payload-size": 1518 5316 }, 5317 "member-fwd-sublayer": [ 5318 "fsl-1", 5319 "fsl-2", 5320 "fsl-3", 5321 "fsl-4" 5322 ] 5323 }, 5324 { 5325 "name": "pf-4", 5326 "traffic-spec": { 5327 "interval": 125, 5328 "max-pkts-per-interval": 2, 5329 "max-payload-size": 1518 5330 }, 5331 "member-fwd-sublayer": [ 5332 "fsl-5", 5333 "fsl-6" 5334 ] 5335 } 5336 ], 5337 "service": { 5338 "sub-layer": [ 5339 { 5340 "name": "ssl-1", 5341 "service-rank": 10, 5342 "traffic-profile": "pf-1", 5343 "service-protection": { 5344 "protection": "none", 5345 "sequence-number-length": "long-sn" 5346 }, 5347 "operation": "relay", 5348 "incoming": { 5349 "service-id": { 5350 "mpls-label-stack": { 5351 "entry": [ 5352 { 5353 "id": 0, 5354 "label": "100" 5355 } 5356 ] 5357 } 5358 } 5359 }, 5360 "outgoing": { 5361 "forwarding-sub-layer": { 5362 "service-outgoing": [ 5363 { 5364 "index": 0, 5365 "mpls-label-stack": { 5366 "entry": [ 5367 { 5368 "id": 0, 5369 "label": "101" 5370 } 5371 ] 5372 }, 5373 "sub-layer": [ 5374 "fsl-3" 5375 ] 5376 } 5377 ] 5378 } 5379 } 5380 }, 5381 { 5382 "name": "ssl-2", 5383 "service-rank": 10, 5384 "traffic-profile": "pf-1", 5385 "service-protection": { 5386 "protection": "none", 5387 "sequence-number-length": "long-sn" 5388 }, 5389 "operation": "relay", 5390 "incoming": { 5391 "service-id": { 5392 "mpls-label-stack": { 5393 "entry": [ 5394 { 5395 "id": 0, 5396 "label": "103" 5397 } 5398 ] 5399 } 5400 } 5401 }, 5402 "outgoing": { 5403 "forwarding-sub-layer": { 5404 "service-outgoing": [ 5405 { 5406 "index": 0, 5407 "mpls-label-stack": { 5408 "entry": [ 5409 { 5410 "id": 0, 5411 "label": "104" 5412 } 5413 ] 5414 }, 5415 "sub-layer": [ 5416 "fsl-4" 5417 ] 5418 } 5419 ] 5420 } 5421 } 5422 }, 5423 { 5424 "name": "asl-1", 5425 "service-rank": 10, 5426 "traffic-profile": "pf-2", 5427 "service-protection": { 5428 "protection": "replication", 5429 "sequence-number-length": "long-sn" 5430 }, 5431 "operation": "initiation", 5432 "incoming": { 5433 "forwarding-aggregation": { 5434 "sub-layer": [ 5435 "fsl-3", 5436 "fsl-4" 5438 ] 5439 } 5440 }, 5441 "outgoing": { 5442 "forwarding-sub-layer": { 5443 "service-outgoing": [ 5444 { 5445 "index": 0, 5446 "mpls-label-stack": { 5447 "entry": [ 5448 { 5449 "id": 0, 5450 "label": "1000" 5451 } 5452 ] 5453 }, 5454 "sub-layer": [ 5455 "fsl-5", 5456 "fsl-6" 5457 ] 5458 } 5459 ] 5460 } 5461 } 5462 } 5463 ] 5464 }, 5465 "forwarding": { 5466 "sub-layer": [ 5467 { 5468 "name": "fsl-1", 5469 "traffic-profile": "pf-3", 5470 "operation": "pop-and-lookup", 5471 "incoming": { 5472 "forwarding-id": { 5473 "interface": "eth0", 5474 "mpls-label-stack": { 5475 "entry": [ 5476 { 5477 "id": 0, 5478 "label": "10000" 5479 } 5480 ] 5481 } 5482 } 5483 }, 5484 "outgoing": { 5485 "service-sub-layer": { 5486 "sub-layer": [ 5487 "ssl-1" 5488 ] 5489 } 5490 } 5491 }, 5492 { 5493 "name": "fsl-2", 5494 "traffic-profile": "pf-3", 5495 "operation": "pop-and-lookup", 5496 "incoming": { 5497 "forwarding-id": { 5498 "interface": "eth1", 5499 "mpls-label-stack": { 5500 "entry": [ 5501 { 5502 "id": 0, 5503 "label": "10006" 5504 } 5505 ] 5506 } 5507 } 5508 }, 5509 "outgoing": { 5510 "service-sub-layer": { 5511 "sub-layer": [ 5512 "ssl-2" 5513 ] 5514 } 5515 } 5516 }, 5517 { 5518 "name": "fsl-3", 5519 "traffic-profile": "pf-3", 5520 "operation": "impose-and-forward", 5521 "incoming": { 5522 "service-sub-layer": { 5523 "sub-layer": [ 5524 "ssl-1" 5525 ] 5526 } 5527 }, 5528 "outgoing": { 5529 "service-aggregation": { 5530 "aggregation-sub-layer": "asl-1", 5531 "optional-forwarding-label": { 5532 "mpls-label-stack": { 5533 "entry": [ 5534 { 5535 "id": 0, 5536 "label": "20004" 5537 } 5538 ] 5539 } 5540 } 5541 } 5542 } 5543 }, 5544 { 5545 "name": "fsl-4", 5546 "traffic-profile": "pf-3", 5547 "operation": "impose-and-forward", 5548 "incoming": { 5549 "service-sub-layer": { 5550 "sub-layer": [ 5551 "ssl-2" 5552 ] 5553 } 5554 }, 5555 "outgoing": { 5556 "service-aggregation": { 5557 "aggregation-sub-layer": "asl-1", 5558 "optional-forwarding-label": { 5559 "mpls-label-stack": { 5560 "entry": [ 5561 { 5562 "id": 0, 5563 "label": "20005" 5564 } 5565 ] 5566 } 5567 } 5568 } 5569 } 5570 }, 5571 { 5572 "name": "fsl-5", 5573 "traffic-profile": "pf-4", 5574 "operation": "impose-and-forward", 5575 "incoming": { 5576 "service-sub-layer": { 5577 "sub-layer": [ 5578 "asl-1" 5579 ] 5580 } 5581 }, 5582 "outgoing": { 5583 "interface": { 5584 "outgoing-interface": "eth2", 5585 "mpls-label-stack": { 5586 "entry": [ 5587 { 5588 "id": 0, 5589 "label": "20000" 5590 } 5591 ] 5592 } 5593 } 5594 } 5595 }, 5596 { 5597 "name": "fsl-6", 5598 "traffic-profile": "pf-4", 5599 "operation": "impose-and-forward", 5600 "incoming": { 5601 "service-sub-layer": { 5602 "sub-layer": [ 5603 "asl-1" 5604 ] 5605 } 5606 }, 5607 "outgoing": { 5608 "interface": { 5609 "outgoing-interface": "eth3", 5610 "mpls-label-stack": { 5611 "entry": [ 5612 { 5613 "id": 0, 5614 "label": "20001" 5615 } 5616 ] 5617 } 5618 } 5619 } 5620 } 5621 ] 5622 } 5623 }, 5624 "ietf-interfaces:interfaces": { 5625 "interface": [ 5626 { 5627 "name": "eth0", 5628 "type": "iana-if-type:ethernetCsmacd", 5629 "oper-status": "up", 5630 "statistics": { 5631 "discontinuity-time": "2020-12-18T18:59:00-05:00" 5632 } 5633 }, 5634 { 5635 "name": "eth1", 5636 "type": "iana-if-type:ethernetCsmacd", 5637 "oper-status": "up", 5638 "statistics": { 5639 "discontinuity-time": "2020-12-18T18:59:00-05:00" 5640 } 5641 }, 5642 { 5643 "name": "eth2", 5644 "type": "iana-if-type:ethernetCsmacd", 5645 "oper-status": "up", 5646 "statistics": { 5647 "discontinuity-time": "2020-12-18T18:59:00-05:00" 5648 } 5649 }, 5650 { 5651 "name": "eth3", 5652 "type": "iana-if-type:ethernetCsmacd", 5653 "oper-status": "up", 5654 "statistics": { 5655 "discontinuity-time": "2020-12-18T18:59:00-05:00" 5656 } 5657 }, 5658 { 5659 "name": "eth4", 5660 "type": "iana-if-type:ethernetCsmacd", 5661 "oper-status": "up", 5662 "statistics": { 5663 "discontinuity-time": "2020-12-18T18:59:00-05:00" 5664 } 5665 } 5666 ] 5667 } 5668 } 5670 Figure 19: Example C-4 DetNet JSON Relay Service Sub-Layer 5671 Aggregation 5673 { 5674 "ietf-detnet:detnet": { 5675 "traffic-profile": [ 5676 { 5677 "name": "pf-1", 5678 "traffic-requirements": { 5679 "min-bandwidth": "100000000", 5680 "max-latency": 100000000, 5681 "max-latency-variation": 100000000, 5682 "max-loss": 2, 5683 "max-consecutive-loss-tolerance": 5, 5684 "max-misordering": 0 5685 }, 5686 "member-service": [ 5687 "ssl-1", 5688 "ssl-2" 5689 ] 5690 }, 5691 { 5692 "name": "pf-2", 5693 "traffic-requirements": { 5694 "min-bandwidth": "200000000", 5695 "max-latency": 100000000, 5696 "max-latency-variation": 100000000, 5697 "max-loss": 2, 5698 "max-consecutive-loss-tolerance": 5, 5699 "max-misordering": 0 5700 }, 5701 "member-service": [ 5702 "asl-1" 5703 ] 5704 }, 5705 { 5706 "name": "pf-3", 5707 "traffic-spec": { 5708 "interval": 125, 5709 "max-pkts-per-interval": 1, 5710 "max-payload-size": 1518 5711 }, 5712 "member-fwd-sublayer": [ 5713 "fsl-3", 5714 "fsl-4", 5715 "fsl-5", 5716 "fsl-6" 5717 ] 5718 }, 5719 { 5720 "name": "pf-4", 5721 "traffic-spec": { 5722 "interval": 125, 5723 "max-pkts-per-interval": 2, 5724 "max-payload-size": 1518 5725 }, 5726 "member-fwd-sublayer": [ 5727 "fsl-1", 5728 "fsl-2" 5729 ] 5730 } 5731 ], 5732 "service": { 5733 "sub-layer": [ 5734 { 5735 "name": "ssl-1", 5736 "service-rank": 10, 5737 "traffic-profile": "pf-1", 5738 "service-protection": { 5739 "protection": "none", 5740 "sequence-number-length": "long-sn" 5741 }, 5742 "operation": "relay", 5743 "incoming": { 5744 "service-id": { 5745 "mpls-label-stack": { 5746 "entry": [ 5747 { 5748 "id": 0, 5749 "label": "101" 5750 } 5751 ] 5752 } 5753 } 5754 }, 5755 "outgoing": { 5756 "forwarding-sub-layer": { 5757 "service-outgoing": [ 5758 { 5759 "index": 0, 5760 "mpls-label-stack": { 5761 "entry": [ 5762 { 5763 "id": 0, 5764 "label": "102" 5765 } 5766 ] 5767 }, 5768 "sub-layer": [ 5769 "fsl-5" 5770 ] 5771 } 5772 ] 5773 } 5774 } 5775 }, 5776 { 5777 "name": "ssl-2", 5778 "service-rank": 10, 5779 "traffic-profile": "pf-1", 5780 "service-protection": { 5781 "protection": "none", 5782 "sequence-number-length": "long-sn" 5783 }, 5784 "operation": "relay", 5785 "incoming": { 5786 "service-id": { 5787 "mpls-label-stack": { 5788 "entry": [ 5789 { 5790 "id": 0, 5791 "label": "104" 5792 } 5793 ] 5794 } 5795 } 5796 }, 5797 "outgoing": { 5798 "forwarding-sub-layer": { 5799 "service-outgoing": [ 5800 { 5801 "index": 0, 5802 "mpls-label-stack": { 5803 "entry": [ 5804 { 5805 "id": 0, 5806 "label": "105" 5807 } 5808 ] 5809 }, 5810 "sub-layer": [ 5811 "fsl-6" 5812 ] 5813 } 5814 ] 5815 } 5816 } 5818 }, 5819 { 5820 "name": "asl-1", 5821 "service-rank": 10, 5822 "traffic-profile": "pf-2", 5823 "service-protection": { 5824 "protection": "elimination", 5825 "sequence-number-length": "long-sn" 5826 }, 5827 "operation": "termination", 5828 "incoming": { 5829 "service-id": { 5830 "mpls-label-stack": { 5831 "entry": [ 5832 { 5833 "id": 0, 5834 "label": "1000" 5835 } 5836 ] 5837 } 5838 } 5839 }, 5840 "outgoing": { 5841 "forwarding-disaggregation": { 5842 "sub-layer": [ 5843 "fsl-3", 5844 "fsl-4" 5845 ] 5846 } 5847 } 5848 } 5849 ] 5850 }, 5851 "forwarding": { 5852 "sub-layer": [ 5853 { 5854 "name": "fsl-1", 5855 "traffic-profile": "pf-4", 5856 "operation": "pop-and-lookup", 5857 "incoming": { 5858 "forwarding-id": { 5859 "interface": "eth0", 5860 "mpls-label-stack": { 5861 "entry": [ 5862 { 5863 "id": 0, 5864 "label": "20002" 5865 } 5867 ] 5868 } 5869 } 5870 }, 5871 "outgoing": { 5872 "service-sub-layer": { 5873 "sub-layer": [ 5874 "asl-1" 5875 ] 5876 } 5877 } 5878 }, 5879 { 5880 "name": "fsl-2", 5881 "traffic-profile": "pf-4", 5882 "operation": "pop-and-lookup", 5883 "incoming": { 5884 "forwarding-id": { 5885 "interface": "eth1", 5886 "mpls-label-stack": { 5887 "entry": [ 5888 { 5889 "id": 0, 5890 "label": "20003" 5891 } 5892 ] 5893 } 5894 } 5895 }, 5896 "outgoing": { 5897 "service-sub-layer": { 5898 "sub-layer": [ 5899 "asl-1" 5900 ] 5901 } 5902 } 5903 }, 5904 { 5905 "name": "fsl-3", 5906 "traffic-profile": "pf-3", 5907 "operation": "pop-and-lookup", 5908 "incoming": { 5909 "forwarding-id": { 5910 "interface": "eth0", 5911 "mpls-label-stack": { 5912 "entry": [ 5913 { 5914 "id": 0, 5915 "label": "20004" 5916 } 5917 ] 5918 } 5919 } 5920 }, 5921 "outgoing": { 5922 "service-sub-layer": { 5923 "sub-layer": [ 5924 "ssl-1" 5925 ] 5926 } 5927 } 5928 }, 5929 { 5930 "name": "fsl-4", 5931 "traffic-profile": "pf-3", 5932 "operation": "pop-and-lookup", 5933 "incoming": { 5934 "forwarding-id": { 5935 "interface": "eth1", 5936 "mpls-label-stack": { 5937 "entry": [ 5938 { 5939 "id": 0, 5940 "label": "20005" 5941 } 5942 ] 5943 } 5944 } 5945 }, 5946 "outgoing": { 5947 "service-sub-layer": { 5948 "sub-layer": [ 5949 "ssl-2" 5950 ] 5951 } 5952 } 5953 }, 5954 { 5955 "name": "fsl-5", 5956 "traffic-profile": "pf-3", 5957 "operation": "impose-and-forward", 5958 "incoming": { 5959 "service-sub-layer": { 5960 "sub-layer": [ 5961 "ssl-1" 5962 ] 5964 } 5965 }, 5966 "outgoing": { 5967 "interface": { 5968 "outgoing-interface": "eth2", 5969 "mpls-label-stack": { 5970 "entry": [ 5971 { 5972 "id": 0, 5973 "label": "10005" 5974 } 5975 ] 5976 } 5977 } 5978 } 5979 }, 5980 { 5981 "name": "fsl-6", 5982 "traffic-profile": "pf-3", 5983 "operation": "impose-and-forward", 5984 "incoming": { 5985 "service-sub-layer": { 5986 "sub-layer": [ 5987 "ssl-2" 5988 ] 5989 } 5990 }, 5991 "outgoing": { 5992 "interface": { 5993 "outgoing-interface": "eth3", 5994 "mpls-label-stack": { 5995 "entry": [ 5996 { 5997 "id": 0, 5998 "label": "10011" 5999 } 6000 ] 6001 } 6002 } 6003 } 6004 } 6005 ] 6006 } 6007 }, 6008 "ietf-interfaces:interfaces": { 6009 "interface": [ 6010 { 6011 "name": "eth0", 6012 "type": "iana-if-type:ethernetCsmacd", 6013 "oper-status": "up", 6014 "statistics": { 6015 "discontinuity-time": "2020-12-18T18:59:00-05:00" 6016 } 6017 }, 6018 { 6019 "name": "eth1", 6020 "type": "iana-if-type:ethernetCsmacd", 6021 "oper-status": "up", 6022 "statistics": { 6023 "discontinuity-time": "2020-12-18T18:59:00-05:00" 6024 } 6025 }, 6026 { 6027 "name": "eth2", 6028 "type": "iana-if-type:ethernetCsmacd", 6029 "oper-status": "up", 6030 "statistics": { 6031 "discontinuity-time": "2020-12-18T18:59:00-05:00" 6032 } 6033 }, 6034 { 6035 "name": "eth3", 6036 "type": "iana-if-type:ethernetCsmacd", 6037 "oper-status": "up", 6038 "statistics": { 6039 "discontinuity-time": "2020-12-18T18:59:00-05:00" 6040 } 6041 }, 6042 { 6043 "name": "eth4", 6044 "type": "iana-if-type:ethernetCsmacd", 6045 "oper-status": "up", 6046 "statistics": { 6047 "discontinuity-time": "2020-12-18T18:59:00-05:00" 6048 } 6049 } 6050 ] 6051 } 6052 } 6054 Figure 20: Example C-4 DetNet JSON Relay Service Sub-Layer 6055 Disaggregation 6057 B.8. Example D-1 JSON Transit Forwarding Sub-Layer Aggregation/ 6058 Disaggregation 6060 This illustrates the Transit node 1 aggregating the forwarding sub- 6061 layers of DetNet flow 1 and 2 into a forwarding sub-layer. This also 6062 illustrates a Transit node 4 disaggregating a forwarding sub-layer 6063 into DetNet flow 1 and 2 forwarding sub-layers. 6065 Please consult the PDF or HTML versions for the Case D-1 Diagram 6067 Figure 21: Case D-1 Example Service Aggregation/Disaggregation 6069 { 6070 "ietf-detnet:detnet": { 6071 "traffic-profile": [ 6072 { 6073 "name": "pf-1", 6074 "traffic-spec": { 6075 "interval": 125, 6076 "max-pkts-per-interval": 1, 6077 "max-payload-size": 1518 6078 }, 6079 "member-fwd-sublayer": [ 6080 "fsl-1", 6081 "fsl-2" 6082 ] 6083 }, 6084 { 6085 "name": "pf-2", 6086 "traffic-spec": { 6087 "interval": 125, 6088 "max-pkts-per-interval": 2, 6089 "max-payload-size": 1518 6090 }, 6091 "member-fwd-sublayer": [ 6092 "afl-1" 6093 ] 6094 } 6095 ], 6096 "forwarding": { 6097 "sub-layer": [ 6098 { 6099 "name": "fsl-1", 6100 "traffic-profile": "pf-1", 6101 "operation": "pop-impose-and-forward", 6102 "incoming": { 6103 "forwarding-id": { 6104 "interface": "eth0", 6105 "mpls-label-stack": { 6106 "entry": [ 6107 { 6108 "id": 0, 6109 "label": "10000" 6110 } 6111 ] 6112 } 6113 } 6114 }, 6115 "outgoing": { 6116 "forwarding-sub-layer": { 6117 "aggregation-sub-layer": "afl-1", 6118 "forwarding-label": { 6119 "mpls-label-stack": { 6120 "entry": [ 6121 { 6122 "id": 0, 6123 "label": "10002" 6124 } 6125 ] 6126 } 6127 } 6128 } 6129 } 6130 }, 6131 { 6132 "name": "fsl-2", 6133 "traffic-profile": "pf-1", 6134 "operation": "pop-impose-and-forward", 6135 "incoming": { 6136 "forwarding-id": { 6137 "interface": "eth1", 6138 "mpls-label-stack": { 6139 "entry": [ 6140 { 6141 "id": 0, 6142 "label": "10004" 6143 } 6144 ] 6145 } 6146 } 6147 }, 6148 "outgoing": { 6149 "forwarding-sub-layer": { 6150 "aggregation-sub-layer": "afl-1", 6151 "forwarding-label": { 6152 "mpls-label-stack": { 6153 "entry": [ 6154 { 6155 "id": 0, 6156 "label": "10006" 6157 } 6158 ] 6159 } 6160 } 6161 } 6162 } 6163 }, 6164 { 6165 "name": "afl-1", 6166 "traffic-profile": "pf-2", 6167 "operation": "impose-and-forward", 6168 "incoming": { 6169 "forwarding-aggregation": { 6170 "sub-layer": [ 6171 "fsl-1", 6172 "fsl-2" 6173 ] 6174 } 6175 }, 6176 "outgoing": { 6177 "interface": { 6178 "outgoing-interface": "eth3", 6179 "mpls-label-stack": { 6180 "entry": [ 6181 { 6182 "id": 0, 6183 "label": "20000" 6184 } 6185 ] 6186 } 6187 } 6188 } 6189 } 6190 ] 6191 } 6192 }, 6193 "ietf-interfaces:interfaces": { 6194 "interface": [ 6195 { 6196 "name": "eth0", 6197 "type": "iana-if-type:ethernetCsmacd", 6198 "oper-status": "up", 6199 "statistics": { 6200 "discontinuity-time": "2020-12-18T18:59:00-05:00" 6202 } 6203 }, 6204 { 6205 "name": "eth1", 6206 "type": "iana-if-type:ethernetCsmacd", 6207 "oper-status": "up", 6208 "statistics": { 6209 "discontinuity-time": "2020-12-18T18:59:00-05:00" 6210 } 6211 }, 6212 { 6213 "name": "eth2", 6214 "type": "iana-if-type:ethernetCsmacd", 6215 "oper-status": "up", 6216 "statistics": { 6217 "discontinuity-time": "2020-12-18T18:59:00-05:00" 6218 } 6219 }, 6220 { 6221 "name": "eth3", 6222 "type": "iana-if-type:ethernetCsmacd", 6223 "oper-status": "up", 6224 "statistics": { 6225 "discontinuity-time": "2020-12-18T18:59:00-05:00" 6226 } 6227 }, 6228 { 6229 "name": "eth4", 6230 "type": "iana-if-type:ethernetCsmacd", 6231 "oper-status": "up", 6232 "statistics": { 6233 "discontinuity-time": "2020-12-18T18:59:00-05:00" 6234 } 6235 } 6236 ] 6237 } 6238 } 6240 Figure 22: Example D-1 DetNet JSON Relay Service Sub-Layer 6241 Aggregation 6243 { 6244 "ietf-detnet:detnet": { 6245 "traffic-profile": [ 6246 { 6247 "name": "pf-1", 6248 "traffic-spec": { 6249 "interval": 125, 6250 "max-pkts-per-interval": 1, 6251 "max-payload-size": 1518 6252 }, 6253 "member-fwd-sublayer": [ 6254 "fsl-1", 6255 "fsl-2" 6256 ] 6257 }, 6258 { 6259 "name": "pf-2", 6260 "traffic-spec": { 6261 "interval": 125, 6262 "max-pkts-per-interval": 2, 6263 "max-payload-size": 1518 6264 }, 6265 "member-fwd-sublayer": [ 6266 "afl-1" 6267 ] 6268 } 6269 ], 6270 "forwarding": { 6271 "sub-layer": [ 6272 { 6273 "name": "fsl-1", 6274 "traffic-profile": "pf-1", 6275 "operation": "swap-and-forward", 6276 "incoming": { 6277 "forwarding-id": { 6278 "interface": "eth1", 6279 "mpls-label-stack": { 6280 "entry": [ 6281 { 6282 "id": 0, 6283 "label": "10002" 6284 } 6285 ] 6286 } 6287 } 6288 }, 6289 "outgoing": { 6290 "interface": { 6291 "outgoing-interface": "eth3", 6292 "mpls-label-stack": { 6293 "entry": [ 6294 { 6295 "id": 0, 6296 "label": "10003" 6297 } 6299 ] 6300 } 6301 } 6302 } 6303 }, 6304 { 6305 "name": "fsl-2", 6306 "traffic-profile": "pf-1", 6307 "operation": "swap-and-forward", 6308 "incoming": { 6309 "forwarding-id": { 6310 "interface": "eth1", 6311 "mpls-label-stack": { 6312 "entry": [ 6313 { 6314 "id": 0, 6315 "label": "10006" 6316 } 6317 ] 6318 } 6319 } 6320 }, 6321 "outgoing": { 6322 "interface": { 6323 "outgoing-interface": "eth2", 6324 "mpls-label-stack": { 6325 "entry": [ 6326 { 6327 "id": 0, 6328 "label": "10007" 6329 } 6330 ] 6331 } 6332 } 6333 } 6334 }, 6335 { 6336 "name": "afl-1", 6337 "traffic-profile": "pf-2", 6338 "operation": "pop-and-lookup", 6339 "incoming": { 6340 "forwarding-id": { 6341 "interface": "eth1", 6342 "mpls-label-stack": { 6343 "entry": [ 6344 { 6345 "id": 0, 6346 "label": "20001" 6348 } 6349 ] 6350 } 6351 } 6352 }, 6353 "outgoing": { 6354 "forwarding-disaggregation": { 6355 "sub-layer": [ 6356 "fsl-1", 6357 "fsl-2" 6358 ] 6359 } 6360 } 6361 } 6362 ] 6363 } 6364 }, 6365 "ietf-interfaces:interfaces": { 6366 "interface": [ 6367 { 6368 "name": "eth0", 6369 "type": "iana-if-type:ethernetCsmacd", 6370 "oper-status": "up", 6371 "statistics": { 6372 "discontinuity-time": "2020-12-18T18:59:00-05:00" 6373 } 6374 }, 6375 { 6376 "name": "eth1", 6377 "type": "iana-if-type:ethernetCsmacd", 6378 "oper-status": "up", 6379 "statistics": { 6380 "discontinuity-time": "2020-12-18T18:59:00-05:00" 6381 } 6382 }, 6383 { 6384 "name": "eth2", 6385 "type": "iana-if-type:ethernetCsmacd", 6386 "oper-status": "up", 6387 "statistics": { 6388 "discontinuity-time": "2020-12-18T18:59:00-05:00" 6389 } 6390 }, 6391 { 6392 "name": "eth3", 6393 "type": "iana-if-type:ethernetCsmacd", 6394 "oper-status": "up", 6395 "statistics": { 6396 "discontinuity-time": "2020-12-18T18:59:00-05:00" 6397 } 6398 }, 6399 { 6400 "name": "eth4", 6401 "type": "iana-if-type:ethernetCsmacd", 6402 "oper-status": "up", 6403 "statistics": { 6404 "discontinuity-time": "2020-12-18T18:59:00-05:00" 6405 } 6406 } 6407 ] 6408 } 6409 } 6411 Figure 23: Example D-1 DetNet JSON Relay Service Sub-Layer 6412 Disaggregation 6414 Authors' Addresses 6416 Xuesong Geng 6417 Huawei Technologies 6419 Email: gengxuesong@huawei.com 6421 Yeoncheol Ryoo 6422 ETRI 6424 Email: dbduscjf@etri.re.kr 6426 Don Fedyk 6427 LabN Consulting, L.L.C. 6429 Email: dfedyk@labn.net 6431 Reshad Rahman 6432 Individual 6434 Email: reshad@yahoo.com 6436 Zhenqiang Li 6437 China Mobile 6439 Email: lizhenqiang@chinamobile.com