| < draft-ietf-detnet-yang-06.txt | draft-ietf-detnet-yang-07.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: December 13, 2020 Y. Ryoo | Expires: January 14, 2021 Y. Ryoo | |||
| ETRI | ETRI | |||
| D. Fedyk | ||||
| LabN Consulting, L.L.C. | ||||
| Z. Li | Z. Li | |||
| China Mobile | China Mobile | |||
| R. Rahman | R. Rahman | |||
| Cisco Systems | Cisco Systems | |||
| D. Fedyk | July 13, 2020 | |||
| LabN Consulting, L.L.C. | ||||
| June 11, 2020 | ||||
| Deterministic Networking (DetNet) Configuration YANG Model | Deterministic Networking (DetNet) Configuration YANG Model | |||
| draft-ietf-detnet-yang-06 | draft-ietf-detnet-yang-07 | |||
| Abstract | Abstract | |||
| This document contains the specification for Deterministic Networking | This document contains the specification for Deterministic Networking | |||
| flow configuration YANG Model. The model allows for provisioning of | flow configuration YANG Model. The model allows for provisioning of | |||
| end-to-end DetNet service along the path without dependency on any | end-to-end DetNet service along the path without dependency on any | |||
| signaling protocol. | signaling protocol. | |||
| 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). | |||
| 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 December 13, 2020. | This Internet-Draft will expire on January 14, 2021. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 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 . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Terminologies . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminologies . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. DetNet Configuration Module . . . . . . . . . . . . . . . . . 3 | 3. DetNet Configuration Module . . . . . . . . . . . . . . . . . 3 | |||
| 3.1. DetNet Appliction Flow Configuration Attributes . . . . . 3 | 3.1. DetNet Appliction Flow Configuration Attributes . . . . . 3 | |||
| 3.2. DetNet Service Sub-layer Configuration Attributes . . . . 3 | 3.2. DetNet Service Sub-layer Configuration Attributes . . . . 3 | |||
| 3.3. DetNet Forwarding Sub-layer Configuration Attributes . . 4 | 3.3. DetNet Forwarding Sub-layer Configuration Attributes . . 3 | |||
| 4. DetNet YANG Structure Considerations . . . . . . . . . . . . 4 | 4. DetNet YANG Structure Considerations . . . . . . . . . . . . 4 | |||
| 5. DetNet Configuration YANG Structures . . . . . . . . . . . . 5 | 5. DetNet Configuration YANG Structures . . . . . . . . . . . . 4 | |||
| 6. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 16 | 6. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 16 | |||
| 7. An alternative DetNet YANG model . . . . . . . . . . . . . . 34 | 7. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 37 | |||
| 7.1. Conventions . . . . . . . . . . . . . . . . . . . . . . . 35 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 37 | |||
| 7.1.1. Aggregation . . . . . . . . . . . . . . . . . . . . . 35 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 37 | |||
| 7.2. Alternative DetNet Configuration YANG . . . . . . . . . . 36 | 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 37 | |||
| 7.3. Alternative DetNet Configuration YANG Model . . . . . . . 50 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 37 | |||
| 7.4. Test Configuration . . . . . . . . . . . . . . . . . . . 67 | 11.1. Normative References . . . . . . . . . . . . . . . . . . 38 | |||
| 7.4.1. DetNet Test Configuration YANG Model . . . . . . . . 67 | 11.2. Informative References . . . . . . . . . . . . . . . . . 39 | |||
| 7.4.2. DetNet Test Configuration YANG Model . . . . . . . . 69 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 41 | |||
| 8. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 70 | ||||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 71 | ||||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 71 | ||||
| 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 71 | ||||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 71 | ||||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 71 | ||||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 72 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 74 | ||||
| 1. Introduction | 1. Introduction | |||
| DetNet (Deterministic Networking) provides a capability to carry | DetNet (Deterministic Networking) provides a capability to carry | |||
| specified unicast or multicast data flows for real-time applications | specified unicast or multicast data flows for real-time applications | |||
| with extremely low packet loss rates and assured maximum end-to-end | with extremely low packet loss rates and assured maximum end-to-end | |||
| delivery latency. A description of the general background and | delivery latency. A description of the general background and | |||
| concepts of DetNet can be found in [RFC8655]. | concepts of DetNet can be found in [RFC8655]. | |||
| This document defines a YANG model for DetNet based on YANG data | This document defines a YANG model for DetNet based on YANG data | |||
| skipping to change at page 5, line 4 ¶ | skipping to change at page 4, line 40 ¶ | |||
| | | | | |||
| +-------------+---------------+ | +-------------+---------------+ | |||
| | | | | | | | | |||
| +-----+-----+ +-----+-----+ +-------+------+ | +-----+-----+ +-----+-----+ +-------+------+ | |||
| | App Flows | |service s-l| |forwarding s-l| | | App Flows | |service s-l| |forwarding s-l| | |||
| +-----------+ +-----------+ +--------------+ | +-----------+ +-----------+ +--------------+ | |||
| 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 each instance, there are four elements: name, in- | in section 3. | |||
| segments, out-segments and operations, which means: | ||||
| o Name: indicates the key value of the instance identification. | ||||
| o In-segments: indicates the key value of identification, e.g., | ||||
| Layer 2 App flow identification, Layer 3 App flow identification | ||||
| and DetNet flow identification. | ||||
| o Out-segments: indicates the information of DetNet processing(e.g., | ||||
| DetNet forwarding, DetNet header Encapsulation) and the mapping | ||||
| relationship to the lower sub-layer/sub-network. | ||||
| o Operations: indicates DetNet functions, e.g., DetNet forwarding | ||||
| functions, DetNet Service functions, DetNet Resource Reservation. | ||||
| These elements are different when the technologies used for the | ||||
| specific instance is different. So this structure is abstract, which | ||||
| allows for different technology specifics as defined in different | ||||
| data plane drafts. | ||||
| 5. DetNet Configuration YANG Structures | 5. DetNet Configuration YANG Structures | |||
| module: ietf-detnet-config-modify | module: ietf-detnet-config | |||
| +--rw app-flows | module: ietf-detnet-config | |||
| | +--rw app-flow* [name] | +--rw detnet | |||
| | +--rw name string | +--rw app-flows | |||
| | +--ro app-id? uint16 | | +--rw app-flow* [name] | |||
| | +--rw app-flow-bidir-congruent? boolean | | +--rw name string | |||
| | +--rw traffic-requirements | | +--ro app-id? uint16 | |||
| | | +--rw min-bandwidth? uint64 | | +--rw app-flow-bidir-congruent? boolean | |||
| | | +--rw max-latency? uint32 | | +--rw outgoing-service? service-sub-layer-ref | |||
| | | +--rw max-latency-variation? uint32 | | +--rw incoming-service? service-sub-layer-ref | |||
| | | +--rw max-loss? uint8 | | +--rw traffic-requirements | |||
| | | +--rw max-consecutive-loss-tolerance? uint32 | | | +--rw min-bandwidth? uint64 | |||
| | | +--rw max-misordering? uint32 | | | +--rw max-latency? uint32 | |||
| | +--rw traffic-specification | | | +--rw max-latency-variation? uint32 | |||
| | | +--rw interval? uint32 | | | +--rw max-loss? uint8 | |||
| | | +--rw max-packets-per-interval? uint32 | | | +--rw max-consecutive-loss-tolerance? uint32 | |||
| | | +--rw max-payload-size? uint32 | | | +--rw max-misordering? uint32 | |||
| | | +--rw average-packets-per-interval? uint32 | | +--rw traffic-specification | |||
| | | +--rw average-payload-size? uint32 | | | +--rw interval? uint32 | |||
| | +--rw in-segment | | | +--rw max-packets-per-interval? uint32 | |||
| | | +--rw interface? if:interface-ref | | | +--rw max-payload-size? uint32 | |||
| | | +--rw (data-flow-type)? | | | +--rw average-packets-per-interval? uint32 | |||
| | | +--:(tsn-app-flow) | | | +--rw average-payload-size? uint32 | |||
| | | | +--rw source-mac-address? yang:mac-address | | +--rw ingress | |||
| | | | +--rw destination-mac-address? yang:mac-address | | | +--rw name? string | |||
| | | | +--rw ethertype? eth:ethertype | | | +--ro app-flow-status? identityref | |||
| | | | +--rw vlan-id? uint16 | | | +--rw interface? if:interface-ref | |||
| | | | +--rw pcp? uint8 | | | +--rw (data-flow-type)? | |||
| | | +--:(ip-app-flow) | | | +--:(tsn-app-flow) | |||
| | | | +--rw src-ip-prefix? inet:ip-prefix | | | | +--rw source-mac-address? yang:mac-address | |||
| | | | +--rw dest-ip-prefix? inet:ip-prefix | | | | +--rw destination-mac-address? yang:mac-address | |||
| | | | +--rw next-header? uint8 | | | | +--rw ethertype? eth:ethertype | |||
| | | | +--rw traffic-class? uint8 | | | | +--rw vlan-id? uint16 | |||
| | | | +--rw flow-label? inet:ipv6-flow-label | | | | +--rw pcp? uint8 | |||
| | | | +--rw source-port | | | +--:(ip-app-flow) | |||
| | | | | +--rw (port-range-or-operator)? | | | | +--rw src-ip-prefix? inet:ip-prefix | |||
| | | | | +--:(range) | | | | +--rw dest-ip-prefix? inet:ip-prefix | |||
| | | | | | +--rw lower-port inet:port-number | | | | +--rw next-header? uint8 | |||
| | | | | | +--rw upper-port inet:port-number | | | | +--rw traffic-class? uint8 | |||
| | | | | +--:(operator) | | | | +--rw flow-label? inet:ipv6-flow-label | |||
| | | | | +--rw operator? operator | | | | +--rw source-port | |||
| | | | | +--rw port inet:port-number | | | | | +--rw (port-range-or-operator)? | |||
| | | | +--rw destination-port | | | | | +--:(range) | |||
| | | | | +--rw (port-range-or-operator)? | | | | | | +--rw lower-port inet:port-number | |||
| | | | | +--:(range) | | | | | | +--rw upper-port inet:port-number | |||
| | | | | | +--rw lower-port inet:port-number | | | | | +--:(operator) | |||
| | | | | | +--rw upper-port inet:port-number | | | | | +--rw operator? operator | |||
| | | | | +--:(operator) | | | | | +--rw port inet:port-number | |||
| | | | | +--rw operator? operator | | | | +--rw destination-port | |||
| | | | | +--rw port inet:port-number | | | | | +--rw (port-range-or-operator)? | |||
| | | | +--rw ipsec-spi? ipsec-spi | | | | | +--:(range) | |||
| | | +--:(mpls-app-flow) | | | | | | +--rw lower-port inet:port-number | |||
| | | +--rw (label-space)? | | | | | | +--rw upper-port inet:port-number | |||
| | | +--:(context-label-space) | | | | | +--:(operator) | |||
| | | | +--rw mpls-label-stack | | | | | +--rw operator? operator | |||
| | | | +--rw entry* [id] | | | | | +--rw port inet:port-number | |||
| | | | +--rw id uint8 | | | | +--rw ipsec-spi? ipsec-spi | |||
| | | | +--rw label? rt-types:mpls-label | | | +--:(mpls-app-flow) | |||
| | | | +--rw ttl? uint8 | | | +--rw (label-space)? | |||
| | | | +--rw traffic-class? uint8 | | | +--:(context-label-space) | |||
| | | +--:(platform-label-space) | | | | +--rw mpls-label-stack | |||
| | | +--rw label? rt-types:mpls-label | | | | +--rw entry* [id] | |||
| | +--rw out-segment | | | | +--rw id uint8 | |||
| | +--rw (outgoing-options) | | | | +--rw label? rt-types:mpls-label | |||
| | +--:(ingress-proxy) | | | | +--rw ttl? uint8 | |||
| | | +--rw service-sub-layer? service-sub-layer-ref | | | | +--rw traffic-class? uint8 | |||
| | +--:(egress) | | | +--:(platform-label-space) | |||
| | +--rw (next-hop-options) | | | +--rw label? rt-types:mpls-label | |||
| | +--:(simple-next-hop) | | +--rw egress | |||
| | | +--rw mpls-header | | +--rw name? string | |||
| | | | +--rw mpls-label-stack | | +--rw (application-type)? | |||
| | | | +--rw entry* [id] | | +--:(ethernet) | |||
| | | | +--rw id uint8 | | | +--rw ethernet | |||
| | | | +--rw label? rt-types:mpls-label | | | +--rw ethernet-place-holder? string | |||
| | | | +--rw ttl? uint8 | | +--:(ip-mpls) | |||
| | | | +--rw traffic-class? uint8 | | +--rw ip-mpls | |||
| | | +--rw outgoing-interface? if:interface-ref | | +--rw (next-hop-options) | |||
| | +--:(next-hop-list) | | +--:(simple-next-hop) | |||
| | +--rw next-hop-list | | | +--rw outgoing-interface? if:interface-ref | |||
| | +--rw next-hop* [hop-index] | | | +--rw (flow-type)? | |||
| | +--rw hop-index uint8 | | | +--:(ip) | |||
| | +--rw mpls-header | | | | +--rw next-hop-address? inet:ip-address | |||
| | | +--rw mpls-label-stack | | | +--:(mpls) | |||
| | | +--rw entry* [id] | | | +--rw mpls-label-stack | |||
| | | +--rw id uint8 | | | +--rw entry* [id] | |||
| | | +--rw label? rt-types:mpls-label | | | +--rw id uint8 | |||
| | | +--rw ttl? uint8 | | | +--rw label? rt-types:mpls-label | |||
| | | +--rw traffic-class? uint8 | | | +--rw ttl? uint8 | |||
| | +--rw outgoing-interface? if:interface-ref | | | +--rw traffic-class? uint8 | |||
| +--rw service-sub-layer | | +--:(next-hop-list) | |||
| | +--rw service-sub-layer-list* [name] | | +--rw next-hop-list | |||
| | +--rw name string | | +--rw next-hop* [hop-index] | |||
| | +--ro service-id? uint16 | | +--rw hop-index uint8 | |||
| | +--rw service-rank? uint8 | | +--rw outgoing-interface? if:interface-ref | |||
| | +--rw traffic-requirements | | +--rw (flow-type)? | |||
| | | +--rw min-bandwidth? uint64 | | +--:(ip) | |||
| | | +--rw max-latency? uint32 | | | +--rw next-hop-address? inet:ip-address | |||
| | | +--rw max-latency-variation? uint32 | | +--:(mpls) | |||
| | | +--rw max-loss? uint8 | | +--rw mpls-label-stack | |||
| | | +--rw max-consecutive-loss-tolerance? uint32 | | +--rw entry* [id] | |||
| | | +--rw max-misordering? uint32 | | +--rw id uint8 | |||
| | +--rw traffic-specification | | +--rw label? rt-types:mpls-label | |||
| | | +--rw interval? uint32 | | +--rw ttl? uint8 | |||
| | | +--rw max-packets-per-interval? uint32 | | +--rw traffic-class? uint8 | |||
| | | +--rw max-payload-size? uint32 | +--rw service-sub-layer | |||
| | | +--rw average-packets-per-interval? uint32 | | +--rw service-sub-layer-list* [name] | |||
| | | +--rw average-payload-size? uint32 | | +--rw name string | |||
| | +--rw service-protection | | +--ro service-id? uint16 | |||
| | | +--rw service-protection-type? service-protection-type | | +--rw service-rank? uint8 | |||
| | | +--rw sequence-number-length? sequence-number-field | | +--rw traffic-requirements | |||
| | +--rw service-operation-type? service-operation-type | | | +--rw min-bandwidth? uint64 | |||
| | +--rw in-segment | | | +--rw max-latency? uint32 | |||
| | | +--rw (incoming-options) | | | +--rw max-latency-variation? uint32 | |||
| | | +--:(ingress-proxy) | | | +--rw max-loss? uint8 | |||
| | | | +--rw app-flow* app-flow-ref | | | +--rw max-consecutive-loss-tolerance? uint32 | |||
| | | +--:(detnet-service-identification) | | | +--rw max-misordering? uint32 | |||
| | | +--rw (detnet-flow-type)? | | +--rw traffic-specification | |||
| | | +--:(ip-detnet-flow) | | | +--rw interval? uint32 | |||
| | | | +--rw src-ip-prefix? inet:ip-prefix | | | +--rw max-packets-per-interval? uint32 | |||
| | | | +--rw dest-ip-prefix? inet:ip-prefix | | | +--rw max-payload-size? uint32 | |||
| | | | +--rw next-header? uint8 | | | +--rw average-packets-per-interval? uint32 | |||
| | | | +--rw traffic-class? uint8 | | | +--rw average-payload-size? uint32 | |||
| | | | +--rw flow-label? inet:ipv6-flow-label | | +--rw service-protection | |||
| | | | +--rw source-port | | | +--rw service-protection-type? service-protection-type | |||
| | | | | +--rw (port-range-or-operator)? | | | +--rw sequence-number-length? sequence-number-field | |||
| | | | | +--:(range) | | +--rw service-operation-type? service-operation-type | |||
| | | | | | +--rw lower-port inet:port-number | | +--rw incoming | |||
| | | | | | +--rw upper-port inet:port-number | | | +--rw (incoming-options) | |||
| | | | | +--:(operator) | | | +--:(ingress-proxy) | |||
| | | | | +--rw operator? operator | | | | +--rw app-flow* app-flow-ref | |||
| | | | | +--rw port inet:port-number | | | +--:(detnet-service-identification) | |||
| | | | +--rw destination-port | | | +--rw (detnet-flow-type)? | |||
| | | | | +--rw (port-range-or-operator)? | | | +--:(ip-detnet-flow) | |||
| | | | | +--:(range) | | | | +--rw src-ip-prefix? inet:ip-prefix | |||
| | | | | | +--rw lower-port inet:port-number | | | | +--rw dest-ip-prefix? inet:ip-prefix | |||
| | | | | | +--rw upper-port inet:port-number | | | | +--rw next-header? uint8 | |||
| | | | | +--:(operator) | | | | +--rw traffic-class? uint8 | |||
| | | | | +--rw operator? operator | | | | +--rw flow-label? inet:ipv6-flow-label | |||
| | | | | +--rw port inet:port-number | | | | +--rw source-port | |||
| | | | +--rw ipsec-spi? ipsec-spi | | | | | +--rw (port-range-or-operator)? | |||
| | | +--:(mpls-detnet-flow) | | | | | +--:(range) | |||
| | | +--rw (label-space)? | | | | | | +--rw lower-port inet:port-number | |||
| | | +--:(context-label-space) | | | | | | +--rw upper-port inet:port-number | |||
| | | | +--rw mpls-label-stack | | | | | +--:(operator) | |||
| | | | +--rw entry* [id] | | | | | +--rw operator? operator | |||
| | | | +--rw id uint8 | | | | | +--rw port inet:port-number | |||
| | | | +--rw label? rt-types:mpls-label | | | | +--rw destination-port | |||
| | | | +--rw ttl? uint8 | | | | | +--rw (port-range-or-operator)? | |||
| | | | +--rw traffic-class? uint8 | | | | | +--:(range) | |||
| | | +--:(platform-label-space) | | | | | | +--rw lower-port inet:port-number | |||
| | | +--rw label? rt-types:mpls-label | | | | | | +--rw upper-port inet:port-number | |||
| | +--rw out-segment | | | | | +--:(operator) | |||
| | +--rw (outgoing-options) | | | | | +--rw operator? operator | |||
| | +--:(egress-proxy) | | | | | +--rw port inet:port-number | |||
| | | +--rw app-flow* app-flow-ref | | | | +--rw ipsec-spi? ipsec-spi | |||
| | +--:(detnet-service-output) | | | +--:(mpls-detnet-flow) | |||
| | +--rw service-output-list* [service-output-index] | | | +--rw (label-space)? | |||
| | +--rw service-output-index uint8 | | | +--:(context-label-space) | |||
| | +--rw (header-type)? | | | | +--rw mpls-label-stack | |||
| | | +--:(detnet-mpls-header) | | | | +--rw entry* [id] | |||
| | | | +--rw mpls-label-stack | | | | +--rw id uint8 | |||
| | | | +--rw entry* [id] | | | | +--rw label? rt-types:mpls-label | |||
| | | | +--rw id uint8 | | | | +--rw ttl? uint8 | |||
| | | | +--rw label? rt-types:mpls-label | | | | +--rw traffic-class? uint8 | |||
| | | | +--rw ttl? uint8 | | | +--:(platform-label-space) | |||
| | | | +--rw traffic-class? uint8 | | | +--rw label? rt-types:mpls-label | |||
| | | +--:(detnet-ip-header) | | +--rw outgoing | |||
| | | +--rw src-ip-address? inet:ip-address | | +--rw (outgoing-options) | |||
| | | +--rw dest-ip-address? inet:ip-address | | +--:(egress-proxy) | |||
| | | +--rw next-header? uint8 | | | +--rw app-flow* app-flow-ref | |||
| | | +--rw traffic-class? uint8 | | +--:(detnet-service-outgoing) | |||
| | | +--rw flow-label? inet:ipv6-flow-label | | +--rw service-outgoing-list* [service-outgoing-index] | |||
| | | +--rw source-port? inet:port-number | | +--rw service-outgoing-index uint8 | |||
| | | +--rw destination-port? inet:port-number | | +--rw (header-type)? | |||
| | +--rw next-layer* [index] | | | +--:(detnet-mpls-header) | |||
| | +--rw index uint8 | | | | +--rw mpls-label-stack | |||
| | +--rw forwarding-sub-layer? forwarding-sub-layer-ref | | | | +--rw entry* [id] | |||
| +--rw forwarding-sub-layer | | | | +--rw id uint8 | |||
| | +--rw forwarding-sub-layer-list* [name] | | | | +--rw label? rt-types:mpls-label | |||
| | +--rw name string | | | | +--rw ttl? uint8 | |||
| | +--ro forwarding-id? uint16 | | | | +--rw traffic-class? uint8 | |||
| | +--rw traffic-requirements | | | +--:(detnet-ip-header) | |||
| | | +--rw min-bandwidth? uint64 | | | +--rw src-ip-address? inet:ip-address | |||
| | | +--rw max-latency? uint32 | | | +--rw dest-ip-address? inet:ip-address | |||
| | | +--rw max-latency-variation? uint32 | | | +--rw next-header? uint8 | |||
| | | +--rw max-loss? uint8 | | | +--rw traffic-class? uint8 | |||
| | | +--rw max-consecutive-loss-tolerance? uint32 | | | +--rw flow-label? inet:ipv6-flow-label | |||
| | | +--rw max-misordering? uint32 | | | +--rw source-port? inet:port-number | |||
| | +--rw traffic-specification | | | +--rw destination-port? inet:port-number | |||
| | | +--rw interval? uint32 | | +--rw next-layer* [index] | |||
| | | +--rw max-packets-per-interval? uint32 | | +--rw index uint8 | |||
| | | +--rw max-payload-size? uint32 | | +--rw forwarding-sub-layer? forwarding-sub-layer-ref | |||
| | | +--rw average-packets-per-interval? uint32 | +--rw forwarding-sub-layer | |||
| | | +--rw average-payload-size? uint32 | | +--rw forwarding-sub-layer-list* [name] | |||
| | +--rw forwarding-operation-type? forwarding-operations-type | | +--rw name string | |||
| | +--rw in-segment | | +--ro forwarding-id? uint16 | |||
| | | +--rw (incoming-options) | | +--rw traffic-requirements | |||
| | | +--:(detnet-service-forwarding) | | | +--rw min-bandwidth? uint64 | |||
| | | | +--rw service-sub-layer* service-sub-layer-ref | | | +--rw max-latency? uint32 | |||
| | | +--:(detnet-forwarding-identification) | | | +--rw max-latency-variation? uint32 | |||
| | | +--rw interface? if:interface-ref | | | +--rw max-loss? uint8 | |||
| | | +--rw (detnet-flow-type)? | | | +--rw max-consecutive-loss-tolerance? uint32 | |||
| | | +--:(ip-detnet-flow) | | | +--rw max-misordering? uint32 | |||
| | | | +--rw src-ip-prefix? inet:ip-prefix | | +--rw traffic-specification | |||
| | | | +--rw dest-ip-prefix? inet:ip-prefix | | | +--rw interval? uint32 | |||
| | | | +--rw next-header? uint8 | | | +--rw max-packets-per-interval? uint32 | |||
| | | | +--rw traffic-class? uint8 | | | +--rw max-payload-size? uint32 | |||
| | | | +--rw flow-label? inet:ipv6-flow-label | | | +--rw average-packets-per-interval? uint32 | |||
| | | | +--rw source-port | | | +--rw average-payload-size? uint32 | |||
| | | | | +--rw (port-range-or-operator)? | | +--rw forwarding-operation-type? forwarding-operations-type | |||
| | | | | +--:(range) | | +--rw incoming | |||
| | | | | | +--rw lower-port inet:port-number | | | +--rw (incoming-options) | |||
| | | | | | +--rw upper-port inet:port-number | | | +--:(detnet-service-forwarding) | |||
| | | | | +--:(operator) | | | | +--rw service-sub-layer* service-sub-layer-ref | |||
| | | | | +--rw operator? operator | | | +--:(detnet-forwarding-identification) | |||
| | | | | +--rw port inet:port-number | | | +--rw interface? if:interface-ref | |||
| | | | +--rw destination-port | | | +--rw (detnet-flow-type)? | |||
| | | | | +--rw (port-range-or-operator)? | | | +--:(ip-detnet-flow) | |||
| | | | | +--:(range) | | | | +--rw src-ip-prefix? inet:ip-prefix | |||
| | | | | | +--rw lower-port inet:port-number | | | | +--rw dest-ip-prefix? inet:ip-prefix | |||
| | | | | | +--rw upper-port inet:port-number | | | | +--rw next-header? uint8 | |||
| | | | | +--:(operator) | | | | +--rw traffic-class? uint8 | |||
| | | | | +--rw operator? operator | | | | +--rw flow-label? inet:ipv6-flow-label | |||
| | | | | +--rw port inet:port-number | | | | +--rw source-port | |||
| | | | +--rw ipsec-spi? ipsec-spi | | | | | +--rw (port-range-or-operator)? | |||
| | | +--:(mpls-detnet-flow) | | | | | +--:(range) | |||
| | | +--rw (label-space)? | | | | | | +--rw lower-port inet:port-number | |||
| | | +--:(context-label-space) | | | | | | +--rw upper-port inet:port-number | |||
| | | | +--rw mpls-label-stack | | | | | +--:(operator) | |||
| | | | +--rw entry* [id] | | | | | +--rw operator? operator | |||
| | | | +--rw id uint8 | | | | | +--rw port inet:port-number | |||
| | | | +--rw label? rt-types:mpls-label | | | | +--rw destination-port | |||
| | | | +--rw ttl? uint8 | | | | | +--rw (port-range-or-operator)? | |||
| | | | +--rw traffic-class? uint8 | | | | | +--:(range) | |||
| | | +--:(platform-label-space) | | | | | | +--rw lower-port inet:port-number | |||
| | | +--rw label? rt-types:mpls-label | | | | | | +--rw upper-port inet:port-number | |||
| | +--rw out-segment | | | | | +--:(operator) | |||
| | +--rw (outgoing-options) | | | | | +--rw operator? operator | |||
| | +--:(service-operation) | | | | | +--rw port inet:port-number | |||
| | | +--rw service-sub-layer* service-sub-layer-ref | | | | +--rw ipsec-spi? ipsec-spi | |||
| | +--:(detnet-forwarding-output) | | | +--:(mpls-detnet-flow) | |||
| | +--rw (next-hop-options) | | | +--rw (label-space)? | |||
| | +--:(simple-next-hop) | | | +--:(context-label-space) | |||
| | | +--rw (header-type)? | | | | +--rw mpls-label-stack | |||
| | | | +--:(detnet-mpls-header) | | | | +--rw entry* [id] | |||
| | | | | +--rw mpls-label-stack | | | | +--rw id uint8 | |||
| | | | | +--rw entry* [id] | | | | +--rw label? rt-types:mpls-label | |||
| | | | | +--rw id uint8 | | | | +--rw ttl? uint8 | |||
| | | | | +--rw label? rt-types:mpls-label | | | | +--rw traffic-class? uint8 | |||
| | | | | +--rw ttl? uint8 | | | +--:(platform-label-space) | |||
| | | | | +--rw traffic-class? uint8 | | | +--rw label? rt-types:mpls-label | |||
| | | | +--:(detnet-ip-header) | | +--rw outgoing | |||
| | | | +--rw src-ip-address? inet:ip-address | | +--rw (outgoing-options) | |||
| | | | +--rw dest-ip-address? inet:ip-address | | +--:(detnet-service-operation) | |||
| | | | +--rw next-header? uint8 | | | +--rw service-sub-layer* service-sub-layer-ref | |||
| | | | +--rw traffic-class? uint8 | | +--:(detnet-forwarding-outgoing) | |||
| | | | +--rw flow-label? inet:ipv6-flow-label | | +--rw (next-hop-options) | |||
| | | | +--rw source-port? inet:port-number | | +--:(simple-next-hop) | |||
| | | | +--rw destination-port? inet:port-number | | | +--rw outgoing-interface? if:interface-ref | |||
| | | +--rw outgoing-interface? if:interface-ref | | | +--rw (flow-type)? | |||
| | +--:(next-hop-list) | | | +--:(ip) | |||
| | +--rw next-hop-list | | | | +--rw (operation-type)? | |||
| | +--rw next-hop* [hop-index] | | | | +--:(ip-forwarding) | |||
| | +--rw hop-index uint8 | | | | | +--rw next-hop-address? inet:ip-address | |||
| | +--rw (header-type)? | | | | +--:(mpls-over-ip-encapsulation) | |||
| | | +--:(detnet-mpls-header) | | | | +--rw src-ip-address? inet:ip-address | |||
| | | | +--rw mpls-label-stack | | | | +--rw dest-ip-address? inet:ip-address | |||
| | | | +--rw entry* [id] | | | | +--rw next-header? uint8 | |||
| | | | +--rw id uint8 | | | | +--rw traffic-class? uint8 | |||
| | | | +--rw label? rt-types:mpls-label | | | | +--rw flow-label? inet:ipv6-flow-label | |||
| | | | +--rw ttl? uint8 | | | | +--rw source-port? inet:port-number | |||
| | | | +--rw traffic-class? uint8 | | | | +--rw destination-port? inet:port-number | |||
| | | +--:(detnet-ip-header) | | | +--:(mpls) | |||
| | | +--rw src-ip-address? inet:ip-address | | | +--rw mpls-label-stack | |||
| | | +--rw dest-ip-address? inet:ip-address | | | +--rw entry* [id] | |||
| | | +--rw next-header? uint8 | | | +--rw id uint8 | |||
| | | +--rw traffic-class? uint8 | | | +--rw label? rt-types:mpls-label | |||
| | | +--rw flow-label? inet:ipv6-flow-label | | | +--rw ttl? uint8 | |||
| | | +--rw source-port? inet:port-number | | | +--rw traffic-class? uint8 | |||
| | | +--rw destination-port? inet:port-number | | +--:(next-hop-list) | |||
| | +--rw outgoing-interface? if:interface-ref | | +--rw next-hop-list | |||
| +--rw sub-network | | +--rw next-hop* [hop-index] | |||
| +--rw sub-network-list* [name] | | +--rw hop-index uint8 | |||
| +--rw name string | | +--rw outgoing-interface? if:interface-ref | |||
| | +--rw (flow-type)? | ||||
| | +--:(ip) | ||||
| | | +--rw (operation-type)? | ||||
| | | +--:(ip-forwarding) | ||||
| | | | +--rw next-hop-address? inet:ip-address | ||||
| | | +--:(mpls-over-ip-encapsulation) | ||||
| | | +--rw src-ip-address? inet:ip-address | ||||
| | | +--rw dest-ip-address? inet:ip-address | ||||
| | | +--rw next-header? uint8 | ||||
| | | +--rw traffic-class? uint8 | ||||
| | | +--rw flow-label? inet:ipv6-flow-label | ||||
| | | +--rw source-port? inet:port-number | ||||
| | | +--rw destination-port? inet:port-number | ||||
| | +--:(mpls) | ||||
| | +--rw mpls-label-stack | ||||
| | +--rw entry* [id] | ||||
| | +--rw id uint8 | ||||
| | +--rw label? rt-types:mpls-label | ||||
| | +--rw ttl? uint8 | ||||
| | +--rw traffic-class? uint8 | ||||
| +--rw sub-network | ||||
| +--rw sub-network-list* [name] | ||||
| +--rw name string | ||||
| grouping ip-header: | grouping ip-header: | |||
| +--rw src-ip-address? inet:ip-address | +--rw src-ip-address? inet:ip-address | |||
| +--rw dest-ip-address? inet:ip-address | +--rw dest-ip-address? inet:ip-address | |||
| +--rw next-header? uint8 | +--rw next-header? uint8 | |||
| +--rw traffic-class? uint8 | +--rw traffic-class? uint8 | |||
| +--rw flow-label? inet:ipv6-flow-label | +--rw flow-label? inet:ipv6-flow-label | |||
| +--rw source-port? inet:port-number | +--rw source-port? inet:port-number | |||
| +--rw destination-port? inet:port-number | +--rw destination-port? inet:port-number | |||
| grouping l2-header: | grouping l2-header: | |||
| skipping to change at page 15, line 17 ¶ | skipping to change at page 15, line 9 ¶ | |||
| +--rw src-ip-address? inet:ip-address | +--rw src-ip-address? inet:ip-address | |||
| +--rw dest-ip-address? inet:ip-address | +--rw dest-ip-address? inet:ip-address | |||
| +--rw next-header? uint8 | +--rw next-header? uint8 | |||
| +--rw traffic-class? uint8 | +--rw traffic-class? uint8 | |||
| +--rw flow-label? inet:ipv6-flow-label | +--rw flow-label? inet:ipv6-flow-label | |||
| +--rw source-port? inet:port-number | +--rw source-port? inet:port-number | |||
| +--rw destination-port? inet:port-number | +--rw destination-port? inet:port-number | |||
| grouping detnet-app-next-hop-content: | grouping detnet-app-next-hop-content: | |||
| +--rw (next-hop-options) | +--rw (next-hop-options) | |||
| +--:(simple-next-hop) | +--:(simple-next-hop) | |||
| | +--rw mpls-header | ||||
| | | +--rw mpls-label-stack | ||||
| | | +--rw entry* [id] | ||||
| | | +--rw id uint8 | ||||
| | | +--rw label? rt-types:mpls-label | ||||
| | | +--rw ttl? uint8 | ||||
| | | +--rw traffic-class? uint8 | ||||
| | +--rw outgoing-interface? if:interface-ref | | +--rw outgoing-interface? if:interface-ref | |||
| | +--rw (flow-type)? | ||||
| | +--:(ip) | ||||
| | | +--rw next-hop-address? inet:ip-address | ||||
| | +--:(mpls) | ||||
| | +--rw mpls-label-stack | ||||
| | +--rw entry* [id] | ||||
| | +--rw id uint8 | ||||
| | +--rw label? rt-types:mpls-label | ||||
| | +--rw ttl? uint8 | ||||
| | +--rw traffic-class? uint8 | ||||
| +--:(next-hop-list) | +--:(next-hop-list) | |||
| +--rw next-hop-list | +--rw next-hop-list | |||
| +--rw next-hop* [hop-index] | +--rw next-hop* [hop-index] | |||
| +--rw hop-index uint8 | +--rw hop-index uint8 | |||
| +--rw mpls-header | ||||
| | +--rw mpls-label-stack | ||||
| | +--rw entry* [id] | ||||
| | +--rw id uint8 | ||||
| | +--rw label? rt-types:mpls-label | ||||
| | +--rw ttl? uint8 | ||||
| | +--rw traffic-class? uint8 | ||||
| +--rw outgoing-interface? if:interface-ref | +--rw outgoing-interface? if:interface-ref | |||
| +--rw (flow-type)? | ||||
| +--:(ip) | ||||
| | +--rw next-hop-address? inet:ip-address | ||||
| +--:(mpls) | ||||
| +--rw mpls-label-stack | ||||
| +--rw entry* [id] | ||||
| +--rw id uint8 | ||||
| +--rw label? rt-types:mpls-label | ||||
| +--rw ttl? uint8 | ||||
| +--rw traffic-class? uint8 | ||||
| grouping detnet-forwarding-next-hop-content: | grouping detnet-forwarding-next-hop-content: | |||
| +--rw (next-hop-options) | +--rw (next-hop-options) | |||
| +--:(simple-next-hop) | +--:(simple-next-hop) | |||
| | +--rw (header-type)? | ||||
| | | +--:(detnet-mpls-header) | ||||
| | | | +--rw mpls-label-stack | ||||
| | | | +--rw entry* [id] | ||||
| | | | +--rw id uint8 | ||||
| | | | +--rw label? rt-types:mpls-label | ||||
| | | | +--rw ttl? uint8 | ||||
| | | | +--rw traffic-class? uint8 | ||||
| | | +--:(detnet-ip-header) | ||||
| | | +--rw src-ip-address? inet:ip-address | ||||
| | | +--rw dest-ip-address? inet:ip-address | ||||
| | | +--rw next-header? uint8 | ||||
| | | +--rw traffic-class? uint8 | ||||
| | | +--rw flow-label? inet:ipv6-flow-label | ||||
| | | +--rw source-port? inet:port-number | ||||
| | | +--rw destination-port? inet:port-number | ||||
| | +--rw outgoing-interface? if:interface-ref | | +--rw outgoing-interface? if:interface-ref | |||
| | +--rw (flow-type)? | ||||
| | +--:(ip) | ||||
| | | +--rw (operation-type)? | ||||
| | | +--:(ip-forwarding) | ||||
| | | | +--rw next-hop-address? inet:ip-address | ||||
| | | +--:(mpls-over-ip-encapsulation) | ||||
| | | +--rw src-ip-address? inet:ip-address | ||||
| | | +--rw dest-ip-address? inet:ip-address | ||||
| | | +--rw next-header? uint8 | ||||
| | | +--rw traffic-class? uint8 | ||||
| | | +--rw flow-label? inet:ipv6-flow-label | ||||
| | | +--rw source-port? inet:port-number | ||||
| | | +--rw destination-port? inet:port-number | ||||
| | +--:(mpls) | ||||
| | +--rw mpls-label-stack | ||||
| | +--rw entry* [id] | ||||
| | +--rw id uint8 | ||||
| | +--rw label? rt-types:mpls-label | ||||
| | +--rw ttl? uint8 | ||||
| | +--rw traffic-class? uint8 | ||||
| +--:(next-hop-list) | +--:(next-hop-list) | |||
| +--rw next-hop-list | +--rw next-hop-list | |||
| +--rw next-hop* [hop-index] | +--rw next-hop* [hop-index] | |||
| +--rw hop-index uint8 | +--rw hop-index uint8 | |||
| +--rw (header-type)? | ||||
| | +--:(detnet-mpls-header) | ||||
| | | +--rw mpls-label-stack | ||||
| | | +--rw entry* [id] | ||||
| | | +--rw id uint8 | ||||
| | | +--rw label? rt-types:mpls-label | ||||
| | | +--rw ttl? uint8 | ||||
| | | +--rw traffic-class? uint8 | ||||
| | +--:(detnet-ip-header) | ||||
| | +--rw src-ip-address? inet:ip-address | ||||
| | +--rw dest-ip-address? inet:ip-address | ||||
| | +--rw next-header? uint8 | ||||
| | +--rw traffic-class? uint8 | ||||
| | +--rw flow-label? inet:ipv6-flow-label | ||||
| | +--rw source-port? inet:port-number | ||||
| | +--rw destination-port? inet:port-number | ||||
| +--rw outgoing-interface? if:interface-ref | +--rw outgoing-interface? if:interface-ref | |||
| +--rw (flow-type)? | ||||
| +--:(ip) | ||||
| | +--rw (operation-type)? | ||||
| | +--:(ip-forwarding) | ||||
| | | +--rw next-hop-address? inet:ip-address | ||||
| | +--:(mpls-over-ip-encapsulation) | ||||
| | +--rw src-ip-address? inet:ip-address | ||||
| | +--rw dest-ip-address? inet:ip-address | ||||
| | +--rw next-header? uint8 | ||||
| | +--rw traffic-class? uint8 | ||||
| | +--rw flow-label? inet:ipv6-flow-label | ||||
| | +--rw source-port? inet:port-number | ||||
| | +--rw destination-port? inet:port-number | ||||
| +--:(mpls) | ||||
| +--rw mpls-label-stack | ||||
| +--rw entry* [id] | ||||
| +--rw id uint8 | ||||
| +--rw label? rt-types:mpls-label | ||||
| +--rw ttl? uint8 | ||||
| +--rw traffic-class? uint8 | ||||
| 6. DetNet Configuration YANG Model | 6. DetNet Configuration YANG Model | |||
| <CODE BEGINS> | <CODE BEGINS> | |||
| module ietf-detnet-config-modify { | module ietf-detnet-config { | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-detnet-config"; | namespace "urn:ietf:params:xml:ns:yang:ietf-detnet-config"; | |||
| prefix "ietf-detnet"; | prefix "ietf-detnet"; | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix "yang"; | prefix "yang"; | |||
| } | } | |||
| import ietf-inet-types{ | import ietf-inet-types{ | |||
| prefix "inet"; | prefix "inet"; | |||
| } | } | |||
| skipping to change at page 16, line 45 ¶ | skipping to change at page 17, line 4 ¶ | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-detnet-config"; | namespace "urn:ietf:params:xml:ns:yang:ietf-detnet-config"; | |||
| prefix "ietf-detnet"; | prefix "ietf-detnet"; | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix "yang"; | prefix "yang"; | |||
| } | } | |||
| import ietf-inet-types{ | import ietf-inet-types{ | |||
| prefix "inet"; | prefix "inet"; | |||
| } | } | |||
| import ietf-ethertypes { | import ietf-ethertypes { | |||
| prefix "eth"; | prefix "eth"; | |||
| } | } | |||
| import ietf-routing-types { | import ietf-routing-types { | |||
| prefix "rt-types"; | prefix "rt-types"; | |||
| } | ||||
| import ietf-routing { | ||||
| prefix "rt"; | ||||
| } | } | |||
| import ietf-packet-fields { | import ietf-packet-fields { | |||
| prefix "packet-fields"; | prefix "packet-fields"; | |||
| } | } | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix "if"; | prefix "if"; | |||
| } | } | |||
| organization "IETF DetNet Working Group"; | organization "IETF DetNet Working Group"; | |||
| skipping to change at page 17, line 35 ¶ | skipping to change at page 17, line 36 ¶ | |||
| Janos Farkas | Janos Farkas | |||
| <mailto:janos.farkas@ericsson.com> | <mailto:janos.farkas@ericsson.com> | |||
| Editor: Xuesong Geng | Editor: Xuesong Geng | |||
| <mailto:gengxuesong@huawei.com> | <mailto:gengxuesong@huawei.com> | |||
| Editor: Mach Chen | Editor: Mach Chen | |||
| <mailto:mach.chen@huawei.com> | <mailto:mach.chen@huawei.com> | |||
| Editor: Yeoncheol Ryoo | ||||
| <mailto:dbduscjf@etri.re.kr>"; | ||||
| Editor: Don Fedyk | ||||
| <mailto:dfedyk@labn.net>"; | ||||
| Editor: Zhenqiang Li | Editor: Zhenqiang Li | |||
| <mailto:lizhenqiang@chinamobile.com> | <mailto:lizhenqiang@chinamobile.com> | |||
| Editor: Reshad Rahman | Editor: Reshad Rahman | |||
| <mailto:rrahman@cisco.com> | <mailto:rrahman@cisco.com> | |||
| Editor: Yeoncheol Ryoo | ||||
| <mailto:dbduscjf@etri.re.kr>"; | ||||
| description | description | |||
| "This YANG module describes the parameters needed | "This YANG module describes the parameters needed | |||
| for DetNet flow configuration and flow status | for DetNet flow configuration and flow status | |||
| reporting"; | reporting"; | |||
| revision 2020-03-04 { | revision 2020-07-13 { | |||
| description "initial revision"; | description "initial revision"; | |||
| reference "RFC XXXX: draft-ietf-detnet-yang-02"; | reference "RFC XXXX: draft-ietf-detnet-yang-02"; | |||
| } | } | |||
| typedef app-flow-ref { | typedef app-flow-ref { | |||
| type leafref { | type leafref { | |||
| path "/ietf-detnet:app-flows" | path "/ietf-detnet:detnet" | |||
| + "/ietf-detnet:app-flows" | ||||
| + "/ietf-detnet:app-flow" | + "/ietf-detnet:app-flow" | |||
| + "/ietf-detnet:name"; | + "/ietf-detnet:name"; | |||
| } | } | |||
| } | } | |||
| typedef service-sub-layer-ref { | typedef service-sub-layer-ref { | |||
| type leafref { | type leafref { | |||
| path "/ietf-detnet:service-sub-layer" | path "/ietf-detnet:detnet" | |||
| + "/ietf-detnet:service-sub-layer" | ||||
| + "/ietf-detnet:service-sub-layer-list" | + "/ietf-detnet:service-sub-layer-list" | |||
| + "/ietf-detnet:name"; | + "/ietf-detnet:name"; | |||
| } | } | |||
| } | } | |||
| typedef forwarding-sub-layer-ref { | typedef forwarding-sub-layer-ref { | |||
| type leafref { | type leafref { | |||
| path "/ietf-detnet:forwarding-sub-layer" | path "/ietf-detnet:detnet" | |||
| + "/ietf-detnet:forwarding-sub-layer" | ||||
| + "/ietf-detnet:forwarding-sub-layer-list" | + "/ietf-detnet:forwarding-sub-layer-list" | |||
| + "/ietf-detnet:name"; | + "/ietf-detnet:name"; | |||
| } | } | |||
| } | } | |||
| typedef sub-network-ref { | typedef sub-network-ref { | |||
| type leafref { | type leafref { | |||
| path "/ietf-detnet:sub-network" | path "/ietf-detnet:detnet" | |||
| + "/ietf-detnet:sub-network" | ||||
| + "/ietf-detnet:sub-network-list" | + "/ietf-detnet:sub-network-list" | |||
| + "/ietf-detnet:name"; | + "/ietf-detnet:name"; | |||
| } | } | |||
| } | } | |||
| typedef ipsec-spi { | typedef ipsec-spi { | |||
| type uint32 { | type uint32 { | |||
| range "1..max"; | range "1..max"; | |||
| } | } | |||
| description | description | |||
| skipping to change at page 21, line 38 ¶ | skipping to change at page 21, line 46 ¶ | |||
| description "there is 16bit DetNet sequence number field"; | description "there is 16bit DetNet sequence number field"; | |||
| value 16; | value 16; | |||
| } | } | |||
| enum long-sn { | enum long-sn { | |||
| description "there is 28bit DetNet sequence number field"; | description "there is 28bit DetNet sequence number field"; | |||
| value 28; | value 28; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| identity status { | ||||
| description | ||||
| "Base identity from which all application-status | ||||
| actions are derived"; | ||||
| } | ||||
| identity none { | ||||
| base "status"; | ||||
| description | ||||
| "Application no ingress/egress"; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model-06 Section 5.8"; | ||||
| } | ||||
| identity ready { | ||||
| base "status"; | ||||
| description | ||||
| "Application ingress/egress ready"; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model-06 Section 5.8"; | ||||
| } | ||||
| identity failed { | ||||
| base "status"; | ||||
| description | ||||
| "Application ingres/egresss failed"; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model-06 Section 5.8"; | ||||
| } | ||||
| identity out-of-service { | ||||
| base "status"; | ||||
| description | ||||
| "Application Administratively blocked"; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model-06 Section 5.8"; | ||||
| } | ||||
| identity partial-failed { | ||||
| base "status"; | ||||
| description | ||||
| "Application One or more Egress ready, and one or more Egress | ||||
| failed. The DetNet flow can be used if the Ingress is | ||||
| Ready."; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model-06 Section 5.8"; | ||||
| } | ||||
| grouping ip-header { | grouping ip-header { | |||
| description | description | |||
| "The IPv4/IPv6 packet header information"; | "The IPv4/IPv6 packet header information"; | |||
| leaf src-ip-address { | leaf src-ip-address { | |||
| type inet:ip-address; | type inet:ip-address; | |||
| description | description | |||
| "The source IP address of the header"; | "The source IP address of the header"; | |||
| } | } | |||
| leaf dest-ip-address { | leaf dest-ip-address { | |||
| type inet:ip-address; | type inet:ip-address; | |||
| skipping to change at page 28, line 27 ¶ | skipping to change at page 29, line 36 ¶ | |||
| It is expected that further cases will be added through | It is expected that further cases 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."; | |||
| container mpls-header { | ||||
| description | ||||
| "MPLS label stack for DetNet MPLS encapsulation or forwarding"; | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type if:interface-ref; | 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 { | case next-hop-list { | |||
| container next-hop-list { | container next-hop-list { | |||
| description | description | |||
| "Container for multiple next hops."; | "Container for multiple next hops."; | |||
| list next-hop { | list next-hop { | |||
| key "hop-index"; | key "hop-index"; | |||
| description | description | |||
| "An entry in a next-hop list. | "An entry in a next-hop list. | |||
| Modules for address families MUST augment this list | Modules for address families MUST augment this list | |||
| with a leaf containing a next-hop address of that | with a leaf containing a next-hop address of that | |||
| address family."; | address family."; | |||
| leaf hop-index { | leaf hop-index { | |||
| type uint8; | type uint8; | |||
| description ""; | description ""; | |||
| } | } | |||
| container mpls-header { | ||||
| description | ||||
| "MPLS label stack for DetNet MPLS encapsulation or forwarding"; | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type if:interface-ref; | 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-forwarding-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 { | |||
| skipping to change at page 29, line 35 ¶ | skipping to change at page 31, line 6 ¶ | |||
| It is expected that further cases will be added through | It is expected that further cases 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."; | |||
| uses detnet-header; | ||||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type if:interface-ref; | 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 { | case next-hop-list { | |||
| container next-hop-list { | container next-hop-list { | |||
| description | description | |||
| "Container for multiple next hops."; | "Container for multiple next hops."; | |||
| list next-hop { | list next-hop { | |||
| key "hop-index"; | key "hop-index"; | |||
| description | description | |||
| "An entry in a next-hop list. | "An entry in a next-hop list. | |||
| skipping to change at page 30, line 4 ¶ | skipping to change at page 31, line 39 ¶ | |||
| description | description | |||
| "Container for multiple next hops."; | "Container for multiple next hops."; | |||
| list next-hop { | list next-hop { | |||
| key "hop-index"; | key "hop-index"; | |||
| description | description | |||
| "An entry in a next-hop list. | "An entry in a next-hop list. | |||
| Modules for address families MUST augment this list | Modules for address families MUST augment this list | |||
| with a leaf containing a next-hop address of that | with a leaf containing a next-hop address of that | |||
| address family."; | address family."; | |||
| leaf hop-index { | leaf hop-index { | |||
| type uint8; | type uint8; | |||
| description ""; | description ""; | |||
| } | } | |||
| uses detnet-header; | ||||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type if:interface-ref; | 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; | ||||
| } | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container detnet { | ||||
| container app-flows { | container app-flows { | |||
| description | description | |||
| "The DetNet app-flow configuration"; | "The DetNet app-flow configuration"; | |||
| list app-flow { | list app-flow { | |||
| key "name"; | key "name"; | |||
| description ""; | description ""; | |||
| leaf name { | leaf name { | |||
| type "string"; | type "string"; | |||
| description "The name to identify the DetNet app-flow"; | description "The name to identify the DetNet app-flow"; | |||
| } | ||||
| leaf app-id { | ||||
| type uint16; | ||||
| config false; | ||||
| description | ||||
| "The DetNet Application ID"; | ||||
| } | ||||
| leaf app-flow-bidir-congruent { | ||||
| type boolean; | ||||
| 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."; | ||||
| } | ||||
| uses traffic-requirements; | ||||
| uses traffic-specification; | ||||
| container in-segment { | ||||
| description "app-flow identification"; | ||||
| leaf interface { | ||||
| type if:interface-ref; | ||||
| description ""; | ||||
| } | } | |||
| uses data-flow-spec; | leaf app-id { | |||
| } | type uint16; | |||
| container out-segment { | config false; | |||
| description | ||||
| "ingress proxy that incoming app-flow map to detnet-flow | ||||
| and egress proxy that next-hop for outging app-flow"; | ||||
| choice outgoing-options { | ||||
| mandatory true; | ||||
| description | description | |||
| ""; | "The DetNet Application ID"; | |||
| case ingress-proxy { | } | |||
| leaf service-sub-layer { | leaf app-flow-bidir-congruent { | |||
| type service-sub-layer-ref; | type boolean; | |||
| 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."; | ||||
| } | ||||
| 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"; | ||||
| } | ||||
| uses traffic-requirements; | ||||
| uses traffic-specification; | ||||
| container ingress { | ||||
| // key "name"; This should be a list for aggregation | ||||
| description | ||||
| "Ingress DetNet application flows or a compound flow"; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "Ingress DetNet application"; | ||||
| } | ||||
| leaf app-flow-status { | ||||
| type identityref { | ||||
| base status; | ||||
| } | } | |||
| config false; | ||||
| description "Status of ingress application flow"; | ||||
| } | } | |||
| case egress { | leaf interface { | |||
| uses detnet-app-next-hop-content; | type if:interface-ref; | |||
| } | ||||
| uses data-flow-spec; | ||||
| } //End of app-ingress | ||||
| container egress { | ||||
| description "Route's next-hop attribute."; | ||||
| // key "name"; This should be a list for aggregation | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "Egress DetNet application"; | ||||
| } | ||||
| choice application-type { | ||||
| container ethernet { | ||||
| leaf ethernet-place-holder { | ||||
| type string; | ||||
| description "Place holder for matching ethernet"; | ||||
| } | ||||
| } | ||||
| container ip-mpls { | ||||
| uses detnet-app-next-hop-content; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | container service-sub-layer { | |||
| container service-sub-layer { | description "The DetNet service sub-layer configuration"; | |||
| description "The DetNet service sub-layer configuration"; | list service-sub-layer-list { | |||
| list service-sub-layer-list { | key "name"; | |||
| key "name"; | description ""; | |||
| description ""; | leaf name { | |||
| leaf name { | type string; | |||
| type string; | description "The name of the DetNet service sub-layer"; | |||
| description "The name of the DetNet service sub-layer"; | ||||
| } | ||||
| leaf service-id { | ||||
| type uint16; | ||||
| config false; | ||||
| description | ||||
| "The DetNet service ID"; | ||||
| } | ||||
| leaf service-rank { | ||||
| type uint8; | ||||
| description | ||||
| "The DetNet rank for this service"; | ||||
| } | ||||
| uses traffic-requirements; | ||||
| uses traffic-specification; | ||||
| 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"; | ||||
| } | } | |||
| leaf sequence-number-length { | leaf service-id { | |||
| type sequence-number-field; | type uint16; | |||
| config false; | ||||
| description | description | |||
| "sequence number filed can choice 0 bit, 16bit, 28 bit filed"; | "The DetNet service ID"; | |||
| } | } | |||
| } | leaf service-rank { | |||
| leaf service-operation-type { | type uint8; | |||
| type service-operation-type; | ||||
| } | ||||
| container in-segment { | ||||
| description | ||||
| "The DetNet service sub-layer inbound configuration. | ||||
| This should not be used if this service operation is initiation"; | ||||
| choice incoming-options { | ||||
| mandatory true; | ||||
| description | description | |||
| ""; | "The DetNet rank for this service"; | |||
| case ingress-proxy { | } | |||
| uses app-flows-ref; | uses traffic-requirements; | |||
| uses traffic-specification; | ||||
| 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"; | ||||
| } | } | |||
| case detnet-service-identification { | leaf sequence-number-length { | |||
| uses detnet-flow-spec; | type sequence-number-field; | |||
| description | ||||
| "sequence number filed can choice 0 bit, 16bit, 28 bit filed"; | ||||
| } | } | |||
| } | } | |||
| } | leaf service-operation-type { | |||
| container out-segment { | type service-operation-type; | |||
| description | } | |||
| "The DetNet service sub-layer outbound configuration. | container incoming { | |||
| This should not be used | ||||
| if this service operation is termination"; | ||||
| choice outgoing-options { | ||||
| mandatory true; | ||||
| description | description | |||
| ""; | "The DetNet service sub-layer incoming configuration."; | |||
| case egress-proxy { | choice incoming-options { | |||
| uses app-flows-ref; | mandatory true; | |||
| description | ||||
| ""; | ||||
| case ingress-proxy { | ||||
| uses app-flows-ref; | ||||
| } | ||||
| case detnet-service-identification { | ||||
| uses detnet-flow-spec; | ||||
| } | ||||
| } | } | |||
| case detnet-service-output { | } | |||
| //uses detnet-service-next-hop-content; | container outgoing { | |||
| list service-output-list { | description | |||
| key "service-output-index"; | "The DetNet service sub-layer outgoing configuration."; | |||
| leaf service-output-index { | choice outgoing-options { | |||
| type uint8; | mandatory true; | |||
| } | description | |||
| uses detnet-header; | ""; | |||
| list next-layer{ | case egress-proxy { | |||
| key "index"; | uses app-flows-ref; | |||
| description "lower-layer info"; | } | |||
| leaf index { | case detnet-service-outgoing { | |||
| //uses detnet-service-next-hop-content; | ||||
| list service-outgoing-list { | ||||
| key "service-outgoing-index"; | ||||
| leaf service-outgoing-index { | ||||
| type uint8; | type uint8; | |||
| } | } | |||
| leaf forwarding-sub-layer { | uses detnet-header; | |||
| type forwarding-sub-layer-ref; | list next-layer{ | |||
| key "index"; | ||||
| description "lower-layer info"; | ||||
| leaf index { | ||||
| type uint8; | ||||
| } | ||||
| leaf forwarding-sub-layer { | ||||
| type forwarding-sub-layer-ref; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | container forwarding-sub-layer { | |||
| container forwarding-sub-layer { | description "The DetNet forwarding sub-layer configuration"; | |||
| description "The DetNet forwarding sub-layer configuration"; | list forwarding-sub-layer-list { | |||
| list forwarding-sub-layer-list { | key "name"; | |||
| key "name"; | description ""; | |||
| description ""; | leaf name { | |||
| leaf name { | type string; | |||
| type string; | description "The name of the DetNet forwarding sub-layer"; | |||
| description "The name of the DetNet forwarding sub-layer"; | } | |||
| } | leaf forwarding-id { | |||
| leaf forwarding-id { | type uint16; | |||
| type uint16; | config false; | |||
| config false; | ||||
| description | ||||
| "The DetNet forwarding ID"; | ||||
| } | ||||
| uses traffic-requirements; | ||||
| uses traffic-specification; | ||||
| leaf forwarding-operation-type { | ||||
| type forwarding-operations-type; | ||||
| } | ||||
| container in-segment { | ||||
| description | ||||
| "The DetNet forwarding sub-layer inbound configuration. This should not be used | ||||
| if this forwarding operation is impose-and-forward"; | ||||
| choice incoming-options { | ||||
| mandatory true; | ||||
| description | description | |||
| ""; | "The DetNet forwarding ID"; | |||
| case detnet-service-forwarding { | } | |||
| uses service-sub-layer-ref; | uses traffic-requirements; | |||
| } | uses traffic-specification; | |||
| case detnet-forwarding-identification { | leaf forwarding-operation-type { | |||
| leaf interface { | type forwarding-operations-type; | |||
| type if:interface-ref; | } | |||
| description ""; | container incoming { | |||
| description | ||||
| "The DetNet forwarding sub-layer incoming configuration."; | ||||
| choice incoming-options { | ||||
| mandatory true; | ||||
| description | ||||
| ""; | ||||
| case detnet-service-forwarding { | ||||
| uses service-sub-layer-ref; | ||||
| } | ||||
| case detnet-forwarding-identification { | ||||
| leaf interface { | ||||
| type if:interface-ref; | ||||
| description ""; | ||||
| } | ||||
| uses detnet-flow-spec; | ||||
| } | } | |||
| uses detnet-flow-spec; | ||||
| } | } | |||
| } | } | |||
| } | container outgoing { | |||
| container out-segment { | ||||
| description | ||||
| "The DetNet forwarding sub-layer outbound configuration. This should not be used | ||||
| if this forwarding operation is pop-and-lookup"; | ||||
| choice outgoing-options { | ||||
| mandatory true; | ||||
| description | description | |||
| ""; | "The DetNet forwarding sub-layer outbound configuration."; | |||
| case service-operation { | choice outgoing-options { | |||
| uses service-sub-layer-ref; | mandatory true; | |||
| } | description | |||
| case detnet-forwarding-output { | ""; | |||
| uses detnet-forwarding-next-hop-content; | case detnet-service-operation { | |||
| uses service-sub-layer-ref; | ||||
| } | ||||
| case detnet-forwarding-outgoing { | ||||
| uses detnet-forwarding-next-hop-content; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | container sub-network { | |||
| container sub-network { | ||||
| description ""; | ||||
| list sub-network-list { | ||||
| key "name"; | ||||
| description ""; | description ""; | |||
| leaf name { | list sub-network-list { | |||
| type string; | key "name"; | |||
| description ""; | description ""; | |||
| leaf name { | ||||
| type string; | ||||
| description ""; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 7. An alternative DetNet YANG model | 7. Open Issues | |||
| This is a model that is organized by the concepts in the flow model. | ||||
| In order to align with the principles in the flow document a ground | ||||
| up model was built. In order to illustrate this YANG model some | ||||
| example test configurations are used to validate the model. Building | ||||
| the DetNet YANG model is not that easy because the number of | ||||
| permutations of IP/MPLS data planes with and without aggregation at | ||||
| each layer is hard to keep straight. This model tries to follow the | ||||
| current DetNet data plane documents and supported data planes. The | ||||
| examples do not illustrate aggregation but the models are build for | ||||
| several levels of aggregation. | ||||
| 7.1. Conventions | ||||
| This YANG model consists of three main sections: application, service | ||||
| sub-layer and forwarding sub-layer, that use a number of common | ||||
| building blocks. Many of the building blocks are also the same as | ||||
| the first model presented in this document. To minimize duplication, | ||||
| leaf-refs between the sections are utilized. With a single leaf-ref | ||||
| between an application and a service sub-layer the backend code can | ||||
| relate the two instances. The backend code can also populate a read | ||||
| only instance of a leaf-ref for the operational view so leaf-refs | ||||
| only need to be configured once for both objects. Early versions of | ||||
| the model used leaf-refs configure mainly outside the service sub- | ||||
| layer, however this turned out being awkward because the in the | ||||
| current model of the service sub-layer presented here it is binding a | ||||
| service id to the leaf-ref. Therefore the leaf-ref for an | ||||
| application and a forwarding sub-layer is more naturally configured | ||||
| from the service sub-layer. | ||||
| Another point about the model is each component has two | ||||
| unidirectional parts. Applications would typically contain both | ||||
| directions and become a complete bidirectional entity containing both | ||||
| directionsl of a flow. Service sub-layers components can be | ||||
| configured as unidirectional with only one direction being | ||||
| configured. Forwarding sub-layer components are unidirectional. | ||||
| Leaf-refs are used for each direction even though there are cases | ||||
| where a single leaf-ref could work in a bidirctional model. DetNet | ||||
| Services require configuarion of each undirectional flow and have | ||||
| configuration options based on the roles they play and the types of | ||||
| traffic mappings. | ||||
| DetNet Edges have application, service and forwarding configuration. | ||||
| DetNet Relays only use DetNet services sub-layer and forwarding sub- | ||||
| layer configuration. DetNet Transit nodes may only have forwarding | ||||
| sub-layer configuration. The behavior is DetNet service dependent, | ||||
| such that a a physical node may be an edge node for some flows, it | ||||
| may be a relay node for some flows and it may be a transit node for | ||||
| some flows. The full YANG model is defined and only the relevant | ||||
| aspects are configured at each stage. | ||||
| 7.1.1. Aggregation | ||||
| Aggregation may be configured at each of the instances. Aggregation | ||||
| is data plane specific. DetNet Service Sub-layer MPLS aggregation | ||||
| for example, from application to service adds a per Application | ||||
| Service sub-layer label. If a DetNet service is aggregated to | ||||
| another DetNet service there are a couple ways this can be | ||||
| accomplished. | ||||
| A service sub-layer can play a role similar to an application to | ||||
| another service allowing aggregation of services. A service sub- | ||||
| layer can appear as relay service peering with that service. Relay | ||||
| functions are dependent in the traffic type. Aggregation can be | ||||
| achieved by encapsulation (MPLS) or by wild cards (IP) using the | ||||
| native IP header. IP headers that are used in place aggregate by | ||||
| allowing a broader address range (wild cards) or port range or DSCP | ||||
| filter. These aggregating flows also require the reverse operation | ||||
| to disaggregate the traffic at the edge of the DetNet service. | ||||
| There are many ways to achieve aggregation and this can complicate | ||||
| the YANG design to some degree. The current models support | ||||
| aggregation but the configuration examples provided are illustrating | ||||
| no aggregation for this version of the draft. | ||||
| 7.2. Alternative DetNet Configuration YANG | ||||
| module: ietf-detnet-configa | ||||
| +--rw detnet | ||||
| +--rw applications | ||||
| | +--rw app-list* [name] | ||||
| | | +--rw name string | ||||
| | | +--ro app-id? uint16 | ||||
| | | +--rw app-flow-bidir-congruent? boolean | ||||
| | | +--ro service-outbound? service-ref | ||||
| | | +--ro service-inbound? service-ref | ||||
| | | +--rw traffic-requirements | ||||
| | | | +--rw min-bandwidth? uint64 | ||||
| | | | +--rw max-latency? uint32 | ||||
| | | | +--rw max-latency-variation? uint32 | ||||
| | | | +--rw max-loss? percent | ||||
| | | | +--rw max-consecutive-loss-tolerance? uint32 | ||||
| | | | +--rw max-misordering? uint32 | ||||
| | | +--rw traffic-specification | ||||
| | | +--rw interval? uint32 | ||||
| | | +--rw max-packets-per-interval? uint64 | ||||
| | | +--rw max-payload-size? uint32 | ||||
| | +--rw app-ingress* [name] | ||||
| | | +--rw name string | ||||
| | | +--ro app-flow-status? identityref | ||||
| | | +--rw incoming-interface* if:interface-ref | ||||
| | | +--rw (detnet-forwarding-type)? | ||||
| | | +--:(ethernet) | ||||
| | | | +--rw ethernet | ||||
| | | | +--rw placeholder? string | ||||
| | | +--:(ip) | ||||
| | | | +--rw ip | ||||
| | | | +--rw source inet:ip-prefix | ||||
| | | | +--rw destination inet:ip-prefix | ||||
| | | | +--rw protocol-next uint8 | ||||
| | | | +--rw dscp* uint8 | ||||
| | | | +--rw ipv6-flow-label? inet:ipv6-flow-label | ||||
| | | | +--rw (l4)? | ||||
| | | | +--:(tcp) | ||||
| | | | | +--rw tcp | ||||
| | | | | +--rw source-port | ||||
| | | | | | +--rw (source-port)? | ||||
| | | | | | +--:(range-or-operator) | ||||
| | | | | | +--rw range-or-operator | ||||
| | | | | | +--rw (port-range-or-operator)? | ||||
| | | | | | +--:(range) | ||||
| | | | | | | +--rw lower-port inet: | ||||
| port-number | ||||
| | | | | | | +--rw upper-port inet: | ||||
| port-number | ||||
| | | | | | +--:(operator) | ||||
| | | | | | +--rw operator? opera | ||||
| tor | ||||
| | | | | | +--rw port inet: | ||||
| port-number | ||||
| | | | | +--rw destination-port | ||||
| | | | | +--rw (destination-port)? | ||||
| | | | | +--:(range-or-operator) | ||||
| | | | | +--rw range-or-operator | ||||
| | | | | +--rw (port-range-or-operator)? | ||||
| | | | | +--:(range) | ||||
| | | | | | +--rw lower-port inet: | ||||
| port-number | ||||
| | | | | | +--rw upper-port inet: | ||||
| port-number | ||||
| | | | | +--:(operator) | ||||
| | | | | +--rw operator? opera | ||||
| tor | ||||
| | | | | +--rw port inet: | ||||
| port-number | ||||
| | | | +--:(udp) | ||||
| | | | | +--rw udp | ||||
| | | | | +--rw source-port | ||||
| | | | | | +--rw (source-port)? | ||||
| | | | | | +--:(range-or-operator) | ||||
| | | | | | +--rw range-or-operator | ||||
| | | | | | +--rw (port-range-or-operator)? | ||||
| | | | | | +--:(range) | ||||
| | | | | | | +--rw lower-port inet: | ||||
| port-number | ||||
| | | | | | | +--rw upper-port inet: | ||||
| port-number | ||||
| | | | | | +--:(operator) | ||||
| | | | | | +--rw operator? opera | ||||
| tor | ||||
| | | | | | +--rw port inet: | ||||
| port-number | ||||
| | | | | +--rw destination-port | ||||
| | | | | +--rw (destination-port)? | ||||
| | | | | +--:(range-or-operator) | ||||
| | | | | +--rw range-or-operator | ||||
| | | | | +--rw (port-range-or-operator)? | ||||
| | | | | +--:(range) | ||||
| | | | | | +--rw lower-port inet: | ||||
| port-number | ||||
| | | | | | +--rw upper-port inet: | ||||
| port-number | ||||
| | | | | +--:(operator) | ||||
| | | | | +--rw operator? opera | ||||
| tor | ||||
| | | | | +--rw port inet: | ||||
| port-number | ||||
| | | | +--:(ipsec) | ||||
| | | | +--rw ipsec | ||||
| | | | +--rw ipsec-spi? ipsec-spi | ||||
| | | +--:(mpls) | ||||
| | | +--rw mpls | ||||
| | | +--rw (label-space)? | ||||
| | | +--:(interface) | ||||
| | | | +--rw interface | ||||
| | | | +--rw mpls-label-stack | ||||
| | | | +--rw entry* [id] | ||||
| | | | +--rw id uint8 | ||||
| | | | +--rw label? rt-types:mpls- | ||||
| label | ||||
| | | | +--rw ttl? uint8 | ||||
| | | | +--rw traffic-class? uint8 | ||||
| | | +--:(platform) | ||||
| | | +--rw platform | ||||
| | | +--rw mpls-label-stack | ||||
| | | +--rw entry* [id] | ||||
| | | +--rw id uint8 | ||||
| | | +--rw label? rt-types:mpls- | ||||
| label | ||||
| | | +--rw ttl? uint8 | ||||
| | | +--rw traffic-class? uint8 | ||||
| | +--rw app-egress* [name] | ||||
| | +--rw name string | ||||
| | +--ro app-flow-status? identityref | ||||
| | +--rw next-hop | ||||
| | +--rw (application-type)? | ||||
| | +--:(ethernet) | ||||
| | | +--rw ethernet | ||||
| | | +--rw ethernet-place-holder? string | ||||
| | +--:(ip-mpls) | ||||
| | +--rw ip-mpls | ||||
| | +--rw (next-hop-options) | ||||
| | +--:(simple-next-hop) | ||||
| | | +--rw simple-next-hop | ||||
| | | +--rw outgoing-interface? if:interface | ||||
| -ref | ||||
| | | +--rw mpls-label-stack | ||||
| | | +--rw entry* [id] | ||||
| | | +--rw id uint8 | ||||
| | | +--rw label? rt-types:mp | ||||
| ls-label | ||||
| | | +--rw ttl? uint8 | ||||
| | | +--rw traffic-class? uint8 | ||||
| | +--:(special-next-hop) | ||||
| | | +--rw special-next-hop | ||||
| | | +--rw special-next-hop? enumeration | ||||
| | +--:(next-hop) | ||||
| | +--rw next-hop* [hop-index] | ||||
| | +--rw hop-index uint8 | ||||
| | +--rw outgoing-interface? if:interface | ||||
| -ref | ||||
| | +--rw index? string | ||||
| | +--rw backup-index? string | ||||
| | +--rw loadshare? uint16 | ||||
| | +--rw role? nhlfe-role | ||||
| | +--rw mpls-label-stack | ||||
| | +--rw entry* [id] | ||||
| | +--rw id uint8 | ||||
| | +--rw label? rt-types:mp | ||||
| ls-label | ||||
| | +--rw ttl? uint8 | ||||
| | +--rw traffic-class? uint8 | ||||
| +--rw services | ||||
| | +--rw service-list* [name] | ||||
| | +--rw name string | ||||
| | +--ro service-id? uint16 | ||||
| | +--rw service-rank? uint8 | ||||
| | +--rw outbound | ||||
| | | +--ro forward-sublayer-output* fwd-sub-layer-output-ref | ||||
| | | +--rw service-protection-type? identityref | ||||
| | | +--rw sequence_number_length? uint8 | ||||
| | | +--rw application-input* [name] | ||||
| | | | +--rw name application-ref | ||||
| | | | +--rw (detnet-forwarding-type)? | ||||
| | | | +--:(ip) | ||||
| | | | | +--rw ip | ||||
| | | | | +--rw source inet:ip-prefix | ||||
| | | | | +--rw destination inet:ip-prefix | ||||
| | | | | +--rw protocol-next uint8 | ||||
| | | | | +--rw dscp* uint8 | ||||
| | | | | +--rw ipv6-flow-label? inet:ipv6-flow-label | ||||
| | | | | +--rw (l4)? | ||||
| | | | | +--:(tcp) | ||||
| | | | | | +--rw tcp | ||||
| | | | | | +--rw source-port | ||||
| | | | | | | +--rw (source-port)? | ||||
| | | | | | | +--:(range-or-operator) | ||||
| | | | | | | +--rw range-or-operator | ||||
| | | | | | | +--rw (port-range-or-oper | ||||
| ator)? | ||||
| | | | | | | +--:(range) | ||||
| | | | | | | | +--rw lower-port | ||||
| inet:port-number | ||||
| | | | | | | | +--rw upper-port | ||||
| inet:port-number | ||||
| | | | | | | +--:(operator) | ||||
| | | | | | | +--rw operator? | ||||
| operator | ||||
| | | | | | | +--rw port | ||||
| inet:port-number | ||||
| | | | | | +--rw destination-port | ||||
| | | | | | +--rw (destination-port)? | ||||
| | | | | | +--:(range-or-operator) | ||||
| | | | | | +--rw range-or-operator | ||||
| | | | | | +--rw (port-range-or-oper | ||||
| ator)? | ||||
| | | | | | +--:(range) | ||||
| | | | | | | +--rw lower-port | ||||
| inet:port-number | ||||
| | | | | | | +--rw upper-port | ||||
| inet:port-number | ||||
| | | | | | +--:(operator) | ||||
| | | | | | +--rw operator? | ||||
| operator | ||||
| | | | | | +--rw port | ||||
| inet:port-number | ||||
| | | | | +--:(udp) | ||||
| | | | | | +--rw udp | ||||
| | | | | | +--rw source-port | ||||
| | | | | | | +--rw (source-port)? | ||||
| | | | | | | +--:(range-or-operator) | ||||
| | | | | | | +--rw range-or-operator | ||||
| | | | | | | +--rw (port-range-or-oper | ||||
| ator)? | ||||
| | | | | | | +--:(range) | ||||
| | | | | | | | +--rw lower-port | ||||
| inet:port-number | ||||
| | | | | | | | +--rw upper-port | ||||
| inet:port-number | ||||
| | | | | | | +--:(operator) | ||||
| | | | | | | +--rw operator? | ||||
| operator | ||||
| | | | | | | +--rw port | ||||
| inet:port-number | ||||
| | | | | | +--rw destination-port | ||||
| | | | | | +--rw (destination-port)? | ||||
| | | | | | +--:(range-or-operator) | ||||
| | | | | | +--rw range-or-operator | ||||
| | | | | | +--rw (port-range-or-oper | ||||
| ator)? | ||||
| | | | | | +--:(range) | ||||
| | | | | | | +--rw lower-port | ||||
| inet:port-number | ||||
| | | | | | | +--rw upper-port | ||||
| inet:port-number | ||||
| | | | | | +--:(operator) | ||||
| | | | | | +--rw operator? | ||||
| operator | ||||
| | | | | | +--rw port | ||||
| inet:port-number | ||||
| | | | | +--:(ipsec) | ||||
| | | | | +--rw ipsec | ||||
| | | | | +--rw ipsec-spi? ipsec-spi | ||||
| | | | +--:(mpls-service-label) | ||||
| | | | +--rw mpls-service-label? rt-types:mpls-label-g | ||||
| eneral-use | ||||
| | | +--rw prev-relay-services* [name] | ||||
| | | | +--rw name service-ref | ||||
| | | | +--rw (detnet-forwarding-type)? | ||||
| | | | +--:(ip) | ||||
| | | | | +--rw ip | ||||
| | | | | +--rw source inet:ip-prefix | ||||
| | | | | +--rw destination inet:ip-prefix | ||||
| | | | | +--rw protocol-next uint8 | ||||
| | | | | +--rw dscp* uint8 | ||||
| | | | | +--rw ipv6-flow-label? inet:ipv6-flow-label | ||||
| | | | | +--rw (l4)? | ||||
| | | | | +--:(tcp) | ||||
| | | | | | +--rw tcp | ||||
| | | | | | +--rw source-port | ||||
| | | | | | | +--rw (source-port)? | ||||
| | | | | | | +--:(range-or-operator) | ||||
| | | | | | | +--rw range-or-operator | ||||
| | | | | | | +--rw (port-range-or-oper | ||||
| ator)? | ||||
| | | | | | | +--:(range) | ||||
| | | | | | | | +--rw lower-port | ||||
| inet:port-number | ||||
| | | | | | | | +--rw upper-port | ||||
| inet:port-number | ||||
| | | | | | | +--:(operator) | ||||
| | | | | | | +--rw operator? | ||||
| operator | ||||
| | | | | | | +--rw port | ||||
| inet:port-number | ||||
| | | | | | +--rw destination-port | ||||
| | | | | | +--rw (destination-port)? | ||||
| | | | | | +--:(range-or-operator) | ||||
| | | | | | +--rw range-or-operator | ||||
| | | | | | +--rw (port-range-or-oper | ||||
| ator)? | ||||
| | | | | | +--:(range) | ||||
| | | | | | | +--rw lower-port | ||||
| inet:port-number | ||||
| | | | | | | +--rw upper-port | ||||
| inet:port-number | ||||
| | | | | | +--:(operator) | ||||
| | | | | | +--rw operator? | ||||
| operator | ||||
| | | | | | +--rw port | ||||
| inet:port-number | ||||
| | | | | +--:(udp) | ||||
| | | | | | +--rw udp | ||||
| | | | | | +--rw source-port | ||||
| | | | | | | +--rw (source-port)? | ||||
| | | | | | | +--:(range-or-operator) | ||||
| | | | | | | +--rw range-or-operator | ||||
| | | | | | | +--rw (port-range-or-oper | ||||
| ator)? | ||||
| | | | | | | +--:(range) | ||||
| | | | | | | | +--rw lower-port | ||||
| inet:port-number | ||||
| | | | | | | | +--rw upper-port | ||||
| inet:port-number | ||||
| | | | | | | +--:(operator) | ||||
| | | | | | | +--rw operator? | ||||
| operator | ||||
| | | | | | | +--rw port | ||||
| inet:port-number | ||||
| | | | | | +--rw destination-port | ||||
| | | | | | +--rw (destination-port)? | ||||
| | | | | | +--:(range-or-operator) | ||||
| | | | | | +--rw range-or-operator | ||||
| | | | | | +--rw (port-range-or-oper | ||||
| ator)? | ||||
| | | | | | +--:(range) | ||||
| | | | | | | +--rw lower-port | ||||
| inet:port-number | ||||
| | | | | | | +--rw upper-port | ||||
| inet:port-number | ||||
| | | | | | +--:(operator) | ||||
| | | | | | +--rw operator? | ||||
| operator | ||||
| | | | | | +--rw port | ||||
| inet:port-number | ||||
| | | | | +--:(ipsec) | ||||
| | | | | +--rw ipsec | ||||
| | | | | +--rw ipsec-spi? ipsec-spi | ||||
| | | | +--:(mpls-service-label) | ||||
| | | | +--rw mpls-service-label? rt-types:mpls-label-g | ||||
| eneral-use | ||||
| | | +--rw traffic-requirements | ||||
| | | | +--rw min-bandwidth? uint64 | ||||
| | | | +--rw max-latency? uint32 | ||||
| | | | +--rw max-latency-variation? uint32 | ||||
| | | | +--rw max-loss? percent | ||||
| | | | +--rw max-consecutive-loss-tolerance? uint32 | ||||
| | | | +--rw max-misordering? uint32 | ||||
| | | +--rw traffic-specification | ||||
| | | +--rw interval? uint32 | ||||
| | | +--rw max-packets-per-interval? uint64 | ||||
| | | +--rw max-payload-size? uint32 | ||||
| | +--rw inbound | ||||
| | +--rw forward-sublayer-input* fwd-sub-layer-input-ref | ||||
| | +--rw service-protection-type? identityref | ||||
| | +--rw sequence_number_length? uint8 | ||||
| | +--rw application-output* [name] | ||||
| | | +--rw name application-ref | ||||
| | | +--rw (detnet-forwarding-type)? | ||||
| | | +--:(ip) | ||||
| | | | +--rw ip | ||||
| | | | +--rw source inet:ip-prefix | ||||
| | | | +--rw destination inet:ip-prefix | ||||
| | | | +--rw protocol-next uint8 | ||||
| | | | +--rw dscp* uint8 | ||||
| | | | +--rw ipv6-flow-label? inet:ipv6-flow-label | ||||
| | | | +--rw (l4)? | ||||
| | | | +--:(tcp) | ||||
| | | | | +--rw tcp | ||||
| | | | | +--rw source-port | ||||
| | | | | | +--rw (source-port)? | ||||
| | | | | | +--:(range-or-operator) | ||||
| | | | | | +--rw range-or-operator | ||||
| | | | | | +--rw (port-range-or-oper | ||||
| ator)? | ||||
| | | | | | +--:(range) | ||||
| | | | | | | +--rw lower-port | ||||
| inet:port-number | ||||
| | | | | | | +--rw upper-port | ||||
| inet:port-number | ||||
| | | | | | +--:(operator) | ||||
| | | | | | +--rw operator? | ||||
| operator | ||||
| | | | | | +--rw port | ||||
| inet:port-number | ||||
| | | | | +--rw destination-port | ||||
| | | | | +--rw (destination-port)? | ||||
| | | | | +--:(range-or-operator) | ||||
| | | | | +--rw range-or-operator | ||||
| | | | | +--rw (port-range-or-oper | ||||
| ator)? | ||||
| | | | | +--:(range) | ||||
| | | | | | +--rw lower-port | ||||
| inet:port-number | ||||
| | | | | | +--rw upper-port | ||||
| inet:port-number | ||||
| | | | | +--:(operator) | ||||
| | | | | +--rw operator? | ||||
| operator | ||||
| | | | | +--rw port | ||||
| inet:port-number | ||||
| | | | +--:(udp) | ||||
| | | | | +--rw udp | ||||
| | | | | +--rw source-port | ||||
| | | | | | +--rw (source-port)? | ||||
| | | | | | +--:(range-or-operator) | ||||
| | | | | | +--rw range-or-operator | ||||
| | | | | | +--rw (port-range-or-oper | ||||
| ator)? | ||||
| | | | | | +--:(range) | ||||
| | | | | | | +--rw lower-port | ||||
| inet:port-number | ||||
| | | | | | | +--rw upper-port | ||||
| inet:port-number | ||||
| | | | | | +--:(operator) | ||||
| | | | | | +--rw operator? | ||||
| operator | ||||
| | | | | | +--rw port | ||||
| inet:port-number | ||||
| | | | | +--rw destination-port | ||||
| | | | | +--rw (destination-port)? | ||||
| | | | | +--:(range-or-operator) | ||||
| | | | | +--rw range-or-operator | ||||
| | | | | +--rw (port-range-or-oper | ||||
| ator)? | ||||
| | | | | +--:(range) | ||||
| | | | | | +--rw lower-port | ||||
| inet:port-number | ||||
| | | | | | +--rw upper-port | ||||
| inet:port-number | ||||
| | | | | +--:(operator) | ||||
| | | | | +--rw operator? | ||||
| operator | ||||
| | | | | +--rw port | ||||
| inet:port-number | ||||
| | | | +--:(ipsec) | ||||
| | | | +--rw ipsec | ||||
| | | | +--rw ipsec-spi? ipsec-spi | ||||
| | | +--:(mpls-service-label) | ||||
| | | +--rw mpls-service-label? rt-types:mpls-label-g | ||||
| eneral-use | ||||
| | +--rw next-relay-services* [name] | ||||
| | +--rw name service-ref | ||||
| | +--rw (detnet-forwarding-type)? | ||||
| | +--:(ip) | ||||
| | | +--rw ip | ||||
| | | +--rw source inet:ip-prefix | ||||
| | | +--rw destination inet:ip-prefix | ||||
| | | +--rw protocol-next uint8 | ||||
| | | +--rw dscp* uint8 | ||||
| | | +--rw ipv6-flow-label? inet:ipv6-flow-label | ||||
| | | +--rw (l4)? | ||||
| | | +--:(tcp) | ||||
| | | | +--rw tcp | ||||
| | | | +--rw source-port | ||||
| | | | | +--rw (source-port)? | ||||
| | | | | +--:(range-or-operator) | ||||
| | | | | +--rw range-or-operator | ||||
| | | | | +--rw (port-range-or-oper | ||||
| ator)? | ||||
| | | | | +--:(range) | ||||
| | | | | | +--rw lower-port | ||||
| inet:port-number | ||||
| | | | | | +--rw upper-port | ||||
| inet:port-number | ||||
| | | | | +--:(operator) | ||||
| | | | | +--rw operator? | ||||
| operator | ||||
| | | | | +--rw port | ||||
| inet:port-number | ||||
| | | | +--rw destination-port | ||||
| | | | +--rw (destination-port)? | ||||
| | | | +--:(range-or-operator) | ||||
| | | | +--rw range-or-operator | ||||
| | | | +--rw (port-range-or-oper | ||||
| ator)? | ||||
| | | | +--:(range) | ||||
| | | | | +--rw lower-port | ||||
| inet:port-number | ||||
| | | | | +--rw upper-port | ||||
| inet:port-number | ||||
| | | | +--:(operator) | ||||
| | | | +--rw operator? | ||||
| operator | ||||
| | | | +--rw port | ||||
| inet:port-number | ||||
| | | +--:(udp) | ||||
| | | | +--rw udp | ||||
| | | | +--rw source-port | ||||
| | | | | +--rw (source-port)? | ||||
| | | | | +--:(range-or-operator) | ||||
| | | | | +--rw range-or-operator | ||||
| | | | | +--rw (port-range-or-oper | ||||
| ator)? | ||||
| | | | | +--:(range) | ||||
| | | | | | +--rw lower-port | ||||
| inet:port-number | ||||
| | | | | | +--rw upper-port | ||||
| inet:port-number | ||||
| | | | | +--:(operator) | ||||
| | | | | +--rw operator? | ||||
| operator | ||||
| | | | | +--rw port | ||||
| inet:port-number | ||||
| | | | +--rw destination-port | ||||
| | | | +--rw (destination-port)? | ||||
| | | | +--:(range-or-operator) | ||||
| | | | +--rw range-or-operator | ||||
| | | | +--rw (port-range-or-oper | ||||
| ator)? | ||||
| | | | +--:(range) | ||||
| | | | | +--rw lower-port | ||||
| inet:port-number | ||||
| | | | | +--rw upper-port | ||||
| inet:port-number | ||||
| | | | +--:(operator) | ||||
| | | | +--rw operator? | ||||
| operator | ||||
| | | | +--rw port | ||||
| inet:port-number | ||||
| | | +--:(ipsec) | ||||
| | | +--rw ipsec | ||||
| | | +--rw ipsec-spi? ipsec-spi | ||||
| | +--:(mpls-service-label) | ||||
| | +--rw mpls-service-label? rt-types:mpls-label-g | ||||
| eneral-use | ||||
| +--rw fwd-sub-layer-input* [name] | ||||
| | +--rw name string | ||||
| | +--rw incoming-interface* if:interface-ref | ||||
| | +--rw (connectors)? | ||||
| | | +--:(service-sub-layers) | ||||
| | | | +--ro service-sub-layers* service-ref | ||||
| | | +--:(forwarding-sub-layers) | ||||
| | | +--ro forwarding-sub-layers* fwd-sub-layer-output-ref | ||||
| | +--rw (detnet-forwarding-type)? | ||||
| | +--:(ip) | ||||
| | | +--rw ip | ||||
| | | +--rw source inet:ip-prefix | ||||
| | | +--rw destination inet:ip-prefix | ||||
| | | +--rw protocol-next uint8 | ||||
| | | +--rw dscp* uint8 | ||||
| | | +--rw ipv6-flow-label? inet:ipv6-flow-label | ||||
| | | +--rw (l4)? | ||||
| | | +--:(tcp) | ||||
| | | | +--rw tcp | ||||
| | | | +--rw source-port | ||||
| | | | | +--rw (source-port)? | ||||
| | | | | +--:(range-or-operator) | ||||
| | | | | +--rw range-or-operator | ||||
| | | | | +--rw (port-range-or-operator)? | ||||
| | | | | +--:(range) | ||||
| | | | | | +--rw lower-port inet:por | ||||
| t-number | ||||
| | | | | | +--rw upper-port inet:por | ||||
| t-number | ||||
| | | | | +--:(operator) | ||||
| | | | | +--rw operator? operator | ||||
| | | | | +--rw port inet:por | ||||
| t-number | ||||
| | | | +--rw destination-port | ||||
| | | | +--rw (destination-port)? | ||||
| | | | +--:(range-or-operator) | ||||
| | | | +--rw range-or-operator | ||||
| | | | +--rw (port-range-or-operator)? | ||||
| | | | +--:(range) | ||||
| | | | | +--rw lower-port inet:por | ||||
| t-number | ||||
| | | | | +--rw upper-port inet:por | ||||
| t-number | ||||
| | | | +--:(operator) | ||||
| | | | +--rw operator? operator | ||||
| | | | +--rw port inet:por | ||||
| t-number | ||||
| | | +--:(udp) | ||||
| | | | +--rw udp | ||||
| | | | +--rw source-port | ||||
| | | | | +--rw (source-port)? | ||||
| | | | | +--:(range-or-operator) | ||||
| | | | | +--rw range-or-operator | ||||
| | | | | +--rw (port-range-or-operator)? | ||||
| | | | | +--:(range) | ||||
| | | | | | +--rw lower-port inet:por | ||||
| t-number | ||||
| | | | | | +--rw upper-port inet:por | ||||
| t-number | ||||
| | | | | +--:(operator) | ||||
| | | | | +--rw operator? operator | ||||
| | | | | +--rw port inet:por | ||||
| t-number | ||||
| | | | +--rw destination-port | ||||
| | | | +--rw (destination-port)? | ||||
| | | | +--:(range-or-operator) | ||||
| | | | +--rw range-or-operator | ||||
| | | | +--rw (port-range-or-operator)? | ||||
| | | | +--:(range) | ||||
| | | | | +--rw lower-port inet:por | ||||
| t-number | ||||
| | | | | +--rw upper-port inet:por | ||||
| t-number | ||||
| | | | +--:(operator) | ||||
| | | | +--rw operator? operator | ||||
| | | | +--rw port inet:por | ||||
| t-number | ||||
| | | +--:(ipsec) | ||||
| | | +--rw ipsec | ||||
| | | +--rw ipsec-spi? ipsec-spi | ||||
| | +--:(mpls) | ||||
| | +--rw mpls | ||||
| | +--rw (label-space)? | ||||
| | +--:(interface) | ||||
| | | +--rw interface | ||||
| | | +--rw mpls-label-stack | ||||
| | | +--rw entry* [id] | ||||
| | | +--rw id uint8 | ||||
| | | +--rw label? rt-types:mpls-lab | ||||
| el | ||||
| | | +--rw ttl? uint8 | ||||
| | | +--rw traffic-class? uint8 | ||||
| | +--:(platform) | ||||
| | +--rw platform | ||||
| | +--rw mpls-label-stack | ||||
| | +--rw entry* [id] | ||||
| | +--rw id uint8 | ||||
| | +--rw label? rt-types:mpls-lab | ||||
| el | ||||
| | +--rw ttl? uint8 | ||||
| | +--rw traffic-class? uint8 | ||||
| +--rw fwd-sub-layer-output* [name] | ||||
| +--rw name string | ||||
| +--rw connectors | ||||
| | +--rw outbound-service* service-ref | ||||
| | +--rw prev-forward-sub-layer* fwd-sub-layer-output-ref | ||||
| +--rw traffic-requirements | ||||
| | +--rw min-bandwidth? uint64 | ||||
| | +--rw max-latency? uint32 | ||||
| | +--rw max-latency-variation? uint32 | ||||
| | +--rw max-loss? percent | ||||
| | +--rw max-consecutive-loss-tolerance? uint32 | ||||
| | +--rw max-misordering? uint32 | ||||
| +--rw traffic-specification | ||||
| | +--rw interval? uint32 | ||||
| | +--rw max-packets-per-interval? uint64 | ||||
| | +--rw max-payload-size? uint32 | ||||
| +--rw next-hop | ||||
| +--rw (next-hop-options) | ||||
| +--:(simple-next-hop) | ||||
| | +--rw simple-next-hop | ||||
| | +--rw outgoing-interface? if:interface-ref | ||||
| | +--rw mpls-label-stack | ||||
| | +--rw entry* [id] | ||||
| | +--rw id uint8 | ||||
| | +--rw label? rt-types:mpls-label | ||||
| | +--rw ttl? uint8 | ||||
| | +--rw traffic-class? uint8 | ||||
| +--:(special-next-hop) | ||||
| | +--rw special-next-hop | ||||
| | +--rw special-next-hop? enumeration | ||||
| +--:(next-hop) | ||||
| +--rw next-hop* [hop-index] | ||||
| +--rw hop-index uint8 | ||||
| +--rw outgoing-interface? if:interface-ref | ||||
| +--rw index? string | ||||
| +--rw backup-index? string | ||||
| +--rw loadshare? uint16 | ||||
| +--rw role? nhlfe-role | ||||
| +--rw mpls-label-stack | ||||
| +--rw entry* [id] | ||||
| +--rw id uint8 | ||||
| +--rw label? rt-types:mpls-label | ||||
| +--rw ttl? uint8 | ||||
| +--rw traffic-class? uint8 | ||||
| 7.3. Alternative DetNet Configuration YANG Model | ||||
| <CODE BEGINS> file "ietf-detnet-configa@2020-06-02.yang" | ||||
| module ietf-detnet-configa { | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-detnet-configa"; | ||||
| prefix "ietf-detnet"; | ||||
| import ietf-inet-types{ | ||||
| prefix "inet"; | ||||
| } | ||||
| import ietf-routing-types { | ||||
| prefix "rt-types"; | ||||
| } | ||||
| import ietf-interfaces { | ||||
| prefix "if"; | ||||
| } | ||||
| import ietf-routing { | ||||
| prefix "rt"; | ||||
| } | ||||
| import ietf-mpls { | ||||
| prefix "mpls"; | ||||
| } | ||||
| import ietf-packet-fields { | ||||
| prefix "packet-fields"; | ||||
| } | ||||
| organization "IETF DetNet Working Group"; | ||||
| contact | ||||
| " Editor: Don Fedyk dfedyk@labn.net "; | ||||
| description | ||||
| "This YANG module describes the parameters needed | ||||
| for DetNet flow configuration and flow status reporting"; | ||||
| revision 2020-06-02 { | ||||
| description "initial revision"; | ||||
| reference | ||||
| "RFC XXXX: draft-ietf-detnet-flow-information-model-06"; | ||||
| } | ||||
| identity status { | ||||
| description | ||||
| "Base identity from which all application-status | ||||
| actions are derived"; | ||||
| } | ||||
| identity none { | ||||
| base "status"; | ||||
| description | ||||
| "Application no ingress/egress"; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model-06 Section 5.8"; | ||||
| } | ||||
| identity ready { | ||||
| base "status"; | ||||
| description | ||||
| "Application ingress/egress ready"; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model-06 Section 5.8"; | ||||
| } | ||||
| identity failed { | ||||
| base "status"; | ||||
| description | ||||
| "Application ingres/egresss failed"; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model-06 Section 5.8"; | ||||
| } | ||||
| identity out-of-service { | ||||
| base "status"; | ||||
| description | ||||
| "Application Administratively blocked"; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model-06 Section 5.8"; | ||||
| } | ||||
| identity partial-failed { | ||||
| base "status"; | ||||
| description | ||||
| "Application One or more Egress ready, and one or more Egress | ||||
| failed. The DetNet flow can be used if the Ingress is | ||||
| Ready."; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model-06 Section 5.8"; | ||||
| } | ||||
| typedef ipsec-spi { | ||||
| type uint32 { | ||||
| range "1..max"; | ||||
| } | ||||
| description | ||||
| "SPI"; | ||||
| } | ||||
| typedef application-ref { | ||||
| type leafref { | ||||
| path "/ietf-detnet:detnet/ietf-detnet:applications" + | ||||
| "/ietf-detnet:app-list/ietf-detnet:name"; | ||||
| } | ||||
| description | ||||
| "This type is used by applications ingress and egress to | ||||
| refernce application."; | ||||
| } | ||||
| typedef application-ingress-ref { | ||||
| type leafref { | ||||
| path "/ietf-detnet:detnet/ietf-detnet:applications" + | ||||
| "/ietf-detnet:app-ingress/ietf-detnet:name"; | ||||
| } | ||||
| description | ||||
| "This type is used by applications to reference ingress | ||||
| interfaces."; | ||||
| } | ||||
| typedef application-egress-ref { | ||||
| type leafref { | ||||
| path "/ietf-detnet:detnet/ietf-detnet:applications" + | ||||
| "/ietf-detnet:app-egress/ietf-detnet:name"; | ||||
| } | ||||
| description | ||||
| "This type is used by applications to reference egress | ||||
| interfaces."; | ||||
| } | ||||
| typedef service-ref { | ||||
| type leafref { | ||||
| path "/ietf-detnet:detnet/ietf-detnet:services" + | ||||
| "/ietf-detnet:service-list/ietf-detnet:name"; | ||||
| } | ||||
| description | ||||
| "This type is used by applications and forwarding sub-layers | ||||
| data models that need to reference a configured | ||||
| service-sub-layer."; | ||||
| } | ||||
| typedef fwd-sub-layer-input-ref { | ||||
| type leafref { | ||||
| path "/ietf-detnet:detnet/ietf-detnet:fwd-sub-layer-input" | ||||
| + "/ietf-detnet:name"; | ||||
| } | ||||
| description | ||||
| "This type is used by applications to reference input | ||||
| interfaces."; | ||||
| } | ||||
| typedef fwd-sub-layer-output-ref { | ||||
| type leafref { | ||||
| path "/ietf-detnet:detnet/ietf-detnet:fwd-sub-layer-output" | ||||
| + "/ietf-detnet:name"; | ||||
| } | ||||
| description | ||||
| "This type is used by applications to reference output | ||||
| interfaces."; | ||||
| } | ||||
| // Service protection | ||||
| identity service-protection-type { | ||||
| description | ||||
| "Base identity from which specific | ||||
| interface types are derived."; | ||||
| } | ||||
| identity no-protection { | ||||
| base "service-protection-type"; | ||||
| description | ||||
| "no service protection provided"; | ||||
| } | ||||
| identity replication { | ||||
| base "service-protection-type"; | ||||
| description | ||||
| "A Packet Replication Function (PRF) replicates DetNet flow | ||||
| packets and forwards them to one or more next hops in the | ||||
| DetNet domain. The number of packet copies sent to each next | ||||
| hop is a DetNet flow specific parameter at the node doing the | ||||
| replication. PRF can be implemented by an edge node, a relay | ||||
| node, or an end system"; | ||||
| } | ||||
| identity elimination { | ||||
| base "service-protection-type"; | ||||
| 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."; | ||||
| } | ||||
| identity ordering { | ||||
| base "service-protection-type"; | ||||
| 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."; | ||||
| } | ||||
| identity elimination-ordering { | ||||
| base "service-protection-type"; | ||||
| description | ||||
| "A combination of PEF and POF that can be implemented by an | ||||
| edge node, a relay node, or an end system."; | ||||
| } | ||||
| identity elimination-replication { | ||||
| base "service-protection-type"; | ||||
| description | ||||
| "A combination of PEF and PRF that can be implemented by an | ||||
| edge node, a relay node, or an end system"; | ||||
| } | ||||
| identity elimination-ordering-replication { | ||||
| base "service-protection-type"; | ||||
| description | ||||
| "A combination of PEF, POF and PRF that can be implemented by | ||||
| an edge node, a relay node, or an end system"; | ||||
| } | ||||
| typedef percent { | ||||
| type uint8 { | ||||
| range "0 .. 100"; | ||||
| } | ||||
| description "Percentage"; | ||||
| } | ||||
| grouping ip-ports { | ||||
| container source-port { | ||||
| choice source-port { | ||||
| container range-or-operator { | ||||
| uses packet-fields:port-range-or-operator; | ||||
| description | ||||
| "Source port definition from range or operator."; | ||||
| } | ||||
| description | ||||
| "Choice of source port definition using range/operator or a | ||||
| choice to support future 'case' statements, such as one | ||||
| enabling a group of source ports to be referenced."; | ||||
| } | ||||
| description | ||||
| "Source port definition."; | ||||
| } | ||||
| container destination-port { | ||||
| choice destination-port { | ||||
| container range-or-operator { | ||||
| uses packet-fields:port-range-or-operator; | ||||
| description | ||||
| "Destination port definition from range or operator."; | ||||
| } | ||||
| description | ||||
| "Choice of destination port definition using range/operator | ||||
| or a choice to support future 'case' statements, such as | ||||
| one enabling a group of source ports to be referenced."; | ||||
| } | ||||
| description | ||||
| "Destination port definition."; | ||||
| } | ||||
| } | ||||
| grouping ip-incoming { | ||||
| description | ||||
| "The IPv4 packet header identification information"; | ||||
| leaf source { | ||||
| type inet:ip-prefix; | ||||
| mandatory true; | ||||
| description "IP source address prefix"; | ||||
| } | ||||
| leaf destination { | ||||
| type inet:ip-prefix; | ||||
| description "IP destination address prefix"; | ||||
| mandatory true; | ||||
| } | ||||
| leaf protocol-next { | ||||
| type uint8; | ||||
| mandatory true; | ||||
| 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-list dscp { | ||||
| type uint8 { | ||||
| range "0 .. 64"; | ||||
| } | ||||
| description | ||||
| "The DSCP field of the header"; | ||||
| } | ||||
| leaf ipv6-flow-label { | ||||
| type inet:ipv6-flow-label; | ||||
| description | ||||
| "The DSCP field of the header"; | ||||
| } | ||||
| choice l4 { | ||||
| container tcp { | ||||
| uses ip-ports; | ||||
| } | ||||
| container udp { | ||||
| uses ip-ports; | ||||
| } | ||||
| container ipsec { | ||||
| leaf ipsec-spi { | ||||
| type ipsec-spi; | ||||
| description | ||||
| "Security parameter index of SA entry."; | ||||
| } | ||||
| } | ||||
| } | ||||
| } // End of ip-incoming | ||||
| grouping traffic-specification { | ||||
| container traffic-specification { | ||||
| description | ||||
| "Traffic-specification specifies how the Source transmits | ||||
| packets for the flow. This is the promise/request of the | ||||
| Source to the network. The network uses this traffic | ||||
| specification to allocate resources and adjust queue | ||||
| parameters in network nodes."; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model-06 Section 5.5"; | ||||
| leaf interval { | ||||
| type uint32; | ||||
| description | ||||
| "The period of time in which the traffic specification | ||||
| cannot be exceeded"; | ||||
| } | ||||
| leaf max-packets-per-interval{ | ||||
| type uint64; | ||||
| units "bits"; | ||||
| 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 in bytes that the source will | ||||
| transmit."; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping traffic-requirements { | ||||
| container traffic-requirements { | ||||
| description | ||||
| "FlowRequirements: defines the attributes of the App-flow | ||||
| regarding bandwidth, latency, latency variation, loss, and | ||||
| misordering tolerance."; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model-06 Section 5.9"; | ||||
| leaf min-bandwidth { | ||||
| type uint64; | ||||
| description | ||||
| "MinBandwidth is the minimum bandwidth that has to be | ||||
| guaranteed for the DetNet service. MinBandwidth is | ||||
| specified in octets per second."; | ||||
| } | ||||
| leaf max-latency { | ||||
| type uint32; | ||||
| description | ||||
| "MaxLatency is the maximum latency from Ingress to | ||||
| Egress(es) for a single packet of the DetNet flow. | ||||
| MaxLatency is specified as an integer number of | ||||
| nanoseconds"; | ||||
| } | ||||
| leaf max-latency-variation { | ||||
| type uint32; | ||||
| 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 percent; | ||||
| 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; | ||||
| description | ||||
| "Some applications have special loss requirement, such as | ||||
| MaxConsecutiveLossTolerance. The maximum consecutive loss | ||||
| tolerance parameter describes the maximum number of | ||||
| consecutive packets whose loss can be tolerated. The | ||||
| maximum consecutive loss tolerance can be measured for | ||||
| example based on sequence number"; | ||||
| } | ||||
| leaf max-misordering { | ||||
| type uint32; | ||||
| description | ||||
| "MaxMisordering describes the tolerable maximum number of | ||||
| packets that can be received out of order. The maximum | ||||
| allowed misordering can be measured for example based on | ||||
| sequence number. The value zero for the maximum allowed | ||||
| misordering indicates that in order delivery is required, | ||||
| misordering cannot be tolerated."; | ||||
| } | ||||
| } | ||||
| } | ||||
| // Copied from ietf-routing | ||||
| grouping next-hop-state-content { | ||||
| description | ||||
| "Generic state parameters of next hops."; | ||||
| choice next-hop-options { | ||||
| mandatory true; | ||||
| description | ||||
| "Options for next hops. | ||||
| It is expected that further cases will be added through | ||||
| augments from other modules, e.g., for recursive next | ||||
| hops."; | ||||
| container simple-next-hop { | ||||
| description | ||||
| "This case represents a simple next hop consisting of the | ||||
| next-hop address and/or outgoing interface. | ||||
| Modules for address families MUST augment this case with | ||||
| a leaf containing a next-hop address of that address | ||||
| family."; | ||||
| leaf outgoing-interface { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "Name of the outgoing interface."; | ||||
| } | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| container special-next-hop { | ||||
| uses rt:special-next-hop; | ||||
| } | ||||
| 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 ""; | ||||
| } | ||||
| leaf outgoing-interface { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "Name of the outgoing interface."; | ||||
| } | ||||
| uses mpls:nhlfe-multiple-contents; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping mpls-incoming { | ||||
| description ""; | ||||
| choice label-space { | ||||
| description ""; | ||||
| container interface{ | ||||
| description | ||||
| "MPLS label is associated with non-platform label space, all | ||||
| of the F-labels and incoming interface information was used | ||||
| for identification"; | ||||
| uses rt-types:mpls-label-stack; | ||||
| } //End of non-platform-label-space | ||||
| container platform { | ||||
| description | ||||
| "MPLS label is associated with platform label space, only | ||||
| the F-label is used for identification"; | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| } | ||||
| } | ||||
| grouping ip-mpls-service { | ||||
| choice detnet-forwarding-type { | ||||
| container ip { | ||||
| uses ip-incoming; | ||||
| } | ||||
| leaf mpls-service-label { | ||||
| type rt-types:mpls-label-general-use; | ||||
| description | ||||
| "A service label for DetNet sent on egress, checked on | ||||
| ingress"; | ||||
| } //End of Service-Label | ||||
| } //End of detnet-forwarding-type */ | ||||
| } //End of ip-mpls-service */ | ||||
| grouping ip-mpls-profile { | ||||
| choice detnet-forwarding-type { | ||||
| container ip { | ||||
| uses ip-incoming; | ||||
| } | ||||
| container mpls { | ||||
| uses mpls-incoming; | ||||
| } //End of mpls | ||||
| } //End of detnet-forwarding-type */ | ||||
| } // ip-mpls-profile */ | ||||
| grouping ip-mpls-incoming { | ||||
| leaf-list incoming-interface { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "The name of the interface"; | ||||
| } | ||||
| choice detnet-forwarding-type { | ||||
| description "Traffic type"; | ||||
| container ip { | ||||
| description "IP encapsulation information"; | ||||
| uses ip-incoming; | ||||
| } | ||||
| container mpls { | ||||
| uses mpls-incoming; | ||||
| } //End of mpls | ||||
| } //End of detnet-forwarding-type */ | ||||
| } // ip-mpls-incoming */ | ||||
| grouping eth-ip-mpls-incoming { | ||||
| leaf-list incoming-interface { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "The name of the interface"; | ||||
| } | ||||
| choice detnet-forwarding-type { | ||||
| description "Traffic type"; | ||||
| container ethernet { | ||||
| leaf placeholder { | ||||
| type string; | ||||
| description "Place holder for matching ethernet"; | ||||
| } | ||||
| } | ||||
| container ip { | ||||
| description "IP encapsulation information"; | ||||
| uses ip-incoming; | ||||
| } | ||||
| container mpls { | ||||
| uses mpls-incoming; | ||||
| } //End of mpls | ||||
| } //End of detnet-forwarding-type */ | ||||
| } // ip-mpls-incoming */ | ||||
| grouping service-group { | ||||
| leaf service-protection-type { | ||||
| type identityref { | ||||
| base service-protection-type; | ||||
| } | ||||
| description | ||||
| "The DetNet service protection type such as PRF, PEF, | ||||
| PEOF, PERF, and PEORF"; | ||||
| } | ||||
| leaf sequence_number_length { | ||||
| type uint8 { | ||||
| range "0 | 16 | 28"; | ||||
| } | ||||
| default 0; | ||||
| description | ||||
| "When the sequence number field length is 16 or 28 bits for | ||||
| a flow, the sequence number MUST be incremented by one for | ||||
| each new app-flow packet sent. When the field length is 16 | ||||
| bits, d-CW bits 4 to 15 MUST be set to zero (0)."; | ||||
| } | ||||
| } | ||||
| container detnet { | ||||
| container applications { | ||||
| description | ||||
| "DetNet applications"; | ||||
| list app-list { | ||||
| key "name"; | ||||
| description | ||||
| "list of the DetNet configurations"; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "The name to identify the DetNet configuration"; | ||||
| } | ||||
| leaf app-id { | ||||
| type uint16; | ||||
| config false; | ||||
| description | ||||
| "The DetNet service ID"; | ||||
| reference | ||||
| "draft-ietf-detnet-flow-information-model-06 Section 6.1"; | ||||
| } | ||||
| leaf app-flow-bidir-congruent { | ||||
| type boolean; | ||||
| 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."; | ||||
| } | ||||
| leaf service-outbound{ | ||||
| type service-ref; | ||||
| description "Binding to this applications outgoing | ||||
| service"; | ||||
| } | ||||
| leaf service-inbound{ | ||||
| type service-ref; | ||||
| description "Binding to this applications incoming | ||||
| service"; | ||||
| } | ||||
| uses traffic-requirements; | ||||
| uses traffic-specification; | ||||
| } | ||||
| list app-ingress { | ||||
| key "name"; | ||||
| description | ||||
| "Ingress DetNet application flows or a compound flow"; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "Ingress DetNet application"; | ||||
| } | ||||
| leaf app-flow-status { | ||||
| type identityref { | ||||
| base status; | ||||
| } | ||||
| config false; | ||||
| description "Status of ingress application flow"; | ||||
| } | ||||
| uses eth-ip-mpls-incoming; | ||||
| } //End of app-ingress | ||||
| list app-egress { | ||||
| key "name"; | ||||
| description | ||||
| "Ingress DetNet application flows or a compound flow"; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "Ingress DetNet application"; | ||||
| } | ||||
| leaf app-flow-status { | ||||
| type identityref { | ||||
| base status; | ||||
| } | ||||
| config false; | ||||
| description "Status of egress application flows"; | ||||
| } | ||||
| container next-hop { | ||||
| description | ||||
| "Route's next-hop attribute."; | ||||
| choice application-type { | ||||
| container ethernet { | ||||
| leaf ethernet-place-holder { | ||||
| type string; | ||||
| description "Place holder for matching ethernet"; | ||||
| } | ||||
| } | ||||
| container ip-mpls { | ||||
| uses next-hop-state-content; | ||||
| } | ||||
| } | ||||
| } | ||||
| } // End of app-egress | ||||
| } // End of applications | ||||
| container services { | ||||
| description | ||||
| "DetNet services"; | ||||
| list service-list { | ||||
| key "name"; | ||||
| description | ||||
| "list of the DetNet configurations"; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "The name to identify the DetNet configuration"; | ||||
| } | ||||
| leaf service-id { | ||||
| type uint16; | ||||
| config false; | ||||
| description | ||||
| "The DetNet service ID"; | ||||
| } | ||||
| leaf service-rank { | ||||
| type uint8; | ||||
| description | ||||
| "The DetNet rank for this service"; | ||||
| } | ||||
| container outbound{ | ||||
| leaf-list forward-sublayer-output { | ||||
| type fwd-sub-layer-output-ref; | ||||
| config false; | ||||
| } | ||||
| uses service-group; | ||||
| list application-input { | ||||
| key "name"; | ||||
| description | ||||
| "list of the DetNet applications"; | ||||
| leaf name { | ||||
| type application-ref; | ||||
| description | ||||
| "List of input applications"; | ||||
| } | ||||
| uses ip-mpls-service; | ||||
| } | ||||
| list prev-relay-services { | ||||
| key "name"; | ||||
| description | ||||
| "list of the DetNet applications"; | ||||
| leaf name { | ||||
| type service-ref; | ||||
| description | ||||
| "List of input applications"; | ||||
| } | ||||
| uses ip-mpls-service; | ||||
| } | ||||
| uses traffic-requirements; | ||||
| uses traffic-specification; | ||||
| } | ||||
| container inbound{ | ||||
| leaf-list forward-sublayer-input { | ||||
| type fwd-sub-layer-input-ref; | ||||
| config false; | ||||
| description | ||||
| "List of input forwarding sub-layer interfaces"; | ||||
| } | ||||
| uses service-group; | ||||
| list application-output { | ||||
| key "name"; | ||||
| description ""; | ||||
| leaf name { | ||||
| type application-ref; | ||||
| //config false; | ||||
| description | ||||
| "List of input applications"; | ||||
| } | ||||
| uses ip-mpls-service; | ||||
| } | ||||
| list next-relay-services { | ||||
| key "name"; | ||||
| description "The Next service"; | ||||
| leaf name { | ||||
| type service-ref; | ||||
| description "Binding to another service"; | ||||
| } | ||||
| uses ip-mpls-service; | ||||
| } | ||||
| } | ||||
| } // End of service-list | ||||
| } // End of services | ||||
| list fwd-sub-layer-input { | ||||
| key "name"; | ||||
| description | ||||
| "Incoming DetNet member flows or a compound flow | ||||
| for receiving a packet from a port"; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "Incoming DetNet sub-layer name"; | ||||
| } | ||||
| leaf-list incoming-interface { | ||||
| type if:interface-ref; | ||||
| description | ||||
| "The name of the interface"; | ||||
| } | ||||
| choice connectors { | ||||
| list services { | ||||
| key "name"; | ||||
| description "Binding to this sub-layer services"; | ||||
| leaf name { | ||||
| type service-ref; | ||||
| description "Binding to this sub-layer services"; | ||||
| } | ||||
| uses ip-mpls-profile; | ||||
| } | ||||
| list forwarding-sub-layers { | ||||
| key "name"; | ||||
| description "Binding to the next forwarding sub-layer "; | ||||
| leaf name { | ||||
| type fwd-sub-layer-output-ref; | ||||
| description "Binding to the next forwarding sub-layer "; | ||||
| } | ||||
| uses ip-mpls-profile; | ||||
| } | ||||
| } | ||||
| } //End of sub-layer | ||||
| list fwd-sub-layer-output { | ||||
| key "name"; | ||||
| description | ||||
| "Outgoing DetNet member flows or a compound flow | ||||
| for sending a packet to a port"; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "Outgoing DetNet sub-layer index"; | ||||
| } | ||||
| container connectors { | ||||
| leaf-list outbound-service { | ||||
| type service-ref; | ||||
| description "Binding to this sub-layer services"; | ||||
| } | ||||
| leaf-list prev-forward-sub-layer { | ||||
| type fwd-sub-layer-output-ref; | ||||
| description "Binding to the next forwarding sub-layer "; | ||||
| } | ||||
| } | ||||
| uses traffic-requirements; | ||||
| uses traffic-specification; | ||||
| container next-hop { | ||||
| description | ||||
| "IPv4 packet header encapsulation information"; | ||||
| uses next-hop-state-content; | ||||
| } | ||||
| } // End of out-segments | ||||
| } // End of detnet | ||||
| } // End of ietf-detnet-flow | ||||
| <CODE ENDS> | ||||
| 7.4. Test Configuration | ||||
| The following XML test configuration shows some of the parameters for | ||||
| a DetNet application, service sub-layer and forwarding sub-layer. | ||||
| 7.4.1. DetNet Test Configuration YANG Model | ||||
| The case illustrated is for an ingress IP application to an MPLS | ||||
| service sub-layer and MPLS forwarding sub-layer. In this example a | ||||
| unidirectional flow is configured. The application input traffic is | ||||
| IP. The Service links the application "app1", the service ID, a | ||||
| service label and the outgoing forwarding sublayer "fsl1". The | ||||
| service label is from the remote end serice for the unidirectional | ||||
| path. | ||||
| <dn:detnet | ||||
| xmlns:dn="urn:ietf:params:xml:ns:yang:ietf-detnet-configa" | ||||
| xmlns:in="urn:ietf:params:xml:ns:yang:ietf-inet-types" | ||||
| xmlns:rt="urn:ietf:params:xml:ns:yang:ietf-routing-types" | ||||
| xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces" | ||||
| xmlns:r="urn:ietf:params:xml:ns:yang:ietf-routing" | ||||
| xmlns:mpls="urn:ietf:params:xml:ns:yang:ietf-mpls" | ||||
| xmlns:pf="urn:ietf:params:xml:ns:yang:ietf-packet-fields"> | ||||
| <dn:applications> | ||||
| <dn:app-list> | ||||
| <dn:name>app1</dn:name> | ||||
| <dn:app-flow-bidir-congruent>false</dn:app-flow-bidir-congruent> | ||||
| </dn:app-list> | ||||
| <dn:app-ingress> | ||||
| <dn:name>port1</dn:name> | ||||
| <if:incoming-interface>eth0</if:incoming-interface> | ||||
| <dn:ip> | ||||
| <dn:source>1.1.1.1/32</dn:source> | ||||
| <dn:destination>2.2.2.2/32</dn:destination> | ||||
| <dn:protocol-next>6</dn:protocol-next> | ||||
| <dn:dscp>40</dn:dscp> | ||||
| </dn:ip> | ||||
| </dn:app-ingress> | ||||
| </dn:applications> | ||||
| <dn:services> | ||||
| <dn:service-list> | ||||
| <dn:name>ssl1</dn:name> | ||||
| <dn:service-rank>10</dn:service-rank> | ||||
| <dn:outbound> | ||||
| <dn:forward-sublayer-output>fsl1</dn:forward-sublayer-output> | ||||
| <dn:sequence_number_length>0</dn:sequence_number_length> | ||||
| <dn:application-input> | ||||
| <dn:name>app1</dn:name> | ||||
| <dn:mpls-service-label>55555</dn:mpls-service-label> | ||||
| </dn:application-input> | ||||
| <dn:traffic-requirements> | ||||
| <dn:min-bandwidth>100000000 </dn:min-bandwidth> | ||||
| <dn:max-latency>10000000</dn:max-latency> | ||||
| <dn:max-latency-variation>2000000</dn:max-latency-variation> | ||||
| <dn:max-loss>2</dn:max-loss> | ||||
| <dn:max-consecutive-loss-tolerance>5 | ||||
| </dn:max-consecutive-loss-tolerance> | ||||
| <dn:max-misordering>0</dn:max-misordering> | ||||
| </dn:traffic-requirements> | ||||
| <dn:traffic-specification> | ||||
| <dn:interval>5</dn:interval> | ||||
| <dn:max-packets-per-interval>10</dn:max-packets-per-interval> | ||||
| <dn:max-payload-size>1500</dn:max-payload-size> | ||||
| </dn:traffic-specification> | ||||
| </dn:outbound> | ||||
| </dn:service-list> | ||||
| </dn:services> | ||||
| <dn:fwd-sub-layer-output> | ||||
| <dn:name>fsl1</dn:name> | ||||
| <dn:next-hop> | ||||
| <dn:next-hop> | ||||
| <dn:hop-index>1</dn:hop-index> | ||||
| <if:outgoing-interface>eth1</if:outgoing-interface> | ||||
| <dn:mpls-label-stack> | ||||
| <dn:entry> | ||||
| <dn:id>1</dn:id> | ||||
| <dn:label>42</dn:label> | ||||
| <dn:traffic-class>5</dn:traffic-class> | ||||
| </dn:entry> | ||||
| </dn:mpls-label-stack> | ||||
| </dn:next-hop> | ||||
| </dn:next-hop> | ||||
| </dn:fwd-sub-layer-output> | ||||
| </dn:detnet> | ||||
| 7.4.2. DetNet Test Configuration YANG Model | ||||
| The next case illustrated is for an egress IP application from an | ||||
| MPLS service sub-layer and MPLS forwarding sub-layer. In this | ||||
| example a unidirectional flow is configured. The application egress | ||||
| traffic is IP. The Service links the application "app2", the service | ||||
| ID, a service label and the outgoing forwarding sub-layer "fsl2". | ||||
| Again the service label is relevant to this egress service. The | ||||
| forwarding sub-layer has an mpls stack that it removes. The next | ||||
| label can be looked up because the forwarding sub-layer has a | ||||
| reference to any DetNet services and those services have registered | ||||
| the service label such that forwarding layer can forward to the | ||||
| respective service sub-layer. Since the service sub-layer label is | ||||
| unique to "app1" the service layer can forward the flow to the | ||||
| correct app1. While not illustrated a single service can associated | ||||
| multiple applications with a unique service label. | ||||
| <dn:detnet | ||||
| xmlns:dn="urn:ietf:params:xml:ns:yang:ietf-detnet-configa" | ||||
| xmlns:in="urn:ietf:params:xml:ns:yang:ietf-inet-types" | ||||
| xmlns:rt="urn:ietf:params:xml:ns:yang:ietf-routing-types" | ||||
| xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces" | ||||
| xmlns:r="urn:ietf:params:xml:ns:yang:ietf-routing" | ||||
| xmlns:mpls="urn:ietf:params:xml:ns:yang:ietf-mpls" | ||||
| xmlns:pf="urn:ietf:params:xml:ns:yang:ietf-packet-fields"> | ||||
| <dn:applications> | ||||
| <dn:app-list> | ||||
| <dn:name>app2</dn:name> | ||||
| <dn:app-flow-bidir-congruent>false</dn:app-flow-bidir-congruent> | ||||
| </dn:app-list> | ||||
| <dn:app-egress> | ||||
| <dn:name>port1</dn:name> | ||||
| <dn:ip-mpls> | ||||
| <dn:next-hop> | ||||
| <dn:hop-index> </dn:hop-index> | ||||
| <if:outgoing-interface>eth0</if:outgoing-interface> | ||||
| </dn:next-hop> | ||||
| </dn:ip-mpls> | ||||
| </dn:app-egress> | ||||
| </dn:applications> | ||||
| <dn:services> | ||||
| <dn:service-list> | ||||
| <dn:name>ssl2</dn:name> | ||||
| <dn:service-rank>10</dn:service-rank> | ||||
| <dn:inbound> | ||||
| <dn:forward-sublayer-input>fsl2</dn:forward-sublayer-input> | ||||
| <dn:sequence_number_length>0</dn:sequence_number_length> | ||||
| <dn:application-output> | ||||
| <dn:name>app1</dn:name> | ||||
| <dn:mpls-service-label>55555</dn:mpls-service-label> | ||||
| </dn:application-output> | ||||
| </dn:inbound> | ||||
| </dn:service-list> | ||||
| </dn:services> | ||||
| <dn:fwd-sub-layer-input> | ||||
| <dn:name>fsl2</dn:name> | ||||
| <if:incomming-interface>eth1</if:incomming-interface> | ||||
| <dn:service-sub-layer> | ||||
| <dn:name>ssl2</dn:name> | ||||
| </dn:service-sub-layer> | ||||
| <dn:mpls> | ||||
| <dn:interface> | ||||
| <dn:mpls-label-stack> | ||||
| <dn:entry> | ||||
| <dn:id>1</dn:id> | ||||
| <dn:label>42</dn:label> | ||||
| <dn:traffic-class>5</dn:traffic-class> | ||||
| </dn:entry> | ||||
| </dn:mpls-label-stack> | ||||
| </dn:interface> | ||||
| </dn:mpls> | ||||
| </dn:fwd-sub-layer-input> | ||||
| </dn:detnet> | ||||
| 8. Open Issues | ||||
| There are some open issues that are still under discussion: | There are some open issues that are still under discussion: | |||
| o The name of 'in-segment' and 'out-segment' are still under | o Aggregation. | |||
| discussion. These terms are used in YANG model for MPLS, but they | ||||
| may cause confusion in DetNet. | ||||
| o Whether application flow should be in service sub-layer is still | o Going along the the updated data plane model. | |||
| under discussion. | ||||
| o Whether we are supposed to define a new YANG Model for DetNet as | o Terminologies. | |||
| the current draft does, or we should augment the current YANG | ||||
| Model. | ||||
| These issues will be resolved in the following versions of the draft. | These issues will be resolved in the following versions of the draft. | |||
| 9. IANA Considerations | 8. IANA Considerations | |||
| This document makes no request of IANA. | This document makes no request of IANA. | |||
| Note to RFC Editor: this section may be removed on publication as an | Note to RFC Editor: this section may be removed on publication as an | |||
| RFC. | RFC. | |||
| 10. Security Considerations | 9. Security Considerations | |||
| <TBD> | <TBD> | |||
| 11. Acknowledgements | 10. Acknowledgements | |||
| 12. References | ||||
| 12.1. Normative References | 11. References | |||
| 11.1. Normative References | ||||
| [I-D.finn-detnet-bounded-latency] | [I-D.finn-detnet-bounded-latency] | |||
| Finn, N., Boudec, J., Mohammadpour, E., Zhang, J., Varga, | Finn, N., Boudec, J., Mohammadpour, E., Zhang, J., Varga, | |||
| B., and J. Farkas, "DetNet Bounded Latency", draft-finn- | B., and J. Farkas, "DetNet Bounded Latency", draft-finn- | |||
| detnet-bounded-latency-04 (work in progress), June 2019. | detnet-bounded-latency-04 (work in progress), June 2019. | |||
| [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 Information Model", draft-ietf-detnet- | |||
| flow-information-model-10 (work in progress), May 2020. | flow-information-model-10 (work in progress), May 2020. | |||
| [I-D.ietf-detnet-ip] | [I-D.ietf-detnet-ip] | |||
| Varga, B., Farkas, J., Berger, L., Fedyk, D., and S. | Varga, B., Farkas, J., Berger, L., Fedyk, D., and S. | |||
| Bryant, "DetNet Data Plane: IP", draft-ietf-detnet-ip-06 | Bryant, "DetNet Data Plane: IP", draft-ietf-detnet-ip-07 | |||
| (work in progress), April 2020. | (work in progress), July 2020. | |||
| [I-D.ietf-detnet-mpls] | [I-D.ietf-detnet-mpls] | |||
| Varga, B., Farkas, J., Berger, L., Malis, A., Bryant, S., | Varga, B., Farkas, J., Berger, L., Malis, A., Bryant, S., | |||
| and J. Korhonen, "DetNet Data Plane: MPLS", draft-ietf- | and J. Korhonen, "DetNet Data Plane: MPLS", draft-ietf- | |||
| detnet-mpls-06 (work in progress), April 2020. | detnet-mpls-07 (work in progress), June 2020. | |||
| [I-D.ietf-detnet-topology-yang] | [I-D.ietf-detnet-topology-yang] | |||
| Geng, X., Chen, M., Li, Z., and R. Rahman, "Deterministic | Geng, X., Chen, M., Li, Z., and R. Rahman, "Deterministic | |||
| Networking (DetNet) Topology YANG Model", draft-ietf- | Networking (DetNet) Topology YANG Model", draft-ietf- | |||
| detnet-topology-yang-00 (work in progress), January 2019. | detnet-topology-yang-00 (work in progress), January 2019. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| skipping to change at page 72, line 28 ¶ | skipping to change at page 39, line 5 ¶ | |||
| [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | |||
| RFC 7950, DOI 10.17487/RFC7950, August 2016, | RFC 7950, DOI 10.17487/RFC7950, August 2016, | |||
| <https://www.rfc-editor.org/info/rfc7950>. | <https://www.rfc-editor.org/info/rfc7950>. | |||
| [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, | [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, | |||
| "Deterministic Networking Architecture", RFC 8655, | "Deterministic Networking Architecture", RFC 8655, | |||
| DOI 10.17487/RFC8655, October 2019, | DOI 10.17487/RFC8655, October 2019, | |||
| <https://www.rfc-editor.org/info/rfc8655>. | <https://www.rfc-editor.org/info/rfc8655>. | |||
| 12.2. Informative References | 11.2. Informative References | |||
| [I-D.geng-detnet-info-distribution] | [I-D.geng-detnet-info-distribution] | |||
| Geng, X., Chen, M., Li, Z., Qin, F., and L. Qiang, "IGP-TE | Geng, X., Chen, M., Li, Z., Qin, F., and L. Qiang, "IGP-TE | |||
| Extensions for DetNet Information Distribution", draft- | Extensions for DetNet Information Distribution", draft- | |||
| geng-detnet-info-distribution-04 (work in progress), July | geng-detnet-info-distribution-04 (work in progress), July | |||
| 2019. | 2019. | |||
| [I-D.ietf-detnet-use-cases] | [I-D.ietf-detnet-use-cases] | |||
| Grossman, E., "Deterministic Networking Use Cases", draft- | Grossman, E., "Deterministic Networking Use Cases", draft- | |||
| ietf-detnet-use-cases-20 (work in progress), December | ietf-detnet-use-cases-20 (work in progress), December | |||
| skipping to change at page 74, line 39 ¶ | skipping to change at page 41, line 22 ¶ | |||
| Mach(Guoyi) Chen | Mach(Guoyi) Chen | |||
| Huawei Technologies | Huawei Technologies | |||
| Email: mach.chen@huawei.com | Email: mach.chen@huawei.com | |||
| Yeoncheol Ryoo | Yeoncheol Ryoo | |||
| ETRI | ETRI | |||
| Email: dbduscjf@etri.re.kr | Email: dbduscjf@etri.re.kr | |||
| Don Fedyk | ||||
| LabN Consulting, L.L.C. | ||||
| Email: dfedyk@labn.net | ||||
| Zhenqiang Li | Zhenqiang Li | |||
| China Mobile | China Mobile | |||
| Email: lizhenqiang@chinamobile.com | Email: lizhenqiang@chinamobile.com | |||
| Reshad Rahman | Reshad Rahman | |||
| Cisco Systems | Cisco Systems | |||
| Email: rrahman@cisco.com | Email: rrahman@cisco.com | |||
| Don Fedyk | ||||
| LabN Consulting, L.L.C. | ||||
| Email: dfedyk@labn.net | ||||
| End of changes. 79 change blocks. | ||||
| 2333 lines changed or deleted | 722 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/ | ||||