draft-ietf-detnet-yang-04.txt   draft-ietf-detnet-yang-05.txt 
Network Working Group X. Geng Network Working Group X. Geng
Internet-Draft M. Chen Internet-Draft M. Chen
Intended status: Standards Track Huawei Technologies Intended status: Standards Track Huawei Technologies
Expires: May 7, 2020 Y. Ryoo Expires: September 10, 2020 Y. Ryoo
ETRI ETRI
Z. Li Z. Li
China Mobile China Mobile
R. Rahman R. Rahman
Cisco Systems Cisco Systems
November 04, 2019 D. Fedyk
LabN Consulting, L.L.C.
March 09, 2020
Deterministic Networking (DetNet) Configuration YANG Model Deterministic Networking (DetNet) Configuration YANG Model
draft-ietf-detnet-yang-04 draft-ietf-detnet-yang-05
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 47 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 September 10, 2020.
This Internet-Draft will expire on May 7, 2020.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2020 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Terminologies . . . . . . . . . . . . . . . . . . . . . . . . 4 2. Terminologies . . . . . . . . . . . . . . . . . . . . . . . . 3
3. DetNet Service Module . . . . . . . . . . . . . . . . . . . . 4 3. DetNet Configuration Module . . . . . . . . . . . . . . . . . 3
3.1. Service Quality . . . . . . . . . . . . . . . . . . . . . 4 3.1. DetNet Appliction Flow Configuration Attributes . . . . . 3
3.2. Service Endpoints . . . . . . . . . . . . . . . . . . . . 4 3.2. DetNet Service Sub-layer Configuration Attributes . . . . 3
3.3. Service Encapsulation . . . . . . . . . . . . . . . . . . 5 3.3. DetNet Forwarding Sub-layer Configuration Attributes . . 3
4. DetNet Configuration Module . . . . . . . . . . . . . . . . . 5 4. DetNet YANG Structure Considerations . . . . . . . . . . . . 4
4.1. DetNet Appliction Flow Configuration Attributes . . . . . 5 5. DetNet Configuration YANG Structures . . . . . . . . . . . . 5
4.2. DetNet Service Sub-layer Configuration Attributes . . . . 5 6. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 18
4.3. DetNet Forwarding Sub-layer Configuration Attributes . . 6 7. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.4. DetNet Sub-network Configurations Attributes . . . . . . 6 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 35
5. Overview of DetNet YANG . . . . . . . . . . . . . . . . . . . 7 9. Security Considerations . . . . . . . . . . . . . . . . . . . 35
5.1. DetNet YANG Considerations . . . . . . . . . . . . . . . 7 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 35
5.1.1. DetNet Service YANG Considerations . . . . . . . . . 7 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.1.2. DetNet Configuration YANG Considerations . . . . . . 7 11.1. Normative References . . . . . . . . . . . . . . . . . . 35
5.2. DetNet YANG Structures . . . . . . . . . . . . . . . . . 8 11.2. Informative References . . . . . . . . . . . . . . . . . 36
5.2.1. DetNet Service YANG Structure . . . . . . . . . . . . 8 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 38
5.2.2. DetNet Configuration YANG Structure . . . . . . . . . 8
6. DetNet Service YANG Model . . . . . . . . . . . . . . . . . . 11
7. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 11
8. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 35
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 36
10. Security Considerations . . . . . . . . . . . . . . . . . . . 36
11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 36
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 36
12.1. Normative References . . . . . . . . . . . . . . . . . . 36
12.2. Informative References . . . . . . . . . . . . . . . . . 37
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 39
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 [I-D.ietf-detnet-architecture]. concepts of DetNet can be found in [RFC8655].
This document defines a YANG model for DetNet based on YANG data This document defines a YANG model for DetNet based on YANG data
types and modeling language defined in [RFC6991] and [RFC7950], which types and modeling language defined in [RFC6991] and [RFC7950].
includes DetNet service module and DetNet configuration module, and DetNet service, which is designed for describing the characteristics
YANG model for topology discovery is defined in of services being provided for application flows over a network, and
[I-D.ietf-detnet-topology-yang]. DetNet service module is designed DetNet configuration, which is designed for DetNet flow path
for describe characteristics of services being provided for establishment, flow status reporting, and DetNet functions
application flows over a network, while the DetNet configuration configuration in order to achieve end-to-end bounded latency and zero
module is designed for DetNet flow path establishment, flow status congestion loss, are both included in this document.
reporting, and DetNet functions configuration in order to achieve
end-to-end bounded latency and zero congestion loss.
DetNet Relay Transit Relay DetNet
End System Node Node Node End System
(T-PE) (S-PE) (LSR) (S-PE) (T-PE)
+----------+ +----------+
| Appl. |<------------ End to End Service ----------->| Appl. |
+----------+ +---------+ +---------+ +----------+
| Service |<--| Service |-- DetNet flow --| Service |-->| Service |
+----------+ +---------+ +----------+ +---------+ +----------+
|Forwarding| |Fwd| |Fwd| |Forwarding| |Fwd| |Fwd| |Forwarding|
+-------.--+ +-.-+ +-.-+ +----.---.-+ +-.-+ +-.-+ +---.------+
: Link : / ,-----. \ : Link : / ,-----. \
+........+ +-[ Sub ]-+ +......+ +-[ Sub ]-+
[Network] [Network]
`-----' `-----'
Figure 1: An End-to-end DetNet-Enabled Network
As showed in the picture, in an end-to-end DetNet-enabled network,
application flow is carried over a DetNet service and the DetNet
service is instantiated as different configuration parameters in
different network device along the path. DetNet service is an
abstract concept for service provider, and DetNet configuration needs
device specific attributes. YANG Models for DetNet service and
DetNet configuration are defined in detail respectively in section 3
and section 4.
Editor's notes:
Detnet YANG model and DetNet information model are supposed to keep
the same structure and describes the same attributes by different
methods. But the design of these two models are still under
discussion. The divergence will be settled in the following
versions.
2. Terminologies 2. Terminologies
This documents uses the terminologies defined in This documents uses the terminologies defined in [RFC8655].
[I-D.ietf-detnet-architecture].
3. DetNet Service Module
DetNet Service Module includes service quality attributes, service
endpoints attributes and service encapsulation type attributes, which
are defined in Section 3.1, 3.2, 3.3 respectively.
3.1. Service Quality
DetNet service quality includes the following attributes:
o Maximum Latency: MaxLatency is the maximum latency from Ingress to
Egress(es) for a single packet of the DetNet flow. MaxLatency is
specified as an integer number of nanoseconds.
o Maximum Latency Variation: MaxLatencyVariation is the difference
between the minimum and the maximum end-to-end one-way latency.
MaxLatencyVariation is specified as an integer number of
nanoseconds.
o Maximum Loss: MaxLoss defines the maximum Packet Loss Ratio (PLR)
parameter for the DetNet service between the Ingress and
Egress(es) of the DetNet domain.
o Maximum Consecutive Loss: Maximum Consecutive Loss defines the
consecutive packet loss number.
o Maximum Misordering: MaxMisordering describes the maximum number
of packets that can be received out of order.
3.2. Service Endpoints
Endpoints attribute defines the starting and termination reference
points of the DetNet flow by pointing to the ingress interface/node
and egress interface(s)/node(s).
3.3. Service Encapsulation
Service Encapsulation attribute defines the data plane type of the
DetNet service in a DetNet domain, e.g., MPLS, IP.
Editor's notes: DetNet service module is just defined in the document
and the yang model is still under work.
4. DetNet Configuration Module 3. DetNet Configuration Module
DetNet configuration module includes DetNet App-flow configuration, DetNet configuration module includes DetNet App-flow configuration,
DetNet Service Sub-layer configuration, and DetNet Forwarding Sub- DetNet Service Sub-layer configuration, and DetNet Forwarding Sub-
layer configuration and DetNet sub-network. The corresponding layer configuration. The corresponding attributes used in different
attributes used in different sub-layers are defined in Section 3.1, sub-layers are defined in Section 3.1, 3.2, 3.3 respectively.
3.2, 3.3, 3.4 respectively.
4.1. DetNet Appliction Flow Configuration Attributes 3.1. DetNet Appliction Flow Configuration Attributes
DetNet application flow is responsible for mapping between DetNet application flow is responsible for mapping between
application flows and DetNet flows at the edge node(egress/ingress application flows and DetNet flows at the edge node(egress/ingress
node). Where the application flows can be either layer 2 or layer 3 node). Where the application flows can be either layer 2 or layer 3
flows. To identify a flow at the User Network Interface (UNI), as flows. To map a flow at the User Network Interface (UNI), the
defined in [I-D.ietf-detnet-flow-information-model], the following corresponding attributes are defined in
flow attributes are introduced: [I-D.ietf-detnet-flow-information-model].
o DetNet L3 Flow Identification, refers to Section 7.1.1 of
[I-D.ietf-detnet-flow-information-model]
o DetNet L2 Flow Identification, refers to Section 7.1.2 of
[I-D.ietf-detnet-flow-information-model]
Application flow can also do flow filtering and policing at the
ingress to prevent the misbehaviored flows from going into the
network, which needs:
o Traffic Specification, refers to Section 7.2 of
[I-D.ietf-detnet-flow-information-model]
4.2. DetNet Service Sub-layer Configuration Attributes 3.2. DetNet Service Sub-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
sub-layer. To support these functions, the following service sub-layer. To support these functions, the following service
attributes need to be configured: attributes need to be configured:
o DetNet flow identification, refers to Section 8.1.3 of o DetNet flow identification
[I-D.ietf-detnet-flow-information-model].
o Service function indication, indicates which service function will o Service function indication, indicates which service function will
be invoked at a DetNet edge, relay node or end station. (DetNet be invoked at a DetNet edge, relay node or end station. (DetNet
tunnel initialization or termination are default functions in tunnel initialization or termination are default functions in
DetNet service layer, so there is no need for explicit DetNet service layer, so there is no need for explicit
indication.) indication). The corresponding arguments for service functions
also needs to be defined.
o Flow Rank, refers to Section 8.3 of
[I-D.ietf-detnet-flow-information-model].
o Service Rank, refers to Section 16 of
[I-D.ietf-detnet-flow-information-model].
o Service Sub-layer, refers to Section 4.5 and Section 4.6 of
[I-D.ietf-detnet-mpls]
o Forwarding Sub-layer, refers to Section 4.3 of
[I-D.ietf-detnet-ip] and Section 4.5 and Section 4.6 of
[I-D.ietf-detnet-mpls]
4.3. DetNet Forwarding Sub-layer Configuration Attributes 3.3. DetNet Forwarding Sub-layer Configuration Attributes
As defined in [I-D.ietf-detnet-architecture], DetNet forwarding sub- As defined in [RFC8655], DetNet forwarding sub-layer optionally
layer optionally provides congestion protection for DetNet flows over provides congestion protection for DetNet flows over paths provided
paths provided by the underlying network. Explicit route is another by the underlying network. Explicit route is another mechanism that
mechanism that is used by DetNet to avoid temporary interruptions is used by DetNet to avoid temporary interruptions caused by the
caused by the convergence of routing or bridging protocols, and it is convergence of routing or bridging protocols, and it is also
also implemented at the DetNet forwarding sub-layer. implemented at the DetNet forwarding sub-layer.
To support congestion protection and explicit route, the following To support congestion protection and explicit route, the following
transport layer related attributes are necessary: transport layer related attributes are necessary:
o Traffic Specification, refers to Section 7.2 of o Traffic Specification, refers to Section 7.2 of
[I-D.ietf-detnet-flow-information-model]. It may used for [I-D.ietf-detnet-flow-information-model]. It may used for
bandwidth reservation, flow shaping, filtering and policing. resource reservation, flow shaping, filtering and policing.
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.
4.4. DetNet Sub-network Configurations Attributes 4. DetNet YANG Structure Considerations
TBD
5. Overview of DetNet YANG
5.1. DetNet YANG Considerations
5.1.1. DetNet Service YANG Considerations
TBD
5.1.2. DetNet Configuration YANG Considerations
The picture shows that the general structure of the DetNet YANG The picture shows that the general structure of the DetNet YANG
Model: Model:
+-----------+ +-----------+
|ietf-detnet| |ietf-detnet|
+-----+-----+ +-----+-----+
| |
+-------------+------+--------+--------------+ +-------------+---------------+
| | | | | | |
+-----+-----+ +-----+-----+ +-------+------+ +-----+-----+ +-----+-----+ +-----+-----+ +-------+------+
| App Flows | |service s-l| |forwarding s-l| |sub-network| | App Flows | |service s-l| |forwarding s-l|
+-----------+ +-----------+ +--------------+ +-----------+ +-----------+ +-----------+ +--------------+
There are four instances in DetNet YANG Model: App-flow instance, There are three instances in DetNet YANG Model: App-flow instance,
service sub-layer instance, forwarding sub-layer instance and sub- service sub-layer instance and forwarding sub-layer instance,
network instance, respectively corresponding to four parts of DetNet respectively corresponding to four parts of DetNet functions defined
functions defined in section 3. In each instance, there are four in section 3. In each instance, there are four elements: name, in-
elements: name, in-segments, out-segments and operations, which segments, out-segments and operations, which means:
means:
o Name: indicates the key value of the instance identification. o Name: indicates the key value of the instance identification.
o In-segments: indicates the key value of identification, e.g., o In-segments: indicates the key value of identification, e.g.,
Layer 2 App flow identification, Layer 3 App flow identification Layer 2 App flow identification, Layer 3 App flow identification
and DetNet flow identification. and DetNet flow identification.
o Out-segments: indicates the information of DetNet processing(e.g., o Out-segments: indicates the information of DetNet processing(e.g.,
DetNet forwarding, DetNet header Encapsulation) and the mapping DetNet forwarding, DetNet header Encapsulation) and the mapping
relationship to the lower sub-layer/sub-network. relationship to the lower sub-layer/sub-network.
o Operations: indicates DetNet functions, e.g., DetNet forwarding o Operations: indicates DetNet functions, e.g., DetNet forwarding
functions, DetNet Service functions, DetNet Resource Reservation. functions, DetNet Service functions, DetNet Resource Reservation.
These elements are different when the technologies used for the These elements are different when the technologies used for the
specific instance is different. So this structure is abstract, which specific instance is different. So this structure is abstract, which
allows for different technology specifics as defined in different allows for different technology specifics as defined in different
data plane drafts. data plane drafts.
5.2. DetNet YANG Structures 5. DetNet Configuration YANG Structures
5.2.1. DetNet Service YANG Structure
TBD
5.2.2. DetNet Configuration YANG Structure
+--rw app-flow
| +--rw operations
| | +--rw sequence-number
| | +--rw sequence-number-generation-type? sequence-number-generation-type
| | +--rw sequence-number-length? uint8
| +--rw in-segments
| | +--rw app-flow-type? flow-type-ref
| | +--rw source-mac-address? yang:mac-address
| | +--rw destination-mac-address? yang:mac-address
| | +--rw ethertype? eth:ethertype
| | +--rw vlan-id? uint16
| | +--rw pcp? uint8
| | +--rw src-ipv4-prefix inet:ipv4-prefix
| | +--rw dest-ipv4-prefix inet:ipv4-prefix
| | +--rw protocol uint8
| | +--rw dscp? uint8
| | +--rw dscp-bitmask? uint8
| | +--rw src-ipv6-prefix inet:ipv6-prefix
| | +--rw dest-ipv6-prefix inet:ipv6-prefix
| | +--rw next-header uint8
| | +--rw traffic-class? uint8
| | +--rw traffic-class-bitmask? uint8
| | +--rw flow-label? inet:ipv6-flow-label
| | +--rw flow-label-flag? boolean
| | +--rw lower-source-port? inet:port-number
| | +--rw upper-source-port? inet:port-number
| | +--rw lower-destination-port? inet:port-number
| | +--rw upper-destination-port? inet:port-number
| +--rw out-segments
| +--rw detnet-service-sub-layer? lower-layer-ref
+--rw service-sub-layer
| +--rw operations
| | +--rw service-operation
| | | +--rw service-operation-type? service-operation-ref
| | +--rw service-protection
| | +--rw service-protection-type? service-protection-type
| +--rw in-segments
| | +--rw detnet-service-type? flow-type-ref
| | +--rw detnet-service-list* [detnet-service-index]
| | +--rw detnet-service-index uint8
| | +--rw src-ipv4-prefix inet:ipv4-prefix
| | +--rw dest-ipv4-prefix inet:ipv4-prefix
| | +--rw protocol uint8
| | +--rw dscp? uint8
| | +--rw dscp-bitmask? uint8
| | +--rw src-ipv6-prefix inet:ipv6-prefix
| | +--rw dest-ipv6-prefix inet:ipv6-prefix
| | +--rw next-header uint8
| | +--rw traffic-class? uint8
| | +--rw traffic-class-bitmask? uint8
| | +--rw flow-label? inet:ipv6-flow-label
| | +--rw flow-label-flag? boolean
| | +--rw mpls-flow-identification
| | +--rw platform-label-flag? boolean
| | +--rw non-platform-label-space
| | | +--rw incoming-interface? if:interface-ref
| | | +--rw non-platform-label-stack* [index]
| | | +--rw index uint8
| | | +--rw label? rt-type:mpls-label
| | | +--rw tc? uint8
| | +--rw platform-label-space
| | +--rw label? rt-type:mpls-label
| | +--rw tc? uint8
| +--rw out-segments
| +--rw detnet-service-processing-type? flow-type-ref
| +--rw detnet-service-encapsulation
| +--rw detnet-service-processing-list* [detnet-service-processing-index]
| +--rw detnet-service-processing-index uint32
| +--rw ip-flow
| | +--rw ipv4-flow
| | | +--rw src-ipv4-address inet:ipv4-address
| | | +--rw dest-ipv4-address inet:ipv4-address
| | | +--rw protocol uint8
| | | +--rw dscp? uint8
| | +--rw ipv6-flow
| | | +--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 l4-port-header
| | +--rw source-port? inet:port-number
| | +--rw destination-port? inet:port-number
| +--rw mpls-flow
| | +--rw detnet-mpls-label-stack* [index]
| | +--rw index uint8
| | +--rw label? rt-type:mpls-label
| | +--rw tc? uint8
| | +--rw s-bit? boolean
| | +--rw d-cw-encapsulate-flag? boolean
| +--rw detnet-forwarding-sub-layer-info
| +--rw detnet-forwarding-sub-layer? lower-layer-ref
+--rw forwarding-sub-layer
| +--rw operations
| | +--rw forwarding-operation
| | | +--rw forwarding-operation-type? forwarding-operation-ref
| | +--rw resource-allocate
| | | +--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 qos
| +--rw in-segments
| | +--rw detnet-forwarding-type? flow-type-ref
| | +--rw src-ipv4-prefix inet:ipv4-prefix
| | +--rw dest-ipv4-prefix inet:ipv4-prefix
| | +--rw protocol uint8
| | +--rw dscp? uint8
| | +--rw dscp-bitmask? uint8
| | +--rw src-ipv6-prefix inet:ipv6-prefix
| | +--rw dest-ipv6-prefix inet:ipv6-prefix
| | +--rw next-header uint8
| | +--rw traffic-class? uint8
| | +--rw traffic-class-bitmask? uint8
| | +--rw flow-label? inet:ipv6-flow-label
| | +--rw flow-label-flag? boolean
| | +--rw mpls-flow-identification
| | +--rw platform-label-flag? boolean
| | +--rw non-platform-label-space
| | | +--rw incoming-interface? if:interface-ref
| | | +--rw non-platform-label-stack* [index]
| | | +--rw index uint8
| | | +--rw label? rt-type:mpls-label
| | | +--rw tc? uint8
| | +--rw platform-label-space
| | +--rw label? rt-type:mpls-label
| | +--rw tc? uint8
| +--rw out-segments
| +--rw detnet-forwarding-processing-type? flow-type-ref
| +--rw natively-detnet-forwarding
| | +--rw ipv4-flow
| | | +--rw ipv4-next-hop-address? inet:ipv4-address
| | +--rw ipv6-flow
| | +--rw ipv6-next-hop-address? inet:ipv6-address
| +--rw detnet-forwarding-encapsulation
| +--rw ip-flow
| | +--rw ipv4-flow
| | | +--rw src-ipv4-address inet:ipv4-address
| | | +--rw dest-ipv4-address inet:ipv4-address
| | | +--rw protocol uint8
| | | +--rw dscp? uint8
| | +--rw ipv6-flow
| | | +--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 l4-port-header
| | +--rw source-port? inet:port-number
| | +--rw destination-port? inet:port-number
| +--rw mpls-flow
| | +--rw detnet-mpls-label-stack* [index]
| | +--rw index uint8
| | +--rw label? rt-type:mpls-label
| | +--rw tc? uint8
| | +--rw s-bit? boolean
| | +--rw d-cw-encapsulate-flag? boolean
| +--rw lower-layer-info
| +--rw lower-layer-type? flow-type-ref
| +--rw interface
| | +--rw outgoing-interface? if:interface-ref
| +--rw sub-layer
| +--rw sub-layer? lower-layer-ref
6. DetNet Service YANG Model module: ietf-detnet-config
+--rw app-flows
| +--rw app-flow* [name]
| +--rw name string
| +--rw end-points
| | +--rw source-endpoint? inet:ip-address
| | +--rw destination-endpoints* inet:ip-address
| +--rw app-flow-bidir-congruent? boolean
| +--rw traffic-requirements
| | +--rw min-bandwidth? uint64
| | +--rw max-latency? uint32
| | +--rw max-latency-variation? uint32
| | +--rw max-loss? uint8
| | +--rw max-consecutive-loss-tolerance? uint32
| | +--rw max-misordering? uint32
| +--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 in-segment
| | +--rw app-traffic* [interface]
| | +--rw interface if:interface-ref
| | +--rw (data-flow-type)?
| | +--:(tsn-app-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? uint8
| | +--:(ip-app-flow)
| | | +--rw src-ip-prefix? inet:ip-prefix
| | | +--rw dest-ip-prefix? inet:ip-prefix
| | | +--rw next-header? uint8
| | | +--rw traffic-class? uint8
| | | +--rw flow-label? inet:ipv6-flow-label
| | | +--rw source-port
| | | | +--rw (port-range-or-operator)?
| | | | +--:(range)
| | | | | +--rw lower-port inet:port-number
| | | | | +--rw upper-port inet:port-number
| | | | +--:(operator)
| | | | +--rw operator? operator
| | | | +--rw port inet:port-number
| | | +--rw destination-port
| | | | +--rw (port-range-or-operator)?
| | | | +--:(range)
| | | | | +--rw lower-port inet:port-number
| | | | | +--rw upper-port inet:port-number
| | | | +--:(operator)
| | | | +--rw operator? operator
| | | | +--rw port inet:port-number
| | | +--rw ipsec-spi? ipsec-spi
| | +--:(mpls-app-flow)
| | +--rw (label-space)?
| | +--:(non-platrom-label-space)
| | | +--rw mpls-label-stack
| | | +--rw entry* [id]
| | | +--rw id uint8
| | | +--rw label? rt-types:mpls-label
| | | +--rw ttl? uint8
| | | +--rw traffic-class? uint8
| | +--:(platform-label-space)
| | +--rw label? rt-types:mpls-label
| +--rw out-segment
| +--rw (next-hop-options)
| +--:(simple-next-hop)
| | +--rw (header-type)?
| | | +--:(detnet-mpls-header)
| | | | +--rw mpls-label-stack
| | | | +--rw entry* [id]
| | | | +--rw id uint8
| | | | +--rw label? rt-types:mpls-label
| | | | +--rw ttl? uint8
| | | | +--rw traffic-class? uint8
| | | +--:(detnet-ip-header)
| | | +--rw src-ip-address? inet:ip-address
| | | +--rw dest-ip-address? inet:ip-address
| | | +--rw next-header? uint8
| | | +--rw traffic-class? uint8
| | | +--rw flow-label? inet:ipv6-flow-label
| | | +--rw source-port? inet:port-number
| | | +--rw destination-port? inet:port-number
| | +--rw lower-layer* [index]
| | +--rw index uint8
| | +--rw (lower-layer-type)?
| | +--:(service-sub-layer)
| | | +--rw service-sub-layer? service-sub-layer-ref
| | +--:(forwarding-sub-layer)
| | | +--rw forwarding-sub-layer? forwarding-sub-layer-ref
| | +--:(sub-network)
| | | +--rw sub-network? sub-network-ref
| | +--:(interface)
| | +--rw outgoing-interface? if:interface-ref
| +--:(next-hop-list)
| +--rw next-hop-list
| +--rw next-hop* [hop-index]
| +--rw hop-index uint8
| +--rw (header-type)?
| | +--:(detnet-mpls-header)
| | | +--rw mpls-label-stack
| | | +--rw entry* [id]
| | | +--rw id uint8
| | | +--rw label? rt-types:mpls-label
| | | +--rw ttl? uint8
| | | +--rw traffic-class? uint8
| | +--:(detnet-ip-header)
| | +--rw src-ip-address? inet:ip-address
| | +--rw dest-ip-address? inet:ip-address
| | +--rw next-header? uint8
| | +--rw traffic-class? uint8
| | +--rw flow-label? inet:ipv6-flow-label
| | +--rw source-port? inet:port-number
| | +--rw destination-port? inet:port-number
| +--rw lower-layer* [index]
| +--rw index uint8
| +--rw (lower-layer-type)?
| +--:(service-sub-layer)
| | +--rw service-sub-layer? service-sub-layer-ref
| +--:(forwarding-sub-layer)
| | +--rw forwarding-sub-layer? forwarding-sub-layer-ref
| +--:(sub-network)
| | +--rw sub-network? sub-network-ref
| +--:(interface)
| +--rw outgoing-interface? if:interface-ref
+--rw service-sub-layer
| +--rw service-sub-layer-list* [name]
| +--rw name string
| +--ro service-id? uint16
| +--rw service-rank? uint8
| +--rw traffic-requirements
| | +--rw min-bandwidth? uint64
| | +--rw max-latency? uint32
| | +--rw max-latency-variation? uint32
| | +--rw max-loss? uint8
| | +--rw max-consecutive-loss-tolerance? uint32
| | +--rw max-misordering? uint32
| +--rw service-portection
| | +--rw service-protection-type? service-protection-type
| | +--rw sequence-number-length? sequence-number-field
| | +--rw sequence-number-window-size? uint32
| | +--rw sequence-number-generation? sequence-number-generation-type
| +--rw service-operation-type? service-operation-type
| +--rw in-segment
| | +--rw app-flow* app-flow-ref
| | +--rw incoming-detnet-flow* [incoming-index]
| | +--rw incoming-index uint8
| | +--rw (detnet-flow-type)?
| | +--:(ip-detnet-flow)
| | | +--rw src-ip-prefix? inet:ip-prefix
| | | +--rw dest-ip-prefix? inet:ip-prefix
| | | +--rw next-header? uint8
| | | +--rw traffic-class? uint8
| | | +--rw flow-label? inet:ipv6-flow-label
| | | +--rw source-port
| | | | +--rw (port-range-or-operator)?
| | | | +--:(range)
| | | | | +--rw lower-port inet:port-number
| | | | | +--rw upper-port inet:port-number
| | | | +--:(operator)
| | | | +--rw operator? operator
| | | | +--rw port inet:port-number
| | | +--rw destination-port
| | | | +--rw (port-range-or-operator)?
| | | | +--:(range)
| | | | | +--rw lower-port inet:port-number
| | | | | +--rw upper-port inet:port-number
| | | | +--:(operator)
| | | | +--rw operator? operator
| | | | +--rw port inet:port-number
| | | +--rw ipsec-spi? ipsec-spi
| | +--:(mpls-detnet-flow)
| | +--rw (label-space)?
| | +--:(non-platrom-label-space)
| | | +--rw mpls-label-stack
| | | +--rw entry* [id]
| | | +--rw id uint8
| | | +--rw label? rt-types:mpls-label
| | | +--rw ttl? uint8
| | | +--rw traffic-class? uint8
| | +--:(platform-label-space)
| | +--rw label? rt-types:mpls-label
| +--rw out-sergment
| +--rw (next-hop-options)
| | +--:(simple-next-hop)
| | | +--rw (header-type)?
| | | | +--:(detnet-mpls-header)
| | | | | +--rw mpls-label-stack
| | | | | +--rw entry* [id]
| | | | | +--rw id uint8
| | | | | +--rw label? rt-types:mpls-label
| | | | | +--rw ttl? uint8
| | | | | +--rw traffic-class? uint8
| | | | +--:(detnet-ip-header)
| | | | +--rw src-ip-address? inet:ip-address
| | | | +--rw dest-ip-address? inet:ip-address
| | | | +--rw next-header? uint8
| | | | +--rw traffic-class? uint8
| | | | +--rw flow-label? inet:ipv6-flow-label
| | | | +--rw source-port? inet:port-number
| | | | +--rw destination-port? inet:port-number
| | | +--rw lower-layer* [index]
| | | +--rw index uint8
| | | +--rw (lower-layer-type)?
| | | +--:(service-sub-layer)
| | | | +--rw service-sub-layer? service-sub-layer-ref
| | | +--:(forwarding-sub-layer)
| | | | +--rw forwarding-sub-layer? forwarding-sub-layer-ref
| | | +--:(sub-network)
| | | | +--rw sub-network? sub-network-ref
| | | +--:(interface)
| | | +--rw outgoing-interface? if:interface-ref
| | +--:(next-hop-list)
| | +--rw next-hop-list
| | +--rw next-hop* [hop-index]
| | +--rw hop-index uint8
| | +--rw (header-type)?
| | | +--:(detnet-mpls-header)
| | | | +--rw mpls-label-stack
| | | | +--rw entry* [id]
| | | | +--rw id uint8
| | | | +--rw label? rt-types:mpls-label
| | | | +--rw ttl? uint8
| | | | +--rw traffic-class? uint8
| | | +--:(detnet-ip-header)
| | | +--rw src-ip-address? inet:ip-address
| | | +--rw dest-ip-address? inet:ip-address
| | | +--rw next-header? uint8
| | | +--rw traffic-class? uint8
| | | +--rw flow-label? inet:ipv6-flow-label
| | | +--rw source-port? inet:port-number
| | | +--rw destination-port? inet:port-number
| | +--rw lower-layer* [index]
| | +--rw index uint8
| | +--rw (lower-layer-type)?
| | +--:(service-sub-layer)
| | | +--rw service-sub-layer? service-sub-layer-ref
| | +--:(forwarding-sub-layer)
| | | +--rw forwarding-sub-layer? forwarding-sub-layer-ref
| | +--:(sub-network)
| | | +--rw sub-network? sub-network-ref
| | +--:(interface)
| | +--rw outgoing-interface? if:interface-ref
| +--rw app-flow* app-flow-ref
+--rw forwarding-sub-layer
| +--rw forwarding-sub-layer-list* [name]
| +--rw name string
| +--rw resource-allocation
| | +--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 forwarding-operation-type? mpls-operations-type
| +--rw in-segment
| | +--rw service-sub-layer? service-sub-layer-ref
| | +--rw forwarding-traffic* [interface]
| | +--rw interface if:interface-ref
| | +--rw (detnet-flow-type)?
| | +--:(ip-detnet-flow)
| | | +--rw src-ip-prefix? inet:ip-prefix
| | | +--rw dest-ip-prefix? inet:ip-prefix
| | | +--rw next-header? uint8
| | | +--rw traffic-class? uint8
| | | +--rw flow-label? inet:ipv6-flow-label
| | | +--rw source-port
| | | | +--rw (port-range-or-operator)?
| | | | +--:(range)
| | | | | +--rw lower-port inet:port-number
| | | | | +--rw upper-port inet:port-number
| | | | +--:(operator)
| | | | +--rw operator? operator
| | | | +--rw port inet:port-number
| | | +--rw destination-port
| | | | +--rw (port-range-or-operator)?
| | | | +--:(range)
| | | | | +--rw lower-port inet:port-number
| | | | | +--rw upper-port inet:port-number
| | | | +--:(operator)
| | | | +--rw operator? operator
| | | | +--rw port inet:port-number
| | | +--rw ipsec-spi? ipsec-spi
| | +--:(mpls-detnet-flow)
| | +--rw (label-space)?
| | +--:(non-platrom-label-space)
| | | +--rw mpls-label-stack
| | | +--rw entry* [id]
| | | +--rw id uint8
| | | +--rw label? rt-types:mpls-label
| | | +--rw ttl? uint8
| | | +--rw traffic-class? uint8
| | +--:(platform-label-space)
| | +--rw label? rt-types:mpls-label
| +--rw out-segment
| +--rw (next-hop-options)
| | +--:(simple-next-hop)
| | | +--rw (header-type)?
| | | | +--:(detnet-mpls-header)
| | | | | +--rw mpls-label-stack
| | | | | +--rw entry* [id]
| | | | | +--rw id uint8
| | | | | +--rw label? rt-types:mpls-label
| | | | | +--rw ttl? uint8
| | | | | +--rw traffic-class? uint8
| | | | +--:(detnet-ip-header)
| | | | +--rw src-ip-address? inet:ip-address
| | | | +--rw dest-ip-address? inet:ip-address
| | | | +--rw next-header? uint8
| | | | +--rw traffic-class? uint8
| | | | +--rw flow-label? inet:ipv6-flow-label
| | | | +--rw source-port? inet:port-number
| | | | +--rw destination-port? inet:port-number
| | | +--rw lower-layer* [index]
| | | +--rw index uint8
| | | +--rw (lower-layer-type)?
| | | +--:(service-sub-layer)
| | | | +--rw service-sub-layer? service-sub-layer-ref
| | | +--:(forwarding-sub-layer)
| | | | +--rw forwarding-sub-layer? forwarding-sub-layer-ref
| | | +--:(sub-network)
| | | | +--rw sub-network? sub-network-ref
| | | +--:(interface)
| | | +--rw outgoing-interface? if:interface-ref
| | +--:(next-hop-list)
| | +--rw next-hop-list
| | +--rw next-hop* [hop-index]
| | +--rw hop-index uint8
| | +--rw (header-type)?
| | | +--:(detnet-mpls-header)
| | | | +--rw mpls-label-stack
| | | | +--rw entry* [id]
| | | | +--rw id uint8
| | | | +--rw label? rt-types:mpls-label
| | | | +--rw ttl? uint8
| | | | +--rw traffic-class? uint8
| | | +--:(detnet-ip-header)
| | | +--rw src-ip-address? inet:ip-address
| | | +--rw dest-ip-address? inet:ip-address
| | | +--rw next-header? uint8
| | | +--rw traffic-class? uint8
| | | +--rw flow-label? inet:ipv6-flow-label
| | | +--rw source-port? inet:port-number
| | | +--rw destination-port? inet:port-number
| | +--rw lower-layer* [index]
| | +--rw index uint8
| | +--rw (lower-layer-type)?
| | +--:(service-sub-layer)
| | | +--rw service-sub-layer? service-sub-layer-ref
| | +--:(forwarding-sub-layer)
| | | +--rw forwarding-sub-layer? forwarding-sub-layer-ref
| | +--:(sub-network)
| | | +--rw sub-network? sub-network-ref
| | +--:(interface)
| | +--rw outgoing-interface? if:interface-ref
| +--rw service-sub-layer? service-sub-layer-ref
+--rw sub-network
+--rw sub-network-list* [name]
+--rw name string
TBD grouping ip-header:
+--rw src-ip-address? inet:ip-address
+--rw dest-ip-address? inet:ip-address
+--rw next-header? uint8
+--rw traffic-class? uint8
+--rw flow-label? inet:ipv6-flow-label
+--rw source-port? inet:port-number
+--rw destination-port? inet:port-number
grouping l2-header:
+--rw source-mac-address? yang:mac-address
+--rw destination-mac-address? yang:mac-address
+--rw ethertype? eth:ethertype
+--rw vlan-id? uint16
+--rw pcp? uint8
grouping destination-ip-port-identification:
+--rw destination-port
+--rw (port-range-or-operator)?
+--:(range)
| +--rw lower-port inet:port-number
| +--rw upper-port inet:port-number
+--:(operator)
+--rw operator? operator
+--rw port inet:port-number
grouping source-ip-port-identification:
+--rw source-port
+--rw (port-range-or-operator)?
+--:(range)
| +--rw lower-port inet:port-number
| +--rw upper-port inet:port-number
+--:(operator)
+--rw operator? operator
+--rw port inet:port-number
grouping ip-flow-identification:
+--rw src-ip-prefix? inet:ip-prefix
+--rw dest-ip-prefix? inet:ip-prefix
+--rw next-header? uint8
+--rw traffic-class? uint8
+--rw flow-label? inet:ipv6-flow-label
+--rw source-port
| +--rw (port-range-or-operator)?
| +--:(range)
| | +--rw lower-port inet:port-number
| | +--rw upper-port inet:port-number
| +--:(operator)
| +--rw operator? operator
| +--rw port inet:port-number
+--rw destination-port
| +--rw (port-range-or-operator)?
| +--:(range)
| | +--rw lower-port inet:port-number
| | +--rw upper-port inet:port-number
| +--:(operator)
| +--rw operator? operator
| +--rw port inet:port-number
+--rw ipsec-spi? ipsec-spi
grouping mpls-flow-identification:
+--rw (label-space)?
+--:(non-platrom-label-space)
| +--rw mpls-label-stack
| +--rw entry* [id]
| +--rw id uint8
| +--rw label? rt-types:mpls-label
| +--rw ttl? uint8
| +--rw traffic-class? uint8
+--:(platform-label-space)
+--rw label? rt-types:mpls-label
grouping traffic-specification:
+--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
grouping traffic-requirements:
+--rw traffic-requirements
+--rw min-bandwidth? uint64
+--rw max-latency? uint32
+--rw max-latency-variation? uint32
+--rw max-loss? uint8
+--rw max-consecutive-loss-tolerance? uint32
+--rw max-misordering? uint32
grouping data-flow-spec:
+--rw (data-flow-type)?
+--:(tsn-app-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? uint8
+--:(ip-app-flow)
| +--rw src-ip-prefix? inet:ip-prefix
| +--rw dest-ip-prefix? inet:ip-prefix
| +--rw next-header? uint8
| +--rw traffic-class? uint8
| +--rw flow-label? inet:ipv6-flow-label
| +--rw source-port
| | +--rw (port-range-or-operator)?
| | +--:(range)
| | | +--rw lower-port inet:port-number
| | | +--rw upper-port inet:port-number
| | +--:(operator)
| | +--rw operator? operator
| | +--rw port inet:port-number
| +--rw destination-port
| | +--rw (port-range-or-operator)?
| | +--:(range)
| | | +--rw lower-port inet:port-number
| | | +--rw upper-port inet:port-number
| | +--:(operator)
| | +--rw operator? operator
| | +--rw port inet:port-number
| +--rw ipsec-spi? ipsec-spi
+--:(mpls-app-flow)
+--rw (label-space)?
+--:(non-platrom-label-space)
| +--rw mpls-label-stack
| +--rw entry* [id]
| +--rw id uint8
| +--rw label? rt-types:mpls-label
| +--rw ttl? uint8
| +--rw traffic-class? uint8
+--:(platform-label-space)
+--rw label? rt-types:mpls-label
grouping detnet-flow-spec:
+--rw (detnet-flow-type)?
+--:(ip-detnet-flow)
| +--rw src-ip-prefix? inet:ip-prefix
| +--rw dest-ip-prefix? inet:ip-prefix
| +--rw next-header? uint8
| +--rw traffic-class? uint8
| +--rw flow-label? inet:ipv6-flow-label
| +--rw source-port
| | +--rw (port-range-or-operator)?
| | +--:(range)
| | | +--rw lower-port inet:port-number
| | | +--rw upper-port inet:port-number
| | +--:(operator)
| | +--rw operator? operator
| | +--rw port inet:port-number
| +--rw destination-port
| | +--rw (port-range-or-operator)?
| | +--:(range)
| | | +--rw lower-port inet:port-number
| | | +--rw upper-port inet:port-number
| | +--:(operator)
| | +--rw operator? operator
| | +--rw port inet:port-number
| +--rw ipsec-spi? ipsec-spi
+--:(mpls-detnet-flow)
+--rw (label-space)?
+--:(non-platrom-label-space)
| +--rw mpls-label-stack
| +--rw entry* [id]
| +--rw id uint8
| +--rw label? rt-types:mpls-label
| +--rw ttl? uint8
| +--rw traffic-class? uint8
+--:(platform-label-space)
+--rw label? rt-types:mpls-label
grouping app-flows-ref:
+--rw app-flow* app-flow-ref
grouping incoming-detnet-flows:
+--rw incoming-detnet-flow* [incoming-index]
+--rw incoming-index uint8
+--rw (detnet-flow-type)?
+--:(ip-detnet-flow)
| +--rw src-ip-prefix? inet:ip-prefix
| +--rw dest-ip-prefix? inet:ip-prefix
| +--rw next-header? uint8
| +--rw traffic-class? uint8
| +--rw flow-label? inet:ipv6-flow-label
| +--rw source-port
| | +--rw (port-range-or-operator)?
| | +--:(range)
| | | +--rw lower-port inet:port-number
| | | +--rw upper-port inet:port-number
| | +--:(operator)
| | +--rw operator? operator
| | +--rw port inet:port-number
| +--rw destination-port
| | +--rw (port-range-or-operator)?
| | +--:(range)
| | | +--rw lower-port inet:port-number
| | | +--rw upper-port inet:port-number
| | +--:(operator)
| | +--rw operator? operator
| | +--rw port inet:port-number
| +--rw ipsec-spi? ipsec-spi
+--:(mpls-detnet-flow)
+--rw (label-space)?
+--:(non-platrom-label-space)
| +--rw mpls-label-stack
| +--rw entry* [id]
| +--rw id uint8
| +--rw label? rt-types:mpls-label
| +--rw ttl? uint8
| +--rw traffic-class? uint8
+--:(platform-label-space)
+--rw label? rt-types:mpls-label
grouping detnet-header:
+--rw (header-type)?
+--:(detnet-mpls-header)
| +--rw mpls-label-stack
| +--rw entry* [id]
| +--rw id uint8
| +--rw label? rt-types:mpls-label
| +--rw ttl? uint8
| +--rw traffic-class? uint8
+--:(detnet-ip-header)
+--rw src-ip-address? inet:ip-address
+--rw dest-ip-address? inet:ip-address
+--rw next-header? uint8
+--rw traffic-class? uint8
+--rw flow-label? inet:ipv6-flow-label
+--rw source-port? inet:port-number
+--rw destination-port? inet:port-number
grouping lower-layer-ref:
+--rw (lower-layer-type)?
+--:(service-sub-layer)
| +--rw service-sub-layer? service-sub-layer-ref
+--:(forwarding-sub-layer)
| +--rw forwarding-sub-layer? forwarding-sub-layer-ref
+--:(sub-network)
| +--rw sub-network? sub-network-ref
+--:(interface)
+--rw outgoing-interface? if:interface-ref
grouping detnet-next-hop-content:
+--rw (next-hop-options)
+--:(simple-next-hop)
| +--rw (header-type)?
| | +--:(detnet-mpls-header)
| | | +--rw mpls-label-stack
| | | +--rw entry* [id]
| | | +--rw id uint8
| | | +--rw label? rt-types:mpls-label
| | | +--rw ttl? uint8
| | | +--rw traffic-class? uint8
| | +--:(detnet-ip-header)
| | +--rw src-ip-address? inet:ip-address
| | +--rw dest-ip-address? inet:ip-address
| | +--rw next-header? uint8
| | +--rw traffic-class? uint8
| | +--rw flow-label? inet:ipv6-flow-label
| | +--rw source-port? inet:port-number
| | +--rw destination-port? inet:port-number
| +--rw lower-layer* [index]
| +--rw index uint8
| +--rw (lower-layer-type)?
| +--:(service-sub-layer)
| | +--rw service-sub-layer? service-sub-layer-ref
| +--:(forwarding-sub-layer)
| | +--rw forwarding-sub-layer? forwarding-sub-layer-ref
| +--:(sub-network)
| | +--rw sub-network? sub-network-ref
| +--:(interface)
| +--rw outgoing-interface? if:interface-ref
+--:(next-hop-list)
+--rw next-hop-list
+--rw next-hop* [hop-index]
+--rw hop-index uint8
+--rw (header-type)?
| +--:(detnet-mpls-header)
| | +--rw mpls-label-stack
| | +--rw entry* [id]
| | +--rw id uint8
| | +--rw label? rt-types:mpls-label
| | +--rw ttl? uint8
| | +--rw traffic-class? uint8
| +--:(detnet-ip-header)
| +--rw src-ip-address? inet:ip-address
| +--rw dest-ip-address? inet:ip-address
| +--rw next-header? uint8
| +--rw traffic-class? uint8
| +--rw flow-label? inet:ipv6-flow-label
| +--rw source-port? inet:port-number
| +--rw destination-port? inet:port-number
+--rw lower-layer* [index]
+--rw index uint8
+--rw (lower-layer-type)?
+--:(service-sub-layer)
| +--rw service-sub-layer? service-sub-layer-ref
+--:(forwarding-sub-layer)
| +--rw forwarding-sub-layer? forwarding-sub-layer-ref
+--:(sub-network)
| +--rw sub-network? sub-network-ref
+--:(interface)
+--rw outgoing-interface? if:interface-ref
7. DetNet Configuration YANG Model 6. DetNet Configuration YANG Model
<CODE BEGINS> file ietf-detnet-config@20190324.yang
module ietf-detnet-config { module ietf-detnet-config {
namespace "urn:ietf:params:xml:ns:yang:ietf-detnet-config"; namespace "urn:ietf:params:xml:ns:yang:ietf-detnet-config";
prefix "ietf-detnet"; prefix "ietf-detnet";
import ietf-yang-types { import ietf-yang-types {
prefix "yang"; prefix "yang";
} }
import ietf-inet-types{ import ietf-inet-types{
prefix "inet"; prefix "inet";
} }
import ietf-ethertypes { import ietf-ethertypes {
prefix "eth"; prefix "eth";
} }
import ietf-routing-types { import ietf-routing-types {
prefix "rt-type"; prefix "rt-types";
}
import ietf-routing {
prefix "rt";
} }
import ietf-packet-fields {
prefix "packet-fields";
}
import ietf-interfaces { import ietf-interfaces {
prefix "if"; prefix "if";
} }
organization "IETF DetNet Working Group"; organization "IETF DetNet Working Group";
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
skipping to change at page 12, line 44 skipping to change at page 20, line 4
<mailto:lizhenqiang@chinamobile.com> <mailto:lizhenqiang@chinamobile.com>
Editor: Reshad Rahman Editor: Reshad Rahman
<mailto:rrahman@cisco.com> <mailto:rrahman@cisco.com>
Editor: Yeoncheol Ryoo Editor: Yeoncheol Ryoo
<mailto:dbduscjf@etri.re.kr>"; <mailto:dbduscjf@etri.re.kr>";
description description
"This YANG module describes the parameters needed "This YANG module describes the parameters needed
for DetNet flow configuration and flow status reporting"; for DetNet flow configuration and flow status
reporting";
revision 2019-03-24 { revision 2020-03-04 {
description "initial revision"; description "initial revision";
reference "RFC XXXX: draft-ietf-detnet-yang-02"; reference "RFC XXXX: draft-ietf-detnet-yang-02";
} }
identity ttl-action { typedef app-flow-ref {
description type leafref {
"Base identity from which all TTL path "/ietf-detnet:app-flows"
actions are derived"; + "/ietf-detnet:app-flow"
} + "/ietf-detnet:name";
identity no-action {
base "ttl-action";
description
"Do nothing regarding the TTL";
}
identity copy-to-inner {
base "ttl-action";
description
"Copy the TTL of the outer header
to the inner header";
}
identity decrease-and-copy-to-inner {
base "ttl-action";
description
"Decrease TTL by one and copy the TTL
to the inner header";
}
identity config-type {
description
"Base identity from which all configuration instances are derived";
}
identity App-flow {
base "config-type";
description
"App-flow configuration";
}
identity service-sub-layer {
base "config-type";
description
"A DetNet MPLS or IP service sub-layer configuration";
}
identity forwarding-sub-layer {
base "config-type";
description
"A DetNet MPLS or IP forwarding sub-layer configuration";
}
identity tsn-sub-network {
base "config-type";
description
"A TSN sub-net configuration";
}
identity flow-type {
description
"Base identity from which all flow type are derived";
}
identity ipv4 {
base "flow-type";
description
"An IPv4 flow";
}
identity ipv6 {
base "flow-type";
description
"An IPv6 flow";
}
identity mpls {
base "flow-type";
description
"An MPLS flow";
}
identity l2 {
base "flow-type";
description
"An MPLS flow";
}
identity tsn {
base "flow-type";
description
"An MPLS flow";
}
identity service-operation {
description
"Base identity from which all service operation are derived";
}
identity service-initiation {
base "service-operation";
description
"A DetNet service encapsulates";
}
identity service-termination {
base "service-operation";
description
"A DetNet service decapsulates";
}
identity service-relay {
base "service-operation";
description
"A DetNet service swap";
}
identity forwarding-operation {
description
"Base identity from which all data plane operation are derived";
}
identity natively-forward {
base "forwarding-operation";
description
"A packet natively forward to lower-layer";
}
identity impose-and-forward {
base "forwarding-operation";
description
"Impose a header(MPLS/IP) and forward to lower-layer";
}
identity pop-and-forward {
base "forwarding-operation";
description
"Pop an identified packet header and forward to lower-layer";
}
identity pop-impose-and-forward {
base "forwarding-operation";
description
"Pop an identified packet header, impose a one or more outgoing
header and forward to lower-layer ";
}
identity swap-and-forward {
base "forwarding-operation";
description
"Swap an identified packet header with outgoing header and forward
to lower-layer ";
}
identity pop-and-lookup {
base "forwarding-operation";
description
"Pop an identified packet header and perform a lookup";
}
identity label-space {
description
"Base identity from which all label space are derived";
}
identity platform-label {
base "label-space";
description
"label allocated from the platform label space";
}
identity non-platform-label {
base "label-space";
description
"label allocated from the non-platform label space";
}
typedef ttl-action-definition {
type identityref {
base "ttl-action";
} }
description
"TTL action definition";
} }
typedef service-sub-layer-ref {
typedef config-type-ref { type leafref {
type identityref { path "/ietf-detnet:service-sub-layer"
base "config-type"; + "/ietf-detnet:service-sub-layer-list"
+ "/ietf-detnet:name";
} }
description
"config-type-ref";
} }
typedef flow-type-ref { typedef forwarding-sub-layer-ref {
type identityref { type leafref {
base "flow-type"; path "/ietf-detnet:forwarding-sub-layer"
+ "/ietf-detnet:forwarding-sub-layer-list"
+ "/ietf-detnet:name";
} }
description
"flow-type-ref";
} }
typedef service-operation-ref{ typedef sub-network-ref {
type identityref { type leafref {
base "service-operation"; path "/ietf-detnet:sub-network"
} + "/ietf-detnet:sub-network-list"
description + "/ietf-detnet:name";
"service-operation-ref"; }
} }
typedef forwarding-operation-ref { typedef ipsec-spi {
type identityref { type uint32 {
base "forwarding-operation"; range "1..max";
} }
description description
"forwarding-operation-ref"; "SPI";
} }
typedef label-space-ref { typedef service-operation-type {
type identityref { type enumeration {
base "label-space"; enum service-initiation {
description
"Operation for DetNet service sub-layer encapsulation";
}
enum service-termination {
description
"Operation for DetNet service sub-layer decapsulation";
}
enum service-relay {
description
"Operation for DetNet service sub-layer swap";
}
enum non-detnet {
description
"No operation for DetNet service sub-layer";
}
} }
description
"label-space-ref";
} }
typedef lower-layer-ref { typedef mpls-operations-type {
type leafref { type enumeration {
path "/ietf-detnet:detnet-config/ietf-detnet:detnet-config-list" enum impose-and-forward {
+ "/ietf-detnet:name"; description
"Operation impose outgoing label(s) and forward to
next-hop";
}
enum pop-and-forward {
description
"Operation pop incoming label and forward to next-hop";
}
enum pop-impose-and-forward {
description
"Operation pop incoming label, impose one or more
outgoing label(s) and forward to next-hop";
}
enum swap-and-forward {
description
"Operation swap incoming label, with outgoing label and
forward to next-hop";
}
enum pop-and-lookup {
description
"Operation pop incoming label and perform a lookup";
}
} }
description description "MPLS operations types";
"lower-layer-ref";
} }
typedef service-protection-type { typedef service-protection-type {
type enumeration { type enumeration {
enum none { enum none {
description description
"no service protection provide"; "no service protection provide";
} }
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";
} }
enum elimination { enum elimination {
description description
"A Packet Elimination Function (PEF) eliminates "A Packet Elimination Function (PEF) eliminates
duplicate copies of packets to prevent excess duplicate copies of packets to prevent excess
packets flooding the network or duplicate packets flooding the network or duplicate
packets being sent out of the DetNet domain. packets being sent out of the DetNet domain.
PEF can be implemented by an edge node, a relay PEF can be implemented by an edge node, a relay
node, or an end system."; node, or an end system.";
} }
skipping to change at page 18, line 44 skipping to change at page 23, line 7
implemented by an edge node, a relay node, or implemented by an edge node, a relay node, or
an end system"; an end system";
} }
enum elimination-ordering-replicaiton { enum elimination-ordering-replicaiton {
description description
"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
"service-protection-type";
} }
typedef sequence-number-generation-type { typedef sequence-number-generation-type {
type enumeration { type enumeration {
enum none { enum copy-from-app-flow {
description description
"No sequence number generation function provide"; "Copy the app-flow sequence number to the DetNet-flow";
} }
enum copy-from-app-flow { enum generate-by-detnet-flow {
description description
"Copy the app-flow sequence number to the DetNet-flow"; "Generate the sequence number by DetNet flow";
} }
enum generate-by-detnet-flow {
description
"Generate the sequence number by DetNet flow";
}
}
description
"sequence-number-generation-type";
}
grouping l4-port-header {
description
"The TCP/UDP port(source/destination) information";
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 ipv4-header { typedef sequence-number-field {
description type enumeration {
"The IPv4 packet header information"; enum zero-sn {
leaf src-ipv4-address { description "there is no DetNet sequence number field.";
type inet:ipv4-address; }
mandatory true; enum short-sn {
description description "there is 16bit DetNet sequence number field";
"The source IP address of the header"; value 16;
} }
leaf dest-ipv4-address { enum long-sn {
type inet:ipv4-address; description "there is 28bit DetNet sequence number field";
mandatory true; value 28;
description }
"The destination IP address of the header";
}
leaf protocol {
type uint8;
mandatory true;
description
"The protocol of the header";
}
leaf dscp {
type uint8;
description
"The DSCP field of the header";
} }
} }
grouping ipv6-header { grouping ip-header {
description description
"The IPv6 packet header information"; "The IPv4/IPv6 packet header information";
leaf src-ipv6-address { leaf src-ip-address {
type inet:ipv6-address; type inet:ip-address;
mandatory true;
description description
"The source IP address of the header"; "The source IP address of the header";
} }
leaf dest-ipv6-address { leaf dest-ip-address {
type inet:ipv6-address; type inet:ip-address;
mandatory true;
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;
mandatory true;
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 {
type inet:port-number;
grouping mpls-header {
description
"The MPLS packet header information";
leaf label {
type rt-type:mpls-label;
description
"The label value of the MPLS header";
}
leaf tc {
type uint8;
description
"The traffic class value of the MPLS header";
}
leaf s-bit {
type boolean;
description description
"The s-bit value of the MPLS header, "The source port number";
which indicates the bottom of the label shack";
} }
leaf d-cw-encapsulate-flag { leaf destination-port {
type boolean; type inet:port-number;
description description
"the indication of whether D-CW is encapsulated or not, "The destination port number";
when the D-CW is encapsulated, the sequence number is
determined by sequence generation type";
} }
} }
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";
skipping to change at page 21, line 49 skipping to change at page 25, line 4
} }
leaf ethertype { leaf ethertype {
type eth:ethertype; type eth: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 uint16;
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 l4-port-identification {
description description
"The TCP/UDP port(source/destination) identification information"; "The TCP/UDP port(source/destination) identification information";
leaf lower-source-port { container destination-port {
type inet:port-number; uses packet-fields:port-range-or-operator;
description }
"The lower source port number of the source port range";
}
leaf upper-source-port {
type inet:port-number;
description
"The upper source port number of the source port range";
}
leaf lower-destination-port {
type inet:port-number;
description
"The lower destination port number or the destination port range";
}
leaf upper-destination-port {
type inet:port-number;
description
"The upper destination port number of the destination port range";
}
} }
grouping ipv4-flow-identification { grouping source-ip-port-identification {
description description
"The IPv4 packet header identification information"; "The TCP/UDP port(source/destination) identification information";
leaf src-ipv4-prefix { container source-port {
type inet:ipv4-prefix; uses packet-fields:port-range-or-operator;
mandatory true; }
description
"The source IP address of the header";
}
leaf dest-ipv4-prefix {
type inet:ipv4-prefix;
mandatory true;
description
"The destination IP address of the header";
}
leaf protocol {
type uint8;
mandatory true;
description
"The protocol of the header";
}
leaf dscp {
type uint8;
description
"The DSCP field of the header";
}
leaf dscp-bitmask {
type uint8;
description
"The bitmask value that determines whether to use
the DSCP(IPv4) value for flow identification or not";
}
} }
grouping ipv6-flow-identification { grouping ip-flow-identification {
description description
"The IPv6 packet header identification information"; "The IPv4/IPv6 packet header identification information";
leaf src-ipv6-prefix { leaf src-ip-prefix {
type inet:ipv6-prefix; type inet:ip-prefix;
mandatory true;
description description
"The source IP address of the header"; "The source IP address of the header";
} }
leaf dest-ipv6-prefix { leaf dest-ip-prefix {
type inet:ipv6-prefix; type inet:ip-prefix;
mandatory true;
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;
mandatory true;
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 traffic-class-bitmask {
type uint8;
description
"The bitmask value that determines whether to use
the Traffic class(IPv6) value for flow identification or not";
} }
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 flow-label-flag { uses source-ip-port-identification;
type boolean; uses destination-ip-port-identification;
description leaf ipsec-spi {
"The flag that determines whether to use type ipsec-spi;
the Flow Label value for flow identification or not"; description "Security parameter index of SA entry";
} }
} }
grouping mpls-flow-identification { grouping mpls-flow-identification {
description description
"The MPLS packet header identification information"; "The MPLS packet header identification information";
leaf label { choice label-space {
type rt-type:mpls-label; description "";
description case non-platrom-label-space {
"The label value of the MPLS header"; uses rt-types:mpls-label-stack;
} }
leaf tc { case platform-label-space {
type uint8; leaf label {
description type rt-types:mpls-label;
"The traffic class value of the MPLS header"; }
} }
}
grouping l2-flow-identification {
description
"The Ethernet or TSN packet header identification information";
leaf source-mac-address {
type yang:mac-address;
description
"The source MAC address value of the ethernet header";
}
leaf destination-mac-address {
type yang:mac-address;
description
"The destination MAC address value of the ethernet header";
}
leaf ethertype {
type eth:ethertype;
description
"The ethernet packet type value of the ethernet header";
}
leaf vlan-id {
type uint16;
description
"The Vlan value of the ethernet header";
}
leaf pcp {
type uint8;
description
"The priority value of the ethernet header";
} }
} }
grouping traffic-specification { grouping 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";
leaf interval { leaf interval {
skipping to change at page 26, line 6 skipping to change at page 27, line 24
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.";
} }
}
} }
container detnet-config { grouping traffic-requirements {
description container traffic-requirements {
"DetNet configurations";
leaf node-id {
type yang:dotted-quad;
description
"A 32-bit number in the form of a dotted quad that is used by
identifying a DetNet node";
}
list detnet-config-list {
key "name";
description description
"list of the DetNet configurations"; "FlowRequirements: defines the attributes of the App-flow
leaf name { regarding bandwidth, latency, latency variation, loss, and
type string; misordering tolerance.";
leaf min-bandwidth {
type uint64;
description description
"The name to identify the DetNet configuration"; "MinBandwidth is the minimum bandwidth that has to be
guaranteed for the DetNet service. MinBandwidth is
specified in octets per second.";
} }
leaf config-type { leaf max-latency {
type config-type-ref; type uint32;
description description
"The DetNet configuration type such as a App-flow, service "MaxLatency is the maximum latency from Ingress to Egress(es)
sub-layer, forwarding sub-layer, and TSN sub-network"; for a single packet of the DetNet flow. MaxLatency is
specified as an integer number of nanoseconds";
} }
container App-flow { leaf max-latency-variation {
when "../config-type = 'ietf-detnet:App-flow'"; type uint32;
description description
"The DetNet App-flow configuration"; "MaxLatencyVariation is the difference between the minimum and
container operations { the maximum end-to-end one-way latency. MaxLatencyVariation
description "operations"; is specified as an integer number of nanoseconds.";
container sequence-number { }
description "The DetNet sequence number operations grouping"; leaf max-loss {
leaf sequence-number-generation-type { type uint8;
type sequence-number-generation-type; description
description "The DetNet sequence number generation type"; "MaxLoss defines the maximum Packet Loss Ratio (PLR) parameter
} for the DetNet service between the Ingress and Egress(es) of
leaf sequence-number-length { the DetNet domain.";
type uint8; }
description leaf max-consecutive-loss-tolerance {
"The DetNet sequence number length"; type uint32;
} description
} "Some applications have special loss requirement, such as
MaxConsecutiveLossTolerance. The maximum consecutive loss
tolerance parameter describes the maximum number of
consecutive packets whose loss can be tolerated. The maximum
consecutive loss tolerance can be measured for example based
on sequence number";
}
leaf max-misordering {
type uint32;
description
"MaxMisordering describes the tolerable maximum number of
packets that can be received out of order. The maximum
allowed misordering can be measured for example based on
sequence number. The value zero for the maximum allowed
misordering indicates that in order delivery is required,
misordering cannot be tolerated.";
}
}
}
grouping data-flow-spec {
description "app-flow identification";
choice data-flow-type {
case tsn-app-flow {
uses l2-header;
}
case ip-app-flow {
uses ip-flow-identification;
}
case mpls-app-flow {
uses mpls-flow-identification;
}
}
}
grouping detnet-flow-spec {
description "detnet-flow identificatioin";
choice detnet-flow-type {
case ip-detnet-flow {
uses ip-flow-identification;
}
case mpls-detnet-flow {
uses mpls-flow-identification;
}
}
}
grouping app-flows-ref {
description "incoming or outgoing app-flow reference group";
leaf-list app-flow {
type app-flow-ref;
description "List of ingress or egress app-flows";
}
}
grouping incoming-detnet-flows {
description "incoming detnet member flows identification";
list incoming-detnet-flow {
key "incoming-index";
description "";
leaf incoming-index {
type uint8;
description "";
}
uses detnet-flow-spec;
}
}
grouping detnet-header {
description "DetNet header info for DetNet encapsulation or forwarding";
choice header-type {
case detnet-mpls-header {
description
"MPLS label stack for DetNet MPLS encapsulation or forwarding";
uses rt-types:mpls-label-stack;
}
case detnet-ip-header {
description
"IPv4/IPv6 packet header for DetNet IP encapsulation";
uses ip-header;
}
}
}
grouping lower-layer-ref {
choice lower-layer-type {
case service-sub-layer {
leaf service-sub-layer {
type service-sub-layer-ref;
} }
container in-segments { }
description "The App-flow identification information"; case forwarding-sub-layer {
leaf app-flow-type { leaf forwarding-sub-layer {
type flow-type-ref; type forwarding-sub-layer-ref;
description
"The App-flow type such as a L2, IPv4, and IPv6";
}
uses l2-flow-identification {
when "app-flow-type = 'ietf-detnet:tsn' or 'ietf-detnet:l2'";
}
uses ipv4-flow-identification {
when "app-flow-type = 'ietf-detnet:ipv4'";
}
uses ipv6-flow-identification {
when "app-flow-type = 'ietf-detnet:ipv6'";
}
uses l4-port-identification {
when "app-flow-type = 'ietf-detnet:ipv6' or 'ietf-detnet:ipv4'";
or 'ietf-detnet:ipv4'";
}
} }
container out-segments { }
description case sub-network {
"The DetNet service information associated with this App-flow"; leaf sub-network {
leaf detnet-service-sub-layer { type sub-network-ref;
type lower-layer-ref;
description "Specify associated service sub-layer";
}
} }
} }
container service-sub-layer { case interface {
when "../config-type = 'ietf-detnet:service-sub-layer'"; leaf outgoing-interface {
description "The DetNet service sub-layer configuration"; type if:interface-ref;
container operations {
description
"The DetNet service sub-layer operations grouping";
container service-operation {
description "The DetNet service operations grouping";
leaf service-operation-type {
type service-operation-ref;
description
"The DetNet service operations type such as DetNet
service initiation, termination, and relay";
}
}
container service-protection {
description
"The DetNet service protection operations grouping";
leaf service-protection-type {
type service-protection-type;
description
"The DetNet service protection type such as PRF, PEF, PEOF,
PERF, and PEORF";
}
}
} }
container in-segments { }
when "../operations/service-operation" }
+ "/service-operation-type != 'service-initation'"; }
description grouping detnet-next-hop-content {
"DetNet service identification information"; description
leaf detnet-service-type { "Generic parameters of DetNet next hops.";
type flow-type-ref; choice next-hop-options {
description mandatory true;
"incoming DetNet service flow type"; description
"Options for next hops.
It is expected that further cases will be added through
augments from other modules, e.g., for recursive
next hops.";
case simple-next-hop {
description
"This case represents a simple next hop consisting of the
next-hop address and/or outgoing interface.
Modules for address families MUST augment this case with a
leaf containing a next-hop address of that address
family.";
uses detnet-header;
list lower-layer{
key "index";
description "lower-layer info";
leaf index {
type uint8;
} }
list detnet-service-list { uses lower-layer-ref;
key "detnet-service-index";
}
}
case next-hop-list {
container next-hop-list {
description
"Container for multiple next hops.";
list next-hop {
key "hop-index";
description description
"Incoming DetNet member flows or a compound flow"; "An entry in a next-hop list.
leaf detnet-service-index {
Modules for address families MUST augment this list
with a leaf containing a next-hop address of that
address family.";
leaf hop-index {
type uint8; type uint8;
description description "";
"Incoming DetNet service index";
}
uses ipv4-flow-identification {
when "../detnet-service-type = 'ietf-detnet:ipv4'";
}
uses ipv6-flow-identification {
when "../detnet-service-type = 'ietf-detnet:ipv6'";
} }
container mpls-flow-identification { uses detnet-header;
when "../../detnet-service-type = 'ietf-detnet:mpls'"; list lower-layer{
description key "index";
"MPLS type DetNet service identification"; description "lower-layer info";
leaf label-space { leaf index {
type label-space-ref; type uint8;
description
"Indicate the incoming MPLS label is associated with
platform label space or not";
}
container non-platform-label-space {
when "../label-space = 'ietf-detnet:non-platform-label'";
description
"MPLS label is associated with non-platform label space,
all of the F-labels and incoming interface information was
used for identification";
leaf incoming-interface {
type if:interface-ref;
description
"DetNet service incoming interface information";
}
list non-platform-label-stack {
key "index";
description
"All of the label information from the outer label
to the current label";
leaf index {
type uint8;
description
"Index of the labels stack";
}
uses mpls-flow-identification;
}
}
container platform-label-space {
when "../label-space = 'ietf-detnet:platform-label'";
description
"MPLS label is associated with platform label space, only
the F-label is used for identification";
uses mpls-flow-identification;
} }
} uses lower-layer-ref;
}
} }
} }
container out-segments { }
when "../operations/service-operation" }
+ "/service-operation-type != 'service-termination'"; }
description
"DetNet Service outgoing processing grouping";
leaf detnet-service-processing-type {
type flow-type-ref;
description
"Outgoing DetNet service flow type";
}
container detnet-service-encapsulation {
description
"DetNet service encapsulation information";
list detnet-service-processing-list {
key "detnet-service-processing-index";
description
"The list of single or multiple outgoing DetNet service(s)";
leaf detnet-service-processing-index {
type uint32;
description "Outgoing segment entry";
} container app-flows {
container ip-flow { description
when "../../../detnet-service-processing-type =" "The DetNet app-flow configuration";
+ "'ietf-detnet:ipv4' or 'ietf-detnet:ipv6'"; list app-flow {
description key "name";
"IP type DetNet flow(s) encapsulation information"; description "";
container ipv4-flow { leaf name {
when "../../../../detnet-service-processing-type =" type "string";
+ "'ietf-detnet:ipv4'"; description "The name to identify the DetNet app-flow";
description }
"IPv4 packet header encapsulation information"; container end-points {
uses ipv4-header; leaf source-endpoint {
} type inet:ip-address;
container ipv6-flow { description
when "../../../../detnet-service-processing-type =" "The DetNet application endpoint source address";
+ "'ietf-detnet:ipv6'"; }
description leaf-list destination-endpoints {
"IPv6 packet header encapsulation information"; type inet:ip-address;
uses ipv6-header; description
} "The DetNet application endpoint destination address list";
container l4-port-header { }
description }
"TCP/UDP source or destination port number"; leaf app-flow-bidir-congruent {
uses l4-port-header; type boolean;
} description
} "Defines the data path requirement of the App-flow whether it must share the same data path and physical path for both directions through the network, e.g., to provide congruent paths in the two directions.";
container mpls-flow { }
when "../../../detnet-service-processing-type =" uses traffic-requirements;
+ "'ietf-detnet:mpls'"; uses traffic-specification;
description container in-segment {
"MPLS type DetNet flow(s) encapsulation information"; description "";
list detnet-mpls-label-stack { list app-traffic {
key "index"; key "interface";
description description "";
"The list of MPLS labels stack for swap or encapsulation"; leaf interface {
leaf index { type if:interface-ref;
type uint8; description "";
description "Index of the labels stack";
}
uses mpls-header;
}
}
container detnet-forwarding-sub-layer-info {
description
"The forwarding sub-layer information that associated with
this DetNet service sub-layer";
leaf detnet-forwarding-sub-layer {
type lower-layer-ref;
description
"Specify associated forwarding sub-layer";
}
}
}
}
} }
uses data-flow-spec;
}
} }
container forwarding-sub-layer { container out-segment {
when "../config-type = 'ietf-detnet:forwarding-sub-layer'"; description
"detnet-flows that must be mapped to received app-flow or route for outgoing app-flow";
uses detnet-next-hop-content;
}
}
}
container service-sub-layer {
description "The DetNet service sub-layer configuration";
list service-sub-layer-list {
key "name";
description "";
leaf name {
type string;
description "The name of the DetNet service sub-layer";
}
leaf service-id {
type uint16;
config false;
description description
"The DetNet forwarding sub-layer configuration"; "The DetNet service ID";
container operations {
description }
"The DetNet forwarding sub-layer operations grouping"; leaf service-rank {
container forwarding-operation { type uint8;
description description
"DetNet forwarding function operations grouping"; "The DetNet rank for this service";
leaf forwarding-operation-type { }
type forwarding-operation-ref; uses traffic-requirements;
description container service-portection {
"DetNet forwarding operation type such as leaf service-protection-type {
natively forward, impose and forward, pop and forward, type service-protection-type;
pop and impose and forward, swap and forward, description
and pop and lookup"; "The DetNet service protection type such as PRF, PEF, PEOF,PERF, and PEORF";
}
}
container resource-allocate {
description
"resource-allocation function operations grouping";
uses traffic-specification;
}
container qos {
description
"QoS function operations grouping";
}
} }
container in-segments { leaf sequence-number-length {
description type sequence-number-field;
"DetNet forwarding sub-layer packet identification information"; description "sequence number filed can choice 0 bit, 16bit, 28 bit filed";
leaf detnet-forwarding-type { }
type flow-type-ref; leaf sequence-number-window-size {
description type uint32;
"incoming DetNet forwarding packet type"; description "sequence number window size";
} }
uses ipv4-flow-identification { leaf sequence-number-generation {
when "detnet-forwardinge-type = 'ietf-detnet:ipv4'"; type sequence-number-generation-type;
} description "config sequence number source";
uses ipv6-flow-identification { }
when "detnet-forwarding-type = 'ietf-detnet:ipv6'"; }
} leaf service-operation-type {
container mpls-flow-identification { type service-operation-type;
when "../detnet-forwarding-type = 'ietf-detnet:mpls'"; }
description container in-segment {
"MPLS type identification information"; uses app-flows-ref;
leaf label-space { uses incoming-detnet-flows;
type label-space-ref; }
description container out-sergment {
"Indicate the incoming MPLS label is associated with platform uses detnet-next-hop-content;
label space or not"; uses app-flows-ref;
} }
container non-platform-label-space { }
when "../label-space = 'ietf-detnet:non-platform-label'"; }
description container forwarding-sub-layer {
"MPLS label is associated with non-platform label space, description "The DetNet forwarding sub-layer configuration";
all of the F-labels and incoming interface information was list forwarding-sub-layer-list {
used for identification"; key "name";
leaf incoming-interface { description "";
type if:interface-ref; leaf name {
description type string;
"The information of DetNet forwarding packet incoming description "The name of the DetNet forwarding sub-layer";
interface"; }
} container resource-allocation {
list non-platform-label-stack { uses traffic-specification;
key "index"; }
description leaf forwarding-operation-type {
"All of the label information from the outer label to type mpls-operations-type;
the current label"; }
leaf index { container in-segment {
type uint8; leaf service-sub-layer {
description type service-sub-layer-ref;
"index number 0 indicate last inner label"; description "";
}
uses mpls-flow-identification;
}
}
container platform-label-space {
when "../label-space = 'ietf-detnet:platform-label'";
description
"MPLS label is associated with platform label space, only
the F-label is used for identification";
uses mpls-flow-identification;
}
}
} }
container out-segments { list forwarding-traffic {
description key "interface";
"DetNet forwarding sub-layer packet processing information"; description "";
leaf detnet-forwarding-processing-type { leaf interface {
type flow-type-ref; type if:interface-ref;
description description "";
"outgoing DetNet forwarding packet type";
}
container natively-detnet-forwarding {
when "../../operations/forwarding-operation"
+ " /forwarding-operation-type = 'natively-forwarding'";
description
"Packet forwarding processing information";
container ipv4-flow {
when "../../detnet-forwarding-processing-type ="
+ "'ietf-detnet:ipv4'";
description
"IPv4 type packet forwarding information";
leaf ipv4-next-hop-address {
type inet:ipv4-address;
description
"IPv4 type Next hop IP address";
}
}
container ipv6-flow {
when "../../detnet-forwarding-processing-type ="
+ "'ietf-detnet:ipv6'";
description
"IPv6 type packet forwarding information";
leaf ipv6-next-hop-address {
type inet:ipv6-address;
description
"IPv6 type Next hop IP address";
}
}
}
container detnet-forwarding-encapsulation {
when "../../operations/forwarding-operation"
+ "/forwarding-operation-type != 'natively-forward'";
description
"Packet encapsulation information";
container ip-flow {
when "../../detnet-forwarding-processing-type = "
+ "'ietf-detnet:ipv4' or 'ietf-detnet:ipv6'";
description
"The IP type DetNet flow(s) encapsulation information";
container ipv4-flow {
when "../../../detnet-forwarding-processing-type = "
+ "'ietf-detnet:ipv4'";
description
"IPv4 packet header encapsulation information";
uses ipv4-header;
}
container ipv6-flow {
when "../../../detnet-forwarding-processing-type = "
+ "'ietf-detnet:ipv6'";
description
"IPv6 packet header encapsulation information";
uses ipv6-header;
}
container l4-port-header {
description
"TCP/UDP source or destination port number";
uses l4-port-header;
}
}
container mpls-flow {
when "../../detnet-forwarding-processing-type = "
+ "'ietf-detnet:mpls'";
description
"MPLS label encapsulation information";
list detnet-mpls-label-stack {
key "index";
description
"The list of MPLS labels stack for swap or encapsulation";
leaf index {
type uint8;
description
"Index of the labels stack";
}
uses mpls-header;
}
}
container lower-layer-info {
description
"The lower-layer information associated with
this forwarding sub-layer";
leaf lower-layer-type {
type flow-type-ref;
description
"indicate lower-layer type";
}
container interface {
when "../lower-layer-type = 'ietf-detnet:l2'";
description
"indicate the lower-layer is the outgoing interface";
leaf outgoing-interface {
type if:interface-ref;
description
"Outgoing interface";
}
}
container sub-layer {
when "../lower-layer-type != 'ietf-detnet:l2'";
description
"indicate the lower-layer is some of the DetNet sub-layer
or TSN sub-network";
leaf sub-layer {
type lower-layer-ref;
description
"Specify associated DetNet sub-layer or TSN sub-network";
}
}
}
} }
uses detnet-flow-spec;
} }
} }
container sub-network { container out-segment {
when "../config-type = 'ietf-detnet:tsn-sub-network'"; uses detnet-next-hop-content;
description leaf service-sub-layer {
"sub-network"; type service-sub-layer-ref;
description "";
}
}
}
}
container sub-network {
description "";
list sub-network-list {
key "name";
description "";
leaf name {
type string;
description "";
} }
} }
} }
} }
7. Open Issues
<CODE ENDS>
8. Open Issues
There are some open issues that are still under discussion: There are some open issues that are still under discussion:
o The Relationship with 802.1 TSN YANG models is TBD. TSN YANG o The name of 'in-segment' and 'out-segment' are still under
models include: P802.1Qcw, which defines TSN YANG for Qbv, Qbu, discussion. These terms are used in YANG model for MPLS, but they
and Qci, and P802.1CBcv, which defines YANG for 802.1CB. The may cause confusion in DetNet.
possible problem here is how to avoid possible overlap among yang
models defined in IETF and IEEE. A common YANG model may be
defined in the future to shared by both TSN and DetNet. More
discussion are needed here.
o How to support DetNet OAM is TBD. o Whether application flow should be in service sub-layer is still
under discussion.
o Whether we are supposed to define a new YANG Model for DetNet as
the current draft does, or we should augment the current YANG
Model.
These issues will be resolved in the following versions of the draft. These issues will be resolved in the following versions of the draft.
9. IANA Considerations 8. IANA Considerations
This document makes no request of IANA. This document makes no request of IANA.
Note to RFC Editor: this section may be removed on publication as an Note to RFC Editor: this section may be removed on publication as an
RFC. RFC.
10. Security Considerations 9. Security Considerations
<TBD> <TBD>
11. Acknowledgements 10. Acknowledgements
12. References 11. References
12.1. Normative References 11.1. Normative References
[I-D.finn-detnet-bounded-latency] [I-D.finn-detnet-bounded-latency]
Finn, N., Boudec, J., Mohammadpour, E., Zhang, J., Varga, Finn, N., Boudec, J., Mohammadpour, E., Zhang, J., Varga,
B., and J. Farkas, "DetNet Bounded Latency", draft-finn- B., and J. Farkas, "DetNet Bounded Latency", draft-finn-
detnet-bounded-latency-04 (work in progress), June 2019. detnet-bounded-latency-04 (work in progress), June 2019.
[I-D.ietf-detnet-architecture]
Finn, N., Thubert, P., Varga, B., and J. Farkas,
"Deterministic Networking Architecture", draft-ietf-
detnet-architecture-13 (work in progress), May 2019.
[I-D.ietf-detnet-flow-information-model] [I-D.ietf-detnet-flow-information-model]
Farkas, J., Varga, B., Cummings, R., Jiang, Y., and D. Farkas, J., Varga, B., 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-06 (work in progress), October flow-information-model-07 (work in progress), March 2020.
2019.
[I-D.ietf-detnet-ip] [I-D.ietf-detnet-ip]
Varga, B., Farkas, J., Berger, L., Fedyk, D., Malis, A., Varga, B., Farkas, J., Berger, L., Fedyk, D., Malis, A.,
Bryant, S., and J. Korhonen, "DetNet Data Plane: IP", and S. Bryant, "DetNet Data Plane: IP", draft-ietf-detnet-
draft-ietf-detnet-ip-03 (work in progress), October 2019. ip-05 (work in progress), February 2020.
[I-D.ietf-detnet-mpls] [I-D.ietf-detnet-mpls]
Varga, B., Farkas, J., Berger, L., Fedyk, D., Malis, A., Varga, B., Farkas, J., Berger, L., Fedyk, D., Malis, A.,
Bryant, S., and J. Korhonen, "DetNet Data Plane: MPLS", Bryant, S., and J. Korhonen, "DetNet Data Plane: MPLS",
draft-ietf-detnet-mpls-03 (work in progress), October draft-ietf-detnet-mpls-05 (work in progress), February
2019. 2020.
[I-D.ietf-detnet-topology-yang] [I-D.ietf-detnet-topology-yang]
Geng, X., Chen, M., Li, Z., and R. Rahman, "Deterministic Geng, X., Chen, M., Li, Z., and R. Rahman, "Deterministic
Networking (DetNet) Topology YANG Model", draft-ietf- Networking (DetNet) Topology YANG Model", draft-ietf-
detnet-topology-yang-00 (work in progress), January 2019. detnet-topology-yang-00 (work in progress), January 2019.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>. <https://www.rfc-editor.org/info/rfc2119>.
[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>.
12.2. Informative References [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas,
"Deterministic Networking Architecture", RFC 8655,
DOI 10.17487/RFC8655, October 2019,
<https://www.rfc-editor.org/info/rfc8655>.
11.2. Informative References
[I-D.geng-detnet-info-distribution] [I-D.geng-detnet-info-distribution]
Geng, X., Chen, M., Li, Z., Qin, F., and L. Qiang, "IGP-TE Geng, X., Chen, M., Li, Z., Qin, F., and L. Qiang, "IGP-TE
Extensions for DetNet Information Distribution", draft- Extensions for DetNet Information Distribution", draft-
geng-detnet-info-distribution-04 (work in progress), July geng-detnet-info-distribution-04 (work in progress), July
2019. 2019.
[I-D.ietf-detnet-use-cases] [I-D.ietf-detnet-use-cases]
Grossman, E., "Deterministic Networking Use Cases", draft- Grossman, E., "Deterministic Networking Use Cases", draft-
ietf-detnet-use-cases-20 (work in progress), December ietf-detnet-use-cases-20 (work in progress), December
2018. 2018.
[I-D.ietf-teas-yang-te] [I-D.ietf-teas-yang-te]
Saad, T., Gandhi, R., Liu, X., Beeram, V., and I. Bryskin, Saad, T., Gandhi, R., Liu, X., Beeram, V., and I. Bryskin,
"A YANG Data Model for Traffic Engineering Tunnels and "A YANG Data Model for Traffic Engineering Tunnels and
Interfaces", draft-ietf-teas-yang-te-21 (work in Interfaces", draft-ietf-teas-yang-te-22 (work in
progress), April 2019. progress), November 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-22 (work in Topologies", draft-ietf-teas-yang-te-topo-22 (work in
progress), June 2019. progress), June 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
skipping to change at page 39, line 38 skipping to change at page 39, line 4
Yeoncheol Ryoo Yeoncheol Ryoo
ETRI ETRI
Email: dbduscjf@etri.re.kr Email: dbduscjf@etri.re.kr
Zhenqiang Li Zhenqiang Li
China Mobile China Mobile
Email: lizhenqiang@chinamobile.com Email: lizhenqiang@chinamobile.com
Reshad Rahman Reshad Rahman
Cisco Systems Cisco Systems
Email: rrahman@cisco.com Email: rrahman@cisco.com
Don Fedyk
LabN Consulting, L.L.C.
Email: dfedyk@labn.net
 End of changes. 116 change blocks. 
1262 lines changed or deleted 1232 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/