| < draft-ietf-detnet-yang-09.txt | draft-ietf-detnet-yang-10.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: May 20, 2021 Y. Ryoo | Expires: August 22, 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 | |||
| November 16, 2020 | February 18, 2021 | |||
| Deterministic Networking (DetNet) Configuration YANG Model | Deterministic Networking (DetNet) YANG Model | |||
| draft-ietf-detnet-yang-09 | draft-ietf-detnet-yang-10 | |||
| Abstract | Abstract | |||
| This document contains the specification for Deterministic Networking | This document contains the specification for the Deterministic | |||
| flow configuration YANG Model. The model allows for provisioning of | Networking YANG Model for configuration and operational data for | |||
| end-to-end DetNet service along the path without dependency on any | DetNet Flows. The model allows for provisioning of end-to-end DetNet | |||
| signaling protocol. | service along the path without dependency on any signaling protocol. | |||
| 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 | |||
| Management Datastore Architecture (NMDA). | Management Datastore Architecture (NMDA). | |||
| Requirements Language | Requirements Language | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in RFC 2119 [RFC2119]. | document are to be interpreted as described in RFC 2119 [RFC2119]. | |||
| 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 May 20, 2021. | This Internet-Draft will expire on August 22, 2021. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 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/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are 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 . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Terminologies . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. DetNet Configuration Module . . . . . . . . . . . . . . . . . 3 | 3. DetNet YANG Module . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3.1. DetNet Appliction Flow Configuration Attributes . . . . . 3 | 3.1. DetNet Application Flow YANG Attributes . . . . . . . . . 3 | |||
| 3.2. DetNet Service Sub-layer Configuration Attributes . . . . 3 | 3.2. DetNet Service Sub-layer YANG Attributes . . . . . . . . 3 | |||
| 3.3. DetNet Forwarding Sub-layer Configuration 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 . . . . . . . . . . . . . . . 14 | 7. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 15 | |||
| 8. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 40 | 8. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 41 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 40 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41 | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 40 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 42 | |||
| 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 40 | 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 42 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 40 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 42 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 40 | 12.1. Normative References . . . . . . . . . . . . . . . . . . 42 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 41 | 12.2. Informative References . . . . . . . . . . . . . . . . . 42 | |||
| Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 41 | Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 42 | |||
| A.1. Example JSON Configuration . . . . . . . . . . . . . . . 41 | A.1. Example JSON Configuration/Operational . . . . . . . . . 43 | |||
| A.2. Example XML Config: Aggregation using a Forwarding | A.2. Example XML Config: Aggregation using a Forwarding | |||
| Sublayer . . . . . . . . . . . . . . . . . . . . . . . . 45 | Sublayer . . . . . . . . . . . . . . . . . . . . . . . . 47 | |||
| A.3. Example JSON Service Aggregation Configuration . . . . . 49 | A.3. Example JSON Service Aggregation Configuration . . . . . 51 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 55 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 57 | |||
| 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 | |||
| types and modeling language defined in [RFC6991] and [RFC7950]. | types and modeling language defined in [RFC6991] and [RFC7950]. | |||
| DetNet service, which is designed for describing the characteristics | DetNet service, which is designed for describing the characteristics | |||
| of services being provided for application flows over a network, and | of services being provided for application flows over a network, and | |||
| DetNet configuration, which is designed for DetNet flow path | DetNet configuration, which is designed for DetNet flow path | |||
| establishment, flow status reporting, and DetNet functions | establishment, flow status reporting, and DetNet functions | |||
| configuration in order to achieve end-to-end bounded latency and zero | configuration in order to achieve end-to-end bounded latency and zero | |||
| congestion loss, are both included in this document. | congestion loss, are both included in this document. | |||
| 2. Terminologies | 2. Terminology | |||
| This documents uses the terminologies defined in [RFC8655]. | This document uses the terminology defined in [RFC8655]. | |||
| 3. DetNet Configuration Module | 3. DetNet YANG Module | |||
| DetNet configuration module includes DetNet App-flow configuration, | The DetNet YANG module includes DetNet App-flow, DetNet Service Sub- | |||
| DetNet Service Sub-layer configuration, and DetNet Forwarding Sub- | layer, and DetNet Forwarding Sub-layer configuration and operational | |||
| layer configuration. The corresponding attributes used in different | objects. The corresponding attributes used in different sub-layers | |||
| 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 Appliction Flow Configuration 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). Where the application flows can be either layer 2 or layer 3 | node). The the application flows can be either layer 2 or layer 3 | |||
| flows. To map a flow at the User Network Interface (UNI), the | flows. To map a flow at the User Network Interface (UNI), the | |||
| corresponding attributes are defined in | corresponding attributes are defined in | |||
| [I-D.ietf-detnet-flow-information-model]. | [I-D.ietf-detnet-flow-information-model]. | |||
| 3.2. DetNet Service Sub-layer Configuration 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 DetNet service | termination and service protection, are provided in the DetNet | |||
| 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 | o DetNet flow identification | |||
| o 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 Configuration 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 Traffic Specification, refers to Section 7.2 of | o Flow Specification and Traffic Requirements, refers to | |||
| [I-D.ietf-detnet-flow-information-model]. It may used for | [I-D.ietf-detnet-flow-information-model]. These may used for | |||
| resource reservation, flow shaping, filtering and policing. | resource reservation, flow shaping, filtering and policing by a | |||
| control plane or other network management and control mechanisms. | ||||
| o Explicit path, existing explicit route mechanisms can be reused. | o Since this model programs the data plane existing explicit route | |||
| For example, if Segment Routing (SR) tunnel is used as the | mechanisms can be reused. If a static MPLS tunnel is used as the | |||
| transport tunnel, the configuration is mainly at the ingress node | transport tunnel, the configuration need to be at every transit | |||
| of the transport layer; if the static MPLS tunnel is used as the | node along the path. For an IP based path, the static | |||
| transport tunnel, the configurations need to be at every transit | configuration is similar to the static MPLS case. This document | |||
| node along the path; for pure IP based transport tunnel, it's | provides data-plane configuration of IP addresses or MPLS labels | |||
| similar to the static MPLS case. | but it does not provide control plane mapping mapping or other | |||
| 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. | scaleability 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 | |||
| skipping to change at page 5, line 5 ¶ | skipping to change at page 5, line 5 ¶ | |||
| aggregation with the following functions: | aggregation with the following functions: | |||
| o Aggregation flow encapsulation/decapsulation/identification | o Aggregation flow encapsulation/decapsulation/identification | |||
| o 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 | o Changing traffic specification parameters for aggregated flow | |||
| The following cases of DetNet aggregation are supported: | The following cases of DetNet aggregation are supported: | |||
| o aggregate data flows into an application which is then mapped to a | o Ingress node aggregates App flows into a service sub-layer of | |||
| service sub-layer at the ingress node. Note the data flows may be | DetNet flow | |||
| other DetNet flows. | ||||
| o map each DetNet application to a single service sub-layer and | o In ingress node, the service sub-layers of DetNet flows are | |||
| allowing the aggregation of multiple applications at the ingress | aggregated into a forwarding sub-layer | |||
| node, and vice versa for de-aggregation. A classifier may be | ||||
| required to de-aggregate the respective applications. | ||||
| o map each DetNet application uniquely to a single service sub-layer | o In ingress node, the service sub-layers of DetNet flows are | |||
| where those sub-layers may be encapsulated as a single service | aggregated into a service sub-layer of an aggregated DetNet flow | |||
| sub-layer and hence aggregating the applications at the ingress | ||||
| node, and vice versa for de-aggregation. In this case, the | ||||
| service sub-layer identifier may be sufficient to identify the | ||||
| application. A classifier may be required to de-aggregate the | ||||
| service sub-layers. | ||||
| o aggregate DetNet service sub-layers into an aggregated flow by | o Relay node aggregates the forwarding sub-layers DetNet flows into | |||
| using the same forwarding sub-layer at ingress node or relay node, | a forwarding sub-layer | |||
| and vice versa for de-aggregation. | ||||
| o aggregate DetNet flows with different forwarding sub-layer into an | o Relay node aggregates the service sub-layers of DetNet flows into | |||
| aggregated flow by using the same forwarding sub-layer at transit | a forwarding sub-layer | |||
| node, and vice versa for de-aggregation. | ||||
| o Relay node aggregates the service sub-layers of DetNet flows into | ||||
| a service sub-layer of Aggregated DetNet flow | ||||
| o Relay node aggregates the forwarding sub-layers of DetNet flow | ||||
| into a service sub-layer of Aggregated DetNet flow | ||||
| o Transit node aggregates the forwarding sub-layers of DetNet flows | ||||
| 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: | |||
| +-----------+ | +-----------+ | |||
| |ietf-detnet| | |ietf-detnet| | |||
| +-----+-----+ | +-----+-----+ | |||
| | | | | |||
| +-------------+---------------+ | +-------------+---------------+-------------------+ | |||
| | | | | | | | | | |||
| +-----+-----+ +-----+-----+ +-------+------+ | +-----+-----+ +-----+-----+ +-------+------+ | | |||
| | App Flows | |service s-l| |forwarding s-l| | | App Flows | |service s-l| |forwarding s-l| | | |||
| +-----------+ +-----------+ +--------------+ | +-----+-----+ +-----+-----+ +-------+------+ | | |||
| | | | | | ||||
| +-----+-----+ +-----+-----+ +-------+------+ +--------+-------+ | ||||
| | Ref to TR | | Ref to TR | | Ref to TR | | Traffic Profile| | ||||
| +-----------+ +-----------+ +--------------+ +----------------+ | ||||
| There are three instances in DetNet YANG Model: App-flow instance, | There are three instances in DetNet YANG Model: App-flow instance, | |||
| service sub-layer instance and forwarding sub-layer instance, | service sub-layer instance and forwarding sub-layer instance, | |||
| respectively corresponding to four parts of DetNet functions defined | respectively corresponding to four parts of DetNet functions defined | |||
| in section 3. | in section 3. | |||
| 6. DetNet Configuration YANG Structures | 6. DetNet Configuration YANG Structures | |||
| module: ietf-detnet | module: ietf-detnet | |||
| +--rw detnet | +--rw detnet | |||
| +--rw traffic-profile* [profile-name] | +--rw traffic-profile* [profile-name] | |||
| | +--rw profile-name string | | +--rw profile-name string | |||
| | +--rw traffic-requirements | | +--rw traffic-requirements | |||
| | | +--rw min-bandwidth? uint64 | | | +--rw min-bandwidth? uint64 | |||
| | | +--rw max-latency? uint32 | | | +--rw max-latency? uint32 | |||
| | | +--rw max-latency-variation? uint32 | | | +--rw max-latency-variation? uint32 | |||
| | | +--rw max-loss? uint32 | | | +--rw max-loss? uint32 | |||
| | | +--rw max-consecutive-loss-tolerance? uint32 | | | +--rw max-consecutive-loss-tolerance? uint32 | |||
| | | +--rw max-misordering? uint32 | | | +--rw max-misordering? uint32 | |||
| | +--rw traffic-specification | | +--rw flow-spec | |||
| | | +--rw interval? uint32 | | | +--rw interval? uint32 | |||
| | | +--rw max-packets-per-interval? uint32 | | | +--rw max-pkts-per-interval? uint32 | |||
| | | +--rw max-payload-size? uint32 | | | +--rw max-payload-size? uint32 | |||
| | | +--rw average-packets-per-interval? uint32 | | | +--rw min-payload-size? uint32 | |||
| | | +--rw average-payload-size? uint32 | | | +--rw min-pkts-per-interval? uint32 | |||
| | +--ro member-applications* app-flow-ref | | +--ro member-apps* app-flow-ref | |||
| | +--ro member-services* service-sub-layer-ref | | +--ro member-services* service-sub-layer-ref | |||
| | +--ro member-forwarding-sublayers* forwarding-sub-layer-ref | | +--ro member-fwd-sublayers* forwarding-sub-layer-ref | |||
| +--rw app-flows | +--rw app-flows | |||
| | +--rw app-flow* [name] | | +--rw app-flow* [name] | |||
| | +--rw name string | | +--rw name string | |||
| | +--rw app-flow-bidir-congruent? boolean | | +--rw app-flow-bidir-congruent? boolean | |||
| | +--ro outgoing-service? service-sub-layer-ref | | +--ro outgoing-service? service-sub-layer-ref | |||
| | +--ro incoming-service? service-sub-layer-ref | | +--ro incoming-service? service-sub-layer-ref | |||
| | +--rw traffic-profile? traffic-profile-ref | | +--rw traffic-profile? traffic-profile-ref | |||
| | +--rw ingress | | +--rw ingress | |||
| | | +--rw name? string | | | +--rw name? string | |||
| | | +--ro app-flow-status? identityref | | | +--ro app-flow-status? identityref | |||
| | | +--rw interface? if:interface-ref | | | +--rw interface? if:interface-ref | |||
| | | +--rw (data-flow-type)? | | | +--rw (data-flow-type)? | |||
| | | +--:(tsn-app-flow) | | | +--:(tsn-app-flow) | |||
| | | | +--rw source-mac-address? yang:mac-address | | | | +--rw tsn-app-flow | |||
| | | | +--rw destination-mac-address? yang:mac-address | | | | +--rw source-mac-address? | |||
| | | | +--rw ethertype? | | | | | yang:mac-address | |||
| | | | | ethertypes:ethertype | | | | +--rw destination-mac-address? | |||
| | | | +--rw vlan-id? | | | | | yang:mac-address | |||
| | | | | dot1q-types:vlanid | | | | +--rw ethertype? | |||
| | | | +--rw pcp? uint8 | | | | | ethertypes:ethertype | |||
| | | +--:(ip-app-flow) | | | | +--rw vlan-id? | |||
| | | | +--rw src-ip-prefix? inet:ip-prefix | | | | | dot1q-types:vlanid | |||
| | | | +--rw dest-ip-prefix? inet:ip-prefix | | | | +--rw pcp? | |||
| | | | +--rw next-header? uint8 | | | | dot1q-types:priority-type | |||
| | | | +--rw traffic-class? uint8 | | | +--:(ip-app-flow) | |||
| | | | +--rw flow-label? | | | | +--rw ip-app-flow | |||
| | | | | inet:ipv6-flow-label | | | | +--rw src-ip-prefix? inet:ip-prefix | |||
| | | | +--rw source-port | | | | +--rw dest-ip-prefix? inet:ip-prefix | |||
| | | | | +--rw (port-range-or-operator)? | | | | +--rw protocol-next-header? uint8 | |||
| | | | | +--:(range) | | | | +--rw dscp? inet:dscp | |||
| | | | | | +--rw lower-port inet:port-number | | | | +--rw flow-label? | |||
| | | | | | +--rw upper-port inet:port-number | | | | | inet:ipv6-flow-label | |||
| | | | | +--:(operator) | | | | +--rw source-port | |||
| | | | | +--rw operator? operator | | | | | +--rw (port-range-or-operator)? | |||
| | | | | +--rw port inet:port-number | | | | | +--:(range) | |||
| | | | +--rw destination-port | | | | | | +--rw lower-port inet:port-number | |||
| | | | | +--rw (port-range-or-operator)? | | | | | | +--rw upper-port inet:port-number | |||
| | | | | +--:(range) | | | | | +--:(operator) | |||
| | | | | | +--rw lower-port inet:port-number | | | | | +--rw operator? operator | |||
| | | | | | +--rw upper-port inet:port-number | | | | | +--rw port inet:port-number | |||
| | | | | +--:(operator) | | | | +--rw destination-port | |||
| | | | | +--rw operator? operator | | | | | +--rw (port-range-or-operator)? | |||
| | | | | +--rw port inet:port-number | | | | | +--:(range) | |||
| | | | +--rw ipsec-spi? ipsec-spi | | | | | | +--rw lower-port inet:port-number | |||
| | | +--:(mpls-app-flow) | | | | | | +--rw upper-port inet:port-number | |||
| | | +--rw (label-space)? | | | | | +--:(operator) | |||
| | | +--:(context-label-space) | | | | | +--rw operator? operator | |||
| | | | +--rw mpls-label-stack | | | | | +--rw port inet:port-number | |||
| | | | +--rw entry* [id] | | | | +--rw ipsec-spi? ipsec-spi | |||
| | | | +--rw id uint8 | | | +--:(mpls-app-flow) | |||
| | | | +--rw label? | | | +--rw mpls-app-flow | |||
| | | | | rt-types:mpls-label | | | +--rw (label-space)? | |||
| | | | +--rw ttl? uint8 | | | +--:(context-label-space) | |||
| | | | +--rw traffic-class? uint8 | | | | +--rw mpls-label-stack | |||
| | | +--:(platform-label-space) | | | | +--rw entry* [id] | |||
| | | +--rw label? | | | | +--rw id uint8 | |||
| | | rt-types:mpls-label | | | | +--rw label? | |||
| | +--rw egress | | | | | rt-types:mpls-label | |||
| | +--rw name? string | | | | +--rw ttl? uint8 | |||
| | +--rw (application-type)? | | | | +--rw traffic-class? uint8 | |||
| | +--:(Ethernet) | | | +--:(platform-label-space) | |||
| | | +--rw Ethernet | | | +--rw label? | |||
| | | +--rw Ethernet-place-holder? string | | | rt-types:mpls-label | |||
| | +--:(ip-mpls) | | +--rw egress | |||
| | +--rw ip-mpls | | +--rw name? string | |||
| | +--rw (next-hop-options) | | +--rw (application-type)? | |||
| | +--:(simple-next-hop) | | +--:(ethernet) | |||
| | | +--rw outgoing-interface? | | | +--rw ethernet | |||
| | | | if:interface-ref | | | +--rw interface? if:interface-ref | |||
| | | +--rw (flow-type)? | | +--:(ip-mpls) | |||
| | | +--:(ip) | | +--rw ip-mpls | |||
| | | | +--rw next-hop-address? | | +--rw (next-hop-options) | |||
| | | | inet:ip-address | | +--:(simple-next-hop) | |||
| | | +--:(mpls) | | | +--rw outgoing-interface? | |||
| | | +--rw mpls-label-stack | | | | if:interface-ref | |||
| | | +--rw entry* [id] | | | +--rw (flow-type)? | |||
| | | +--rw id uint8 | | | +--:(ip) | |||
| | | +--rw label? | | | | +--rw next-hop-address? | |||
| | | | rt-types:mpls-label | | | | inet:ip-address | |||
| | | +--rw ttl? uint8 | | | +--:(mpls) | |||
| | | +--rw traffic-class? uint8 | | | +--rw mpls-label-stack | |||
| | +--:(next-hop-list) | | | +--rw entry* [id] | |||
| | +--rw next-hop-list | | | +--rw id uint8 | |||
| | +--rw next-hop* [hop-index] | | | +--rw label? | |||
| | +--rw hop-index | | | | rt-types:mpls-label | |||
| | | uint8 | | | +--rw ttl? uint8 | |||
| | +--rw outgoing-interface? | | | +--rw traffic-class? uint8 | |||
| | | if:interface-ref | | +--:(next-hop-list) | |||
| | +--rw (flow-type)? | | +--rw next-hop* [hop-index] | |||
| | +--:(ip) | | +--rw hop-index uint8 | |||
| | | +--rw next-hop-address? | | +--rw outgoing-interface? | |||
| | | inet:ip-address | | | if:interface-ref | |||
| | +--:(mpls) | | +--rw (flow-type)? | |||
| | +--rw mpls-label-stack | | +--:(ip) | |||
| | +--rw entry* [id] | | | +--rw next-hop-address? | |||
| | +--rw id | | | inet:ip-address | |||
| | | uint8 | | +--:(mpls) | |||
| | +--rw label? | | +--rw mpls-label-stack | |||
| | | rt-types: | | +--rw entry* [id] | |||
| | | mpls-label | | +--rw id | |||
| | +--rw ttl? | | | uint8 | |||
| | | uint8 | | +--rw label? | |||
| | +--rw traffic-class? | | | rt-types:mpls-label | |||
| | uint8 | | +--rw ttl? | |||
| +--rw service-sub-layer | | | uint8 | |||
| | +--rw service-sub-layer-list* [name] | | +--rw traffic-class? | |||
| | +--rw name string | | uint8 | |||
| | +--rw service-rank? uint8 | +--rw service-sub-layer | |||
| | +--rw traffic-profile? traffic-profile-ref | | +--rw service-sub-layer-list* [name] | |||
| | +--rw service-protection | | +--rw name string | |||
| | | +--rw service-protection-type? service-protection-type | | +--rw service-rank? uint8 | |||
| | | +--rw sequence-number-length? sequence-number-field | | +--rw traffic-profile? traffic-profile-ref | |||
| | +--rw service-operation-type? service-operation-type | | +--rw service-protection | |||
| | +--rw incoming-type | | | +--rw service-protection-type? service-protection-type | |||
| | | +--rw (incoming-type) | | | +--rw sequence-number-length? sequence-number-field | |||
| | | +--:(app-flow) | | +--rw service-operation-type? service-operation-type | |||
| | | | +--rw app-flow | | +--rw incoming-type | |||
| | | | +--rw flow-list* app-flow-ref | | | +--rw (incoming-type) | |||
| | | +--:(service) | | | +--:(app-flow) | |||
| | | | +--rw service | | | | +--rw app-flow | |||
| | | | +--rw service-sub-layer* | | | | +--rw app-flow-list* app-flow-ref | |||
| | | | service-sub-layer-ref | | | +--:(service-aggregation) | |||
| | | +--:(forwarding) | | | | +--rw service-aggregation | |||
| | | | +--rw forwarding | | | | +--rw service-sub-layer* | |||
| | | | +--rw forwarding-sub-layer* | | | | service-sub-layer-ref | |||
| | | | forwarding-sub-layer-ref | | | +--:(forwarding-aggregation) | |||
| | | +--:(service-identification) | | | | +--rw forwarding-aggregation | |||
| | | +--rw service-identification | | | | +--rw forwarding-sub-layer* | |||
| | | +--rw (detnet-flow-type)? | | | | forwarding-sub-layer-ref | |||
| | | +--:(ip-detnet-flow) | | | +--:(service-id) | |||
| | | | +--rw src-ip-prefix? | | | +--rw service-id | |||
| | | | | inet:ip-prefix | | | +--rw (detnet-flow-type)? | |||
| | | | +--rw dest-ip-prefix? | | | +--:(ip-detnet-flow) | |||
| | | | | inet:ip-prefix | | | | +--rw src-ip-prefix? | |||
| | | | +--rw next-header? uint8 | | | | | inet:ip-prefix | |||
| | | | +--rw traffic-class? uint8 | | | | +--rw dest-ip-prefix? | |||
| | | | +--rw flow-label? | | | | | inet:ip-prefix | |||
| | | | | inet:ipv6-flow-label | | | | +--rw protocol-next-header? uint8 | |||
| | | | +--rw source-port | | | | +--rw dscp? inet:dscp | |||
| | | | | +--rw (port-range-or-operator)? | | | | +--rw flow-label? | |||
| | | | | +--:(range) | | | | | inet:ipv6-flow-label | |||
| | | | | | +--rw lower-port | | | | +--rw source-port | |||
| | | | | | | inet:port-number | | | | | +--rw (port-range-or-operator)? | |||
| | | | | | +--rw upper-port | | | | | +--:(range) | |||
| | | | | | inet:port-number | | | | | | +--rw lower-port | |||
| | | | | +--:(operator) | | | | | | | inet:port-number | |||
| | | | | +--rw operator? operator | | | | | | +--rw upper-port | |||
| | | | | +--rw port | | | | | | inet:port-number | |||
| | | | | inet:port-number | | | | | +--:(operator) | |||
| | | | +--rw destination-port | | | | | +--rw operator? operator | |||
| | | | | +--rw (port-range-or-operator)? | | | | | +--rw port | |||
| | | | | +--:(range) | | | | | inet:port-number | |||
| | | | | | +--rw lower-port | | | | +--rw destination-port | |||
| | | | | | | inet:port-number | | | | | +--rw (port-range-or-operator)? | |||
| | | | | | +--rw upper-port | | | | | +--:(range) | |||
| | | | | | inet:port-number | | | | | | +--rw lower-port | |||
| | | | | +--:(operator) | | | | | | | inet:port-number | |||
| | | | | +--rw operator? operator | | | | | | +--rw upper-port | |||
| | | | | +--rw port | | | | | | inet:port-number | |||
| | | | | inet:port-number | | | | | +--:(operator) | |||
| | | | +--rw ipsec-spi? ipsec-spi | | | | | +--rw operator? operator | |||
| | | +--:(mpls-detnet-flow) | | | | | +--rw port | |||
| | | +--rw (label-space)? | | | | | inet:port-number | |||
| | | +--:(context-label-space) | | | | +--rw ipsec-spi? ipsec-spi | |||
| | | | +--rw mpls-label-stack | | | +--:(mpls-detnet-flow) | |||
| | | | +--rw entry* [id] | | | +--rw (label-space)? | |||
| | | | +--rw id uint8 | | | +--:(context-label-space) | |||
| | | | +--rw label? | | | | +--rw mpls-label-stack | |||
| | | | | rt-types:mpls-label | | | | +--rw entry* [id] | |||
| | | | +--rw ttl? uint8 | | | | +--rw id uint8 | |||
| | | | +--rw traffic-class? uint8 | | | | +--rw label? | |||
| | | +--:(platform-label-space) | | | | | rt-types:mpls-label | |||
| | | +--rw label? | | | | +--rw ttl? uint8 | |||
| | | rt-types:mpls-label | | | | +--rw traffic-class? uint8 | |||
| | +--rw outgoing-type | | | +--:(platform-label-space) | |||
| | +--rw (outgoing-type) | | | +--rw label? | |||
| | +--:(forwarding-sub-layer) | | | rt-types:mpls-label | |||
| | | +--rw forwarding-sub-layer | | +--rw outgoing-type | |||
| | | +--rw service-outgoing-list* | | +--rw (outgoing-type) | |||
| | | [service-outgoing-index] | | +--:(forwarding-sub-layer) | |||
| | | +--rw service-outgoing-index uint8 | | | +--rw forwarding-sub-layer | |||
| | | +--rw (header-type)? | | | +--rw service-outgoing-list* | |||
| | | | +--:(detnet-mpls-header) | | | [service-outgoing-index] | |||
| | | | | +--rw mpls-label-stack | | | +--rw service-outgoing-index uint8 | |||
| | | | | +--rw entry* [id] | | | +--rw (header-type)? | |||
| | | | | +--rw id uint8 | | | | +--:(detnet-mpls-header) | |||
| | | | | +--rw label? | | | | | +--rw mpls-label-stack | |||
| | | | | | rt-types:mpls-label | | | | | +--rw entry* [id] | |||
| | | | | +--rw ttl? uint8 | | | | | +--rw id uint8 | |||
| | | | | +--rw traffic-class? uint8 | | | | | +--rw label? | |||
| | | | +--:(detnet-ip-header) | | | | | | rt-types:mpls-label | |||
| | | | +--rw src-ip-address? | | | | | +--rw ttl? uint8 | |||
| | | | | inet:ip-address | | | | | +--rw traffic-class? uint8 | |||
| | | | +--rw dest-ip-address? | | | | +--:(detnet-ip-header) | |||
| | | | | inet:ip-address | | | | +--rw src-ip-address? | |||
| | | | +--rw next-header? uint8 | | | | | inet:ip-address | |||
| | | | +--rw traffic-class? uint8 | | | | +--rw dest-ip-address? | |||
| | | | +--rw flow-label? | | | | | inet:ip-address | |||
| | | | | inet:ipv6-flow-label | | | | +--rw protocol-next-header? uint8 | |||
| | | | +--rw source-port? | | | | +--rw dscp? | |||
| | | | | inet:port-number | | | | | inet:dscp | |||
| | | | +--rw destination-port? | | | | +--rw flow-label? | |||
| | | | inet:port-number | | | | | inet:ipv6-flow-label | |||
| | | +--rw next-layer* [index] | | | | +--rw source-port? | |||
| | | +--rw index uint8 | | | | | inet:port-number | |||
| | | +--rw forwarding-sub-layer? | | | | +--rw destination-port? | |||
| | | forwarding-sub-layer-ref | | | | inet:port-number | |||
| | +--:(service-sub-layer) | | | +--rw forwarding-sub-layer* | |||
| | | +--rw service-sub-layer | | | forwarding-sub-layer-ref | |||
| | | +--rw aggregation-service-sub-layer? | | +--:(service-sub-layer) | |||
| | | | service-sub-layer-ref | | | +--rw service-sub-layer | |||
| | | +--rw service-label | | | +--rw aggregation-service-sub-layer? | |||
| | | +--rw mpls-label-stack | | | | service-sub-layer-ref | |||
| | | +--rw entry* [id] | | | +--rw service-label | |||
| | | +--rw id uint8 | | | +--rw mpls-label-stack | |||
| | | +--rw label? | | | +--rw entry* [id] | |||
| | | | rt-types:mpls-label | | | +--rw id uint8 | |||
| | | +--rw ttl? uint8 | | | +--rw label? | |||
| | | +--rw traffic-class? uint8 | | | | rt-types:mpls-label | |||
| | +--:(upper-app-flow) | | | +--rw ttl? uint8 | |||
| | | +--rw upper-app-flow | | | +--rw traffic-class? uint8 | |||
| | | +--rw flow-list* app-flow-ref | | +--:(app-flow) | |||
| | +--:(upper-service-sub-layer) | | | +--rw app-flow | |||
| | | +--rw upper-service-sub-layer | | | +--rw app-flow-list* app-flow-ref | |||
| | | +--rw service-sub-layer* | | +--:(service-disaggregation) | |||
| | | service-sub-layer-ref | | | +--rw service-disaggregation | |||
| | +--:(upper-forwarding-sub-layer) | | | +--rw service-sub-layer* | |||
| | +--rw upper-forwarding-sub-layer | | | service-sub-layer-ref | |||
| | +--rw forwarding-sub-layer* | | +--:(forwarding-disaggregation) | |||
| | forwarding-sub-layer-ref | | +--rw forwarding-disaggregation | |||
| +--rw forwarding-sub-layer | | +--rw forwarding-sub-layer* | |||
| +--rw forwarding-sub-layer-list* [name] | | forwarding-sub-layer-ref | |||
| +--rw name string | +--rw forwarding-sub-layer | |||
| +--rw traffic-profile? traffic-profile-ref | +--rw forwarding-sub-layer-list* [name] | |||
| +--rw forwarding-operation-type? | +--rw name string | |||
| | forwarding-operations-type | +--rw traffic-profile? traffic-profile-ref | |||
| +--rw incoming-type | +--rw forwarding-operation-type? | |||
| | +--rw (incoming-type) | | forwarding-operations-type | |||
| | +--:(service-sub-layer) | +--rw incoming-type | |||
| | | +--rw service-sub-layer | | +--rw (incoming-type) | |||
| | | +--ro sub-layer-list* service-sub-layer-ref | | +--:(service-sub-layer) | |||
| | +--:(upper-forwarding-sub-layer) | | | +--rw service-sub-layer | |||
| | | +--rw forwarding-sub-layer* | | | +--rw service-sub-layer* | |||
| | | forwarding-sub-layer-ref | | | service-sub-layer-ref | |||
| | +--:(lower-forwarding-sub-layer) | | +--:(forwarding-aggregation) | |||
| | +--rw interface? | | | +--rw forwarding-aggregation | |||
| | | if:interface-ref | | | +--rw forwarding-sub-layer* | |||
| | +--rw (detnet-flow-type)? | | | forwarding-sub-layer-ref | |||
| | +--:(ip-detnet-flow) | | +--:(forwarding-id) | |||
| | | +--rw src-ip-prefix? | | +--rw forwarding-id | |||
| | | | inet:ip-prefix | | +--rw interface? | |||
| | | +--rw dest-ip-prefix? | | | if:interface-ref | |||
| | | | inet:ip-prefix | | +--rw (detnet-flow-type)? | |||
| | | +--rw next-header? uint8 | | +--:(ip-detnet-flow) | |||
| | | +--rw traffic-class? uint8 | | | +--rw src-ip-prefix? | |||
| | | +--rw flow-label? | | | | inet:ip-prefix | |||
| | | | inet:ipv6-flow-label | | | +--rw dest-ip-prefix? | |||
| | | +--rw source-port | | | | inet:ip-prefix | |||
| | | | +--rw (port-range-or-operator)? | | | +--rw protocol-next-header? uint8 | |||
| | | | +--:(range) | | | +--rw dscp? inet:dscp | |||
| | | | | +--rw lower-port | | | +--rw flow-label? | |||
| | | | | | inet:port-number | | | | inet:ipv6-flow-label | |||
| | | | | +--rw upper-port | | | +--rw source-port | |||
| | | | | inet:port-number | | | | +--rw (port-range-or-operator)? | |||
| | | | +--:(operator) | | | | +--:(range) | |||
| | | | +--rw operator? operator | | | | | +--rw lower-port | |||
| | | | +--rw port | | | | | | inet:port-number | |||
| | | | inet:port-number | | | | | +--rw upper-port | |||
| | | +--rw destination-port | | | | | inet:port-number | |||
| | | | +--rw (port-range-or-operator)? | | | | +--:(operator) | |||
| | | | +--:(range) | | | | +--rw operator? operator | |||
| | | | | +--rw lower-port | | | | +--rw port | |||
| | | | | | inet:port-number | | | | inet:port-number | |||
| | | | | +--rw upper-port | | | +--rw destination-port | |||
| | | | | inet:port-number | | | | +--rw (port-range-or-operator)? | |||
| | | | +--:(operator) | | | | +--:(range) | |||
| | | | +--rw operator? operator | | | | | +--rw lower-port | |||
| | | | +--rw port | | | | | | inet:port-number | |||
| | | | inet:port-number | | | | | +--rw upper-port | |||
| | | +--rw ipsec-spi? ipsec-spi | | | | | inet:port-number | |||
| | +--:(mpls-detnet-flow) | | | | +--:(operator) | |||
| | +--rw (label-space)? | | | | +--rw operator? operator | |||
| | +--:(context-label-space) | | | | +--rw port | |||
| | | +--rw mpls-label-stack | | | | inet:port-number | |||
| | | +--rw entry* [id] | | | +--rw ipsec-spi? ipsec-spi | |||
| | | +--rw id uint8 | | +--:(mpls-detnet-flow) | |||
| | | +--rw label? | | +--rw (label-space)? | |||
| | | | rt-types:mpls-label | | +--:(context-label-space) | |||
| | | +--rw ttl? uint8 | | | +--rw mpls-label-stack | |||
| | | +--rw traffic-class? uint8 | | | +--rw entry* [id] | |||
| | +--:(platform-label-space) | | | +--rw id uint8 | |||
| | +--rw label? | | | +--rw label? | |||
| | rt-types:mpls-label | | | | rt-types:mpls-label | |||
| +--rw outgoing-type | | | +--rw ttl? uint8 | |||
| +--rw (outgoing-type) | | | +--rw traffic-class? uint8 | |||
| +--:(interface) | | +--:(platform-label-space) | |||
| | +--rw interface | | +--rw label? | |||
| | +--rw (next-hop-options) | | rt-types:mpls-label | |||
| | +--:(simple-next-hop) | +--rw outgoing-type | |||
| | | +--rw outgoing-interface? | +--rw (outgoing-type) | |||
| | | | if:interface-ref | +--:(interface) | |||
| | | +--rw (flow-type)? | | +--rw interface | |||
| | | +--:(ip) | | +--rw (next-hop-options) | |||
| | | | +--rw (operation-type)? | | +--:(simple-next-hop) | |||
| | | | +--:(ip-forwarding) | | | +--rw outgoing-interface? | |||
| | | | | +--rw next-hop-address? | | | | if:interface-ref | |||
| | | | | inet:ip-address | | | +--rw (flow-type)? | |||
| | | | +--:(mpls-over-ip-encapsulation) | | | +--:(ip) | |||
| | | | +--rw src-ip-address? | | | | +--rw (operation-type)? | |||
| | | | | inet:ip-address | | | | +--:(ip-forwarding) | |||
| | | | +--rw dest-ip-address? | | | | | +--rw next-hop-address? | |||
| | | | | inet:ip-address | | | | | inet:ip-address | |||
| | | | +--rw next-header? | | | | +--:(mpls-over-ip-encapsulation) | |||
| | | | | uint8 | | | | +--rw src-ip-address? | |||
| | | | +--rw traffic-class? | | | | | inet:ip-address | |||
| | | | | uint8 | | | | +--rw dest-ip-address? | |||
| | | | +--rw flow-label? | | | | | inet:ip-address | |||
| | | | | inet:ipv6-flow-label | | | | +--rw protocol-next-header? | |||
| | | | +--rw source-port? | | | | | uint8 | |||
| | | | | inet:port-number | | | | +--rw dscp? | |||
| | | | +--rw destination-port? | | | | | inet:dscp | |||
| | | | inet:port-number | | | | +--rw flow-label? | |||
| | | +--:(mpls) | | | | | inet:ipv6-flow-label | |||
| | | +--rw mpls-label-stack | | | | +--rw source-port? | |||
| | | +--rw entry* [id] | | | | | inet:port-number | |||
| | | +--rw id uint8 | | | | +--rw destination-port? | |||
| | | +--rw label? | | | | inet:port-number | |||
| | | | rt-types:mpls-label | | | +--:(mpls) | |||
| | | +--rw ttl? uint8 | | | +--rw mpls-label-stack | |||
| | | +--rw traffic-class? uint8 | | | +--rw entry* [id] | |||
| | +--:(next-hop-list) | | | +--rw id uint8 | |||
| | +--rw next-hop-list | | | +--rw label? | |||
| | +--rw next-hop* [hop-index] | | | | rt-types:mpls-label | |||
| | +--rw hop-index | | | +--rw ttl? uint8 | |||
| | | uint8 | | | +--rw traffic-class? uint8 | |||
| | +--rw outgoing-interface? | | +--:(next-hop-list) | |||
| | | if:interface-ref | | +--rw next-hop* [hop-index] | |||
| | +--rw (flow-type)? | | +--rw hop-index | |||
| | +--:(ip) | | | uint8 | |||
| | | +--rw (operation-type)? | | +--rw outgoing-interface? | |||
| | | +--:(ip-forwarding) | | | if:interface-ref | |||
| | | | +--rw next-hop-address? | | +--rw (flow-type)? | |||
| | | | inet:ip-address | | +--:(ip) | |||
| | | +--:(mpls-over-ip- | | | +--rw (operation-type)? | |||
| | | | encapsulation) | | | +--:(ip-forwarding) | |||
| | | +--rw src-ip-address? | | | | +--rw next-hop-address? | |||
| | | | inet:ip-address | | | | inet:ip-address | |||
| | | +--rw dest-ip-address? | | | +--:(mpls-over-ip- | |||
| | | | inet:ip-address | | | encapsulation) | |||
| | | +--rw next-header? | | | +--rw src-ip-address? | |||
| | | | uint8 | | | | inet:ip-address | |||
| | | +--rw traffic-class? | | | +--rw dest-ip-address? | |||
| | | | uint8 | | | | inet:ip-address | |||
| | | +--rw flow-label? | | | +--rw protocol-next-header? | |||
| | | | inet: | | | | uint8 | |||
| | | | ipv6-flow-label | | | +--rw dscp? | |||
| | | +--rw source-port? | | | | inet:dscp | |||
| | | | inet:port-number | | | +--rw flow-label? | |||
| | | +--rw destination-port? | | | | inet:ipv6-flow-label | |||
| | | inet:port-number | | | +--rw source-port? | |||
| | +--:(mpls) | | | | inet:port-number | |||
| | +--rw mpls-label-stack | | | +--rw destination-port? | |||
| | +--rw entry* [id] | | | inet:port-number | |||
| | +--rw id | | +--:(mpls) | |||
| | | uint8 | | +--rw mpls-label-stack | |||
| | +--rw label? | | +--rw entry* [id] | |||
| | | rt-types: | | +--rw id | |||
| | | mpls-label | | | uint8 | |||
| | +--rw ttl? | | +--rw label? | |||
| | | uint8 | | | rt-types:mpls-label | |||
| | +--rw traffic-class? | | +--rw ttl? | |||
| | uint8 | | | uint8 | |||
| +--:(service) | | +--rw traffic-class? | |||
| | +--rw aggregation-service-sub-layer? | | uint8 | |||
| | | service-sub-layer-ref | +--:(service-aggregation) | |||
| | +--rw optional-forwarding-label | | +--rw service-aggregation | |||
| | +--rw mpls-label-stack | | +--rw aggregation-service-sub-layer? | |||
| | +--rw entry* [id] | | | service-sub-layer-ref | |||
| | +--rw id uint8 | | +--rw optional-forwarding-label | |||
| | +--rw label? | | +--rw mpls-label-stack | |||
| | | rt-types:mpls-label | | +--rw entry* [id] | |||
| | +--rw ttl? uint8 | | +--rw id uint8 | |||
| | +--rw traffic-class? uint8 | | +--rw label? | |||
| +--:(forwarding) | | | rt-types:mpls-label | |||
| | +--rw aggregation-forwarding-sub-layer? | | +--rw ttl? uint8 | |||
| | | forwarding-sub-layer-ref | | +--rw traffic-class? uint8 | |||
| | +--rw forwarding-label | +--:(forwarding-sub-layer) | |||
| | +--rw mpls-label-stack | | +--rw forwarding-sub-layer | |||
| | +--rw entry* [id] | | +--rw aggregation-forwarding-sub-layer? | |||
| | +--rw id uint8 | | | forwarding-sub-layer-ref | |||
| | +--rw label? | | +--rw forwarding-label | |||
| | | rt-types:mpls-label | | +--rw mpls-label-stack | |||
| | +--rw ttl? uint8 | | +--rw entry* [id] | |||
| | +--rw traffic-class? uint8 | | +--rw id uint8 | |||
| +--:(upper-service) | | +--rw label? | |||
| | +--rw service-sub-layer* | | | rt-types:mpls-label | |||
| | service-sub-layer-ref | | +--rw ttl? uint8 | |||
| +--:(upper-forwarding) | | +--rw traffic-class? uint8 | |||
| +--rw forwarding-sub-layer* | +--:(service-sub-layer) | |||
| forwarding-sub-layer-ref | | +--rw service-sub-layer | |||
| | +--rw service-sub-layer* | ||||
| | service-sub-layer-ref | ||||
| +--:(forwarding-disaggregation) | ||||
| +--rw forwarding-disaggregation | ||||
| +--rw forwarding-sub-layer* | ||||
| forwarding-sub-layer-ref | ||||
| 7. DetNet Configuration YANG Model | 7. DetNet Configuration YANG Model | |||
| <CODE BEGINS> | <CODE BEGINS> | |||
| module ietf-detnet{ | module ietf-detnet { | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-detnet"; | yang-version 1.1; | |||
| prefix ietf-detnet; | namespace "urn:ietf:params:xml:ns:yang:ietf-detnet"; | |||
| prefix ietf-detnet; | ||||
| import ietf-yang-types { | ||||
| prefix yang; | ||||
| } | ||||
| import ietf-inet-types { | ||||
| prefix inet; | ||||
| } | ||||
| import ietf-ethertypes { | ||||
| prefix ethertypes; | ||||
| } | ||||
| import ietf-routing-types { | ||||
| prefix rt-types; | ||||
| } | ||||
| import ietf-packet-fields { | ||||
| prefix packet-fields; | ||||
| } | ||||
| import ietf-interfaces { | ||||
| prefix if; | ||||
| } | ||||
| import ieee802-dot1q-types{ | ||||
| prefix dot1q-types; | ||||
| } | ||||
| organization | ||||
| "IETF DetNet Working Group"; | ||||
| contact | ||||
| "WG Web: <http://tools.ietf.org/wg/detnet/> | ||||
| WG List: <mailto: detnet@ietf.org> | ||||
| WG Chair: Lou Berger | ||||
| <mailto:lberger@labn.net> | ||||
| Janos Farkas | ||||
| <mailto:janos.farkas@ericsson.com> | ||||
| Editor: Xuesong Geng | ||||
| <mailto:gengxuesong@huawei.com> | ||||
| Editor: Mach Chen | ||||
| <mailto:mach.chen@huawei.com> | ||||
| Editor: Yeoncheol Ryoo | ||||
| <mailto:dbduscjf@etri.re.kr> | ||||
| Editor: Don Fedyk | import ietf-yang-types { | |||
| <mailto:dfedyk@labn.net>; | 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."; | ||||
| Editor: Reshad Rahman | } | |||
| <mailto:rrahman@cisco.com> | ||||
| Editor: Zhenqiang Li | organization | |||
| <mailto:lizhenqiang@chinamobile.com>"; | "IETF DetNet Working Group"; | |||
| contact | ||||
| "WG Web: <http://tools.ietf.org/wg/detnet/> | ||||
| WG List: <mailto: detnet@ietf.org> | ||||
| description | Editor: Xuesong Geng | |||
| "This YANG module describes the parameters needed | <mailto:gengxuesong@huawei.com> | |||
| for DetNet flow configuration and flow status | ||||
| reporting"; | ||||
| revision 2020-11-12 { | Editor: Yeoncheol Ryoo | |||
| description | <mailto:dbduscjf@etri.re.kr> | |||
| "initial revision"; | ||||
| reference | ||||
| "RFC XXXX: draft-ietf-detnet-yang-09"; | ||||
| } | ||||
| identity app-status { | Editor: Don Fedyk | |||
| description | <mailto:dfedyk@labn.net>; | |||
| "Base identity from which all application-status | ||||
| actions are derived"; | ||||
| } | ||||
| identity none { | Editor: Reshad Rahman | |||
| base app-status; | <mailto:reshad@yahoo.com> | |||
| description | ||||
| "Application no ingress/egress"; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Section 5.8"; | ||||
| } | ||||
| identity ready { | Editor: Mach Chen | |||
| base app-status; | <mailto:mach.chen@huawei.com> | |||
| description | ||||
| "Application ingress/egress ready"; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Section 5.8"; | ||||
| } | ||||
| identity failed { | Editor: Zhenqiang Li | |||
| base app-status; | <mailto:lizhenqiang@chinamobile.com>"; | |||
| description | description | |||
| "Application ingres/egresss failed"; | "This YANG module describes the parameters needed | |||
| reference | for DetNet flow configuration and flow status | |||
| "draft-ietf-detnet-flow-information-model Section 5.8"; | reporting."; | |||
| } | ||||
| identity out-of-service { | revision 2021-02-17 { | |||
| base app-status; | description | |||
| description | "initial revision"; | |||
| "Application Administratively blocked"; | reference | |||
| reference | "RFC XXXX: draft-ietf-detnet-yang-10"; | |||
| "draft-ietf-detnet-flow-information-model Section 5.8"; | } | |||
| } | identity app-status { | |||
| description | ||||
| "Base identity from which all application-status | ||||
| status types are derived."; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Section 5.8"; | ||||
| } | ||||
| identity partial-failed { | identity none { | |||
| base app-status; | base app-status; | |||
| description | description | |||
| "Application One or more Egress ready, and one or more Egress | "This Application has no status. This type of status is | |||
| failed. The DetNet flow can be used if the Ingress is | expected when the configuration is incomplete."; | |||
| 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 { | identity ready { | |||
| type leafref { | base app-status; | |||
| path "/ietf-detnet:detnet" | description | |||
| + "/ietf-detnet:app-flows" | "Application ingress/egress ready."; | |||
| + "/ietf-detnet:app-flow" | reference | |||
| + "/ietf-detnet:name"; | "draft-ietf-detnet-flow-information-model Section 5.8"; | |||
| } | } | |||
| } | ||||
| typedef service-sub-layer-ref { | identity failed { | |||
| type leafref { | base app-status; | |||
| path "/ietf-detnet:detnet" | description | |||
| + "/ietf-detnet:service-sub-layer" | "Application ingres/egresss failed."; | |||
| + "/ietf-detnet:service-sub-layer-list" | reference | |||
| + "/ietf-detnet:name"; | "draft-ietf-detnet-flow-information-model Section 5.8"; | |||
| } | } | |||
| } | ||||
| typedef forwarding-sub-layer-ref { | identity out-of-service { | |||
| type leafref { | base app-status; | |||
| path "/ietf-detnet:detnet" | description | |||
| + "/ietf-detnet:forwarding-sub-layer" | "Application Administratively blocked."; | |||
| + "/ietf-detnet:forwarding-sub-layer-list" | reference | |||
| + "/ietf-detnet:name"; | "draft-ietf-detnet-flow-information-model Section 5.8"; | |||
| } | } | |||
| } | ||||
| typedef traffic-profile-ref { | identity partial-failed { | |||
| type leafref { | base app-status; | |||
| path "/ietf-detnet:detnet" | description | |||
| + "/ietf-detnet:traffic-profile" | "This is an Application with one or more Egress ready, and one | |||
| + "/ietf-detnet:profile-name"; | or more Egress failed. The DetNet flow can be used if the | |||
| } | Ingress is Ready."; | |||
| } | reference | |||
| "draft-ietf-detnet-flow-information-model Section 5.8"; | ||||
| } | ||||
| typedef ipsec-spi { | typedef app-flow-ref { | |||
| type uint32 { | type leafref { | |||
| range "1..max"; | path "/ietf-detnet:detnet" | |||
| } | + "/ietf-detnet:app-flows" | |||
| description | + "/ietf-detnet:app-flow" | |||
| "IPsec Security Parameters Index"; | + "/ietf-detnet:name"; | |||
| reference | } | |||
| "IETF RFC 6071"; | } | |||
| } | typedef service-sub-layer-ref { | |||
| type leafref { | ||||
| path "/ietf-detnet:detnet" | ||||
| + "/ietf-detnet:service-sub-layer" | ||||
| + "/ietf-detnet:service-sub-layer-list" | ||||
| + "/ietf-detnet:name"; | ||||
| } | ||||
| } | ||||
| typedef service-operation-type { | typedef forwarding-sub-layer-ref { | |||
| type enumeration { | type leafref { | |||
| enum service-initiation { | path "/ietf-detnet:detnet" | |||
| description | + "/ietf-detnet:forwarding-sub-layer" | |||
| "Operation for DetNet service sub-layer encapsulation"; | + "/ietf-detnet:forwarding-sub-layer-list" | |||
| } | + "/ietf-detnet:name"; | |||
| 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"; | ||||
| } | ||||
| } | ||||
| } | ||||
| typedef forwarding-operations-type { | typedef traffic-profile-ref { | |||
| type enumeration { | type leafref { | |||
| enum forward { | path "/ietf-detnet:detnet" | |||
| description | + "/ietf-detnet:traffic-profile" | |||
| "Operation forward to next-hop"; | + "/ietf-detnet:profile-name"; | |||
| } | } | |||
| enum impose-and-forward { | } | |||
| description | ||||
| "Operation impose outgoing label(s) and forward to | ||||
| next-hop"; | ||||
| } | ||||
| enum pop-and-forward { | ||||
| description | ||||
| "Operation pop incoming label and forward to next-hop"; | ||||
| } | ||||
| enum pop-impose-and-forward { | ||||
| description | ||||
| "Operation pop incoming label, impose one or more | ||||
| outgoing label(s) and forward to next-hop"; | ||||
| } | ||||
| enum swap-and-forward { | ||||
| description | ||||
| "Operation swap incoming label, with outgoing label and | ||||
| forward to next-hop"; | ||||
| } | ||||
| enum pop-and-lookup { | ||||
| description | ||||
| "Operation pop incoming label and perform a lookup"; | ||||
| } | ||||
| } | ||||
| description | ||||
| "MPLS operations types"; | ||||
| } | ||||
| typedef service-protection-type { | typedef ipsec-spi { | |||
| type enumeration { | type uint32 { | |||
| enum none { | range "1..max"; | |||
| description | } | |||
| "no service protection provide"; | description | |||
| } | "IPsec Security Parameters Index."; | |||
| enum replication { | reference | |||
| description | "IETF RFC 6071"; | |||
| "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-replicaiton { | ||||
| description | ||||
| "A combination of PEF, POF and PRF that can be | ||||
| implemented by an edge node, a relay node, or | ||||
| an end system"; | ||||
| } | ||||
| } | ||||
| } | ||||
| typedef sequence-number-generation-type { | typedef service-operation-type { | |||
| type enumeration { | type enumeration { | |||
| enum copy-from-app-flow { | enum service-initiation { | |||
| description | description | |||
| "Copy the app-flow sequence number to the DetNet-flow"; | "This is an initiating service sub-layer encapsulation. "; | |||
| } | } | |||
| enum generate-by-detnet-flow { | enum service-termination { | |||
| description | description | |||
| "Generate the sequence number by DetNet flow"; | "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."; | ||||
| } | ||||
| typedef sequence-number-field { | typedef forwarding-operations-type { | |||
| type enumeration { | type enumeration { | |||
| enum zero-sn { | enum impose-and-forward { | |||
| description | description | |||
| "There is no DetNet sequence number field."; | "This operation impose outgoing label(s) and forward to | |||
| } | next-hop."; | |||
| enum short-sn { | reference | |||
| value 16; | " A YANG Data Model for MPLS Base | |||
| description | draft-ietf-mpls-base-yang."; | |||
| "There is 16bit DetNet sequence number field"; | } | |||
| } | enum pop-and-forward { | |||
| enum long-sn { | description | |||
| value 28; | "This operation pops the incoming label and forwards to | |||
| description | the next-hop."; | |||
| "There is 28bit DetNet sequence number field"; | 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."; | ||||
| } | ||||
| } | ||||
| 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."; | ||||
| } | ||||
| grouping ip-header { | typedef service-protection-type { | |||
| description | type enumeration { | |||
| "The IPv4/IPv6 packet header information"; | enum none { | |||
| leaf src-ip-address { | description | |||
| type inet:ip-address; | "No service protection provided."; | |||
| description | } | |||
| "The source IP address in the header"; | enum replication { | |||
| } | description | |||
| leaf dest-ip-address { | "A Packet Replication Function (PRF) replicates DetNet | |||
| type inet:ip-address; | flow packets and forwards them to one or more next hops in | |||
| description | the DetNet domain. The number of packet copies sent to | |||
| "The destination IP address in the header"; | each next hop is a DetNet flow specific parameter at the | |||
| } | node doing the replication. PRF can be implemented by an | |||
| leaf next-header { | edge node, a relay node, or an end system."; | |||
| type uint8; | } | |||
| description | enum elimination { | |||
| "The next header of the IPv6 header"; | description | |||
| } | "A Packet Elimination Function (PEF) eliminates duplicate | |||
| leaf traffic-class { | copies of packets to prevent excess packets flooding the | |||
| type uint8; | network or duplicate packets being sent out of the DetNet | |||
| description | domain. PEF can be implemented by an edge node, a relay | |||
| "The traffic class value of the header"; | node, or an end system."; | |||
| } | } | |||
| leaf flow-label { | enum ordering { | |||
| type inet:ipv6-flow-label; | description | |||
| description | "A Packet Ordering Function (POF) re-orders packets within | |||
| "The flow label value of the header"; | a DetNet flow that are received out of order. This | |||
| } | function can be implemented by an edge node, a relay node, | |||
| leaf source-port { | or an end system."; | |||
| type inet:port-number; | } | |||
| description | enum elimination-ordering { | |||
| "The source port number"; | description | |||
| } | "A combination of PEF and POF that can be implemented by | |||
| leaf destination-port { | an edge node, a relay node, or an end system."; | |||
| type inet:port-number; | } | |||
| description | enum elimination-replication { | |||
| "The destination port number"; | 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-replicaiton { | ||||
| description | ||||
| "A combination of PEF, POF and PRF that can be implemented | ||||
| by an edge node, a relay node, or an end system."; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping l2-header { | typedef sequence-number-generation-type { | |||
| description | type enumeration { | |||
| "The Ethernet or TSN packet header information"; | 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."; | ||||
| } | ||||
| } | ||||
| description | ||||
| "An enumeration for the sequence number behaviors supported."; | ||||
| } | ||||
| leaf source-mac-address { | typedef sequence-number-field { | |||
| type yang:mac-address; | type enumeration { | |||
| description | enum zero-sn { | |||
| "The source MAC address value of the Ethernet header"; | description | |||
| } | "No DetNet sequence number field is used."; | |||
| leaf destination-mac-address { | } | |||
| type yang:mac-address; | enum short-sn { | |||
| description | value 16; | |||
| "The destination MAC address value of the Ethernet header"; | description | |||
| } | "A 16-bit DetNet sequence number field is used."; | |||
| leaf ethertype { | } | |||
| type ethertypes:ethertype; | enum long-sn { | |||
| description | value 28; | |||
| "The Ethernet packet type value of the Ethernet header"; | description | |||
| } | "A 28-bit DetNet sequence number field is used."; | |||
| leaf vlan-id { | } | |||
| type dot1q-types:vlanid; | ||||
| description | ||||
| "The VLAN value of the Ethernet header"; | ||||
| } | ||||
| leaf pcp { | ||||
| type uint8; | ||||
| description | ||||
| "The priority value of the Ethernet header"; | ||||
| } | ||||
| } | ||||
| grouping destination-ip-port-identification { | } | |||
| description | description | |||
| "The TCP/UDP port(source/destination) identification information"; | "This type captures the sequence number behavior."; | |||
| container destination-port { | } | |||
| uses packet-fields:port-range-or-operator; | ||||
| } | ||||
| } | ||||
| grouping source-ip-port-identification { | grouping ip-header { | |||
| description | description | |||
| "The TCP/UDP port(source/destination) identification information"; | "This grouping captures the IPv4/IPv6 packet header | |||
| container source-port { | information. it is modeled after existing fields"; | |||
| uses packet-fields:port-range-or-operator; | 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 ip-flow-identification { | grouping l2-header { | |||
| description | description | |||
| "The IPv4/IPv6 packet header identification information"; | "The Ethernet or TSN packet header information"; | |||
| leaf src-ip-prefix { | leaf source-mac-address { | |||
| type inet:ip-prefix; | type yang:mac-address; | |||
| description | description | |||
| "The source IP address of the header"; | "The source MAC address value of the Ethernet header."; | |||
| } | } | |||
| leaf dest-ip-prefix { | leaf destination-mac-address { | |||
| type inet:ip-prefix; | type yang:mac-address; | |||
| description | description | |||
| "The destination IP address of the header"; | "The destination MAC address value of the Ethernet header."; | |||
| } | } | |||
| leaf next-header { | leaf ethertype { | |||
| type uint8; | type ethertypes:ethertype; | |||
| description | description | |||
| "The next header of the IPv6 header"; | "The Ethernet packet type value of the Ethernet header."; | |||
| } | } | |||
| leaf traffic-class { | leaf vlan-id { | |||
| type uint8; | type dot1q-types:vlanid; | |||
| description | description | |||
| "The traffic class value of the header"; | "The VLAN value of the Ethernet header."; | |||
| } | reference | |||
| leaf flow-label { | "IEEE 802.1Qcx-2020."; | |||
| type inet:ipv6-flow-label; | } | |||
| description | leaf pcp { | |||
| "The flow label value of the header"; | type dot1q-types:priority-type; | |||
| } | description | |||
| uses source-ip-port-identification; | "The priority value of the Ethernet header."; | |||
| uses destination-ip-port-identification; | reference | |||
| leaf ipsec-spi { | "IEEE 802.1Qcx-2020."; | |||
| type ipsec-spi; | } | |||
| description | ||||
| "IPsec Security Parameters Index of the Security Association"; | ||||
| reference | ||||
| "IETF RFC 6071"; | ||||
| } | ||||
| } | ||||
| grouping mpls-flow-identification { | } | |||
| description | ||||
| "The MPLS packet header identification information"; | ||||
| choice label-space { | ||||
| description | ||||
| "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; | ||||
| } | ||||
| } | ||||
| } | grouping destination-ip-port-id { | |||
| } | description | |||
| "The TCP/UDP port(source/destination) identification | ||||
| information."; | ||||
| container destination-port { | ||||
| uses packet-fields:port-range-or-operator; | ||||
| } | ||||
| } | ||||
| grouping traffic-specification { | grouping source-ip-port-id { | |||
| container traffic-specification { | description | |||
| description | "The TCP/UDP port(source/destination) identification | |||
| "traffic-specification specifies how the Source | information."; | |||
| transmits packets for the flow. This is the | container source-port { | |||
| promise/request of the Source to the network. | uses packet-fields:port-range-or-operator; | |||
| The network uses this traffic specification | } | |||
| to allocate resources and adjust queue | } | |||
| parameters in network nodes."; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Section 4.1"; | ||||
| leaf interval { | ||||
| type uint32; | ||||
| units microseconds; | ||||
| description | ||||
| "The period of time in which the traffic | ||||
| specification cannot be exceeded."; | ||||
| } | grouping ip-flow-id { | |||
| leaf max-packets-per-interval { | description | |||
| type uint32; | "The IPv4/IPv6 packet header identification information."; | |||
| description | leaf src-ip-prefix { | |||
| "The maximum number of packets that the | type inet:ip-prefix; | |||
| source will transmit in one Interval."; | description | |||
| } | "The source IP prefix"; | |||
| leaf max-payload-size { | reference | |||
| type uint32; | "RFC 6021 Common YANG Data Types"; | |||
| description | } | |||
| "The maximum payload size that the source | leaf dest-ip-prefix { | |||
| will transmit."; | type inet:ip-prefix; | |||
| } | description | |||
| leaf average-packets-per-interval { | "The destination IP prefix"; | |||
| type uint32; | reference | |||
| description | "RFC 6021 Common YANG Data Types"; | |||
| "The average number of packets that the | } | |||
| source will transmit in one interval"; | leaf protocol-next-header { | |||
| } | type uint8; | |||
| leaf average-payload-size { | description | |||
| type uint32; | "Internet Protocol number. Refers to the protocol of the | |||
| description | payload. In IPv6, this field is known as 'next-header', and | |||
| "The average payload size that the | if extension headers are present, the protocol is present in | |||
| source will transmit."; | the 'upper-layer' header."; | |||
| } | reference | |||
| } | "RFC 791: Internet Protocol | |||
| } | RFC 8200: Internet Protocol, Version 6 (IPv6) Specification."; | |||
| grouping traffic-requirements { | } | |||
| container traffic-requirements { | leaf dscp { | |||
| description | type inet:dscp; | |||
| "FlowRequirements: defines the attributes of the App-flow | description | |||
| regarding bandwidth, latency, latency variation, loss, and | "The traffic class value in the header."; | |||
| misordering tolerance."; | reference | |||
| reference | "RFC 6021 Common YANG Data Types"; | |||
| "draft-ietf-detnet-flow-information-model Section 4.2"; | } | |||
| leaf min-bandwidth { | leaf flow-label { | |||
| type uint64; | type inet:ipv6-flow-label; | |||
| units bytes-per-second; | description | |||
| description | "The flow label value of the header."; | |||
| "MinBandwidth is the minimum bandwidth that has to be | reference | |||
| guaranteed for the DetNet service. MinBandwidth is | "RFC 6021 Common YANG Data Types"; | |||
| specified in octets per second."; | } | |||
| } | uses source-ip-port-id; | |||
| leaf max-latency { | uses destination-ip-port-id; | |||
| type uint32; | leaf ipsec-spi { | |||
| units microseconds; | type ipsec-spi; | |||
| description | description | |||
| "MaxLatency is the maximum latency from Ingress to Egress(es) | "IPsec Security Parameters Index of the Security Association."; | |||
| for a single packet of the DetNet flow. MaxLatency is | reference | |||
| specified as an integer number of nanoseconds"; | "IETF RFC 6071 IP Security (IPsec) and Internet Key Exchange | |||
| } | (IKE) Document Roadmap."; | |||
| leaf max-latency-variation { | } | |||
| type uint32; | } | |||
| description | ||||
| "MaxLatencyVariation 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 | ||||
| "MaxLoss 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"; | ||||
| } | grouping mpls-flow-id { | |||
| leaf max-misordering { | description | |||
| type uint32; | "The MPLS packet header identification information."; | |||
| units packets; | choice label-space { | |||
| description | description | |||
| "MaxMisordering describes the tolerable maximum number of | "Designates the label space being used."; | |||
| packets that can be received out of order. The maximum | case context-label-space { | |||
| allowed misordering can be measured for example based on | uses rt-types:mpls-label-stack; | |||
| sequence number. The value zero for the maximum allowed | } | |||
| misordering indicates that in order delivery is required, | case platform-label-space { | |||
| misordering cannot be tolerated."; | leaf label { | |||
| } | type rt-types:mpls-label; | |||
| } | } | |||
| } | } | |||
| } | ||||
| } | ||||
| grouping data-flow-spec { | grouping data-flow-spec { | |||
| description | description | |||
| "app-flow identification"; | "app-flow identification"; | |||
| choice data-flow-type { | choice data-flow-type { | |||
| case tsn-app-flow { | container tsn-app-flow { | |||
| uses l2-header; | uses l2-header; | |||
| } | } | |||
| case ip-app-flow { | container ip-app-flow { | |||
| uses ip-flow-identification; | uses ip-flow-id; | |||
| } | } | |||
| case mpls-app-flow { | container mpls-app-flow { | |||
| uses mpls-flow-identification; | uses mpls-flow-id; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping detnet-flow-spec { | grouping detnet-flow-spec { | |||
| description | description | |||
| "detnet-flow identification"; | "detnet-flow identification."; | |||
| choice detnet-flow-type { | choice detnet-flow-type { | |||
| case ip-detnet-flow { | case ip-detnet-flow { | |||
| uses ip-flow-identification; | uses ip-flow-id; | |||
| } | } | |||
| case mpls-detnet-flow { | case mpls-detnet-flow { | |||
| uses mpls-flow-identification; | uses mpls-flow-id; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping app-flows-ref { | grouping app-flows-group { | |||
| description | description | |||
| "incoming or outgoing app-flow reference group"; | "Incoming or outgoing app-flow reference group."; | |||
| leaf-list flow-list{ | leaf-list app-flow-list { | |||
| type app-flow-ref; | type app-flow-ref; | |||
| description | description | |||
| "List of ingress or egress app-flows"; | "List of ingress or egress app-flows."; | |||
| } | } | |||
| } | } | |||
| grouping service-sub-layer-ref { | grouping service-sub-layer-group { | |||
| description | description | |||
| "incoming or outgoing service sub-layer reference group"; | "Incoming or outgoing service sub-layer reference group."; | |||
| leaf-list service-sub-layer { | leaf-list service-sub-layer { | |||
| type service-sub-layer-ref; | type service-sub-layer-ref; | |||
| description | description | |||
| "List of incoming or outgoing service sub-layers | "List of incoming or outgoing service sub-layers that have | |||
| that have to aggregate or disaggregate"; | to aggregate or disaggregate."; | |||
| } | } | |||
| } | } | |||
| grouping forwarding-sub-layer-ref { | grouping forwarding-sub-layer-group { | |||
| description | description | |||
| "incoming or outgoing forwarding sub-layer reference group"; | "Incoming or outgoing forwarding sub-layer reference group."; | |||
| leaf-list forwarding-sub-layer { | ||||
| type forwarding-sub-layer-ref; | ||||
| description | ||||
| "List of incoming or outgoing forwarding sub-layers | ||||
| that have to aggregate or disaggregate"; | ||||
| } | ||||
| } | ||||
| grouping detnet-header { | leaf-list forwarding-sub-layer { | |||
| description | type forwarding-sub-layer-ref; | |||
| "DetNet header info for DetNet encapsulation or swap"; | description | |||
| choice header-type { | "List of incoming or outgoing forwarding sub-layers that | |||
| case detnet-mpls-header { | have to aggregate or disaggregate."; | |||
| description | } | |||
| "MPLS label stack for DetNet MPLS encapsulation or | } | |||
| forwarding"; | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| case detnet-ip-header { | ||||
| description | ||||
| "IPv4/IPv6 packet header for DetNet IP encapsulation"; | ||||
| uses ip-header; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping detnet-app-next-hop-content { | grouping detnet-header { | |||
| description | description | |||
| "Generic parameters of DetNet next hops."; | "DetNet header info for DetNet encapsulation or swap."; | |||
| choice next-hop-options { | choice header-type { | |||
| mandatory true; | case detnet-mpls-header { | |||
| description | description | |||
| "Options for next hops. | "MPLS label stack for DetNet MPLS encapsulation or | |||
| It is expected that further cases will be added through | forwarding."; | |||
| augments from other modules, e.g., for recursive | uses rt-types:mpls-label-stack; | |||
| next hops."; | } | |||
| case simple-next-hop { | case detnet-ip-header { | |||
| description | description | |||
| "This case represents a simple next hop consisting of the | "IPv4/IPv6 packet header for DetNet IP encapsulation."; | |||
| next-hop address and/or outgoing interface. | uses ip-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; | ||||
| } | ||||
| choice flow-type { | ||||
| case ip { | ||||
| leaf next-hop-address { | ||||
| type inet:ip-address; | ||||
| } | ||||
| } | ||||
| case mpls { | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| } | ||||
| } | ||||
| case next-hop-list { | ||||
| container next-hop-list { | ||||
| description | ||||
| "Container for multiple next hops."; | ||||
| 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 if the index of for a hop."; | ||||
| } | ||||
| leaf outgoing-interface { | ||||
| type if:interface-ref; | ||||
| } | ||||
| choice flow-type { | ||||
| case ip { | ||||
| leaf next-hop-address { | ||||
| type inet:ip-address; | ||||
| } | ||||
| } | ||||
| case mpls { | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping detnet-forwarding-next-hop-content { | grouping detnet-app-next-hop-content { | |||
| description | description | |||
| "Generic parameters of DetNet next hops."; | "Generic parameters of DetNet next hops."; | |||
| choice next-hop-options { | choice next-hop-options { | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Options for next hops. | "Options for next hops. It is expected that further cases | |||
| It is expected that further cases will be added through | will be added through | |||
| augments from other modules, e.g., for recursive | augments from other modules, e.g., for recursive | |||
| next hops."; | next hops."; | |||
| case simple-next-hop { | case simple-next-hop { | |||
| description | description | |||
| "This case represents a simple next hop consisting of the | "This case represents a simple next hop consisting of the | |||
| next-hop address and/or outgoing interface. | next-hop address and/or outgoing interface. | |||
| Modules for address families MUST augment this case with a | Modules for address families MUST augment this case with a | |||
| leaf containing a next-hop address of that address | leaf containing a next-hop address of that address | |||
| family."; | family."; | |||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| } | } | |||
| choice flow-type { | choice flow-type { | |||
| case ip { | case ip { | |||
| choice operation-type { | leaf next-hop-address { | |||
| case ip-forwarding { | type inet:ip-address; | |||
| leaf next-hop-address { | } | |||
| type inet:ip-address; | } | |||
| } | case mpls { | |||
| } | uses rt-types:mpls-label-stack; | |||
| case mpls-over-ip-encapsulation { | } | |||
| uses ip-header; | } | |||
| } | } | |||
| } | case next-hop-list { | |||
| description | ||||
| "Container for multiple next hops."; | ||||
| 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 | ||||
| "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 { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "Name of the outgoing interface."; | ||||
| } | ||||
| choice flow-type { | ||||
| case ip { | ||||
| leaf next-hop-address { | ||||
| type inet:ip-address; | ||||
| } | ||||
| } | ||||
| case mpls { | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | grouping detnet-forwarding-next-hop-content { | |||
| case mpls { | description | |||
| uses rt-types:mpls-label-stack; | "Generic parameters of DetNet next hops."; | |||
| } | choice next-hop-options { | |||
| } | mandatory true; | |||
| } | description | |||
| case next-hop-list { | "Options for next hops. | |||
| container next-hop-list { | It is expected that further cases will be added through | |||
| description | augments from other modules, e.g., for recursive | |||
| "Container for multiple next hops."; | next hops."; | |||
| list next-hop { | case simple-next-hop { | |||
| key "hop-index"; | description | |||
| description | "This case represents a simple next hop consisting of the | |||
| "An entry in a next-hop list. | 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; | ||||
| } | ||||
| choice flow-type { | ||||
| case ip { | ||||
| choice operation-type { | ||||
| case ip-forwarding { | ||||
| leaf next-hop-address { | ||||
| type inet:ip-address; | ||||
| } | ||||
| } | ||||
| case mpls-over-ip-encapsulation { | ||||
| uses ip-header; | ||||
| } | ||||
| } | ||||
| } | ||||
| case mpls { | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| } | ||||
| } | ||||
| case next-hop-list { | ||||
| description | ||||
| "Container for multiple next hops."; | ||||
| 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; | ||||
| } | ||||
| choice flow-type { | ||||
| case ip { | ||||
| choice operation-type { | ||||
| case ip-forwarding { | ||||
| leaf next-hop-address { | ||||
| type inet:ip-address; | ||||
| } | ||||
| } | ||||
| case mpls-over-ip-encapsulation { | ||||
| uses ip-header; | ||||
| } | ||||
| } | ||||
| } | ||||
| case mpls { | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| Modules for address families MUST augment this list | container detnet { | |||
| with a leaf containing a next-hop address of that | list traffic-profile { | |||
| address family."; | key "profile-name"; | |||
| leaf hop-index { | description | |||
| type uint8; | "A traffic profile."; | |||
| description | leaf profile-name { | |||
| "The value if the index of for a hop."; | type string; | |||
| } | description | |||
| leaf outgoing-interface { | "An Aggregation group ID. Zero means the service is not | |||
| type if:interface-ref; | part of a group."; | |||
| } | } | |||
| choice flow-type { | container traffic-requirements { | |||
| case ip { | description | |||
| choice operation-type { | "This defines the attributes of the App-flow | |||
| case ip-forwarding { | regarding bandwidth, latency, latency variation, loss, and | |||
| leaf next-hop-address { | misordering tolerance."; | |||
| type inet:ip-address; | reference | |||
| } | "draft-ietf-detnet-flow-information-model Section 4.2"; | |||
| } | leaf min-bandwidth { | |||
| case mpls-over-ip-encapsulation { | type uint64; | |||
| uses ip-header; | units "bps"; | |||
| } | description | |||
| } | "This is the minimum bandwidth that has to be | |||
| } | guaranteed for the DetNet service. MinBandwidth is | |||
| case mpls { | specified in octets per second."; | |||
| uses rt-types:mpls-label-stack; | } | |||
| } | 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 | |||
| container detnet { | nanoseconds."; | |||
| list traffic-profile { | } | |||
| key "profile-name"; | leaf max-latency-variation { | |||
| description | type uint32; | |||
| "A traffic profile"; | units "nanoseconds"; | |||
| leaf profile-name { | description | |||
| type string; | "This is the difference between the | |||
| description | minimum and the maximum end-to-end one-way latency. | |||
| "An Aggregation group ID. Zero means the service is not | MaxLatencyVariation is specified as an integer number of | |||
| part of a group"; | nanoseconds."; | |||
| } | } | |||
| uses traffic-requirements; | leaf max-loss { | |||
| uses traffic-specification; | type uint32; | |||
| leaf-list member-applications { | description | |||
| type app-flow-ref; | "This defines the maximum Packet Loss Ratio (PLR) | |||
| config false; | parameter for the DetNet service between the Ingress and | |||
| description | Egress(es) of the DetNet domain."; | |||
| "Applications attached to this profile"; | } | |||
| } | leaf max-consecutive-loss-tolerance { | |||
| leaf-list member-services { | type uint32; | |||
| type service-sub-layer-ref; | units "packets"; | |||
| config false; | description | |||
| description | "Some applications have special loss requirement, such | |||
| "Services attached to this profile"; | as MaxConsecutiveLossTolerance. The maximum consecutive | |||
| } | loss tolerance parameter describes the maximum number of | |||
| leaf-list member-forwarding-sublayers { | consecutive packets whose loss can be tolerated. The | |||
| type forwarding-sub-layer-ref; | maximum consecutive loss tolerance can be measured for | |||
| config false; | example based on sequence number."; | |||
| description | } | |||
| "Forwarding sub-layer attached to this profile"; | leaf max-misordering { | |||
| } | type uint32; | |||
| } | units "packets"; | |||
| container app-flows { | description | |||
| description | "This describes the tolerable maximum number | |||
| "The DetNet app-flow configuration"; | of packets that can be received out of order. The | |||
| reference | maximum allowed misordering can be measured for example | |||
| "draft-ietf-detnet-flow-information-model Section Section 4.1"; | based on sequence number. The value zero for the | |||
| list app-flow { | maximum allowed misordering indicates that in order | |||
| key "name"; | delivery is required, misordering cannot be tolerated."; | |||
| description | } | |||
| "A unique (management) identifier of the App-flow."; | } | |||
| leaf name { | container flow-spec { | |||
| type string; | description | |||
| description | "Flow-specification specifies how the Source transmits | |||
| "A unique (management) identifier of the App-flow."; | packets for the flow. This is the promise/request of the | |||
| reference | Source to the network. The network uses this flow | |||
| "draft-ietf-detnet-flow-information-model | specification to allocate resources and adjust queue | |||
| Sections 4.1, 5.1"; | 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; | ||||
| 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 { | ||||
| description | ||||
| "The DetNet app-flow configuration."; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Section Section 4.1"; | ||||
| list app-flow { | ||||
| key "name"; | ||||
| description | ||||
| "A unique (management) identifier of the App-flow."; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "A unique (management) identifier of the App-flow."; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model | ||||
| Sections 4.1, 5.1"; | ||||
| } | ||||
| leaf app-flow-bidir-congruent { | ||||
| type boolean; | ||||
| default false; | ||||
| description | ||||
| "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 | ||||
| "draft-ietf-detnet-flow-information-model Section 4.2"; | ||||
| } | ||||
| leaf outgoing-service { | ||||
| type service-sub-layer-ref; | ||||
| config false; | ||||
| description | ||||
| "Binding to this applications outgoing | ||||
| service."; | ||||
| } | ||||
| leaf incoming-service { | ||||
| type service-sub-layer-ref; | ||||
| config false; | ||||
| description | ||||
| "Binding to this applications incoming service."; | ||||
| } | ||||
| leaf traffic-profile { | ||||
| type traffic-profile-ref; | ||||
| description | ||||
| "The Traffic Profile for this group."; | ||||
| } | ||||
| container ingress { | ||||
| description | ||||
| "Ingress DetNet application flows or a compound flow."; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "Ingress DetNet application."; | ||||
| } | ||||
| leaf app-flow-status { | ||||
| type identityref { | ||||
| base app-status; | ||||
| } | ||||
| config false; | ||||
| description | ||||
| "Status of ingress application flow."; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Sections | ||||
| 4.1, 5.8"; | ||||
| } | ||||
| leaf interface { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "Interface is used for any service type where a whole | ||||
| 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 { | ||||
| container ethernet { | ||||
| leaf interface { | ||||
| type if:interface-ref; | ||||
| } | ||||
| description | ||||
| "TSN unaware maps to an interface."; | ||||
| } | ||||
| container ip-mpls { | ||||
| uses detnet-app-next-hop-content; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| container service-sub-layer { | ||||
| description | ||||
| "The DetNet service sub-layer configuration."; | ||||
| list service-sub-layer-list { | ||||
| key "name"; | ||||
| description | ||||
| "Services are indexed by name."; | ||||
| leaf name { | ||||
| type string; | ||||
| 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 { | ||||
| leaf service-protection-type { | ||||
| type service-protection-type; | ||||
| description | ||||
| "The DetNet service protection type such as PRF, PEF, | ||||
| PEOF,PERF, and PEORF."; | ||||
| } | reference | |||
| leaf app-flow-bidir-congruent { | "draft-ietf-detnet-data-plane-framework Section 4.3"; | |||
| type boolean; | } | |||
| description | leaf sequence-number-length { | |||
| "Defines the data path requirement of the App-flow whether | type sequence-number-field; | |||
| it must share the same data path and physical path | description | |||
| for both directions through the network, | "Sequence number field length can be one of 0 (none), | |||
| e.g., to provide congruent paths in the two directions."; | 16-bits or 28-bits."; | |||
| reference | } | |||
| "draft-ietf-detnet-flow-information-model Section 4.2"; | } | |||
| } | leaf service-operation-type { | |||
| leaf outgoing-service { | type service-operation-type; | |||
| type service-sub-layer-ref; | } | |||
| config false; | container incoming-type { | |||
| description | description | |||
| "Binding to this applications outgoing | "The DetNet service sub-layer incoming configuration."; | |||
| service"; | choice incoming-type { | |||
| } | mandatory true; | |||
| leaf incoming-service { | description | |||
| type service-sub-layer-ref; | "A service sub-layer may have App flows or other | |||
| config false; | service sub-layers."; | |||
| description | container app-flow { | |||
| "Binding to this applications incoming | description | |||
| service"; | "This service sub-layer is related to the app-flows | |||
| } | of the upper layer and provide ingress proxy or | |||
| leaf traffic-profile { | ingress aggregation at the ingress node."; | |||
| type traffic-profile-ref; | uses app-flows-group; | |||
| description | } | |||
| "The Traffic Profile for this group"; | container service-aggregation { | |||
| } | description | |||
| container ingress { | "This service sub-layer is related to the service | |||
| // key "name"; This should be a list for aggregation | sub-layer of the upper layer and provide | |||
| description | service-to-service aggregation at the ingress node | |||
| "Ingress DetNet application flows or a compound flow"; | or relay node."; | |||
| leaf name { | uses service-sub-layer-group; | |||
| type string; | } | |||
| description | container forwarding-aggregation { | |||
| "Ingress DetNet application"; | description | |||
| } | "This service sub-layer is related to the forwarding | |||
| leaf app-flow-status { | sub-layer of the upper layer and provide | |||
| type identityref { | forwarding-to-service aggregation at the ingress | |||
| base app-status; | node or relay node."; | |||
| } | uses forwarding-sub-layer-group; | |||
| config false; | } | |||
| description | container service-id { | |||
| "Status of ingress application flow"; | description | |||
| reference | "This service sub-layer is related to the service or | |||
| "draft-ietf-detnet-flow-information-model | forwarding sub-layer of the lower layer and provide | |||
| Sections 4.1, 5.8"; | DetNet service relay or termination at the relay | |||
| } | node or egress node."; | |||
| leaf interface { | uses detnet-flow-spec; | |||
| type if:interface-ref; | } | |||
| } | } | |||
| uses data-flow-spec; | } | |||
| } //End of app-ingress | container outgoing-type { | |||
| container egress { | description | |||
| description | "The DetNet service sub-layer outgoing configuration."; | |||
| "Route's next-hop attribute."; | choice outgoing-type { | |||
| // key "name"; This should be a list for aggregation | mandatory true; | |||
| leaf name { | description | |||
| type string; | "The out-going type may be a forwarding Sub-layer or a | |||
| description | service sub-layer or ? types need to be named."; | |||
| "Egress DetNet application"; | container forwarding-sub-layer { | |||
| } | description | |||
| choice application-type { | "This service sub-layer is sent to the forwarding | |||
| container Ethernet { | sub-layers of the lower layer for DetNet service | |||
| leaf Ethernet-place-holder { | forwarding or service-to-forwarding aggregation at | |||
| type string; | the ingress node or relay node. When the operation | |||
| description | type is service-initiation, The service sub-layer | |||
| "Place holder for matching Ethernet"; | 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 | |||
| container ip-mpls { | flow when the incoming type is service or | |||
| uses detnet-app-next-hop-content; | 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 | |||
| } | "List of the outgoing service | |||
| container service-sub-layer { | that separately for each node | |||
| description | where services will be eliminated."; | |||
| "The DetNet service sub-layer configuration"; | leaf service-outgoing-index { | |||
| list service-sub-layer-list { | type uint8; | |||
| key "name"; | } | |||
| description | uses detnet-header; | |||
| "Services are indexed by name"; | uses forwarding-sub-layer-group; | |||
| leaf name { | } | |||
| type string; | } | |||
| description | container service-sub-layer { | |||
| "The name of the DetNet service sub-layer"; | description | |||
| } | "This service sub-layer is sent to the service | |||
| leaf service-rank { | sub-layers of the lower layer for service-to-service | |||
| type uint8; | aggregation at the ingress node or relay node. The | |||
| description | service sub-layer encapsulates the DetNet | |||
| "The DetNet rank for this service"; | Control-Word and S-label when the operation type is | |||
| reference | service-initiation, and swaps the S-label when the | |||
| "draft-ietf-detnet-flow-information-model Section 5.7"; | operation type is service-relay."; | |||
| } | leaf aggregation-service-sub-layer { | |||
| leaf traffic-profile { | type service-sub-layer-ref; | |||
| type traffic-profile-ref; | description | |||
| description | "reference point of the service-sub-layer | |||
| "The Traffic Profile for this service"; | at which this service will be aggregated."; | |||
| } | } | |||
| container service-protection { | container service-label { | |||
| leaf service-protection-type { | uses rt-types:mpls-label-stack; | |||
| type service-protection-type; | } | |||
| description | } | |||
| "The DetNet service protection type such as PRF, PEF, | container app-flow { | |||
| PEOF,PERF, and PEORF"; | description | |||
| reference | "This service sub-layer is sent to the app-flow of | |||
| "draft-ietf-detnet-data-plane-framework Section 4.3"; | the upper layer for egress proxy at the egress node, | |||
| } | and decapsulates the DetNet Control-Word and S-label | |||
| leaf sequence-number-length { | for individual DetNet service. This outgoing type | |||
| type sequence-number-field; | only can be chosen when the operation type is | |||
| description | service-termination."; | |||
| "Sequence number field length can be one of 0 (none), | uses app-flows-group; | |||
| 16 bits or 28 bits."; | } | |||
| } | container service-disaggregation { | |||
| } | description | |||
| leaf service-operation-type { | "This service sub-layer is sent to the service | |||
| type service-operation-type; | sub-layer of the upper layer for service-to-service | |||
| } | disaggregation at the relay node or egress node, and | |||
| container incoming-type { | decapsulates the DetNet Control-Word and A-label for | |||
| description | aggregated DetNet service. This outgoing type only | |||
| "The DetNet service sub-layer incoming configuration."; | can be chosen when the operation type is | |||
| choice incoming-type { | service-termination."; | |||
| mandatory true; | uses service-sub-layer-group; | |||
| description | } | |||
| ""; | container forwarding-disaggregation { | |||
| container app-flow { | description | |||
| description | "This service sub-layer is sent to the forwarding | |||
| "This service sub-layer is related to | sub-layer of the upper layer for | |||
| the app-flows of the upper layer | forwarding-to-service disaggregation at the relay | |||
| and provide ingress proxy or ingress aggregation | node or egress node, and decapsulates the DetNet | |||
| at the ingress node."; | Control-Word and A-label for aggregated DetNet | |||
| uses app-flows-ref; | service. This outgoing type only can be chosen when | |||
| } | the operation type is service-termination."; | |||
| container service { | uses forwarding-sub-layer-group; | |||
| 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-ref; | container forwarding-sub-layer { | |||
| description | ||||
| "The DetNet forwarding sub-layer configuration."; | ||||
| list forwarding-sub-layer-list { | ||||
| key "name"; | ||||
| description | ||||
| "The List is one or more DetNet Traffic types."; | ||||
| leaf name { | ||||
| type string; | ||||
| 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; | ||||
| } | ||||
| container incoming-type { | ||||
| description | ||||
| "The DetNet forwarding sub-layer incoming configuration."; | ||||
| choice incoming-type { | ||||
| mandatory true; | ||||
| description | ||||
| "Cases of incoming types."; | ||||
| container service-sub-layer { | ||||
| description | ||||
| "This forwarding sub-layer is related to the service | ||||
| 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 { | |||
| container forwarding { | type if:interface-ref; | |||
| description | description | |||
| "This service sub-layer is related to | "This is the interface associated with the | |||
| the forwarding sub-layer of the upper layer | forwarding sub-layer."; | |||
| and provide forwarding-to-service aggregation | } | |||
| at the ingress node or relay node."; | uses detnet-flow-spec; | |||
| uses forwarding-sub-layer-ref; | } | |||
| } | } | |||
| container service-identification { | } | |||
| description | container outgoing-type { | |||
| "This service sub-layer is related to | description | |||
| the service or forwarding sub-layer of the lower layer | "The DetNet forwarding sub-layer outbound | |||
| and provide DetNet service relay or termination | configuration."; | |||
| at the relay node or egress node."; | choice outgoing-type { | |||
| uses detnet-flow-spec; | mandatory true; | |||
| } | description | |||
| } | "This is when a service connected directly to an | |||
| } | interface with no forwarding sub-layer."; | |||
| container outgoing-type { | container | |||
| description | interface { | |||
| "The DetNet service sub-layer outgoing configuration."; | description | |||
| choice outgoing-type { | "This forwarding sub-layer is sent to the interface | |||
| mandatory true; | for send to next-hop at the ingress node or relay | |||
| description | node or transit node."; | |||
| ""; | uses detnet-forwarding-next-hop-content; | |||
| container forwarding-sub-layer { | } | |||
| description | container service-aggregation { | |||
| "This service sub-layer is sent to the forwarding | description | |||
| sub-layers of the lower layer for DetNet service | "This forwarding sub-layer is sent to the service | |||
| forwarding or service-to-forwarding aggregation at | sub-layers of the lower layer for | |||
| the ingress node or relay node. When the operation | forwarding-to-service aggregation at the ingress | |||
| type is service-initiation, The service sub-layer | node or relay node."; | |||
| encapsulates the DetNet Control-Word and services | leaf aggregation-service-sub-layer { | |||
| label, which are for individual DetNet flow when the | type service-sub-layer-ref; | |||
| incoming type is app-flow and for aggregated DetNet | } | |||
| flow when the incoming type is service or | container optional-forwarding-label { | |||
| forwarding. The service sub-layer swaps the service | uses rt-types:mpls-label-stack; | |||
| label when the operation type is service-relay."; | } | |||
| list service-outgoing-list { | } | |||
| key "service-outgoing-index"; | container forwarding-sub-layer { | |||
| description | description | |||
| "list of the outgoing service | "This forwarding sub-layer is sent to the forwarding | |||
| that separately for each node | sub-layers of the lower layer for | |||
| where services will be eliminated"; | forwarding-to-forwarding aggregation at the ingress | |||
| leaf service-outgoing-index { | node or relay node or transit node."; | |||
| type uint8; | leaf aggregation-forwarding-sub-layer { | |||
| } | type forwarding-sub-layer-ref; | |||
| uses detnet-header; | ||||
| list next-layer { | ||||
| key "index"; | ||||
| description | ||||
| "list of the forwarding-sub-layer | ||||
| for replicate to multiple paths"; | ||||
| leaf index { | ||||
| type uint8; | ||||
| } | ||||
| leaf forwarding-sub-layer { | ||||
| type forwarding-sub-layer-ref; | ||||
| description | ||||
| "forwarding-sub-layer reference point"; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| 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 | ||||
| "reference point of the service-sub-layer | ||||
| at which this service will be aggregated"; | ||||
| } | ||||
| container service-label { | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| } | ||||
| container upper-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-ref; | ||||
| } | ||||
| container upper-service-sub-layer { | ||||
| 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-ref; | ||||
| } | ||||
| container upper-forwarding-sub-layer { | ||||
| 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-ref; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| container forwarding-sub-layer { | ||||
| description | ||||
| "The DetNet forwarding sub-layer configuration"; | ||||
| list forwarding-sub-layer-list { | ||||
| key "name"; | ||||
| description | ||||
| ""; | ||||
| leaf name { | ||||
| type string; | ||||
| 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; | ||||
| } | ||||
| container incoming-type { | ||||
| description | ||||
| "The DetNet forwarding sub-layer incoming configuration."; | ||||
| choice incoming-type { | ||||
| mandatory true; | ||||
| description | ||||
| "Cases of incoming types"; | ||||
| container service-sub-layer { | ||||
| description | ||||
| "This forwarding sub-layer is related to the service | ||||
| sub-layers of the upper layer and provide DetNet | ||||
| forwarding or service-to-forwarding aggregation at | ||||
| the ingress node or relay node."; | ||||
| leaf-list sub-layer-list { | ||||
| type service-sub-layer-ref; | ||||
| config false; | ||||
| description | ||||
| ""; | ||||
| } | ||||
| } | ||||
| case upper-forwarding-sub-layer { | ||||
| 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-ref; | ||||
| } | ||||
| case lower-forwarding-sub-layer { | ||||
| //case forwarding-identification { | ||||
| 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; | ||||
| } | ||||
| } | ||||
| } | ||||
| container outgoing-type { | ||||
| description | ||||
| "The DetNet forwarding sub-layer outbound configuration."; | ||||
| choice outgoing-type { | ||||
| mandatory true; | ||||
| description | ||||
| ""; | ||||
| container interface { | } | |||
| description | container forwarding-label { | |||
| "This forwarding sub-layer is sent to the interface | uses rt-types:mpls-label-stack; | |||
| for send to next-hop at the ingress node or relay | } | |||
| node or transit node."; | } | |||
| uses detnet-forwarding-next-hop-content; | container service-sub-layer { | |||
| } | description | |||
| case service { | "This forwarding sub-layer is sent to the service | |||
| description | sub-layer of the upper layer and decapsulate the | |||
| "This forwarding sub-layer is sent to the service | F-label for DetNet service or service-to-forwarding | |||
| sub-layers of the lower layer for | disaggregation at the relay node or egress node. | |||
| forwarding-to-service aggregation at the ingress | This outgoing type only can be chosen when the | |||
| node or relay node."; | operation type is pop-and-lookup."; | |||
| leaf aggregation-service-sub-layer { | uses service-sub-layer-group; | |||
| type service-sub-layer-ref; | } | |||
| } | container forwarding-disaggregation { | |||
| container optional-forwarding-label { | description | |||
| uses rt-types:mpls-label-stack; | "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 | |||
| case forwarding { | at the transit node or relay node or egress node. | |||
| description | This outgoing type only can be chosen when the | |||
| "This forwarding sub-layer is sent to the forwarding | operation type is pop-and-lookup."; | |||
| sub-layers of the lower layer for | uses forwarding-sub-layer-group; | |||
| forwarding-to-forwarding aggregation at the ingress | } | |||
| node or relay node or transit node."; | } | |||
| leaf aggregation-forwarding-sub-layer { | } | |||
| type forwarding-sub-layer-ref; | } | |||
| } | } | |||
| container forwarding-label { | } | |||
| uses rt-types:mpls-label-stack; | } | |||
| } | <CODE ENDS> | |||
| } | ||||
| case upper-service { | ||||
| 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-ref; | ||||
| } | ||||
| case upper-forwarding { | ||||
| 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-ref; | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| <CODE ENDS> | ||||
| 8. Open Issues | 8. Open Issues | |||
| There are some open issues that are still under discussion: | There are some open issues that are still under discussion: | |||
| o Terminology. | o Terminology. | |||
| o Security Considerations. | o Security Considerations. | |||
| These issues will be resolved in the following versions of the draft. | These issues will be resolved in the following versions of the draft. | |||
| skipping to change at page 41, line 18 ¶ | skipping to change at page 42, line 40 ¶ | |||
| [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 | 12.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 Information Model", draft-ietf-detnet- | Fedyk, "DetNet Flow and Service Information Model", draft- | |||
| flow-information-model-11 (work in progress), October | ietf-detnet-flow-information-model-14 (work in progress), | |||
| 2020. | January 2021. | |||
| Appendix A. Examples | Appendix A. Examples | |||
| The following examples are provided. | The following examples are provided. These examples are tested with | |||
| Yanglint and use operational output to exercise both config true and | ||||
| config false objects | ||||
| o A simple DetNet application illustrting multiplexing of | o A simple DetNet application illustrating multiplexing of | |||
| Application Flows. | Application Flows. | |||
| o A case of Forwarding sub-layer aggregation using a single | o A case of Forwarding sub-layer aggregation using a single | |||
| forwarding sublayer. | forwarding sublayer. | |||
| o A case of Service sub-layer aggregation with and aggrgation label. | o A case of Service sub-layer aggregation with and aggregation | |||
| label. | ||||
| A.1. Example JSON Configuration | A.1. Example JSON Configuration/Operational | |||
| { | { | |||
| "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-12-18T23:59:00Z" | |||
| } | } | |||
| }, | }, | |||
| { | { | |||
| "name": "eth1", | "name": "eth1", | |||
| "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-12-18T23:59:00Z" | |||
| } | } | |||
| }, | }, | |||
| { | { | |||
| "name": "eth2", | "name": "eth2", | |||
| "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-12-18T23:59:00Z" | |||
| } | } | |||
| }, | }, | |||
| { | { | |||
| "name": "eth3", | "name": "eth3", | |||
| "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-12-18T23:59:00Z" | |||
| } | } | |||
| }, | }, | |||
| { | { | |||
| "name": "eth4", | "name": "eth4", | |||
| "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-12-18T23:59:00Z" | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| }, | }, | |||
| "ietf-detnet:detnet": { | "ietf-detnet:detnet": { | |||
| "app-flows": { | "app-flows": { | |||
| "app-flow": [ | "app-flow": [ | |||
| { | { | |||
| "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", | |||
| "src-ip-prefix": "1.1.1.1/32", | "ip-app-flow": { | |||
| "dest-ip-prefix": "8.8.8.8/32", | "src-ip-prefix": "1.1.1.1/32", | |||
| "traffic-class": 6 | "dest-ip-prefix": "8.8.8.0/24", | |||
| "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", | |||
| "src-ip-prefix": "1.1.1.1/32", | "ip-app-flow": { | |||
| "dest-ip-prefix": "8.8.8.8/32", | "src-ip-prefix": "2.1.1.1/32", | |||
| "traffic-class": 7 | "dest-ip-prefix": "9.8.8.0/24", | |||
| "dscp": 7 | ||||
| } | ||||
| } | } | |||
| } | } | |||
| ] | ] | |||
| }, | }, | |||
| "traffic-profile": [ | "traffic-profile": [ | |||
| { | { | |||
| "profile-name": "pf-1", | "profile-name": "pf-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, | |||
| "max-misordering": 0 | "max-misordering": 0 | |||
| }, | }, | |||
| "traffic-specification": { | "flow-spec": { | |||
| "interval": 5, | "interval": 5, | |||
| "max-packets-per-interval": 10, | "max-pkts-per-interval": 10, | |||
| "max-payload-size": 1500, | "max-payload-size": 1500, | |||
| "average-packets-per-interval": 5, | "min-payload-size": 100, | |||
| "average-payload-size": 1000 | "min-pkts-per-interval": 1 | |||
| }, | }, | |||
| "member-applications": [ | "member-apps": [ | |||
| "app-0", | "app-0", | |||
| "app-1" | "app-1" | |||
| ] | ] | |||
| }, | }, | |||
| { | { | |||
| "profile-name": "pf-2", | "profile-name": "pf-2", | |||
| "traffic-requirements": { | "traffic-requirements": { | |||
| "min-bandwidth": "200000000", | "min-bandwidth": "200000000", | |||
| "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, | |||
| "max-misordering": 0 | "max-misordering": 0 | |||
| }, | }, | |||
| "traffic-specification": { | "flow-spec": { | |||
| "interval": 5, | "interval": 5, | |||
| "max-packets-per-interval": 10, | "max-pkts-per-interval": 10, | |||
| "max-payload-size": 1500, | "max-payload-size": 1500, | |||
| "average-packets-per-interval": 5, | "min-payload-size": 100, | |||
| "average-payload-size": 1000 | "min-pkts-per-interval": 1 | |||
| }, | }, | |||
| "member-services": [ | "member-services": [ | |||
| "ssl-1" | "ssl-1" | |||
| ] | ] | |||
| }, | }, | |||
| { | { | |||
| "profile-name": "pf-3", | "profile-name": "pf-3", | |||
| "traffic-specification": { | "flow-spec": { | |||
| "interval": 5, | "interval": 5, | |||
| "max-packets-per-interval": 10, | "max-pkts-per-interval": 10, | |||
| "max-payload-size": 1500 | "max-payload-size": 1500 | |||
| }, | }, | |||
| "member-forwarding-sublayers": [ | "member-fwd-sublayers": [ | |||
| "fsl-1" | "fsl-1" | |||
| ] | ] | |||
| } | } | |||
| ], | ], | |||
| "service-sub-layer": { | "service-sub-layer": { | |||
| "service-sub-layer-list": [ | "service-sub-layer-list": [ | |||
| { | { | |||
| "name": "ssl-1", | "name": "ssl-1", | |||
| "service-rank": 10, | "service-rank": 10, | |||
| "traffic-profile": "pf-2", | "traffic-profile": "pf-2", | |||
| "service-operation-type": "service-initiation", | "service-operation-type": "service-initiation", | |||
| "service-protection": { | "service-protection": { | |||
| "service-protection-type": "none", | "service-protection-type": "none", | |||
| "sequence-number-length": "long-sn" | "sequence-number-length": "long-sn" | |||
| }, | }, | |||
| "incoming-type": { | "incoming-type": { | |||
| "app-flow": { | "app-flow": { | |||
| "flow-list": [ | "app-flow-list": [ | |||
| "app-0", | "app-0", | |||
| "app-1" | "app-1" | |||
| ] | ] | |||
| } | } | |||
| }, | }, | |||
| "outgoing-type": { | "outgoing-type": { | |||
| "forwarding-sub-layer": { | "forwarding-sub-layer": { | |||
| "service-outgoing-list": [ | "service-outgoing-list": [ | |||
| { | { | |||
| "service-outgoing-index": 0, | "service-outgoing-index": 0, | |||
| skipping to change at page 45, line 4 ¶ | skipping to change at page 46, line 33 ¶ | |||
| "outgoing-type": { | "outgoing-type": { | |||
| "forwarding-sub-layer": { | "forwarding-sub-layer": { | |||
| "service-outgoing-list": [ | "service-outgoing-list": [ | |||
| { | { | |||
| "service-outgoing-index": 0, | "service-outgoing-index": 0, | |||
| "mpls-label-stack": { | "mpls-label-stack": { | |||
| "entry": [ | "entry": [ | |||
| { | { | |||
| "id": 0, | "id": 0, | |||
| "label": 100 | "label": 100 | |||
| } | } | |||
| ] | ] | |||
| }, | }, | |||
| "next-layer": [ | "forwarding-sub-layer": [ | |||
| { | "fsl-1" | |||
| "index": 0, | ||||
| "forwarding-sub-layer": "fsl-1" | ||||
| } | ||||
| ] | ] | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| }, | ||||
| "forwarding-sub-layer": { | ||||
| "forwarding-sub-layer-list": [ | ||||
| { | ||||
| "name": "fsl-1", | ||||
| "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": 10000 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| Figure 1: Example DetNet JSON configuration | Figure 1: Example DetNet JSON configuration | |||
| A.2. Example XML Config: Aggregation using a Forwarding Sublayer | A.2. Example XML Config: Aggregation using a Forwarding Sublayer | |||
| <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-10-02T23:59:00Z</discontinuity-time> | <discontinuity-time>2020-12-18T23:59:00Z</discontinuity-time> | |||
| </statistics> | </statistics> | |||
| </interface> | </interface> | |||
| <interface> | <interface> | |||
| <name>eth1</name> | <name>eth1</name> | |||
| <type>ia:ethernetCsmacd</type> | <type>ia:ethernetCsmacd</type> | |||
| <oper-status>up</oper-status> | <oper-status>up</oper-status> | |||
| <statistics> | <statistics> | |||
| <discontinuity-time>2020-10-02T23:59:00Z</discontinuity-time> | <discontinuity-time>2020-12-18T23:59:00Z</discontinuity-time> | |||
| </statistics> | </statistics> | |||
| </interface> | </interface> | |||
| <interface> | <interface> | |||
| <name>eth2</name> | <name>eth2</name> | |||
| <type>ia:ethernetCsmacd</type> | <type>ia:ethernetCsmacd</type> | |||
| <oper-status>up</oper-status> | <oper-status>up</oper-status> | |||
| <statistics> | <statistics> | |||
| <discontinuity-time>2020-10-02T23:59:00Z</discontinuity-time> | <discontinuity-time>2020-12-18T23:59:00Z</discontinuity-time> | |||
| </statistics> | </statistics> | |||
| </interface> | </interface> | |||
| <interface> | <interface> | |||
| <name>eth3</name> | <name>eth3</name> | |||
| <type>ia:ethernetCsmacd</type> | <type>ia:ethernetCsmacd</type> | |||
| <oper-status>up</oper-status> | <oper-status>up</oper-status> | |||
| <statistics> | <statistics> | |||
| <discontinuity-time>2020-10-02T23:59:00Z</discontinuity-time> | <discontinuity-time>2020-12-18T23:59:00Z</discontinuity-time> | |||
| </statistics> | </statistics> | |||
| </interface> | </interface> | |||
| <interface> | <interface> | |||
| <name>eth4</name> | <name>eth4</name> | |||
| <type>ia:ethernetCsmacd</type> | <type>ia:ethernetCsmacd</type> | |||
| <oper-status>up</oper-status> | <oper-status>up</oper-status> | |||
| <statistics> | <statistics> | |||
| <discontinuity-time>2020-10-02T23:59:00Z</discontinuity-time> | <discontinuity-time>2020-12-18T23:59:00Z</discontinuity-time> | |||
| </statistics> | </statistics> | |||
| </interface> | </interface> | |||
| </interfaces> | </interfaces> | |||
| <detnet | <detnet | |||
| xmlns="urn:ietf:params:xml:ns:yang:ietf-detnet"> | xmlns="urn:ietf:params:xml:ns:yang:ietf-detnet"> | |||
| <app-flows> | <app-flows> | |||
| <app-flow> | <app-flow> | |||
| <name>app-1</name> | <name>app-1</name> | |||
| <app-flow-bidir-congruent>false</app-flow-bidir-congruent> | <app-flow-bidir-congruent>false</app-flow-bidir-congruent> | |||
| <outgoing-service>ssl-1</outgoing-service> | <outgoing-service>ssl-1</outgoing-service> | |||
| <traffic-profile>1</traffic-profile> | <traffic-profile>1</traffic-profile> | |||
| <ingress> | <ingress> | |||
| <app-flow-status>ready</app-flow-status> | ||||
| <interface>eth0</interface> | <interface>eth0</interface> | |||
| <src-ip-prefix>1.1.1.1/32</src-ip-prefix> | <ip-app-flow> | |||
| <dest-ip-prefix>8.8.8.8/32</dest-ip-prefix> | <src-ip-prefix>1.1.1.1/32</src-ip-prefix> | |||
| <dest-ip-prefix>8.8.8.8/32</dest-ip-prefix> | ||||
| <dscp>6</dscp> | ||||
| </ip-app-flow> | ||||
| </ingress> | </ingress> | |||
| </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> | ||||
| <interface>eth1</interface> | <interface>eth1</interface> | |||
| <src-ip-prefix>1.1.1.2/32</src-ip-prefix> | <ip-app-flow> | |||
| <dest-ip-prefix>8.8.8.9/32</dest-ip-prefix> | <src-ip-prefix>2.1.1.1/32</src-ip-prefix> | |||
| <dest-ip-prefix>9.8.8.8/32</dest-ip-prefix> | ||||
| <dscp>7</dscp> | ||||
| </ip-app-flow> | ||||
| <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> | |||
| <max-latency>100000000</max-latency> | <max-latency>100000000</max-latency> | |||
| <max-latency-variation>200000000</max-latency-variation> | <max-latency-variation>200000000</max-latency-variation> | |||
| <max-loss>2</max-loss> | <max-loss>2</max-loss> | |||
| <max-consecutive-loss-tolerance>5</max-consecutive-loss-tolerance> | <max-consecutive-loss-tolerance>5</max-consecutive-loss-tolerance> | |||
| <max-misordering>0</max-misordering> | <max-misordering>0</max-misordering> | |||
| </traffic-requirements> | </traffic-requirements> | |||
| <member-applications>app-1</member-applications> | <member-apps>app-1</member-apps> | |||
| <member-applications>app-2</member-applications> | <member-apps>app-2</member-apps> | |||
| </traffic-profile> | </traffic-profile> | |||
| <traffic-profile> | <traffic-profile> | |||
| <profile-name>2</profile-name> | <profile-name>2</profile-name> | |||
| <traffic-requirements> | <traffic-requirements> | |||
| <min-bandwidth>100000000</min-bandwidth> | <min-bandwidth>100000000</min-bandwidth> | |||
| <max-latency>100000000</max-latency> | <max-latency>100000000</max-latency> | |||
| <max-latency-variation>200000000</max-latency-variation> | <max-latency-variation>200000000</max-latency-variation> | |||
| <max-loss>2</max-loss> | <max-loss>2</max-loss> | |||
| <max-consecutive-loss-tolerance>5</max-consecutive-loss-tolerance> | <max-consecutive-loss-tolerance>5</max-consecutive-loss-tolerance> | |||
| <max-misordering>0</max-misordering> | <max-misordering>0</max-misordering> | |||
| </traffic-requirements> | </traffic-requirements> | |||
| <member-services>ssl-1</member-services> | <member-services>ssl-1</member-services> | |||
| <member-services>ssl-2</member-services> | <member-services>ssl-2</member-services> | |||
| </traffic-profile> | </traffic-profile> | |||
| <traffic-profile> | <traffic-profile> | |||
| <profile-name>3</profile-name> | <profile-name>3</profile-name> | |||
| <traffic-specification> | <flow-spec> | |||
| <interval>5</interval> | <interval>5</interval> | |||
| <max-packets-per-interval>10</max-packets-per-interval> | <max-pkts-per-interval>10</max-pkts-per-interval> | |||
| <max-payload-size>1500</max-payload-size> | <max-payload-size>1500</max-payload-size> | |||
| </traffic-specification> | </flow-spec> | |||
| <member-forwarding-sublayers>afl-1</member-forwarding-sublayers> | <member-fwd-sublayers>afl-1</member-fwd-sublayers> | |||
| </traffic-profile> | </traffic-profile> | |||
| <service-sub-layer> | <service-sub-layer> | |||
| <service-sub-layer-list> | <service-sub-layer-list> | |||
| <name>ssl-1</name> | <name>ssl-1</name> | |||
| <service-rank>10</service-rank> | <service-rank>10</service-rank> | |||
| <traffic-profile>2</traffic-profile> | <traffic-profile>2</traffic-profile> | |||
| <service-operation-type>service-initiation</service- | <service-operation-type>service-initiation | |||
| operation-type> | </service-operation-type> | |||
| <service-protection> | <service-protection> | |||
| <service-protection-type>none</service-protection-type> | <service-protection-type>none</service-protection-type> | |||
| <sequence-number-length>long-sn</sequence-number-length> | <sequence-number-length>long-sn</sequence-number-length> | |||
| </service-protection> | </service-protection> | |||
| <incoming-type> | <incoming-type> | |||
| <app-flow> | <app-flow> | |||
| <flow-list>app-1</flow-list> | <app-flow-list>app-1</app-flow-list> | |||
| </app-flow> | </app-flow> | |||
| </incoming-type> | </incoming-type> | |||
| <outgoing-type> | <outgoing-type> | |||
| <forwarding-sub-layer> | <forwarding-sub-layer> | |||
| <service-outgoing-list> | <service-outgoing-list> | |||
| <service-outgoing-index>0</service-outgoing-index> | <service-outgoing-index>0</service-outgoing-index> | |||
| <mpls-label-stack> | <mpls-label-stack> | |||
| <entry> | <entry> | |||
| <id>0</id> | <id>0</id> | |||
| <label>100</label> | <label>100</label> | |||
| </entry> | </entry> | |||
| </mpls-label-stack> | </mpls-label-stack> | |||
| <next-layer> | <forwarding-sub-layer>afl-1</forwarding-sub-layer> | |||
| <index>0</index> | ||||
| <forwarding-sub-layer>afl-1</forwarding-sub-layer> | ||||
| </next-layer> | ||||
| </service-outgoing-list> | </service-outgoing-list> | |||
| </forwarding-sub-layer> | </forwarding-sub-layer> | |||
| </outgoing-type> | </outgoing-type> | |||
| </service-sub-layer-list> | </service-sub-layer-list> | |||
| <service-sub-layer-list> | <service-sub-layer-list> | |||
| <name>ssl-2</name> | <name>ssl-2</name> | |||
| <service-rank>10</service-rank> | <service-rank>10</service-rank> | |||
| <traffic-profile>2</traffic-profile> | <traffic-profile>2</traffic-profile> | |||
| <service-operation-type>service-initiation</service- | <service-operation-type>service-initiation | |||
| operation-type> | </service-operation-type> | |||
| <service-protection> | <service-protection> | |||
| <service-protection-type>none</service-protection-type> | <service-protection-type>none</service-protection-type> | |||
| <sequence-number-length>long-sn</sequence-number-length> | <sequence-number-length>long-sn</sequence-number-length> | |||
| </service-protection> | </service-protection> | |||
| <incoming-type> | <incoming-type> | |||
| <app-flow> | <app-flow> | |||
| <flow-list>app-2</flow-list> | <app-flow-list>app-2</app-flow-list> | |||
| </app-flow> | </app-flow> | |||
| </incoming-type> | </incoming-type> | |||
| <outgoing-type> | <outgoing-type> | |||
| <forwarding-sub-layer> | <forwarding-sub-layer> | |||
| <service-outgoing-list> | <service-outgoing-list> | |||
| <service-outgoing-index>0</service-outgoing-index> | <service-outgoing-index>0</service-outgoing-index> | |||
| <mpls-label-stack> | <mpls-label-stack> | |||
| <entry> | <entry> | |||
| <id>0</id> | <id>0</id> | |||
| <label>103</label> | <label>103</label> | |||
| </entry> | </entry> | |||
| </mpls-label-stack> | </mpls-label-stack> | |||
| <next-layer> | <forwarding-sub-layer>afl-1</forwarding-sub-layer> | |||
| <index>0</index> | ||||
| <forwarding-sub-layer>afl-1</forwarding-sub-layer> | ||||
| </next-layer> | ||||
| </service-outgoing-list> | </service-outgoing-list> | |||
| </forwarding-sub-layer> | ||||
| </forwarding-sub-layer> | ||||
| </outgoing-type> | </outgoing-type> | |||
| </service-sub-layer-list> | </service-sub-layer-list> | |||
| </service-sub-layer> | </service-sub-layer> | |||
| <forwarding-sub-layer> | <forwarding-sub-layer> | |||
| <forwarding-sub-layer-list> | <forwarding-sub-layer-list> | |||
| <name>afl-1</name> | <name>afl-1</name> | |||
| <traffic-profile>3</traffic-profile> | <traffic-profile>3</traffic-profile> | |||
| <forwarding-operation-type>impose-and-forward</forwarding- | <forwarding-operation-type>impose-and-forward | |||
| operation-type> | </forwarding-operation-type> | |||
| <incoming-type> | <incoming-type> | |||
| <service-sub-layer> | <service-sub-layer> | |||
| <sub-layer-list>ssl-1</sub-layer-list> | <service-sub-layer>ssl-1</service-sub-layer> | |||
| <sub-layer-list>ssl-2</sub-layer-list> | <service-sub-layer>ssl-2</service-sub-layer> | |||
| </service-sub-layer> | </service-sub-layer> | |||
| </incoming-type> | </incoming-type> | |||
| <outgoing-type> | <outgoing-type> | |||
| <interface> | <interface> | |||
| <mpls-label-stack> | ||||
| <entry> | ||||
| <id>0</id> | ||||
| <label>10000</label> | ||||
| </entry> | ||||
| </mpls-label-stack> | ||||
| <outgoing-interface>eth2</outgoing-interface> | <outgoing-interface>eth2</outgoing-interface> | |||
| </interface> | <mpls-label-stack> | |||
| <entry> | ||||
| <id>0</id> | ||||
| <label>10000</label> | ||||
| </entry> | ||||
| </mpls-label-stack> | ||||
| </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 2: Example DetNet XML configuration | |||
| A.3. Example JSON Service Aggregation Configuration | A.3. Example JSON Service Aggregation Configuration | |||
| { | { | |||
| skipping to change at page 50, line 45 ¶ | skipping to change at page 53, line 7 ¶ | |||
| }, | }, | |||
| "ietf-detnet:detnet": { | "ietf-detnet:detnet": { | |||
| "app-flows": { | "app-flows": { | |||
| "app-flow": [ | "app-flow": [ | |||
| { | { | |||
| "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": "1", | "traffic-profile": "1", | |||
| "ingress": { | "ingress": { | |||
| "app-flow-status": "ready", | ||||
| "interface": "eth0", | "interface": "eth0", | |||
| "src-ip-prefix": "1.1.1.1/32", | "ip-app-flow": { | |||
| "dest-ip-prefix": "8.8.8.8/32" | "src-ip-prefix": "1.1.1.1/32", | |||
| "dest-ip-prefix": "8.8.8.8/32", | ||||
| "dscp": 6 | ||||
| } | ||||
| } | } | |||
| }, | }, | |||
| { | { | |||
| "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": { | |||
| "interface": "eth1", | "app-flow-status": "ready", | |||
| "src-ip-prefix": "1.1.1.2/32", | "interface": "eth0", | |||
| "dest-ip-prefix": "8.8.8.9/32" | "ip-app-flow": { | |||
| "src-ip-prefix": "2.1.1.1/32", | ||||
| "dest-ip-prefix": "9.8.8.8/32", | ||||
| "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, | |||
| "max-misordering": 0 | "max-misordering": 0 | |||
| }, | }, | |||
| "member-applications": [ | "member-apps": [ | |||
| "app-1", | "app-1", | |||
| "app-2" | "app-2" | |||
| ] | ] | |||
| }, | }, | |||
| { | { | |||
| "profile-name": "2", | "profile-name": "2", | |||
| "traffic-requirements": { | "traffic-requirements": { | |||
| "min-bandwidth": "100000000", | "min-bandwidth": "100000000", | |||
| "max-latency": 100000000, | "max-latency": 100000000, | |||
| "max-latency-variation": 200000000, | "max-latency-variation": 200000000, | |||
| skipping to change at page 51, line 48 ¶ | skipping to change at page 54, line 18 ¶ | |||
| "max-consecutive-loss-tolerance": 5, | "max-consecutive-loss-tolerance": 5, | |||
| "max-misordering": 0 | "max-misordering": 0 | |||
| }, | }, | |||
| "member-services": [ | "member-services": [ | |||
| "ssl-1", | "ssl-1", | |||
| "ssl-2" | "ssl-2" | |||
| ] | ] | |||
| }, | }, | |||
| { | { | |||
| "profile-name": "3", | "profile-name": "3", | |||
| "traffic-specification": { | "flow-spec": { | |||
| "interval": 5, | "interval": 5, | |||
| "max-packets-per-interval": 10, | "max-pkts-per-interval": 10, | |||
| "max-payload-size": 1500 | "max-payload-size": 1500 | |||
| }, | }, | |||
| "member-forwarding-sublayers": [ | "member-fwd-sublayers": [ | |||
| "afl-1" | "afl-1" | |||
| ] | ] | |||
| } | } | |||
| ], | ], | |||
| "service-sub-layer": { | "service-sub-layer": { | |||
| "service-sub-layer-list": [ | "service-sub-layer-list": [ | |||
| { | { | |||
| "name": "ssl-1", | "name": "ssl-1", | |||
| "service-rank": 10, | "service-rank": 10, | |||
| "traffic-profile": "2", | "traffic-profile": "2", | |||
| "service-protection": { | "service-protection": { | |||
| "service-protection-type": "none", | "service-protection-type": "none", | |||
| "sequence-number-length": "long-sn" | "sequence-number-length": "long-sn" | |||
| }, | }, | |||
| "service-operation-type": "service-initiation", | "service-operation-type": "service-initiation", | |||
| "incoming-type": { | "incoming-type": { | |||
| "app-flow": { | "app-flow": { | |||
| "flow-list": [ | "app-flow-list": [ | |||
| "app-1" | "app-1" | |||
| ] | ] | |||
| } | } | |||
| }, | }, | |||
| "outgoing-type": { | "outgoing-type": { | |||
| "service-sub-layer": { | "service-sub-layer": { | |||
| "aggregation-service-sub-layer": "asl-1", | "aggregation-service-sub-layer": "asl-1", | |||
| "service-label": { | "service-label": { | |||
| "mpls-label-stack": { | "mpls-label-stack": { | |||
| "entry": [ | "entry": [ | |||
| skipping to change at page 53, line 4 ¶ | skipping to change at page 55, line 22 ¶ | |||
| } | } | |||
| }, | }, | |||
| { | { | |||
| "name": "ssl-2", | "name": "ssl-2", | |||
| "service-rank": 10, | "service-rank": 10, | |||
| "traffic-profile": "2", | "traffic-profile": "2", | |||
| "service-operation-type": "service-initiation", | "service-operation-type": "service-initiation", | |||
| "service-protection": { | "service-protection": { | |||
| "service-protection-type": "none", | "service-protection-type": "none", | |||
| "sequence-number-length": "long-sn" | "sequence-number-length": "long-sn" | |||
| }, | }, | |||
| "incoming-type": { | "incoming-type": { | |||
| "app-flow": { | "app-flow": { | |||
| "flow-list": [ | "app-flow-list": [ | |||
| "app-2" | "app-2" | |||
| ] | ] | |||
| } | } | |||
| }, | }, | |||
| "outgoing-type": { | "outgoing-type": { | |||
| "service-sub-layer": { | "service-sub-layer": { | |||
| "aggregation-service-sub-layer": "asl-1", | "aggregation-service-sub-layer": "asl-1", | |||
| "service-label": { | "service-label": { | |||
| "mpls-label-stack": { | "mpls-label-stack": { | |||
| "entry": [ | "entry": [ | |||
| skipping to change at page 53, line 35 ¶ | skipping to change at page 56, line 4 ¶ | |||
| } | } | |||
| } | } | |||
| } | } | |||
| }, | }, | |||
| { | { | |||
| "name": "asl-1", | "name": "asl-1", | |||
| "service-rank": 10, | "service-rank": 10, | |||
| "service-protection": { | "service-protection": { | |||
| "service-protection-type": "none", | "service-protection-type": "none", | |||
| "sequence-number-length": "long-sn" | "sequence-number-length": "long-sn" | |||
| }, | }, | |||
| "incoming-type": { | "incoming-type": { | |||
| "service": { | "service-aggregation": { | |||
| "service-sub-layer": [ | "service-sub-layer": [ | |||
| "ssl-1", | "ssl-1", | |||
| "ssl-2" | "ssl-2" | |||
| ] | ] | |||
| } | } | |||
| }, | }, | |||
| "outgoing-type": { | "outgoing-type": { | |||
| "forwarding-sub-layer": { | "forwarding-sub-layer": { | |||
| "service-outgoing-list": [ | "service-outgoing-list": [ | |||
| { | { | |||
| "service-outgoing-index": 0, | "service-outgoing-index": 0, | |||
| "mpls-label-stack": { | "mpls-label-stack": { | |||
| "entry": [ | "entry": [ | |||
| { | { | |||
| "id": 0, | "id": 0, | |||
| "label": 1000 | "label": 1000 | |||
| } | } | |||
| ] | ] | |||
| }, | }, | |||
| "next-layer": [ | "forwarding-sub-layer": [ | |||
| { | "afl-1" | |||
| "index": 0, | ||||
| "forwarding-sub-layer": "afl-1" | ||||
| } | ||||
| ] | ] | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| }, | }, | |||
| "forwarding-sub-layer": { | "forwarding-sub-layer": { | |||
| "forwarding-sub-layer-list": [ | "forwarding-sub-layer-list": [ | |||
| { | { | |||
| "name": "afl-1", | "name": "afl-1", | |||
| "traffic-profile": "3", | "traffic-profile": "3", | |||
| "forwarding-operation-type": "impose-and-forward", | "forwarding-operation-type": "impose-and-forward", | |||
| "incoming-type": { | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer": [ | ||||
| "asl-1" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | "outgoing-type": { | |||
| "interface": { | "interface": { | |||
| "outgoing-interface": "eth2", | "outgoing-interface": "eth2", | |||
| "mpls-label-stack": { | "mpls-label-stack": { | |||
| "entry": [ | "entry": [ | |||
| { | { | |||
| "id": 0, | "id": 0, | |||
| "label": 20000 | "label": 20000 | |||
| } | } | |||
| ] | ] | |||
| End of changes. 141 change blocks. | ||||
| 1780 lines changed or deleted | 1890 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/ | ||||