| < draft-ietf-detnet-yang-08.txt | draft-ietf-detnet-yang-09.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: April 15, 2021 Y. Ryoo | Expires: May 20, 2021 Y. Ryoo | |||
| ETRI | ETRI | |||
| D. Fedyk | D. Fedyk | |||
| LabN Consulting, L.L.C. | LabN Consulting, L.L.C. | |||
| R. Rahman | R. Rahman | |||
| Cisco Systems | Individual | |||
| Z. Li | Z. Li | |||
| China Mobile | China Mobile | |||
| October 12, 2020 | November 16, 2020 | |||
| Deterministic Networking (DetNet) Configuration YANG Model | Deterministic Networking (DetNet) Configuration YANG Model | |||
| draft-ietf-detnet-yang-08 | draft-ietf-detnet-yang-09 | |||
| 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 April 15, 2021. | This Internet-Draft will expire on May 20, 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 | |||
| skipping to change at page 2, line 28 ¶ | skipping to change at page 2, line 28 ¶ | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Terminologies . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. 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 . . 3 | 3.3. DetNet Forwarding Sub-layer Configuration Attributes . . 4 | |||
| 4. DetNet Flow Aggregation . . . . . . . . . . . . . . . . . . . 4 | 4. DetNet Flow Aggregation . . . . . . . . . . . . . . . . . . . 4 | |||
| 5. DetNet YANG Structure Considerations . . . . . . . . . . . . 5 | 5. DetNet YANG Structure Considerations . . . . . . . . . . . . 5 | |||
| 6. DetNet Configuration YANG Structures . . . . . . . . . . . . 5 | 6. DetNet Configuration YANG Structures . . . . . . . . . . . . 6 | |||
| 7. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 14 | 7. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 14 | |||
| 8. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 41 | 8. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 40 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 40 | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 41 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 40 | |||
| 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 41 | 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 40 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 41 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 40 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 41 | 12.1. Normative References . . . . . . . . . . . . . . . . . . 40 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 42 | 12.2. Informative References . . . . . . . . . . . . . . . . . 41 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 42 | Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 41 | |||
| A.1. Example JSON Configuration . . . . . . . . . . . . . . . 41 | ||||
| A.2. Example XML Config: Aggregation using a Forwarding | ||||
| Sublayer . . . . . . . . . . . . . . . . . . . . . . . . 45 | ||||
| A.3. Example JSON Service Aggregation Configuration . . . . . 49 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 55 | ||||
| 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 49 ¶ | skipping to change at page 6, line 7 ¶ | |||
| | 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 section 3. | |||
| 6. DetNet Configuration YANG Structures | 6. DetNet Configuration YANG Structures | |||
| module: ietf-detnet-config | module: ietf-detnet | |||
| +--rw detnet | +--rw detnet | |||
| +--rw traffic-profile* [profile-number] | +--rw traffic-profile* [profile-name] | |||
| | +--rw profile-number uint16 | | +--rw profile-name string | |||
| | +--rw traffic-requirements | | +--rw traffic-requirements | |||
| | | +--rw min-bandwidth? uint64 | | | +--rw min-bandwidth? uint64 | |||
| | | +--rw max-latency? uint32 | | | +--rw max-latency? uint32 | |||
| | | +--rw max-latency-variation? uint32 | | | +--rw max-latency-variation? uint32 | |||
| | | +--rw max-loss? uint8 | | | +--rw max-loss? uint32 | |||
| | | +--rw max-consecutive-loss-tolerance? uint32 | | | +--rw max-consecutive-loss-tolerance? uint32 | |||
| | | +--rw max-misordering? uint32 | | | +--rw max-misordering? uint32 | |||
| | +--rw traffic-specification | | +--rw traffic-specification | |||
| | | +--rw interval? uint32 | | | +--rw interval? uint32 | |||
| | | +--rw max-packets-per-interval? uint32 | | | +--rw max-packets-per-interval? uint32 | |||
| | | +--rw max-payload-size? uint32 | | | +--rw max-payload-size? uint32 | |||
| | | +--rw average-packets-per-interval? uint32 | | | +--rw average-packets-per-interval? uint32 | |||
| | | +--rw average-payload-size? uint32 | | | +--rw average-payload-size? uint32 | |||
| | +--ro member-applications* app-flow-ref | | +--ro member-applications* app-flow-ref | |||
| | +--ro member-services* service-sub-layer-ref | | +--ro member-services* service-sub-layer-ref | |||
| | +--ro member-groups* aggregation-grp-ref | | +--ro member-forwarding-sublayers* forwarding-sub-layer-ref | |||
| | +--ro member-forwarding-sublayers* forwarding-sub-layer-ref | +--rw app-flows | |||
| +--rw app-flows | | +--rw app-flow* [name] | |||
| | +--rw app-flow* [name] | | +--rw name string | |||
| | +--rw name string | | +--rw app-flow-bidir-congruent? boolean | |||
| | +--rw app-flow-bidir-congruent? boolean | | +--ro outgoing-service? service-sub-layer-ref | |||
| | +--ro outgoing-service? service-sub-layer-ref | | +--ro incoming-service? service-sub-layer-ref | |||
| | +--ro incoming-service? service-sub-layer-ref | | +--rw traffic-profile? traffic-profile-ref | |||
| | +--rw traffic-profile? traffic-profile-ref | | +--rw ingress | |||
| | +--rw ingress | | | +--rw name? string | |||
| | | +--rw name? string | | | +--ro app-flow-status? identityref | |||
| | | +--ro app-flow-status? identityref | | | +--rw interface? if:interface-ref | |||
| | | +--rw interface? if:interface-ref | | | +--rw (data-flow-type)? | |||
| | | +--rw (data-flow-type)? | | | +--:(tsn-app-flow) | |||
| | | +--:(tsn-app-flow) | | | | +--rw source-mac-address? yang:mac-address | |||
| | | | +--rw source-mac-address? yang:mac-address | | | | +--rw destination-mac-address? yang:mac-address | |||
| | | | +--rw destination-mac-address? yang:mac-address | | | | +--rw ethertype? | |||
| | | | +--rw ethertype? eth:ethertype | | | | | ethertypes:ethertype | |||
| | | | +--rw vlan-id? uint16 | | | | +--rw vlan-id? | |||
| | | | +--rw pcp? uint8 | | | | | dot1q-types:vlanid | |||
| | | +--:(ip-app-flow) | | | | +--rw pcp? uint8 | |||
| | | | +--rw src-ip-prefix? inet:ip-prefix | | | +--:(ip-app-flow) | |||
| | | | +--rw dest-ip-prefix? inet:ip-prefix | | | | +--rw src-ip-prefix? inet:ip-prefix | |||
| | | | +--rw next-header? uint8 | | | | +--rw dest-ip-prefix? inet:ip-prefix | |||
| | | | +--rw traffic-class? uint8 | | | | +--rw next-header? uint8 | |||
| | | | +--rw flow-label? inet:ipv6-flow-label | | | | +--rw traffic-class? uint8 | |||
| | | | +--rw source-port | | | | +--rw flow-label? | |||
| | | | | +--rw (port-range-or-operator)? | | | | | inet:ipv6-flow-label | |||
| | | | | +--:(range) | | | | +--rw source-port | |||
| | | | | | +--rw lower-port inet:port-number | | | | | +--rw (port-range-or-operator)? | |||
| | | | | | +--rw upper-port inet:port-number | | | | | +--:(range) | |||
| | | | | +--:(operator) | | | | | | +--rw lower-port inet:port-number | |||
| | | | | +--rw operator? packet-fields:operator | | | | | | +--rw upper-port inet:port-number | |||
| | | | | +--rw port inet:port-number | | | | | +--:(operator) | |||
| | | | +--rw destination-port | | | | | +--rw operator? operator | |||
| | | | | +--rw (port-range-or-operator)? | | | | | +--rw port inet:port-number | |||
| | | | | +--:(range) | | | | +--rw destination-port | |||
| | | | | | +--rw lower-port inet:port-number | | | | | +--rw (port-range-or-operator)? | |||
| | | | | | +--rw upper-port inet:port-number | | | | | +--:(range) | |||
| | | | | +--:(operator) | | | | | | +--rw lower-port inet:port-number | |||
| | | | | +--rw operator? packet-fields:operator | | | | | | +--rw upper-port inet:port-number | |||
| | | | | +--rw port inet:port-number | | | | | +--:(operator) | |||
| | | | +--rw ipsec-spi? ipsec-spi | | | | | +--rw operator? operator | |||
| | | +--:(mpls-app-flow) | | | | | +--rw port inet:port-number | |||
| | | +--rw (label-space)? | | | | +--rw ipsec-spi? ipsec-spi | |||
| | | +--:(context-label-space) | | | +--:(mpls-app-flow) | |||
| | | | +--rw mpls-label-stack | | | +--rw (label-space)? | |||
| | | | +--rw entry* [id] | | | +--:(context-label-space) | |||
| | | | +--rw id uint8 | | | | +--rw mpls-label-stack | |||
| | | | +--rw label? | | | | +--rw entry* [id] | |||
| | | | | rt-types:mpls-label | | | | +--rw id uint8 | |||
| | | | +--rw ttl? uint8 | | | | +--rw label? | |||
| | | | +--rw traffic-class? uint8 | | | | | rt-types:mpls-label | |||
| | | +--:(platform-label-space) | | | | +--rw ttl? uint8 | |||
| | | +--rw label? rt-types:mpls-label | | | | +--rw traffic-class? uint8 | |||
| | +--rw egress | | | +--:(platform-label-space) | |||
| | +--rw name? string | | | +--rw label? | |||
| | +--rw (application-type)? | | | rt-types:mpls-label | |||
| | +--:(ethernet) | | +--rw egress | |||
| | | +--rw ethernet | | +--rw name? string | |||
| | | +--rw ethernet-place-holder? string | | +--rw (application-type)? | |||
| | +--:(ip-mpls) | | +--:(Ethernet) | |||
| | +--rw ip-mpls | | | +--rw Ethernet | |||
| | +--rw (next-hop-options) | | | +--rw Ethernet-place-holder? string | |||
| | +--:(simple-next-hop) | | +--:(ip-mpls) | |||
| | | +--rw outgoing-interface? | | +--rw ip-mpls | |||
| | | | if:interface-ref | | +--rw (next-hop-options) | |||
| | | +--rw (flow-type)? | | +--:(simple-next-hop) | |||
| | | +--:(ip) | | | +--rw outgoing-interface? | |||
| | | | +--rw next-hop-address? | | | | if:interface-ref | |||
| | | | inet:ip-address | | | +--rw (flow-type)? | |||
| | | +--:(mpls) | | | +--:(ip) | |||
| | | +--rw mpls-label-stack | | | | +--rw next-hop-address? | |||
| | | +--rw entry* [id] | | | | inet:ip-address | |||
| | | +--rw id uint8 | | | +--:(mpls) | |||
| | | +--rw label? | | | +--rw mpls-label-stack | |||
| | | | rt-types:mpls-label | | | +--rw entry* [id] | |||
| | | +--rw ttl? uint8 | | | +--rw id uint8 | |||
| | | +--rw traffic-class? uint8 | | | +--rw label? | |||
| | +--:(next-hop-list) | | | | rt-types:mpls-label | |||
| | +--rw next-hop-list | | | +--rw ttl? uint8 | |||
| | +--rw next-hop* [hop-index] | | | +--rw traffic-class? uint8 | |||
| | +--rw hop-index uint8 | | +--:(next-hop-list) | |||
| | +--rw outgoing-interface? | | +--rw next-hop-list | |||
| | | if:interface-ref | | +--rw next-hop* [hop-index] | |||
| | +--rw (flow-type)? | | +--rw hop-index | |||
| | +--:(ip) | | | uint8 | |||
| | | +--rw next-hop-address? | | +--rw outgoing-interface? | |||
| | | inet:ip-address | | | if:interface-ref | |||
| | +--:(mpls) | | +--rw (flow-type)? | |||
| | +--rw mpls-label-stack | | +--:(ip) | |||
| | +--rw entry* [id] | | | +--rw next-hop-address? | |||
| | +--rw id | | | inet:ip-address | |||
| | | uint8 | | +--:(mpls) | |||
| | +--rw label? | | +--rw mpls-label-stack | |||
| | | rt-types: | | +--rw entry* [id] | |||
| | | mpls-label | | +--rw id | |||
| | +--rw ttl? | | | uint8 | |||
| | | uint8 | | +--rw label? | |||
| | +--rw traffic-class? | | | rt-types: | |||
| | uint8 | | | mpls-label | |||
| +--rw service-aggregation-group* [group-name] | | +--rw ttl? | |||
| | +--rw group-name aggregation-group | | | uint8 | |||
| | +--rw outgoing | | +--rw traffic-class? | |||
| | | +--rw traffic-profile? traffic-profile-ref | | uint8 | |||
| | | +--rw service-protection | +--rw service-sub-layer | |||
| | | | +--rw service-protection-type? service-protection-type | | +--rw service-sub-layer-list* [name] | |||
| | | | +--rw sequence-number-length? sequence-number-field | | +--rw name string | |||
| | | +--rw aggregation-header | | +--rw service-rank? uint8 | |||
| | | | +--rw mpls-label-stack | | +--rw traffic-profile? traffic-profile-ref | |||
| | | | +--rw entry* [id] | | +--rw service-protection | |||
| | | | +--rw id uint8 | | | +--rw service-protection-type? service-protection-type | |||
| | | | +--rw label? rt-types:mpls-label | | | +--rw sequence-number-length? sequence-number-field | |||
| | | | +--rw ttl? uint8 | | +--rw service-operation-type? service-operation-type | |||
| | | | +--rw traffic-class? uint8 | | +--rw incoming-type | |||
| | | +--ro services* service-sub-layer-ref | | | +--rw (incoming-type) | |||
| | +--rw incoming | | | +--:(app-flow) | |||
| | +--rw aggregation-header | | | | +--rw app-flow | |||
| | | +--rw mpls-label-stack | | | | +--rw flow-list* app-flow-ref | |||
| | | +--rw entry* [id] | | | +--:(service) | |||
| | | +--rw id uint8 | | | | +--rw service | |||
| | | +--rw label? rt-types:mpls-label | | | | +--rw service-sub-layer* | |||
| | | +--rw ttl? uint8 | | | | service-sub-layer-ref | |||
| | | +--rw traffic-class? uint8 | | | +--:(forwarding) | |||
| | +--ro services* service-sub-layer-ref | | | | +--rw forwarding | |||
| +--rw service-sub-layer | | | | +--rw forwarding-sub-layer* | |||
| | +--rw service-sub-layer-list* [name] | | | | forwarding-sub-layer-ref | |||
| | +--rw name string | | | +--:(service-identification) | |||
| | +--rw service-rank? uint8 | | | +--rw service-identification | |||
| | +--rw (service-type) | | | +--rw (detnet-flow-type)? | |||
| | | +--:(non-grouped) | | | +--:(ip-detnet-flow) | |||
| | | | +--rw non-grouped | | | | +--rw src-ip-prefix? | |||
| | | | +--rw traffic-profile? traffic-profile-ref | | | | | inet:ip-prefix | |||
| | | | +--rw service-operation-type? | | | | +--rw dest-ip-prefix? | |||
| | | | service-operation-type | | | | | inet:ip-prefix | |||
| | | +--:(grouped) | | | | +--rw next-header? uint8 | |||
| | | +--rw grouped | | | | +--rw traffic-class? uint8 | |||
| | | +--rw group-ref? aggregation-grp-ref | | | | +--rw flow-label? | |||
| | +--rw service-protection | | | | | inet:ipv6-flow-label | |||
| | | +--rw service-protection-type? service-protection-type | | | | +--rw source-port | |||
| | | +--rw sequence-number-length? sequence-number-field | | | | | +--rw (port-range-or-operator)? | |||
| | +--rw service-operation-type? service-operation-type | | | | | +--:(range) | |||
| | +--rw incoming | | | | | | +--rw lower-port | |||
| | | +--rw (incoming-options) | | | | | | | inet:port-number | |||
| | | +--:(ingress-application) | | | | | | +--rw upper-port | |||
| | | | +--rw app-flow* app-flow-ref | | | | | | inet:port-number | |||
| | | +--:(detnet-service-identification) | | | | | +--:(operator) | |||
| | | | +--rw (detnet-flow-type)? | | | | | +--rw operator? operator | |||
| | | | +--:(ip-detnet-flow) | | | | | +--rw port | |||
| | | | | +--rw src-ip-prefix? inet:ip-prefix | | | | | inet:port-number | |||
| | | | | +--rw dest-ip-prefix? inet:ip-prefix | | | | +--rw destination-port | |||
| | | | | +--rw next-header? uint8 | | | | | +--rw (port-range-or-operator)? | |||
| | | | | +--rw traffic-class? uint8 | | | | | +--:(range) | |||
| | | | | +--rw flow-label? inet:ipv6-flow-label | | | | | | +--rw lower-port | |||
| | | | | +--rw source-port | | | | | | | inet:port-number | |||
| | | | | | +--rw (port-range-or-operator)? | | | | | | +--rw upper-port | |||
| | | | | | +--:(range) | | | | | | inet:port-number | |||
| | | | | | | +--rw lower-port inet:port-number | | | | | +--:(operator) | |||
| | | | | | | +--rw upper-port inet:port-number | | | | | +--rw operator? operator | |||
| | | | | | +--:(operator) | | | | | +--rw port | |||
| | | | | | +--rw operator? | | | | | inet:port-number | |||
| | | | | | | packet-fields:operator | | | | +--rw ipsec-spi? ipsec-spi | |||
| | | | | | +--rw port inet:port-number | | | +--:(mpls-detnet-flow) | |||
| | | | | +--rw destination-port | | | +--rw (label-space)? | |||
| | | | | | +--rw (port-range-or-operator)? | | | +--:(context-label-space) | |||
| | | | | | +--:(range) | | | | +--rw mpls-label-stack | |||
| | | | | | | +--rw lower-port inet:port-number | | | | +--rw entry* [id] | |||
| | | | | | | +--rw upper-port inet:port-number | | | | +--rw id uint8 | |||
| | | | | | +--:(operator) | | | | +--rw label? | |||
| | | | | | +--rw operator? | | | | | rt-types:mpls-label | |||
| | | | | | | packet-fields:operator | | | | +--rw ttl? uint8 | |||
| | | | | | +--rw port inet:port-number | | | | +--rw traffic-class? uint8 | |||
| | | | | +--rw ipsec-spi? ipsec-spi | | | +--:(platform-label-space) | |||
| | | | +--:(mpls-detnet-flow) | | | +--rw label? | |||
| | | | +--rw (label-space)? | | | rt-types:mpls-label | |||
| | | | +--:(context-label-space) | | +--rw outgoing-type | |||
| | | | | +--rw mpls-label-stack | | +--rw (outgoing-type) | |||
| | | | | +--rw entry* [id] | | +--:(forwarding-sub-layer) | |||
| | | | | +--rw id uint8 | | | +--rw forwarding-sub-layer | |||
| | | | | +--rw label? | | | +--rw service-outgoing-list* | |||
| | | | | | rt-types:mpls-label | | | [service-outgoing-index] | |||
| | | | | +--rw ttl? uint8 | | | +--rw service-outgoing-index uint8 | |||
| | | | | +--rw traffic-class? uint8 | | | +--rw (header-type)? | |||
| | | | +--:(platform-label-space) | | | | +--:(detnet-mpls-header) | |||
| | | | +--rw label? rt-types:mpls-label | | | | | +--rw mpls-label-stack | |||
| | | +--:(aggregated-service) | | | | | +--rw entry* [id] | |||
| | | | +--rw service-sub-layer* service-sub-layer-ref | | | | | +--rw id uint8 | |||
| | | +--:(aggregated-forwarding) | | | | | +--rw label? | |||
| | | +--rw forwarding-sub-layer* | | | | | | rt-types:mpls-label | |||
| | | forwarding-sub-layer-ref | | | | | +--rw ttl? uint8 | |||
| | +--rw outgoing | | | | | +--rw traffic-class? uint8 | |||
| | +--rw (outgoing-options) | | | | +--:(detnet-ip-header) | |||
| | +--:(detnet-service-outgoing) | | | | +--rw src-ip-address? | |||
| | | +--rw service-outgoing-list* | | | | | inet:ip-address | |||
| | | [service-outgoing-index] | | | | +--rw dest-ip-address? | |||
| | | +--rw service-outgoing-index uint8 | | | | | inet:ip-address | |||
| | | +--rw (header-type)? | | | | +--rw next-header? uint8 | |||
| | | | +--:(detnet-mpls-header) | | | | +--rw traffic-class? uint8 | |||
| | | | | +--rw mpls-label-stack | | | | +--rw flow-label? | |||
| | | | | +--rw entry* [id] | | | | | inet:ipv6-flow-label | |||
| | | | | +--rw id uint8 | | | | +--rw source-port? | |||
| | | | | +--rw label? | | | | | inet:port-number | |||
| | | | | | rt-types:mpls-label | | | | +--rw destination-port? | |||
| | | | | +--rw ttl? uint8 | | | | inet:port-number | |||
| | | | | +--rw traffic-class? uint8 | | | +--rw next-layer* [index] | |||
| | | | +--:(detnet-ip-header) | | | +--rw index uint8 | |||
| | | | +--rw src-ip-address? inet:ip-address | | | +--rw forwarding-sub-layer? | |||
| | | | +--rw dest-ip-address? inet:ip-address | | | forwarding-sub-layer-ref | |||
| | | | +--rw next-header? uint8 | | +--:(service-sub-layer) | |||
| | | | +--rw traffic-class? uint8 | | | +--rw service-sub-layer | |||
| | | | +--rw flow-label? | | | +--rw aggregation-service-sub-layer? | |||
| | | | | inet:ipv6-flow-label | | | | service-sub-layer-ref | |||
| | | | +--rw source-port? inet:port-number | | | +--rw service-label | |||
| | | | +--rw destination-port? inet:port-number | | | +--rw mpls-label-stack | |||
| | | +--rw next-layer* [index] | | | +--rw entry* [id] | |||
| | | +--rw index uint8 | | | +--rw id uint8 | |||
| | | +--rw forwarding-sub-layer? | | | +--rw label? | |||
| | | forwarding-sub-layer-ref | | | | rt-types:mpls-label | |||
| | +--:(detnet-service-aggregation) | | | +--rw ttl? uint8 | |||
| | | +--rw aggregation-service-sub-layer? | | | +--rw traffic-class? uint8 | |||
| | | | service-sub-layer-ref | | +--:(upper-app-flow) | |||
| | | +--rw service-label | | | +--rw upper-app-flow | |||
| | | +--rw mpls-label-stack | | | +--rw flow-list* app-flow-ref | |||
| | | +--rw entry* [id] | | +--:(upper-service-sub-layer) | |||
| | | +--rw id uint8 | | | +--rw upper-service-sub-layer | |||
| | | +--rw label? rt-types:mpls-label | | | +--rw service-sub-layer* | |||
| | | +--rw ttl? uint8 | | | service-sub-layer-ref | |||
| | | +--rw traffic-class? uint8 | | +--:(upper-forwarding-sub-layer) | |||
| | +--:(egress-proxy) | | +--rw upper-forwarding-sub-layer | |||
| | | +--rw app-flow* app-flow-ref | | +--rw forwarding-sub-layer* | |||
| | +--:(detnet-service-operation) | | forwarding-sub-layer-ref | |||
| | | +--rw service-sub-layer* service-sub-layer-ref | +--rw forwarding-sub-layer | |||
| | +--:(detnet-forwarding-operation) | +--rw forwarding-sub-layer-list* [name] | |||
| | +--rw forwarding-sub-layer* | +--rw name string | |||
| | forwarding-sub-layer-ref | +--rw traffic-profile? traffic-profile-ref | |||
| +--rw forwarding-sub-layer | +--rw forwarding-operation-type? | |||
| +--rw forwarding-sub-layer-list* [name] | | forwarding-operations-type | |||
| +--rw name string | +--rw incoming-type | |||
| +--rw traffic-profile? traffic-profile-ref | | +--rw (incoming-type) | |||
| +--rw forwarding-operation-type? forwarding-operations-type | | +--:(service-sub-layer) | |||
| +--rw incoming | | | +--rw service-sub-layer | |||
| | +--rw (incoming-options) | | | +--ro sub-layer-list* service-sub-layer-ref | |||
| | +--:(detnet-service-forwarding) | | +--:(upper-forwarding-sub-layer) | |||
| | | +--ro service-sub-layer* service-sub-layer-ref | | | +--rw forwarding-sub-layer* | |||
| | +--:(detnet-forwarding-identification) | | | forwarding-sub-layer-ref | |||
| | | +--rw interface? if:interface-ref | | +--:(lower-forwarding-sub-layer) | |||
| | | +--rw (detnet-flow-type)? | | +--rw interface? | |||
| | | +--:(ip-detnet-flow) | | | if:interface-ref | |||
| | | | +--rw src-ip-prefix? inet:ip-prefix | | +--rw (detnet-flow-type)? | |||
| | | | +--rw dest-ip-prefix? inet:ip-prefix | | +--:(ip-detnet-flow) | |||
| | | | +--rw next-header? uint8 | | | +--rw src-ip-prefix? | |||
| | | | +--rw traffic-class? uint8 | | | | inet:ip-prefix | |||
| | | | +--rw flow-label? inet:ipv6-flow-label | | | +--rw dest-ip-prefix? | |||
| | | | +--rw source-port | | | | inet:ip-prefix | |||
| | | | | +--rw (port-range-or-operator)? | | | +--rw next-header? uint8 | |||
| | | | | +--:(range) | | | +--rw traffic-class? uint8 | |||
| | | | | | +--rw lower-port inet:port-number | | | +--rw flow-label? | |||
| | | | | | +--rw upper-port inet:port-number | | | | inet:ipv6-flow-label | |||
| | | | | +--:(operator) | | | +--rw source-port | |||
| | | | | +--rw operator? | | | | +--rw (port-range-or-operator)? | |||
| | | | | | packet-fields:operator | | | | +--:(range) | |||
| | | | | +--rw port inet:port-number | | | | | +--rw lower-port | |||
| | | | +--rw destination-port | | | | | | inet:port-number | |||
| | | | | +--rw (port-range-or-operator)? | | | | | +--rw upper-port | |||
| | | | | +--:(range) | | | | | inet:port-number | |||
| | | | | | +--rw lower-port inet:port-number | | | | +--:(operator) | |||
| | | | | | +--rw upper-port inet:port-number | | | | +--rw operator? operator | |||
| | | | | +--:(operator) | | | | +--rw port | |||
| | | | | +--rw operator? | | | | inet:port-number | |||
| | | | | | packet-fields:operator | | | +--rw destination-port | |||
| | | | | +--rw port inet:port-number | | | | +--rw (port-range-or-operator)? | |||
| | | | +--rw ipsec-spi? ipsec-spi | | | | +--:(range) | |||
| | | +--:(mpls-detnet-flow) | | | | | +--rw lower-port | |||
| | | +--rw (label-space)? | | | | | | inet:port-number | |||
| | | +--:(context-label-space) | | | | | +--rw upper-port | |||
| | | | +--rw mpls-label-stack | | | | | inet:port-number | |||
| | | | +--rw entry* [id] | | | | +--:(operator) | |||
| | | | +--rw id uint8 | | | | +--rw operator? operator | |||
| | | | +--rw label? | | | | +--rw port | |||
| | | | | rt-types:mpls-label | | | | inet:port-number | |||
| | | | +--rw ttl? uint8 | | | +--rw ipsec-spi? ipsec-spi | |||
| | | | +--rw traffic-class? uint8 | | +--:(mpls-detnet-flow) | |||
| | | +--:(platform-label-space) | | +--rw (label-space)? | |||
| | | +--rw label? rt-types:mpls-label | | +--:(context-label-space) | |||
| | +--:(aggregated-forwarding) | | | +--rw mpls-label-stack | |||
| | +--rw forwarding-sub-layer* | | | +--rw entry* [id] | |||
| | forwarding-sub-layer-ref | | | +--rw id uint8 | |||
| +--rw outgoing | | | +--rw label? | |||
| +--rw (outgoing-options) | | | | rt-types:mpls-label | |||
| +--:(detnet-forwarding-outgoing) | | | +--rw ttl? uint8 | |||
| | +--rw (next-hop-options) | | | +--rw traffic-class? uint8 | |||
| | +--:(simple-next-hop) | | +--:(platform-label-space) | |||
| | | +--rw outgoing-interface? if:interface-ref | | +--rw label? | |||
| | | +--rw (flow-type)? | | rt-types:mpls-label | |||
| | | +--:(ip) | +--rw outgoing-type | |||
| | | | +--rw (operation-type)? | +--rw (outgoing-type) | |||
| | | | +--:(ip-forwarding) | +--:(interface) | |||
| | | | | +--rw next-hop-address? | | +--rw interface | |||
| | | | | inet:ip-address | | +--rw (next-hop-options) | |||
| | | | +--:(mpls-over-ip-encapsulation) | | +--:(simple-next-hop) | |||
| | | | +--rw src-ip-address? | | | +--rw outgoing-interface? | |||
| | | | | inet:ip-address | | | | if:interface-ref | |||
| | | | +--rw dest-ip-address? | | | +--rw (flow-type)? | |||
| | | | | inet:ip-address | | | +--:(ip) | |||
| | | | +--rw next-header? uint8 | | | | +--rw (operation-type)? | |||
| | | | +--rw traffic-class? uint8 | | | | +--:(ip-forwarding) | |||
| | | | +--rw flow-label? | | | | | +--rw next-hop-address? | |||
| | | | | inet:ipv6-flow-label | | | | | inet:ip-address | |||
| | | | +--rw source-port? | | | | +--:(mpls-over-ip-encapsulation) | |||
| | | | | inet:port-number | | | | +--rw src-ip-address? | |||
| | | | +--rw destination-port? | | | | | inet:ip-address | |||
| | | | inet:port-number | | | | +--rw dest-ip-address? | |||
| | | +--:(mpls) | | | | | inet:ip-address | |||
| | | +--rw mpls-label-stack | | | | +--rw next-header? | |||
| | | +--rw entry* [id] | | | | | uint8 | |||
| | | +--rw id uint8 | | | | +--rw traffic-class? | |||
| | | +--rw label? | | | | | uint8 | |||
| | | | rt-types:mpls-label | | | | +--rw flow-label? | |||
| | | +--rw ttl? uint8 | | | | | inet:ipv6-flow-label | |||
| | | +--rw traffic-class? uint8 | | | | +--rw source-port? | |||
| | +--:(next-hop-list) | | | | | inet:port-number | |||
| | +--rw next-hop-list | | | | +--rw destination-port? | |||
| | +--rw next-hop* [hop-index] | | | | inet:port-number | |||
| | +--rw hop-index uint8 | | | +--:(mpls) | |||
| | +--rw outgoing-interface? | | | +--rw mpls-label-stack | |||
| | | if:interface-ref | | | +--rw entry* [id] | |||
| | +--rw (flow-type)? | | | +--rw id uint8 | |||
| | +--:(ip) | | | +--rw label? | |||
| | | +--rw (operation-type)? | | | | rt-types:mpls-label | |||
| | | +--:(ip-forwarding) | | | +--rw ttl? uint8 | |||
| | | | +--rw next-hop-address? | | | +--rw traffic-class? uint8 | |||
| | | | inet:ip-address | | +--:(next-hop-list) | |||
| | | +--:(mpls-over-ip- | | +--rw next-hop-list | |||
| | | | encapsulation) | | +--rw next-hop* [hop-index] | |||
| | | +--rw src-ip-address? | | +--rw hop-index | |||
| | | | inet:ip-address | | | uint8 | |||
| | | +--rw dest-ip-address? | | +--rw outgoing-interface? | |||
| | | | inet:ip-address | | | if:interface-ref | |||
| | | +--rw next-header? | | +--rw (flow-type)? | |||
| | | | uint8 | | +--:(ip) | |||
| | | +--rw traffic-class? | | | +--rw (operation-type)? | |||
| | | | uint8 | | | +--:(ip-forwarding) | |||
| | | +--rw flow-label? | | | | +--rw next-hop-address? | |||
| | | | inet:ipv6-flow-label | | | | inet:ip-address | |||
| | | +--rw source-port? | | | +--:(mpls-over-ip- | |||
| | | | inet:port-number | | | | encapsulation) | |||
| | | +--rw destination-port? | | | +--rw src-ip-address? | |||
| | | inet:port-number | | | | inet:ip-address | |||
| | +--:(mpls) | | | +--rw dest-ip-address? | |||
| | +--rw mpls-label-stack | | | | inet:ip-address | |||
| | +--rw entry* [id] | | | +--rw next-header? | |||
| | +--rw id uint8 | | | | uint8 | |||
| | +--rw label? | | | +--rw traffic-class? | |||
| | | rt-types:mpls-label | | | | uint8 | |||
| | +--rw ttl? uint8 | | | +--rw flow-label? | |||
| | +--rw traffic-class? uint8 | | | | inet: | |||
| +--:(detnet-service-aggregation) | | | | ipv6-flow-label | |||
| | +--rw aggregation-service-sub-layer? | | | +--rw source-port? | |||
| | | service-sub-layer-ref | | | | inet:port-number | |||
| | +--rw optional-forwarding-label | | | +--rw destination-port? | |||
| | +--rw mpls-label-stack | | | inet:port-number | |||
| | +--rw entry* [id] | | +--:(mpls) | |||
| | +--rw id uint8 | | +--rw mpls-label-stack | |||
| | +--rw label? rt-types:mpls-label | | +--rw entry* [id] | |||
| | +--rw ttl? uint8 | | +--rw id | |||
| | +--rw traffic-class? uint8 | | | uint8 | |||
| +--:(detnet-forwarding-aggregation) | | +--rw label? | |||
| | +--rw aggregation-forwarding-sub-layer? | | | rt-types: | |||
| | | forwarding-sub-layer-ref | | | mpls-label | |||
| | +--rw forwarding-label | | +--rw ttl? | |||
| | +--rw mpls-label-stack | | | uint8 | |||
| | +--rw entry* [id] | | +--rw traffic-class? | |||
| | +--rw id uint8 | | uint8 | |||
| | +--rw label? rt-types:mpls-label | +--:(service) | |||
| | +--rw ttl? uint8 | | +--rw aggregation-service-sub-layer? | |||
| | +--rw traffic-class? uint8 | | | service-sub-layer-ref | |||
| +--:(detnet-service-operation) | | +--rw optional-forwarding-label | |||
| | +--rw service-sub-layer* service-sub-layer-ref | | +--rw mpls-label-stack | |||
| +--:(detnet-forwarding-operation) | | +--rw entry* [id] | |||
| +--rw forwarding-sub-layer* | | +--rw id uint8 | |||
| forwarding-sub-layer-ref | | +--rw label? | |||
| | | rt-types:mpls-label | ||||
| | +--rw ttl? uint8 | ||||
| | +--rw traffic-class? uint8 | ||||
| +--:(forwarding) | ||||
| | +--rw aggregation-forwarding-sub-layer? | ||||
| | | forwarding-sub-layer-ref | ||||
| | +--rw forwarding-label | ||||
| | +--rw mpls-label-stack | ||||
| | +--rw entry* [id] | ||||
| | +--rw id uint8 | ||||
| | +--rw label? | ||||
| | | rt-types:mpls-label | ||||
| | +--rw ttl? uint8 | ||||
| | +--rw traffic-class? uint8 | ||||
| +--:(upper-service) | ||||
| | +--rw service-sub-layer* | ||||
| | service-sub-layer-ref | ||||
| +--:(upper-forwarding) | ||||
| +--rw forwarding-sub-layer* | ||||
| forwarding-sub-layer-ref | ||||
| 7. DetNet Configuration YANG Model | 7. DetNet Configuration YANG Model | |||
| <CODE BEGINS> | <CODE BEGINS> | |||
| module ietf-detnet-config { | module ietf-detnet{ | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-detnet-config"; | namespace "urn:ietf:params:xml:ns:yang:ietf-detnet"; | |||
| prefix "ietf-detnet"; | prefix ietf-detnet; | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix "yang"; | prefix yang; | |||
| } | ||||
| import ietf-inet-types{ | ||||
| prefix "inet"; | ||||
| } | } | |||
| import ietf-inet-types { | ||||
| prefix inet; | ||||
| } | ||||
| import ietf-ethertypes { | import ietf-ethertypes { | |||
| prefix "eth"; | prefix ethertypes; | |||
| } | } | |||
| import ietf-routing-types { | import ietf-routing-types { | |||
| prefix "rt-types"; | prefix rt-types; | |||
| } | } | |||
| import ietf-packet-fields { | import ietf-packet-fields { | |||
| prefix "packet-fields"; | prefix packet-fields; | |||
| } | } | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix "if"; | prefix if; | |||
| } | ||||
| import ieee802-dot1q-types{ | ||||
| prefix dot1q-types; | ||||
| } | } | |||
| organization | organization | |||
| "IETF DetNet Working Group"; | "IETF DetNet Working Group"; | |||
| contact | contact | |||
| "WG Web: <http://tools.ietf.org/wg/detnet/> | "WG Web: <http://tools.ietf.org/wg/detnet/> | |||
| WG List: <mailto: detnet@ietf.org> | WG List: <mailto: detnet@ietf.org> | |||
| WG Chair: Lou Berger | WG Chair: Lou Berger | |||
| <mailto:lberger@labn.net> | <mailto:lberger@labn.net> | |||
| Janos Farkas | Janos Farkas | |||
| <mailto:janos.farkas@ericsson.com> | <mailto:janos.farkas@ericsson.com> | |||
| Editor: Xuesong Geng | Editor: Xuesong Geng | |||
| skipping to change at page 15, line 35 ¶ | skipping to change at page 16, line 10 ¶ | |||
| <mailto:rrahman@cisco.com> | <mailto:rrahman@cisco.com> | |||
| Editor: Zhenqiang Li | Editor: Zhenqiang Li | |||
| <mailto:lizhenqiang@chinamobile.com>"; | <mailto:lizhenqiang@chinamobile.com>"; | |||
| 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-11-12 { | |||
| description | description | |||
| "initial revision"; | "initial revision"; | |||
| reference | reference | |||
| "RFC XXXX: draft-ietf-detnet-yang-02"; | "RFC XXXX: draft-ietf-detnet-yang-09"; | |||
| } | } | |||
| identity status { | identity app-status { | |||
| description | description | |||
| "Base identity from which all application-status | "Base identity from which all application-status | |||
| actions are derived"; | actions are derived"; | |||
| } | } | |||
| identity none { | identity none { | |||
| base status; | base app-status; | |||
| description | description | |||
| "Application no ingress/egress"; | "Application no ingress/egress"; | |||
| reference | reference | |||
| "draft-ietf-detnet-flow-information-model-06 Section 5.8"; | "draft-ietf-detnet-flow-information-model Section 5.8"; | |||
| } | } | |||
| identity ready { | identity ready { | |||
| base status; | base app-status; | |||
| description | description | |||
| "Application ingress/egress ready"; | "Application ingress/egress ready"; | |||
| reference | reference | |||
| "draft-ietf-detnet-flow-information-model-06 Section 5.8"; | "draft-ietf-detnet-flow-information-model Section 5.8"; | |||
| } | } | |||
| identity failed { | identity failed { | |||
| base status; | base app-status; | |||
| description | description | |||
| "Application ingres/egresss failed"; | "Application ingres/egresss failed"; | |||
| reference | reference | |||
| "draft-ietf-detnet-flow-information-model-06 Section 5.8"; | "draft-ietf-detnet-flow-information-model Section 5.8"; | |||
| } | } | |||
| identity out-of-service { | identity out-of-service { | |||
| base status; | base app-status; | |||
| description | description | |||
| "Application Administratively blocked"; | "Application Administratively blocked"; | |||
| reference | reference | |||
| "draft-ietf-detnet-flow-information-model-06 Section 5.8"; | "draft-ietf-detnet-flow-information-model Section 5.8"; | |||
| } | } | |||
| identity partial-failed { | identity partial-failed { | |||
| base status; | base app-status; | |||
| description | description | |||
| "Application One or more Egress ready, and one or more Egress | "Application One or more Egress ready, and one or more Egress | |||
| failed. The DetNet flow can be used if the Ingress is | failed. The DetNet flow can be used if the Ingress is | |||
| Ready."; | Ready."; | |||
| reference | reference | |||
| "draft-ietf-detnet-flow-information-model-06 Section 5.8"; | "draft-ietf-detnet-flow-information-model Section 5.8"; | |||
| } | } | |||
| typedef app-flow-ref { | typedef app-flow-ref { | |||
| type leafref { | type leafref { | |||
| path "/ietf-detnet:detnet" | path "/ietf-detnet:detnet" | |||
| + "/ietf-detnet:app-flows" | + "/ietf-detnet:app-flows" | |||
| + "/ietf-detnet:app-flow" | + "/ietf-detnet:app-flow" | |||
| + "/ietf-detnet:name"; | + "/ietf-detnet:name"; | |||
| } | } | |||
| } | } | |||
| skipping to change at page 17, line 21 ¶ | skipping to change at page 17, line 44 ¶ | |||
| typedef forwarding-sub-layer-ref { | typedef forwarding-sub-layer-ref { | |||
| type leafref { | type leafref { | |||
| path "/ietf-detnet:detnet" | path "/ietf-detnet:detnet" | |||
| + "/ietf-detnet:forwarding-sub-layer" | + "/ietf-detnet:forwarding-sub-layer" | |||
| + "/ietf-detnet:forwarding-sub-layer-list" | + "/ietf-detnet:forwarding-sub-layer-list" | |||
| + "/ietf-detnet:name"; | + "/ietf-detnet:name"; | |||
| } | } | |||
| } | } | |||
| typedef aggregation-grp-ref { | ||||
| type leafref { | ||||
| path "/ietf-detnet:detnet" | ||||
| + "/ietf-detnet:service-aggregation-group" | ||||
| + "/ietf-detnet:group-name"; | ||||
| } | ||||
| } | ||||
| typedef traffic-profile-ref { | typedef traffic-profile-ref { | |||
| type leafref { | type leafref { | |||
| path "/ietf-detnet:detnet" | path "/ietf-detnet:detnet" | |||
| + "/ietf-detnet:traffic-profile" | + "/ietf-detnet:traffic-profile" | |||
| + "/ietf-detnet:profile-number"; | + "/ietf-detnet:profile-name"; | |||
| } | } | |||
| } | } | |||
| typedef ipsec-spi { | typedef ipsec-spi { | |||
| type uint32 { | type uint32 { | |||
| range "1..max"; | range "1..max"; | |||
| } | } | |||
| description | description | |||
| "SPI"; | "IPsec Security Parameters Index"; | |||
| reference | ||||
| "IETF RFC 6071"; | ||||
| } | } | |||
| typedef service-operation-type { | typedef service-operation-type { | |||
| type enumeration { | type enumeration { | |||
| enum service-initiation { | enum service-initiation { | |||
| description | description | |||
| "Operation for DetNet service sub-layer encapsulation"; | "Operation for DetNet service sub-layer encapsulation"; | |||
| } | } | |||
| enum service-termination { | enum service-termination { | |||
| description | description | |||
| skipping to change at page 20, line 26 ¶ | skipping to change at page 20, line 42 ¶ | |||
| description | description | |||
| "Generate the sequence number by DetNet flow"; | "Generate the sequence number by DetNet flow"; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| typedef sequence-number-field { | typedef sequence-number-field { | |||
| type enumeration { | type enumeration { | |||
| enum zero-sn { | enum zero-sn { | |||
| description | description | |||
| "there is no DetNet sequence number field."; | "There is no DetNet sequence number field."; | |||
| } | } | |||
| enum short-sn { | enum short-sn { | |||
| value 16; | value 16; | |||
| description | description | |||
| "there is 16bit DetNet sequence number field"; | "There is 16bit DetNet sequence number field"; | |||
| } | } | |||
| enum long-sn { | enum long-sn { | |||
| value 28; | value 28; | |||
| description | description | |||
| "there is 28bit DetNet sequence number field"; | "There is 28bit DetNet sequence number field"; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| typedef aggregation-group { | ||||
| type string; | ||||
| description | ||||
| "The name of the aggregation group"; | ||||
| } | ||||
| 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 in the header"; | |||
| } | } | |||
| leaf dest-ip-address { | leaf dest-ip-address { | |||
| type inet:ip-address; | type inet:ip-address; | |||
| description | description | |||
| "The destination IP address of the header"; | "The destination IP address in the header"; | |||
| } | } | |||
| leaf next-header { | leaf next-header { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "The next header of the IPv6 header"; | "The next header of the IPv6 header"; | |||
| } | } | |||
| leaf traffic-class { | leaf traffic-class { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "The traffic class value of the header"; | "The traffic class value of the header"; | |||
| } | } | |||
| leaf flow-label { | leaf flow-label { | |||
| type inet:ipv6-flow-label; | type inet:ipv6-flow-label; | |||
| description | description | |||
| "The flow label value of the header"; | "The flow label value of the header"; | |||
| } | } | |||
| leaf source-port { | leaf source-port { | |||
| type inet:port-number; | type inet:port-number; | |||
| description | description | |||
| "The source port number"; | "The source port number"; | |||
| } | } | |||
| leaf destination-port { | leaf destination-port { | |||
| type inet:port-number; | type inet:port-number; | |||
| description | description | |||
| "The destination port number"; | "The destination port number"; | |||
| } | } | |||
| } | } | |||
| grouping l2-header { | grouping l2-header { | |||
| description | description | |||
| "The Ethernet or TSN packet header information"; | "The Ethernet or TSN packet header information"; | |||
| skipping to change at page 21, line 48 ¶ | skipping to change at page 22, line 4 ¶ | |||
| leaf destination-port { | leaf destination-port { | |||
| type inet:port-number; | type inet:port-number; | |||
| description | description | |||
| "The destination port number"; | "The destination port number"; | |||
| } | } | |||
| } | } | |||
| grouping l2-header { | grouping l2-header { | |||
| description | description | |||
| "The Ethernet or TSN packet header information"; | "The Ethernet or TSN packet header information"; | |||
| leaf source-mac-address { | leaf source-mac-address { | |||
| type yang:mac-address; | type yang:mac-address; | |||
| description | description | |||
| "The source MAC address value of the ethernet header"; | "The source MAC address value of the Ethernet header"; | |||
| } | } | |||
| leaf destination-mac-address { | leaf destination-mac-address { | |||
| type yang:mac-address; | type yang:mac-address; | |||
| description | description | |||
| "The destination MAC address value of the ethernet header"; | "The destination MAC address value of the Ethernet header"; | |||
| } | } | |||
| leaf ethertype { | leaf ethertype { | |||
| type eth:ethertype; | type ethertypes:ethertype; | |||
| description | description | |||
| "The ethernet packet type value of the ethernet header"; | "The Ethernet packet type value of the Ethernet header"; | |||
| } | } | |||
| leaf vlan-id { | leaf vlan-id { | |||
| type uint16; | type dot1q-types:vlanid; | |||
| description | description | |||
| "The Vlan value of the ethernet header"; | "The VLAN value of the Ethernet header"; | |||
| } | } | |||
| leaf pcp { | leaf pcp { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "The priority value of the ethernet header"; | "The priority value of the Ethernet header"; | |||
| } | } | |||
| } | } | |||
| grouping destination-ip-port-identification { | grouping destination-ip-port-identification { | |||
| description | description | |||
| "The TCP/UDP port(source/destination) identification information"; | "The TCP/UDP port(source/destination) identification information"; | |||
| container destination-port { | container destination-port { | |||
| uses packet-fields:port-range-or-operator; | uses packet-fields:port-range-or-operator; | |||
| } | } | |||
| } | } | |||
| skipping to change at page 23, line 7 ¶ | skipping to change at page 23, line 7 ¶ | |||
| } | } | |||
| grouping ip-flow-identification { | grouping ip-flow-identification { | |||
| description | description | |||
| "The IPv4/IPv6 packet header identification information"; | "The IPv4/IPv6 packet header identification information"; | |||
| leaf src-ip-prefix { | leaf src-ip-prefix { | |||
| type inet:ip-prefix; | type inet:ip-prefix; | |||
| description | description | |||
| "The source IP address of the header"; | "The source IP address of the header"; | |||
| } | } | |||
| leaf dest-ip-prefix { | leaf dest-ip-prefix { | |||
| type inet:ip-prefix; | type inet:ip-prefix; | |||
| description | description | |||
| "The destination IP address of the header"; | "The destination IP address of the header"; | |||
| } | } | |||
| leaf next-header { | leaf next-header { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "The next header of the IPv6 header"; | "The next header of the IPv6 header"; | |||
| } | } | |||
| leaf traffic-class { | leaf traffic-class { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "The traffic class value of the header"; | "The traffic class value of the header"; | |||
| } | } | |||
| leaf flow-label { | leaf flow-label { | |||
| type inet:ipv6-flow-label; | type inet:ipv6-flow-label; | |||
| description | description | |||
| "The flow label value of the header"; | "The flow label value of the header"; | |||
| } | } | |||
| uses source-ip-port-identification; | uses source-ip-port-identification; | |||
| uses destination-ip-port-identification; | uses destination-ip-port-identification; | |||
| leaf ipsec-spi { | leaf ipsec-spi { | |||
| type ipsec-spi; | type ipsec-spi; | |||
| description | description | |||
| "Security parameter index of SA entry"; | "IPsec Security Parameters Index of the Security Association"; | |||
| reference | ||||
| "IETF RFC 6071"; | ||||
| } | } | |||
| } | } | |||
| grouping mpls-flow-identification { | grouping mpls-flow-identification { | |||
| description | description | |||
| "The MPLS packet header identification information"; | "The MPLS packet header identification information"; | |||
| choice label-space { | choice label-space { | |||
| description | description | |||
| ""; | "Designates the label space being used."; | |||
| case context-label-space { | case context-label-space { | |||
| uses rt-types:mpls-label-stack; | uses rt-types:mpls-label-stack; | |||
| } | } | |||
| case platform-label-space { | case platform-label-space { | |||
| leaf label { | leaf label { | |||
| type rt-types:mpls-label; | type rt-types:mpls-label; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping traffic-specification { | grouping traffic-specification { | |||
| container traffic-specification { | container traffic-specification { | |||
| description | description | |||
| "traffic-specification specifies how the Source | "traffic-specification specifies how the Source | |||
| transmits packets for the flow. This is the | transmits packets for the flow. This is the | |||
| promise/request of the Source to the network. | promise/request of the Source to the network. | |||
| The network uses this traffic specification | The network uses this traffic specification | |||
| to allocate resources and adjust queue | to allocate resources and adjust queue | |||
| parameters in network nodes."; | parameters in network nodes."; | |||
| reference | reference | |||
| "draft-ietf-detnet-flow-information-model"; | "draft-ietf-detnet-flow-information-model Section 4.1"; | |||
| leaf interval { | leaf interval { | |||
| type uint32; | type uint32; | |||
| units microseconds; | ||||
| description | description | |||
| "The period of time in which the traffic | "The period of time in which the traffic | |||
| specification cannot be exceeded"; | specification cannot be exceeded."; | |||
| } | ||||
| } | ||||
| leaf max-packets-per-interval { | leaf max-packets-per-interval { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The maximum number of packets that the | "The maximum number of packets that the | |||
| source will transmit in one Interval."; | source will transmit in one Interval."; | |||
| } | } | |||
| leaf max-payload-size { | leaf max-payload-size { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The maximum payload size that the source | "The maximum payload size that the source | |||
| will transmit."; | will transmit."; | |||
| } | } | |||
| leaf average-packets-per-interval { | leaf average-packets-per-interval { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The average number of packets that the | "The average number of packets that the | |||
| source will transmit in one Interval"; | source will transmit in one interval"; | |||
| } | } | |||
| leaf average-payload-size { | leaf average-payload-size { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "The average payload size that the | "The average payload size that the | |||
| source will transmit."; | source will transmit."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping traffic-requirements { | grouping traffic-requirements { | |||
| container traffic-requirements { | container traffic-requirements { | |||
| description | description | |||
| "FlowRequirements: defines the attributes of the App-flow | "FlowRequirements: defines the attributes of the App-flow | |||
| regarding bandwidth, latency, latency variation, loss, and | regarding bandwidth, latency, latency variation, loss, and | |||
| misordering tolerance."; | misordering tolerance."; | |||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Section 4.2"; | ||||
| leaf min-bandwidth { | leaf min-bandwidth { | |||
| type uint64; | type uint64; | |||
| units bytes-per-second; | ||||
| description | description | |||
| "MinBandwidth is the minimum bandwidth that has to be | "MinBandwidth is the minimum bandwidth that has to be | |||
| guaranteed for the DetNet service. MinBandwidth is | guaranteed for the DetNet service. MinBandwidth is | |||
| specified in octets per second."; | specified in octets per second."; | |||
| } | } | |||
| leaf max-latency { | leaf max-latency { | |||
| type uint32; | type uint32; | |||
| units microseconds; | ||||
| description | description | |||
| "MaxLatency is the maximum latency from Ingress to Egress(es) | "MaxLatency is the maximum latency from Ingress to Egress(es) | |||
| for a single packet of the DetNet flow. MaxLatency is | for a single packet of the DetNet flow. MaxLatency is | |||
| specified as an integer number of nanoseconds"; | specified as an integer number of nanoseconds"; | |||
| } | } | |||
| leaf max-latency-variation { | leaf max-latency-variation { | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "MaxLatencyVariation is the difference between the minimum and | "MaxLatencyVariation is the difference between the minimum and | |||
| the maximum end-to-end one-way latency. MaxLatencyVariation | the maximum end-to-end one-way latency. MaxLatencyVariation | |||
| is specified as an integer number of nanoseconds."; | is specified as an integer number of nanoseconds."; | |||
| } | } | |||
| leaf max-loss { | leaf max-loss { | |||
| type uint8; | type uint32; | |||
| description | description | |||
| "MaxLoss defines the maximum Packet Loss Ratio (PLR) parameter | "MaxLoss defines the maximum Packet Loss Ratio (PLR) parameter | |||
| for the DetNet service between the Ingress and Egress(es) of | for the DetNet service between the Ingress and Egress(es) of | |||
| the DetNet domain."; | the DetNet domain."; | |||
| } | } | |||
| leaf max-consecutive-loss-tolerance { | leaf max-consecutive-loss-tolerance { | |||
| type uint32; | type uint32; | |||
| units packets; | ||||
| description | description | |||
| "Some applications have special loss requirement, such as | "Some applications have special loss requirement, such as | |||
| MaxConsecutiveLossTolerance. The maximum consecutive loss | MaxConsecutiveLossTolerance. The maximum consecutive loss | |||
| tolerance parameter describes the maximum number of | tolerance parameter describes the maximum number of | |||
| consecutive packets whose loss can be tolerated. The maximum | consecutive packets whose loss can be tolerated. The maximum | |||
| consecutive loss tolerance can be measured for example based | consecutive loss tolerance can be measured for example based | |||
| on sequence number"; | on sequence number"; | |||
| } | ||||
| } | ||||
| leaf max-misordering { | leaf max-misordering { | |||
| type uint32; | type uint32; | |||
| units packets; | ||||
| description | description | |||
| "MaxMisordering describes the tolerable maximum number of | "MaxMisordering describes the tolerable maximum number of | |||
| packets that can be received out of order. The maximum | packets that can be received out of order. The maximum | |||
| allowed misordering can be measured for example based on | allowed misordering can be measured for example based on | |||
| sequence number. The value zero for the maximum allowed | sequence number. The value zero for the maximum allowed | |||
| misordering indicates that in order delivery is required, | misordering indicates that in order delivery is required, | |||
| misordering cannot be tolerated."; | misordering cannot be tolerated."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| skipping to change at page 27, line 13 ¶ | skipping to change at page 26, line 52 ¶ | |||
| } | } | |||
| case mpls-detnet-flow { | case mpls-detnet-flow { | |||
| uses mpls-flow-identification; | uses mpls-flow-identification; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping app-flows-ref { | grouping app-flows-ref { | |||
| description | description | |||
| "incoming or outgoing app-flow reference group"; | "incoming or outgoing app-flow reference group"; | |||
| leaf-list app-flow { | leaf-list flow-list{ | |||
| type app-flow-ref; | type app-flow-ref; | |||
| description | description | |||
| "List of ingress or egress app-flows"; | "List of ingress or egress app-flows"; | |||
| } | } | |||
| } | } | |||
| grouping service-sub-layer-ref { | grouping service-sub-layer-ref { | |||
| description | description | |||
| "incoming or outgoing service sub-layer reference group"; | "incoming or outgoing service sub-layer reference group"; | |||
| leaf-list service-sub-layer { | leaf-list service-sub-layer { | |||
| type service-sub-layer-ref; | type service-sub-layer-ref; | |||
| description | description | |||
| "List of incoming or outgoing service sub-layer | "List of incoming or outgoing service sub-layers | |||
| that has to aggregate or disaggregate"; | that have to aggregate or disaggregate"; | |||
| } | } | |||
| } | } | |||
| grouping forwarding-sub-layer-ref { | grouping forwarding-sub-layer-ref { | |||
| description | description | |||
| "incoming or outgoing forwarding sub-layer reference group"; | "incoming or outgoing forwarding sub-layer reference group"; | |||
| leaf-list forwarding-sub-layer { | leaf-list forwarding-sub-layer { | |||
| type forwarding-sub-layer-ref; | type forwarding-sub-layer-ref; | |||
| description | description | |||
| "List of incoming or outgoing forwarding sub-layer | "List of incoming or outgoing forwarding sub-layers | |||
| that has to aggregate or disaggregate"; | that have to aggregate or disaggregate"; | |||
| } | } | |||
| } | } | |||
| grouping detnet-header { | grouping detnet-header { | |||
| description | description | |||
| "DetNet header info for DetNet encapsulation or swap"; | "DetNet header info for DetNet encapsulation or swap"; | |||
| choice header-type {: | choice header-type { | |||
| case detnet-mpls-header { | case detnet-mpls-header { | |||
| description | description | |||
| "MPLS label stack for DetNet MPLS encapsulation | "MPLS label stack for DetNet MPLS encapsulation or | |||
| for forwarding"; | forwarding"; | |||
| uses rt-types:mpls-label-stack; | uses rt-types:mpls-label-stack; | |||
| } | } | |||
| case detnet-ip-header { | case detnet-ip-header { | |||
| description | description | |||
| "IPv4/IPv6 packet header for DetNet IP encapsulation"; | "IPv4/IPv6 packet header for DetNet IP encapsulation"; | |||
| uses ip-header; | uses ip-header; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping aggregation-header { | ||||
| description | ||||
| "DetNet aggregation header DetNet encapsulation"; | ||||
| container aggregation-header { | ||||
| description | ||||
| "MPLS label stack for DetNet MPLS encapsulation or | ||||
| forwarding"; | ||||
| uses rt-types:mpls-label-stack; | ||||
| } | ||||
| } | ||||
| grouping detnet-app-next-hop-content { | grouping detnet-app-next-hop-content { | |||
| description | description | |||
| "Generic parameters of DetNet next hops."; | "Generic parameters of DetNet next hops."; | |||
| choice next-hop-options { | choice next-hop-options { | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "Options for next hops. | "Options for next hops. | |||
| It is expected that further cases 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."; | |||
| skipping to change at page 28, line 43 ¶ | skipping to change at page 28, line 22 ¶ | |||
| case simple-next-hop { | case simple-next-hop { | |||
| description | description | |||
| "This case represents a simple next hop consisting of the | "This case represents a simple next hop consisting of the | |||
| next-hop address and/or outgoing interface. | next-hop address and/or outgoing interface. | |||
| Modules for address families MUST augment this case with a | Modules for address families MUST augment this case with a | |||
| leaf containing a next-hop address of that address | leaf containing a next-hop address of that address | |||
| family."; | family."; | |||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| } | } | |||
| choice flow-type { | choice flow-type { | |||
| case ip { | case ip { | |||
| leaf next-hop-address { | leaf next-hop-address { | |||
| type inet:ip-address; | type inet:ip-address; | |||
| } | } | |||
| } | } | |||
| case mpls { | case mpls { | |||
| uses rt-types:mpls-label-stack; | 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 | |||
| ""; | "The value if the index of for a hop."; | |||
| } | } | |||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| } | } | |||
| choice flow-type { | choice flow-type { | |||
| case ip { | case ip { | |||
| leaf next-hop-address { | leaf next-hop-address { | |||
| type inet:ip-address; | type inet:ip-address; | |||
| } | } | |||
| } | } | |||
| case mpls { | case mpls { | |||
| uses rt-types:mpls-label-stack; | uses rt-types:mpls-label-stack; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| skipping to change at page 30, line 19 ¶ | skipping to change at page 29, line 40 ¶ | |||
| case simple-next-hop { | case simple-next-hop { | |||
| description | description | |||
| "This case represents a simple next hop consisting of the | "This case represents a simple next hop consisting of the | |||
| next-hop address and/or outgoing interface. | next-hop address and/or outgoing interface. | |||
| Modules for address families MUST augment this case with a | Modules for address families MUST augment this case with a | |||
| leaf containing a next-hop address of that address | leaf containing a next-hop address of that address | |||
| family."; | family."; | |||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| } | } | |||
| choice flow-type { | choice flow-type { | |||
| case ip { | case ip { | |||
| choice operation-type { | choice operation-type { | |||
| case ip-forwarding { | case ip-forwarding { | |||
| leaf next-hop-address { | leaf next-hop-address { | |||
| type inet:ip-address; | type inet:ip-address; | |||
| } | } | |||
| } | } | |||
| case mpls-over-ip-encapsulation { | case mpls-over-ip-encapsulation { | |||
| uses ip-header; | uses ip-header; | |||
| } | } | |||
| } | } | |||
| } | ||||
| } | ||||
| case mpls { | case mpls { | |||
| uses rt-types:mpls-label-stack; | uses rt-types:mpls-label-stack; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| case next-hop-list { | 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 | |||
| ""; | "The value if the index of for a hop."; | |||
| } | } | |||
| leaf outgoing-interface { | leaf outgoing-interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| } | } | |||
| choice flow-type { | choice flow-type { | |||
| case ip { | case ip { | |||
| choice operation-type { | choice operation-type { | |||
| case ip-forwarding { | case ip-forwarding { | |||
| leaf next-hop-address { | leaf next-hop-address { | |||
| type inet:ip-address; | type inet:ip-address; | |||
| } | } | |||
| } | } | |||
| case mpls-over-ip-encapsulation { | case mpls-over-ip-encapsulation { | |||
| uses ip-header; | uses ip-header; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| case mpls { | case mpls { | |||
| uses rt-types:mpls-label-stack; | uses rt-types:mpls-label-stack; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container detnet { | container detnet { | |||
| list traffic-profile { | list traffic-profile { | |||
| key "profile-number"; | key "profile-name"; | |||
| description | description | |||
| "A traffic profile"; | "A traffic profile"; | |||
| leaf profile-number { | leaf profile-name { | |||
| type uint16; | type string; | |||
| description | description | |||
| "An Aggregation group ID. Zero means the service is not | "An Aggregation group ID. Zero means the service is not | |||
| part of a group"; | part of a group"; | |||
| } | } | |||
| uses traffic-requirements; | uses traffic-requirements; | |||
| uses traffic-specification; | uses traffic-specification; | |||
| leaf-list member-applications { | leaf-list member-applications { | |||
| type app-flow-ref; | type app-flow-ref; | |||
| config false; | config false; | |||
| description | description | |||
| "Applicaions attached to this profile"; | "Applications attached to this profile"; | |||
| } | } | |||
| leaf-list member-services { | leaf-list member-services { | |||
| type service-sub-layer-ref; | type service-sub-layer-ref; | |||
| config false; | config false; | |||
| description | description | |||
| "Services attached to this profile"; | "Services attached to this profile"; | |||
| } | } | |||
| leaf-list member-groups { | ||||
| type aggregation-grp-ref; | ||||
| config false; | ||||
| description | ||||
| "Groups attached to this profile"; | ||||
| } | ||||
| leaf-list member-forwarding-sublayers { | leaf-list member-forwarding-sublayers { | |||
| type forwarding-sub-layer-ref; | type forwarding-sub-layer-ref; | |||
| config false; | config false; | |||
| description | description | |||
| "Forwarding sub-layer attached to this profile"; | "Forwarding sub-layer attached to this profile"; | |||
| } | } | |||
| } | } | |||
| container app-flows { | container app-flows { | |||
| description | description | |||
| "The DetNet app-flow configuration"; | "The DetNet app-flow configuration"; | |||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Section Section 4.1"; | ||||
| list app-flow { | list app-flow { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| ""; | "A unique (management) identifier of the App-flow."; | |||
| leaf name { | leaf name { | |||
| type "string"; | type string; | |||
| description | description | |||
| "The name to identify the DetNet app-flow"; | "A unique (management) identifier of the App-flow."; | |||
| } | reference | |||
| "draft-ietf-detnet-flow-information-model | ||||
| Sections 4.1, 5.1"; | ||||
| } | ||||
| leaf app-flow-bidir-congruent { | leaf app-flow-bidir-congruent { | |||
| type boolean; | type boolean; | |||
| description | description | |||
| "Defines the data path requirement of the App-flow whether | "Defines the data path requirement of the App-flow whether | |||
| it must share the same data path and physical path | it must share the same data path and physical path | |||
| for both directions through the network, | for both directions through the network, | |||
| e.g., to provide congruent paths in the two directions."; | e.g., to provide congruent paths in the two directions."; | |||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Section 4.2"; | ||||
| } | } | |||
| leaf outgoing-service { | leaf outgoing-service { | |||
| type service-sub-layer-ref; | type service-sub-layer-ref; | |||
| config false; | config false; | |||
| description | description | |||
| "Binding to this applications outgoing | "Binding to this applications outgoing | |||
| service"; | service"; | |||
| } | } | |||
| leaf incoming-service { | leaf incoming-service { | |||
| type service-sub-layer-ref; | type service-sub-layer-ref; | |||
| config false; | config false; | |||
| description | description | |||
| "Binding to this applications incoming | "Binding to this applications incoming | |||
| service"; | service"; | |||
| } | } | |||
| leaf traffic-profile { | leaf traffic-profile { | |||
| type traffic-profile-ref; | type traffic-profile-ref; | |||
| description | description | |||
| "The Traffic Profile for this group"; | "The Traffic Profile for this group"; | |||
| } | } | |||
| container ingress { | container ingress { | |||
| // key "name"; This should be a list for aggregation | // key "name"; This should be a list for aggregation | |||
| description | description | |||
| "Ingress DetNet application flows or a compound flow"; | "Ingress DetNet application flows or a compound flow"; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "Ingress DetNet application"; | "Ingress DetNet application"; | |||
| } | } | |||
| leaf app-flow-status { | leaf app-flow-status { | |||
| type identityref { | type identityref { | |||
| base status; | base app-status; | |||
| } | } | |||
| config false; | config false; | |||
| description | description | |||
| "Status of ingress application flow"; | "Status of ingress application flow"; | |||
| reference | ||||
| "draft-ietf-detnet-flow-information-model | ||||
| Sections 4.1, 5.8"; | ||||
| } | } | |||
| leaf interface { | leaf interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| } | } | |||
| uses data-flow-spec; | uses data-flow-spec; | |||
| } //End of app-ingress | } //End of app-ingress | |||
| container egress { | container egress { | |||
| description | description | |||
| "Route's next-hop attribute."; | "Route's next-hop attribute."; | |||
| // key "name"; This should be a list for aggregation | // key "name"; This should be a list for aggregation | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "Egress DetNet application"; | "Egress DetNet application"; | |||
| } | } | |||
| choice application-type { | choice application-type { | |||
| container ethernet { | container Ethernet { | |||
| leaf ethernet-place-holder { | leaf Ethernet-place-holder { | |||
| type string; | type string; | |||
| description | description | |||
| "Place holder for matching ethernet"; | "Place holder for matching Ethernet"; | |||
| } | } | |||
| } | } | |||
| container ip-mpls { | container ip-mpls { | |||
| uses detnet-app-next-hop-content; | uses detnet-app-next-hop-content; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| list service-aggregation-group { | ||||
| key "group-name"; | ||||
| description | ||||
| "A group of services"; | ||||
| leaf group-name { | ||||
| type aggregation-group; | ||||
| description | ||||
| "An Aggregation group name. Empty means the service is not | ||||
| part of a group"; | ||||
| } | ||||
| container outgoing { | ||||
| leaf traffic-profile { | ||||
| type traffic-profile-ref; | ||||
| description | ||||
| "The Traffic Profile for this group"; | ||||
| } | ||||
| 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 { | ||||
| type sequence-number-field; | ||||
| description | ||||
| "Sequence number filed can choice 0 bit, 16bit, 28 bit | ||||
| filed"; | ||||
| } | ||||
| } | ||||
| uses aggregation-header; | ||||
| leaf-list services { | ||||
| type service-sub-layer-ref; | ||||
| config false; | ||||
| description | ||||
| "List of registered services"; | ||||
| } | ||||
| } | ||||
| container incoming { | ||||
| uses aggregation-header; | ||||
| leaf-list services { | ||||
| type service-sub-layer-ref; | ||||
| config false; | ||||
| description | ||||
| "List of registered services"; | ||||
| } | ||||
| } | ||||
| } | ||||
| container service-sub-layer { | container service-sub-layer { | |||
| description | description | |||
| "The DetNet service sub-layer configuration"; | "The DetNet service sub-layer configuration"; | |||
| list service-sub-layer-list { | list service-sub-layer-list { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| ""; | "Services are indexed by name"; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "The name of the DetNet service sub-layer"; | "The name of the DetNet service sub-layer"; | |||
| } | } | |||
| leaf service-rank { | leaf service-rank { | |||
| type uint8; | type uint8; | |||
| description | description | |||
| "The DetNet rank for this service"; | "The DetNet rank for this service"; | |||
| reference | ||||
| "draft-ietf-detnet-flow-information-model Section 5.7"; | ||||
| } | } | |||
| leaf traffic-profile { | ||||
| choice service-type { | type traffic-profile-ref; | |||
| mandatory true; | description | |||
| container non-grouped { | "The Traffic Profile for this service"; | |||
| leaf traffic-profile { | ||||
| type traffic-profile-ref; | ||||
| description | ||||
| "The Traffic Profile for this service"; | ||||
| } | ||||
| leaf service-operation-type { | ||||
| type service-operation-type; | ||||
| } | ||||
| } | ||||
| container grouped { | ||||
| leaf group-ref { | ||||
| type aggregation-grp-ref; | ||||
| description | ||||
| "The aggregation group this service belongs to"; | ||||
| } | ||||
| } | ||||
| } | } | |||
| container service-protection { | container service-protection { | |||
| leaf service-protection-type { | leaf service-protection-type { | |||
| type service-protection-type; | type service-protection-type; | |||
| description | description | |||
| "The DetNet service protection type such as PRF, PEF, | "The DetNet service protection type such as PRF, PEF, | |||
| PEOF,PERF, and PEORF"; | PEOF,PERF, and PEORF"; | |||
| reference | ||||
| "draft-ietf-detnet-data-plane-framework Section 4.3"; | ||||
| } | } | |||
| leaf sequence-number-length { | leaf sequence-number-length { | |||
| type sequence-number-field; | type sequence-number-field; | |||
| description | description | |||
| "Sequence number field can choice 0 bit, 16bit, 28 bit | "Sequence number field length can be one of 0 (none), | |||
| filed"; | 16 bits or 28 bits."; | |||
| } | } | |||
| } | } | |||
| leaf service-operation-type { | leaf service-operation-type { | |||
| type service-operation-type; | type service-operation-type; | |||
| } | } | |||
| container incoming-type { | ||||
| container incoming { | ||||
| description | description | |||
| "The DetNet service sub-layer incoming configuration."; | "The DetNet service sub-layer incoming configuration."; | |||
| choice incoming-options { | choice incoming-type { | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| ""; | ""; | |||
| case ingress-application { | container app-flow { | |||
| description | ||||
| "This service sub-layer is related to | ||||
| the app-flows of the upper layer | ||||
| and provide ingress proxy or ingress aggregation | ||||
| at the ingress node."; | ||||
| uses app-flows-ref; | uses app-flows-ref; | |||
| } | } | |||
| container service { | ||||
| case detnet-service-identification { | description | |||
| uses detnet-flow-spec; | "This service sub-layer is related to | |||
| } | the service sub-layer of the upper layer | |||
| and provide service-to-service aggregation | ||||
| case aggregated-service { | at the ingress node or relay node."; | |||
| uses service-sub-layer-ref; | uses service-sub-layer-ref; | |||
| } | ||||
| case aggregated-forwarding { | } | |||
| container forwarding { | ||||
| description | ||||
| "This service sub-layer is related to | ||||
| the forwarding sub-layer of the upper layer | ||||
| and provide forwarding-to-service aggregation | ||||
| at the ingress node or relay node."; | ||||
| uses forwarding-sub-layer-ref; | uses forwarding-sub-layer-ref; | |||
| } | } | |||
| container service-identification { | ||||
| description | ||||
| "This service sub-layer is related to | ||||
| the service or forwarding sub-layer of the lower layer | ||||
| and provide DetNet service relay or termination | ||||
| at the relay node or egress node."; | ||||
| uses detnet-flow-spec; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| container outgoing-type { | ||||
| container outgoing { | ||||
| description | description | |||
| "The DetNet service sub-layer outgoing configuration."; | "The DetNet service sub-layer outgoing configuration."; | |||
| choice outgoing-options { | choice outgoing-type { | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| ""; | ""; | |||
| case detnet-service-outgoing { | container forwarding-sub-layer { | |||
| //uses detnet-service-next-hop-content; | description | |||
| "This service sub-layer is sent to the forwarding | ||||
| sub-layers of the lower layer for DetNet service | ||||
| forwarding or service-to-forwarding aggregation at | ||||
| the ingress node or relay node. When the operation | ||||
| type is service-initiation, The service sub-layer | ||||
| encapsulates the DetNet Control-Word and services | ||||
| label, which are for individual DetNet flow when the | ||||
| incoming type is app-flow and for aggregated DetNet | ||||
| flow when the incoming type is service or | ||||
| forwarding. The service sub-layer swaps the service | ||||
| label when the operation type is service-relay."; | ||||
| list service-outgoing-list { | list service-outgoing-list { | |||
| key "service-outgoing-index"; | key "service-outgoing-index"; | |||
| description | ||||
| "list of the outgoing service | ||||
| that separately for each node | ||||
| where services will be eliminated"; | ||||
| leaf service-outgoing-index { | leaf service-outgoing-index { | |||
| type uint8; | type uint8; | |||
| } | } | |||
| uses detnet-header; | uses detnet-header; | |||
| list next-layer { | list next-layer { | |||
| key "index"; | key "index"; | |||
| description | description | |||
| "lower-layer info"; | "list of the forwarding-sub-layer | |||
| for replicate to multiple paths"; | ||||
| leaf index { | leaf index { | |||
| type uint8; | type uint8; | |||
| } | } | |||
| leaf forwarding-sub-layer { | leaf forwarding-sub-layer { | |||
| type forwarding-sub-layer-ref; | type forwarding-sub-layer-ref; | |||
| description | ||||
| "forwarding-sub-layer reference point"; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container service-sub-layer { | ||||
| case detnet-service-aggregation { | description | |||
| "This service sub-layer is sent to the service | ||||
| sub-layers of the lower layer for service-to-service | ||||
| aggregation at the ingress node or relay node. The | ||||
| service sub-layer encapsulates the DetNet | ||||
| Control-Word and S-label when the operation type is | ||||
| service-initiation, and swaps the S-label when the | ||||
| operation type is service-relay."; | ||||
| leaf aggregation-service-sub-layer { | leaf aggregation-service-sub-layer { | |||
| type service-sub-layer-ref; | type service-sub-layer-ref; | |||
| description | ||||
| "reference point of the service-sub-layer | ||||
| at which this service will be aggregated"; | ||||
| } | } | |||
| container service-label { | container service-label { | |||
| uses rt-types:mpls-label-stack; | uses rt-types:mpls-label-stack; | |||
| } | } | |||
| } | } | |||
| container upper-app-flow { | ||||
| case egress-proxy { | description | |||
| "This service sub-layer is sent to the app-flow of | ||||
| the upper layer for egress proxy at the egress node, | ||||
| and decapsulates the DetNet Control-Word and S-label | ||||
| for individual DetNet service. This outgoing type | ||||
| only can be chosen when the operation type is | ||||
| service-termination."; | ||||
| uses app-flows-ref; | uses app-flows-ref; | |||
| } | } | |||
| container upper-service-sub-layer { | ||||
| case detnet-service-operation { | description | |||
| "This service sub-layer is sent to the service | ||||
| sub-layer of the upper layer for service-to-service | ||||
| disaggregation at the relay node or egress node, and | ||||
| decapsulates the DetNet Control-Word and A-label for | ||||
| aggregated DetNet service. This outgoing type only | ||||
| can be chosen when the operation type is | ||||
| service-termination."; | ||||
| uses service-sub-layer-ref; | uses service-sub-layer-ref; | |||
| } | } | |||
| container upper-forwarding-sub-layer { | ||||
| case detnet-forwarding-operation { | description | |||
| "This service sub-layer is sent to the forwarding | ||||
| sub-layer of the upper layer for | ||||
| forwarding-to-service disaggregation at the relay | ||||
| node or egress node, and decapsulates the DetNet | ||||
| Control-Word and A-label for aggregated DetNet | ||||
| service. This outgoing type only can be chosen when | ||||
| the operation type is service-termination"; | ||||
| uses forwarding-sub-layer-ref; | uses forwarding-sub-layer-ref; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container forwarding-sub-layer { | container forwarding-sub-layer { | |||
| description | description | |||
| "The DetNet forwarding sub-layer configuration"; | "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 | description | |||
| skipping to change at page 39, line 11 ¶ | skipping to change at page 37, line 40 ¶ | |||
| "The DetNet forwarding sub-layer configuration"; | "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 | description | |||
| "The name of the DetNet forwarding sub-layer"; | "The name of the DetNet forwarding sub-layer"; | |||
| } | } | |||
| leaf traffic-profile { | leaf traffic-profile { | |||
| type traffic-profile-ref; | type traffic-profile-ref; | |||
| description | description | |||
| "The Traffic Profile for this group"; | "The Traffic Profile for this group"; | |||
| } | } | |||
| leaf forwarding-operation-type { | leaf forwarding-operation-type { | |||
| type forwarding-operations-type; | type forwarding-operations-type; | |||
| } | } | |||
| container incoming-type { | ||||
| container incoming { | ||||
| description | description | |||
| "The DetNet forwarding sub-layer incoming configuration."; | "The DetNet forwarding sub-layer incoming configuration."; | |||
| choice incoming-options { | choice incoming-type { | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| ""; | "Cases of incoming types"; | |||
| case detnet-service-forwarding { | container service-sub-layer { | |||
| leaf-list service-sub-layer { | description | |||
| "This forwarding sub-layer is related to the service | ||||
| sub-layers of the upper layer and provide DetNet | ||||
| forwarding or service-to-forwarding aggregation at | ||||
| the ingress node or relay node."; | ||||
| leaf-list sub-layer-list { | ||||
| type service-sub-layer-ref; | type service-sub-layer-ref; | |||
| config false; | config false; | |||
| description | description | |||
| ""; | ""; | |||
| } | } | |||
| } | } | |||
| case upper-forwarding-sub-layer { | ||||
| case detnet-forwarding-identification { | description | |||
| "This forwarding sub-layer is related to the | ||||
| forwarding sub-layer of the upper layer and provide | ||||
| forwarding-to-forwarding aggregation at the ingress | ||||
| node or relay node or transit node."; | ||||
| uses forwarding-sub-layer-ref; | ||||
| } | ||||
| case lower-forwarding-sub-layer { | ||||
| //case forwarding-identification { | ||||
| description | ||||
| "This forwarding sub-layer is related to all of the | ||||
| lower layer and provide DetNet forwarding swap or | ||||
| termination at the transit node or relay node or | ||||
| egress node."; | ||||
| leaf interface { | leaf interface { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description | description | |||
| ""; | "This is the interface associated with the forwarding | |||
| sub-layer"; | ||||
| } | } | |||
| uses detnet-flow-spec; | uses detnet-flow-spec; | |||
| } | } | |||
| case aggregated-forwarding { | ||||
| uses forwarding-sub-layer-ref; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| container outgoing-type { | ||||
| container outgoing { | ||||
| description | description | |||
| "The DetNet forwarding sub-layer outbound configuration."; | "The DetNet forwarding sub-layer outbound configuration."; | |||
| choice outgoing-options { | choice outgoing-type { | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| ""; | ""; | |||
| case detnet-forwarding-outgoing { | ||||
| container interface { | ||||
| description | ||||
| "This forwarding sub-layer is sent to the interface | ||||
| for send to next-hop at the ingress node or relay | ||||
| node or transit node."; | ||||
| uses detnet-forwarding-next-hop-content; | uses detnet-forwarding-next-hop-content; | |||
| } | } | |||
| case service { | ||||
| case detnet-service-aggregation { | description | |||
| "This forwarding sub-layer is sent to the service | ||||
| sub-layers of the lower layer for | ||||
| forwarding-to-service aggregation at the ingress | ||||
| node or relay node."; | ||||
| leaf aggregation-service-sub-layer { | leaf aggregation-service-sub-layer { | |||
| type service-sub-layer-ref; | type service-sub-layer-ref; | |||
| } | } | |||
| container optional-forwarding-label { | container optional-forwarding-label { | |||
| uses rt-types:mpls-label-stack; | uses rt-types:mpls-label-stack; | |||
| } | } | |||
| } | } | |||
| case forwarding { | ||||
| case detnet-forwarding-aggregation { | description | |||
| "This forwarding sub-layer is sent to the forwarding | ||||
| sub-layers of the lower layer for | ||||
| forwarding-to-forwarding aggregation at the ingress | ||||
| node or relay node or transit node."; | ||||
| leaf aggregation-forwarding-sub-layer { | leaf aggregation-forwarding-sub-layer { | |||
| type forwarding-sub-layer-ref; | type forwarding-sub-layer-ref; | |||
| } | } | |||
| container forwarding-label { | container forwarding-label { | |||
| uses rt-types:mpls-label-stack; | uses rt-types:mpls-label-stack; | |||
| } | } | |||
| } | } | |||
| case upper-service { | ||||
| case detnet-service-operation { | description | |||
| "This forwarding sub-layer is sent to the service | ||||
| sub-layer of the upper layer and decapsulate the | ||||
| F-label for DetNet service or service-to-forwarding | ||||
| disaggregation at the relay node or egress node. | ||||
| This outgoing type only can be chosen when the | ||||
| operation type is pop-and-lookup"; | ||||
| uses service-sub-layer-ref; | uses service-sub-layer-ref; | |||
| } | } | |||
| case upper-forwarding { | ||||
| case detnet-forwarding-operation { | description | |||
| "This forwarding sub-layer is sent to the forwarding | ||||
| sub-layer of the upper layer and decapsulate the | ||||
| F-label for forwarding-to-forwarding disaggregation | ||||
| at the transit node or relay node or egress node. | ||||
| This outgoing type only can be chosen when the | ||||
| operation type is pop-and-lookup"; | ||||
| uses forwarding-sub-layer-ref; | uses forwarding-sub-layer-ref; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 8. Open Issues | 8. Open Issues | |||
| There are some open issues that are still under discussion: | There are some open issues that are still under discussion: | |||
| o Aggregation. | o Terminology. | |||
| o Going along the the updated data plane model. | ||||
| o Terminologies. | o Security Considerations. | |||
| These issues will be resolved in the following versions of the draft. | These issues will be resolved in the following versions of the draft. | |||
| 9. IANA Considerations | 9. IANA Considerations | |||
| This document makes no request of IANA. | This document makes no request of IANA. | |||
| Note to RFC Editor: this section may be removed on publication as an | Note to RFC Editor: this section may be removed on publication as an | |||
| RFC. | RFC. | |||
| skipping to change at page 42, line 10 ¶ | skipping to change at page 41, line 19 ¶ | |||
| [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, | [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, | |||
| "Deterministic Networking Architecture", RFC 8655, | "Deterministic Networking Architecture", RFC 8655, | |||
| DOI 10.17487/RFC8655, October 2019, | DOI 10.17487/RFC8655, October 2019, | |||
| <https://www.rfc-editor.org/info/rfc8655>. | <https://www.rfc-editor.org/info/rfc8655>. | |||
| 12.2. Informative References | 12.2. Informative References | |||
| [I-D.ietf-detnet-flow-information-model] | [I-D.ietf-detnet-flow-information-model] | |||
| Varga, B., Farkas, J., Cummings, R., Jiang, Y., and D. | Varga, B., Farkas, J., Cummings, R., Jiang, Y., and D. | |||
| Fedyk, "DetNet Flow Information Model", draft-ietf-detnet- | Fedyk, "DetNet Flow Information Model", draft-ietf-detnet- | |||
| flow-information-model-10 (work in progress), May 2020. | flow-information-model-11 (work in progress), October | |||
| 2020. | ||||
| Appendix A. Examples | ||||
| The following examples are provided. | ||||
| o A simple DetNet application illustrting multiplexing of | ||||
| Application Flows. | ||||
| o A case of Forwarding sub-layer aggregation using a single | ||||
| forwarding sublayer. | ||||
| o A case of Service sub-layer aggregation with and aggrgation label. | ||||
| A.1. Example JSON Configuration | ||||
| { | ||||
| "ietf-interfaces:interfaces": { | ||||
| "interface": [ | ||||
| { | ||||
| "name": "eth0", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-10-02T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth1", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-10-02T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth2", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-10-02T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth3", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-10-02T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth4", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-10-02T23:59:00Z" | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-detnet:detnet": { | ||||
| "app-flows": { | ||||
| "app-flow": [ | ||||
| { | ||||
| "name": "app-0", | ||||
| "app-flow-bidir-congruent": false, | ||||
| "outgoing-service": "ssl-1", | ||||
| "traffic-profile": "pf-1", | ||||
| "ingress": { | ||||
| "app-flow-status": "ready", | ||||
| "interface": "eth0", | ||||
| "src-ip-prefix": "1.1.1.1/32", | ||||
| "dest-ip-prefix": "8.8.8.8/32", | ||||
| "traffic-class": 6 | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "app-1", | ||||
| "app-flow-bidir-congruent": false, | ||||
| "outgoing-service": "ssl-1", | ||||
| "traffic-profile": "pf-1", | ||||
| "ingress": { | ||||
| "app-flow-status": "ready", | ||||
| "interface": "eth0", | ||||
| "src-ip-prefix": "1.1.1.1/32", | ||||
| "dest-ip-prefix": "8.8.8.8/32", | ||||
| "traffic-class": 7 | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "traffic-profile": [ | ||||
| { | ||||
| "profile-name": "pf-1", | ||||
| "traffic-requirements": { | ||||
| "min-bandwidth": "100000000", | ||||
| "max-latency": 100000000, | ||||
| "max-latency-variation": 200000000, | ||||
| "max-loss": 2, | ||||
| "max-consecutive-loss-tolerance": 5, | ||||
| "max-misordering": 0 | ||||
| }, | ||||
| "traffic-specification": { | ||||
| "interval": 5, | ||||
| "max-packets-per-interval": 10, | ||||
| "max-payload-size": 1500, | ||||
| "average-packets-per-interval": 5, | ||||
| "average-payload-size": 1000 | ||||
| }, | ||||
| "member-applications": [ | ||||
| "app-0", | ||||
| "app-1" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-2", | ||||
| "traffic-requirements": { | ||||
| "min-bandwidth": "200000000", | ||||
| "max-latency": 100000000, | ||||
| "max-latency-variation": 200000000, | ||||
| "max-loss": 2, | ||||
| "max-consecutive-loss-tolerance": 5, | ||||
| "max-misordering": 0 | ||||
| }, | ||||
| "traffic-specification": { | ||||
| "interval": 5, | ||||
| "max-packets-per-interval": 10, | ||||
| "max-payload-size": 1500, | ||||
| "average-packets-per-interval": 5, | ||||
| "average-payload-size": 1000 | ||||
| }, | ||||
| "member-services": [ | ||||
| "ssl-1" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "pf-3", | ||||
| "traffic-specification": { | ||||
| "interval": 5, | ||||
| "max-packets-per-interval": 10, | ||||
| "max-payload-size": 1500 | ||||
| }, | ||||
| "member-forwarding-sublayers": [ | ||||
| "fsl-1" | ||||
| ] | ||||
| } | ||||
| ], | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer-list": [ | ||||
| { | ||||
| "name": "ssl-1", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "pf-2", | ||||
| "service-operation-type": "service-initiation", | ||||
| "service-protection": { | ||||
| "service-protection-type": "none", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "incoming-type": { | ||||
| "app-flow": { | ||||
| "flow-list": [ | ||||
| "app-0", | ||||
| "app-1" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 100 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "next-layer": [ | ||||
| { | ||||
| "index": 0, | ||||
| "forwarding-sub-layer": "fsl-1" | ||||
| } | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| Figure 1: Example DetNet JSON configuration | ||||
| A.2. Example XML Config: Aggregation using a Forwarding Sublayer | ||||
| <interfaces | ||||
| xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces" | ||||
| xmlns:ia="urn:ietf:params:xml:ns:yang:iana-if-type"> | ||||
| <interface> | ||||
| <name>eth0</name> | ||||
| <type>ia:ethernetCsmacd</type> | ||||
| <oper-status>up</oper-status> | ||||
| <statistics> | ||||
| <discontinuity-time>2020-10-02T23:59:00Z</discontinuity-time> | ||||
| </statistics> | ||||
| </interface> | ||||
| <interface> | ||||
| <name>eth1</name> | ||||
| <type>ia:ethernetCsmacd</type> | ||||
| <oper-status>up</oper-status> | ||||
| <statistics> | ||||
| <discontinuity-time>2020-10-02T23:59:00Z</discontinuity-time> | ||||
| </statistics> | ||||
| </interface> | ||||
| <interface> | ||||
| <name>eth2</name> | ||||
| <type>ia:ethernetCsmacd</type> | ||||
| <oper-status>up</oper-status> | ||||
| <statistics> | ||||
| <discontinuity-time>2020-10-02T23:59:00Z</discontinuity-time> | ||||
| </statistics> | ||||
| </interface> | ||||
| <interface> | ||||
| <name>eth3</name> | ||||
| <type>ia:ethernetCsmacd</type> | ||||
| <oper-status>up</oper-status> | ||||
| <statistics> | ||||
| <discontinuity-time>2020-10-02T23:59:00Z</discontinuity-time> | ||||
| </statistics> | ||||
| </interface> | ||||
| <interface> | ||||
| <name>eth4</name> | ||||
| <type>ia:ethernetCsmacd</type> | ||||
| <oper-status>up</oper-status> | ||||
| <statistics> | ||||
| <discontinuity-time>2020-10-02T23:59:00Z</discontinuity-time> | ||||
| </statistics> | ||||
| </interface> | ||||
| </interfaces> | ||||
| <detnet | ||||
| xmlns="urn:ietf:params:xml:ns:yang:ietf-detnet"> | ||||
| <app-flows> | ||||
| <app-flow> | ||||
| <name>app-1</name> | ||||
| <app-flow-bidir-congruent>false</app-flow-bidir-congruent> | ||||
| <outgoing-service>ssl-1</outgoing-service> | ||||
| <traffic-profile>1</traffic-profile> | ||||
| <ingress> | ||||
| <interface>eth0</interface> | ||||
| <src-ip-prefix>1.1.1.1/32</src-ip-prefix> | ||||
| <dest-ip-prefix>8.8.8.8/32</dest-ip-prefix> | ||||
| </ingress> | ||||
| </app-flow> | ||||
| <app-flow> | ||||
| <name>app-2</name> | ||||
| <app-flow-bidir-congruent>false</app-flow-bidir-congruent> | ||||
| <outgoing-service>ssl-2</outgoing-service> | ||||
| <traffic-profile>1</traffic-profile> | ||||
| <ingress> | ||||
| <interface>eth1</interface> | ||||
| <src-ip-prefix>1.1.1.2/32</src-ip-prefix> | ||||
| <dest-ip-prefix>8.8.8.9/32</dest-ip-prefix> | ||||
| </ingress> | ||||
| </app-flow> | ||||
| </app-flows> | ||||
| <traffic-profile> | ||||
| <profile-name>1</profile-name> | ||||
| <traffic-requirements> | ||||
| <min-bandwidth>100000000</min-bandwidth> | ||||
| <max-latency>100000000</max-latency> | ||||
| <max-latency-variation>200000000</max-latency-variation> | ||||
| <max-loss>2</max-loss> | ||||
| <max-consecutive-loss-tolerance>5</max-consecutive-loss-tolerance> | ||||
| <max-misordering>0</max-misordering> | ||||
| </traffic-requirements> | ||||
| <member-applications>app-1</member-applications> | ||||
| <member-applications>app-2</member-applications> | ||||
| </traffic-profile> | ||||
| <traffic-profile> | ||||
| <profile-name>2</profile-name> | ||||
| <traffic-requirements> | ||||
| <min-bandwidth>100000000</min-bandwidth> | ||||
| <max-latency>100000000</max-latency> | ||||
| <max-latency-variation>200000000</max-latency-variation> | ||||
| <max-loss>2</max-loss> | ||||
| <max-consecutive-loss-tolerance>5</max-consecutive-loss-tolerance> | ||||
| <max-misordering>0</max-misordering> | ||||
| </traffic-requirements> | ||||
| <member-services>ssl-1</member-services> | ||||
| <member-services>ssl-2</member-services> | ||||
| </traffic-profile> | ||||
| <traffic-profile> | ||||
| <profile-name>3</profile-name> | ||||
| <traffic-specification> | ||||
| <interval>5</interval> | ||||
| <max-packets-per-interval>10</max-packets-per-interval> | ||||
| <max-payload-size>1500</max-payload-size> | ||||
| </traffic-specification> | ||||
| <member-forwarding-sublayers>afl-1</member-forwarding-sublayers> | ||||
| </traffic-profile> | ||||
| <service-sub-layer> | ||||
| <service-sub-layer-list> | ||||
| <name>ssl-1</name> | ||||
| <service-rank>10</service-rank> | ||||
| <traffic-profile>2</traffic-profile> | ||||
| <service-operation-type>service-initiation</service- | ||||
| operation-type> | ||||
| <service-protection> | ||||
| <service-protection-type>none</service-protection-type> | ||||
| <sequence-number-length>long-sn</sequence-number-length> | ||||
| </service-protection> | ||||
| <incoming-type> | ||||
| <app-flow> | ||||
| <flow-list>app-1</flow-list> | ||||
| </app-flow> | ||||
| </incoming-type> | ||||
| <outgoing-type> | ||||
| <forwarding-sub-layer> | ||||
| <service-outgoing-list> | ||||
| <service-outgoing-index>0</service-outgoing-index> | ||||
| <mpls-label-stack> | ||||
| <entry> | ||||
| <id>0</id> | ||||
| <label>100</label> | ||||
| </entry> | ||||
| </mpls-label-stack> | ||||
| <next-layer> | ||||
| <index>0</index> | ||||
| <forwarding-sub-layer>afl-1</forwarding-sub-layer> | ||||
| </next-layer> | ||||
| </service-outgoing-list> | ||||
| </forwarding-sub-layer> | ||||
| </outgoing-type> | ||||
| </service-sub-layer-list> | ||||
| <service-sub-layer-list> | ||||
| <name>ssl-2</name> | ||||
| <service-rank>10</service-rank> | ||||
| <traffic-profile>2</traffic-profile> | ||||
| <service-operation-type>service-initiation</service- | ||||
| operation-type> | ||||
| <service-protection> | ||||
| <service-protection-type>none</service-protection-type> | ||||
| <sequence-number-length>long-sn</sequence-number-length> | ||||
| </service-protection> | ||||
| <incoming-type> | ||||
| <app-flow> | ||||
| <flow-list>app-2</flow-list> | ||||
| </app-flow> | ||||
| </incoming-type> | ||||
| <outgoing-type> | ||||
| <forwarding-sub-layer> | ||||
| <service-outgoing-list> | ||||
| <service-outgoing-index>0</service-outgoing-index> | ||||
| <mpls-label-stack> | ||||
| <entry> | ||||
| <id>0</id> | ||||
| <label>103</label> | ||||
| </entry> | ||||
| </mpls-label-stack> | ||||
| <next-layer> | ||||
| <index>0</index> | ||||
| <forwarding-sub-layer>afl-1</forwarding-sub-layer> | ||||
| </next-layer> | ||||
| </service-outgoing-list> | ||||
| </forwarding-sub-layer> | ||||
| </outgoing-type> | ||||
| </service-sub-layer-list> | ||||
| </service-sub-layer> | ||||
| <forwarding-sub-layer> | ||||
| <forwarding-sub-layer-list> | ||||
| <name>afl-1</name> | ||||
| <traffic-profile>3</traffic-profile> | ||||
| <forwarding-operation-type>impose-and-forward</forwarding- | ||||
| operation-type> | ||||
| <incoming-type> | ||||
| <service-sub-layer> | ||||
| <sub-layer-list>ssl-1</sub-layer-list> | ||||
| <sub-layer-list>ssl-2</sub-layer-list> | ||||
| </service-sub-layer> | ||||
| </incoming-type> | ||||
| <outgoing-type> | ||||
| <interface> | ||||
| <mpls-label-stack> | ||||
| <entry> | ||||
| <id>0</id> | ||||
| <label>10000</label> | ||||
| </entry> | ||||
| </mpls-label-stack> | ||||
| <outgoing-interface>eth2</outgoing-interface> | ||||
| </interface> | ||||
| </outgoing-type> | ||||
| </forwarding-sub-layer-list> | ||||
| </forwarding-sub-layer> | ||||
| </detnet> | ||||
| Figure 2: Example DetNet XML configuration | ||||
| A.3. Example JSON Service Aggregation Configuration | ||||
| { | ||||
| "ietf-interfaces:interfaces": { | ||||
| "interface": [ | ||||
| { | ||||
| "name": "eth0", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-10-02T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth1", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-10-02T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth2", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-10-02T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth3", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-10-02T23:59:00Z" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "eth4", | ||||
| "type": "iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2020-10-02T23:59:00Z" | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "ietf-detnet:detnet": { | ||||
| "app-flows": { | ||||
| "app-flow": [ | ||||
| { | ||||
| "name": "app-1", | ||||
| "app-flow-bidir-congruent": false, | ||||
| "outgoing-service": "ssl-1", | ||||
| "traffic-profile": "1", | ||||
| "ingress": { | ||||
| "interface": "eth0", | ||||
| "src-ip-prefix": "1.1.1.1/32", | ||||
| "dest-ip-prefix": "8.8.8.8/32" | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "app-2", | ||||
| "app-flow-bidir-congruent": false, | ||||
| "outgoing-service": "ssl-2", | ||||
| "traffic-profile": "1", | ||||
| "ingress": { | ||||
| "interface": "eth1", | ||||
| "src-ip-prefix": "1.1.1.2/32", | ||||
| "dest-ip-prefix": "8.8.8.9/32" | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "traffic-profile": [ | ||||
| { | ||||
| "profile-name": "1", | ||||
| "traffic-requirements": { | ||||
| "min-bandwidth": "100000000", | ||||
| "max-latency": 100000000, | ||||
| "max-latency-variation": 200000000, | ||||
| "max-loss": 2, | ||||
| "max-consecutive-loss-tolerance": 5, | ||||
| "max-misordering": 0 | ||||
| }, | ||||
| "member-applications": [ | ||||
| "app-1", | ||||
| "app-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "2", | ||||
| "traffic-requirements": { | ||||
| "min-bandwidth": "100000000", | ||||
| "max-latency": 100000000, | ||||
| "max-latency-variation": 200000000, | ||||
| "max-loss": 2, | ||||
| "max-consecutive-loss-tolerance": 5, | ||||
| "max-misordering": 0 | ||||
| }, | ||||
| "member-services": [ | ||||
| "ssl-1", | ||||
| "ssl-2" | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "profile-name": "3", | ||||
| "traffic-specification": { | ||||
| "interval": 5, | ||||
| "max-packets-per-interval": 10, | ||||
| "max-payload-size": 1500 | ||||
| }, | ||||
| "member-forwarding-sublayers": [ | ||||
| "afl-1" | ||||
| ] | ||||
| } | ||||
| ], | ||||
| "service-sub-layer": { | ||||
| "service-sub-layer-list": [ | ||||
| { | ||||
| "name": "ssl-1", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "2", | ||||
| "service-protection": { | ||||
| "service-protection-type": "none", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "service-operation-type": "service-initiation", | ||||
| "incoming-type": { | ||||
| "app-flow": { | ||||
| "flow-list": [ | ||||
| "app-1" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "aggregation-service-sub-layer": "asl-1", | ||||
| "service-label": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 102 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "ssl-2", | ||||
| "service-rank": 10, | ||||
| "traffic-profile": "2", | ||||
| "service-operation-type": "service-initiation", | ||||
| "service-protection": { | ||||
| "service-protection-type": "none", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "incoming-type": { | ||||
| "app-flow": { | ||||
| "flow-list": [ | ||||
| "app-2" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "service-sub-layer": { | ||||
| "aggregation-service-sub-layer": "asl-1", | ||||
| "service-label": { | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 105 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| }, | ||||
| { | ||||
| "name": "asl-1", | ||||
| "service-rank": 10, | ||||
| "service-protection": { | ||||
| "service-protection-type": "none", | ||||
| "sequence-number-length": "long-sn" | ||||
| }, | ||||
| "incoming-type": { | ||||
| "service": { | ||||
| "service-sub-layer": [ | ||||
| "ssl-1", | ||||
| "ssl-2" | ||||
| ] | ||||
| } | ||||
| }, | ||||
| "outgoing-type": { | ||||
| "forwarding-sub-layer": { | ||||
| "service-outgoing-list": [ | ||||
| { | ||||
| "service-outgoing-index": 0, | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 1000 | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "next-layer": [ | ||||
| { | ||||
| "index": 0, | ||||
| "forwarding-sub-layer": "afl-1" | ||||
| } | ||||
| ] | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "forwarding-sub-layer": { | ||||
| "forwarding-sub-layer-list": [ | ||||
| { | ||||
| "name": "afl-1", | ||||
| "traffic-profile": "3", | ||||
| "forwarding-operation-type": "impose-and-forward", | ||||
| "outgoing-type": { | ||||
| "interface": { | ||||
| "outgoing-interface": "eth2", | ||||
| "mpls-label-stack": { | ||||
| "entry": [ | ||||
| { | ||||
| "id": 0, | ||||
| "label": 20000 | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| Figure 3: Example DetNet JSON Service Aggregation | ||||
| Authors' Addresses | Authors' Addresses | |||
| Xuesong Geng | Xuesong Geng | |||
| Huawei Technologies | Huawei Technologies | |||
| Email: gengxuesong@huawei.com | Email: gengxuesong@huawei.com | |||
| Mach(Guoyi) Chen | Mach(Guoyi) Chen | |||
| Huawei Technologies | Huawei Technologies | |||
| skipping to change at page 42, line 35 ¶ | skipping to change at page 55, line 28 ¶ | |||
| ETRI | ETRI | |||
| Email: dbduscjf@etri.re.kr | Email: dbduscjf@etri.re.kr | |||
| Don Fedyk | Don Fedyk | |||
| LabN Consulting, L.L.C. | LabN Consulting, L.L.C. | |||
| Email: dfedyk@labn.net | Email: dfedyk@labn.net | |||
| Reshad Rahman | Reshad Rahman | |||
| Cisco Systems | Individual | |||
| Email: rrahman@cisco.com | Email: reshad@yahoo.com | |||
| Zhenqiang Li | Zhenqiang Li | |||
| China Mobile | China Mobile | |||
| Email: lizhenqiang@chinamobile.com | Email: lizhenqiang@chinamobile.com | |||
| End of changes. 200 change blocks. | ||||
| 729 lines changed or deleted | 1364 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/ | ||||