| < draft-ietf-detnet-yang-11.txt | draft-ietf-detnet-yang-12.txt > | |||
|---|---|---|---|---|
| Network Working Group X. Geng | Network Working Group X. Geng | |||
| Internet-Draft M. Chen | Internet-Draft M. Chen | |||
| Intended status: Standards Track Huawei Technologies | Intended status: Standards Track Huawei Technologies | |||
| Expires: August 23, 2021 Y. Ryoo | Expires: 20 November 2021 Y. Ryoo | |||
| ETRI | ETRI | |||
| D. Fedyk | D. Fedyk | |||
| LabN Consulting, L.L.C. | LabN Consulting, L.L.C. | |||
| R. Rahman | R. Rahman | |||
| Individual | Individual | |||
| Z. Li | Z. Li | |||
| China Mobile | China Mobile | |||
| February 19, 2021 | 19 May 2021 | |||
| Deterministic Networking (DetNet) YANG Model | Deterministic Networking (DetNet) YANG Model | |||
| draft-ietf-detnet-yang-11 | draft-ietf-detnet-yang-12 | |||
| Abstract | Abstract | |||
| This document contains the specification for the Deterministic | This document contains the specification for the Deterministic | |||
| Networking YANG Model for configuration and operational data for | Networking YANG Model for configuration and operational data for | |||
| DetNet Flows. The model allows for provisioning of end-to-end DetNet | DetNet Flows. The model allows for provisioning of end-to-end DetNet | |||
| service along the path without dependency on any signaling protocol. | service along the path without dependency on any signaling protocol. | |||
| It also specifies operational status for flows. | It also specifies operational status for flows. | |||
| The YANG module defined in this document conforms to the Network | The YANG module defined in this document conforms to the Network | |||
| skipping to change at page 2, line 4 ¶ | skipping to change at page 2, line 4 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on August 23, 2021. | This Internet-Draft will expire on 20 November 2021. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | license-info) in effect on the date of publication of this document. | |||
| publication of this document. Please review these documents | Please review these documents carefully, as they describe your rights | |||
| carefully, as they describe your rights and restrictions with respect | and restrictions with respect to this document. Code Components | |||
| to this document. Code Components extracted from this document must | extracted from this document must include Simplified BSD License text | |||
| include Simplified BSD License text as described in Section 4.e of | as described in Section 4.e of the Trust Legal Provisions and are | |||
| the Trust Legal Provisions and are provided without warranty as | provided without warranty as described in the Simplified BSD License. | |||
| described in the Simplified BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. DetNet YANG Module . . . . . . . . . . . . . . . . . . . . . 3 | 3. DetNet YANG Module . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3.1. DetNet Application Flow YANG Attributes . . . . . . . . . 3 | 3.1. DetNet Application Flow YANG Attributes . . . . . . . . . 3 | |||
| 3.2. DetNet Service Sub-layer YANG Attributes . . . . . . . . 3 | 3.2. DetNet Service Sub-layer YANG Attributes . . . . . . . . 3 | |||
| 3.3. DetNet Forwarding Sub-layer YANG Attributes . . . . . . . 4 | 3.3. DetNet Forwarding Sub-layer YANG Attributes . . . . . . . 4 | |||
| 4. DetNet Flow Aggregation . . . . . . . . . . . . . . . . . . . 4 | 4. DetNet Flow Aggregation . . . . . . . . . . . . . . . . . . . 4 | |||
| 5. DetNet YANG Structure Considerations . . . . . . . . . . . . 5 | 5. DetNet YANG Structure Considerations . . . . . . . . . . . . 5 | |||
| 6. DetNet Configuration YANG Structures . . . . . . . . . . . . 6 | 6. DetNet Configuration YANG Structures . . . . . . . . . . . . 6 | |||
| 7. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 15 | 7. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 15 | |||
| 8. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 44 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 44 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 44 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 44 | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 44 | 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 44 | |||
| 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 44 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 44 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 44 | 11.1. Normative References . . . . . . . . . . . . . . . . . . 44 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 44 | 11.2. Informative References . . . . . . . . . . . . . . . . . 45 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 45 | ||||
| Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 45 | Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 45 | |||
| A.1. Example JSON Configuration/Operational . . . . . . . . . 45 | A.1. Example A-1 JSON Configuration/Operational . . . . . . . 45 | |||
| A.2. Example XML Config: Aggregation using a Forwarding | A.2. Example B-1 XML Config: Aggregation using a Forwarding | |||
| Sublayer . . . . . . . . . . . . . . . . . . . . . . . . 50 | Sub-layer . . . . . . . . . . . . . . . . . . . . . . . . 50 | |||
| A.3. Example JSON Service Aggregation Configuration . . . . . 54 | A.3. Example B-2 JSON Service Aggregation Configuration . . . 55 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 59 | A.4. Example C-1 JSON Relay Aggregation/Disaggregation | |||
| Configuration . . . . . . . . . . . . . . . . . . . . . . 60 | ||||
| A.5. Example C-2 JSON Relay Aggregation Service Sub-Layer . . 77 | ||||
| A.6. Example C-3 JSON Relay Service Sub-Layer Aggregation/ | ||||
| Disaggregation . . . . . . . . . . . . . . . . . . . . . 89 | ||||
| A.7. Example C-4 JSON Relay Service Sub-Layer Aggregation/ | ||||
| Disaggregation . . . . . . . . . . . . . . . . . . . . . 103 | ||||
| A.8. Example D-1 JSON Transit Forwarding Sub-Layer Aggregation/ | ||||
| Disaggregation . . . . . . . . . . . . . . . . . . . . . 120 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 127 | ||||
| 1. Introduction | 1. Introduction | |||
| DetNet (Deterministic Networking) provides a capability to carry | DetNet (Deterministic Networking) provides a capability to carry | |||
| specified unicast or multicast data flows for real-time applications | specified unicast or multicast data flows for real-time applications | |||
| with extremely low packet loss rates and assured maximum end-to-end | with extremely low packet loss rates and assured maximum end-to-end | |||
| delivery latency. A description of the general background and | delivery latency. A description of the general background and | |||
| concepts of DetNet can be found in [RFC8655]. | concepts of DetNet can be found in [RFC8655]. | |||
| This document defines a YANG model for DetNet based on YANG data | This document defines a YANG model for DetNet based on YANG data | |||
| skipping to change at page 3, line 31 ¶ | skipping to change at page 3, line 39 ¶ | |||
| The DetNet YANG module includes DetNet App-flow, DetNet Service Sub- | The DetNet YANG module includes DetNet App-flow, DetNet Service Sub- | |||
| layer, and DetNet Forwarding Sub-layer configuration and operational | layer, and DetNet Forwarding Sub-layer configuration and operational | |||
| objects. The corresponding attributes used in different sub-layers | objects. The corresponding attributes used in different sub-layers | |||
| are defined in Section 3.1, 3.2, 3.3 respectively. | are defined in Section 3.1, 3.2, 3.3 respectively. | |||
| 3.1. DetNet Application Flow YANG Attributes | 3.1. DetNet Application Flow YANG Attributes | |||
| DetNet application flow is responsible for mapping between | DetNet application flow is responsible for mapping between | |||
| application flows and DetNet flows at the edge node(egress/ingress | application flows and DetNet flows at the edge node(egress/ingress | |||
| node). The the application flows can be either layer 2 or layer 3 | node). The application flows can be either layer 2 or layer 3 flows. | |||
| flows. To map a flow at the User Network Interface (UNI), the | To map a flow at the User Network Interface (UNI), the corresponding | |||
| corresponding attributes are defined in | attributes are defined in [I-D.ietf-detnet-flow-information-model]. | |||
| [I-D.ietf-detnet-flow-information-model]. | ||||
| 3.2. DetNet Service Sub-layer YANG Attributes | 3.2. DetNet Service Sub-layer YANG Attributes | |||
| DetNet service functions, e.g., DetNet tunnel initialization/ | DetNet service functions, e.g., DetNet tunnel initialization/ | |||
| termination and service protection, are provided in the DetNet | termination and service protection, are provided in the DetNet | |||
| service sub-layer. To support these functions, the following service | service sub-layer. To support these functions, the following service | |||
| attributes need to be configured: | attributes need to be configured: | |||
| o DetNet flow identification | * DetNet flow identification | |||
| * Service function indication, indicates which service function will | ||||
| o Service function indication, indicates which service function will | ||||
| be invoked at a DetNet edge, relay node or end station. (DetNet | be invoked at a DetNet edge, relay node or end station. (DetNet | |||
| tunnel initialization or termination are default functions in | tunnel initialization or termination are default functions in | |||
| DetNet service layer, so there is no need for explicit | DetNet service layer, so there is no need for explicit | |||
| indication). The corresponding arguments for service functions | indication). The corresponding arguments for service functions | |||
| also needs to be defined. | also needs to be defined. | |||
| 3.3. DetNet Forwarding Sub-layer YANG Attributes | 3.3. DetNet Forwarding Sub-layer YANG Attributes | |||
| As defined in [RFC8655], DetNet forwarding sub-layer optionally | As defined in [RFC8655], DetNet forwarding sub-layer optionally | |||
| provides congestion protection for DetNet flows over paths provided | provides congestion protection for DetNet flows over paths provided | |||
| by the underlying network. Explicit route is another mechanism that | by the underlying network. Explicit route is another mechanism that | |||
| is used by DetNet to avoid temporary interruptions caused by the | is used by DetNet to avoid temporary interruptions caused by the | |||
| convergence of routing or bridging protocols, and it is also | convergence of routing or bridging protocols, and it is also | |||
| implemented at the DetNet forwarding sub-layer. | implemented at the DetNet forwarding sub-layer. | |||
| To support congestion protection and explicit route, the following | To support congestion protection and explicit route, the following | |||
| transport layer related attributes are necessary: | transport layer related attributes are necessary: | |||
| o Flow Specification and Traffic Requirements, refers to | * Flow Specification and Traffic Requirements, refers to | |||
| [I-D.ietf-detnet-flow-information-model]. These may used for | [I-D.ietf-detnet-flow-information-model]. These may used for | |||
| resource reservation, flow shaping, filtering and policing by a | resource reservation, flow shaping, filtering and policing by a | |||
| control plane or other network management and control mechanisms. | control plane or other network management and control mechanisms. | |||
| o Since this model programs the data plane existing explicit route | * Since this model programs the data plane existing explicit route | |||
| mechanisms can be reused. If a static MPLS tunnel is used as the | mechanisms can be reused. If a static MPLS tunnel is used as the | |||
| transport tunnel, the configuration need to be at every transit | transport tunnel, the configuration need to be at every transit | |||
| node along the path. For an IP based path, the static | node along the path. For an IP based path, the static | |||
| configuration is similar to the static MPLS case. This document | configuration is similar to the static MPLS case. This document | |||
| provides data-plane configuration of IP addresses or MPLS labels | provides data-plane configuration of IP addresses or MPLS labels | |||
| but it does not provide control plane mapping mapping or other | but it does not provide control plane mapping or other aspects. | |||
| aspects. | ||||
| 4. DetNet Flow Aggregation | 4. DetNet Flow Aggregation | |||
| DetNet provides the capability of flow aggregation to improve | DetNet provides the capability of flow aggregation to improve | |||
| scaleability of DetNet data, management and control planes. | scalability of DetNet data, management and control planes. | |||
| Aggregated flows can be viewed by the some DetNet nodes as individual | Aggregated flows can be viewed by the some DetNet nodes as individual | |||
| DetNet flows. When aggregating DetNet flows, the flows should be | DetNet flows. When aggregating DetNet flows, the flows should be | |||
| compatible: if bandwidth reservations are used, the reservation | compatible: if bandwidth reservations are used, the reservation | |||
| should be a reasonable representation of the individual reservations; | should be a reasonable representation of the individual reservations; | |||
| if maximum delay bounds are used, the system should ensure that the | if maximum delay bounds are used, the system should ensure that the | |||
| aggregate does not exceed the delay bounds of the individual flows. | aggregate does not exceed the delay bounds of the individual flows. | |||
| The DetNet YANG model defined in this document supports DetNet flow | The DetNet YANG model defined in this document supports DetNet flow | |||
| aggregation with the following functions: | aggregation with the following functions: | |||
| o Aggregation flow encapsulation/decapsulation/identification | * Aggregation flow encapsulation/decapsulation/identification | |||
| * Mapping individual DetNet flows to an aggregated flow | ||||
| o Mapping individual DetNet flows to an aggregated flow | ||||
| o Changing traffic specification parameters for aggregated flow | * Changing traffic specification parameters for aggregated flow | |||
| The following cases of DetNet aggregation are supported: | The following cases of DetNet aggregation are supported: | |||
| o Ingress node aggregates App flows into a service sub-layer of | * Ingress node aggregates App flows into a service sub-layer of | |||
| DetNet flow | DetNet flow | |||
| o In ingress node, the service sub-layers of DetNet flows are | * In ingress node, the service sub-layers of DetNet flows are | |||
| aggregated into a forwarding sub-layer | aggregated into a forwarding sub-layer | |||
| o In ingress node, the service sub-layers of DetNet flows are | * In ingress node, the service sub-layers of DetNet flows are | |||
| aggregated into a service sub-layer of an aggregated DetNet flow | aggregated into a service sub-layer of an aggregated DetNet flow | |||
| o Relay node aggregates the forwarding sub-layers DetNet flows into | * Relay node aggregates the forwarding sub-layers DetNet flows into | |||
| a forwarding sub-layer | a forwarding sub-layer | |||
| o Relay node aggregates the service sub-layers of DetNet flows into | * Relay node aggregates the service sub-layers of DetNet flows into | |||
| a forwarding sub-layer | a forwarding sub-layer | |||
| o Relay node aggregates the service sub-layers of DetNet flows into | * Relay node aggregates the service sub-layers of DetNet flows into | |||
| a service sub-layer of Aggregated DetNet flow | a service sub-layer of Aggregated DetNet flow | |||
| o Relay node aggregates the forwarding sub-layers of DetNet flow | * Relay node aggregates the forwarding sub-layers of DetNet flow | |||
| into a service sub-layer of Aggregated DetNet flow | into a service sub-layer of Aggregated DetNet flow | |||
| o Transit node aggregates the forwarding sub-layers of DetNet flows | * Transit node aggregates the forwarding sub-layers of DetNet flows | |||
| into a forwarding sub-layer | into a forwarding sub-layer | |||
| Traffic requirements and traffic specification may be tracked for | Traffic requirements and traffic specification may be tracked for | |||
| individual or aggregate flows but reserving resources and tracking | individual or aggregate flows but reserving resources and tracking | |||
| the services in the aggregated flow is out of scope. | the services in the aggregated flow is out of scope. | |||
| 5. DetNet YANG Structure Considerations | 5. DetNet YANG Structure Considerations | |||
| The picture shows that the general structure of the DetNet YANG | The picture shows that the general structure of the DetNet YANG | |||
| Model: | Model: | |||
| skipping to change at page 15, line 8 ¶ | skipping to change at page 15, line 22 ¶ | |||
| | +--rw service-sub-layer | | +--rw service-sub-layer | |||
| | +--rw service-sub-layer* | | +--rw service-sub-layer* | |||
| | service-sub-layer-ref | | service-sub-layer-ref | |||
| +--:(forwarding-disaggregation) | +--:(forwarding-disaggregation) | |||
| +--rw forwarding-disaggregation | +--rw forwarding-disaggregation | |||
| +--rw forwarding-sub-layer* | +--rw forwarding-sub-layer* | |||
| forwarding-sub-layer-ref | forwarding-sub-layer-ref | |||
| 7. DetNet Configuration YANG Model | 7. DetNet Configuration YANG Model | |||
| <CODE BEGINS> | <CODE BEGINS> | |||
| module ietf-detnet { | module ietf-detnet { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-detnet"; | namespace "urn:ietf:params:xml:ns:yang:ietf-detnet"; | |||
| prefix ietf-detnet; | prefix ietf-detnet; | |||
| import ietf-yang-types { | ||||
| prefix yang; | ||||
| reference | ||||
| "RFC 6021 - Common YANG Data Types."; | ||||
| } | ||||
| import ietf-inet-types { | ||||
| prefix inet; | ||||
| reference | ||||
| "RFC 6991 - Common YANG Data Types."; | ||||
| } | ||||
| import ietf-ethertypes { | ||||
| prefix ethertypes; | ||||
| reference | ||||
| "RFC 8519 - YANG Data Model for Network Access Control | ||||
| Lists (ACLs)."; | ||||
| } | ||||
| import ietf-routing-types { | ||||
| prefix rt-types; | ||||
| reference | ||||
| "RFC 8294 - Common YANG Data Types for the Routing Area."; | ||||
| } | ||||
| import ietf-packet-fields { | ||||
| prefix packet-fields; | ||||
| reference | ||||
| "RFC 8519 - YANG Data Model for Network Access Control Lists | ||||
| (ACLs)."; | ||||
| } | ||||
| import ietf-interfaces { | ||||
| prefix if; | ||||
| reference | ||||
| "RFC 8343 - A YANG Data Model for Interface Management."; | ||||
| } | ||||
| import ieee802-dot1q-types { | ||||
| prefix dot1q-types; | ||||
| reference | ||||
| "IEEE 802.1Qcx-2020 - IEEE Standard for Local and Metropolitan | ||||
| Area Networks--Bridges and Bridged Networks Amendment 33: YANG | ||||
| Data Model for Connectivity Fault Management."; | ||||
| } | ||||
| organization | import ietf-yang-types { | |||
| "IETF DetNet Working Group"; | prefix yang; | |||
| contact | reference | |||
| "WG Web: <http://tools.ietf.org/wg/detnet/> | "RFC 6021 - Common YANG Data Types."; | |||
| WG List: <mailto: detnet@ietf.org> | } | |||
| import ietf-inet-types { | ||||
| prefix inet; | ||||
| reference | ||||
| "RFC 6991 - Common YANG Data Types."; | ||||
| } | ||||
| import ietf-ethertypes { | ||||
| prefix ethertypes; | ||||
| reference | ||||
| "RFC 8519 - YANG Data Model for Network Access Control | ||||
| Lists (ACLs)."; | ||||
| } | ||||
| import ietf-routing-types { | ||||
| prefix rt-types; | ||||
| reference | ||||
| "RFC 8294 - Common YANG Data Types for the Routing Area."; | ||||
| } | ||||
| import ietf-packet-fields { | ||||
| prefix packet-fields; | ||||
| reference | ||||
| "RFC 8519 - YANG Data Model for Network Access Control Lists | ||||
| (ACLs)."; | ||||
| } | ||||
| import ietf-interfaces { | ||||
| prefix if; | ||||
| reference | ||||
| "RFC 8343 - A YANG Data Model for Interface Management."; | ||||
| } | ||||
| import ieee802-dot1q-types { | ||||
| prefix dot1q-types; | ||||
| reference | ||||
| "IEEE 802.1Qcx-2020 - IEEE Standard for Local and Metropolitan | ||||
| Area Networks--Bridges and Bridged Networks Amendment 33: YANG | ||||
| Data Model for Connectivity Fault Management."; | ||||
| } | ||||
| Editor: Xuesong Geng | organization | |||
| <mailto:gengxuesong@huawei.com> | "IETF DetNet Working Group"; | |||
| contact | ||||
| "WG Web: <http://tools.ietf.org/wg/detnet/> | ||||
| WG List: <mailto: detnet@ietf.org> | ||||
| Editor: Yeoncheol Ryoo | Editor: Xuesong Geng | |||
| <mailto:dbduscjf@etri.re.kr> | <mailto:gengxuesong@huawei.com> | |||
| Editor: Don Fedyk | Editor: Yeoncheol Ryoo | |||
| <mailto:dfedyk@labn.net>; | <mailto:dbduscjf@etri.re.kr> | |||
| Editor: Reshad Rahman | Editor: Don Fedyk | |||
| <mailto:reshad@yahoo.com> | <mailto:dfedyk@labn.net>; | |||
| Editor: Mach Chen | Editor: Reshad Rahman | |||
| <mailto:mach.chen@huawei.com> | <mailto:reshad@yahoo.com> | |||
| Editor: Zhenqiang Li | Editor: Mach Chen | |||
| <mailto:lizhenqiang@chinamobile.com>"; | <mailto:mach.chen@huawei.com> | |||
| description | ||||
| "This YANG module describes the parameters needed | ||||
| for DetNet flow configuration and flow status | ||||
| reporting. | ||||
| Copyright (c) 2021 IETF Trust and the persons identified as | Editor: Zhenqiang Li | |||
| authors of the code. All rights reserved. | <mailto:lizhenqiang@chinamobile.com>"; | |||
| description | ||||
| "This YANG module describes the parameters needed | ||||
| for DetNet flow configuration and flow status | ||||
| reporting. | ||||
| Redistribution and use in source and binary forms, with or | Copyright (c) 2021 IETF Trust and the persons identified as | |||
| without modification, is permitted pursuant to, and subject to | authors of the code. All rights reserved. | |||
| the license terms contained in, the Simplified BSD License set | ||||
| forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (https://trustee.ietf.org/license-info). | ||||
| This version of this YANG module is part of RFC XXXX | Redistribution and use in source and binary forms, with or | |||
| (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | without modification, is permitted pursuant to, and subject to | |||
| for full legal notices. | the license terms contained in, the Simplified BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (https://trustee.ietf.org/license-info). | ||||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | This version of this YANG module is part of RFC XXXX | |||
| NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | |||
| 'MAY', and 'OPTIONAL' in this document are to be interpreted as | for full legal notices. | |||
| described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | ||||
| they appear in all capitals, as shown here. "; | ||||
| revision 2021-02-17 { | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| description | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | |||
| "initial revision"; | 'MAY', and 'OPTIONAL' in this document are to be interpreted as | |||
| reference | described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | |||
| "RFC XXXX: draft-ietf-detnet-yang-10"; | they appear in all capitals, as shown here. "; | |||
| } | ||||
| identity app-status { | revision 2021-02-17 { | |||
| description | description | |||
| "Base identity from which all application-status | "initial revision"; | |||
| status types are derived."; | reference | |||
| reference | "RFC XXXX: draft-ietf-detnet-yang-10"; | |||
| "draft-ietf-detnet-flow-information-model Section 5.8"; | } | |||
| } | ||||
| identity none { | identity app-status { | |||
| base app-status; | description | |||
| description | "Base identity from which all application-status | |||
| "This Application has no status. This type of status is | status types are derived."; | |||
| expected when the configuration is incomplete."; | reference | |||
| reference | "draft-ietf-detnet-flow-information-model Section 5.8"; | |||
| "draft-ietf-detnet-flow-information-model Section 5.8"; | } | |||
| } | ||||
| identity ready { | identity none { | |||
| base app-status; | base app-status; | |||
| description | description | |||
| "Application ingress/egress ready."; | "This Application has no status. This type of status is | |||
| reference | expected when the configuration is incomplete."; | |||
| "draft-ietf-detnet-flow-information-model Section 5.8"; | reference | |||
| } | "draft-ietf-detnet-flow-information-model Section 5.8"; | |||
| } | ||||
| identity failed { | identity ready { | |||
| base app-status; | base app-status; | |||
| description | description | |||
| "Application ingres/egresss failed."; | "Application ingress/egress ready."; | |||
| reference | reference | |||
| "draft-ietf-detnet-flow-information-model Section 5.8"; | "draft-ietf-detnet-flow-information-model Section 5.8"; | |||
| } | } | |||
| identity failed { | ||||
| base app-status; | ||||
| description | ||||
| "Application ingres/egresss failed."; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Section 5.8"; | ||||
| } | ||||
| identity out-of-service { | identity out-of-service { | |||
| base app-status; | base app-status; | |||
| description | description | |||
| "Application Administratively blocked."; | "Application Administratively blocked."; | |||
| reference | reference | |||
| "draft-ietf-detnet-flow-information-model Section 5.8"; | "draft-ietf-detnet-flow-information-model Section 5.8"; | |||
| } | } | |||
| identity partial-failed { | identity partial-failed { | |||
| base app-status; | base app-status; | |||
| description | description | |||
| "This is an Application with one or more Egress ready, and one | "This is an Application with one or more Egress ready, and one | |||
| or more Egress failed. The DetNet flow can be used if the | or more Egress failed. The DetNet flow can be used if the | |||
| Ingress is Ready."; | Ingress is Ready."; | |||
| reference | reference | |||
| "draft-ietf-detnet-flow-information-model Section 5.8"; | "draft-ietf-detnet-flow-information-model Section 5.8"; | |||
| } | } | |||
| typedef app-flow-ref { | typedef app-flow-ref { | |||
| type leafref { | type leafref { | |||
| path "/ietf-detnet:detnet" | path "/ietf-detnet:detnet" | |||
| + "/ietf-detnet:app-flows" | + "/ietf-detnet:app-flows" | |||
| + "/ietf-detnet:app-flow" | + "/ietf-detnet:app-flow" | |||
| + "/ietf-detnet:name"; | + "/ietf-detnet:name"; | |||
| } | ||||
| description | ||||
| "This is an Application Reference."; | ||||
| } | } | |||
| description | ||||
| "This is an Application Reference."; | ||||
| } | ||||
| typedef service-sub-layer-ref { | typedef service-sub-layer-ref { | |||
| type leafref { | type leafref { | |||
| path "/ietf-detnet:detnet" | path "/ietf-detnet:detnet" | |||
| + "/ietf-detnet:service-sub-layer" | + "/ietf-detnet:service-sub-layer" | |||
| + "/ietf-detnet:service-sub-layer-list" | + "/ietf-detnet:service-sub-layer-list" | |||
| + "/ietf-detnet:name"; | + "/ietf-detnet:name"; | |||
| } | ||||
| description | ||||
| "This is a Service sub-layer Reference."; | ||||
| } | ||||
| typedef forwarding-sub-layer-ref { | ||||
| type leafref { | ||||
| path "/ietf-detnet:detnet" | ||||
| + "/ietf-detnet:forwarding-sub-layer" | ||||
| + "/ietf-detnet:forwarding-sub-layer-list" | ||||
| + "/ietf-detnet:name"; | ||||
| } | ||||
| description | ||||
| "This is a Forwarding sub-layer Reference."; | ||||
| } | } | |||
| description | ||||
| "This is a Service sub-layer Reference."; | ||||
| } | ||||
| typedef forwarding-sub-layer-ref { | typedef traffic-profile-ref { | |||
| type leafref { | type leafref { | |||
| path "/ietf-detnet:detnet" | path "/ietf-detnet:detnet" | |||
| + "/ietf-detnet:forwarding-sub-layer" | + "/ietf-detnet:traffic-profile" | |||
| + "/ietf-detnet:forwarding-sub-layer-list" | + "/ietf-detnet:profile-name"; | |||
| + "/ietf-detnet:name"; | } | |||
| description | ||||
| "This is a Traffic Profile Reference."; | ||||
| } | } | |||
| description | ||||
| "This is a Forwarding sub-layer Reference."; | ||||
| } | ||||
| typedef traffic-profile-ref { | typedef ipsec-spi { | |||
| type leafref { | type uint32 { | |||
| path "/ietf-detnet:detnet" | range "1..max"; | |||
| + "/ietf-detnet:traffic-profile" | } | |||
| + "/ietf-detnet:profile-name"; | description | |||
| "IPsec Security Parameters Index."; | ||||
| reference | ||||
| "IETF RFC 6071"; | ||||
| } | } | |||
| description | ||||
| "This is a Traffic Profile Reference."; | ||||
| } | ||||
| typedef ipsec-spi { | typedef service-operation-type { | |||
| type uint32 { | type enumeration { | |||
| range "1..max"; | enum service-initiation { | |||
| description | ||||
| "This is an initiating service sub-layer encapsulation."; | ||||
| } | ||||
| enum service-termination { | ||||
| description | ||||
| "Operation for DetNet service sub-layer decapsulation."; | ||||
| } | ||||
| enum service-relay { | ||||
| description | ||||
| "Operation for DetNet service sub-layer swap."; | ||||
| } | ||||
| enum non-detnet { | ||||
| description | ||||
| "No operation for DetNet service sub-layer."; | ||||
| } | ||||
| } | ||||
| description | ||||
| "Operation type identifies the behavior for this service | ||||
| sub-layer instance. Operations are described as unidirectional | ||||
| but a service sub-layer may combine operation types."; | ||||
| } | } | |||
| description | ||||
| "IPsec Security Parameters Index."; | ||||
| reference | ||||
| "IETF RFC 6071"; | ||||
| } | ||||
| typedef service-operation-type { | typedef forwarding-operations-type { | |||
| type enumeration { | type enumeration { | |||
| enum service-initiation { | enum impose-and-forward { | |||
| description | description | |||
| "This is an initiating service sub-layer encapsulation."; | "This operation impose outgoing label(s) and forward to | |||
| next-hop."; | ||||
| reference | ||||
| " A YANG Data Model for MPLS Base | ||||
| draft-ietf-mpls-base-yang."; | ||||
| } | ||||
| enum pop-and-forward { | ||||
| description | ||||
| "This operation pops the incoming label and forwards to | ||||
| the next-hop."; | ||||
| reference | ||||
| " A YANG Data Model for MPLS Base | ||||
| draft-ietf-mpls-base-yang."; | ||||
| } | ||||
| enum pop-impose-and-forward { | ||||
| description | ||||
| "This operation pops the incoming label, imposes one or | ||||
| more outgoing label(s) and forwards to the next-hop."; | ||||
| reference | ||||
| " A YANG Data Model for MPLS Base | ||||
| draft-ietf-mpls-base-yang."; | ||||
| } | ||||
| enum swap-and-forward { | ||||
| description | ||||
| "This operation swaps incoming label, with an outgoing | ||||
| label and forwards to the next-hop."; | ||||
| reference | ||||
| " A YANG Data Model for MPLS Base | ||||
| draft-ietf-mpls-base-yang."; | ||||
| } | ||||
| enum forward { | ||||
| description | ||||
| "This operation forward to next-hop."; | ||||
| } | ||||
| enum pop-and-lookup { | ||||
| description | ||||
| "This operation pops incoming label and performs a | ||||
| lookup."; | ||||
| } | ||||
| } | } | |||
| enum service-termination { | description | |||
| description | "MPLS operations types. This is an enum modeled after the | |||
| "Operation for DetNet service sub-layer decapsulation."; | MPLS enum. The first 4 enums are the same as A YANG Data | |||
| Model for MPLS Base. draft-ietf-mpls-base-yang."; | ||||
| } | ||||
| typedef service-protection-type { | ||||
| type enumeration { | ||||
| enum none { | ||||
| description | ||||
| "No service protection provided."; | ||||
| } | ||||
| enum replication { | ||||
| description | ||||
| "A Packet Replication Function (PRF) replicates DetNet | ||||
| flow packets and forwards them to one or more next hops in | ||||
| the DetNet domain. The number of packet copies sent to | ||||
| each next hop is a DetNet flow specific parameter at the | ||||
| node doing the replication. PRF can be implemented by an | ||||
| edge node, a relay node, or an end system."; | ||||
| } | ||||
| enum elimination { | ||||
| description | ||||
| "A Packet Elimination Function (PEF) eliminates duplicate | ||||
| copies of packets to prevent excess packets flooding the | ||||
| network or duplicate packets being sent out of the DetNet | ||||
| domain. PEF can be implemented by an edge node, a relay | ||||
| node, or an end system."; | ||||
| } | ||||
| enum ordering { | ||||
| description | ||||
| "A Packet Ordering Function (POF) re-orders packets within | ||||
| a DetNet flow that are received out of order. This | ||||
| function can be implemented by an edge node, a relay node, | ||||
| or an end system."; | ||||
| } | ||||
| enum elimination-ordering { | ||||
| description | ||||
| "A combination of PEF and POF that can be implemented by | ||||
| an edge node, a relay node, or an end system."; | ||||
| } | ||||
| enum elimination-replication { | ||||
| description | ||||
| "A combination of PEF and PRF that can be implemented by | ||||
| an edge node, a relay node, or an end system."; | ||||
| } | ||||
| enum elimination-ordering-replication { | ||||
| description | ||||
| "A combination of PEF, POF and PRF that can be implemented | ||||
| by an edge node, a relay node, or an end system."; | ||||
| } | ||||
| } | } | |||
| enum service-relay { | description | |||
| description | "This typedef describes the service protection types."; | |||
| "Operation for DetNet service sub-layer swap."; | } | |||
| typedef sequence-number-generation-type { | ||||
| type enumeration { | ||||
| enum copy-from-app-flow { | ||||
| description | ||||
| "This type means copy the app-flow sequence number to the | ||||
| DetNet-flow."; | ||||
| } | ||||
| enum generate-by-detnet-flow { | ||||
| description | ||||
| "This type means generate the sequence number by the | ||||
| DetNet flow."; | ||||
| } | ||||
| } | } | |||
| enum non-detnet { | description | |||
| description | "An enumeration for the sequence number behaviors supported."; | |||
| "No operation for DetNet service sub-layer."; | } | |||
| typedef sequence-number-field { | ||||
| type enumeration { | ||||
| enum zero-sn { | ||||
| description | ||||
| "No DetNet sequence number field is used."; | ||||
| } | ||||
| enum short-sn { | ||||
| value 16; | ||||
| description | ||||
| "A 16-bit DetNet sequence number field is used."; | ||||
| } | ||||
| enum long-sn { | ||||
| value 28; | ||||
| description | ||||
| "A 28-bit DetNet sequence number field is used."; | ||||
| } | ||||
| } | } | |||
| description | ||||
| "This type captures the sequence number behavior."; | ||||
| } | } | |||
| description | ||||
| "Operation type identifies the behavior for this service | ||||
| sub-layer instance. Operations are described as unidirectional | ||||
| but a service sub-layer may combine operation types."; | ||||
| } | ||||
| typedef forwarding-operations-type { | grouping ip-header { | |||
| type enumeration { | description | |||
| enum impose-and-forward { | "This grouping captures the IPv4/IPv6 packet header | |||
| information. it is modeled after existing fields."; | ||||
| leaf src-ip-address { | ||||
| type inet:ip-address-no-zone; | ||||
| description | description | |||
| "This operation impose outgoing label(s) and forward to | "The source IP address in the header."; | |||
| next-hop."; | ||||
| reference | reference | |||
| " A YANG Data Model for MPLS Base | "RFC 6021 Common YANG Data Types"; | |||
| draft-ietf-mpls-base-yang."; | ||||
| } | } | |||
| enum pop-and-forward { | leaf dest-ip-address { | |||
| type inet:ip-address-no-zone; | ||||
| description | description | |||
| "This operation pops the incoming label and forwards to | "The destination IP address in the header."; | |||
| the next-hop."; | ||||
| reference | reference | |||
| " A YANG Data Model for MPLS Base | "RFC 6021 Common YANG Data Types"; | |||
| draft-ietf-mpls-base-yang."; | ||||
| } | } | |||
| enum pop-impose-and-forward { | leaf protocol-next-header { | |||
| type uint8; | ||||
| description | description | |||
| "This operation pops the incoming label, imposes one or | "Internet Protocol number. Refers to the protocol of the | |||
| more outgoing label(s) and forwards to the next-hop."; | payload. In IPv6, this field is known as 'next-header', | |||
| and if extension headers are present, the protocol is | ||||
| present in the 'upper-layer' header."; | ||||
| reference | reference | |||
| " A YANG Data Model for MPLS Base | "RFC 791: Internet Protocol | |||
| draft-ietf-mpls-base-yang."; | RFC 8200: Internet Protocol, Version 6 (IPv6) | |||
| Specification."; | ||||
| } | } | |||
| enum swap-and-forward { | leaf dscp { | |||
| type inet:dscp; | ||||
| description | description | |||
| "This operation swaps incoming label, with an outgoing | "The traffic class value in the header."; | |||
| label and forwards to the next-hop."; | ||||
| reference | reference | |||
| " A YANG Data Model for MPLS Base | "RFC 6021 Common YANG Data Types"; | |||
| draft-ietf-mpls-base-yang."; | ||||
| } | } | |||
| enum forward { | leaf flow-label { | |||
| type inet:ipv6-flow-label; | ||||
| description | description | |||
| "This operation forward to next-hop."; | "The flow label value of the header.IPV6 only."; | |||
| reference | ||||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | } | |||
| enum pop-and-lookup { | leaf source-port { | |||
| type inet:port-number; | ||||
| description | description | |||
| "This operation pops incoming label and performs a | "The source port number."; | |||
| lookup."; | reference | |||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | ||||
| leaf destination-port { | ||||
| type inet:port-number; | ||||
| description | ||||
| "The destination port number."; | ||||
| reference | ||||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | } | |||
| } | } | |||
| description | ||||
| "MPLS operations types. This is an enum modeled after the | ||||
| MPLS enum. The first 4 enums are the same as A YANG Data | ||||
| Model for MPLS Base. draft-ietf-mpls-base-yang."; | ||||
| } | ||||
| typedef service-protection-type { | grouping l2-header { | |||
| type enumeration { | description | |||
| enum none { | "The Ethernet or TSN packet header information."; | |||
| leaf source-mac-address { | ||||
| type yang:mac-address; | ||||
| description | description | |||
| "No service protection provided."; | "The source MAC address value of the Ethernet header."; | |||
| } | } | |||
| enum replication { | leaf destination-mac-address { | |||
| type yang:mac-address; | ||||
| description | description | |||
| "A Packet Replication Function (PRF) replicates DetNet | "The destination MAC address value of the Ethernet header."; | |||
| flow packets and forwards them to one or more next hops in | ||||
| the DetNet domain. The number of packet copies sent to | ||||
| each next hop is a DetNet flow specific parameter at the | ||||
| node doing the replication. PRF can be implemented by an | ||||
| edge node, a relay node, or an end system."; | ||||
| } | } | |||
| enum elimination { | leaf ethertype { | |||
| type ethertypes:ethertype; | ||||
| description | description | |||
| "A Packet Elimination Function (PEF) eliminates duplicate | "The Ethernet packet type value of the Ethernet header."; | |||
| copies of packets to prevent excess packets flooding the | ||||
| network or duplicate packets being sent out of the DetNet | ||||
| domain. PEF can be implemented by an edge node, a relay | ||||
| node, or an end system."; | ||||
| } | } | |||
| enum ordering { | leaf vlan-id { | |||
| type dot1q-types:vlanid; | ||||
| description | description | |||
| "A Packet Ordering Function (POF) re-orders packets within | "The VLAN value of the Ethernet header."; | |||
| a DetNet flow that are received out of order. This | reference | |||
| function can be implemented by an edge node, a relay node, | "IEEE 802.1Qcx-2020."; | |||
| or an end system."; | ||||
| } | } | |||
| enum elimination-ordering { | leaf pcp { | |||
| type dot1q-types:priority-type; | ||||
| description | description | |||
| "A combination of PEF and POF that can be implemented by | "The priority value of the Ethernet header."; | |||
| an edge node, a relay node, or an end system."; | reference | |||
| "IEEE 802.1Qcx-2020."; | ||||
| } | } | |||
| enum elimination-replication { | } | |||
| grouping destination-ip-port-id { | ||||
| description | ||||
| "The TCP/UDP port(source/destination) identification | ||||
| information."; | ||||
| container destination-port { | ||||
| uses packet-fields:port-range-or-operator; | ||||
| description | description | |||
| "A combination of PEF and PRF that can be implemented by | "This grouping captures the destination port fields."; | |||
| an edge node, a relay node, or an end system."; | ||||
| } | } | |||
| enum elimination-ordering-replicaiton { | } | |||
| grouping source-ip-port-id { | ||||
| description | ||||
| "The TCP/UDP port(source/destination) identification | ||||
| information."; | ||||
| container source-port { | ||||
| uses packet-fields:port-range-or-operator; | ||||
| description | description | |||
| "A combination of PEF, POF and PRF that can be implemented | "This grouping captures the source port fields."; | |||
| by an edge node, a relay node, or an end system."; | ||||
| } | } | |||
| } | } | |||
| description | ||||
| "This typedef describes the service protection types."; | ||||
| } | ||||
| typedef sequence-number-generation-type { | grouping ip-flow-id { | |||
| type enumeration { | description | |||
| enum copy-from-app-flow { | "The IPv4/IPv6 packet header identification information."; | |||
| leaf src-ip-prefix { | ||||
| type inet:ip-prefix; | ||||
| description | description | |||
| "This type means copy the app-flow sequence number to the | "The source IP prefix."; | |||
| DetNet-flow."; | reference | |||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | } | |||
| enum generate-by-detnet-flow { | leaf dest-ip-prefix { | |||
| type inet:ip-prefix; | ||||
| description | description | |||
| "This type means generate the sequence number by the | "The destination IP prefix."; | |||
| DetNet flow."; | reference | |||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | } | |||
| } | leaf protocol-next-header { | |||
| description | type uint8; | |||
| "An enumeration for the sequence number behaviors supported."; | ||||
| } | ||||
| typedef sequence-number-field { | ||||
| type enumeration { | ||||
| enum zero-sn { | ||||
| description | description | |||
| "No DetNet sequence number field is used."; | "Internet Protocol number. Refers to the protocol of the | |||
| payload. In IPv6, this field is known as 'next-header', and | ||||
| if extension headers are present, the protocol is present in | ||||
| the 'upper-layer' header."; | ||||
| reference | ||||
| "RFC 791: Internet Protocol | ||||
| RFC 8200: Internet Protocol, Version 6 (IPv6) | ||||
| Specification."; | ||||
| } | } | |||
| enum short-sn { | leaf dscp { | |||
| value 16; | type inet:dscp; | |||
| description | description | |||
| "A 16-bit DetNet sequence number field is used."; | "The traffic class value in the header."; | |||
| reference | ||||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | } | |||
| enum long-sn { | leaf flow-label { | |||
| value 28; | type inet:ipv6-flow-label; | |||
| description | description | |||
| "A 28-bit DetNet sequence number field is used."; | "The flow label value of the header."; | |||
| reference | ||||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | ||||
| uses source-ip-port-id; | ||||
| uses destination-ip-port-id; | ||||
| leaf ipsec-spi { | ||||
| type ipsec-spi; | ||||
| description | ||||
| "IPsec Security Parameters Index of the Security | ||||
| Association."; | ||||
| reference | ||||
| "IETF RFC 6071 IP Security (IPsec) and Internet Key Exchange | ||||
| (IKE) Document Roadmap."; | ||||
| } | } | |||
| } | } | |||
| description | ||||
| "This type captures the sequence number behavior."; | ||||
| } | ||||
| grouping ip-header { | ||||
| description | ||||
| "This grouping captures the IPv4/IPv6 packet header | ||||
| information. it is modeled after existing fields."; | ||||
| leaf src-ip-address { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "The source IP address in the header."; | ||||
| reference | ||||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | ||||
| leaf dest-ip-address { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "The destination IP address in the header."; | ||||
| reference | ||||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | ||||
| leaf protocol-next-header { | ||||
| type uint8; | ||||
| description | ||||
| "Internet Protocol number. Refers to the protocol of the | ||||
| payload. In IPv6, this field is known as 'next-header', | ||||
| and if extension headers are present, the protocol is | ||||
| present in the 'upper-layer' header."; | ||||
| reference | ||||
| "RFC 791: Internet Protocol | ||||
| RFC 8200: Internet Protocol, Version 6 (IPv6) Specification."; | ||||
| } | ||||
| leaf dscp { | ||||
| type inet:dscp; | ||||
| description | ||||
| "The traffic class value in the header."; | ||||
| reference | ||||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | ||||
| leaf flow-label { | ||||
| type inet:ipv6-flow-label; | ||||
| description | ||||
| "The flow label value of the header.IPV6 only."; | ||||
| reference | ||||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | ||||
| leaf source-port { | ||||
| type inet:port-number; | ||||
| description | ||||
| "The source port number."; | ||||
| reference | ||||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | ||||
| leaf destination-port { | ||||
| type inet:port-number; | ||||
| description | ||||
| "The destination port number."; | ||||
| reference | ||||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | ||||
| } | ||||
| grouping l2-header { | ||||
| description | ||||
| "The Ethernet or TSN packet header information."; | ||||
| leaf source-mac-address { | ||||
| type yang:mac-address; | ||||
| description | ||||
| "The source MAC address value of the Ethernet header."; | ||||
| } | ||||
| leaf destination-mac-address { | ||||
| type yang:mac-address; | ||||
| description | ||||
| "The destination MAC address value of the Ethernet header."; | ||||
| } | ||||
| leaf ethertype { | ||||
| type ethertypes:ethertype; | ||||
| description | ||||
| "The Ethernet packet type value of the Ethernet header."; | ||||
| } | ||||
| leaf vlan-id { | ||||
| type dot1q-types:vlanid; | ||||
| description | ||||
| "The VLAN value of the Ethernet header."; | ||||
| reference | ||||
| "IEEE 802.1Qcx-2020."; | ||||
| } | ||||
| leaf pcp { | ||||
| type dot1q-types:priority-type; | ||||
| description | ||||
| "The priority value of the Ethernet header."; | ||||
| reference | ||||
| "IEEE 802.1Qcx-2020."; | ||||
| } | ||||
| } | ||||
| grouping destination-ip-port-id { | ||||
| description | ||||
| "The TCP/UDP port(source/destination) identification | ||||
| information."; | ||||
| container destination-port { | ||||
| uses packet-fields:port-range-or-operator; | ||||
| description | ||||
| "This grouping captures the destination port fields."; | ||||
| } | ||||
| } | ||||
| grouping source-ip-port-id { | ||||
| description | ||||
| "The TCP/UDP port(source/destination) identification | ||||
| information."; | ||||
| container source-port { | ||||
| uses packet-fields:port-range-or-operator; | ||||
| description | ||||
| "This grouping captures the source port fields."; | ||||
| } | ||||
| } | ||||
| grouping ip-flow-id { | grouping mpls-flow-id { | |||
| description | ||||
| "The IPv4/IPv6 packet header identification information."; | ||||
| leaf src-ip-prefix { | ||||
| type inet:ip-prefix; | ||||
| description | ||||
| "The source IP prefix."; | ||||
| reference | ||||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | ||||
| leaf dest-ip-prefix { | ||||
| type inet:ip-prefix; | ||||
| description | ||||
| "The destination IP prefix."; | ||||
| reference | ||||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | ||||
| leaf protocol-next-header { | ||||
| type uint8; | ||||
| description | ||||
| "Internet Protocol number. Refers to the protocol of the | ||||
| payload. In IPv6, this field is known as 'next-header', and | ||||
| if extension headers are present, the protocol is present in | ||||
| the 'upper-layer' header."; | ||||
| reference | ||||
| "RFC 791: Internet Protocol | ||||
| RFC 8200: Internet Protocol, Version 6 (IPv6) Specification."; | ||||
| } | ||||
| leaf dscp { | ||||
| type inet:dscp; | ||||
| description | ||||
| "The traffic class value in the header."; | ||||
| reference | ||||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | ||||
| leaf flow-label { | ||||
| type inet:ipv6-flow-label; | ||||
| description | ||||
| "The flow label value of the header."; | ||||
| reference | ||||
| "RFC 6021 Common YANG Data Types"; | ||||
| } | ||||
| uses source-ip-port-id; | ||||
| uses destination-ip-port-id; | ||||
| leaf ipsec-spi { | ||||
| type ipsec-spi; | ||||
| description | description | |||
| "IPsec Security Parameters Index of the Security Association."; | "The MPLS packet header identification information."; | |||
| reference | choice label-space { | |||
| "IETF RFC 6071 IP Security (IPsec) and Internet Key Exchange | description | |||
| (IKE) Document Roadmap."; | "Designates the label space being used."; | |||
| case context-label-space { | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| case platform-label-space { | ||||
| leaf label { | ||||
| type rt-types:mpls-label; | ||||
| description | ||||
| "This is the case for Platform label space."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | } | |||
| } | grouping data-flow-spec { | |||
| grouping mpls-flow-id { | ||||
| description | ||||
| "The MPLS packet header identification information."; | ||||
| choice label-space { | ||||
| description | description | |||
| "Designates the label space being used."; | "app-flow identification."; | |||
| case context-label-space { | choice data-flow-type { | |||
| uses rt-types:mpls-label-stack; | description | |||
| } | "The Application flow type choices."; | |||
| case platform-label-space { | container tsn-app-flow { | |||
| leaf label { | uses l2-header; | |||
| type rt-types:mpls-label; | ||||
| description | description | |||
| "This is the case for Platform label space."; | "The L2 header for application."; | |||
| } | ||||
| container ip-app-flow { | ||||
| uses ip-flow-id; | ||||
| description | ||||
| "The IP header for application."; | ||||
| } | ||||
| container mpls-app-flow { | ||||
| uses mpls-flow-id; | ||||
| description | ||||
| "The MPLS header for application."; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | ||||
| grouping data-flow-spec { | grouping detnet-flow-spec { | |||
| description | ||||
| "app-flow identification."; | ||||
| choice data-flow-type { | ||||
| description | description | |||
| "The Application flow type choices."; | "detnet-flow identification."; | |||
| container tsn-app-flow { | choice detnet-flow-type { | |||
| uses l2-header; | ||||
| description | ||||
| "The L2 header for application."; | ||||
| } | ||||
| container ip-app-flow { | ||||
| uses ip-flow-id; | ||||
| description | ||||
| "The IP header for application."; | ||||
| } | ||||
| container mpls-app-flow { | ||||
| uses mpls-flow-id; | ||||
| description | description | |||
| "The MPLS header for application."; | "The Detnet flow type choices."; | |||
| case ip-detnet-flow { | ||||
| uses ip-flow-id; | ||||
| } | ||||
| case mpls-detnet-flow { | ||||
| uses mpls-flow-id; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | ||||
| grouping detnet-flow-spec { | grouping app-flows-group { | |||
| description | ||||
| "detnet-flow identification."; | ||||
| choice detnet-flow-type { | ||||
| description | description | |||
| "The Detnet flow type choices."; | "Incoming or outgoing app-flow reference group."; | |||
| case ip-detnet-flow { | leaf-list app-flow-list { | |||
| uses ip-flow-id; | type app-flow-ref; | |||
| } | description | |||
| case mpls-detnet-flow { | "List of ingress or egress app-flows."; | |||
| uses mpls-flow-id; | ||||
| } | } | |||
| } | } | |||
| } | grouping service-sub-layer-group { | |||
| grouping app-flows-group { | ||||
| description | ||||
| "Incoming or outgoing app-flow reference group."; | ||||
| leaf-list app-flow-list { | ||||
| type app-flow-ref; | ||||
| description | ||||
| "List of ingress or egress app-flows."; | ||||
| } | ||||
| } | ||||
| grouping service-sub-layer-group { | ||||
| description | ||||
| "Incoming or outgoing service sub-layer reference group."; | ||||
| leaf-list service-sub-layer { | ||||
| type service-sub-layer-ref; | ||||
| description | ||||
| "List of incoming or outgoing service sub-layers that have | ||||
| to aggregate or disaggregate."; | ||||
| } | ||||
| } | ||||
| grouping forwarding-sub-layer-group { | ||||
| description | ||||
| "Incoming or outgoing forwarding sub-layer reference group."; | ||||
| leaf-list forwarding-sub-layer { | ||||
| type forwarding-sub-layer-ref; | ||||
| description | description | |||
| "List of incoming or outgoing forwarding sub-layers that | "Incoming or outgoing service sub-layer reference group."; | |||
| have to aggregate or disaggregate."; | leaf-list service-sub-layer { | |||
| type service-sub-layer-ref; | ||||
| description | ||||
| "List of incoming or outgoing service sub-layers that have | ||||
| to aggregate or disaggregate."; | ||||
| } | ||||
| } | } | |||
| } | ||||
| grouping detnet-header { | grouping forwarding-sub-layer-group { | |||
| description | ||||
| "DetNet header info for DetNet encapsulation or swap."; | ||||
| choice header-type { | ||||
| description | description | |||
| "The choice of DetNet header type."; | "Incoming or outgoing forwarding sub-layer reference group."; | |||
| case detnet-mpls-header { | leaf-list forwarding-sub-layer { | |||
| description | type forwarding-sub-layer-ref; | |||
| "MPLS label stack for DetNet MPLS encapsulation or | ||||
| forwarding."; | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| case detnet-ip-header { | ||||
| description | description | |||
| "IPv4/IPv6 packet header for DetNet IP encapsulation."; | "List of incoming or outgoing forwarding sub-layers that | |||
| uses ip-header; | have to aggregate or disaggregate."; | |||
| } | } | |||
| } | } | |||
| } | ||||
| grouping detnet-app-next-hop-content { | grouping detnet-header { | |||
| description | ||||
| "Generic parameters of DetNet next hops."; | ||||
| choice next-hop-options { | ||||
| mandatory true; | ||||
| description | description | |||
| "Options for next hops. It is expected that further cases | "DetNet header info for DetNet encapsulation or swap."; | |||
| will be added through | choice header-type { | |||
| augments from other modules, e.g., for recursive | ||||
| next hops."; | ||||
| case simple-next-hop { | ||||
| description | description | |||
| "This case represents a simple next hop consisting of the | "The choice of DetNet header type."; | |||
| next-hop address and/or outgoing interface. | case detnet-mpls-header { | |||
| Modules for address families MUST augment this case with a | ||||
| leaf containing a next-hop address of that address | ||||
| family."; | ||||
| leaf outgoing-interface { | ||||
| type if:interface-ref; | ||||
| description | description | |||
| "The outgoing interface, if this is a whole interface."; | "MPLS label stack for DetNet MPLS encapsulation or | |||
| forwarding."; | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | } | |||
| choice flow-type { | case detnet-ip-header { | |||
| description | description | |||
| "The flow type choices."; | "IPv4/IPv6 packet header for DetNet IP encapsulation."; | |||
| case ip { | uses ip-header; | |||
| leaf next-hop-address { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "The IP next hop case."; | ||||
| } | ||||
| } | ||||
| case mpls { | ||||
| uses rt-types:mpls-label-stack; | ||||
| description | ||||
| "The MPLS Label stack next hop case."; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| case next-hop-list { | } | |||
| grouping detnet-app-next-hop-content { | ||||
| description | ||||
| "Generic parameters of DetNet next hops."; | ||||
| choice next-hop-options { | ||||
| mandatory true; | ||||
| description | description | |||
| "Container for multiple next hops."; | "Options for next hops. It is expected that further cases | |||
| list next-hop { | will be added through | |||
| key "hop-index"; | augments from other modules, e.g., for recursive | |||
| next hops."; | ||||
| case simple-next-hop { | ||||
| description | description | |||
| "An entry in a next-hop list. Modules for address | "This case represents a simple next hop consisting of the | |||
| families MUST augment this list with a leaf containing a | next-hop address and/or outgoing interface. | |||
| next-hop address of that address family."; | Modules for address families MUST augment this case with a | |||
| leaf hop-index { | leaf containing a next-hop address of that address | |||
| type uint8; | family."; | |||
| description | ||||
| "A user-specified identifier utilized to uniquely | ||||
| reference the next-hop entry in the next-hop list. | ||||
| The value of this index has no semantic meaning other | ||||
| than for referencing the entry."; | ||||
| } | ||||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description | description | |||
| "Name of the outgoing interface."; | "The outgoing interface, if this is a whole interface."; | |||
| } | } | |||
| choice flow-type { | choice flow-type { | |||
| description | description | |||
| "The flow types supported."; | "The flow type choices."; | |||
| case ip { | case ip { | |||
| leaf next-hop-address { | leaf next-hop-address { | |||
| type inet:ip-address; | type inet:ip-address-no-zone; | |||
| description | description | |||
| "This is the IP flow type next hop."; | "The IP next hop case."; | |||
| } | } | |||
| } | } | |||
| case mpls { | case mpls { | |||
| uses rt-types:mpls-label-stack; | uses rt-types:mpls-label-stack; | |||
| description | ||||
| "The MPLS Label stack next hop case."; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | case next-hop-list { | |||
| } | ||||
| } | ||||
| grouping detnet-forwarding-next-hop-content { | ||||
| description | ||||
| "Generic parameters of DetNet next hops."; | ||||
| choice next-hop-options { | ||||
| mandatory true; | ||||
| description | ||||
| "Options for next hops. | ||||
| It is expected that further cases will be added through | ||||
| augments from other modules, e.g., for recursive | ||||
| next hops."; | ||||
| case simple-next-hop { | ||||
| description | ||||
| "This case represents a simple next hop consisting of the | ||||
| next-hop address and/or outgoing interface. | ||||
| Modules for address families MUST augment this case with a | ||||
| leaf containing a next-hop address of that address | ||||
| family."; | ||||
| leaf outgoing-interface { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "This is the interface as an outgoing type."; | ||||
| } | ||||
| choice flow-type { | ||||
| description | description | |||
| "These are the flow type next hop choices."; | "Container for multiple next hops."; | |||
| case ip { | list next-hop { | |||
| choice operation-type { | key "hop-index"; | |||
| description | ||||
| "An entry in a next-hop list. Modules for address | ||||
| families MUST augment this list with a leaf containing a | ||||
| next-hop address of that address family."; | ||||
| leaf hop-index { | ||||
| type uint8; | ||||
| description | description | |||
| "This is the IP forwarding operation choices."; | "A user-specified identifier utilized to uniquely | |||
| case ip-forwarding { | reference the next-hop entry in the next-hop list. | |||
| The value of this index has no semantic meaning other | ||||
| than for referencing the entry."; | ||||
| } | ||||
| leaf outgoing-interface { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "Name of the outgoing interface."; | ||||
| } | ||||
| choice flow-type { | ||||
| description | ||||
| "The flow types supported."; | ||||
| case ip { | ||||
| leaf next-hop-address { | leaf next-hop-address { | |||
| type inet:ip-address; | type inet:ip-address-no-zone; | |||
| description | description | |||
| "This is an IP address as a next hop."; | "This is the IP flow type next hop."; | |||
| } | } | |||
| } | } | |||
| case mpls-over-ip-encapsulation { | case mpls { | |||
| uses ip-header; | uses rt-types:mpls-label-stack; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| case mpls { | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| case next-hop-list { | } | |||
| grouping detnet-forwarding-next-hop-content { | ||||
| description | ||||
| "Generic parameters of DetNet next hops."; | ||||
| choice next-hop-options { | ||||
| mandatory true; | ||||
| description | description | |||
| "Container for multiple next hops."; | "Options for next hops. | |||
| list next-hop { | It is expected that further cases will be added through | |||
| key "hop-index"; | augments from other modules, e.g., for recursive | |||
| next hops."; | ||||
| case simple-next-hop { | ||||
| description | description | |||
| "An entry in a next-hop list. Modules for address | "This case represents a simple next hop consisting of the | |||
| families MUST augment this list with a leaf containing a | next-hop address and/or outgoing interface. | |||
| next-hop address of that address family."; | Modules for address families MUST augment this case with a | |||
| leaf hop-index { | leaf containing a next-hop address of that address | |||
| type uint8; | family."; | |||
| description | ||||
| "The value of the index for a hop."; | ||||
| } | ||||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description | description | |||
| "This is a whole interface as the next hop."; | "This is the interface as an outgoing type."; | |||
| } | } | |||
| choice flow-type { | choice flow-type { | |||
| description | description | |||
| "These are the flow type next hop choices."; | "These are the flow type next hop choices."; | |||
| case ip { | case ip { | |||
| choice operation-type { | choice operation-type { | |||
| description | description | |||
| "These are the next hop choices."; | "This is the IP forwarding operation choices."; | |||
| case ip-forwarding { | case ip-forwarding { | |||
| leaf next-hop-address { | leaf next-hop-address { | |||
| type inet:ip-address; | type inet:ip-address-no-zone; | |||
| description | description | |||
| "This is an IP address as a next hop."; | "This is an IP address as a next hop."; | |||
| } | } | |||
| } | } | |||
| case mpls-over-ip-encapsulation { | case mpls-over-ip-encapsulation { | |||
| uses ip-header; | uses ip-header; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| case mpls { | case mpls { | |||
| uses rt-types:mpls-label-stack; | uses rt-types:mpls-label-stack; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | case next-hop-list { | |||
| } | ||||
| } | ||||
| container detnet { | ||||
| description | ||||
| "The top level DetNet container. This contains | ||||
| applications, service sub-layers and forwarding sub-layers | ||||
| as well as the traffic profiles."; | ||||
| list traffic-profile { | ||||
| key "profile-name"; | ||||
| description | ||||
| "A traffic profile."; | ||||
| leaf profile-name { | ||||
| type string; | ||||
| description | ||||
| "An Aggregation group ID. Zero means the service is not | ||||
| part of a group."; | ||||
| } | ||||
| container traffic-requirements { | ||||
| description | ||||
| "This defines the attributes of the App-flow | ||||
| regarding bandwidth, latency, latency variation, loss, and | ||||
| misordering tolerance."; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Section 4.2"; | ||||
| leaf min-bandwidth { | ||||
| type uint64; | ||||
| units "bps"; | ||||
| description | ||||
| "This is the minimum bandwidth that has to be | ||||
| guaranteed for the DetNet service. MinBandwidth is | ||||
| specified in octets per second."; | ||||
| } | ||||
| leaf max-latency { | ||||
| type uint32; | ||||
| units "nanoseconds"; | ||||
| description | ||||
| "This is the maximum latency from Ingress to | ||||
| Egress(es) for a single packet of the DetNet flow. | ||||
| MaxLatency is specified as an integer number of | ||||
| nanoseconds."; | ||||
| } | ||||
| leaf max-latency-variation { | ||||
| type uint32; | ||||
| units "nanoseconds"; | ||||
| description | ||||
| "This is the difference between the | ||||
| minimum and the maximum end-to-end one-way latency. | ||||
| MaxLatencyVariation is specified as an integer number of | ||||
| nanoseconds."; | ||||
| } | ||||
| leaf max-loss { | ||||
| type uint32; | ||||
| description | ||||
| "This defines the maximum Packet Loss Ratio (PLR) | ||||
| parameter for the DetNet service between the Ingress and | ||||
| Egress(es) of the DetNet domain."; | ||||
| } | ||||
| leaf max-consecutive-loss-tolerance { | ||||
| type uint32; | ||||
| units "packets"; | ||||
| description | ||||
| "Some applications have special loss requirement, such | ||||
| as MaxConsecutiveLossTolerance. The maximum consecutive | ||||
| loss tolerance parameter describes the maximum number of | ||||
| consecutive packets whose loss can be tolerated. The | ||||
| maximum consecutive loss tolerance can be measured for | ||||
| example based on sequence number."; | ||||
| } | ||||
| leaf max-misordering { | ||||
| type uint32; | ||||
| units "packets"; | ||||
| description | ||||
| "This describes the tolerable maximum number | ||||
| of packets that can be received out of order. The | ||||
| maximum allowed misordering can be measured for example | ||||
| based on sequence number. The value zero for the | ||||
| maximum allowed misordering indicates that in order | ||||
| delivery is required, misordering cannot be tolerated."; | ||||
| } | ||||
| } | ||||
| container flow-spec { | ||||
| description | ||||
| "Flow-specification specifies how the Source transmits | ||||
| packets for the flow. This is the promise/request of the | ||||
| Source to the network. The network uses this flow | ||||
| specification to allocate resources and adjust queue | ||||
| parameters in network nodes."; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Section 5.5"; | ||||
| leaf interval { | ||||
| type uint32; | ||||
| units "nanoseconds"; | ||||
| description | ||||
| "The period of time in which the traffic | ||||
| specification cannot be exceeded."; | ||||
| } | ||||
| leaf max-pkts-per-interval { | ||||
| type uint32; | ||||
| description | ||||
| "The maximum number of packets that the | ||||
| source will transmit in one interval."; | ||||
| } | ||||
| leaf max-payload-size { | ||||
| type uint32; | ||||
| description | ||||
| "The maximum payload size that the source | ||||
| will transmit."; | ||||
| } | ||||
| leaf min-payload-size { | ||||
| type uint32; | ||||
| description | ||||
| "The minimum payload size that the source | ||||
| will transmit."; | ||||
| } | ||||
| leaf min-pkts-per-interval { | ||||
| type uint32; | ||||
| description | description | |||
| "The minimum number of packets that the | "Container for multiple next hops."; | |||
| source will transmit in one interval."; | list next-hop { | |||
| key "hop-index"; | ||||
| description | ||||
| "An entry in a next-hop list. Modules for address | ||||
| families MUST augment this list with a leaf containing a | ||||
| next-hop address of that address family."; | ||||
| leaf hop-index { | ||||
| type uint8; | ||||
| description | ||||
| "The value of the index for a hop."; | ||||
| } | ||||
| leaf outgoing-interface { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "This is a whole interface as the next hop."; | ||||
| } | ||||
| choice flow-type { | ||||
| description | ||||
| "These are the flow type next hop choices."; | ||||
| case ip { | ||||
| choice operation-type { | ||||
| description | ||||
| "These are the next hop choices."; | ||||
| case ip-forwarding { | ||||
| leaf next-hop-address { | ||||
| type inet:ip-address-no-zone; | ||||
| description | ||||
| "This is an IP address as a next hop."; | ||||
| } | ||||
| } | ||||
| case mpls-over-ip-encapsulation { | ||||
| uses ip-header; | ||||
| } | ||||
| } | ||||
| } | ||||
| case mpls { | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | } | |||
| } | } | |||
| leaf-list member-apps { | ||||
| type app-flow-ref; | ||||
| config false; | ||||
| description | ||||
| "Applications attached to this profile."; | ||||
| } | ||||
| leaf-list member-services { | ||||
| type service-sub-layer-ref; | ||||
| config false; | ||||
| description | ||||
| "Services attached to this profile."; | ||||
| } | ||||
| leaf-list member-fwd-sublayers { | ||||
| type forwarding-sub-layer-ref; | ||||
| config false; | ||||
| description | ||||
| "Forwarding sub-layer attached to this profile."; | ||||
| } | ||||
| } | } | |||
| container app-flows { | ||||
| container detnet { | ||||
| description | description | |||
| "The DetNet app-flow configuration."; | "The top level DetNet container. This contains | |||
| reference | applications, service sub-layers and forwarding sub-layers | |||
| "draft-ietf-detnet-flow-information-model Section Section 4.1"; | as well as the traffic profiles."; | |||
| list app-flow { | list traffic-profile { | |||
| key "name"; | key "profile-name"; | |||
| description | description | |||
| "A unique (management) identifier of the App-flow."; | "A traffic profile."; | |||
| leaf name { | leaf profile-name { | |||
| type string; | type string; | |||
| description | description | |||
| "A unique (management) identifier of the App-flow."; | "An Aggregation group ID. Zero means the service is not | |||
| reference | part of a group."; | |||
| "draft-ietf-detnet-flow-information-model | ||||
| Sections 4.1, 5.1"; | ||||
| } | } | |||
| leaf app-flow-bidir-congruent { | container traffic-requirements { | |||
| type boolean; | ||||
| default false; | ||||
| description | description | |||
| "Defines the data path requirement of the App-flow | "This defines the attributes of the App-flow | |||
| whether it must share the same data path and physical | regarding bandwidth, latency, latency variation, loss, and | |||
| path for both directions through the network, e.g., to | misordering tolerance."; | |||
| provide congruent paths in the two directions."; | ||||
| reference | reference | |||
| "draft-ietf-detnet-flow-information-model Section 4.2"; | "draft-ietf-detnet-flow-information-model Section 4.2"; | |||
| leaf min-bandwidth { | ||||
| type uint64; | ||||
| units "bps"; | ||||
| description | ||||
| "This is the minimum bandwidth that has to be | ||||
| guaranteed for the DetNet service. MinBandwidth is | ||||
| specified in octets per second."; | ||||
| } | ||||
| leaf max-latency { | ||||
| type uint32; | ||||
| units "nanoseconds"; | ||||
| description | ||||
| "This is the maximum latency from Ingress to | ||||
| Egress(es) for a single packet of the DetNet flow. | ||||
| MaxLatency is specified as an integer number of | ||||
| nanoseconds."; | ||||
| } | ||||
| leaf max-latency-variation { | ||||
| type uint32; | ||||
| units "nanoseconds"; | ||||
| description | ||||
| "This is the difference between the | ||||
| minimum and the maximum end-to-end one-way latency. | ||||
| MaxLatencyVariation is specified as an integer number of | ||||
| nanoseconds."; | ||||
| } | ||||
| leaf max-loss { | ||||
| type uint32; | ||||
| description | ||||
| "This defines the maximum Packet Loss Ratio (PLR) | ||||
| parameter for the DetNet service between the Ingress and | ||||
| Egress(es) of the DetNet domain."; | ||||
| } | ||||
| leaf max-consecutive-loss-tolerance { | ||||
| type uint32; | ||||
| units "packets"; | ||||
| description | ||||
| "Some applications have special loss requirement, such | ||||
| as MaxConsecutiveLossTolerance. The maximum consecutive | ||||
| loss tolerance parameter describes the maximum number of | ||||
| consecutive packets whose loss can be tolerated. The | ||||
| maximum consecutive loss tolerance can be measured for | ||||
| example based on sequence number."; | ||||
| } | ||||
| leaf max-misordering { | ||||
| type uint32; | ||||
| units "packets"; | ||||
| description | ||||
| "This describes the tolerable maximum number | ||||
| of packets that can be received out of order. The | ||||
| maximum allowed misordering can be measured for example | ||||
| based on sequence number. The value zero for the | ||||
| maximum allowed misordering indicates that in order | ||||
| delivery is required, misordering cannot be tolerated."; | ||||
| } | ||||
| } | } | |||
| leaf outgoing-service { | container flow-spec { | |||
| type service-sub-layer-ref; | description | |||
| "Flow-specification specifies how the Source transmits | ||||
| packets for the flow. This is the promise/request of the | ||||
| Source to the network. The network uses this flow | ||||
| specification to allocate resources and adjust queue | ||||
| parameters in network nodes."; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Section 5.5"; | ||||
| leaf interval { | ||||
| type uint32; | ||||
| units "nanoseconds"; | ||||
| description | ||||
| "The period of time in which the traffic | ||||
| specification cannot be exceeded."; | ||||
| } | ||||
| leaf max-pkts-per-interval { | ||||
| type uint32; | ||||
| description | ||||
| "The maximum number of packets that the | ||||
| source will transmit in one interval."; | ||||
| } | ||||
| leaf max-payload-size { | ||||
| type uint32; | ||||
| description | ||||
| "The maximum payload size that the source | ||||
| will transmit."; | ||||
| } | ||||
| leaf min-payload-size { | ||||
| type uint32; | ||||
| description | ||||
| "The minimum payload size that the source | ||||
| will transmit."; | ||||
| } | ||||
| leaf min-pkts-per-interval { | ||||
| type uint32; | ||||
| description | ||||
| "The minimum number of packets that the | ||||
| source will transmit in one interval."; | ||||
| } | ||||
| } | ||||
| leaf-list member-apps { | ||||
| type app-flow-ref; | ||||
| config false; | config false; | |||
| description | description | |||
| "Binding to this applications outgoing | "Applications attached to this profile."; | |||
| service."; | ||||
| } | } | |||
| leaf incoming-service { | leaf-list member-services { | |||
| type service-sub-layer-ref; | type service-sub-layer-ref; | |||
| config false; | config false; | |||
| description | description | |||
| "Binding to this applications incoming service."; | "Services attached to this profile."; | |||
| } | } | |||
| leaf traffic-profile { | leaf-list member-fwd-sublayers { | |||
| type traffic-profile-ref; | type forwarding-sub-layer-ref; | |||
| config false; | ||||
| description | description | |||
| "The Traffic Profile for this group."; | "Forwarding sub-layer attached to this profile."; | |||
| } | } | |||
| container ingress { | } | |||
| container app-flows { | ||||
| description | ||||
| "The DetNet app-flow configuration."; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Section 4.1"; | ||||
| list app-flow { | ||||
| key "name"; | ||||
| description | description | |||
| "Ingress DetNet application flows or a compound flow."; | "A unique (management) identifier of the App-flow."; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "Ingress DetNet application."; | "A unique (management) identifier of the App-flow."; | |||
| reference | ||||
| "draft-ietf-detnet-flow-information-model | ||||
| Sections 4.1, 5.1"; | ||||
| } | } | |||
| leaf app-flow-status { | leaf app-flow-bidir-congruent { | |||
| type identityref { | type boolean; | |||
| base app-status; | default false; | |||
| } | ||||
| config false; | ||||
| description | description | |||
| "Status of ingress application flow."; | "Defines the data path requirement of the App-flow | |||
| whether it must share the same data path and physical | ||||
| path for both directions through the network, e.g., to | ||||
| provide congruent paths in the two directions."; | ||||
| reference | reference | |||
| "draft-ietf-detnet-flow-information-model Sections | "draft-ietf-detnet-flow-information-model | |||
| 4.1, 5.8"; | Section 4.2"; | |||
| } | } | |||
| leaf interface { | leaf outgoing-service { | |||
| type if:interface-ref; | type service-sub-layer-ref; | |||
| config false; | ||||
| description | description | |||
| "Interface is used for any service type where a whole | "Binding to this applications outgoing | |||
| interface is mapped to the applications. It may be | service."; | |||
| further filtered by type."; | ||||
| } | } | |||
| uses data-flow-spec; | leaf incoming-service { | |||
| } //End of app-ingress | type service-sub-layer-ref; | |||
| container egress { | config false; | |||
| description | ||||
| "Route's next-hop attribute."; | ||||
| leaf name { | ||||
| type string; | ||||
| description | description | |||
| "Egress DetNet application."; | "Binding to this applications incoming service."; | |||
| } | } | |||
| choice application-type { | leaf traffic-profile { | |||
| type traffic-profile-ref; | ||||
| description | description | |||
| "This is the application type choices."; | "The Traffic Profile for this group."; | |||
| container ethernet { | } | |||
| container ingress { | ||||
| description | ||||
| "Ingress DetNet application flows or a compound flow."; | ||||
| leaf name { | ||||
| type string; | ||||
| description | description | |||
| "This is TSN unaware traffic that maps to an | "Ingress DetNet application."; | |||
| interface."; | } | |||
| leaf interface { | leaf app-flow-status { | |||
| type if:interface-ref; | type identityref { | |||
| description | base app-status; | |||
| "This is an Ethernet or TSN interfaces."; | ||||
| } | } | |||
| config false; | ||||
| description | ||||
| "Status of ingress application flow."; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Sections | ||||
| 4.1, 5.8"; | ||||
| } | } | |||
| container ip-mpls { | leaf interface { | |||
| type if:interface-ref; | ||||
| description | description | |||
| "This is IP or MPLS DetNet application types."; | "Interface is used for any service type where a whole | |||
| uses detnet-app-next-hop-content; | interface is mapped to the applications. It may be | |||
| further filtered by type."; | ||||
| } | ||||
| uses data-flow-spec; | ||||
| } //End of app-ingress | ||||
| container egress { | ||||
| description | ||||
| "Route's next-hop attribute."; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "Egress DetNet application."; | ||||
| } | ||||
| choice application-type { | ||||
| description | ||||
| "This is the application type choices."; | ||||
| container ethernet { | ||||
| description | ||||
| "This is TSN unaware traffic that maps to an | ||||
| interface."; | ||||
| leaf interface { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "This is an Ethernet or TSN interfaces."; | ||||
| } | ||||
| } | ||||
| container ip-mpls { | ||||
| description | ||||
| "This is IP or MPLS DetNet application types."; | ||||
| uses detnet-app-next-hop-content; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | container service-sub-layer { | |||
| container service-sub-layer { | ||||
| description | ||||
| "The DetNet service sub-layer configuration."; | ||||
| list service-sub-layer-list { | ||||
| key "name"; | ||||
| description | description | |||
| "Services are indexed by name."; | "The DetNet service sub-layer configuration."; | |||
| leaf name { | list service-sub-layer-list { | |||
| type string; | key "name"; | |||
| description | ||||
| "The name of the DetNet service sub-layer."; | ||||
| } | ||||
| leaf service-rank { | ||||
| type uint8; | ||||
| description | ||||
| "The DetNet rank for this service."; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Section 5.7."; | ||||
| } | ||||
| leaf traffic-profile { | ||||
| type traffic-profile-ref; | ||||
| description | ||||
| "The Traffic Profile for this service."; | ||||
| } | ||||
| container service-protection { | ||||
| description | description | |||
| "This is the service protection type an sequence number | "Services are indexed by name."; | |||
| options."; | leaf name { | |||
| leaf service-protection-type { | type string; | |||
| type service-protection-type; | ||||
| description | description | |||
| "The DetNet service protection type such as PRF, PEF, | "The name of the DetNet service sub-layer."; | |||
| PEOF,PERF, and PEORF."; | } | |||
| leaf service-rank { | ||||
| type uint8; | ||||
| description | ||||
| "The DetNet rank for this service."; | ||||
| reference | reference | |||
| "draft-ietf-detnet-data-plane-framework Section 4.3"; | "draft-ietf-detnet-flow-information-model Section 5.7."; | |||
| } | } | |||
| leaf sequence-number-length { | leaf traffic-profile { | |||
| type sequence-number-field; | type traffic-profile-ref; | |||
| description | description | |||
| "Sequence number field length can be one of 0 (none), | "The Traffic Profile for this service."; | |||
| 16-bits or 28-bits."; | ||||
| } | } | |||
| } | container service-protection { | |||
| leaf service-operation-type { | ||||
| type service-operation-type; | ||||
| description | ||||
| "This is the service operation type for this service | ||||
| sub-layer;"; | ||||
| } | ||||
| container incoming-type { | ||||
| description | ||||
| "The DetNet service sub-layer incoming configuration."; | ||||
| choice incoming-type { | ||||
| mandatory true; | ||||
| description | description | |||
| "A service sub-layer may have App flows or other | "This is the service protection type an sequence number | |||
| service sub-layers."; | options."; | |||
| container app-flow { | leaf service-protection-type { | |||
| description | type service-protection-type; | |||
| "This service sub-layer is related to the app-flows | ||||
| of the upper layer and provide ingress proxy or | ||||
| ingress aggregation at the ingress node."; | ||||
| uses app-flows-group; | ||||
| } | ||||
| container service-aggregation { | ||||
| description | description | |||
| "This service sub-layer is related to the service | "The DetNet service protection type such as PRF, PEF, | |||
| sub-layer of the upper layer and provide | PEOF,PERF, and PEORF."; | |||
| service-to-service aggregation at the ingress node | reference | |||
| or relay node."; | "draft-ietf-detnet-data-plane-framework Section 4.3"; | |||
| uses service-sub-layer-group; | ||||
| } | } | |||
| container forwarding-aggregation { | leaf sequence-number-length { | |||
| type sequence-number-field; | ||||
| description | description | |||
| "This service sub-layer is related to the forwarding | "Sequence number field length can be one of 0 (none), | |||
| sub-layer of the upper layer and provide | 16-bits or 28-bits."; | |||
| forwarding-to-service aggregation at the ingress | ||||
| node or relay node."; | ||||
| uses forwarding-sub-layer-group; | ||||
| } | } | |||
| container service-id { | } | |||
| leaf service-operation-type { | ||||
| type service-operation-type; | ||||
| description | ||||
| "This is the service operation type for this service | ||||
| sub-layer;"; | ||||
| } | ||||
| container incoming-type { | ||||
| description | ||||
| "The DetNet service sub-layer incoming configuration."; | ||||
| choice incoming-type { | ||||
| mandatory true; | ||||
| description | description | |||
| "This service sub-layer is related to the service or | "A service sub-layer may have App flows or other | |||
| forwarding sub-layer of the lower layer and provide | service sub-layers."; | |||
| DetNet service relay or termination at the relay | container app-flow { | |||
| node or egress node."; | description | |||
| uses detnet-flow-spec; | "This service sub-layer is related to the app-flows | |||
| of the upper layer and provide ingress proxy or | ||||
| ingress aggregation at the ingress node."; | ||||
| uses app-flows-group; | ||||
| } | ||||
| container service-aggregation { | ||||
| description | ||||
| "This service sub-layer is related to the service | ||||
| sub-layer of the upper layer and provide | ||||
| service-to-service aggregation at the ingress node | ||||
| or relay node."; | ||||
| uses service-sub-layer-group; | ||||
| } | ||||
| container forwarding-aggregation { | ||||
| description | ||||
| "This service sub-layer is related to the forwarding | ||||
| sub-layer of the upper layer and provide | ||||
| forwarding-to-service aggregation at the ingress | ||||
| node or relay node."; | ||||
| uses forwarding-sub-layer-group; | ||||
| } | ||||
| container service-id { | ||||
| description | ||||
| "This service sub-layer is related to the service or | ||||
| forwarding sub-layer of the lower layer and provide | ||||
| DetNet service relay or termination at the relay | ||||
| node or egress node."; | ||||
| uses detnet-flow-spec; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | container outgoing-type { | |||
| container outgoing-type { | ||||
| description | ||||
| "The DetNet service sub-layer outgoing configuration."; | ||||
| choice outgoing-type { | ||||
| mandatory true; | ||||
| description | description | |||
| "The out-going type may be a forwarding Sub-layer or a | "The DetNet service sub-layer outgoing configuration."; | |||
| service sub-layer or ? types need to be named."; | choice outgoing-type { | |||
| container forwarding-sub-layer { | mandatory true; | |||
| description | description | |||
| "This service sub-layer is sent to the forwarding | "The out-going type may be a forwarding Sub-layer or a | |||
| sub-layers of the lower layer for DetNet service | service sub-layer or ? types need to be named."; | |||
| forwarding or service-to-forwarding aggregation at | container forwarding-sub-layer { | |||
| the ingress node or relay node. When the operation | ||||
| type is service-initiation, The service sub-layer | ||||
| encapsulates the DetNet Control-Word and services | ||||
| label, which are for individual DetNet flow when the | ||||
| incoming type is app-flow and for aggregated DetNet | ||||
| flow when the incoming type is service or | ||||
| forwarding. The service sub-layer swaps the service | ||||
| label when the operation type is service-relay."; | ||||
| list service-outgoing-list { | ||||
| key "service-outgoing-index"; | ||||
| description | description | |||
| "List of the outgoing service | "This service sub-layer is sent to the forwarding | |||
| that separately for each node | sub-layers of the lower layer for DetNet service | |||
| where services will be eliminated."; | forwarding or service-to-forwarding aggregation at | |||
| leaf service-outgoing-index { | the ingress node or relay node. When the operation | |||
| type uint8; | type is service-initiation, The service sub-layer | |||
| encapsulates the DetNet Control-Word and services | ||||
| label, which are for individual DetNet flow when the | ||||
| incoming type is app-flow and for aggregated DetNet | ||||
| flow when the incoming type is service or | ||||
| forwarding. The service sub-layer swaps the service | ||||
| label when the operation type is service-relay."; | ||||
| list service-outgoing-list { | ||||
| key "service-outgoing-index"; | ||||
| description | description | |||
| "This index allows a list of multiple outgoing | "List of the outgoing service | |||
| forwarding sub-layers"; | that separately for each node | |||
| where services will be eliminated."; | ||||
| leaf service-outgoing-index { | ||||
| type uint8; | ||||
| description | ||||
| "This index allows a list of multiple outgoing | ||||
| forwarding sub-layers"; | ||||
| } | ||||
| uses detnet-header; | ||||
| uses forwarding-sub-layer-group; | ||||
| } | } | |||
| uses detnet-header; | ||||
| uses forwarding-sub-layer-group; | ||||
| } | } | |||
| } | container service-sub-layer { | |||
| container service-sub-layer { | ||||
| description | ||||
| "This service sub-layer is sent to the service | ||||
| sub-layers of the lower layer for service-to-service | ||||
| aggregation at the ingress node or relay node. The | ||||
| service sub-layer encapsulates the DetNet | ||||
| Control-Word and S-label when the operation type is | ||||
| service-initiation, and swaps the S-label when the | ||||
| operation type is service-relay."; | ||||
| leaf aggregation-service-sub-layer { | ||||
| type service-sub-layer-ref; | ||||
| description | description | |||
| "reference point of the service-sub-layer | "This service sub-layer is sent to the service | |||
| at which this service will be aggregated."; | sub-layers of the lower layer for service-to-service | |||
| aggregation at the ingress node or relay node. The | ||||
| service sub-layer encapsulates the DetNet | ||||
| Control-Word and S-label when the operation type is | ||||
| service-initiation, and swaps the S-label when the | ||||
| operation type is service-relay."; | ||||
| leaf aggregation-service-sub-layer { | ||||
| type service-sub-layer-ref; | ||||
| description | ||||
| "reference point of the service-sub-layer | ||||
| at which this service will be aggregated."; | ||||
| } | ||||
| container service-label { | ||||
| description | ||||
| "This is the MPLS service sub-layer label."; | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| } | } | |||
| container service-label { | container app-flow { | |||
| description | description | |||
| "This is the MPLS service sub-layer label."; | "This service sub-layer is sent to the app-flow of | |||
| uses rt-types:mpls-label-stack; | the upper layer for egress proxy at the egress node, | |||
| and decapsulates the DetNet Control-Word and S-label | ||||
| for individual DetNet service. This outgoing type | ||||
| only can be chosen when the operation type is | ||||
| service-termination."; | ||||
| uses app-flows-group; | ||||
| } | ||||
| container service-disaggregation { | ||||
| description | ||||
| "This service sub-layer is sent to the service | ||||
| sub-layer of the upper layer for service-to-service | ||||
| disaggregation at the relay node or egress node, and | ||||
| decapsulates the DetNet Control-Word and A-label for | ||||
| aggregated DetNet service. This outgoing type only | ||||
| can be chosen when the operation type is | ||||
| service-termination."; | ||||
| uses service-sub-layer-group; | ||||
| } | ||||
| container forwarding-disaggregation { | ||||
| description | ||||
| "This service sub-layer is sent to the forwarding | ||||
| sub-layer of the upper layer for | ||||
| forwarding-to-service disaggregation at the relay | ||||
| node or egress node, and decapsulates the DetNet | ||||
| Control-Word and A-label for aggregated DetNet | ||||
| service. This outgoing type only can be chosen when | ||||
| the operation type is service-termination."; | ||||
| uses forwarding-sub-layer-group; | ||||
| } | } | |||
| } | ||||
| container app-flow { | ||||
| description | ||||
| "This service sub-layer is sent to the app-flow of | ||||
| the upper layer for egress proxy at the egress node, | ||||
| and decapsulates the DetNet Control-Word and S-label | ||||
| for individual DetNet service. This outgoing type | ||||
| only can be chosen when the operation type is | ||||
| service-termination."; | ||||
| uses app-flows-group; | ||||
| } | ||||
| container service-disaggregation { | ||||
| description | ||||
| "This service sub-layer is sent to the service | ||||
| sub-layer of the upper layer for service-to-service | ||||
| disaggregation at the relay node or egress node, and | ||||
| decapsulates the DetNet Control-Word and A-label for | ||||
| aggregated DetNet service. This outgoing type only | ||||
| can be chosen when the operation type is | ||||
| service-termination."; | ||||
| uses service-sub-layer-group; | ||||
| } | ||||
| container forwarding-disaggregation { | ||||
| description | ||||
| "This service sub-layer is sent to the forwarding | ||||
| sub-layer of the upper layer for | ||||
| forwarding-to-service disaggregation at the relay | ||||
| node or egress node, and decapsulates the DetNet | ||||
| Control-Word and A-label for aggregated DetNet | ||||
| service. This outgoing type only can be chosen when | ||||
| the operation type is service-termination."; | ||||
| uses forwarding-sub-layer-group; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | container forwarding-sub-layer { | |||
| container forwarding-sub-layer { | ||||
| description | ||||
| "The DetNet forwarding sub-layer configuration."; | ||||
| list forwarding-sub-layer-list { | ||||
| key "name"; | ||||
| description | description | |||
| "The List is one or more DetNet Traffic types."; | "The DetNet forwarding sub-layer configuration."; | |||
| leaf name { | list forwarding-sub-layer-list { | |||
| type string; | key "name"; | |||
| description | ||||
| "The name of the DetNet forwarding sub-layer."; | ||||
| } | ||||
| leaf traffic-profile { | ||||
| type traffic-profile-ref; | ||||
| description | ||||
| "The Traffic Profile for this group."; | ||||
| } | ||||
| leaf forwarding-operation-type { | ||||
| type forwarding-operations-type; | ||||
| description | ||||
| "This is the forwarding operation types | ||||
| impose-and-forward, pop-and-forward, | ||||
| pop-impose-and-forward, forward, pop-and-lookup."; | ||||
| } | ||||
| container incoming-type { | ||||
| description | description | |||
| "The DetNet forwarding sub-layer incoming configuration."; | "The List is one or more DetNet Traffic types."; | |||
| choice incoming-type { | leaf name { | |||
| mandatory true; | type string; | |||
| description | description | |||
| "Cases of incoming types."; | "The name of the DetNet forwarding sub-layer."; | |||
| container service-sub-layer { | } | |||
| description | leaf traffic-profile { | |||
| "This forwarding sub-layer is related to the service | type traffic-profile-ref; | |||
| sub-layers of the upper layer and provide DetNet | description | |||
| forwarding or service-to-forwarding aggregation at | "The Traffic Profile for this group."; | |||
| the ingress node or relay node."; | } | |||
| uses service-sub-layer-group; | leaf forwarding-operation-type { | |||
| } | type forwarding-operations-type; | |||
| container forwarding-aggregation { | description | |||
| description | "This is the forwarding operation types | |||
| "This forwarding sub-layer is related to the | impose-and-forward, pop-and-forward, | |||
| forwarding sub-layer of the upper layer and provide | pop-impose-and-forward, forward, pop-and-lookup."; | |||
| forwarding-to-forwarding aggregation at the ingress | } | |||
| node or relay node or transit node."; | container incoming-type { | |||
| description | ||||
| uses forwarding-sub-layer-group; | "The DetNet forwarding sub-layer incoming | |||
| } | configuration."; | |||
| container forwarding-id { | choice incoming-type { | |||
| mandatory true; | ||||
| description | description | |||
| "This forwarding sub-layer is related to all of the | "Cases of incoming types."; | |||
| lower layer and provide DetNet forwarding swap or | container service-sub-layer { | |||
| termination at the transit node or relay node or | ||||
| egress node."; | ||||
| leaf interface { | ||||
| type if:interface-ref; | ||||
| description | description | |||
| "This is the interface associated with the | "This forwarding sub-layer is related to the service | |||
| forwarding sub-layer."; | sub-layers of the upper layer and provide DetNet | |||
| forwarding or service-to-forwarding aggregation at | ||||
| the ingress node or relay node."; | ||||
| uses service-sub-layer-group; | ||||
| } | ||||
| container forwarding-aggregation { | ||||
| description | ||||
| "This forwarding sub-layer is related to the | ||||
| forwarding sub-layer of the upper layer and provide | ||||
| forwarding-to-forwarding aggregation at the ingress | ||||
| node or relay node or transit node."; | ||||
| uses forwarding-sub-layer-group; | ||||
| } | ||||
| container forwarding-id { | ||||
| description | ||||
| "This forwarding sub-layer is related to all of the | ||||
| lower layer and provide DetNet forwarding swap or | ||||
| termination at the transit node or relay node or | ||||
| egress node."; | ||||
| leaf interface { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "This is the interface associated with the | ||||
| forwarding sub-layer."; | ||||
| } | ||||
| uses detnet-flow-spec; | ||||
| } | } | |||
| uses detnet-flow-spec; | ||||
| } | } | |||
| } | } | |||
| } | container outgoing-type { | |||
| container outgoing-type { | ||||
| description | ||||
| "The DetNet forwarding sub-layer outbound | ||||
| configuration."; | ||||
| choice outgoing-type { | ||||
| mandatory true; | ||||
| description | description | |||
| "This is when a service connected directly to an | "The DetNet forwarding sub-layer outbound | |||
| interface with no forwarding sub-layer."; | configuration."; | |||
| container | choice outgoing-type { | |||
| interface { | mandatory true; | |||
| description | ||||
| "This forwarding sub-layer is sent to the interface | ||||
| for send to next-hop at the ingress node or relay | ||||
| node or transit node."; | ||||
| uses detnet-forwarding-next-hop-content; | ||||
| } | ||||
| container service-aggregation { | ||||
| description | description | |||
| "This forwarding sub-layer is sent to the service | "This is when a service connected directly to an | |||
| sub-layers of the lower layer for | interface with no forwarding sub-layer."; | |||
| forwarding-to-service aggregation at the ingress | container | |||
| node or relay node."; | interface { | |||
| leaf aggregation-service-sub-layer { | ||||
| type service-sub-layer-ref; | ||||
| description | description | |||
| "This is reference to the service sub-layer."; | "This forwarding sub-layer is sent to the interface | |||
| for send to next-hop at the ingress node or relay | ||||
| node or transit node."; | ||||
| uses detnet-forwarding-next-hop-content; | ||||
| } | } | |||
| container optional-forwarding-label { | container service-aggregation { | |||
| description | description | |||
| "This is the optional forwarding label for service | "This forwarding sub-layer is sent to the service | |||
| aggregation."; | sub-layers of the lower layer for | |||
| uses rt-types:mpls-label-stack; | forwarding-to-service aggregation at the ingress | |||
| node or relay node."; | ||||
| leaf aggregation-service-sub-layer { | ||||
| type service-sub-layer-ref; | ||||
| description | ||||
| "This is reference to the service sub-layer."; | ||||
| } | ||||
| container optional-forwarding-label { | ||||
| description | ||||
| "This is the optional forwarding label for service | ||||
| aggregation."; | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| } | } | |||
| } | container forwarding-sub-layer { | |||
| container forwarding-sub-layer { | ||||
| description | ||||
| "This forwarding sub-layer is sent to the forwarding | ||||
| sub-layers of the lower layer for | ||||
| forwarding-to-forwarding aggregation at the ingress | ||||
| node or relay node or transit node."; | ||||
| leaf aggregation-forwarding-sub-layer { | ||||
| type forwarding-sub-layer-ref; | ||||
| description | description | |||
| "This is reference to the forwarding sub-layer."; | "This forwarding sub-layer is sent to the forwarding | |||
| sub-layers of the lower layer for | ||||
| forwarding-to-forwarding aggregation at the ingress | ||||
| node or relay node or transit node."; | ||||
| leaf aggregation-forwarding-sub-layer { | ||||
| type forwarding-sub-layer-ref; | ||||
| description | ||||
| "This is reference to the forwarding sub-layer."; | ||||
| } | ||||
| container forwarding-label { | ||||
| description | ||||
| "This is the forwarding label for forwarding | ||||
| sub-layer aggregation."; | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| } | } | |||
| container forwarding-label { | container service-sub-layer { | |||
| description | description | |||
| "This is the forwarding label for forwarding | "This forwarding sub-layer is sent to the service | |||
| sub-layer aggregation."; | sub-layer of the upper layer and decapsulate the | |||
| uses rt-types:mpls-label-stack; | F-label for DetNet service or service-to-forwarding | |||
| disaggregation at the relay node or egress node. | ||||
| This outgoing type only can be chosen when the | ||||
| operation type is pop-and-lookup."; | ||||
| uses service-sub-layer-group; | ||||
| } | ||||
| container forwarding-disaggregation { | ||||
| description | ||||
| "This forwarding sub-layer is sent to the forwarding | ||||
| sub-layer of the upper layer and decapsulate the | ||||
| F-label for forwarding-to-forwarding disaggregation | ||||
| at the transit node or relay node or egress node. | ||||
| This outgoing type only can be chosen when the | ||||
| operation type is pop-and-lookup."; | ||||
| uses forwarding-sub-layer-group; | ||||
| } | } | |||
| } | ||||
| container service-sub-layer { | ||||
| description | ||||
| "This forwarding sub-layer is sent to the service | ||||
| sub-layer of the upper layer and decapsulate the | ||||
| F-label for DetNet service or service-to-forwarding | ||||
| disaggregation at the relay node or egress node. | ||||
| This outgoing type only can be chosen when the | ||||
| operation type is pop-and-lookup."; | ||||
| uses service-sub-layer-group; | ||||
| } | ||||
| container forwarding-disaggregation { | ||||
| description | ||||
| "This forwarding sub-layer is sent to the forwarding | ||||
| sub-layer of the upper layer and decapsulate the | ||||
| F-label for forwarding-to-forwarding disaggregation | ||||
| at the transit node or relay node or egress node. | ||||
| This outgoing type only can be chosen when the | ||||
| operation type is pop-and-lookup."; | ||||
| uses forwarding-sub-layer-group; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | ||||
| } | 8. IANA Considerations | |||
| <CODE ENDS> | ||||
| 8. Open Issues | ||||
| There are some open issues that are still under discussion: | ||||
| o Terminology. | ||||
| o Security Considerations. | ||||
| These issues will be resolved in the following versions of the draft. | ||||
| 9. IANA Considerations | ||||
| This document makes no request of IANA. | This document makes no request of IANA. | |||
| Note to RFC Editor: this section may be removed on publication as an | Note to RFC Editor: this section may be removed on publication as an | |||
| RFC. | RFC. | |||
| 10. Security Considerations | 9. Security Considerations | |||
| <TBD> | <TBD> | |||
| 11. Acknowledgements | 10. Acknowledgements | |||
| 12. References | 11. References | |||
| 12.1. Normative References | 11.1. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | |||
| RFC 6991, DOI 10.17487/RFC6991, July 2013, | RFC 6991, DOI 10.17487/RFC6991, July 2013, | |||
| <https://www.rfc-editor.org/info/rfc6991>. | <https://www.rfc-editor.org/info/rfc6991>. | |||
| [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | |||
| RFC 7950, DOI 10.17487/RFC7950, August 2016, | RFC 7950, DOI 10.17487/RFC7950, August 2016, | |||
| <https://www.rfc-editor.org/info/rfc7950>. | <https://www.rfc-editor.org/info/rfc7950>. | |||
| [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, | [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, | |||
| "Deterministic Networking Architecture", RFC 8655, | "Deterministic Networking Architecture", RFC 8655, | |||
| DOI 10.17487/RFC8655, October 2019, | DOI 10.17487/RFC8655, October 2019, | |||
| <https://www.rfc-editor.org/info/rfc8655>. | <https://www.rfc-editor.org/info/rfc8655>. | |||
| 12.2. Informative References | 11.2. Informative References | |||
| [I-D.ietf-detnet-flow-information-model] | [I-D.ietf-detnet-flow-information-model] | |||
| Varga, B., Farkas, J., Cummings, R., Jiang, Y., and D. | Varga, B., Farkas, J., Cummings, R., Jiang, Y., and D. | |||
| Fedyk, "DetNet Flow and Service Information Model", draft- | Fedyk, "DetNet Flow and Service Information Model", Work | |||
| ietf-detnet-flow-information-model-14 (work in progress), | in Progress, Internet-Draft, draft-ietf-detnet-flow- | |||
| January 2021. | information-model-14, 24 January 2021, | |||
| <http://www.ietf.org/internet-drafts/draft-ietf-detnet- | ||||
| flow-information-model-14.txt>. | ||||
| Appendix A. Examples | Appendix A. Examples | |||
| The following examples are provided. These examples are tested with | The following examples are provided. These examples are tested with | |||
| Yanglint and use operational output to exercise both config true and | Yanglint and use operational output to exercise both config true and | |||
| config false objects | config false objects. | |||
| o A simple DetNet application illustrating multiplexing of | The following are examples of aggregation and disaggregation at | |||
| Application Flows. | various points in Detnet. Figures are provided in the PDF version of | |||
| this document. | ||||
| o A case of Forwarding sub-layer aggregation using a single | A.1. Example A-1 JSON Configuration/Operational | |||
| forwarding sublayer. | ||||
| o A case of Service sub-layer aggregation with and aggregation | This illustrates simple aggregation. Ingress node 1 aggregates App | |||
| label. | flows 0 and 1 into a service sub-layer of DetNet flow 1. Two ways of | |||
| illustrating this follow, then the JSON operational data model | ||||
| corresponding to the diagrams follows. | ||||
| A.1. Example JSON Configuration/Operational | Please consult the PDF or HTML versions for the Case A-1 Diagram. | |||
| Figure 1: Case A-1 Example JSON Operational/Configuration | ||||
| Please consult the PDF or HTML versions for the Case A-1 Diagram. | ||||
| Figure 2: Case A-1 Example JSON Operational/Configuration | ||||
| { | { | |||
| "ietf-interfaces:interfaces": { | "ietf-interfaces:interfaces": { | |||
| "interface": [ | "interface": [ | |||
| { | { | |||
| "name": "eth0", | "name": "eth0", | |||
| "type": "iana-if-type:ethernetCsmacd", | "type": "iana-if-type:ethernetCsmacd", | |||
| "oper-status": "up", | "oper-status": "up", | |||
| "statistics": { | "statistics": { | |||
| "discontinuity-time": "2020-12-18T23:59:00Z" | "discontinuity-time": "2020-12-18T23:59:00Z" | |||
| skipping to change at page 46, line 39 ¶ | skipping to change at page 47, line 14 ¶ | |||
| { | { | |||
| "name": "app-0", | "name": "app-0", | |||
| "app-flow-bidir-congruent": false, | "app-flow-bidir-congruent": false, | |||
| "outgoing-service": "ssl-1", | "outgoing-service": "ssl-1", | |||
| "traffic-profile": "pf-1", | "traffic-profile": "pf-1", | |||
| "ingress": { | "ingress": { | |||
| "app-flow-status": "ready", | "app-flow-status": "ready", | |||
| "interface": "eth0", | "interface": "eth0", | |||
| "ip-app-flow": { | "ip-app-flow": { | |||
| "src-ip-prefix": "1.1.1.1/32", | "src-ip-prefix": "1.1.1.1/32", | |||
| "dest-ip-prefix": "8.8.8.0/24", | "dest-ip-prefix": "8.8.8.8/32", | |||
| "dscp": 6 | "dscp": 6 | |||
| } | } | |||
| } | } | |||
| }, | }, | |||
| { | { | |||
| "name": "app-1", | "name": "app-1", | |||
| "app-flow-bidir-congruent": false, | "app-flow-bidir-congruent": false, | |||
| "outgoing-service": "ssl-1", | "outgoing-service": "ssl-1", | |||
| "traffic-profile": "pf-1", | "traffic-profile": "pf-1", | |||
| "ingress": { | "ingress": { | |||
| "app-flow-status": "ready", | "app-flow-status": "ready", | |||
| "interface": "eth0", | "interface": "eth0", | |||
| "ip-app-flow": { | "ip-app-flow": { | |||
| "src-ip-prefix": "2.1.1.1/32", | "src-ip-prefix": "1.1.1.1/32", | |||
| "dest-ip-prefix": "9.8.8.0/24", | "dest-ip-prefix": "8.8.8.8/32", | |||
| "dscp": 7 | "dscp": 7 | |||
| } | } | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| }, | }, | |||
| "traffic-profile": [ | "traffic-profile": [ | |||
| { | { | |||
| "profile-name": "pf-1", | "profile-name": "pf-1", | |||
| "traffic-requirements": { | "traffic-requirements": { | |||
| skipping to change at page 49, line 48 ¶ | skipping to change at page 50, line 22 ¶ | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Figure 1: Example DetNet JSON configuration | Figure 3: Example A-1 DetNet JSON configuration | |||
| A.2. Example XML Config: Aggregation using a Forwarding Sublayer | A.2. Example B-1 XML Config: Aggregation using a Forwarding Sub-layer | |||
| This illustrates aggrgation in the service sub-layers of DetNet. | ||||
| Flows 1 and 2 are aggregated into a forwarding sub-layer. A diagram | ||||
| illustrating this case is shown and then the corresponding XML | ||||
| operational data follows. | ||||
| Please consult the PDF or HTML versions for the Case B-1 Diagram. | ||||
| Figure 4: Case B-1 Example XML Config: Aggregation using a | ||||
| Forwarding Sub-layer | ||||
| <interfaces | <interfaces | |||
| xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces" | xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces" | |||
| xmlns:ia="urn:ietf:params:xml:ns:yang:iana-if-type"> | xmlns:ia="urn:ietf:params:xml:ns:yang:iana-if-type"> | |||
| <interface> | <interface> | |||
| <name>eth0</name> | <name>eth0</name> | |||
| <type>ia:ethernetCsmacd</type> | <type>ia:ethernetCsmacd</type> | |||
| <oper-status>up</oper-status> | <oper-status>up</oper-status> | |||
| <statistics> | <statistics> | |||
| <discontinuity-time>2020-12-18T23:59:00Z</discontinuity-time> | <discontinuity-time>2020-12-18T23:59:00Z</discontinuity-time> | |||
| skipping to change at page 51, line 29 ¶ | skipping to change at page 52, line 12 ¶ | |||
| </app-flow> | </app-flow> | |||
| <app-flow> | <app-flow> | |||
| <name>app-2</name> | <name>app-2</name> | |||
| <app-flow-bidir-congruent>false</app-flow-bidir-congruent> | <app-flow-bidir-congruent>false</app-flow-bidir-congruent> | |||
| <outgoing-service>ssl-2</outgoing-service> | <outgoing-service>ssl-2</outgoing-service> | |||
| <traffic-profile>1</traffic-profile> | <traffic-profile>1</traffic-profile> | |||
| <ingress> | <ingress> | |||
| <app-flow-status>ready</app-flow-status> | <app-flow-status>ready</app-flow-status> | |||
| <interface>eth1</interface> | <interface>eth1</interface> | |||
| <ip-app-flow> | <ip-app-flow> | |||
| <src-ip-prefix>2.1.1.1/32</src-ip-prefix> | <src-ip-prefix>1.1.1.2/32</src-ip-prefix> | |||
| <dest-ip-prefix>9.8.8.8/32</dest-ip-prefix> | <dest-ip-prefix>8.8.8.9/32</dest-ip-prefix> | |||
| <dscp>7</dscp> | <dscp>7</dscp> | |||
| </ip-app-flow> | </ip-app-flow> | |||
| <dscp>7</dscp> | <dscp>7</dscp> | |||
| </ingress> | </ingress> | |||
| </app-flow> | </app-flow> | |||
| </app-flows> | </app-flows> | |||
| <traffic-profile> | <traffic-profile> | |||
| <profile-name>1</profile-name> | <profile-name>1</profile-name> | |||
| <traffic-requirements> | <traffic-requirements> | |||
| <min-bandwidth>100000000</min-bandwidth> | <min-bandwidth>100000000</min-bandwidth> | |||
| skipping to change at page 54, line 17 ¶ | skipping to change at page 54, line 49 ¶ | |||
| <id>0</id> | <id>0</id> | |||
| <label>10000</label> | <label>10000</label> | |||
| </entry> | </entry> | |||
| </mpls-label-stack> | </mpls-label-stack> | |||
| </interface> | </interface> | |||
| </outgoing-type> | </outgoing-type> | |||
| </forwarding-sub-layer-list> | </forwarding-sub-layer-list> | |||
| </forwarding-sub-layer> | </forwarding-sub-layer> | |||
| </detnet> | </detnet> | |||
| Figure 2: Example DetNet XML configuration | Figure 5: Example B-1 DetNet XML configuration | |||
| A.3. Example JSON Service Aggregation Configuration | A.3. Example B-2 JSON Service Aggregation Configuration | |||
| This illustrates the service sub-layers of DetNet. Flows 1 and 2 are | ||||
| aggregated into a service sub-layer of aggregated DetNet flow 1. A | ||||
| diagram illustrating this case is shown and then the corresponding | ||||
| JSON operational data follows. | ||||
| Please consult the PDF or HTML versions for the Case B-2 Diagram. | ||||
| Figure 6: Case B-2 Example JSON Service Aggregation | ||||
| { | { | |||
| "ietf-interfaces:interfaces": { | "ietf-interfaces:interfaces": { | |||
| "interface": [ | "interface": [ | |||
| { | { | |||
| "name": "eth0", | "name": "eth0", | |||
| "type": "iana-if-type:ethernetCsmacd", | "type": "iana-if-type:ethernetCsmacd", | |||
| "oper-status": "up", | "oper-status": "up", | |||
| "statistics": { | "statistics": { | |||
| "discontinuity-time": "2020-10-02T23:59:00Z" | "discontinuity-time": "2020-10-02T23:59:00Z" | |||
| skipping to change at page 55, line 45 ¶ | skipping to change at page 56, line 40 ¶ | |||
| }, | }, | |||
| { | { | |||
| "name": "app-2", | "name": "app-2", | |||
| "app-flow-bidir-congruent": false, | "app-flow-bidir-congruent": false, | |||
| "outgoing-service": "ssl-2", | "outgoing-service": "ssl-2", | |||
| "traffic-profile": "1", | "traffic-profile": "1", | |||
| "ingress": { | "ingress": { | |||
| "app-flow-status": "ready", | "app-flow-status": "ready", | |||
| "interface": "eth0", | "interface": "eth0", | |||
| "ip-app-flow": { | "ip-app-flow": { | |||
| "src-ip-prefix": "2.1.1.1/32", | "src-ip-prefix": "1.1.1.2/32", | |||
| "dest-ip-prefix": "9.8.8.8/32", | "dest-ip-prefix": "8.8.8.9/32", | |||
| "dscp": 7 | "dscp": 7 | |||
| } | } | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| }, | }, | |||
| "traffic-profile": [ | "traffic-profile": [ | |||
| { | { | |||
| "profile-name": "1", | "profile-name": "1", | |||
| "traffic-requirements": { | "traffic-requirements": { | |||
| "min-bandwidth": "100000000", | "min-bandwidth": "100000000", | |||
| "max-latency": 100000000, | "max-latency": 100000000, | |||
| "max-latency-variation": 200000000, | "max-latency-variation": 200000000, | |||
| "max-loss": 2, | "max-loss": 2, | |||
| "max-consecutive-loss-tolerance": 5, | "max-consecutive-loss-tolerance": 5, | |||
| skipping to change at page 59, line 41 ¶ | skipping to change at page 60, line 35 ¶ | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Figure 3: Example DetNet JSON Service Aggregation | Figure 7: Example B-2 DetNet JSON Service Aggregation | |||
| A.4. Example C-1 JSON Relay Aggregation/Disaggregation Configuration | ||||
| This illustrates the Relay node 1 aggregating the forwarding sub- | ||||
| layers of DetNet flows 1 and 2 into a forwarding sub-layer. A | ||||
| diagram illustrating both aggregation and disaggregation is shown and | ||||
| then the corresponding JSON operational data follows. | ||||
| Please consult the PDF or HTML versions for the Case C-1 Diagram. | ||||
| Figure 8: Case C-1 Example JSON Service Aggregation/Disaggregation | ||||
| { | ||||
| "ietf-interfaces:interfaces": { | ||||
| "interface": [ | ||||
| { | ||||
| "name": "eth0", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth1", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth2", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth3", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth4", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-detnet:detnet": { | ||||
| "traffic-profile": [ | ||||
| { | ||||
| "profile-name": "pf-1", | ||||
| "traffic-requirements": { | ||||
| "min-bandwidth": "100000000", | ||||
| "max-latency": 100000000, | ||||
| "max-latency-variation": 100000000, | ||||
| "max-loss": 2, | ||||
| "max-consecutive-loss-tolerance": 5, | ||||
| "max-misordering": 0 | ||||
| }, | ||||
| "member-services": [ | ||||
| "ssl-1", | ||||
| "ssl-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-2", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 2, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "afl-1", | ||||
| "afl-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-3", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 1, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "fsl-1", | ||||
| "fsl-2", | ||||
| "fsl-3", | ||||
| "fsl-4", | ||||
| "fsl-5", | ||||
| "fsl-6" | ||||
| ] | ||||
| } | ||||
| ], | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer-list": [ | ||||
| { | ||||
| "name": "ssl-1", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-1", | ||||
| "service-protection": { | ||||
| "service-protection-type": "replication", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-relay", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 100 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 101 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-2", | ||||
| "fsl-3" | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "ssl-2", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-1", | ||||
| "service-protection": { | ||||
| "service-protection-type": "replication", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-relay", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 103 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 104 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-5", | ||||
| "fsl-6" | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": { | ||||
| "forwarding-sub-layer-list": [ | ||||
| { | ||||
| "name": "fsl-1", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth0", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10000 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-2", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "aggregation-forwarding-sub-layer": "afl-1", | ||||
| "forwarding-label": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10003 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-3", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "aggregation-forwarding-sub-layer": "afl-2", | ||||
| "forwarding-label": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10004 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-4", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth1", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10006 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-5", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "aggregation-forwarding-sub-layer": "afl-1", | ||||
| "forwarding-label": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10009 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-6", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "aggregation-forwarding-sub-layer": "afl-2", | ||||
| "forwarding-label": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10010 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "afl-1", | ||||
| "traffic-profile": "pf-2", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "forwarding-aggregation": { | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-2", | ||||
| "fsl-5" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth2", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20000 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "afl-2", | ||||
| "traffic-profile": "pf-2", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "forwarding-aggregation": { | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-3", | ||||
| "fsl-6" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth3", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20001 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| Figure 9: Example C-1 DetNet JSON Relay Service Aggregation | ||||
| { | ||||
| "ietf-interfaces:interfaces": { | ||||
| "interface": [ | ||||
| { | ||||
| "name": "eth0", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth1", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth2", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth3", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth4", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-detnet:detnet": { | ||||
| "traffic-profile": [ | ||||
| { | ||||
| "profile-name": "pf-1", | ||||
| "traffic-requirements": { | ||||
| "min-bandwidth": "100000000", | ||||
| "max-latency": 100000000, | ||||
| "max-latency-variation": 100000000, | ||||
| "max-loss": 2, | ||||
| "max-consecutive-loss-tolerance": 5, | ||||
| "max-misordering": 0 | ||||
| }, | ||||
| "member-services": [ | ||||
| "ssl-1", | ||||
| "ssl-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-2", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 2, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "afl-1", | ||||
| "afl-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-3", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 1, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "fsl-1", | ||||
| "fsl-2", | ||||
| "fsl-3", | ||||
| "fsl-4", | ||||
| "fsl-5", | ||||
| "fsl-6" | ||||
| ] | ||||
| } | ||||
| ], | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer-list": [ | ||||
| { | ||||
| "name": "ssl-1", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-1", | ||||
| "service-protection": { | ||||
| "service-protection-type": "elimination", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-relay", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 101 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 102 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-3" | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "ssl-2", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-1", | ||||
| "service-protection": { | ||||
| "service-protection-type": "elimination", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-relay", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 104 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 105 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-6" | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": { | ||||
| "forwarding-sub-layer-list": [ | ||||
| { | ||||
| "name": "afl-1", | ||||
| "traffic-profile": "pf-2", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth0", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20002 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-disaggregation": { | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-1", | ||||
| "fsl-4" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "afl-2", | ||||
| "traffic-profile": "pf-2", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth1", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20003 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-disaggregation": { | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-2", | ||||
| "fsl-5" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-1", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth0", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10003 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-2", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth1", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10004 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-3", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth2", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10005 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-4", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth0", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10009 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-5", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth1", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10010 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-6", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth3", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10011 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| Figure 10: Example C-1 DetNet JSON Relay Service Disaggregation | ||||
| A.5. Example C-2 JSON Relay Aggregation Service Sub-Layer | ||||
| This illustrates the Relay node 1 aggregating the service sub-layers | ||||
| of DetNet flows 1 and 2 into a forwarding sub-layer A diagram | ||||
| illustrating both aggregation and disaggregation is shown and then | ||||
| the corresponding JSON operational data follows. | ||||
| Please consult the PDF or HTML versions for the Case C-2 Diagram. | ||||
| Figure 11: Case C-2 Example JSON Service Aggregation/Disaggregation | ||||
| { | ||||
| "ietf-interfaces:interfaces": { | ||||
| "interface": [ | ||||
| { | ||||
| "name": "eth0", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth1", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth2", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth3", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth4", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-detnet:detnet": { | ||||
| "traffic-profile": [ | ||||
| { | ||||
| "profile-name": "pf-1", | ||||
| "traffic-requirements": { | ||||
| "min-bandwidth": "100000000", | ||||
| "max-latency": 100000000, | ||||
| "max-latency-variation": 100000000, | ||||
| "max-loss": 2, | ||||
| "max-consecutive-loss-tolerance": 5, | ||||
| "max-misordering": 0 | ||||
| }, | ||||
| "member-services": [ | ||||
| "ssl-1", | ||||
| "ssl-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-2", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 1, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "fsl-1", | ||||
| "fsl-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-3", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 2, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "afl-1", | ||||
| "afl-2" | ||||
| ] | ||||
| } | ||||
| ], | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer-list": [ | ||||
| { | ||||
| "name": "ssl-1", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-1", | ||||
| "service-protection": { | ||||
| "service-protection-type": "replication", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-relay", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 100 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 101 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": [ | ||||
| "afl-1", | ||||
| "afl-2" | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "ssl-2", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-1", | ||||
| "service-protection": { | ||||
| "service-protection-type": "replication", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-relay", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 103 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 104 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": [ | ||||
| "afl-1", | ||||
| "afl-2" | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": { | ||||
| "forwarding-sub-layer-list": [ | ||||
| { | ||||
| "name": "fsl-1", | ||||
| "traffic-profile": "pf-2", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth0", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10000 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-2", | ||||
| "traffic-profile": "pf-2", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth1", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10006 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "afl-1", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1", | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth2", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20000 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "afl-2", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1", | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth3", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20001 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| Figure 12: Example C-2 DetNet JSON Relay Aggregation Service Sub- | ||||
| Layer | ||||
| { | ||||
| "ietf-interfaces:interfaces": { | ||||
| "interface": [ | ||||
| { | ||||
| "name": "eth0", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth1", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth2", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth3", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth4", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-detnet:detnet": { | ||||
| "traffic-profile": [ | ||||
| { | ||||
| "profile-name": "pf-1", | ||||
| "traffic-requirements": { | ||||
| "min-bandwidth": "100000000", | ||||
| "max-latency": 100000000, | ||||
| "max-latency-variation": 100000000, | ||||
| "max-loss": 2, | ||||
| "max-consecutive-loss-tolerance": 5, | ||||
| "max-misordering": 0 | ||||
| }, | ||||
| "member-services": [ | ||||
| "ssl-1", | ||||
| "ssl-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-2", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 1, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "fsl-1", | ||||
| "fsl-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-3", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 2, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "afl-1", | ||||
| "afl-2" | ||||
| ] | ||||
| } | ||||
| ], | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer-list": [ | ||||
| { | ||||
| "name": "ssl-1", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-1", | ||||
| "service-protection": { | ||||
| "service-protection-type": "elimination", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-relay", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 101 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 102 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-1" | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "ssl-2", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-1", | ||||
| "service-protection": { | ||||
| "service-protection-type": "elimination", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-relay", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 104 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 105 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-2" | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": { | ||||
| "forwarding-sub-layer-list": [ | ||||
| { | ||||
| "name": "afl-1", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth0", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20002 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1", | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "afl-2", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth1", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20003 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1", | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-1", | ||||
| "traffic-profile": "pf-2", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth2", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10005 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-2", | ||||
| "traffic-profile": "pf-2", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth3", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10011 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| Figure 13: Example C-2 DetNet JSON Relay Disaggregation Service | ||||
| Sub-Layer | ||||
| A.6. Example C-3 JSON Relay Service Sub-Layer Aggregation/ | ||||
| Disaggregation | ||||
| This illustrates the Relay node 1 aggregating the service sub-layers | ||||
| of DetNet flows 1 and 2 into a service sub-layer of Aggregated DetNet | ||||
| flow 1. It also illustrates the Relay node 2 disaggregating the | ||||
| aggregated DetNet flow 1 into the DetNet flows 1 and 2 service sub- | ||||
| layers. A diagram illustrating both aggregation and disaggregation | ||||
| is shown and then the corresponding JSON operational data follows. | ||||
| Please consult the PDF or HTML versions for the Case C-3 Diagram. | ||||
| Figure 14: Case C-3 Example JSON Service Aggregation/Disaggregation | ||||
| { | ||||
| "ietf-interfaces:interfaces": { | ||||
| "interface": [ | ||||
| { | ||||
| "name": "eth0", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth1", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth2", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth3", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth4", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-detnet:detnet": { | ||||
| "traffic-profile": [ | ||||
| { | ||||
| "profile-name": "pf-1", | ||||
| "traffic-requirements": { | ||||
| "min-bandwidth": "100000000", | ||||
| "max-latency": 100000000, | ||||
| "max-latency-variation": 100000000, | ||||
| "max-loss": 2, | ||||
| "max-consecutive-loss-tolerance": 5, | ||||
| "max-misordering": 0 | ||||
| }, | ||||
| "member-services": [ | ||||
| "ssl-1", | ||||
| "ssl-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-2", | ||||
| "traffic-requirements": { | ||||
| "min-bandwidth": "200000000", | ||||
| "max-latency": 100000000, | ||||
| "max-latency-variation": 100000000, | ||||
| "max-loss": 2, | ||||
| "max-consecutive-loss-tolerance": 5, | ||||
| "max-misordering": 0 | ||||
| }, | ||||
| "member-services": [ | ||||
| "asl-1" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-3", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 1, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "fsl-1", | ||||
| "fsl-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-4", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 2, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "fsl-3", | ||||
| "fsl-4" | ||||
| ] | ||||
| } | ||||
| ], | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer-list": [ | ||||
| { | ||||
| "name": "ssl-1", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-1", | ||||
| "service-protection": { | ||||
| "service-protection-type": "none", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-relay", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 100 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "aggregation-service-sub-layer": "asl-1", | ||||
| "service-label": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 101 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "ssl-2", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-1", | ||||
| "service-protection": { | ||||
| "service-protection-type": "none", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-relay", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 103 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "aggregation-service-sub-layer": "asl-1", | ||||
| "service-label": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 104 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "asl-1", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-2", | ||||
| "service-protection": { | ||||
| "service-protection-type": "replication", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-initiation", | ||||
| "incoming-type": { | ||||
| "service-aggregation": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1", | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 1000 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-3", | ||||
| "fsl-4" | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": { | ||||
| "forwarding-sub-layer-list": [ | ||||
| { | ||||
| "name": "fsl-1", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth0", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10000 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-2", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth1", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10006 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-3", | ||||
| "traffic-profile": "pf-4", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "asl-1" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth2", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20000 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-4", | ||||
| "traffic-profile": "pf-4", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "asl-1" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth3", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20001 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| Figure 15: Example C-3 DetNet JSON Relay Service Sub-Layer | ||||
| Aggregation | ||||
| { | ||||
| "ietf-interfaces:interfaces": { | ||||
| "interface": [ | ||||
| { | ||||
| "name": "eth0", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth1", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth2", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth3", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth4", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-detnet:detnet": { | ||||
| "traffic-profile": [ | ||||
| { | ||||
| "profile-name": "pf-1", | ||||
| "traffic-requirements": { | ||||
| "min-bandwidth": "100000000", | ||||
| "max-latency": 100000000, | ||||
| "max-latency-variation": 100000000, | ||||
| "max-loss": 2, | ||||
| "max-consecutive-loss-tolerance": 5, | ||||
| "max-misordering": 0 | ||||
| }, | ||||
| "member-services": [ | ||||
| "ssl-1", | ||||
| "ssl-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-2", | ||||
| "traffic-requirements": { | ||||
| "min-bandwidth": "200000000", | ||||
| "max-latency": 100000000, | ||||
| "max-latency-variation": 100000000, | ||||
| "max-loss": 2, | ||||
| "max-consecutive-loss-tolerance": 5, | ||||
| "max-misordering": 0 | ||||
| }, | ||||
| "member-services": [ | ||||
| "asl-1" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-3", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 1, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "fsl-3", | ||||
| "fsl-4" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-4", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 2, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "fsl-1", | ||||
| "fsl-2" | ||||
| ] | ||||
| } | ||||
| ], | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer-list": [ | ||||
| { | ||||
| "name": "ssl-1", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-1", | ||||
| "service-protection": { | ||||
| "service-protection-type": "none", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-relay", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 101 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 102 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-3" | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "ssl-2", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-1", | ||||
| "service-protection": { | ||||
| "service-protection-type": "none", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-relay", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 104 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 105 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-4" | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "asl-1", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-2", | ||||
| "service-protection": { | ||||
| "service-protection-type": "elimination", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-termination", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 1000 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-disaggregation": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1", | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": { | ||||
| "forwarding-sub-layer-list": [ | ||||
| { | ||||
| "name": "fsl-1", | ||||
| "traffic-profile": "pf-4", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth0", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20002 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "asl-1" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-2", | ||||
| "traffic-profile": "pf-4", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth1", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20003 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "asl-1" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-3", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth2", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10005 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-4", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth3", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10011 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| Figure 16: Example C-3 DetNet JSON Relay Service Sub-Layer | ||||
| Disaggregation | ||||
| A.7. Example C-4 JSON Relay Service Sub-Layer Aggregation/ | ||||
| Disaggregation | ||||
| This illustrates the Relay node 1 aggregating the forwarding sub- | ||||
| layers of DetNet flow 1 and 2 into a service sub-layer of Aggregated | ||||
| DetNet flow 1. This also illustrates the Relay node 2 disaggregating | ||||
| the service sub-layer of Aggregated DetNet flow 1 to forwarding sub- | ||||
| layers of DetNet flow 1 and 2. A diagram illustrating both | ||||
| aggregation and disaggregation is shown and then the corresponding | ||||
| JSON operational data follows. | ||||
| Please consult the PDF or HTML versions for the Case C-4 Diagram | ||||
| Figure 17: Case C-4 Example JSON Service Aggregation/Disaggregation | ||||
| { | ||||
| "ietf-interfaces:interfaces": { | ||||
| "interface": [ | ||||
| { | ||||
| "name": "eth0", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth1", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth2", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth3", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth4", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-detnet:detnet": { | ||||
| "traffic-profile": [ | ||||
| { | ||||
| "profile-name": "pf-1", | ||||
| "traffic-requirements": { | ||||
| "min-bandwidth": "100000000", | ||||
| "max-latency": 100000000, | ||||
| "max-latency-variation": 100000000, | ||||
| "max-loss": 2, | ||||
| "max-consecutive-loss-tolerance": 5, | ||||
| "max-misordering": 0 | ||||
| }, | ||||
| "member-services": [ | ||||
| "ssl-1", | ||||
| "ssl-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-2", | ||||
| "traffic-requirements": { | ||||
| "min-bandwidth": "200000000", | ||||
| "max-latency": 100000000, | ||||
| "max-latency-variation": 100000000, | ||||
| "max-loss": 2, | ||||
| "max-consecutive-loss-tolerance": 5, | ||||
| "max-misordering": 0 | ||||
| }, | ||||
| "member-services": [ | ||||
| "asl-1" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-3", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 1, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "fsl-1", | ||||
| "fsl-2", | ||||
| "fsl-3", | ||||
| "fsl-4" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-4", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 2, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "fsl-5", | ||||
| "fsl-6" | ||||
| ] | ||||
| } | ||||
| ], | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer-list": [ | ||||
| { | ||||
| "name": "ssl-1", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-1", | ||||
| "service-protection": { | ||||
| "service-protection-type": "none", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-relay", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 100 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 101 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-3" | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "ssl-2", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-1", | ||||
| "service-protection": { | ||||
| "service-protection-type": "none", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-relay", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 103 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 104 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-4" | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "asl-1", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-2", | ||||
| "service-protection": { | ||||
| "service-protection-type": "replication", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-initiation", | ||||
| "incoming-type": { | ||||
| "forwarding-aggregation": { | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-3", | ||||
| "fsl-4" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 1000 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-5", | ||||
| "fsl-6" | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": { | ||||
| "forwarding-sub-layer-list": [ | ||||
| { | ||||
| "name": "fsl-1", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth0", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10000 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-2", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth1", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10006 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-3", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-aggregation": { | ||||
| "aggregation-service-sub-layer": "asl-1", | ||||
| "optional-forwarding-label": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20004 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-4", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-aggregation": { | ||||
| "aggregation-service-sub-layer": "asl-1", | ||||
| "optional-forwarding-label": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20005 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-5", | ||||
| "traffic-profile": "pf-4", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "asl-1" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth2", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20000 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-6", | ||||
| "traffic-profile": "pf-4", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "asl-1" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth3", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20001 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| Figure 18: Example C-4 DetNet JSON Relay Service Sub-Layer | ||||
| Aggregation | ||||
| { | ||||
| "ietf-interfaces:interfaces": { | ||||
| "interface": [ | ||||
| { | ||||
| "name": "eth0", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth1", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth2", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth3", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth4", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-detnet:detnet": { | ||||
| "traffic-profile": [ | ||||
| { | ||||
| "profile-name": "pf-1", | ||||
| "traffic-requirements": { | ||||
| "min-bandwidth": "100000000", | ||||
| "max-latency": 100000000, | ||||
| "max-latency-variation": 100000000, | ||||
| "max-loss": 2, | ||||
| "max-consecutive-loss-tolerance": 5, | ||||
| "max-misordering": 0 | ||||
| }, | ||||
| "member-services": [ | ||||
| "ssl-1", | ||||
| "ssl-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-2", | ||||
| "traffic-requirements": { | ||||
| "min-bandwidth": "200000000", | ||||
| "max-latency": 100000000, | ||||
| "max-latency-variation": 100000000, | ||||
| "max-loss": 2, | ||||
| "max-consecutive-loss-tolerance": 5, | ||||
| "max-misordering": 0 | ||||
| }, | ||||
| "member-services": [ | ||||
| "asl-1" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-3", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 1, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "fsl-3", | ||||
| "fsl-4", | ||||
| "fsl-5", | ||||
| "fsl-6" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-4", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 2, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "fsl-1", | ||||
| "fsl-2" | ||||
| ] | ||||
| } | ||||
| ], | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer-list": [ | ||||
| { | ||||
| "name": "ssl-1", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-1", | ||||
| "service-protection": { | ||||
| "service-protection-type": "none", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-relay", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 101 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 102 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-5" | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "ssl-2", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-1", | ||||
| "service-protection": { | ||||
| "service-protection-type": "none", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-relay", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 104 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 105 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-6" | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "asl-1", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-2", | ||||
| "service-protection": { | ||||
| "service-protection-type": "elimination", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-termination", | ||||
| "incoming-type": { | ||||
| "service-id": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 1000 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-disaggregation": { | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-3", | ||||
| "fsl-4" | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": { | ||||
| "forwarding-sub-layer-list": [ | ||||
| { | ||||
| "name": "fsl-1", | ||||
| "traffic-profile": "pf-4", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth0", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20002 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "asl-1" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-2", | ||||
| "traffic-profile": "pf-4", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth1", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20003 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "asl-1" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-3", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth0", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20004 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-4", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth1", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20005 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-5", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth2", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10005 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-6", | ||||
| "traffic-profile": "pf-3", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth3", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10011 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| Figure 19: Example C-4 DetNet JSON Relay Service Sub-Layer | ||||
| Disaggregation | ||||
| A.8. Example D-1 JSON Transit Forwarding Sub-Layer Aggregation/ | ||||
| Disaggregation | ||||
| This illustrates the Transit node 1 aggregating the forwarding sub- | ||||
| layers of DetNet flow 1 and 2 into a forwarding sub-layer. This also | ||||
| illustrates a Transit node 4 disaggregating a forwarding sub-layer | ||||
| into DetNet flow 1 and 2 forwarding sub-layers. | ||||
| Please consult the PDF or HTML versions for the Case D-1 Diagram | ||||
| Figure 20: Case D-1 Example Service Aggregation/Disaggregation | ||||
| { | ||||
| "ietf-interfaces:interfaces": { | ||||
| "interface": [ | ||||
| { | ||||
| "name": "eth0", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth1", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth2", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth3", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth4", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-detnet:detnet": { | ||||
| "traffic-profile": [ | ||||
| { | ||||
| "profile-name": "pf-1", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 1, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "fsl-1", | ||||
| "fsl-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-2", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 2, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "afl-1" | ||||
| ] | ||||
| } | ||||
| ], | ||||
| "forwarding-sub-layer": { | ||||
| "forwarding-sub-layer-list": [ | ||||
| { | ||||
| "name": "fsl-1", | ||||
| "traffic-profile": "pf-1", | ||||
| "forwarding-operation-type": "pop-impose-and-forward", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth0", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10000 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "aggregation-forwarding-sub-layer": "afl-1", | ||||
| "forwarding-label": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10002 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-2", | ||||
| "traffic-profile": "pf-1", | ||||
| "forwarding-operation-type": "pop-impose-and-forward", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth1", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10004 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "aggregation-forwarding-sub-layer": "afl-1", | ||||
| "forwarding-label": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10006 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "afl-1", | ||||
| "traffic-profile": "pf-2", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "incoming-type": { | ||||
| "forwarding-aggregation": { | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-1", | ||||
| "fsl-2" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth3", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20000 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| Figure 21: Example D-1 DetNet JSON Relay Service Sub-Layer | ||||
| Aggregation | ||||
| { | ||||
| "ietf-interfaces:interfaces": { | ||||
| "interface": [ | ||||
| { | ||||
| "name": "eth0", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth1", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth2", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth3", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth4", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-12-18T23:59:00Z" | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-detnet:detnet": { | ||||
| "traffic-profile": [ | ||||
| { | ||||
| "profile-name": "pf-1", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 1, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "fsl-1", | ||||
| "fsl-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-2", | ||||
| "flow-spec": { | ||||
| "interval": 125, | ||||
| "max-pkts-per-interval": 2, | ||||
| "max-payload-size": 1518 | ||||
| }, | ||||
| "member-fwd-sublayers": [ | ||||
| "afl-1" | ||||
| ] | ||||
| } | ||||
| ], | ||||
| "forwarding-sub-layer": { | ||||
| "forwarding-sub-layer-list": [ | ||||
| { | ||||
| "name": "fsl-1", | ||||
| "traffic-profile": "pf-1", | ||||
| "forwarding-operation-type": "swap-and-forward", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth1", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10002 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth3", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10003 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "fsl-2", | ||||
| "traffic-profile": "pf-1", | ||||
| "forwarding-operation-type": "swap-and-forward", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth1", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10006 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth2", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 10007 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "afl-1", | ||||
| "traffic-profile": "pf-2", | ||||
| "forwarding-operation-type": "pop-and-lookup", | ||||
| "incoming-type": { | ||||
| "forwarding-id": { | ||||
| "interface": "eth1", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20001 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-disaggregation": { | ||||
| "forwarding-sub-layer": [ | ||||
| "fsl-1", | ||||
| "fsl-2" | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| Figure 22: Example D-1 DetNet JSON Relay Service Sub-Layer | ||||
| Disaggregation | ||||
| Authors' Addresses | Authors' Addresses | |||
| Xuesong Geng | Xuesong Geng | |||
| Huawei Technologies | Huawei Technologies | |||
| Email: gengxuesong@huawei.com | Email: gengxuesong@huawei.com | |||
| Mach(Guoyi) Chen | Mach(Guoyi) Chen | |||
| Huawei Technologies | Huawei Technologies | |||
| Email: mach.chen@huawei.com | Email: mach.chen@huawei.com | |||
| Yeoncheol Ryoo | Yeoncheol Ryoo | |||
| ETRI | ETRI | |||
| Email: dbduscjf@etri.re.kr | Email: dbduscjf@etri.re.kr | |||
| End of changes. 248 change blocks. | ||||
| 1221 lines changed or deleted | 4460 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||