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
skipping to change at page 24, line 22 skipping to change at page 24, line 18
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 29, line 23 skipping to change at page 28, line 47
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
skipping to change at page 31, line 8 skipping to change at page 30, line 26
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. 197 change blocks. 
726 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/