draft-ietf-detnet-yang-01.txt   draft-ietf-detnet-yang-02.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: July 18, 2019 Z. Li Expires: September 27, 2019 Z. Li
China Mobile China Mobile
R. Rahman R. Rahman
Cisco Systems Cisco Systems
January 14, 2019 March 26, 2019
Deterministic Networking (DetNet) Configuration YANG Model Deterministic Networking (DetNet) Configuration YANG Model
draft-ietf-detnet-yang-01 draft-ietf-detnet-yang-02
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 1, line 46 skipping to change at page 1, line 46
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 July 18, 2019. This Internet-Draft will expire on September 27, 2019.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2019 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Terminologies . . . . . . . . . . . . . . . . . . . . . . . . 4 2. Terminologies . . . . . . . . . . . . . . . . . . . . . . . . 3
3. DetNet Configuration Model . . . . . . . . . . . . . . . . . 4 3. DetNet Configuration Model . . . . . . . . . . . . . . . . . 4
3.1. DetNet Service Proxy Configuration Attributes . . . . . . 4 3.1. DetNet Service Proxy Configuration Attributes . . . . . . 4
3.2. DetNet Service Layer Configuration Attributes . . . . . . 5 3.2. DetNet Service Layer Configuration Attributes . . . . . . 5
3.3. DetNet Transport Layer Configuration Attributes . . . . . 7 3.3. DetNet Transport Layer Configuration Attributes . . . . . 8
4. DetNet Configuration YANG Structure . . . . . . . . . . . . . 8 4. DetNet Configuration YANG Structure . . . . . . . . . . . . . 9
5. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 14 5. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 17
6. DetNet Configuration Model Classification . . . . . . . . . . 31 6. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.1. Fully Distributed Configuration Model . . . . . . . . . . 31 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 43
6.2. Fully Centralized Configuration Model . . . . . . . . . . 31 8. Security Considerations . . . . . . . . . . . . . . . . . . . 43
6.3. Hybrid Configuration Model . . . . . . . . . . . . . . . 32 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 43
7. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 33 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 43
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 33 10.1. Normative References . . . . . . . . . . . . . . . . . . 43
9. Security Considerations . . . . . . . . . . . . . . . . . . . 33 10.2. Informative References . . . . . . . . . . . . . . . . . 44
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 34 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 46
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 34
11.1. Normative References . . . . . . . . . . . . . . . . . . 34
11.2. Informative References . . . . . . . . . . . . . . . . . 35
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 37
1. Introduction 1. Introduction
Deterministic Networking (DetNet) [I-D.ietf-detnet-architecture] is Deterministic Networking (DetNet) [I-D.ietf-detnet-architecture] is
defined to provide high-quality network service with extremely low defined to provide high-quality network service with extremely low
packet loss rate, bounded low latency and jitter. packet loss rate, bounded low latency and jitter.
DetNet flow information is defined DetNet flow information is defined
in[I-D.ietf-detnet-flow-information-model], and the DetNet models are in[I-D.ietf-detnet-flow-information-model], and the DetNet models are
categorized as: categorized as:
skipping to change at page 5, line 5 skipping to change at page 5, line 5
DetNet service proxy can also do flow filtering and policing at the DetNet service proxy can also do flow filtering and policing at the
ingress to prevent the misbehaviored flows from going into the ingress to prevent the misbehaviored flows from going into the
network, which needs: network, which needs:
o Traffic Specification, refers to Section 7.2 of o Traffic Specification, refers to Section 7.2 of
[I-D.ietf-detnet-flow-information-model] [I-D.ietf-detnet-flow-information-model]
The YANG module structure is shown below: The YANG module structure is shown below:
+--rw client-flow* [flow-id] | +--rw client-flow* [flow-id]
| +--rw flow-id uint32 | | +--rw flow-id uint32
| +--rw (flow-type)? | | +--rw flow-rank? boolean
| | +--:(l2-flow-identfication) | | +--rw (flow-type)?
| | | +--rw source-mac-address? yang:mac-address | | | +--:(l2-flow)
| | | +--rw destination-mac-address? yang:mac-address | | | | +--rw source-mac-address? yang:mac-address
| | | +--rw ethertype? eth:ethertype | | | | +--rw destination-mac-address? yang:mac-address
| | | +--rw vlan-id? uint16 | | | | +--rw ethertype? eth:ethertype
| | | +--rw pcp | | | | +--rw vlan-id? uint16
| | +--:(l3-flow-identification) | | | | +--rw pcp
| | +--rw (ip-flow-type)? | | | +--:(l3-flow)
| | | +--:(ipv4) | | | +--rw (ip-flow-type)?
| | | | +--rw src-ipv4-address? inet:ipv4-address | | | | +--:(ipv4)
| | | | +--rw dest-ipv4-address? inet:ipv4-address | | | | | +--rw src-ipv4-address? inet:ipv4-address
| | | | +--rw dscp? uint8 | | | | | +--rw dest-ipv4-address? inet:ipv4-address
| | | +--:(ipv6) | | | | | +--rw dscp? uint8
| | | +--rw src-ipv6-address? inet:ipv6-address | | | | +--:(ipv6)
| | | +--rw dest-ipv6-address? inet:ipv6-address | | | | +--rw src-ipv6-address? inet:ipv6-address
| | | +--rw traffic-class? uint8 | | | | +--rw dest-ipv6-address? inet:ipv6-address
| | | +--rw flow-label? inet:ipv6-flow-label | | | | +--rw traffic-class? uint8
| | +--rw source-port? inet:port-number | | | | +--rw flow-label? inet:ipv6-flow-label
| | +--rw destination-port? inet:port-number | | | +--rw source-port? inet:port-number
| | +--rw protocol? uint8 | | | +--rw destination-port? inet:port-number
| +--rw traffic-specification | | | +--rw protocol? uint8
| +--rw interval? uint32 | | +--rw traffic-specification
| +--rw max-packets-per-interval? uint32 | | +--rw interval? uint32
| +--rw max-payload-size? uint32 | | +--rw max-packets-per-interval? uint32
| +--rw average-packets-per-interval? uint32 | | +--rw max-payload-size? uint32
| +--rw average-payload-size? uint32 | | +--rw average-packets-per-interval? uint32
| | +--rw average-payload-size? uint32
| +--rw service-function? service-function-type
| +--rw sequence-number-generation-type? sequence-number-generation
| +--rw sequence-number-length? uint8
3.2. DetNet Service Layer Configuration Attributes 3.2. DetNet Service Layer Configuration Attributes
DetNet service functions, e.g., DetNet tunnel initialization/ DetNet service functions, e.g., DetNet tunnel initialization/
termination and service protection, are provided in DetNet service termination and service protection, are provided in DetNet service
layer. To support these functions, the following service attributes layer. To support these functions, the following service attributes
need to be configured: need to be configured:
o DetNet flow identification, refers to Section 7.1.3 of o DetNet flow identification, refers to Section 7.1.3 of
[I-D.ietf-detnet-flow-information-model]. [I-D.ietf-detnet-flow-information-model].
skipping to change at page 6, line 24 skipping to change at page 6, line 29
o Service encapsulation, refers to Section 6.2 of o Service encapsulation, refers to Section 6.2 of
[I-D.ietf-detnet-dp-sol-mpls] [I-D.ietf-detnet-dp-sol-mpls]
o Transport encapsulation, refers to Section 6.2 of o Transport encapsulation, refers to Section 6.2 of
[I-D.ietf-detnet-dp-sol-mpls]and Section 3 of [I-D.ietf-detnet-dp-sol-mpls]and Section 3 of
[I-D.ietf-detnet-dp-sol-ip] [I-D.ietf-detnet-dp-sol-ip]
The YANG module structure is shown below: The YANG module structure is shown below:
| +--rw relay-node +--:(relay-node) {detnet-mpls-dp-sol}?
| +--rw name? string | +--rw relay-node
| +--rw flow-rank | +--rw name? string
| +--rw service-rank | +--rw service-rank
| +--rw in-segment* [in-segment-id] | +--rw in-segment* [in-segment-id]
| | +--rw in-segment-id uint32 | | +--rw in-segment-id uint32
| | +--rw (flow-type)? | | +--rw (flow-type)?
| | | +--:(IP) | | | +--:(IP)
| | | | +--rw (ip-flow-type)? | | | | +--rw (ip-flow-type)?
| | | | | +--:(ipv4) | | | | | +--:(ipv4)
| | | | | | +--rw src-ipv4-address? inet:ipv4-address | | | | | | +--rw src-ipv4-address? inet:ipv4-address
| | | | | | +--rw dest-ipv4-address? inet:ipv4-address | | | | | | +--rw dest-ipv4-address? inet:ipv4-address
| | | | | | +--rw dscp? uint8 | | | | | | +--rw dscp? uint8
| | | | | +--:(ipv6) | | | | | +--:(ipv6)
| | | | | +--rw src-ipv6-address? inet:ipv6-address | | | | | +--rw src-ipv6-address? inet:ipv6-address
| | | | | +--rw dest-ipv6-address? inet:ipv6-address | | | | | +--rw dest-ipv6-address? inet:ipv6-address
| | | | | +--rw traffic-class? uint8 | | | | | +--rw traffic-class? uint8
| | | | | +--rw flow-label? inet:ipv6-flow-label | | | | | +--rw flow-label? inet:ipv6-flow-label
| | | | +--rw source-port? inet:port-number | | | | +--rw source-port? inet:port-number
| | | | +--rw destination-port? inet:port-number | | | | +--rw destination-port? inet:port-number
| | | | +--rw protocol? uint8 | | | | +--rw protocol? uint8
| | | +--:(MPLS) | | | +--:(MPLS)
| | | +--rw service-label uint32 | | | +--rw service-label uint32
| | +--rw service-function? service-function-type | | +--rw service-function? service-function-type
| +--rw out-segment* [out-segment-id] | +--rw out-segment* [out-segment-id]
| +--rw out-segment-id uint32 | +--rw out-segment-id uint32
| +--rw detnet-service-encapsulation | +--rw detnet-service-encapsulation
| | +--rw service-label uint32 | | +--rw service-label uint32
| | +--rw control-word uint32 | | +--rw control-word? uint32
| +--rw detnet-transport-encapsulation | +--rw detnet-transport-encapsulation
| +--rw (tunnel-type)? | +--rw (tunnel-type)?
| | +--:(IPv4) | | +--:(IPv4) {ipv4-tunnel}?
| | | +--rw ipv4-encaplustion | | | +--rw ipv4-encapsulation
| | | +--rw src-ipv4-address inet:ipv4-address | | | +--rw src-ipv4-address inet:ipv4-address
| | | +--rw dest-ipv4-address inet:ipv4-address | | | +--rw dest-ipv4-address inet:ipv4-address
| | | +--rw protocol uint8 | | | +--rw protocol uint8
| | | +--rw ttl? uint8 | | | +--rw ttl? uint8
| | | +--rw dscp? uint8 | | | +--rw dscp? uint8
| | +--:(IPv6) | | +--:(IPv6) {ipv6-tunnel}?
| | | +--rw ipv6-encaplustion | | | +--rw ipv6-encapsulation
| | | +--rw src-ipv6-address inet:ipv6-address | | | +--rw src-ipv6-address inet:ipv6-address
| | | +--rw dest-ipv6-address inet:ipv6-address | | | +--rw dest-ipv6-address inet:ipv6-address
| | | +--rw next-header uint8 | | | +--rw next-header uint8
| | | +--rw traffic-class? uint8 | | | +--rw traffic-class? uint8
| | | +--rw flow-label? inet:ipv6-flow-label | | | +--rw flow-label? inet:ipv6-flow-label
| | | +--rw hop-limit? uint8 | | | +--rw hop-limit? uint8
| | +--:(MPLS) | | +--:(MPLS) {mpls-tunnel}?
| | +--rw mpls-encaplustion | | | +--rw mpls-encapsulation
| | +--rw label-operations* [label-oper-id] | | | +--rw label-operations* [label-oper-id]
| | +--rw label-oper-id uint32 | | | +--rw label-oper-id uint32
| | +--rw (label-actions)? | | | +--rw (label-actions)?
| | +--:(label-push) | | | +--:(label-push)
| | | +--rw label-push | | | | +--rw label-push
| | | +--rw label uint32 | | | | +--rw label uint32
| | | +--rw s-bit? boolean | | | | +--rw s-bit? boolean
| | | +--rw tc-value? uint8 | | | | +--rw tc-value? uint8
| | | +--rw ttl-value? uint8 | | | | +--rw ttl-value? uint8
| | +--:(label-swap) | | | +--:(label-swap)
| | +--rw label-swap | | | +--rw label-swap
| | +--rw out-label uint32 | | | +--rw out-label uint32
| | +--rw ttl-action? ttl-action-definition | | | +--rw ttl-action? ttl-action-definition
| +--rw interval? uint32 | | +--:(MPLS-over-UDP) {mpls-over-udp-tunnel}?
| +--rw max-packets-per-interval? uint32 | | +--rw mpls-over-udp-encaplustion
| +--rw max-payload-size? uint32 | | +--rw label-operations* [label-oper-id]
| +--rw average-packets-per-interval? uint32 | | | +--rw label-oper-id uint32
| +--rw average-payload-size? uint32 | | | +--rw (label-actions)?
| | | +--:(label-push)
| | | | +--rw label-push
| | | | +--rw label uint32
| | | | +--rw s-bit? boolean
| | | | +--rw tc-value? uint8
| | | | +--rw ttl-value? uint8
| | | +--:(label-swap)
| | | +--rw label-swap
| | | +--rw out-label uint32
| | | +--rw ttl-action? ttl-action-definition
| | +--rw source-port? inet:port-number
| | +--rw destination-port? inet:port-number
| | +--rw (address-family)?
| | +--:(IPv4)
| | | +--rw src-ipv4-address inet:ipv4-address
| | | +--rw dest-ipv4-address inet:ipv4-address
| | | +--rw protocol uint8
| | | +--rw ttl? uint8
| | | +--rw dscp? uint8
| | +--:(IPv6)
| | +--rw src-ipv6-address inet:ipv6-address
| | +--rw dest-ipv6-address inet:ipv6-address
| | +--rw next-header uint8
| | +--rw traffic-class? uint8
| | +--rw flow-label? inet:ipv6-flow-label
| | +--rw hop-limit? uint8
3.3. DetNet Transport Layer Configuration Attributes 3.3. DetNet Transport Layer Configuration Attributes
As defined in [I-D.ietf-detnet-architecture], DetNet transport layer As defined in [I-D.ietf-detnet-architecture], DetNet transport layer
optionally provides congestion protection for DetNet flows over paths optionally provides congestion protection for DetNet flows over paths
provided by the underlying network. Explicit route is another provided by the underlying network. Explicit route is another
mechanism that is used by DetNet to avoid temporary interruptions mechanism that is used by DetNet to avoid temporary interruptions
caused by the convergence of routing or bridging protocols, and it is caused by the convergence of routing or bridging protocols, and it is
also implemented at the DetNet transport layer. also implemented at the DetNet transport layer.
skipping to change at page 8, line 22 skipping to change at page 9, line 5
o Explicit path, existing explicit route mechanisms can be reused. o Explicit path, existing explicit route mechanisms can be reused.
For example, if Segment Routing (SR) tunnel is used as the For example, if Segment Routing (SR) tunnel is used as the
transport tunnel, the configuration is mainly at the ingress node transport tunnel, the configuration is mainly at the ingress node
of the transport layer; if the static MPLS tunnel is used as the of the transport layer; if the static MPLS tunnel is used as the
transport tunnel, the configurations need to be at every transit transport tunnel, the configurations need to be at every transit
node along the path; for pure IP based transport tunnel, it's node along the path; for pure IP based transport tunnel, it's
similar to the static MPLS case. similar to the static MPLS case.
The YANG module structure is shown below: The YANG module structure is shown below:
| +--rw transit-node +--:(transit-node)
| +--rw interval? uint32 | +--rw transit-node
| +--rw max-packets-per-interval? uint32 | +--rw interval? uint32
| +--rw max-payload-size? uint32 | +--rw max-packets-per-interval? uint32
| +--rw average-packets-per-interval? uint32 | +--rw max-payload-size? uint32
| +--rw average-payload-size? uint32 | +--rw average-packets-per-interval? uint32
| +--rw average-payload-size? uint32
The parameters for DetNet transport QoS are defined in Section 5. The parameters for DetNet transport QoS are defined in Section 5.
4. DetNet Configuration YANG Structure 4. DetNet Configuration YANG Structure
module: ietf-detnet-flow-config module: ietf-detnet-flow-config
+--rw detnet-flow +--rw detnet-flow
+--rw (detnet-node-role)? +--rw (detnet-node-role)?
+--:(transit-node) +--:(transit-node)
| +--rw transit-node | +--rw transit-node
| +--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
+--:(relay-node) +--:(relay-node) {detnet-mpls-dp-sol}?
| +--rw relay-node | +--rw relay-node
| +--rw name? string | +--rw name? string
| +--rw flow-rank | +--rw service-rank
| +--rw service-rank | +--rw in-segment* [in-segment-id]
| +--rw in-segment* [in-segment-id] | | +--rw in-segment-id uint32
| | +--rw in-segment-id uint32
| | +--rw (flow-type)?
| | | +--:(IP)
| | | | +--rw (ip-flow-type)?
| | | | | +--:(ipv4)
| | | | | | +--rw src-ipv4-address? inet:ipv4-address
| | | | | | +--rw dest-ipv4-address? inet:ipv4-address
| | | | | | +--rw dscp? uint8
| | | | | +--:(ipv6)
| | | | | +--rw src-ipv6-address? inet:ipv6-address
| | | | | +--rw dest-ipv6-address? inet:ipv6-address
| | | | | +--rw traffic-class? uint8
| | | | | +--rw flow-label? inet:ipv6-flow-label
| | | | +--rw source-port? inet:port-number
| | | | +--rw destination-port? inet:port-number
| | | | +--rw protocol? uint8
| | | +--:(MPLS)
| | | +--rw service-label uint32
| | +--rw service-function? service-function-type
| +--rw out-segment* [out-segment-id]
| +--rw out-segment-id uint32
| +--rw detnet-service-encapsulation
| | +--rw service-label uint32
| | +--rw control-word uint32
| +--rw detnet-transport-encapsulation
| +--rw (tunnel-type)?
| | +--:(IPv4)
| | | +--rw ipv4-encaplustion
| | | +--rw src-ipv4-address inet:ipv4-address
| | | +--rw dest-ipv4-address inet:ipv4-address
| | | +--rw protocol uint8
| | | +--rw ttl? uint8
| | | +--rw dscp? uint8
| | +--:(IPv6)
| | | +--rw ipv6-encaplustion
| | | +--rw src-ipv6-address inet:ipv6-address
| | | +--rw dest-ipv6-address inet:ipv6-address
| | | +--rw next-header uint8
| | | +--rw traffic-class? uint8
| | | +--rw flow-label? inet:ipv6-flow-label
| | | +--rw hop-limit? uint8
| | +--:(MPLS)
| | +--rw mpls-encaplustion
| | +--rw label-operations* [label-oper-id]
| | +--rw label-oper-id uint32
| | +--rw (label-actions)?
| | +--:(label-push)
| | | +--rw label-push
| | | +--rw label uint32
| | | +--rw s-bit? boolean
| | | +--rw tc-value? uint8
| | | +--rw ttl-value? uint8
| | +--:(label-swap)
| | +--rw label-swap
| | +--rw out-label uint32
| | +--rw ttl-action? ttl-action-definition
| +--rw interval? uint32
| +--rw max-packets-per-interval? uint32
| +--rw max-payload-size? uint32
| +--rw average-packets-per-interval? uint32
| +--rw average-payload-size? uint32
+--:(edge-node)
| +--rw edge-node
| +--rw client-flow* [flow-id]
| | +--rw flow-id uint32
| | +--rw (flow-type)? | | +--rw (flow-type)?
| | | +--:(l2-flow-identfication) | | | +--:(IP)
| | | | +--rw source-mac-address? yang:mac-address | | | | +--rw (ip-flow-type)?
| | | | +--rw destination-mac-address? yang:mac-address | | | | | +--:(ipv4)
| | | | +--rw ethertype? eth:ethertype | | | | | | +--rw src-ipv4-address? inet:ipv4-address
| | | | +--rw vlan-id? uint16 | | | | | | +--rw dest-ipv4-address? inet:ipv4-address
| | | | +--rw pcp | | | | | | +--rw dscp? uint8
| | | +--:(l3-flow-identification) | | | | | +--:(ipv6)
| | | +--rw (ip-flow-type)? | | | | | +--rw src-ipv6-address? inet:ipv6-address
| | | | +--:(ipv4) | | | | | +--rw dest-ipv6-address? inet:ipv6-address
| | | | | +--rw src-ipv4-address? inet:ipv4-address | | | | | +--rw traffic-class? uint8
| | | | | +--rw dest-ipv4-address? inet:ipv4-address | | | | | +--rw flow-label? inet:ipv6-flow-label
| | | | | +--rw dscp? uint8 | | | | +--rw source-port? inet:port-number
| | | | +--:(ipv6) | | | | +--rw destination-port? inet:port-number
| | | | +--rw src-ipv6-address? inet:ipv6-address | | | | +--rw protocol? uint8
| | | | +--rw dest-ipv6-address? inet:ipv6-address | | | +--:(MPLS)
| | | | +--rw traffic-class? uint8 | | | +--rw service-label uint32
| | | | +--rw flow-label? inet:ipv6-flow-label | | +--rw service-function? service-function-type
| | | +--rw source-port? inet:port-number | +--rw out-segment* [out-segment-id]
| | | +--rw destination-port? inet:port-number | +--rw out-segment-id uint32
| | | +--rw protocol? uint8 | +--rw detnet-service-encapsulation
| | +--rw traffic-specification | | +--rw service-label uint32
| | +--rw interval? uint32 | | +--rw control-word? uint32
| | +--rw max-packets-per-interval? uint32 | +--rw detnet-transport-encapsulation
| | +--rw max-payload-size? uint32 | +--rw (tunnel-type)?
| | +--rw average-packets-per-interval? uint32 | | +--:(IPv4) {ipv4-tunnel}?
| | +--rw average-payload-size? uint32 | | | +--rw ipv4-encapsulation
| +--rw detnet-service-instance | | | +--rw src-ipv4-address inet:ipv4-address
| +--rw name? string | | | +--rw dest-ipv4-address inet:ipv4-address
| +--rw flow-rank | | | +--rw protocol uint8
| +--rw service-rank | | | +--rw ttl? uint8
| +--rw in-segment* [in-segment-id] | | | +--rw dscp? uint8
| | +--rw in-segment-id uint32 | | +--:(IPv6) {ipv6-tunnel}?
| | +--rw (flow-type)? | | | +--rw ipv6-encapsulation
| | | +--:(IP) | | | +--rw src-ipv6-address inet:ipv6-address
| | | | +--rw (ip-flow-type)? | | | +--rw dest-ipv6-address inet:ipv6-address
| | | | | +--:(ipv4) | | | +--rw next-header uint8
| | | | | | +--rw src-ipv4-address? inet:ipv4-address | | | +--rw traffic-class? uint8
| | | | | | +--rw dest-ipv4-address? inet:ipv4-address | | | +--rw flow-label? inet:ipv6-flow-label
| | | | | | +--rw dscp? uint8 | | | +--rw hop-limit? uint8
| | | | | +--:(ipv6) | | +--:(MPLS) {mpls-tunnel}?
| | | | | +--rw src-ipv6-address? inet:ipv6-address | | | +--rw mpls-encapsulation
| | | | | +--rw dest-ipv6-address? inet:ipv6-address | | | +--rw label-operations* [label-oper-id]
| | | | | +--rw traffic-class? uint8 | | | +--rw label-oper-id uint32
| | | | | +--rw flow-label? inet:ipv6-flow-label | | | +--rw (label-actions)?
| | | | +--rw source-port? inet:port-number | | | +--:(label-push)
| | | | +--rw destination-port? inet:port-number | | | | +--rw label-push
| | | | +--rw protocol? uint8 | | | | +--rw label uint32
| | | +--:(MPLS) | | | | +--rw s-bit? boolean
| | | +--rw service-label uint32 | | | | +--rw tc-value? uint8
| | +--rw service-function? service-function-type | | | | +--rw ttl-value? uint8
| +--rw out-segment* [out-segment-id] | | | +--:(label-swap)
| +--rw out-segment-id uint32 | | | +--rw label-swap
| +--rw detnet-service-encapsulation | | | +--rw out-label uint32
| | +--rw service-label uint32 | | | +--rw ttl-action? ttl-action-definition
| | +--rw control-word uint32 | | +--:(MPLS-over-UDP) {mpls-over-udp-tunnel}?
| +--rw detnet-transport-encapsulation | | +--rw mpls-over-udp-encaplustion
| +--rw (tunnel-type)? | | +--rw label-operations* [label-oper-id]
| | +--:(IPv4) | | | +--rw label-oper-id uint32
| | | +--rw ipv4-encaplustion | | | +--rw (label-actions)?
| | | +--rw src-ipv4-address inet:ipv4-address | | | +--:(label-push)
| | | +--rw dest-ipv4-address inet:ipv4-address | | | | +--rw label-push
| | | +--rw protocol uint8 | | | | +--rw label uint32
| | | +--rw ttl? uint8 | | | | +--rw s-bit? boolean
| | | +--rw dscp? uint8 | | | | +--rw tc-value? uint8
| | +--:(IPv6) | | | | +--rw ttl-value? uint8
| | | +--rw ipv6-encaplustion | | | +--:(label-swap)
| | | +--rw src-ipv6-address inet:ipv6-address | | | +--rw label-swap
| | | +--rw dest-ipv6-address inet:ipv6-address | | | +--rw out-label uint32
| | | +--rw next-header uint8 | | | +--rw ttl-action? ttl-action-definition
| | | +--rw traffic-class? uint8 | | +--rw source-port? inet:port-number
| | | +--rw flow-label? inet:ipv6-flow-label | | +--rw destination-port? inet:port-number
| | | +--rw hop-limit? uint8 | | +--rw (address-family)?
| | +--:(MPLS) | | +--:(IPv4)
| | +--rw mpls-encaplustion | | | +--rw src-ipv4-address inet:ipv4-address
| | +--rw label-operations* [label-oper-id] | | | +--rw dest-ipv4-address inet:ipv4-address
| | +--rw label-oper-id uint32 | | | +--rw protocol uint8
| | +--rw (label-actions)? | | | +--rw ttl? uint8
| | +--:(label-push) | | | +--rw dscp? uint8
| | | +--rw label-push | | +--:(IPv6)
| | | +--rw label uint32 | | +--rw src-ipv6-address inet:ipv6-address
| | | +--rw s-bit? boolean | | +--rw dest-ipv6-address inet:ipv6-address
| | | +--rw tc-value? uint8 | | +--rw next-header uint8
| | | +--rw ttl-value? uint8 | | +--rw traffic-class? uint8
| | +--:(label-swap) | | +--rw flow-label? inet:ipv6-flow-label
| | +--rw label-swap | | +--rw hop-limit? uint8
| | +--rw out-label uint32 | +--rw interval? uint32
| | +--rw ttl-action? ttl-action-definition | +--rw max-packets-per-interval? uint32
| +--rw interval? uint32 | +--rw max-payload-size? uint32
| +--rw max-packets-per-interval? uint32 | +--rw average-packets-per-interval? uint32
| +--rw max-payload-size? uint32 | +--rw average-payload-size? uint32
| +--rw average-packets-per-interval? uint32 +--:(edge-node) {detnet-mpls-dp-sol}?
| +--rw average-payload-size? uint32 | +--rw edge-node
| +--rw (edge-node-type)?
| +--:(ingress-node)
| | +--rw client-flow* [flow-id]
| | | +--rw flow-id uint32
| | | +--rw flow-rank? boolean
| | | +--rw (flow-type)?
| | | | +--:(l2-flow)
| | | | | +--rw source-mac-address? yang:mac-address
| | | | | +--rw destination-mac-address? yang:mac-address
| | | | | +--rw ethertype? eth:ethertype
| | | | | +--rw vlan-id? uint16
| | | | | +--rw pcp
| | | | +--:(l3-flow)
| | | | +--rw (ip-flow-type)?
| | | | | +--:(ipv4)
| | | | | | +--rw src-ipv4-address? inet:ipv4-address
| | | | | | +--rw dest-ipv4-address? inet:ipv4-address
| | | | | | +--rw dscp? uint8
| | | | | +--:(ipv6)
| | | | | +--rw src-ipv6-address? inet:ipv6-address
| | | | | +--rw dest-ipv6-address? inet:ipv6-address
| | | | | +--rw traffic-class? uint8
| | | | | +--rw flow-label? inet:ipv6-flow-label
| | | | +--rw source-port? inet:port-number
| | | | +--rw destination-port? inet:port-number
| | | | +--rw protocol? uint8
| | | +--rw traffic-specification
| | | +--rw interval? uint32
| | | +--rw max-packets-per-interval? uint32
| | | +--rw max-payload-size? uint32
| | | +--rw average-packets-per-interval? uint32
| | | +--rw average-payload-size? uint32
| | +--rw service-function? service-function-type
| | +--rw sequence-number-generation-type? sequence-number-generation
| | +--rw sequence-number-length? uint8
| | +--rw out-segment* [out-segment-id]
| | +--rw out-segment-id uint32
| | +--rw detnet-service-encapsulation
| | | +--rw service-label uint32
| | | +--rw control-word? uint32
| | +--rw detnet-transport-encapsulation
| | +--rw (tunnel-type)?
| | | +--:(IPv4) {ipv4-tunnel}?
| | | | +--rw ipv4-encapsulation
| | | | +--rw src-ipv4-address inet:ipv4-address
| | | | +--rw dest-ipv4-address inet:ipv4-address
| | | | +--rw protocol uint8
| | | | +--rw ttl? uint8
| | | | +--rw dscp? uint8
| | | +--:(IPv6) {ipv6-tunnel}?
| | | | +--rw ipv6-encapsulation
| | | | +--rw src-ipv6-address inet:ipv6-address
| | | | +--rw dest-ipv6-address inet:ipv6-address
| | | | +--rw next-header uint8
| | | | +--rw traffic-class? uint8
| | | | +--rw flow-label? inet:ipv6-flow-label
| | | | +--rw hop-limit? uint8
| | | +--:(MPLS) {mpls-tunnel}?
| | | | +--rw mpls-encapsulation
| | | | +--rw label-operations* [label-oper-id]
| | | | +--rw label-oper-id uint32
| | | | +--rw (label-actions)?
| | | | +--:(label-push)
| | | | | +--rw label-push
| | | | | +--rw label uint32
| | | | | +--rw s-bit? boolean
| | | | | +--rw tc-value? uint8
| | | | | +--rw ttl-value? uint8
| | | | +--:(label-swap)
| | | | +--rw label-swap
| | | | +--rw out-label uint32
| | | | +--rw ttl-action? ttl-action-definition
| | | +--:(MPLS-over-UDP) {mpls-over-udp-tunnel}?
| | | +--rw mpls-over-udp-encaplustion
| | | +--rw label-operations* [label-oper-id]
| | | | +--rw label-oper-id uint32
| | | | +--rw (label-actions)?
| | | | +--:(label-push)
| | | | | +--rw label-push
| | | | | +--rw label uint32
| | | | | +--rw s-bit? boolean
| | | | | +--rw tc-value? uint8
| | | | | +--rw ttl-value? uint8
| | | | +--:(label-swap)
| | | | +--rw label-swap
| | | | +--rw out-label uint32
| | | | +--rw ttl-action? ttl-action-definition
| | | +--rw source-port? inet:port-number
| | | +--rw destination-port? inet:port-number
| | | +--rw (address-family)?
| | | +--:(IPv4)
| | | | +--rw src-ipv4-address inet:ipv4-address
| | | | +--rw dest-ipv4-address inet:ipv4-address
| | | | +--rw protocol uint8
| | | | +--rw ttl? uint8
| | | | +--rw dscp? uint8
| | | +--:(IPv6)
| | | +--rw src-ipv6-address inet:ipv6-address
| | | +--rw dest-ipv6-address inet:ipv6-address
| | | +--rw next-header uint8
| | | +--rw traffic-class? uint8
| | | +--rw flow-label? inet:ipv6-flow-label
| | | +--rw hop-limit? uint8
| | +--rw interval? uint32
| | +--rw max-packets-per-interval? uint32
| | +--rw max-payload-size? uint32
| | +--rw average-packets-per-interval? uint32
| | +--rw average-payload-size? uint32
| +--:(egress-node)
| +--rw in-segment* [in-segment-id]
| | +--rw in-segment-id uint32
| | +--rw (flow-type)?
| | | +--:(IP)
| | | | +--rw (ip-flow-type)?
| | | | | +--:(ipv4)
| | | | | | +--rw src-ipv4-address? inet:ipv4-address
| | | | | | +--rw dest-ipv4-address? inet:ipv4-address
| | | | | | +--rw dscp? uint8
| | | | | +--:(ipv6)
| | | | | +--rw src-ipv6-address? inet:ipv6-address
| | | | | +--rw dest-ipv6-address? inet:ipv6-address
| | | | | +--rw traffic-class? uint8
| | | | | +--rw flow-label? inet:ipv6-flow-label
| | | | +--rw source-port? inet:port-number
| | | | +--rw destination-port? inet:port-number
| | | | +--rw protocol? uint8
| | | +--:(MPLS)
| | | +--rw service-label uint32
| | +--rw service-function? service-function-type
| +--rw (tunnel-type)?
| | +--:(ipv4) {ipv4-tunnel}?
| | | +--rw ipv4-decap
| | | +--rw ipv4-decap tunnel-decap-action-def
| | | +--rw ttl-action? ttl-action-def
| | +--:(ipv6) {ipv6-tunnel}?
| | | +--rw ipv6-decap
| | | +--rw ipv6-decap tunnel-decap-action-def
| | | +--rw hop-limit-action? hop-limit-action-def
| | +--:(mpls) {mpls-tunnel}?
| | +--rw label-pop
| | +--rw label-pop mpls-label-action-def
| | +--rw ttl-action? ttl-action-def
| +--rw label-pop mpls-label-action-def
| +--rw ttl-action? ttl-action-def
+--:(end-station) +--:(end-station)
+--rw end-station +--rw end-station
+--rw client-flow* [flow-id] +--rw (edge-node-type)?
| +--rw flow-id uint32 +--:(ingress-node)
| +--rw (flow-type)? | +--rw client-flow* [flow-id]
| | +--:(l2-flow-identfication) | | +--rw flow-id uint32
| | | +--rw source-mac-address? yang:mac-address | | +--rw flow-rank? boolean
| | | +--rw destination-mac-address? yang:mac-address | | +--rw (flow-type)?
| | | +--rw ethertype? eth:ethertype | | | +--:(l2-flow)
| | | +--rw vlan-id? uint16 | | | | +--rw source-mac-address? yang:mac-address
| | | +--rw pcp | | | | +--rw destination-mac-address? yang:mac-address
| | +--:(l3-flow-identification) | | | | +--rw ethertype? eth:ethertype
| | +--rw (ip-flow-type)? | | | | +--rw vlan-id? uint16
| | | +--:(ipv4) | | | | +--rw pcp
| | | | +--rw src-ipv4-address? inet:ipv4-address | | | +--:(l3-flow)
| | | | +--rw dest-ipv4-address? inet:ipv4-address | | | +--rw (ip-flow-type)?
| | | | +--rw dscp? uint8 | | | | +--:(ipv4)
| | | +--:(ipv6) | | | | | +--rw src-ipv4-address? inet:ipv4-address
| | | +--rw src-ipv6-address? inet:ipv6-address | | | | | +--rw dest-ipv4-address? inet:ipv4-address
| | | +--rw dest-ipv6-address? inet:ipv6-address | | | | | +--rw dscp? uint8
| | | +--rw traffic-class? uint8 | | | | +--:(ipv6)
| | | +--rw flow-label? inet:ipv6-flow-label | | | | +--rw src-ipv6-address? inet:ipv6-address
| | +--rw source-port? inet:port-number | | | | +--rw dest-ipv6-address? inet:ipv6-address
| | +--rw destination-port? inet:port-number | | | | +--rw traffic-class? uint8
| | +--rw protocol? uint8 | | | | +--rw flow-label? inet:ipv6-flow-label
| +--rw traffic-specification | | | +--rw source-port? inet:port-number
| +--rw interval? uint32 | | | +--rw destination-port? inet:port-number
| +--rw max-packets-per-interval? uint32 | | | +--rw protocol? uint8
| +--rw max-payload-size? uint32 | | +--rw traffic-specification
| +--rw average-packets-per-interval? uint32 | | +--rw interval? uint32
| +--rw average-payload-size? uint32 | | +--rw max-packets-per-interval? uint32
+--rw detnet-service-instance | | +--rw max-payload-size? uint32
+--rw name? string | | +--rw average-packets-per-interval? uint32
+--rw flow-rank | | +--rw average-payload-size? uint32
+--rw service-rank | +--rw service-function? service-function-type
+--rw in-segment* [in-segment-id] | +--rw sequence-number-generation-type? sequence-number-generation
| +--rw in-segment-id uint32 | +--rw sequence-number-length? uint8
| +--rw (flow-type)? | +--rw out-segment* [out-segment-id]
| | +--:(IP) | +--rw out-segment-id uint32
| | | +--rw (ip-flow-type)? | +--rw detnet-service-encapsulation
| | | | +--:(ipv4) | | +--rw service-label uint32
| | | | | +--rw src-ipv4-address? inet:ipv4-address | | +--rw control-word? uint32
| | | | | +--rw dest-ipv4-address? inet:ipv4-address | +--rw detnet-transport-encapsulation
| | | | | +--rw dscp? uint8 | +--rw (tunnel-type)?
| | | | +--:(ipv6) | | +--:(IPv4) {ipv4-tunnel}?
| | | | +--rw src-ipv6-address? inet:ipv6-address | | | +--rw ipv4-encapsulation
| | | | +--rw dest-ipv6-address? inet:ipv6-address | | | +--rw src-ipv4-address inet:ipv4-address
| | | | +--rw traffic-class? uint8 | | | +--rw dest-ipv4-address inet:ipv4-address
| | | | +--rw flow-label? inet:ipv6-flow-label | | | +--rw protocol uint8
| | | +--rw source-port? inet:port-number | | | +--rw ttl? uint8
| | | +--rw destination-port? inet:port-number | | | +--rw dscp? uint8
| | | +--rw protocol? uint8 | | +--:(IPv6) {ipv6-tunnel}?
| | +--:(MPLS) | | | +--rw ipv6-encapsulation
| | +--rw service-label uint32 | | | +--rw src-ipv6-address inet:ipv6-address
| +--rw service-function? service-function-type | | | +--rw dest-ipv6-address inet:ipv6-address
+--rw out-segment* [out-segment-id] | | | +--rw next-header uint8
+--rw out-segment-id uint32 | | | +--rw traffic-class? uint8
+--rw detnet-service-encapsulation | | | +--rw flow-label? inet:ipv6-flow-label
| +--rw service-label uint32 | | | +--rw hop-limit? uint8
| +--rw control-word uint32 | | +--:(MPLS) {mpls-tunnel}?
+--rw detnet-transport-encapsulation | | | +--rw mpls-encapsulation
+--rw (tunnel-type)? | | | +--rw label-operations* [label-oper-id]
| +--:(IPv4) | | | +--rw label-oper-id uint32
| | +--rw ipv4-encaplustion | | | +--rw (label-actions)?
| | +--rw src-ipv4-address inet:ipv4-address | | | +--:(label-push)
| | +--rw dest-ipv4-address inet:ipv4-address | | | | +--rw label-push
| | +--rw protocol uint8 | | | | +--rw label uint32
| | +--rw ttl? uint8 | | | | +--rw s-bit? boolean
| | +--rw dscp? uint8 | | | | +--rw tc-value? uint8
| +--:(IPv6) | | | | +--rw ttl-value? uint8
| | +--rw ipv6-encaplustion | | | +--:(label-swap)
| | +--rw src-ipv6-address inet:ipv6-address | | | +--rw label-swap
| | +--rw dest-ipv6-address inet:ipv6-address | | | +--rw out-label uint32
| | +--rw next-header uint8 | | | +--rw ttl-action? ttl-action-definition
| | +--rw traffic-class? uint8 | | +--:(MPLS-over-UDP) {mpls-over-udp-tunnel}?
| | +--rw flow-label? inet:ipv6-flow-label | | +--rw mpls-over-udp-encaplustion
| | +--rw hop-limit? uint8 | | +--rw label-operations* [label-oper-id]
| +--:(MPLS) | | | +--rw label-oper-id uint32
| +--rw mpls-encaplustion | | | +--rw (label-actions)?
| +--rw label-operations* [label-oper-id] | | | +--:(label-push)
| +--rw label-oper-id uint32 | | | | +--rw label-push
| +--rw (label-actions)? | | | | +--rw label uint32
| +--:(label-push) | | | | +--rw s-bit? boolean
| | +--rw label-push | | | | +--rw tc-value? uint8
| | +--rw label uint32 | | | | +--rw ttl-value? uint8
| | +--rw s-bit? boolean | | | +--:(label-swap)
| | +--rw tc-value? uint8 | | | +--rw label-swap
| | +--rw ttl-value? uint8 | | | +--rw out-label uint32
| +--:(label-swap) | | | +--rw ttl-action? ttl-action-definition
| +--rw label-swap | | +--rw source-port? inet:port-number
| +--rw out-label uint32 | | +--rw destination-port? inet:port-number
| +--rw ttl-action? ttl-action-definition | | +--rw (address-family)?
+--rw interval? uint32 | | +--:(IPv4)
+--rw max-packets-per-interval? uint32 | | | +--rw src-ipv4-address inet:ipv4-address
+--rw max-payload-size? uint32 | | | +--rw dest-ipv4-address inet:ipv4-address
+--rw average-packets-per-interval? uint32 | | | +--rw protocol uint8
+--rw average-payload-size? uint32 | | | +--rw ttl? uint8
| | | +--rw dscp? uint8
| | +--:(IPv6)
| | +--rw src-ipv6-address inet:ipv6-address
| | +--rw dest-ipv6-address inet:ipv6-address
| | +--rw next-header uint8
| | +--rw traffic-class? uint8
| | +--rw flow-label? inet:ipv6-flow-label
| | +--rw hop-limit? uint8
| +--rw interval? uint32
| +--rw max-packets-per-interval? uint32
| +--rw max-payload-size? uint32
| +--rw average-packets-per-interval? uint32
| +--rw average-payload-size? uint32
+--:(egress-node)
+--rw in-segment* [in-segment-id]
| +--rw in-segment-id uint32
| +--rw (flow-type)?
| | +--:(IP)
| | | +--rw (ip-flow-type)?
| | | | +--:(ipv4)
| | | | | +--rw src-ipv4-address? inet:ipv4-address
| | | | | +--rw dest-ipv4-address? inet:ipv4-address
| | | | | +--rw dscp? uint8
| | | | +--:(ipv6)
| | | | +--rw src-ipv6-address? inet:ipv6-address
| | | | +--rw dest-ipv6-address? inet:ipv6-address
| | | | +--rw traffic-class? uint8
| | | | +--rw flow-label? inet:ipv6-flow-label
| | | +--rw source-port? inet:port-number
| | | +--rw destination-port? inet:port-number
| | | +--rw protocol? uint8
| | +--:(MPLS)
| | +--rw service-label uint32
| +--rw service-function? service-function-type
+--rw (tunnel-type)?
| +--:(ipv4) {ipv4-tunnel}?
| | +--rw ipv4-decap
| | +--rw ipv4-decap tunnel-decap-action-def
| | +--rw ttl-action? ttl-action-def
| +--:(ipv6) {ipv6-tunnel}?
| | +--rw ipv6-decap
| | +--rw ipv6-decap tunnel-decap-action-def
| | +--rw hop-limit-action? hop-limit-action-def
| +--:(mpls) {mpls-tunnel}?
| +--rw label-pop
| +--rw label-pop mpls-label-action-def
| +--rw ttl-action? ttl-action-def
+--rw label-pop mpls-label-action-def
+--rw ttl-action? ttl-action-def
5. DetNet Configuration YANG Model 5. DetNet Configuration YANG Model
<CODE BEGINS> file "ietf-detnet-config@20190114.yang" <CODE BEGINS> file "ietf-detnet@20190321.yang"
module ietf-detnet-config { module ietf-detnet{
yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-detnet";
namespace "urn:ietf:params:xml:ns:yang:ietf-detnet-flow-config"; //yang-version 1.1;
prefix "detnet-flow"; prefix "detnet-flow";
import ietf-yang-types { import ietf-yang-types {
prefix "yang"; prefix "yang";
} }
import ietf-interfaces {
prefix "if";
}
import ietf-inet-types{ import ietf-inet-types{
prefix "inet"; prefix "inet";
} }
import ietf-ethertypes { /* import ietf-ethertypes {
prefix "eth"; prefix "eth";
}*/
import ietf-routing-types {
prefix "rt-types";
} }
organization "IETF DetNet Working Group"; organization "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>
skipping to change at page 15, line 13 skipping to change at page 18, line 38
<mailto:mach.chen@huawei.com> <mailto:mach.chen@huawei.com>
Editor: Zhenqiang Li Editor: Zhenqiang Li
<lizhenqiang@chinamobile.com> <lizhenqiang@chinamobile.com>
Editor: Reshad Rahman Editor: Reshad Rahman
<rrahman@cisco.com>"; <rrahman@cisco.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 "2018-09-10" { revision "2018-09-10" {
description "initial revision"; description "initial revision";
reference "RFC XXXX: draft-geng-detnet-config-yang-05"; reference "RFC XXXX: draft-geng-detnet-config-yang-05";
} }
feature ipv4-tunnel {
description
"This feature means that a node support
IPv4 tunnel encapsulation capability.";
}
feature ipv6-tunnel {
description
"This feature means that a node support
IPv6 tunnel encapsulation capability.";
}
feature mpls-tunnel {
description
"This feature means that a node support
MPLS tunnel encapsulation capability.";
}
feature mpls-over-udp-tunnel {
description
"This feature means that a node supports
MPLS over UDP tunnel encapsulation
capability.";
}
feature detnet-mpls-dp-sol {
description
"This feature means that MPLS data plane
solution is supported.";
}
identity detnet-node-role { identity detnet-node-role {
description description
"base detnet-node-role"; "base detnet-node-role";
} }
identity end-station { identity end-station {
base detnet-node-role; base detnet-node-role;
description description
"Commonly called a 'host' in IETF documents, "Commonly called a 'host' in IETF documents,
and an 'end station' is IEEE 802 documents. and an 'end station' is IEEE 802 documents.
skipping to change at page 16, line 27 skipping to change at page 20, line 35
description description
"A node operating at the DetNet transport layer, "A node operating at the DetNet transport layer,
that utilizes link layer and/or network layer that utilizes link layer and/or network layer
switching across multiple links and/or switching across multiple links and/or
sub-networks to provide paths for DetNet sub-networks to provide paths for DetNet
service layer functions. Optionally provides service layer functions. Optionally provides
congestion protection over those paths. An MPLS congestion protection over those paths. An MPLS
LSR is an example of a DetNet transit node."; LSR is an example of a DetNet transit node.";
} }
identity tunnel-decap-action {
description
"Base identify from which all tunnel decap
actions are derived.
Tunnel decap actions include:
ipv4-decap - to decap an IPv4 tunnel,
ipv6-decap - to decap an IPv6 tunnel.";
}
identity ipv4-decap {
base "tunnel-decap-action";
description
"IPv4 tunnel decap.";
}
identity ipv6-decap {
base "tunnel-decap-action";
description
"IPv4 tunnel decap.";
}
typedef tunnel-decap-action-def {
type identityref {
base "tunnel-decap-action";
}
description
"Tunnel decap def.";
}
identity ttl-action { identity ttl-action {
description description
"Base identity from which all TTL "Base identity from which all TTL
actions are derived."; actions are derived.";
} }
identity no-action { identity no-action {
base "ttl-action"; base "ttl-action";
description description
"Do nothing regarding the TTL."; "Do nothing regarding the TTL.";
skipping to change at page 17, line 4 skipping to change at page 21, line 41
"Copy the TTL of the outer header "Copy the TTL of the outer header
to the inner header."; to the inner header.";
} }
identity decrease-and-copy-to-inner { identity decrease-and-copy-to-inner {
base "ttl-action"; base "ttl-action";
description description
"Decrease TTL by one and copy the TTL "Decrease TTL by one and copy the TTL
to the inner header."; to the inner header.";
} }
typedef ttl-action-definition {
typedef ttl-action-def {
type identityref { type identityref {
base "ttl-action"; base "ttl-action";
} }
description description
"TTL action definition."; "TTL action definition.";
} }
identity hop-limit-action {
description
"Base identity from which all hop limit
actions are derived.";
}
typedef hop-limit-action-def {
type identityref {
base "hop-limit-action";
}
description
"hop limit action definition.";
}
identity mpls-label-action {
description
"Base identity from which all MPLS label
operations are derived.
The MPLS label stack operations include:
push - to add a new label to a label stack,
pop - to pop the top label from a label stack,
swap - to exchange the top label of a label
stack with new label.";
}
identity label-push {
base "mpls-label-action";
description
"MPLS label stack operation: push.";
}
identity label-pop {
base "mpls-label-action";
description
"MPLS label stack operation: pop.";
}
identity label-swap {
base "mpls-label-action";
description
"MPLS label stack operation: swap.";
}
typedef mpls-label-action-def {
type identityref {
base "mpls-label-action";
}
description
"MPLS label action definition.";
}
identity detnet-transport-layer { identity detnet-transport-layer {
description description
"The layer that optionally provides congestion "The layer that optionally provides congestion
protection for DetNet flows over paths provided protection for DetNet flows over paths provided
by the underlying network."; by the underlying network.";
} }
identity detnet-service-layer { identity detnet-service-layer {
description description
"The layer at which service protection is "The layer at which service protection is
provided, either packet sequencing, replication, provided, either packet sequencing, replication,
and elimination or packet encoding"; and elimination or packet encoding";
} }
typedef service-function-type { typedef service-function-type {
type enumeration { type enumeration {
enum null {
description
"No service function is enabled.";
}
enum replication { enum replication {
description description
"A Packet Replication Function (PRF) replicates "A Packet Replication Function (PRF) replicates
DetNet flow packets and forwards them to one or DetNet flow packets and forwards them to one or
more next hops in the DetNet domain. The number more next hops in the DetNet domain. The number
of packet copies sent to each next hop is a of packet copies sent to each next hop is a
DetNet flow specific parameter at the node doing DetNet flow specific parameter at the node doing
the replication. PRF can be implemented by an the replication. PRF can be implemented by an
edge node, a relay node, or an end system"; edge node, a relay node, or an end system";
} }
skipping to change at page 18, line 30 skipping to change at page 24, line 26
"A combination of PEF, POF and PRF that can be "A combination of PEF, POF and PRF that can be
implemented by an edge node, a relay node, or implemented by an edge node, a relay node, or
an end system"; an end system";
} }
} }
description description
"DetNet service function and function combination "DetNet service function and function combination
types."; types.";
} }
typedef sequence-number-generation {
type enumeration {
enum "copy-from-app-flow" {
description
"DetNet flow sequence number is copied
from application flow.";
}
enum "generated-by-edge-node" {
description
"DetNet flow sequence number is generated
by DetNet edge node.";
}
}
description
"DetNet sequence number generation types.";
}
grouping detnet-sequence-number {
description
"DetNet sequence number.";
leaf sequence-number-generation-type {
type sequence-number-generation;
description
"The way on how sequence number is generated.";
}
leaf sequence-number-length {
type uint8;
description
"DetNet sequence number length.";
}
}
grouping detnet-transport-identifier {
description
"DetNet transport identifier";
}
grouping detnet-transport-qos { grouping detnet-transport-qos {
//Editor notes: this will be defined in a separate
// YANG model (detnet-transport-qos).
// More inputs and discussions are needed here.
description description
"DetNet transport tunnel QoS attributes."; "DetNet transport tunnel QoS attributes.";
uses traffic-specification; uses traffic-specification;
} }
grouping ipv4-header { grouping ipv4-header {
description description
"The IPv4 header encapsulation information."; "The IPv4 header encapsulation information.";
leaf src-ipv4-address { leaf src-ipv4-address {
type inet:ipv4-address; type inet:ipv4-address;
skipping to change at page 21, line 21 skipping to change at page 28, line 9
container label-swap { container label-swap {
description description
"Label swap operation."; "Label swap operation.";
leaf out-label { leaf out-label {
type uint32; type uint32;
mandatory true; mandatory true;
description description
"The out MPLS label."; "The out MPLS label.";
} }
leaf ttl-action { leaf ttl-action {
type ttl-action-definition; type ttl-action-def;
description description
"The label ttl actions: "The label ttl actions:
- No-action, or - No-action, or
- Copy to inner label,or - Copy to inner label,or
- Decrease (the in label) by 1 and - Decrease (the in label) by 1 and
copy to the out label."; copy to the out label.";
} }
} }
} }
} }
} }
} }
grouping mpls-detnet-header { grouping mpls-detnet-header {
description description
"The MPLS DetNet encapsulation header information."; "The MPLS DetNet encapsulation header information.";
leaf service-label { leaf service-label {
type uint32; type uint32;
mandatory true; mandatory true;
description description
"The service label."; "The service label of the DetNet header.";
} }
leaf control-word { leaf control-word {
type uint32; type uint32;
mandatory true;
description description
"The control word of the DetNet header."; "The control word of the DetNet header.";
} }
} }
grouping transport-tunnel-encap{
grouping udp-header {
description
"UDP header.";
leaf source-port {
type inet:port-number;
description
"The source port number.";
}
leaf destination-port {
type inet:port-number;
description
"The destination port number.";
}
}
grouping transport-tunnel-encap {
description description
"Defines the transport tunnel encapsulation "Defines the transport tunnel encapsulation
header."; header.";
choice tunnel-type { choice tunnel-type {
description description
"Tunnel type includes: IPv4, IPv6, MPLS."; "Tunnel type includes: IPv4, IPv6, MPLS,
MPLS over UDP tunnels.";
case IPv4 { case IPv4 {
if-feature ipv4-tunnel;
description description
"IPv4 tunnel."; "IPv4 tunnel.";
container ipv4-encapsulation { container ipv4-encapsulation {
description description
"IPv4 encapsulation."; "IPv4 encapsulation.";
uses ipv4-header; uses ipv4-header;
} }
} }
case IPv6 { case IPv6 {
if-feature ipv6-tunnel;
description description
"IPv6 tunnel."; "IPv6 tunnel.";
container ipv6-encapsulation { container ipv6-encapsulation {
description description
"IPv6 encapsulation."; "IPv6 encapsulation.";
uses ipv6-header; uses ipv6-header;
} }
} }
case MPLS { case MPLS {
if-feature mpls-tunnel;
description description
"MPLS tunnel."; "MPLS tunnel.";
container mpls-encapsulation { container mpls-encapsulation {
description description
"MPLS encapsulation."; "MPLS encapsulation.";
uses mpls-header; uses mpls-header;
} }
} }
case MPLS-over-UDP {
if-feature mpls-over-udp-tunnel;
description
"MPLS over UDP tunnel.";
container mpls-over-udp-encaplustion {
description
"MPLS over udp encapsulation.";
uses mpls-header;
uses udp-header;
choice address-family {
description
"According to IP address family(IPv4 and IPv6)
to apply corresponding IP header.";
case IPv4 {
description
"IPv4 address family.";
uses ipv4-header;
}
case IPv6 {
description
"IPv6 address family.";
uses ipv6-header;
}
}
}
}
}
}
grouping transport-tunnel-decap {
description
"Tunnel decapsulation inforamtion.";
choice tunnel-type {
description
"Nexthop tunnel type options.";
case ipv4 {
if-feature ipv4-tunnel;
container ipv4-decap {
description
"IPv4 decap.";
leaf ipv4-decap {
type tunnel-decap-action-def;
mandatory true;
description
"IPv4 decap operations.";
}
leaf ttl-action {
type ttl-action-def;
description
"The ttl actions:
no-action or copy to inner header.";
}
}
}
case ipv6 {
if-feature ipv6-tunnel;
container ipv6-decap {
description
"IPv6 decap.";
leaf ipv6-decap {
type tunnel-decap-action-def;
mandatory true;
description
"IPv6 decap operations.";
}
leaf hop-limit-action {
type hop-limit-action-def;
description
"The hop limit actions:
no-action or copy to inner header.";
}
}
}
case mpls {
if-feature mpls-tunnel;
container label-pop {
description
"MPLS decap.";
leaf label-pop {
type mpls-label-action-def;
mandatory true;
description
"Pop a label from the label stack.";
}
leaf ttl-action {
type ttl-action-def;
description
"The label ttl actions:
no-action or copy to inner label/header.";
}
}
}
} }
} }
grouping detnet-transport-instance { grouping detnet-transport-instance {
description description
"An instance of the DetNet transport layer, which "An instance of the DetNet transport layer, which
depends on the specific data plane that is used depends on the specific data plane that is used
as the underlay tunnel."; as the underlay tunnel.";
uses transport-tunnel-encap; uses transport-tunnel-encap;
uses detnet-transport-qos; uses detnet-transport-qos;
}
grouping ipv6-flow-identification {
description
"IPv6 flow identification.";
leaf src-ipv6-address {
type inet:ipv6-address;
description
"The source IP address of the header.";
}
leaf dest-ipv6-address {
type inet:ipv6-address;
description
"The destination IP address of the header.";
}
leaf traffic-class {
type uint8;
description
"The traffic class value of the header.";
}
leaf flow-label {
type inet:ipv6-flow-label;
description
"The flow label of the header.";
}
leaf source-port {
type inet:port-number;
description
"The source port number.";
}
leaf destination-port {
type inet:port-number;
description
"The destination port number.";
}
leaf protocol {
type uint8;
description
"The protocol id of the header.";
}
}
grouping ipv4-flow-identification {
description
"IPv4 flow identification.";
leaf src-ipv4-address {
type inet:ipv4-address;
description
"The source IP address of the header of
a DetNet flow.";
}
leaf dest-ipv4-address {
type inet:ipv4-address;
description
"The destination IP address of the header
of a DetNet flow.";
}
leaf dscp {
type uint8;
description
"The DSCP field of the header of a DetNet flow..";
}
leaf source-port {
type inet:port-number;
description
"The source port number.";
}
leaf destination-port {
type inet:port-number;
description
"The destination port number.";
}
leaf protocol {
type uint8;
description
"The protocol id of the header of a DetNet flow..";
}
} }
grouping ip-flow-identification { grouping ip-flow-identification {
description description
"IP flow identification."; "IP flow identification.";
choice ip-flow-type { choice ip-flow-type {
description description
"IP flow types: IPv4, IPv6."; "IP flow types: IPv4, IPv6.";
case ipv4 { case ipv4 {
description description
skipping to change at page 24, line 19 skipping to change at page 35, 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.";
} }
leaf protocol { leaf protocol {
type uint8; type uint8;
description description
"The protocol id of the header."; "The protocol id of the header.";
} }
} }
grouping l3-flow-identification { grouping l3-flow-identification {
description description
"Layer 3 flow identification in the DetNet "Layer 3 flow identification in a DetNet
domain."; domain.";
choice flow-type { choice flow-type {
description description
"L3 DetNet flow types: IP and MPLS."; "L3 DetNet flow types: IP and MPLS.";
case IP { case IP {
description description
"IP (IPv4 or IPv6) flow identification."; "IP (IPv4 or IPv6) flow identification.";
uses ip-flow-identification; uses ip-flow-identification;
} }
case MPLS { case MPLS {
description description
"MPLS flow identification."; "MPLS flow identification.";
leaf service-label { leaf service-label {
type uint32; type uint32;
mandatory true; mandatory true;
description description
"The service label."; "The service label of a DetNet flow.";
} }
} }
} }
} //l3-flow-identification } //l3-flow-identification
grouping in-segments { grouping in-segments {
description description
"From a receiving node point of view, In-segments "From a receiving node point of view, In-segments
are a set of instances of a DetNet flow at the are a set of instances of a DetNet flow at the
receiving node. This occurs when Packet Replication receiving node. This occurs when Packet Replication
skipping to change at page 26, line 18 skipping to change at page 36, line 50
container detnet-transport-encapsulation { container detnet-transport-encapsulation {
description description
"Each out-segment corresponds to a "Each out-segment corresponds to a
transport instance."; transport instance.";
uses detnet-transport-instance; uses detnet-transport-instance;
} }
} }
} }
grouping detnet-service-instance{ grouping detnet-service-instance {
description description
"An end-2-end DetNet service is consisted of "An end-2-end DetNet service is consisted of
multiple segments. The concept of segment is multiple segments. The concept of segment is
similar to PW segment. For DetNet, since the similar to PW segment. For DetNet, since the
existing of PREOF, there could be three cases: existing of PREOF, there could be three cases:
1 - One in-segment maps to multiple 1 - One in-segment maps to multiple
out-segments, when implement PRF; out-segments, when implement PRF;
2 - Multiple in-segments map to one 2 - Multiple in-segments map to one
out-segment, when implement PEF; out-segment, when implement PEF;
3 - Multiple in-segments map to multiple 3 - Multiple in-segments map to multiple
out-segments, when implement a combination out-segments, when implement a combination
of PEF and PRF."; of PEF and PRF.";
leaf name { leaf name {
type string; type string;
description description
"The name of the service instance. This MUST "The name of the service instance. This MUST
be unique across all service instances in be unique across all service instances in
a given network device."; a given network device.";
} }
container flow-rank{
description leaf service-rank {
"TBD based on the data plane solution."; type boolean;
}
container service-rank{
description description
"TBD based on the data plane solution."; "Service rank is used by the network to decide
which services can and cannot exist when network
resources reach their limit. Rank is used to help
to determine which services can be dropped (i.e.,
removed from node configuration) if a port of a
node becomes oversubscribed (e.g., due to network
reconfiguration). The true value is more important
than the false value (i.e., services with false
are dropped first).";
reference
"draft-ietf-detnet-flow-information-model";
} }
uses in-segments; uses in-segments;
uses out-segments; uses out-segments;
} }
grouping l2-flow-identification-at-uni { grouping l2-flow-identification-at-uni {
description description
"Layer 2 flow identification at UNI."; "Layer 2 flow identification at UNI.";
leaf source-mac-address { leaf source-mac-address {
type yang:mac-address; type yang:mac-address;
skipping to change at page 27, line 19 skipping to change at page 38, line 11
"The source MAC address used for "The source MAC address used for
flow identification."; flow identification.";
} }
leaf destination-mac-address { leaf destination-mac-address {
type yang:mac-address; type yang:mac-address;
description description
"The destination MAC address used for "The destination MAC address used for
flow identification."; flow identification.";
} }
leaf ethertype { /* leaf ethertype {
type eth:ethertype; type eth:ethertype;
description description
"The Ethernet Type (or Length) value represented "The Ethernet Type (or Length) value represented
in the canonical order defined by IEEE 802. in the canonical order defined by IEEE 802.
The canonical representation uses lowercase The canonical representation uses lowercase
characters."; characters.";
reference reference
"IEEE 802-2014 Clause 9.2"; "IEEE 802-2014 Clause 9.2";
} }
*/
leaf vlan-id { leaf vlan-id {
type uint16 { type uint16 {
range "1..4094"; range "1..4094";
} }
description description
"Vlan Identifier used for L2 flow identification."; "Vlan Identifier used for L2 flow identification.";
} }
container pcp { container pcp {
//Todo //Todo
skipping to change at page 28, line 19 skipping to change at page 39, line 12
parameters in network nodes."; parameters in network nodes.";
reference reference
"draft-ietf-detnet-flow-information-model"; "draft-ietf-detnet-flow-information-model";
leaf interval { leaf interval {
type uint32; type uint32;
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";
skipping to change at page 29, line 11 skipping to change at page 40, line 4
client flows map to a DetNet service instance."; client flows map to a DetNet service instance.";
list client-flow { list client-flow {
key "flow-id"; key "flow-id";
description description
"A list of client flows."; "A list of client flows.";
leaf flow-id { leaf flow-id {
type uint32; type uint32;
description description
"Flow identifier that is unique in a network "Flow identifier that is unique in a network
device for client flow identification"; device for client flow identification";
} }
choice flow-type{ leaf flow-rank {
type boolean;
description
"Flow rank is used by the network
to decide which flows can and cannot exist
when network resources reach their limit.
Rank is used to help to determine which flows
can be dropped (i.e., removed from node
configuration) if a port of a node becomes
oversubscribed (e.g., due to network
reconfiguration). The true value is more
important than the false value (i.e., flows
with false are dropped first).";
reference
"draft-ietf-detnet-flow-information-model";
}
choice flow-type {
description description
"Client flow type: layer 2 flow, layer 3 "Client flow type: layer 2 flow, layer 3
flow."; flow.";
case l2-flow-identfication { case l2-flow {
description description
"Ethernet flow identification."; "Ethernet flow identification.";
uses l2-flow-identification-at-uni; uses l2-flow-identification-at-uni;
} }
case l3-flow-identification { case l3-flow {
description description
"layer 3 flow identification, including "Layer 3 flow identification, including
IPv4,IPv6 and MPLS."; IPv4,IPv6 and MPLS.";
uses l3-flow-identification-at-uni; uses l3-flow-identification-at-uni;
} }
} }
container traffic-specification { container traffic-specification {
description description
"The traffic specification of the client flow."; "The traffic specification of the client flow.";
uses traffic-specification; uses traffic-specification;
} }
} }
} }
grouping detnet-service-decap {
description
"DetNet service decapsulation inforamtion.";
leaf service-label-pop {
type mpls-label-action-def;
mandatory true;
description
"Pop the DetNet service label.";
}
leaf ttl-action {
type ttl-action-def;
description
"The label ttl actions:
no-action or copy to inner label/header.";
}
}
grouping detnet-service-proxy-instance { grouping detnet-service-proxy-instance {
description description
"Maps between App-flows and DetNet flows"; "Mapping between App-flows and DetNet flows.";
uses client-flows-at-uni;
container detnet-service-instance { choice edge-node-type {
description description
"A DetNet service instance."; "There are two types of edge node: ingress node and
uses detnet-service-instance; egress node";
case ingress-node {
uses client-flows-at-uni;
leaf service-function {
type service-function-type;
description
"DetNet service function indication.";
}
uses detnet-sequence-number;
uses out-segments;
}
case egress-node {
uses in-segments;
uses transport-tunnel-decap;
uses detnet-service-decap;
}
} }
} }
container detnet-flow{ container detnet-flow {
description description
"DetNet flow configuration and status reporting."; "DetNet flow configuration and status reporting.";
choice detnet-node-role{ choice detnet-node-role{
description description
"Depends on the role of a node to configure "Depends on the role of a node to configure
corresponding flow parameters."; corresponding flow parameters.";
case transit-node {
case transit-node{
description description
"DetNet flow configuration parameters for "DetNet flow configuration parameters for
transit nodes."; transit nodes.";
container transit-node { container transit-node {
description description
"transit node container."; "Transit node container.";
uses detnet-transport-qos; uses detnet-transport-qos;
} }
} }
case relay-node{ case relay-node {
if-feature detnet-mpls-dp-sol;
description description
"DetNet flow configuration parameters for "DetNet flow configuration parameters for
relay nodes."; relay nodes.";
container relay-node { container relay-node {
description description
"Relay node container."; "Relay node container.";
uses detnet-service-instance; uses detnet-service-instance;
} }
} }
case edge-node{ case edge-node {
if-feature detnet-mpls-dp-sol;
description description
"DetNet flow configuration parameters for "DetNet flow configuration parameters for
edge nodes."; edge nodes.";
container edge-node { container edge-node {
description description
"Edge node container."; "Edge node container.";
uses detnet-service-proxy-instance; uses detnet-service-proxy-instance;
} }
} }
case end-station { case end-station {
skipping to change at page 31, line 5 skipping to change at page 42, line 46
description description
"End station container."; "End station container.";
uses detnet-service-proxy-instance; uses detnet-service-proxy-instance;
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
6. DetNet Configuration Model Classification 6. Open Issues
This section defines three classes of DetNet configuration model:
fully distributed configuration model, fully centralized
configuration model, hybrid configuration model, based on different
network architectures, showing how configuration information
exchanges between various entities in the network.
6.1. Fully Distributed Configuration Model
In a fully distributed configuration model, UNI information is
transmitted over DetNet UNI protocol from the user side to the
network side; then UNI information and network configuration
information propagate in the network over distributed control plane
protocol. For example:
1) IGP collects topology information and DetNet capabilities of
network([I-D.geng-detnet-info-distribution]);
2) Control Plane of the Edge Node(Ingress) receives a flow
establishment request from UNI and calculates a/some valid path(s);
3) Using RSVP-TE, Edge Node(Ingress) sends a PATH message with
explicit route. After receiving the PATH message, the other Edge
Node(Egress) sends a Resv message with distributed label and resource
reservation request.
Current distributed control plane protocol,e.g., RSVP-TE[RFC3209],
SRP[IEEE802.1Qcc], can only reserve bandwidth along the path, while
the configuration of a fine-grained schedule, e.g.,Time Aware
Shaping(TAS) defined in [IEEE802.1Qbv], is not supported.
The fully distributed configuration model is not covered by this
draft. It should be discussed in the future DetNet control plane
work.
6.2. Fully Centralized Configuration Model
In the fully centralized configuration model, UNI information is
transmitted from Centralized User Configuration (CUC) to Centralized
Network Configuration(CNC). Configurations of routers for DetNet
flows are performed by CNC with network management protocol. For
example:
1) CNC collects topology information and DetNet capability of network
through Netconf;
2) CNC receives a flow establishment request from UNI and calculates
a/some valid path(s);
3) CNC configures the devices along the path for flow transmission.
6.3. Hybrid Configuration Model
In the hybrid configuration model, controller and control plane
protocols work together to offer DetNet service, and there are a lot
of possible combinations. For example:
1) CNC collects topology information and DetNet capability of network
through IGP/BGP-LS;
2) CNC receives a flow establishment request from UNI and calculates
a/some valid path(s);
3) Based on the calculation result, CNC distributes flow path
information to Edge Node(Ingress) and other information(e.g.
replication/elimination) to the relevant nodes.
4) Using RSVP-TE, Edge Node(Ingress) sends a PATH message with
explicit route. After receiving the PATH message, the other Edge
Node(Egress) sends a Resv message with distributed label and resource
reservation request.
or
1) Controller collects topology information and DetNet capability of
network through IGP/BGP-LS;
2) Control Plane of Edge Node(Ingress) receives a flow establishment
request from UNI;
3) Edge Node(Ingress) sends the path establishment request to CNC
through PCEP;
4) After Calculation, CNC sends back the path information of the flow
to the Edge Node(Ingress) through PCEP;
5) Using RSVP-TE, Edge Node(Ingress) sends a PATH message with
explicit route. After receiving the PATH message, the other Edge
Node(Egress) sends a Resv message with distributed label and resource
reservation request.
There are also other variations that can be included in the hybrid
model. This draft can not coverer all the control plane data needed
in hybrid configuration models. Every solution has there own
mechanism and corresponding parameters to make it work.
Editor's Note:
1. There are a lot of optional DetNet configuration models, and
different scenario in different use case can choose one of them based
on its conditions. Maybe next step of the work is to pick up one or
more typical scenarios and give a practical solution.
2. [IEEE802.1Qcc] also defines three TSN configuration models:
fully-centralized model, fully-distributed model, centralized Network
/ distributed User Model. This section defines the configuration
model roughly the same, to keep the design of L2 and L3 in the same
structure. Hybrid configuration model is slightly different from the
'centralized Network / distributed User Model'. The hybrid
configuration model intends to contain more variations.
7. Open Issues
There are some open issues that are still under discussion: There are some open issues that are still under discussion:
o The Relationship with 802.1 TSN YANG models is TBD. TSN YANG o The Relationship with 802.1 TSN YANG models is TBD. TSN YANG
models include: P802.1Qcw, which defines TSN YANG for Qbv, Qbu, models include: P802.1Qcw, which defines TSN YANG for Qbv, Qbu,
and Qci, and P802.1CBcv, which defines YANG for 802.1CB. The and Qci, and P802.1CBcv, which defines YANG for 802.1CB. The
possible problem here is how to avoid possible overlap among yang possible problem here is how to avoid possible overlap among yang
models defined in IETF and IEEE. A common YANG model may be models defined in IETF and IEEE. A common YANG model may be
defined in the future to shared by both TSN and DetNet. More defined in the future to shared by both TSN and DetNet. More
discussion are needed here. discussion are needed here.
o How to support DetNet OAM is TBD. o How to support DetNet OAM is TBD.
These issues will be resolved in the following versions of the draft. These issues will be resolved in the following versions of the draft.
8. IANA Considerations 7. 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.
9. Security Considerations 8. Security Considerations
<TBD> <TBD>
10. Acknowledgements 9. Acknowledgements
11. References 10. References
11.1. Normative References 10.1. Normative References
[I-D.finn-detnet-bounded-latency] [I-D.finn-detnet-bounded-latency]
Finn, N., Boudec, J., Mohammadpour, E., Zhang, J., Varga, Finn, N., Boudec, J., Mohammadpour, E., Zhang, J., Varga,
B., and J. Farkas, "DetNet Bounded Latency", draft-finn- B., and J. Farkas, "DetNet Bounded Latency", draft-finn-
detnet-bounded-latency-02 (work in progress), October detnet-bounded-latency-03 (work in progress), March 2019.
2018.
[I-D.ietf-detnet-architecture] [I-D.ietf-detnet-architecture]
Finn, N., Thubert, P., Varga, B., and J. Farkas, Finn, N., Thubert, P., Varga, B., and J. Farkas,
"Deterministic Networking Architecture", draft-ietf- "Deterministic Networking Architecture", draft-ietf-
detnet-architecture-10 (work in progress), December 2018. detnet-architecture-12 (work in progress), March 2019.
[I-D.ietf-detnet-dp-sol-ip] [I-D.ietf-detnet-dp-sol-ip]
Korhonen, J. and B. Varga, "DetNet IP Data Plane Korhonen, J. and B. Varga, "DetNet IP Data Plane
Encapsulation", draft-ietf-detnet-dp-sol-ip-01 (work in Encapsulation", draft-ietf-detnet-dp-sol-ip-02 (work in
progress), October 2018. progress), March 2019.
[I-D.ietf-detnet-dp-sol-mpls] [I-D.ietf-detnet-dp-sol-mpls]
Korhonen, J. and B. Varga, "DetNet MPLS Data Plane Korhonen, J. and B. Varga, "DetNet MPLS Data Plane
Encapsulation", draft-ietf-detnet-dp-sol-mpls-01 (work in Encapsulation", draft-ietf-detnet-dp-sol-mpls-02 (work in
progress), October 2018. progress), March 2019.
[I-D.ietf-detnet-flow-information-model] [I-D.ietf-detnet-flow-information-model]
Farkas, J., Varga, B., Cummings, R., Jiang, Y., and Y. Farkas, J., Varga, B., Cummings, R., and Y. Jiang, "DetNet
Zha, "DetNet Flow Information Model", draft-ietf-detnet- Flow Information Model", draft-ietf-detnet-flow-
flow-information-model-02 (work in progress), October information-model-03 (work in progress), March 2019.
2018.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>. <https://www.rfc-editor.org/info/rfc2119>.
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
RFC 6991, DOI 10.17487/RFC6991, July 2013, RFC 6991, DOI 10.17487/RFC6991, July 2013,
<https://www.rfc-editor.org/info/rfc6991>. <https://www.rfc-editor.org/info/rfc6991>.
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
RFC 7950, DOI 10.17487/RFC7950, August 2016, RFC 7950, DOI 10.17487/RFC7950, August 2016,
<https://www.rfc-editor.org/info/rfc7950>. <https://www.rfc-editor.org/info/rfc7950>.
11.2. Informative References 10.2. Informative References
[I-D.geng-detnet-info-distribution] [I-D.geng-detnet-info-distribution]
Geng, X., Chen, M., and Z. Li, "IGP-TE Extensions for Geng, X., Chen, M., and Z. Li, "IGP-TE Extensions for
DetNet Information Distribution", draft-geng-detnet-info- DetNet Information Distribution", draft-geng-detnet-info-
distribution-03 (work in progress), October 2018. distribution-03 (work in progress), October 2018.
[I-D.ietf-detnet-use-cases] [I-D.ietf-detnet-use-cases]
Grossman, E., "Deterministic Networking Use Cases", draft- Grossman, E., "Deterministic Networking Use Cases", draft-
ietf-detnet-use-cases-20 (work in progress), December ietf-detnet-use-cases-20 (work in progress), December
2018. 2018.
[I-D.ietf-teas-yang-te] [I-D.ietf-teas-yang-te]
Saad, T., Gandhi, R., Liu, X., Beeram, V., Shah, H., and Saad, T., Gandhi, R., Liu, X., Beeram, V., and I. Bryskin,
I. Bryskin, "A YANG Data Model for Traffic Engineering "A YANG Data Model for Traffic Engineering Tunnels and
Tunnels and Interfaces", draft-ietf-teas-yang-te-17 (work Interfaces", draft-ietf-teas-yang-te-19 (work in
in progress), October 2018. progress), February 2019.
[I-D.ietf-teas-yang-te-topo] [I-D.ietf-teas-yang-te-topo]
Liu, X., Bryskin, I., Beeram, V., Saad, T., Shah, H., and Liu, X., Bryskin, I., Beeram, V., Saad, T., Shah, H., and
O. Dios, "YANG Data Model for Traffic Engineering (TE) O. Dios, "YANG Data Model for Traffic Engineering (TE)
Topologies", draft-ietf-teas-yang-te-topo-18 (work in Topologies", draft-ietf-teas-yang-te-topo-19 (work in
progress), June 2018. progress), February 2019.
[I-D.thubert-tsvwg-detnet-transport] [I-D.thubert-tsvwg-detnet-transport]
Thubert, P., "A Transport Layer for Deterministic Thubert, P., "A Transport Layer for Deterministic
Networks", draft-thubert-tsvwg-detnet-transport-01 (work Networks", draft-thubert-tsvwg-detnet-transport-01 (work
in progress), October 2017. in progress), October 2017.
[I-D.varga-detnet-service-model] [I-D.varga-detnet-service-model]
Varga, B. and J. Farkas, "DetNet Service Model", draft- Varga, B. and J. Farkas, "DetNet Service Model", draft-
varga-detnet-service-model-02 (work in progress), May varga-detnet-service-model-02 (work in progress), May
2017. 2017.
[IEEE802.1CB] [IEEE802.1CB]
"IEEE, "Frame Replication and Elimination for Reliability IEEE, "IEEE, "Frame Replication and Elimination for
(IEEE Draft P802.1CB)", 2017, Reliability (IEEE Draft P802.1CB)", 2017,
<http://www.ieee802.org/1/files/private/cb-drafts/>.", <http://www.ieee802.org/1/files/private/cb-drafts/>.",
2016. 2016.
[IEEE802.1Q-2014] [IEEE802.1Q-2014]
"IEEE, "IEEE Std 802.1Q Bridges and Bridged Networks", "IEEE, "IEEE Std 802.1Q Bridges and Bridged Networks",
2014, <http://ieeexplore.ieee.org/document/6991462/>.", 2014, <http://ieeexplore.ieee.org/document/6991462/>.",
2014. 2014.
[IEEE802.1Qbu] [IEEE802.1Qbu]
"IEEE, "IEEE Std 802.1Qbu Bridges and Bridged Networks - IEEE, "IEEE, "IEEE Std 802.1Qbu Bridges and Bridged
Amendment 26: Frame Preemption", 2016, Networks - Amendment 26: Frame Preemption", 2016,
<http://ieeexplore.ieee.org/document/7553415/>.", 2016. <http://ieeexplore.ieee.org/document/7553415/>.", 2016.
[IEEE802.1Qbv] [IEEE802.1Qbv]
"IEEE, "IEEE Std 802.1Qbu Bridges and Bridged Networks - "IEEE, "IEEE Std 802.1Qbu Bridges and Bridged Networks -
Amendment 25: Enhancements for Scheduled Traffic", 2015, Amendment 25: Enhancements for Scheduled Traffic", 2015,
<http://ieeexplore.ieee.org/document/7572858/>.", 2016. <http://ieeexplore.ieee.org/document/7572858/>.", 2016.
[IEEE802.1Qcc] [IEEE802.1Qcc]
"IEEE, "Stream Reservation Protocol (SRP) Enhancements and IEEE, "IEEE, "Stream Reservation Protocol (SRP)
Performance Improvements (IEEE Draft P802.1Qcc)", 2017, Enhancements and Performance Improvements (IEEE Draft
P802.1Qcc)", 2017,
<http://www.ieee802.org/1/files/private/cc-drafts/>.". <http://www.ieee802.org/1/files/private/cc-drafts/>.".
[IEEE802.1Qch] [IEEE802.1Qch]
"IEEE, "Cyclic Queuing and Forwarding (IEEE Draft IEEE, "IEEE, "Cyclic Queuing and Forwarding (IEEE Draft
P802.1Qch)", 2017, P802.1Qch)", 2017,
<http://www.ieee802.org/1/files/private/ch-drafts/>.", <http://www.ieee802.org/1/files/private/ch-drafts/>.",
2016. 2016.
[IEEE802.1Qci] [IEEE802.1Qci]
"IEEE, "Per-Stream Filtering and Policing (IEEE Draft IEEE, "IEEE, "Per-Stream Filtering and Policing (IEEE
P802.1Qci)", 2016, Draft P802.1Qci)", 2016,
<http://www.ieee802.org/1/files/private/ci-drafts/>.", <http://www.ieee802.org/1/files/private/ci-drafts/>.",
2016. 2016.
[RFC3209] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, V., [RFC3209] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, V.,
and G. Swallow, "RSVP-TE: Extensions to RSVP for LSP and G. Swallow, "RSVP-TE: Extensions to RSVP for LSP
Tunnels", RFC 3209, DOI 10.17487/RFC3209, December 2001, Tunnels", RFC 3209, DOI 10.17487/RFC3209, December 2001,
<https://www.rfc-editor.org/info/rfc3209>. <https://www.rfc-editor.org/info/rfc3209>.
[RFC4875] Aggarwal, R., Ed., Papadimitriou, D., Ed., and S. [RFC4875] Aggarwal, R., Ed., Papadimitriou, D., Ed., and S.
Yasukawa, Ed., "Extensions to Resource Reservation Yasukawa, Ed., "Extensions to Resource Reservation
 End of changes. 77 change blocks. 
572 lines changed or deleted 1030 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/