< draft-ietf-detnet-yang-12.txt   draft-ietf-detnet-yang-13.txt >
Network Working Group X. Geng Network Working Group X. Geng
Internet-Draft M. Chen Internet-Draft Huawei Technologies
Intended status: Standards Track Huawei Technologies Intended status: Standards Track Y. Ryoo
Expires: 20 November 2021 Y. Ryoo Expires: 7 April 2022 ETRI
ETRI
D. Fedyk D. Fedyk
LabN Consulting, L.L.C. LabN Consulting, L.L.C.
R. Rahman R. Rahman
Individual Individual
Z. Li Z. Li
China Mobile China Mobile
19 May 2021 4 October 2021
Deterministic Networking (DetNet) YANG Model Deterministic Networking (DetNet) YANG Model
draft-ietf-detnet-yang-12 draft-ietf-detnet-yang-13
Abstract Abstract
This document contains the specification for the Deterministic This document contains the specification for the Deterministic
Networking YANG Model for configuration and operational data for Networking YANG Model for configuration and operational data for
DetNet Flows. The model allows for provisioning of end-to-end DetNet DetNet Flows. The model allows for provisioning of end-to-end DetNet
service along the path without dependency on any signaling protocol. service on devices along the path without dependency on any signaling
It also specifies operational status for flows. protocol. It also specifies operational status for flows. An
operator or network controller programs the configuration of the
devices.
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).
Requirements Language Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
document are to be interpreted as described in RFC 2119 [RFC2119]. "OPTIONAL" in this document are to be interpreted as described in BCP
14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
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 20 November 2021.
This Internet-Draft will expire on 7 April 2022.
Copyright Notice Copyright Notice
Copyright (c) 2021 IETF Trust and the persons identified as the Copyright (c) 2021 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 (https://trustee.ietf.org/ Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document. license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components and restrictions with respect to this document. Code Components
extracted from this document must include Simplified BSD License text extracted from this document must include Simplified BSD License text
as described in Section 4.e of the Trust Legal Provisions and are as described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Simplified BSD License. provided without warranty as described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Abbreviations . . . . . . . . . . . . . . . . . . . . . . . . 3
3. DetNet YANG Module . . . . . . . . . . . . . . . . . . . . . 3 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.1. DetNet Application Flow YANG Attributes . . . . . . . . . 3 4. DetNet YANG Module . . . . . . . . . . . . . . . . . . . . . 4
3.2. DetNet Service Sub-layer YANG Attributes . . . . . . . . 3 4.1. DetNet Application Flow YANG Attributes . . . . . . . . . 5
3.3. DetNet Forwarding Sub-layer YANG Attributes . . . . . . . 4 4.2. DetNet Service Sub-layer YANG Attributes . . . . . . . . 5
4. DetNet Flow Aggregation . . . . . . . . . . . . . . . . . . . 4 4.3. DetNet Forwarding Sub-layer YANG Attributes . . . . . . . 5
5. DetNet YANG Structure Considerations . . . . . . . . . . . . 5 5. DetNet Flow Aggregation . . . . . . . . . . . . . . . . . . . 6
6. DetNet Configuration YANG Structures . . . . . . . . . . . . 6 6. DetNet YANG Structure Considerations . . . . . . . . . . . . 7
7. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 15 7. DetNet Configuration YANG Structures . . . . . . . . . . . . 8
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 44 8. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 9
9. Security Considerations . . . . . . . . . . . . . . . . . . . 44 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 39
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 44 10. Security Considerations . . . . . . . . . . . . . . . . . . . 40
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 44 11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 40
11.1. Normative References . . . . . . . . . . . . . . . . . . 44 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 41
11.2. Informative References . . . . . . . . . . . . . . . . . 45 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 41
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 45 13.1. Normative References . . . . . . . . . . . . . . . . . . 41
A.1. Example A-1 JSON Configuration/Operational . . . . . . . 45 13.2. Informative References . . . . . . . . . . . . . . . . . 42
A.2. Example B-1 XML Config: Aggregation using a Forwarding Appendix A. DetNet Configuration YANG Tree . . . . . . . . . . . 43
Sub-layer . . . . . . . . . . . . . . . . . . . . . . . . 50 Appendix B. Examples . . . . . . . . . . . . . . . . . . . . . . 52
A.3. Example B-2 JSON Service Aggregation Configuration . . . 55 B.1. Example A-1 JSON Configuration/Operational . . . . . . . 52
A.4. Example C-1 JSON Relay Aggregation/Disaggregation B.2. Example B-1 XML Config: Aggregation using a Forwarding
Configuration . . . . . . . . . . . . . . . . . . . . . . 60 Sub-layer . . . . . . . . . . . . . . . . . . . . . . . . 57
A.5. Example C-2 JSON Relay Aggregation Service Sub-Layer . . 77 B.3. Example B-2 JSON Service Aggregation Configuration . . . 61
A.6. Example C-3 JSON Relay Service Sub-Layer Aggregation/ B.4. Example C-1 JSON Relay Aggregation/Disaggregation
Disaggregation . . . . . . . . . . . . . . . . . . . . . 89 Configuration . . . . . . . . . . . . . . . . . . . . . . 67
A.7. Example C-4 JSON Relay Service Sub-Layer Aggregation/ B.5. Example C-2 JSON Relay Aggregation Service Sub-Layer . . 83
Disaggregation . . . . . . . . . . . . . . . . . . . . . 103 B.6. Example C-3 JSON Relay Service Sub-Layer Aggregation/
A.8. Example D-1 JSON Transit Forwarding Sub-Layer Aggregation/ Disaggregation . . . . . . . . . . . . . . . . . . . . . 96
Disaggregation . . . . . . . . . . . . . . . . . . . . . 120 B.7. Example C-4 JSON Relay Service Sub-Layer Aggregation/
Disaggregation . . . . . . . . . . . . . . . . . . . . . 110
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 127 B.8. Example D-1 JSON Transit Forwarding Sub-Layer Aggregation/
Disaggregation . . . . . . . . . . . . . . . . . . . . . 126
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 133
1. Introduction 1. Introduction
DetNet (Deterministic Networking) provides a capability to carry DetNet (Deterministic Networking) provides a capability to carry
specified unicast or multicast data flows for real-time applications specified unicast or multicast data flows for real-time applications
with extremely low packet loss rates and assured maximum end-to-end with extremely low packet loss rates and assured maximum end-to-end
delivery latency. A description of the general background and delivery latency. A description of the general background and
concepts of DetNet can be found in [RFC8655]. concepts of DetNet can be found in [RFC8655].
This document defines a YANG model for DetNet based on YANG data This document defines a YANG model for DetNet based on YANG data
types and modeling language defined in [RFC6991] and [RFC7950]. types and modeling language defined in [RFC6991] and [RFC7950].
DetNet service, which is designed for describing the characteristics DetNet service, which is designed for describing the characteristics
of services being provided for application flows over a network, and of services being provided for application flows over a network, and
DetNet configuration, which is designed for DetNet flow path DetNet configuration, which is designed for DetNet flow path
establishment, flow status reporting, and DetNet functions establishment, flow status reporting, and DetNet functions
configuration in order to achieve end-to-end bounded latency and zero configuration in order to achieve end-to-end bounded latency and zero
congestion loss, are both included in this document. congestion loss, are both included in this document.
2. Terminology 2. Abbreviations
The following abbreviations are used in this document:
PEF Packet Elimination Function
PRF Packet Replication Function
PEOF Packet Elimination and Ordering Functions
PERF Packet Elimination and Replication Functions
PREOF Packet Replication, Elimination and Ordering Functions
MPLS Multiprotocol Label Switching
3. Terminology
This document uses the terminology defined in [RFC8655]. This document uses the terminology defined in [RFC8655].
3. DetNet YANG Module 4. DetNet YANG Module
The DetNet YANG module includes DetNet App-flow, DetNet Service Sub- The DetNet YANG module includes DetNet App-flow, DetNet Service Sub-
layer, and DetNet Forwarding Sub-layer configuration and operational layer, and DetNet Forwarding Sub-layer configuration and operational
objects. The corresponding attributes used in different sub-layers objects. The corresponding attributes used in different sub-layers
are defined in Section 3.1, 3.2, 3.3 respectively. are defined in Section 3.1, 3.2, 3.3 respectively.
3.1. DetNet Application Flow YANG Attributes Layers of the objects typically occur in the different data instances
forming the node types defined in [RFC8655]. Figure 1 illustrates
the relationship between data instance node types and the included
layers. Node types typically are logical per DetNet service and one
DetNet service can be one node type while another is another node
type on same device. This model is a controller based model because
a controller or operator configures all the devices to form a
service.
+---------------------------------------------------+
| Instance |
+-----+-----------------+-----------------+---------------+
| |Edge Node | Transit Node | Relay Node |
+-----+-----------------+-----------------+---------------+
| L |Application | | |
| a +-----------------+-----------------+---------------+
| y |Service Sub-Layer|Service Sub-Layer| |
| e +-----------------+-----------------+---------------+
| r |Forwarding S-L |Forwarding S-L | Forwarding S-L|
+-----+-----------------+-----------------+---------------+
Figure 1: Detnet Layers and Node Types
All of the layers have ingress/incoming and egress/outgoing
operations but any instance may be configured as only unidirectional.
This means that each unidirectional flow identifier configuration is
programmed starting at the ingress and flow status is reported at
ingress on each end. In the MPLS cases once encapsulated, the IP six
tuple parameters may not be required to be programmed again. In the
IP case, without encapsulation, various IP flow id parameters must be
configured along the flow path.
In the YANG model the terms source and destination are used as flow
identifiers whereas ingress and egress refer to a DetNet application
direction from the application edge. Ingress is to the DetNet
application and egress is from the application. The terms incoming
and outgoing generally represent the flow direction towards the
remote application. Outgoing is viewed as going up the stack from
Application to Service sub-layer to Forwarding sub-layer and incoming
is the reverse. Although, in examples where there is aggregation and
disaggregation outgoing relates to the aggregating output and
incoming relates to the disaggregating flows.
At the egress the YANG model is handing off IP or MPLS to a next hop
and a routing next hop structure is used.
4.1. DetNet Application Flow YANG 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). The application flows can be either layer 2 or layer 3 flows. node). The application flows can be either layer 2 or layer 3 flows.
To map a flow at the User Network Interface (UNI), the corresponding To map a flow at the User Network Interface (UNI), the corresponding
attributes are defined in [I-D.ietf-detnet-flow-information-model]. attributes are defined in [RFC9016].
3.2. DetNet Service Sub-layer YANG Attributes 4.2. DetNet Service Sub-layer YANG Attributes
DetNet service functions, e.g., DetNet tunnel initialization/ DetNet service functions, e.g., DetNet tunnel initialization/
termination and service protection, are provided in the DetNet termination and service protection, are provided in the DetNet
service sub-layer. To support these functions, the following service service sub-layer. To support these functions, the following service
attributes need to be configured: attributes need to be configured:
* DetNet flow identification * DetNet flow identification
* Service function indication, indicates which service function will * 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). The corresponding arguments for service functions indication). The corresponding arguments for service functions
also needs to be defined. also needs to be defined.
3.3. DetNet Forwarding Sub-layer YANG Attributes 4.3. DetNet Forwarding Sub-layer YANG Attributes
As defined in [RFC8655], DetNet forwarding sub-layer optionally As defined in [RFC8655], DetNet forwarding sub-layer optionally
provides congestion protection for DetNet flows over paths provided provides congestion protection for DetNet flows over paths provided
by the underlying network. Explicit route is another mechanism that by the underlying network. Explicit route is another mechanism that
is used by DetNet to avoid temporary interruptions caused by the is used by DetNet to avoid temporary interruptions caused by the
convergence of routing or bridging protocols, and it is also convergence of routing or bridging protocols, and it is 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:
* Flow Specification and Traffic Requirements, refers to * Flow Specification and Traffic Requirements, refers to [RFC9016].
[I-D.ietf-detnet-flow-information-model]. These may used for These may used for resource reservation, flow shaping, filtering
resource reservation, flow shaping, filtering and policing by a and policing by a control plane or other network management and
control plane or other network management and control mechanisms. control mechanisms.
* Since this model programs the data plane existing explicit route * Since this model programs the data plane existing explicit route
mechanisms can be reused. If a static MPLS tunnel is used as the mechanisms can be reused. If a static MPLS tunnel is used as the
transport tunnel, the configuration need to be at every transit transport tunnel, the configuration need to be at every transit
node along the path. For an IP based path, the static node along the path. For an IP based path, the static
configuration is similar to the static MPLS case. This document configuration is similar to the static MPLS case. This document
provides data-plane configuration of IP addresses or MPLS labels provides data-plane configuration of IP addresses or MPLS labels
but it does not provide control plane mapping or other aspects. but it does not provide control plane mapping or other aspects.
4. DetNet Flow Aggregation 5. DetNet Flow Aggregation
DetNet provides the capability of flow aggregation to improve DetNet provides the capability of flow aggregation to improve
scalability of DetNet data, management and control planes. scalability of DetNet data, management and control planes.
Aggregated flows can be viewed by the some DetNet nodes as individual Aggregated flows can be viewed by the some DetNet nodes as individual
DetNet flows. When aggregating DetNet flows, the flows should be DetNet flows. When aggregating DetNet flows, the flows should be
compatible: if bandwidth reservations are used, the reservation compatible: if bandwidth reservations are used, the reservation
should be a reasonable representation of the individual reservations; should be a reasonable representation of the individual reservations;
if maximum delay bounds are used, the system should ensure that the if maximum delay bounds are used, the system should ensure that the
aggregate does not exceed the delay bounds of the individual flows. aggregate does not exceed the delay bounds of the individual flows.
skipping to change at page 5, line 38 skipping to change at page 7, line 24
* Relay node aggregates the forwarding sub-layers of DetNet flow * Relay node aggregates the forwarding sub-layers of DetNet flow
into a service sub-layer of Aggregated DetNet flow into a service sub-layer of Aggregated DetNet flow
* Transit node aggregates the forwarding sub-layers of DetNet flows * Transit node aggregates the forwarding sub-layers of DetNet flows
into a forwarding sub-layer into a forwarding sub-layer
Traffic requirements and traffic specification may be tracked for Traffic requirements and traffic specification may be tracked for
individual or aggregate flows but reserving resources and tracking individual or aggregate flows but reserving resources and tracking
the services in the aggregated flow is out of scope. the services in the aggregated flow is out of scope.
5. DetNet YANG Structure Considerations 6. DetNet YANG Structure 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| | | App Flows | |service s-l | |forwarding s-l| |
+-----+-----+ +-----+-----+ +-------+------+ | +-----+------+ +-----+------+ +-------+------+ |
| | | | | | | |
+-----+-----+ +-----+-----+ +-------+------+ +--------+-------+ +-----+------+ +-----+------+ +-------+------+ |
| Ref to TR | | Ref to TR | | Ref to TR | | Traffic Profile| | Reference | | Reference | | Reference | |
+-----------+ +-----------+ +--------------+ +----------------+ | to Traffic | | to Traffic | | to Traffic | +--------+-------+
| Profile | | Profile | | Profile | | Traffic Profile|
+------------+ +------------+ +--------------+ +----------------+
There are three instances in DetNet YANG Model: App-flow instance, There are three layer types in DetNet YANG Model: App-flow data
service sub-layer instance and forwarding sub-layer instance, layer, service sub-layer and forwarding sub-layer. Additionally, the
respectively corresponding to four parts of DetNet functions defined Traffic parameters are captured in a Traffic profile that can be
in section 3. referenced by any of the layers.
6. DetNet Configuration YANG Structures Below is a a summary YANG tree showing the major items. A complete
YANG tree is in section Appendix A.
module: ietf-detnet A traffic profile can be created for application, service sub-layer
+--rw detnet or forwarding sub-layer. A single profile may be shared by multiple
+--rw traffic-profile* [profile-name] applications/sub-layer. Each profile indicates the members that
| +--rw profile-name string currently are using a profile.
| +--rw traffic-requirements
| | +--rw min-bandwidth? uint64
| | +--rw max-latency? uint32
| | +--rw max-latency-variation? uint32
| | +--rw max-loss? uint32
| | +--rw max-consecutive-loss-tolerance? uint32
| | +--rw max-misordering? uint32
| +--rw flow-spec
| | +--rw interval? uint32
| | +--rw max-pkts-per-interval? uint32
| | +--rw max-payload-size? uint32
| | +--rw min-payload-size? uint32
| | +--rw min-pkts-per-interval? uint32
| +--ro member-apps* app-flow-ref
| +--ro member-services* service-sub-layer-ref
| +--ro member-fwd-sublayers* forwarding-sub-layer-ref
+--rw app-flows
| +--rw app-flow* [name]
| +--rw name string
| +--rw app-flow-bidir-congruent? boolean
| +--ro outgoing-service? service-sub-layer-ref
| +--ro incoming-service? service-sub-layer-ref
| +--rw traffic-profile? traffic-profile-ref
| +--rw ingress
| | +--rw name? string
| | +--ro app-flow-status? identityref
| | +--rw interface? if:interface-ref
| | +--rw (data-flow-type)?
| | +--:(tsn-app-flow)
| | | +--rw tsn-app-flow
| | | +--rw source-mac-address?
| | | | yang:mac-address
| | | +--rw destination-mac-address?
| | | | yang:mac-address
| | | +--rw ethertype?
| | | | ethertypes:ethertype
| | | +--rw vlan-id?
| | | | dot1q-types:vlanid
| | | +--rw pcp?
| | | dot1q-types:priority-type
| | +--:(ip-app-flow)
| | | +--rw ip-app-flow
| | | +--rw src-ip-prefix? inet:ip-prefix
| | | +--rw dest-ip-prefix? inet:ip-prefix
| | | +--rw protocol-next-header? uint8
| | | +--rw dscp? inet:dscp
| | | +--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 mpls-app-flow
| | +--rw (label-space)?
| | +--:(context-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 egress
| +--rw name? string
| +--rw (application-type)?
| +--:(ethernet)
| | +--rw ethernet
| | +--rw interface? if:interface-ref
| +--:(ip-mpls)
| +--rw ip-mpls
| +--rw (next-hop-options)
| +--:(simple-next-hop)
| | +--rw outgoing-interface?
| | | if:interface-ref
| | +--rw (flow-type)?
| | +--:(ip)
| | | +--rw next-hop-address?
| | | inet:ip-address
| | +--:(mpls)
| | +--rw mpls-label-stack
| | +--rw entry* [id]
| | +--rw id uint8
| | +--rw label?
| | | rt-types:mpls-label
| | +--rw ttl? uint8
| | +--rw traffic-class? uint8
| +--:(next-hop-list)
| +--rw next-hop* [hop-index]
| +--rw hop-index uint8
| +--rw outgoing-interface?
| | if:interface-ref
| +--rw (flow-type)?
| +--:(ip)
| | +--rw next-hop-address?
| | inet:ip-address
| +--:(mpls)
| +--rw mpls-label-stack
| +--rw entry* [id]
| +--rw id
| | uint8
| +--rw label?
| | rt-types:mpls-label
| +--rw ttl?
| | uint8
| +--rw traffic-class?
| uint8
+--rw service-sub-layer
| +--rw service-sub-layer-list* [name]
| +--rw name string
| +--rw service-rank? uint8
| +--rw traffic-profile? traffic-profile-ref
| +--rw service-protection
| | +--rw service-protection-type? service-protection-type
| | +--rw sequence-number-length? sequence-number-field
| +--rw service-operation-type? service-operation-type
| +--rw incoming-type
| | +--rw (incoming-type)
| | +--:(app-flow)
| | | +--rw app-flow
| | | +--rw app-flow-list* app-flow-ref
| | +--:(service-aggregation)
| | | +--rw service-aggregation
| | | +--rw service-sub-layer*
| | | service-sub-layer-ref
| | +--:(forwarding-aggregation)
| | | +--rw forwarding-aggregation
| | | +--rw forwarding-sub-layer*
| | | forwarding-sub-layer-ref
| | +--:(service-id)
| | +--rw service-id
| | +--rw (detnet-flow-type)?
| | +--:(ip-detnet-flow)
| | | +--rw src-ip-prefix?
| | | | inet:ip-prefix
| | | +--rw dest-ip-prefix?
| | | | inet:ip-prefix
| | | +--rw protocol-next-header? uint8
| | | +--rw dscp? inet:dscp
| | | +--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)?
| | +--:(context-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 outgoing-type
| +--rw (outgoing-type)
| +--:(forwarding-sub-layer)
| | +--rw forwarding-sub-layer
| | +--rw service-outgoing-list*
| | [service-outgoing-index]
| | +--rw service-outgoing-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 protocol-next-header? uint8
| | | +--rw dscp?
| | | | inet:dscp
| | | +--rw flow-label?
| | | | inet:ipv6-flow-label
| | | +--rw source-port?
| | | | inet:port-number
| | | +--rw destination-port?
| | | inet:port-number
| | +--rw forwarding-sub-layer*
| | forwarding-sub-layer-ref
| +--:(service-sub-layer)
| | +--rw service-sub-layer
| | +--rw aggregation-service-sub-layer?
| | | service-sub-layer-ref
| | +--rw service-label
| | +--rw mpls-label-stack
| | +--rw entry* [id]
| | +--rw id uint8
| | +--rw label?
| | | rt-types:mpls-label
| | +--rw ttl? uint8
| | +--rw traffic-class? uint8
| +--:(app-flow)
| | +--rw app-flow
| | +--rw app-flow-list* app-flow-ref
| +--:(service-disaggregation)
| | +--rw service-disaggregation
| | +--rw service-sub-layer*
| | service-sub-layer-ref
| +--:(forwarding-disaggregation)
| +--rw forwarding-disaggregation
| +--rw forwarding-sub-layer*
| forwarding-sub-layer-ref
+--rw forwarding-sub-layer
+--rw forwarding-sub-layer-list* [name]
+--rw name string
+--rw traffic-profile? traffic-profile-ref
+--rw forwarding-operation-type?
| forwarding-operations-type
+--rw incoming-type
| +--rw (incoming-type)
| +--:(service-sub-layer)
| | +--rw service-sub-layer
| | +--rw service-sub-layer*
| | service-sub-layer-ref
| +--:(forwarding-aggregation)
| | +--rw forwarding-aggregation
| | +--rw forwarding-sub-layer*
| | forwarding-sub-layer-ref
| +--:(forwarding-id)
| +--rw forwarding-id
| +--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 protocol-next-header? uint8
| | +--rw dscp? inet:dscp
| | +--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)?
| +--:(context-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 outgoing-type
+--rw (outgoing-type)
+--:(interface)
| +--rw interface
| +--rw (next-hop-options)
| +--:(simple-next-hop)
| | +--rw outgoing-interface?
| | | if:interface-ref
| | +--rw (flow-type)?
| | +--:(ip)
| | | +--rw (operation-type)?
| | | +--:(ip-forwarding)
| | | | +--rw next-hop-address?
| | | | inet:ip-address
| | | +--:(mpls-over-ip-encapsulation)
| | | +--rw src-ip-address?
| | | | inet:ip-address
| | | +--rw dest-ip-address?
| | | | inet:ip-address
| | | +--rw protocol-next-header?
| | | | uint8
| | | +--rw dscp?
| | | | inet:dscp
| | | +--rw flow-label?
| | | | inet:ipv6-flow-label
| | | +--rw source-port?
| | | | inet:port-number
| | | +--rw destination-port?
| | | inet:port-number
| | +--:(mpls)
| | +--rw mpls-label-stack
| | +--rw entry* [id]
| | +--rw id uint8
| | +--rw label?
| | | rt-types:mpls-label
| | +--rw ttl? uint8
| | +--rw traffic-class? uint8
| +--:(next-hop-list)
| +--rw next-hop* [hop-index]
| +--rw hop-index
| | uint8
| +--rw outgoing-interface?
| | if:interface-ref
| +--rw (flow-type)?
| +--:(ip)
| | +--rw (operation-type)?
| | +--:(ip-forwarding)
| | | +--rw next-hop-address?
| | | inet:ip-address
| | +--:(mpls-over-ip-
| | encapsulation)
| | +--rw src-ip-address?
| | | inet:ip-address
| | +--rw dest-ip-address?
| | | inet:ip-address
| | +--rw protocol-next-header?
| | | uint8
| | +--rw dscp?
| | | inet:dscp
| | +--rw flow-label?
| | | inet:ipv6-flow-label
| | +--rw source-port?
| | | inet:port-number
| | +--rw destination-port?
| | inet:port-number
| +--:(mpls)
| +--rw mpls-label-stack
| +--rw entry* [id]
| +--rw id
| | uint8
| +--rw label?
| | rt-types:mpls-label
| +--rw ttl?
| | uint8
| +--rw traffic-class?
| uint8
+--:(service-aggregation)
| +--rw service-aggregation
| +--rw aggregation-service-sub-layer?
| | service-sub-layer-ref
| +--rw optional-forwarding-label
| +--rw mpls-label-stack
| +--rw entry* [id]
| +--rw id uint8
| +--rw label?
| | rt-types:mpls-label
| +--rw ttl? uint8
| +--rw traffic-class? uint8
+--:(forwarding-sub-layer)
| +--rw forwarding-sub-layer
| +--rw aggregation-forwarding-sub-layer?
| | forwarding-sub-layer-ref
| +--rw forwarding-label
| +--rw mpls-label-stack
| +--rw entry* [id]
| +--rw id uint8
| +--rw label?
| | rt-types:mpls-label
| +--rw ttl? uint8
| +--rw traffic-class? uint8
+--:(service-sub-layer)
| +--rw service-sub-layer
| +--rw service-sub-layer*
| service-sub-layer-ref
+--:(forwarding-disaggregation)
+--rw forwarding-disaggregation
+--rw forwarding-sub-layer*
forwarding-sub-layer-ref
7. DetNet Configuration YANG Model Depending on which DetNet layers and functions are required, some or
all of the components may configured. Examples are shown in
Appendix B.
7. DetNet Configuration YANG Structures
The following is a partial tree representation of the YANG as defined
in [RFC8340]. This corresponds to the structure layout in the
previous section.
module: ietf-detnet
+--rw detnet
+--rw traffic-profile* [name]
| +--rw name string
| +--rw traffic-requirements
| +--rw traffic-spec
| +--ro member-apps* app-flow-ref
| +--ro member-services* service-sub-layer-ref
| +--ro member-fwd-sublayers* forwarding-sub-layer-ref
+--rw app-flows
| +--rw app-flow* [name]
| +--rw name string
| +--rw bidir-congruent? boolean
| +--ro outgoing-service? service-sub-layer-ref
| +--ro incoming-service? service-sub-layer-ref
| +--rw traffic-profile? traffic-profile-ref
| +--rw ingress
| | ...
| +--rw egress
| ...
+--rw service
| +--rw sub-layer* [name]
| +--rw name string
| +--rw service-rank? uint8
| +--rw traffic-profile? traffic-profile-ref
| +--rw service-protection
| | ...
| +--rw operation? operation
| +--rw incoming
| | ...
| +--rw outgoing
| ...
+--rw forwarding
+--rw sub-layer* [name]
+--rw name string
+--rw traffic-profile? traffic-profile-ref
+--rw operation? forwarding-operations
+--rw incoming
| ...
+--rw outgoing
...
8. DetNet Configuration YANG Model
The following model has references to RFCs [RFC4303], [RFC8349],
[RFC8960], [RFC8964], and [IEEE8021Q].
<CODE BEGINS> <CODE BEGINS>
module ietf-detnet { module ietf-detnet {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-detnet"; namespace "urn:ietf:params:xml:ns:yang:ietf-detnet";
prefix ietf-detnet; prefix dnet;
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
reference reference
"RFC 6021 - Common YANG Data Types."; "RFC 6991 - Common YANG Data Types.";
} }
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
reference reference
"RFC 6991 - Common YANG Data Types."; "RFC 6991 - Common YANG Data Types.";
} }
import ietf-ethertypes { import ietf-ethertypes {
prefix ethertypes; prefix ethertypes;
reference reference
"RFC 8519 - YANG Data Model for Network Access Control "RFC 8519 - YANG Data Model for Network Access Control
skipping to change at page 17, line 20 skipping to change at page 11, line 51
This version of this YANG module is part of RFC XXXX This version of this YANG module is part of RFC XXXX
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
for full legal notices. for full legal notices.
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
'MAY', and 'OPTIONAL' in this document are to be interpreted as 'MAY', and 'OPTIONAL' in this document are to be interpreted as
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
they appear in all capitals, as shown here. "; they appear in all capitals, as shown here. ";
revision 2021-02-17 { revision 2021-10-04 {
description description
"initial revision"; "initial revision";
reference reference
"RFC XXXX: draft-ietf-detnet-yang-10"; "RFC XXXX: Deterministic Networking (DetNet) YANG Model";
} }
identity app-status { identity app-status {
description description
"Base identity from which all application-status "Base identity from which all application-status
status types are derived."; status types are derived.";
reference reference
"draft-ietf-detnet-flow-information-model Section 5.8"; "RFC 9016 Section 5.8";
} }
identity none { identity none {
base app-status; base app-status;
description description
"This Application has no status. This type of status is "This Application has no status. This type of status is
expected when the configuration is incomplete."; expected when the configuration is incomplete.";
reference reference
"draft-ietf-detnet-flow-information-model Section 5.8"; "RFC 9016 Section 5.8";
} }
identity ready { identity ready {
base app-status; base app-status;
description description
"Application ingress/egress ready."; "Application ingress/egress ready.";
reference reference
"draft-ietf-detnet-flow-information-model Section 5.8"; "RFC 9016 Section 5.8";
} }
identity failed { identity failed {
base app-status; base app-status;
description description
"Application ingres/egresss failed."; "Application ingres/egresss failed.";
reference reference
"draft-ietf-detnet-flow-information-model Section 5.8"; "RFC 9016 Section 5.8";
} }
identity out-of-service { identity out-of-service {
base app-status; base app-status;
description description
"Application Administratively blocked."; "Application Administratively blocked.";
reference reference
"draft-ietf-detnet-flow-information-model Section 5.8"; "RFC 9016 Section 5.8";
} }
identity partial-failed { identity partial-failed {
base app-status; base app-status;
description description
"This is an Application with one or more Egress ready, and one "This is an Application with one or more Egress ready, and one
or more Egress failed. The DetNet flow can be used if the or more Egress failed. The DetNet flow can be used if the
Ingress is Ready."; Ingress is Ready.";
reference reference
"draft-ietf-detnet-flow-information-model Section 5.8"; "RFC 9016 Section 5.8";
} }
typedef app-flow-ref { typedef app-flow-ref {
type leafref { type leafref {
path "/ietf-detnet:detnet" path "/dnet:detnet"
+ "/ietf-detnet:app-flows" + "/dnet:app-flows"
+ "/ietf-detnet:app-flow" + "/dnet:app-flow"
+ "/ietf-detnet:name"; + "/dnet:name";
} }
description description
"This is an Application Reference."; "This is an Application Reference.";
} }
typedef service-sub-layer-ref { typedef service-sub-layer-ref {
type leafref { type leafref {
path "/ietf-detnet:detnet" path "/dnet:detnet"
+ "/ietf-detnet:service-sub-layer" + "/dnet:service"
+ "/ietf-detnet:service-sub-layer-list" + "/dnet:sub-layer"
+ "/ietf-detnet:name"; + "/dnet:name";
} }
description description
"This is a Service sub-layer Reference."; "This is a Service sub-layer Reference.";
} }
typedef forwarding-sub-layer-ref { typedef forwarding-sub-layer-ref {
type leafref { type leafref {
path "/ietf-detnet:detnet" path "/dnet:detnet"
+ "/ietf-detnet:forwarding-sub-layer" + "/dnet:forwarding"
+ "/ietf-detnet:forwarding-sub-layer-list" + "/dnet:sub-layer"
+ "/ietf-detnet:name"; + "/dnet:name";
} }
description description
"This is a Forwarding sub-layer Reference."; "This is a Forwarding sub-layer Reference.";
} }
typedef traffic-profile-ref { typedef traffic-profile-ref {
type leafref { type leafref {
path "/ietf-detnet:detnet" path "/dnet:detnet"
+ "/ietf-detnet:traffic-profile" + "/dnet:traffic-profile"
+ "/ietf-detnet:profile-name"; + "/dnet:name";
} }
description description
"This is a Traffic Profile Reference."; "This is a Traffic Profile Reference.";
} }
typedef ipsec-spi { typedef ipsec-spi {
type uint32 { type uint32 {
range "1..max"; range "1..max";
} }
description description
"IPsec Security Parameters Index."; "IPsec Security Parameters Index. A 32 bit value
where 0 is reserved.";
reference reference
"IETF RFC 6071"; "IETF RFC 4303 Encapsulating Security Payload (ESP).";
} }
typedef service-operation-type { typedef operation {
type enumeration { type enumeration {
enum service-initiation { enum initiation {
description description
"This is an initiating service sub-layer encapsulation."; "This is an initiating service sub-layer encapsulation.";
} }
enum service-termination { enum termination {
description description
"Operation for DetNet service sub-layer decapsulation."; "Operation for DetNet service sub-layer decapsulation.";
} }
enum service-relay { enum relay {
description description
"Operation for DetNet service sub-layer swap."; "Operation for DetNet service sub-layer swap.";
} }
enum non-detnet { enum non-detnet {
description description
"No operation for DetNet service sub-layer."; "No operation for DetNet service sub-layer.";
} }
} }
description description
"Operation type identifies the behavior for this service "Operation type identifies the behavior for this service
sub-layer instance. Operations are described as unidirectional sub-layer. Operations are described as unidirectional
but a service sub-layer may combine operation types."; but a service sub-layer may combine operation types.";
} }
typedef forwarding-operations-type { typedef forwarding-operations {
type enumeration { type enumeration {
enum impose-and-forward { enum impose-and-forward {
description description
"This operation impose outgoing label(s) and forward to "This operation impose outgoing label(s) and forward to
next-hop."; next-hop.";
reference reference
" A YANG Data Model for MPLS Base " A YANG Data Model for MPLS Base RFC 8960.";
draft-ietf-mpls-base-yang.";
} }
enum pop-and-forward { enum pop-and-forward {
description description
"This operation pops the incoming label and forwards to "This operation pops the incoming label and forwards to
the next-hop."; the next-hop.";
reference reference
" A YANG Data Model for MPLS Base " A YANG Data Model for MPLS Base RFC 8960.";
draft-ietf-mpls-base-yang.";
} }
enum pop-impose-and-forward { enum pop-impose-and-forward {
description description
"This operation pops the incoming label, imposes one or "This operation pops the incoming label, imposes one or
more outgoing label(s) and forwards to the next-hop."; more outgoing label(s) and forwards to the next-hop.";
reference reference
" A YANG Data Model for MPLS Base " A YANG Data Model for MPLS Base RFC 8960.";
draft-ietf-mpls-base-yang.";
} }
enum swap-and-forward { enum swap-and-forward {
description description
"This operation swaps incoming label, with an outgoing "This operation swaps incoming label, with an outgoing
label and forwards to the next-hop."; label and forwards to the next-hop.";
reference reference
" A YANG Data Model for MPLS Base " A YANG Data Model for MPLS Base RFC 8960.";
draft-ietf-mpls-base-yang.";
} }
enum forward { enum forward {
description description
"This operation forward to next-hop."; "This operation forward to next-hop.";
} }
enum pop-and-lookup { enum pop-and-lookup {
description description
"This operation pops incoming label and performs a "This operation pops incoming label and performs a
lookup."; lookup.";
} }
} }
description description
"MPLS operations types. This is an enum modeled after the "MPLS operations types. This is an enum modeled after the
MPLS enum. The first 4 enums are the same as A YANG Data MPLS enum. The enums are the same as A YANG Data Model
Model for MPLS Base. draft-ietf-mpls-base-yang."; for MPLS Base. RFC 8960.";
} }
typedef service-protection-type { typedef service-protection {
type enumeration { type enumeration {
enum none { enum none {
description description
"No service protection provided."; "No service protection provided.";
} }
enum replication { enum replication {
description description
"A Packet Replication Function (PRF) replicates DetNet "A Packet Replication Function (PRF) replicates DetNet
flow packets and forwards them to one or more next hops in flow packets and forwards them to one or more next hops in
the DetNet domain. The number of packet copies sent to the DetNet domain. The number of packet copies sent to
skipping to change at page 22, line 16 skipping to change at page 16, line 44
enum elimination-ordering-replication { enum elimination-ordering-replication {
description description
"A combination of PEF, POF and PRF that can be implemented "A combination of PEF, POF and PRF that can be implemented
by an edge node, a relay node, or an end system."; by an edge node, a relay node, or an end system.";
} }
} }
description description
"This typedef describes the service protection types."; "This typedef describes the service protection types.";
} }
typedef sequence-number-generation-type { typedef sequence-number-generation {
type enumeration { type enumeration {
enum copy-from-app-flow { enum copy-from-app-flow {
description description
"This type means copy the app-flow sequence number to the "This type means copy the app-flow sequence number to the
DetNet-flow."; DetNet-flow.";
} }
enum generate-by-detnet-flow { enum generate-by-detnet-flow {
description description
"This type means generate the sequence number by the "This type means generate the sequence number by the
DetNet flow."; DetNet flow.";
skipping to change at page 23, line 4 skipping to change at page 17, line 32
"A 16-bit DetNet sequence number field is used."; "A 16-bit DetNet sequence number field is used.";
} }
enum long-sn { enum long-sn {
value 28; value 28;
description description
"A 28-bit DetNet sequence number field is used."; "A 28-bit DetNet sequence number field is used.";
} }
} }
description description
"This type captures the sequence number behavior."; "This type captures the sequence number behavior.";
} }
grouping ip-header { grouping ip-header {
description description
"This grouping captures the IPv4/IPv6 packet header "This grouping captures the IPv4/IPv6 packet header
information. it is modeled after existing fields."; information. it is modeled after existing fields.";
leaf src-ip-address { leaf src-ip-address {
type inet:ip-address-no-zone; type inet:ip-address-no-zone;
description description
"The source IP address in the header."; "The source IP address in the header.";
reference reference
"RFC 6021 Common YANG Data Types"; "RFC 6991 Common YANG Data Types";
} }
leaf dest-ip-address { leaf dest-ip-address {
type inet:ip-address-no-zone; type inet:ip-address-no-zone;
description description
"The destination IP address in the header."; "The destination IP address in the header.";
reference reference
"RFC 6021 Common YANG Data Types"; "RFC 6991 Common YANG Data Types";
} }
leaf protocol-next-header { leaf protocol-next-header {
type uint8; type uint8;
description description
"Internet Protocol number. Refers to the protocol of the "Internet Protocol number. Refers to the protocol of the
payload. In IPv6, this field is known as 'next-header', payload. In IPv6, this field is known as 'next-header',
and if extension headers are present, the protocol is and if extension headers are present, the protocol is
present in the 'upper-layer' header."; present in the 'upper-layer' header.";
reference reference
"RFC 791: Internet Protocol "RFC 791: Internet Protocol
RFC 8200: Internet Protocol, Version 6 (IPv6) RFC 8200: Internet Protocol, Version 6 (IPv6)
Specification."; Specification.";
} }
leaf dscp { leaf dscp {
type inet:dscp; type inet:dscp;
description description
"The traffic class value in the header."; "The traffic class value in the header.";
reference reference
"RFC 6021 Common YANG Data Types"; "RFC 6991 Common YANG Data Types";
} }
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.IPV6 only."; "The flow label value of the header.IPV6 only.";
reference reference
"RFC 6021 Common YANG Data Types"; "RFC 6991 Common YANG Data Types";
} }
leaf source-port { leaf source-port {
type inet:port-number; type inet:port-number;
description description
"The source port number."; "The source port number.";
reference reference
"RFC 6021 Common YANG Data Types"; "RFC 6991 Common YANG Data Types";
} }
leaf destination-port { leaf destination-port {
type inet:port-number; type inet:port-number;
description description
"The destination port number."; "The destination port number.";
reference reference
"RFC 6021 Common YANG Data Types"; "RFC 6991 Common YANG Data Types";
} }
} }
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 25, line 24 skipping to change at page 20, line 4
grouping source-ip-port-id { grouping source-ip-port-id {
description description
"The TCP/UDP port(source/destination) identification "The TCP/UDP port(source/destination) identification
information."; information.";
container source-port { container source-port {
uses packet-fields:port-range-or-operator; uses packet-fields:port-range-or-operator;
description description
"This grouping captures the source port fields."; "This grouping captures the source port fields.";
} }
} }
grouping ip-flow-id { grouping ip-flow-id {
description description
"The IPv4/IPv6 packet header identification information."; "The IPv4/IPv6 packet header identification information.";
leaf src-ip-prefix { leaf src-ip-prefix {
type inet:ip-prefix; type inet:ip-prefix;
description description
"The source IP prefix."; "The source IP prefix.";
reference reference
"RFC 6021 Common YANG Data Types"; "RFC 6991 Common YANG Data Types";
} }
leaf dest-ip-prefix { leaf dest-ip-prefix {
type inet:ip-prefix; type inet:ip-prefix;
description description
"The destination IP prefix."; "The destination IP prefix.";
reference reference
"RFC 6021 Common YANG Data Types"; "RFC 6991 Common YANG Data Types";
} }
leaf protocol-next-header { leaf protocol-next-header {
type uint8; type uint8;
description description
"Internet Protocol number. Refers to the protocol of the "Internet Protocol number. Refers to the protocol of the
payload. In IPv6, this field is known as 'next-header', and payload. In IPv6, this field is known as 'next-header', and
if extension headers are present, the protocol is present in if extension headers are present, the protocol is present in
the 'upper-layer' header."; the 'upper-layer' header.";
reference reference
"RFC 791: Internet Protocol "RFC 791: Internet Protocol
RFC 8200: Internet Protocol, Version 6 (IPv6) RFC 8200: Internet Protocol, Version 6 (IPv6)
Specification."; Specification.";
} }
leaf dscp { leaf dscp {
type inet:dscp; type inet:dscp;
description description
"The traffic class value in the header."; "The traffic class value in the header.";
reference reference
"RFC 6021 Common YANG Data Types"; "RFC 6991 Common YANG Data Types";
} }
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.";
reference reference
"RFC 6021 Common YANG Data Types"; "RFC 6991 Common YANG Data Types";
} }
uses source-ip-port-id; uses source-ip-port-id;
uses destination-ip-port-id; uses destination-ip-port-id;
leaf ipsec-spi { leaf ipsec-spi {
type ipsec-spi; type ipsec-spi;
description description
"IPsec Security Parameters Index of the Security "IPsec Security Parameters Index of the Security
Association."; Association.";
reference reference
"IETF RFC 6071 IP Security (IPsec) and Internet Key Exchange "IETF RFC 4303 Encapsulating Security Payload (ESP).";
(IKE) Document Roadmap.";
} }
} }
grouping mpls-flow-id { grouping mpls-flow-id {
description description
"The MPLS packet header identification information."; "The MPLS packet header identification information.";
choice label-space { choice label-space {
description description
"Designates the label space being used."; "Designates the label space being used.";
case context-label-space { case context-label-space {
skipping to change at page 27, line 46 skipping to change at page 22, line 27
} }
case mpls-detnet-flow { case mpls-detnet-flow {
uses mpls-flow-id; uses mpls-flow-id;
} }
} }
} }
grouping app-flows-group { grouping app-flows-group {
description description
"Incoming or outgoing app-flow reference group."; "Incoming or outgoing app-flow reference group.";
leaf-list app-flow-list { leaf-list flow {
type app-flow-ref; type app-flow-ref;
description description
"List of ingress or egress app-flows."; "List of ingress or egress app-flows.";
} }
} }
grouping service-sub-layer-group { grouping service-sub-layer-group {
description description
"Incoming or outgoing service sub-layer reference group."; "Incoming or outgoing service sub-layer reference group.";
leaf-list service-sub-layer { leaf-list sub-layer {
type service-sub-layer-ref; type service-sub-layer-ref;
description description
"List of incoming or outgoing service sub-layers that have "List of incoming or outgoing service sub-layers that have
to aggregate or disaggregate."; to aggregate or disaggregate.";
} }
} }
grouping forwarding-sub-layer-group { grouping forwarding-sub-layer-group {
description description
"Incoming or outgoing forwarding sub-layer reference group."; "Incoming or outgoing forwarding sub-layer reference group.";
leaf-list forwarding-sub-layer { leaf-list sub-layer {
type forwarding-sub-layer-ref; type forwarding-sub-layer-ref;
description description
"List of incoming or outgoing forwarding sub-layers that "List of incoming or outgoing forwarding sub-layers that
have to aggregate or disaggregate."; have to aggregate or disaggregate.";
} }
} }
grouping detnet-header { grouping detnet-header {
description description
"DetNet header info for DetNet encapsulation or swap."; "DetNet header info for DetNet encapsulation or swap.";
choice header-type { choice header-type {
description description
"The choice of DetNet header type."; "The choice of DetNet header type.";
case detnet-mpls-header { case mpls {
description description
"MPLS label stack for DetNet MPLS encapsulation or "MPLS label stack for DetNet MPLS encapsulation or
forwarding."; forwarding.";
uses rt-types:mpls-label-stack; uses rt-types:mpls-label-stack;
} }
case detnet-ip-header { case ip {
description description
"IPv4/IPv6 packet header for DetNet IP encapsulation."; "IPv4/IPv6 packet header for DetNet IP encapsulation.";
uses ip-header; uses ip-header;
} }
} }
} }
grouping detnet-app-next-hop-content { grouping detnet-app-next-hop-content {
description description
"Generic parameters of DetNet next hops."; "Generic parameters of DetNet next hops. This follows the
principles for next hops in RFC 8349";
choice next-hop-options { choice next-hop-options {
mandatory true; mandatory true;
description description
"Options for next hops. It is expected that further cases "Options for next hops. It is expected that further cases
will be added through will be added through
augments from other modules, e.g., for recursive augments from other modules, e.g., for recursive
next hops."; next hops.";
case simple-next-hop { case simple-next-hop {
description description
"This case represents a simple next hop consisting of the "This case represents a simple next hop consisting of the
next-hop address and/or outgoing interface. next-hop address and/or outgoing interface.";
Modules for address families MUST augment this case with a
leaf containing a next-hop address of that address
family.";
leaf outgoing-interface { leaf outgoing-interface {
type if:interface-ref; type if:interface-ref;
description description
"The outgoing interface, if this is a whole interface."; "The outgoing interface, when matching all flows to
the interface.";
} }
choice flow-type { choice flow-type {
description description
"The flow type choices."; "The flow type choices.";
case ip { case ip {
leaf next-hop-address { leaf next-hop-address {
type inet:ip-address-no-zone; type inet:ip-address-no-zone;
description description
"The IP next hop case."; "The IP next hop case.";
} }
skipping to change at page 29, line 43 skipping to change at page 24, line 23
"The MPLS Label stack next hop case."; "The MPLS Label stack next hop case.";
} }
} }
} }
case next-hop-list { case next-hop-list {
description description
"Container for multiple next hops."; "Container for multiple next hops.";
list next-hop { list next-hop {
key "hop-index"; key "hop-index";
description description
"An entry in a next-hop list. Modules for address "An entry in a next-hop list.";
families MUST augment this list with a leaf containing a
next-hop address of that address family.";
leaf hop-index { leaf hop-index {
type uint8; type uint8;
description description
"A user-specified identifier utilized to uniquely "A user-specified identifier utilized to uniquely
reference the next-hop entry in the next-hop list. reference the next-hop entry in the next-hop list.
The value of this index has no semantic meaning other The value of this index has no semantic meaning other
than for referencing the entry."; than for referencing the entry.";
} }
leaf outgoing-interface { leaf outgoing-interface {
type if:interface-ref; type if:interface-ref;
description description
"Name of the outgoing interface."; "The outgoing interface, when matching all flows to
the interface.";
} }
choice flow-type { choice flow-type {
description description
"The flow types supported."; "The flow types supported.";
case ip { case ip {
leaf next-hop-address { leaf next-hop-address {
type inet:ip-address-no-zone; type inet:ip-address-no-zone;
description description
"This is the IP flow type next hop."; "This is the IP flow type next hop.";
} }
skipping to change at page 30, line 25 skipping to change at page 25, line 4
leaf next-hop-address { leaf next-hop-address {
type inet:ip-address-no-zone; type inet:ip-address-no-zone;
description description
"This is the IP flow type next hop."; "This is the IP flow type next hop.";
} }
} }
case mpls { case mpls {
uses rt-types:mpls-label-stack; uses rt-types:mpls-label-stack;
} }
} }
} }
} }
} }
} }
grouping detnet-forwarding-next-hop-content { grouping detnet-forwarding-next-hop-content {
description description
"Generic parameters of DetNet next hops."; "Generic parameters of DetNet next hops. This follows the
principles for next hops in RFC 8349";
choice next-hop-options { choice next-hop-options {
mandatory true; mandatory true;
description description
"Options for next hops. "Options for next hops.
It is expected that further cases will be added through It is expected that further cases will be added through
augments from other modules, e.g., for recursive augments from other modules, e.g., for recursive
next hops."; next hops.";
case simple-next-hop { case simple-next-hop {
description description
"This case represents a simple next hop consisting of the "This case represents a simple next hop consisting of the
next-hop address and/or outgoing interface. next-hop address and/or outgoing interface.";
Modules for address families MUST augment this case with a
leaf containing a next-hop address of that address
family.";
leaf outgoing-interface { leaf outgoing-interface {
type if:interface-ref; type if:interface-ref;
description description
"This is the interface as an outgoing type."; "The outgoing interface, when matching all flows to
the interface.";
} }
choice flow-type { choice flow-type {
description description
"These are the flow type next hop choices."; "These are the flow type next hop choices.";
case ip { case ip {
choice operation-type { choice operation-type {
description description
"This is the IP forwarding operation choices."; "This is the IP forwarding operation choices.";
case ip-forwarding { case ip-forwarding {
leaf next-hop-address { leaf next-hop-address {
skipping to change at page 31, line 26 skipping to change at page 26, line 4
} }
} }
case mpls-over-ip-encapsulation { case mpls-over-ip-encapsulation {
uses ip-header; uses ip-header;
} }
} }
} }
case mpls { case mpls {
uses rt-types:mpls-label-stack; uses rt-types:mpls-label-stack;
} }
} }
} }
case next-hop-list { case next-hop-list {
description description
"Container for multiple next hops."; "Container for multiple next hops.";
list next-hop { list next-hop {
key "hop-index"; key "hop-index";
description description
"An entry in a next-hop list. Modules for address "An entry in a next-hop list.";
families MUST augment this list with a leaf containing a
next-hop address of that address family.";
leaf hop-index { leaf hop-index {
type uint8; type uint8;
description description
"The value of the index for a hop."; "The value of the index for a hop.";
} }
leaf outgoing-interface { leaf outgoing-interface {
type if:interface-ref; type if:interface-ref;
description description
"This is a whole interface as the next hop."; "The outgoing interface, when matching all flows to
the interface.";
} }
choice flow-type { choice flow-type {
description description
"These are the flow type next hop choices."; "These are the flow type next hop choices.";
case ip { case ip {
choice operation-type { choice operation-type {
description description
"These are the next hop choices."; "These are the next hop choices.";
case ip-forwarding { case ip-forwarding {
leaf next-hop-address { leaf next-hop-address {
skipping to change at page 32, line 26 skipping to change at page 27, line 4
} }
} }
case mpls { case mpls {
uses rt-types:mpls-label-stack; uses rt-types:mpls-label-stack;
} }
} }
} }
} }
} }
} }
container detnet { container detnet {
description description
"The top level DetNet container. This contains "The top level DetNet container. This contains
applications, service sub-layers and forwarding sub-layers applications, service sub-layers and forwarding sub-layers
as well as the traffic profiles."; as well as the traffic profiles.";
list traffic-profile { list traffic-profile {
key "profile-name"; key "name";
description description
"A traffic profile."; "A traffic profile.";
leaf profile-name { leaf name {
type string; type string;
description description
"An Aggregation group ID. Zero means the service is not "An Aggregation group ID.";
part of a group.";
} }
container traffic-requirements { container traffic-requirements {
description description
"This defines the attributes of the App-flow "This defines the attributes of the App-flow
regarding bandwidth, latency, latency variation, loss, and regarding bandwidth, latency, latency variation, loss, and
misordering tolerance."; misordering tolerance.";
reference reference
"draft-ietf-detnet-flow-information-model Section 4.2"; "RFC 9016 Section 4.2";
leaf min-bandwidth { leaf min-bandwidth {
type uint64; type uint64;
units "bps"; units 'octets per second';
description description
"This is the minimum bandwidth that has to be "This is the minimum bandwidth that has to be
guaranteed for the DetNet service. MinBandwidth is guaranteed for the DetNet service. MinBandwidth is
specified in octets per second."; specified in octets per second.";
reference
"RFC 9016 Section 4.2";
} }
leaf max-latency { leaf max-latency {
type uint32; type uint32;
units "nanoseconds"; units "nanoseconds";
description description
"This is the maximum latency from Ingress to "This is the maximum latency from Ingress to
Egress(es) for a single packet of the DetNet flow. Egress(es) for a single packet of the DetNet flow.
MaxLatency is specified as an integer number of MaxLatency is specified as an integer number of
nanoseconds."; nanoseconds. Any value above the MAX 4,294,967,295
is displayed as MAX";
reference
"RFC 9016 Section 4.2";
} }
leaf max-latency-variation { leaf max-latency-variation {
type uint32; type uint32;
units "nanoseconds"; units "nanoseconds";
description description
"This is the difference between the "This is the difference between the
minimum and the maximum end-to-end one-way latency. minimum and the maximum end-to-end one-way latency.
MaxLatencyVariation is specified as an integer number of MaxLatencyVariation is specified as an integer number of
nanoseconds."; nanoseconds.";
reference
"RFC 9016 Section 4.2";
} }
leaf max-loss { leaf max-loss {
type uint32; type uint32;
description description
"This defines the maximum Packet Loss Ratio (PLR) "This defines the maximum Packet Loss Ratio (PLR)
parameter for the DetNet service between the Ingress and parameter for the DetNet service between the Ingress and
Egress(es) of the DetNet domain."; Egress(es) of the DetNet domain.";
reference
"RFC 9016 Section 4.2";
} }
leaf max-consecutive-loss-tolerance { leaf max-consecutive-loss-tolerance {
type uint32; type uint32;
units "packets"; units "packets";
description description
"Some applications have special loss requirement, such "Some applications have special loss requirement, such
as MaxConsecutiveLossTolerance. The maximum consecutive as MaxConsecutiveLossTolerance. The maximum consecutive
loss tolerance parameter describes the maximum number of loss tolerance parameter describes the maximum number of
consecutive packets whose loss can be tolerated. The consecutive packets whose loss can be tolerated. The
maximum consecutive loss tolerance can be measured for maximum consecutive loss tolerance can be measured for
example based on sequence number."; example based on sequence number.";
reference
"RFC 9016 Section 4.2";
} }
leaf max-misordering { leaf max-misordering {
type uint32; type uint32;
units "packets"; units "packets";
description description
"This describes the tolerable maximum number "This describes the tolerable maximum number
of packets that can be received out of order. The of packets that can be received out of order. The
maximum allowed misordering can be measured for example maximum allowed misordering can be measured for example
based on sequence number. The value zero for the based on sequence number. The value zero for the
maximum allowed misordering indicates that in order maximum allowed misordering indicates that in order
delivery is required, misordering cannot be tolerated."; delivery is required, misordering cannot be tolerated.";
reference
"RFC 9016 Section 4.2";
} }
} }
container flow-spec { container traffic-spec {
description description
"Flow-specification specifies how the Source transmits "Flow-specification specifies how the Source transmits
packets for the flow. This is the promise/request of the packets for the flow. This is the promise/request of the
Source to the network. The network uses this flow Source to the network. The network uses this flow
specification to allocate resources and adjust queue specification to allocate resources and adjust queue
parameters in network nodes."; parameters in network nodes.";
reference reference
"draft-ietf-detnet-flow-information-model Section 5.5"; "RFC 9016 Section 5.5";
leaf interval { leaf interval {
type uint32; type uint32;
units "nanoseconds"; units "nanoseconds";
description description
"The period of time in which the traffic "The period of time in which the traffic
specification cannot be exceeded."; specification should not be exceeded.";
reference
"RFC 9016 Section 5.5, IEEE802.1Q";
} }
leaf max-pkts-per-interval { leaf max-pkts-per-interval {
type uint32; type uint32;
description description
"The maximum number of packets that the "The maximum number of packets that the
source will transmit in one interval."; source will transmit in one interval.";
reference
"RFC 9016 Section 5.5, IEEE802.1Q";
} }
leaf max-payload-size { leaf max-payload-size {
type uint32; type uint32;
description description
"The maximum payload size that the source "The maximum payload size that the source
will transmit."; will transmit.";
reference
"RFC 9016 Section 5.5, IEEE802.1Q";
} }
leaf min-payload-size { leaf min-payload-size {
type uint32; type uint32;
description description
"The minimum payload size that the source "The minimum payload size that the source
will transmit."; will transmit., IEEE802.1Q";
} }
leaf min-pkts-per-interval { leaf min-pkts-per-interval {
type uint32; type uint32;
description description
"The minimum number of packets that the "The minimum number of packets that the
source will transmit in one interval."; source will transmit in one interval.";
reference
"RFC 9016 Section 5.5, IEEE802.1Q";
} }
} }
leaf-list member-apps { leaf-list member-apps {
type app-flow-ref; type app-flow-ref;
config false; config false;
description description
"Applications attached to this profile."; "A list of Applications attached to this profile. Each
application that uses a profile has an automatically
populated reference.";
reference
"RFC XXXX: Deterministic Networking (DetNet) YANG Model
Section 5";
} }
leaf-list member-services { leaf-list member-services {
type service-sub-layer-ref; type service-sub-layer-ref;
config false; config false;
description description
"Services attached to this profile."; "A list of Service Sub-layers attached to this profile.
Each Service Sub-layers that uses a profile has an
automatically populated reference.";
reference
"RFC XXXX: Deterministic Networking (DetNet) YANG Model
Section 5";
} }
leaf-list member-fwd-sublayers { leaf-list member-fwd-sublayers {
type forwarding-sub-layer-ref; type forwarding-sub-layer-ref;
config false; config false;
description description
"Forwarding sub-layer attached to this profile."; "A list of Forwarding Sub-layers attached to this profile.
Each Forwarding Sub-layers that uses a profile has an
automatically populated reference.";
reference
"RFC XXXX: Deterministic Networking (DetNet) YANG Model
Section 5";
} }
} }
container app-flows { container app-flows {
description description
"The DetNet app-flow configuration."; "The DetNet app-flow configuration.";
reference reference
"draft-ietf-detnet-flow-information-model Section 4.1"; "RFC 9016 Section 4.1";
list app-flow { list app-flow {
key "name"; key "name";
description description
"A unique (management) identifier of the App-flow."; "A unique (management) identifier of the App-flow.";
leaf name { leaf name {
type string; type string;
description description
"A unique (management) identifier of the App-flow."; "A unique (management) identifier of the App-flow.";
reference reference
"draft-ietf-detnet-flow-information-model "RFC 9016
Sections 4.1, 5.1"; Sections 4.1, 5.1";
} }
leaf app-flow-bidir-congruent { leaf bidir-congruent {
type boolean; type boolean;
default false; default false;
description description
"Defines the data path requirement of the App-flow "Defines the data path requirement of the App-flow
whether it must share the same data path and physical whether it must share the same data path and physical
path for both directions through the network, e.g., to path for both directions through the network, e.g., to
provide congruent paths in the two directions."; provide congruent paths in the two directions.";
reference reference
"draft-ietf-detnet-flow-information-model "RFC 9016
Section 4.2"; Section 4.2";
} }
leaf outgoing-service { leaf outgoing-service {
type service-sub-layer-ref; type service-sub-layer-ref;
config false; config false;
description description
"Binding to this applications outgoing "Binding to this applications outgoing
service."; service.";
} }
leaf incoming-service { leaf incoming-service {
skipping to change at page 36, line 23 skipping to change at page 31, line 35
"Binding to this applications incoming service."; "Binding to this applications incoming service.";
} }
leaf traffic-profile { leaf traffic-profile {
type traffic-profile-ref; type traffic-profile-ref;
description description
"The Traffic Profile for this group."; "The Traffic Profile for this group.";
} }
container ingress { container ingress {
description description
"Ingress DetNet application flows or a compound flow."; "Ingress DetNet application flows or a compound flow.";
leaf name {
type string;
description
"Ingress DetNet application.";
}
leaf app-flow-status { leaf app-flow-status {
type identityref { type identityref {
base app-status; base app-status;
} }
default none;
config false; config false;
description description
"Status of ingress application flow."; "Status of ingress application flow. This is an
operational status and defaults to none if
incomplete.";
reference reference
"draft-ietf-detnet-flow-information-model Sections "RFC 9016 Sections
4.1, 5.8"; 4.1, 5.8";
} }
leaf interface { leaf interface {
type if:interface-ref; type if:interface-ref;
mandatory true;
description description
"Interface is used for any service type where a whole "Interface is used for any service type when
interface is mapped to the applications. It may be matching all flows to the interface.";
further filtered by type.";
} }
uses data-flow-spec; uses data-flow-spec;
} //End of app-ingress } //End of app-ingress
container egress { container egress {
description description
"Route's next-hop attribute."; "Route's next-hop attribute.";
leaf name {
type string;
description
"Egress DetNet application.";
}
choice application-type { choice application-type {
description description
"This is the application type choices."; "This is the application type choices.";
container ethernet { container ethernet {
description description
"This is TSN unaware traffic that maps to an "This is TSN unaware traffic that maps to an
interface."; interface.";
leaf interface { leaf interface {
type if:interface-ref; type if:interface-ref;
description description
skipping to change at page 37, line 30 skipping to change at page 32, line 35
} }
container ip-mpls { container ip-mpls {
description description
"This is IP or MPLS DetNet application types."; "This is IP or MPLS DetNet application types.";
uses detnet-app-next-hop-content; uses detnet-app-next-hop-content;
} }
} }
} }
} }
} }
container service-sub-layer { container service {
description description
"The DetNet service sub-layer configuration."; "The DetNet service sub-layer configuration.";
list service-sub-layer-list { list sub-layer {
key "name"; key "name";
description description
"Services are indexed by name."; "Services are indexed by name.";
leaf name { leaf name {
type string; type string;
description description
"The name of the DetNet service sub-layer."; "The name of the DetNet service sub-layer.";
} }
leaf service-rank { leaf service-rank {
type uint8; type uint8;
default 255;
description description
"The DetNet rank for this service."; "The DetNet rank for this service. Defaults to 255
lowest rank if not specified.";
reference reference
"draft-ietf-detnet-flow-information-model Section 5.7."; "RFC 9016 Section 5.7.";
} }
leaf traffic-profile { leaf traffic-profile {
type traffic-profile-ref; type traffic-profile-ref;
description description
"The Traffic Profile for this service."; "The Traffic Profile for this service.";
} }
container service-protection { container service-protection {
description description
"This is the service protection type an sequence number "This is the service protection type and sequence number
options."; options.";
leaf service-protection-type { leaf protection {
type service-protection-type; type service-protection;
description description
"The DetNet service protection type such as PRF, PEF, "The DetNet service protection type such as
PEOF,PERF, and PEORF."; Packet Replication Function (PRF),
Packet Elimination Function (PEF),
Packet Replication, Elimination, and Ordering Functions
(PREOF).";
reference reference
"draft-ietf-detnet-data-plane-framework Section 4.3"; "RFC 8938 Section 4.3";
} }
leaf sequence-number-length { leaf sequence-number-length {
type sequence-number-field; type sequence-number-field;
default zero-sn;
description description
"Sequence number field length can be one of 0 (none), "Sequence number field length can be one of 0 (none),
16-bits or 28-bits."; 16-bits or 28-bits. The default is none.";
} }
} }
leaf service-operation-type { leaf operation {
type service-operation-type; type operation;
description description
"This is the service operation type for this service "This is the service operation type for this service
sub-layer;"; sub-layer;";
} }
container incoming-type { container incoming {
description description
"The DetNet service sub-layer incoming configuration."; "The DetNet service sub-layer incoming configuration.";
choice incoming-type { choice incoming {
mandatory true; mandatory true;
description description
"A service sub-layer may have App flows or other "A service sub-layer may have App flows or other
service sub-layers."; service sub-layers.";
container app-flow { container app-flow {
description description
"This service sub-layer is related to the app-flows "This service sub-layer is related to the app-flows
of the upper layer and provide ingress proxy or of the upper layer and provide ingress proxy or
ingress aggregation at the ingress node."; ingress aggregation at the ingress node.";
uses app-flows-group; uses app-flows-group;
skipping to change at page 39, line 4 skipping to change at page 34, line 15
of the upper layer and provide ingress proxy or of the upper layer and provide ingress proxy or
ingress aggregation at the ingress node."; ingress aggregation at the ingress node.";
uses app-flows-group; uses app-flows-group;
} }
container service-aggregation { container service-aggregation {
description description
"This service sub-layer is related to the service "This service sub-layer is related to the service
sub-layer of the upper layer and provide sub-layer of the upper layer and provide
service-to-service aggregation at the ingress node service-to-service aggregation at the ingress node
or relay node."; or relay node.";
uses service-sub-layer-group; uses service-sub-layer-group;
} }
container forwarding-aggregation { container forwarding-aggregation {
description description
"This service sub-layer is related to the forwarding "This service sub-layer is related to the forwarding
sub-layer of the upper layer and provide sub-layer of the upper layer and provide
forwarding-to-service aggregation at the ingress forwarding-to-service aggregation at the ingress
node or relay node."; node or relay node.";
uses forwarding-sub-layer-group; uses forwarding-sub-layer-group;
} }
container service-id { container service-id {
description description
"This service sub-layer is related to the service or "This service sub-layer is related to the service or
forwarding sub-layer of the lower layer and provide forwarding sub-layer of the lower layer and provide
DetNet service relay or termination at the relay DetNet service relay or termination at the relay
node or egress node."; node or egress node.";
uses detnet-flow-spec; uses detnet-flow-spec;
} }
} }
} }
container outgoing-type { container outgoing {
description description
"The DetNet service sub-layer outgoing configuration."; "The DetNet service sub-layer outgoing configuration.";
choice outgoing-type { choice outgoing {
mandatory true; mandatory true;
description description
"The out-going type may be a forwarding Sub-layer or a "The outgoing type may be a forwarding Sub-layer or a
service sub-layer or ? types need to be named."; service sub-layer or aggregation type.";
container forwarding-sub-layer { container forwarding-sub-layer {
description description
"This service sub-layer is sent to the forwarding "This service sub-layer is sent to the forwarding
sub-layers of the lower layer for DetNet service sub-layers of the lower layer for DetNet service
forwarding or service-to-forwarding aggregation at forwarding or service-to-forwarding aggregation at
the ingress node or relay node. When the operation the ingress node or relay node. When the operation
type is service-initiation, The service sub-layer type is service-initiation, The service sub-layer
encapsulates the DetNet Control-Word and services encapsulates the DetNet Control-Word and services
label, which are for individual DetNet flow when the label, which are for individual DetNet flow when the
incoming type is app-flow and for aggregated DetNet incoming type is app-flow and for aggregated DetNet
flow when the incoming type is service or flow when the incoming type is service or
forwarding. The service sub-layer swaps the service forwarding. The service sub-layer swaps the service
label when the operation type is service-relay."; label when the operation type is service-relay.";
list service-outgoing-list { reference
key "service-outgoing-index"; "RFC 8964 Section 4.2.1 and 4.2.2.";
list service-outgoing {
key "index";
description description
"List of the outgoing service "List of the outgoing service
that separately for each node that separately for each node
where services will be eliminated."; where services will be eliminated.";
leaf service-outgoing-index { leaf index {
type uint8; type uint8;
description description
"This index allows a list of multiple outgoing "This index allows a list of multiple outgoing
forwarding sub-layers"; forwarding sub-layers";
} }
uses detnet-header; uses detnet-header;
uses forwarding-sub-layer-group; uses forwarding-sub-layer-group;
} }
} }
container service-sub-layer { container service-sub-layer {
description description
"This service sub-layer is sent to the service "This service sub-layer is sent to the service
sub-layers of the lower layer for service-to-service sub-layers of the lower layer for service-to-service
aggregation at the ingress node or relay node. The aggregation at the ingress node or relay node. The
service sub-layer encapsulates the DetNet service sub-layer encapsulates the DetNet
Control-Word and S-label when the operation type is Control-Word and S-label when the operation type is
service-initiation, and swaps the S-label when the service-initiation, and swaps the S-label when the
operation type is service-relay."; operation type is service-relay.";
leaf aggregation-service-sub-layer { reference
"RFC 8964 Section 4.2.1 and 4.2.2.";
leaf aggregation-sub-layer {
type service-sub-layer-ref; type service-sub-layer-ref;
description description
"reference point of the service-sub-layer "reference point of the service-sub-layer
at which this service will be aggregated."; at which this service will be aggregated.";
} }
container service-label { container service-label {
description description
"This is the MPLS service sub-layer label."; "This is the MPLS service sub-layer label. This
is optional and only used when the service
sublayer uses MPLS. It is an MPLS stack since
more than a single label may be used.";
uses rt-types:mpls-label-stack; uses rt-types:mpls-label-stack;
} }
} }
container app-flow { container app-flow {
description description
"This service sub-layer is sent to the app-flow of "This service sub-layer is sent to the app-flow of
the upper layer for egress proxy at the egress node, the upper layer for egress proxy at the egress node,
and decapsulates the DetNet Control-Word and S-label and decapsulates the DetNet Control-Word and S-label
for individual DetNet service. This outgoing type for individual DetNet service. This outgoing type
only can be chosen when the operation type is only can be chosen when the operation type is
service-termination."; service-termination.";
reference
"RFC 8964 Section 4.2.1 and 4.2.2.";
uses app-flows-group; uses app-flows-group;
} }
container service-disaggregation { container service-disaggregation {
description description
"This service sub-layer is sent to the service "This service sub-layer is sent to the service
sub-layer of the upper layer for service-to-service sub-layer of the upper layer for service-to-service
disaggregation at the relay node or egress node, and disaggregation at the relay node or egress node, and
decapsulates the DetNet Control-Word and A-label for decapsulates the DetNet Control-Word and A-label for
aggregated DetNet service. This outgoing type only aggregated DetNet service. This outgoing type only
can be chosen when the operation type is can be chosen when the operation type is
service-termination."; service-termination.";
reference
"RFC 8964 Section 4.2.1 and 4.2.2.";
uses service-sub-layer-group; uses service-sub-layer-group;
} }
container forwarding-disaggregation { container forwarding-disaggregation {
description description
"This service sub-layer is sent to the forwarding "This service sub-layer is sent to the forwarding
sub-layer of the upper layer for sub-layer of the upper layer for
forwarding-to-service disaggregation at the relay forwarding-to-service disaggregation at the relay
node or egress node, and decapsulates the DetNet node or egress node, and decapsulates the DetNet
Control-Word and A-label for aggregated DetNet Control-Word and A-label for aggregated DetNet
service. This outgoing type only can be chosen when service. This outgoing type only can be chosen when
the operation type is service-termination."; the operation type is service-termination.";
reference
"RFC 8964 Section 4.2.1 and 4.2.2.";
uses forwarding-sub-layer-group; uses forwarding-sub-layer-group;
} }
} }
} }
} }
} }
container forwarding-sub-layer { container forwarding {
description description
"The DetNet forwarding sub-layer configuration."; "The DetNet forwarding sub-layer configuration.";
list forwarding-sub-layer-list { list sub-layer {
key "name"; key "name";
description description
"The List is one or more DetNet Traffic types."; "The List is one or more DetNet Traffic types.";
leaf name { leaf name {
type string; type string;
description description
"The name of the DetNet forwarding sub-layer."; "The name of the DetNet forwarding sub-layer.";
} }
leaf traffic-profile { leaf traffic-profile {
type traffic-profile-ref; type traffic-profile-ref;
description description
"The Traffic Profile for this group."; "The Traffic Profile for this group.";
} }
leaf forwarding-operation-type { leaf operation {
type forwarding-operations-type; type forwarding-operations;
description description
"This is the forwarding operation types "This is the forwarding operation types
impose-and-forward, pop-and-forward, impose-and-forward, pop-and-forward,
pop-impose-and-forward, forward, pop-and-lookup."; pop-impose-and-forward, forward, pop-and-lookup.";
} }
container incoming-type { container incoming {
description description
"The DetNet forwarding sub-layer incoming "The DetNet forwarding sub-layer incoming
configuration."; configuration.";
choice incoming-type { choice incoming {
mandatory true; mandatory true;
description description
"Cases of incoming types."; "Cases of incoming types.";
container service-sub-layer { container service-sub-layer {
description description
"This forwarding sub-layer is related to the service "This forwarding sub-layer is related to the service
sub-layers of the upper layer and provide DetNet sub-layers of the upper layer and provide DetNet
forwarding or service-to-forwarding aggregation at forwarding or service-to-forwarding aggregation at
the ingress node or relay node."; the ingress node or relay node.";
uses service-sub-layer-group; uses service-sub-layer-group;
skipping to change at page 42, line 28 skipping to change at page 38, line 4
forwarding-to-forwarding aggregation at the ingress forwarding-to-forwarding aggregation at the ingress
node or relay node or transit node."; node or relay node or transit node.";
uses forwarding-sub-layer-group; uses forwarding-sub-layer-group;
} }
container forwarding-id { container forwarding-id {
description description
"This forwarding sub-layer is related to all of the "This forwarding sub-layer is related to all of the
lower layer and provide DetNet forwarding swap or lower layer and provide DetNet forwarding swap or
termination at the transit node or relay node or termination at the transit node or relay node or
egress node."; egress node.";
leaf interface { leaf interface {
type if:interface-ref; type if:interface-ref;
description description
"This is the interface associated with the "This is the interface associated with the
forwarding sub-layer."; forwarding sub-layer.";
} }
uses detnet-flow-spec; uses detnet-flow-spec;
} }
} }
} }
container outgoing-type { container outgoing {
description description
"The DetNet forwarding sub-layer outbound "The DetNet forwarding sub-layer outbound
configuration."; configuration.";
choice outgoing-type { choice outgoing {
mandatory true; mandatory true;
description description
"This is when a service connected directly to an "This is when a service connected directly to an
interface with no forwarding sub-layer."; interface with no forwarding sub-layer.";
container container
interface { interface {
description description
"This forwarding sub-layer is sent to the interface "This forwarding sub-layer is sent to the interface
for send to next-hop at the ingress node or relay for send to next-hop at the ingress node or relay
node or transit node."; node or transit node.";
uses detnet-forwarding-next-hop-content; uses detnet-forwarding-next-hop-content;
} }
container service-aggregation { container service-aggregation {
description description
"This forwarding sub-layer is sent to the service "This forwarding sub-layer is sent to the service
sub-layers of the lower layer for sub-layers of the lower layer for
forwarding-to-service aggregation at the ingress forwarding-to-service aggregation at the ingress
node or relay node."; node or relay node.";
leaf aggregation-service-sub-layer { leaf aggregation-sub-layer {
type service-sub-layer-ref; type service-sub-layer-ref;
description description
"This is reference to the service sub-layer."; "This is a reference to the service sub-layer.";
} }
container optional-forwarding-label { container optional-forwarding-label {
description description
"This is the optional forwarding label for service "This is the optional forwarding label for service
aggregation."; aggregation.";
uses rt-types:mpls-label-stack; uses rt-types:mpls-label-stack;
} }
} }
container forwarding-sub-layer { container forwarding-sub-layer {
description description
"This forwarding sub-layer is sent to the forwarding "This forwarding sub-layer is sent to the forwarding
sub-layers of the lower layer for sub-layers of the lower layer for
forwarding-to-forwarding aggregation at the ingress forwarding-to-forwarding aggregation at the ingress
node or relay node or transit node."; node or relay node or transit node.";
leaf aggregation-forwarding-sub-layer { leaf aggregation-sub-layer {
type forwarding-sub-layer-ref; type forwarding-sub-layer-ref;
description description
"This is reference to the forwarding sub-layer."; "This is a reference to the forwarding sub-layer.";
} }
container forwarding-label { container forwarding-label {
description description
"This is the forwarding label for forwarding "This is the forwarding label for forwarding
sub-layer aggregation."; sub-layer aggregation.";
uses rt-types:mpls-label-stack; uses rt-types:mpls-label-stack;
} }
} }
container service-sub-layer { container service-sub-layer {
description description
skipping to change at page 44, line 4 skipping to change at page 39, line 28
} }
container service-sub-layer { container service-sub-layer {
description description
"This forwarding sub-layer is sent to the service "This forwarding sub-layer is sent to the service
sub-layer of the upper layer and decapsulate the sub-layer of the upper layer and decapsulate the
F-label for DetNet service or service-to-forwarding F-label for DetNet service or service-to-forwarding
disaggregation at the relay node or egress node. disaggregation at the relay node or egress node.
This outgoing type only can be chosen when the This outgoing type only can be chosen when the
operation type is pop-and-lookup."; operation type is pop-and-lookup.";
uses service-sub-layer-group; uses service-sub-layer-group;
} }
container forwarding-disaggregation { container forwarding-disaggregation {
description description
"This forwarding sub-layer is sent to the forwarding "This forwarding sub-layer is sent to the forwarding
sub-layer of the upper layer and decapsulate the sub-layer of the upper layer and decapsulate the
F-label for forwarding-to-forwarding disaggregation F-label for forwarding-to-forwarding disaggregation
at the transit node or relay node or egress node. at the transit node or relay node or egress node.
This outgoing type only can be chosen when the This outgoing type only can be chosen when the
operation type is pop-and-lookup."; operation type is pop-and-lookup.";
uses forwarding-sub-layer-group; uses forwarding-sub-layer-group;
} }
} }
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
8. IANA Considerations 10. IANA Considerations
This document makes no request of IANA. This document registers a URI in the "IETF XML Registry" [RFC3688].
Following the format in [RFC3688], the following registration is
requested to be made:
Note to RFC Editor: this section may be removed on publication as an ID: yang:ietf-detnet
RFC. URI: urn:ietf:params:xml:ns:yang:ietf-detnet
Registrant Contact: The IESG.
XML: N/A, the requested URI is an XML namespace.
9. Security Considerations This document registers YANG modules in the "YANG Module Names"
registry [RFC6020].
<TBD> Name: ietf-detnet
Maintained by IANA: N
Namespace: urn:ietf:params:xml:ns:yang:ietf-detnet
Prefix: dnet
Reference: This RFC when published.
10. Acknowledgements 10. Security Considerations
11. References Security considerations for DetNet are covered in the DetNet
Archtiecture [RFC8655].
11.1. Normative References The YANG modules specified in this document define a schema for data
that is designed to be accessed via network management protocols,
such as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF
layer is the secure transport layer, and the mandatory-to-implement
secure transport is Secure Shell (SSH) [RFC6242]. The lowest
RESTCONF layer is HTTPS, and the mandatory-to-implement secure
transport is TLS [RFC8446].
The Network Configuration Access Control Model (NACM) [RFC8341]
provides the means to restrict access for particular NETCONF or
RESTCONF users to a preconfigured subset of all available NETCONF or
RESTCONF protocol operations and content.
There are a number of data nodes defined in the modules that are
writable/creatable/deletable (i.e., config true, which is the
default). These data nodes may be considered sensitive or vulnerable
in some network environments. Write operations (e.g., edit-config)
to these data nodes without proper protection can break or
incorrectly connect DetNet flows.
11. Contributors
The editors of this document wish to thank and acknowledge the
following people who contributed substantially to the content of this
document and should be considered coauthors:
Mach(Guoyi) Chen
Huawei Technologies
Email: mach.chen@huawei.com
12. Acknowledgments
The editors of this document would like to thank Lou Berger, Tom
Petch and Xufeng Lui for their detailed comments.
13. References
13.1. Normative References
[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>.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
DOI 10.17487/RFC3688, January 2004,
<https://www.rfc-editor.org/info/rfc3688>.
[RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)",
RFC 4303, DOI 10.17487/RFC4303, December 2005,
<https://www.rfc-editor.org/info/rfc4303>.
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
the Network Configuration Protocol (NETCONF)", RFC 6020,
DOI 10.17487/RFC6020, October 2010,
<https://www.rfc-editor.org/info/rfc6020>.
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
and A. Bierman, Ed., "Network Configuration Protocol
(NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
<https://www.rfc-editor.org/info/rfc6241>.
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
<https://www.rfc-editor.org/info/rfc6242>.
[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>.
[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
<https://www.rfc-editor.org/info/rfc8040>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration
Access Control Model", STD 91, RFC 8341,
DOI 10.17487/RFC8341, March 2018,
<https://www.rfc-editor.org/info/rfc8341>.
[RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for
Routing Management (NMDA Version)", RFC 8349,
DOI 10.17487/RFC8349, March 2018,
<https://www.rfc-editor.org/info/rfc8349>.
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
<https://www.rfc-editor.org/info/rfc8446>.
[RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas,
"Deterministic Networking Architecture", RFC 8655, "Deterministic Networking Architecture", RFC 8655,
DOI 10.17487/RFC8655, October 2019, DOI 10.17487/RFC8655, October 2019,
<https://www.rfc-editor.org/info/rfc8655>. <https://www.rfc-editor.org/info/rfc8655>.
11.2. Informative References [RFC8960] Saad, T., Raza, K., Gandhi, R., Liu, X., and V. Beeram, "A
YANG Data Model for MPLS Base", RFC 8960,
DOI 10.17487/RFC8960, December 2020,
<https://www.rfc-editor.org/info/rfc8960>.
[I-D.ietf-detnet-flow-information-model] [RFC8964] Varga, B., Ed., Farkas, J., Berger, L., Malis, A., Bryant,
Varga, B., Farkas, J., Cummings, R., Jiang, Y., and D. S., and J. Korhonen, "Deterministic Networking (DetNet)
Fedyk, "DetNet Flow and Service Information Model", Work Data Plane: MPLS", RFC 8964, DOI 10.17487/RFC8964, January
in Progress, Internet-Draft, draft-ietf-detnet-flow- 2021, <https://www.rfc-editor.org/info/rfc8964>.
information-model-14, 24 January 2021,
<http://www.ietf.org/internet-drafts/draft-ietf-detnet-
flow-information-model-14.txt>.
Appendix A. Examples 13.2. Informative References
[IEEE8021Q]
IEEE, "IEEE Standard for Local and Metropolitan Area
Networks--Bridges and Bridged Networks",
DOI 10.1109/IEEESTD.2018.8403927, IEEE 802.1Q-2018, July
2018, <https://ieeexplore.ieee.org/document/8403927>.
[RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams",
BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018,
<https://www.rfc-editor.org/info/rfc8340>.
[RFC9016] Varga, B., Farkas, J., Cummings, R., Jiang, Y., and D.
Fedyk, "Flow and Service Information Model for
Deterministic Networking (DetNet)", RFC 9016,
DOI 10.17487/RFC9016, March 2021,
<https://www.rfc-editor.org/info/rfc9016>.
Appendix A. DetNet Configuration YANG Tree
This is the full YANG tree as described in [RFC8340].
module: ietf-detnet
+--rw detnet
+--rw traffic-profile* [name]
| +--rw name string
| +--rw traffic-requirements
| | +--rw min-bandwidth? uint64
| | +--rw max-latency? uint32
| | +--rw max-latency-variation? uint32
| | +--rw max-loss? uint32
| | +--rw max-consecutive-loss-tolerance? uint32
| | +--rw max-misordering? uint32
| +--rw traffic-spec
| | +--rw interval? uint32
| | +--rw max-pkts-per-interval? uint32
| | +--rw max-payload-size? uint32
| | +--rw min-payload-size? uint32
| | +--rw min-pkts-per-interval? uint32
| +--ro member-apps* app-flow-ref
| +--ro member-services* service-sub-layer-ref
| +--ro member-fwd-sublayers* forwarding-sub-layer-ref
+--rw app-flows
| +--rw app-flow* [name]
| +--rw name string
| +--rw bidir-congruent? boolean
| +--ro outgoing-service? service-sub-layer-ref
| +--ro incoming-service? service-sub-layer-ref
| +--rw traffic-profile? traffic-profile-ref
| +--rw ingress
| | +--ro app-flow-status? identityref
| | +--rw interface if:interface-ref
| | +--rw (data-flow-type)?
| | +--:(tsn-app-flow)
| | | +--rw tsn-app-flow
| | | +--rw source-mac-address?
| | | | yang:mac-address
| | | +--rw destination-mac-address?
| | | | yang:mac-address
| | | +--rw ethertype?
| | | | ethertypes:ethertype
| | | +--rw vlan-id?
| | | | dot1q-types:vlanid
| | | +--rw pcp?
| | | dot1q-types:priority-type
| | +--:(ip-app-flow)
| | | +--rw ip-app-flow
| | | +--rw src-ip-prefix? inet:ip-prefix
| | | +--rw dest-ip-prefix? inet:ip-prefix
| | | +--rw protocol-next-header? uint8
| | | +--rw dscp? inet:dscp
| | | +--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 mpls-app-flow
| | +--rw (label-space)?
| | +--:(context-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 egress
| +--rw (application-type)?
| +--:(ethernet)
| | +--rw ethernet
| | +--rw interface? if:interface-ref
| +--:(ip-mpls)
| +--rw ip-mpls
| +--rw (next-hop-options)
| +--:(simple-next-hop)
| | +--rw outgoing-interface?
| | | if:interface-ref
| | +--rw (flow-type)?
| | +--:(ip)
| | | +--rw next-hop-address?
| | | inet:ip-address-no-zone
| | +--:(mpls)
| | +--rw mpls-label-stack
| | +--rw entry* [id]
| | +--rw id uint8
| | +--rw label?
| | | rt-types:mpls-label
| | +--rw ttl? uint8
| | +--rw traffic-class? uint8
| +--:(next-hop-list)
| +--rw next-hop* [hop-index]
| +--rw hop-index uint8
| +--rw outgoing-interface?
| | if:interface-ref
| +--rw (flow-type)?
| +--:(ip)
| | +--rw next-hop-address?
| | inet:ip-address-no-zone
| +--:(mpls)
| +--rw mpls-label-stack
| +--rw entry* [id]
| +--rw id
| | uint8
| +--rw label?
| | rt-types:mpls-label
| +--rw ttl?
| | uint8
| +--rw traffic-class?
| uint8
+--rw service
| +--rw sub-layer* [name]
| +--rw name string
| +--rw service-rank? uint8
| +--rw traffic-profile? traffic-profile-ref
| +--rw service-protection
| | +--rw protection? service-protection
| | +--rw sequence-number-length? sequence-number-field
| +--rw operation? operation
| +--rw incoming
| | +--rw (incoming)
| | +--:(app-flow)
| | | +--rw app-flow
| | | +--rw flow* app-flow-ref
| | +--:(service-aggregation)
| | | +--rw service-aggregation
| | | +--rw sub-layer* service-sub-layer-ref
| | +--:(forwarding-aggregation)
| | | +--rw forwarding-aggregation
| | | +--rw sub-layer* forwarding-sub-layer-ref
| | +--:(service-id)
| | +--rw service-id
| | +--rw (detnet-flow-type)?
| | +--:(ip-detnet-flow)
| | | +--rw src-ip-prefix?
| | | | inet:ip-prefix
| | | +--rw dest-ip-prefix?
| | | | inet:ip-prefix
| | | +--rw protocol-next-header? uint8
| | | +--rw dscp? inet:dscp
| | | +--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)?
| | +--:(context-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 outgoing
| +--rw (outgoing)
| +--:(forwarding-sub-layer)
| | +--rw forwarding-sub-layer
| | +--rw service-outgoing* [index]
| | +--rw index uint8
| | +--rw (header-type)?
| | | +--:(mpls)
| | | | +--rw mpls-label-stack
| | | | +--rw entry* [id]
| | | | +--rw id uint8
| | | | +--rw label?
| | | | | rt-types:mpls-label
| | | | +--rw ttl? uint8
| | | | +--rw traffic-class? uint8
| | | +--:(ip)
| | | +--rw src-ip-address?
| | | | inet:ip-address-no-zone
| | | +--rw dest-ip-address?
| | | | inet:ip-address-no-zone
| | | +--rw protocol-next-header? uint8
| | | +--rw dscp?
| | | | inet:dscp
| | | +--rw flow-label?
| | | | inet:ipv6-flow-label
| | | +--rw source-port?
| | | | inet:port-number
| | | +--rw destination-port?
| | | inet:port-number
| | +--rw sub-layer*
| | forwarding-sub-layer-ref
| +--:(service-sub-layer)
| | +--rw service-sub-layer
| | +--rw aggregation-sub-layer?
| | | service-sub-layer-ref
| | +--rw service-label
| | +--rw mpls-label-stack
| | +--rw entry* [id]
| | +--rw id uint8
| | +--rw label?
| | | rt-types:mpls-label
| | +--rw ttl? uint8
| | +--rw traffic-class? uint8
| +--:(app-flow)
| | +--rw app-flow
| | +--rw flow* app-flow-ref
| +--:(service-disaggregation)
| | +--rw service-disaggregation
| | +--rw sub-layer* service-sub-layer-ref
| +--:(forwarding-disaggregation)
| +--rw forwarding-disaggregation
| +--rw sub-layer* forwarding-sub-layer-ref
+--rw forwarding
+--rw sub-layer* [name]
+--rw name string
+--rw traffic-profile? traffic-profile-ref
+--rw operation? forwarding-operations
+--rw incoming
| +--rw (incoming)
| +--:(service-sub-layer)
| | +--rw service-sub-layer
| | +--rw sub-layer* service-sub-layer-ref
| +--:(forwarding-aggregation)
| | +--rw forwarding-aggregation
| | +--rw sub-layer* forwarding-sub-layer-ref
| +--:(forwarding-id)
| +--rw forwarding-id
| +--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 protocol-next-header? uint8
| | +--rw dscp? inet:dscp
| | +--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)?
| +--:(context-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 outgoing
+--rw (outgoing)
+--:(interface)
| +--rw interface
| +--rw (next-hop-options)
| +--:(simple-next-hop)
| | +--rw outgoing-interface?
| | | if:interface-ref
| | +--rw (flow-type)?
| | +--:(ip)
| | | +--rw (operation-type)?
| | | +--:(ip-forwarding)
| | | | +--rw next-hop-address?
| | | | inet:ip-address-no-zone
| | | +--:(mpls-over-ip-encapsulation)
| | | +--rw src-ip-address?
| | | | inet:ip-address-no-zone
| | | +--rw dest-ip-address?
| | | | inet:ip-address-no-zone
| | | +--rw protocol-next-header?
| | | | uint8
| | | +--rw dscp?
| | | | inet:dscp
| | | +--rw flow-label?
| | | | inet:ipv6-flow-label
| | | +--rw source-port?
| | | | inet:port-number
| | | +--rw destination-port?
| | | inet:port-number
| | +--:(mpls)
| | +--rw mpls-label-stack
| | +--rw entry* [id]
| | +--rw id uint8
| | +--rw label?
| | | rt-types:mpls-label
| | +--rw ttl? uint8
| | +--rw traffic-class? uint8
| +--:(next-hop-list)
| +--rw next-hop* [hop-index]
| +--rw hop-index
| | uint8
| +--rw outgoing-interface?
| | if:interface-ref
| +--rw (flow-type)?
| +--:(ip)
| | +--rw (operation-type)?
| | +--:(ip-forwarding)
| | | +--rw next-hop-address?
| | | inet:ip-address-no-zone
| | +--:(mpls-over-ip-
| | encapsulation)
| | +--rw src-ip-address?
| | | inet:ip-address-no-zone
| | +--rw dest-ip-address?
| | | inet:ip-address-no-zone
| | +--rw protocol-next-header?
| | | uint8
| | +--rw dscp?
| | | inet:dscp
| | +--rw flow-label?
| | | inet:ipv6-flow-label
| | +--rw source-port?
| | | inet:port-number
| | +--rw destination-port?
| | inet:port-number
| +--:(mpls)
| +--rw mpls-label-stack
| +--rw entry* [id]
| +--rw id
| | uint8
| +--rw label?
| | rt-types:mpls-label
| +--rw ttl?
| | uint8
| +--rw traffic-class?
| uint8
+--:(service-aggregation)
| +--rw service-aggregation
| +--rw aggregation-sub-layer?
| | service-sub-layer-ref
| +--rw optional-forwarding-label
| +--rw mpls-label-stack
| +--rw entry* [id]
| +--rw id uint8
| +--rw label?
| | rt-types:mpls-label
| +--rw ttl? uint8
| +--rw traffic-class? uint8
+--:(forwarding-sub-layer)
| +--rw forwarding-sub-layer
| +--rw aggregation-sub-layer?
| | forwarding-sub-layer-ref
| +--rw forwarding-label
| +--rw mpls-label-stack
| +--rw entry* [id]
| +--rw id uint8
| +--rw label?
| | rt-types:mpls-label
| +--rw ttl? uint8
| +--rw traffic-class? uint8
+--:(service-sub-layer)
| +--rw service-sub-layer
| +--rw sub-layer* service-sub-layer-ref
+--:(forwarding-disaggregation)
+--rw forwarding-disaggregation
+--rw sub-layer* forwarding-sub-layer-ref
Appendix B. Examples
The following examples are provided. These examples are tested with The following examples are provided. These examples are tested with
Yanglint and use operational output to exercise both config true and Yanglint and use operational output to exercise both config true and
config false objects. config false objects. Note that IPv4 and IPv6 addresses are
supported but for clarity in the examples and diagrams IPv4 has been
used in most examples. The IP types are imported from [RFC6991] and
these support both IPv4 and IPv6.
The following are examples of aggregation and disaggregation at The following are examples of aggregation and disaggregation at
various points in Detnet. Figures are provided in the PDF version of various points in Detnet. Figures are provided in the PDF version of
this document. this document.
A.1. Example A-1 JSON Configuration/Operational B.1. Example A-1 JSON Configuration/Operational
This illustrates simple aggregation. Ingress node 1 aggregates App This illustrates simple aggregation. Ingress node 1 aggregates App
flows 0 and 1 into a service sub-layer of DetNet flow 1. Two ways of flows 0 and 1 into a service sub-layer of DetNet flow 1. Two ways of
illustrating this follow, then the JSON operational data model illustrating this follow, then the JSON operational data model
corresponding to the diagrams follows. corresponding to the diagrams follows. This example uses IPv6
address format.
Please consult the PDF or HTML versions for the Case A-1 Diagram. Please consult the PDF or HTML versions for the Case A-1 Diagram.
Figure 1: Case A-1 Example JSON Operational/Configuration Figure 2: Case A-1 Example JSON Operational/Configuration
Please consult the PDF or HTML versions for the Case A-1 Diagram. Please consult the PDF or HTML versions for the Case A-1 Diagram.
Figure 2: Case A-1 Example JSON Operational/Configuration Figure 3: Case A-1 Example JSON Operational/Configuration
{ {
"ietf-interfaces:interfaces": {
"interface": [
{
"name": "eth0",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z"
}
},
{
"name": "eth1",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z"
}
},
{
"name": "eth2",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z"
}
},
{
"name": "eth3",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z"
}
},
{
"name": "eth4",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z"
}
}
]
},
"ietf-detnet:detnet": { "ietf-detnet:detnet": {
"app-flows": {
"app-flow": [
{
"name": "app-0",
"app-flow-bidir-congruent": false,
"outgoing-service": "ssl-1",
"traffic-profile": "pf-1",
"ingress": {
"app-flow-status": "ready",
"interface": "eth0",
"ip-app-flow": {
"src-ip-prefix": "1.1.1.1/32",
"dest-ip-prefix": "8.8.8.8/32",
"dscp": 6
}
}
},
{
"name": "app-1",
"app-flow-bidir-congruent": false,
"outgoing-service": "ssl-1",
"traffic-profile": "pf-1",
"ingress": {
"app-flow-status": "ready",
"interface": "eth0",
"ip-app-flow": {
"src-ip-prefix": "1.1.1.1/32",
"dest-ip-prefix": "8.8.8.8/32",
"dscp": 7
}
}
}
]
},
"traffic-profile": [ "traffic-profile": [
{ {
"profile-name": "pf-1", "name": "pf-1",
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "100000000", "min-bandwidth": "100000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 200000000, "max-latency-variation": 200000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"flow-spec": { "traffic-spec": {
"interval": 5, "interval": 5,
"max-pkts-per-interval": 10, "max-pkts-per-interval": 10,
"max-payload-size": 1500, "max-payload-size": 1500,
"min-payload-size": 100, "min-payload-size": 100,
"min-pkts-per-interval": 1 "min-pkts-per-interval": 1
}, },
"member-apps": [ "member-apps": [
"app-0", "app-0",
"app-1" "app-1"
] ]
}, },
{ {
"profile-name": "pf-2", "name": "pf-2",
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "200000000", "min-bandwidth": "200000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 200000000, "max-latency-variation": 200000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"flow-spec": { "traffic-spec": {
"interval": 5, "interval": 5,
"max-pkts-per-interval": 10, "max-pkts-per-interval": 10,
"max-payload-size": 1500, "max-payload-size": 1500,
"min-payload-size": 100, "min-payload-size": 100,
"min-pkts-per-interval": 1 "min-pkts-per-interval": 1
}, },
"member-services": [ "member-services": [
"ssl-1" "ssl-1"
] ]
}, },
{ {
"profile-name": "pf-3", "name": "pf-3",
"flow-spec": { "traffic-spec": {
"interval": 5, "interval": 5,
"max-pkts-per-interval": 10, "max-pkts-per-interval": 10,
"max-payload-size": 1500 "max-payload-size": 1500
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"fsl-1" "fsl-1"
] ]
} }
], ],
"service-sub-layer": { "app-flows": {
"service-sub-layer-list": [ "app-flow": [
{
"name": "app-0",
"bidir-congruent": false,
"outgoing-service": "ssl-1",
"traffic-profile": "pf-1",
"ingress": {
"app-flow-status": "ietf-detnet:ready",
"interface": "eth0",
"ip-app-flow": {
"src-ip-prefix": "2001:db8::1/128",
"dest-ip-prefix": "2001:db8::8/128",
"dscp": 6
}
}
},
{
"name": "app-1",
"bidir-congruent": false,
"outgoing-service": "ssl-1",
"traffic-profile": "pf-1",
"ingress": {
"app-flow-status": "ietf-detnet:ready",
"interface": "eth0",
"ip-app-flow": {
"src-ip-prefix": "2001:db8::1/128",
"dest-ip-prefix": "2001:db8::8/128",
"dscp": 7
}
}
}
]
},
"service": {
"sub-layer": [
{ {
"name": "ssl-1", "name": "ssl-1",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-2", "traffic-profile": "pf-2",
"service-operation-type": "service-initiation",
"service-protection": { "service-protection": {
"service-protection-type": "none", "protection": "none",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"incoming-type": { "operation": "initiation",
"incoming": {
"app-flow": { "app-flow": {
"app-flow-list": [ "flow": [
"app-0", "app-0",
"app-1" "app-1"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 100 "label": "100"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"fsl-1" "fsl-1"
] ]
} }
] ]
} }
} }
} }
] ]
}, },
"forwarding-sub-layer": { "forwarding": {
"forwarding-sub-layer-list": [ "sub-layer": [
{ {
"name": "fsl-1", "name": "fsl-1",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1" "ssl-1"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth2", "outgoing-interface": "eth2",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10000 "label": "10000"
} }
] ]
} }
} }
} }
} }
] ]
} }
},
"ietf-interfaces:interfaces": {
"interface": [
{
"name": "eth0",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-12-18T18:59:00-05:00"
}
},
{
"name": "eth1",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-12-18T18:59:00-05:00"
}
},
{
"name": "eth2",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-12-18T18:59:00-05:00"
}
},
{
"name": "eth3",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-12-18T18:59:00-05:00"
}
},
{
"name": "eth4",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-12-18T18:59:00-05:00"
}
}
]
} }
} }
Figure 3: Example A-1 DetNet JSON configuration Figure 4: Example A-1 DetNet JSON configuration
A.2. Example B-1 XML Config: Aggregation using a Forwarding Sub-layer B.2. Example B-1 XML Config: Aggregation using a Forwarding Sub-layer
This illustrates aggrgation in the service sub-layers of DetNet. This illustrates aggrgation in the service sub-layers of DetNet.
Flows 1 and 2 are aggregated into a forwarding sub-layer. A diagram Flows 1 and 2 are aggregated into a forwarding sub-layer. A diagram
illustrating this case is shown and then the corresponding XML illustrating this case is shown and then the corresponding XML
operational data follows. operational data follows.
Please consult the PDF or HTML versions for the Case B-1 Diagram. Please consult the PDF or HTML versions for the Case B-1 Diagram.
Figure 4: Case B-1 Example XML Config: Aggregation using a Figure 5: Case B-1 Example XML Config: Aggregation using a
Forwarding Sub-layer Forwarding Sub-layer
<interfaces <interfaces
xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces" xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"
xmlns:ia="urn:ietf:params:xml:ns:yang:iana-if-type"> xmlns:ia="urn:ietf:params:xml:ns:yang:iana-if-type">
<interface> <interface>
<name>eth0</name> <name>eth0</name>
<type>ia:ethernetCsmacd</type> <type>ia:ethernetCsmacd</type>
<oper-status>up</oper-status> <oper-status>up</oper-status>
<statistics> <statistics>
skipping to change at page 51, line 38 skipping to change at page 58, line 17
<statistics> <statistics>
<discontinuity-time>2020-12-18T23:59:00Z</discontinuity-time> <discontinuity-time>2020-12-18T23:59:00Z</discontinuity-time>
</statistics> </statistics>
</interface> </interface>
</interfaces> </interfaces>
<detnet <detnet
xmlns="urn:ietf:params:xml:ns:yang:ietf-detnet"> xmlns="urn:ietf:params:xml:ns:yang:ietf-detnet">
<app-flows> <app-flows>
<app-flow> <app-flow>
<name>app-1</name> <name>app-1</name>
<app-flow-bidir-congruent>false</app-flow-bidir-congruent> <bidir-congruent>false</bidir-congruent>
<outgoing-service>ssl-1</outgoing-service> <outgoing-service>ssl-1</outgoing-service>
<traffic-profile>1</traffic-profile> <traffic-profile>1</traffic-profile>
<ingress> <ingress>
<app-flow-status>ready</app-flow-status> <app-flow-status>ready</app-flow-status>
<interface>eth0</interface> <interface>eth0</interface>
<ip-app-flow> <ip-app-flow>
<src-ip-prefix>1.1.1.1/32</src-ip-prefix> <src-ip-prefix>192.0.2.1/32</src-ip-prefix>
<dest-ip-prefix>8.8.8.8/32</dest-ip-prefix> <dest-ip-prefix>192.0.2.8/32</dest-ip-prefix>
<dscp>6</dscp> <dscp>6</dscp>
</ip-app-flow> </ip-app-flow>
</ingress> </ingress>
</app-flow> </app-flow>
<app-flow> <app-flow>
<name>app-2</name> <name>app-2</name>
<app-flow-bidir-congruent>false</app-flow-bidir-congruent> <bidir-congruent>false</bidir-congruent>
<outgoing-service>ssl-2</outgoing-service> <outgoing-service>ssl-2</outgoing-service>
<traffic-profile>1</traffic-profile> <traffic-profile>1</traffic-profile>
<ingress> <ingress>
<app-flow-status>ready</app-flow-status> <app-flow-status>ready</app-flow-status>
<interface>eth1</interface> <interface>eth1</interface>
<ip-app-flow> <ip-app-flow>
<src-ip-prefix>1.1.1.2/32</src-ip-prefix> <src-ip-prefix>192.0.2.2/32</src-ip-prefix>
<dest-ip-prefix>8.8.8.9/32</dest-ip-prefix> <dest-ip-prefix>192.0.2.9/32</dest-ip-prefix>
<dscp>7</dscp> <dscp>7</dscp>
</ip-app-flow> </ip-app-flow>
<dscp>7</dscp>
</ingress> </ingress>
</app-flow> </app-flow>
</app-flows> </app-flows>
<traffic-profile> <traffic-profile>
<profile-name>1</profile-name> <name>1</name>
<traffic-requirements> <traffic-requirements>
<min-bandwidth>100000000</min-bandwidth> <min-bandwidth>100000000</min-bandwidth>
<max-latency>100000000</max-latency> <max-latency>100000000</max-latency>
<max-latency-variation>200000000</max-latency-variation> <max-latency-variation>200000000</max-latency-variation>
<max-loss>2</max-loss> <max-loss>2</max-loss>
<max-consecutive-loss-tolerance>5</max-consecutive-loss-tolerance> <max-consecutive-loss-tolerance>5</max-consecutive-loss-tolerance>
<max-misordering>0</max-misordering> <max-misordering>0</max-misordering>
</traffic-requirements> </traffic-requirements>
<member-apps>app-1</member-apps> <member-apps>app-1</member-apps>
<member-apps>app-2</member-apps> <member-apps>app-2</member-apps>
</traffic-profile> </traffic-profile>
<traffic-profile> <traffic-profile>
<profile-name>2</profile-name> <name>2</name>
<traffic-requirements> <traffic-requirements>
<min-bandwidth>100000000</min-bandwidth> <min-bandwidth>100000000</min-bandwidth>
<max-latency>100000000</max-latency> <max-latency>100000000</max-latency>
<max-latency-variation>200000000</max-latency-variation> <max-latency-variation>200000000</max-latency-variation>
<max-loss>2</max-loss> <max-loss>2</max-loss>
<max-consecutive-loss-tolerance>5</max-consecutive-loss-tolerance> <max-consecutive-loss-tolerance>5</max-consecutive-loss-tolerance>
<max-misordering>0</max-misordering> <max-misordering>0</max-misordering>
</traffic-requirements> </traffic-requirements>
<member-services>ssl-1</member-services> <member-services>ssl-1</member-services>
<member-services>ssl-2</member-services> <member-services>ssl-2</member-services>
</traffic-profile> </traffic-profile>
<traffic-profile> <traffic-profile>
<profile-name>3</profile-name> <name>3</name>
<flow-spec> <traffic-spec>
<interval>5</interval> <interval>5</interval>
<max-pkts-per-interval>10</max-pkts-per-interval> <max-pkts-per-interval>10</max-pkts-per-interval>
<max-payload-size>1500</max-payload-size> <max-payload-size>1500</max-payload-size>
</traffic-spec>
</flow-spec>
<member-fwd-sublayers>afl-1</member-fwd-sublayers> <member-fwd-sublayers>afl-1</member-fwd-sublayers>
</traffic-profile> </traffic-profile>
<service-sub-layer> <service>
<service-sub-layer-list> <sub-layer>
<name>ssl-1</name> <name>ssl-1</name>
<service-rank>10</service-rank> <service-rank>10</service-rank>
<traffic-profile>2</traffic-profile> <traffic-profile>2</traffic-profile>
<service-operation-type>service-initiation <operation>initiation</operation>
</service-operation-type>
<service-protection> <service-protection>
<service-protection-type>none</service-protection-type> <protection>none</protection>
<sequence-number-length>long-sn</sequence-number-length> <sequence-number-length>long-sn</sequence-number-length>
</service-protection> </service-protection>
<incoming-type> <incoming>
<app-flow> <app-flow>
<app-flow-list>app-1</app-flow-list> <flow>app-1</flow>
</app-flow> </app-flow>
</incoming-type> </incoming>
<outgoing-type> <outgoing>
<forwarding-sub-layer> <forwarding-sub-layer>
<service-outgoing-list> <service-outgoing>
<service-outgoing-index>0</service-outgoing-index> <index>0</index>
<mpls-label-stack> <mpls-label-stack>
<entry> <entry>
<id>0</id> <id>0</id>
<label>100</label> <label>100</label>
</entry> </entry>
</mpls-label-stack> </mpls-label-stack>
<forwarding-sub-layer>afl-1</forwarding-sub-layer> <sub-layer>afl-1</sub-layer>
</service-outgoing-list> </service-outgoing>
</forwarding-sub-layer> </forwarding-sub-layer>
</outgoing-type> </outgoing>
</service-sub-layer-list> </sub-layer>
<service-sub-layer-list> <sub-layer>
<name>ssl-2</name> <name>ssl-2</name>
<service-rank>10</service-rank> <service-rank>10</service-rank>
<traffic-profile>2</traffic-profile> <traffic-profile>2</traffic-profile>
<service-operation-type>service-initiation <operation>initiation</operation>
</service-operation-type>
<service-protection> <service-protection>
<service-protection-type>none</service-protection-type> <protection>none</protection>
<sequence-number-length>long-sn</sequence-number-length> <sequence-number-length>long-sn</sequence-number-length>
</service-protection> </service-protection>
<incoming-type> <incoming>
<app-flow> <app-flow>
<app-flow-list>app-2</app-flow-list> <flow>app-2</flow>
</app-flow> </app-flow>
</incoming>
</incoming-type> <outgoing>
<outgoing-type>
<forwarding-sub-layer> <forwarding-sub-layer>
<service-outgoing-list> <service-outgoing>
<service-outgoing-index>0</service-outgoing-index> <index>0</index>
<mpls-label-stack> <mpls-label-stack>
<entry> <entry>
<id>0</id> <id>0</id>
<label>103</label> <label>103</label>
</entry> </entry>
</mpls-label-stack> </mpls-label-stack>
<forwarding-sub-layer>afl-1</forwarding-sub-layer> <sub-layer>afl-1</sub-layer>
</service-outgoing-list> </service-outgoing>
</forwarding-sub-layer> </forwarding-sub-layer>
</outgoing-type> </outgoing>
</service-sub-layer-list> </sub-layer>
</service-sub-layer> </service>
<forwarding-sub-layer> <forwarding>
<forwarding-sub-layer-list> <sub-layer>
<name>afl-1</name> <name>afl-1</name>
<traffic-profile>3</traffic-profile> <traffic-profile>3</traffic-profile>
<forwarding-operation-type>impose-and-forward <operation>impose-and-forward</operation>
</forwarding-operation-type> <incoming>
<incoming-type>
<service-sub-layer> <service-sub-layer>
<service-sub-layer>ssl-1</service-sub-layer> <sub-layer>ssl-1</sub-layer>
<service-sub-layer>ssl-2</service-sub-layer> <sub-layer>ssl-2</sub-layer>
</service-sub-layer> </service-sub-layer>
</incoming-type> </incoming>
<outgoing-type> <outgoing>
<interface> <interface>
<outgoing-interface>eth2</outgoing-interface> <outgoing-interface>eth2</outgoing-interface>
<mpls-label-stack> <mpls-label-stack>
<entry> <entry>
<id>0</id> <id>0</id>
<label>10000</label> <label>10000</label>
</entry> </entry>
</mpls-label-stack> </mpls-label-stack>
</interface> </interface>
</outgoing-type> </outgoing>
</forwarding-sub-layer-list> </sub-layer>
</forwarding-sub-layer> </forwarding>
</detnet> </detnet>
Figure 5: Example B-1 DetNet XML configuration Figure 6: Example B-1 DetNet XML configuration
A.3. Example B-2 JSON Service Aggregation Configuration B.3. Example B-2 JSON Service Aggregation Configuration
This illustrates the service sub-layers of DetNet. Flows 1 and 2 are This illustrates the service sub-layers of DetNet. Flows 1 and 2 are
aggregated into a service sub-layer of aggregated DetNet flow 1. A aggregated into a service sub-layer of aggregated DetNet flow 1. A
diagram illustrating this case is shown and then the corresponding diagram illustrating this case is shown and then the corresponding
JSON operational data follows. JSON operational data follows.
Please consult the PDF or HTML versions for the Case B-2 Diagram. Please consult the PDF or HTML versions for the Case B-2 Diagram.
Figure 6: Case B-2 Example JSON Service Aggregation Figure 7: Case B-2 Example JSON Service Aggregation
{ {
"ietf-interfaces:interfaces": {
"interface": [
{
"name": "eth0",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-10-02T23:59:00Z"
}
},
{
"name": "eth1",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-10-02T23:59:00Z"
}
},
{
"name": "eth2",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-10-02T23:59:00Z"
}
},
{
"name": "eth3",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-10-02T23:59:00Z"
}
},
{
"name": "eth4",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-10-02T23:59:00Z"
}
}
]
},
"ietf-detnet:detnet": { "ietf-detnet:detnet": {
"app-flows": {
"app-flow": [
{
"name": "app-1",
"app-flow-bidir-congruent": false,
"outgoing-service": "ssl-1",
"traffic-profile": "1",
"ingress": {
"app-flow-status": "ready",
"interface": "eth0",
"ip-app-flow": {
"src-ip-prefix": "1.1.1.1/32",
"dest-ip-prefix": "8.8.8.8/32",
"dscp": 6
}
}
},
{
"name": "app-2",
"app-flow-bidir-congruent": false,
"outgoing-service": "ssl-2",
"traffic-profile": "1",
"ingress": {
"app-flow-status": "ready",
"interface": "eth0",
"ip-app-flow": {
"src-ip-prefix": "1.1.1.2/32",
"dest-ip-prefix": "8.8.8.9/32",
"dscp": 7
}
}
}
]
},
"traffic-profile": [ "traffic-profile": [
{ {
"profile-name": "1", "name": "1",
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "100000000", "min-bandwidth": "100000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 200000000, "max-latency-variation": 200000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-apps": [ "member-apps": [
"app-1", "app-1",
skipping to change at page 57, line 14 skipping to change at page 62, line 4
"min-bandwidth": "100000000", "min-bandwidth": "100000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 200000000, "max-latency-variation": 200000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-apps": [ "member-apps": [
"app-1", "app-1",
"app-2" "app-2"
] ]
}, },
{ {
"profile-name": "2", "name": "2",
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "100000000", "min-bandwidth": "100000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 200000000, "max-latency-variation": 200000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-services": [ "member-services": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"profile-name": "3", "name": "3",
"flow-spec": { "traffic-spec": {
"interval": 5, "interval": 5,
"max-pkts-per-interval": 10, "max-pkts-per-interval": 10,
"max-payload-size": 1500 "max-payload-size": 1500
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"afl-1" "afl-1"
] ]
} }
], ],
"service-sub-layer": { "app-flows": {
"service-sub-layer-list": [ "app-flow": [
{
"name": "app-1",
"bidir-congruent": false,
"outgoing-service": "ssl-1",
"traffic-profile": "1",
"ingress": {
"app-flow-status": "ietf-detnet:ready",
"interface": "eth0",
"ip-app-flow": {
"src-ip-prefix": "192.0.2.1/32",
"dest-ip-prefix": "192.0.2.8/32",
"dscp": 6
}
}
},
{
"name": "app-2",
"bidir-congruent": false,
"outgoing-service": "ssl-2",
"traffic-profile": "1",
"ingress": {
"app-flow-status": "ietf-detnet:ready",
"interface": "eth0",
"ip-app-flow": {
"src-ip-prefix": "192.0.2.2/32",
"dest-ip-prefix": "192.0.2.9/32",
"dscp": 7
}
}
}
]
},
"service": {
"sub-layer": [
{ {
"name": "ssl-1", "name": "ssl-1",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "2", "traffic-profile": "2",
"service-protection": { "service-protection": {
"service-protection-type": "none", "protection": "none",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-initiation", "operation": "initiation",
"incoming-type": { "incoming": {
"app-flow": { "app-flow": {
"app-flow-list": [ "flow": [
"app-1" "app-1"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"aggregation-service-sub-layer": "asl-1", "aggregation-sub-layer": "asl-1",
"service-label": { "service-label": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 102 "label": "102"
} }
] ]
} }
} }
} }
} }
}, },
{ {
"name": "ssl-2", "name": "ssl-2",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "2", "traffic-profile": "2",
"service-operation-type": "service-initiation",
"service-protection": { "service-protection": {
"service-protection-type": "none", "protection": "none",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"incoming-type": { "operation": "initiation",
"incoming": {
"app-flow": { "app-flow": {
"app-flow-list": [ "flow": [
"app-2" "app-2"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"aggregation-service-sub-layer": "asl-1", "aggregation-sub-layer": "asl-1",
"service-label": { "service-label": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 105 "label": "105"
} }
] ]
} }
} }
} }
} }
}, },
{ {
"name": "asl-1", "name": "asl-1",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "2",
"service-protection": { "service-protection": {
"service-protection-type": "none", "protection": "none",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"incoming-type": { "operation": "initiation",
"incoming": {
"service-aggregation": { "service-aggregation": {
"service-sub-layer": [ "sub-layer": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 1000 "label": "1000"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"afl-1" "afl-1"
] ]
} }
] ]
} }
} }
} }
] ]
}, },
"forwarding-sub-layer": { "forwarding": {
"forwarding-sub-layer-list": [ "sub-layer": [
{ {
"name": "afl-1", "name": "afl-1",
"traffic-profile": "3", "traffic-profile": "3",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"asl-1" "asl-1"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth2", "outgoing-interface": "eth2",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20000 "label": "20000"
} }
] ]
} }
} }
} }
} }
] ]
} }
} },
}
Figure 7: Example B-2 DetNet JSON Service Aggregation
A.4. Example C-1 JSON Relay Aggregation/Disaggregation Configuration
This illustrates the Relay node 1 aggregating the forwarding sub-
layers of DetNet flows 1 and 2 into a forwarding sub-layer. A
diagram illustrating both aggregation and disaggregation is shown and
then the corresponding JSON operational data follows.
Please consult the PDF or HTML versions for the Case C-1 Diagram.
Figure 8: Case C-1 Example JSON Service Aggregation/Disaggregation
{
"ietf-interfaces:interfaces": { "ietf-interfaces:interfaces": {
"interface": [ "interface": [
{ {
"name": "eth0", "name": "eth0",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-10-02T19:59:00-04:00"
} }
}, },
{ {
"name": "eth1", "name": "eth1",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-10-02T19:59:00-04:00"
} }
}, },
{ {
"name": "eth2", "name": "eth2",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-10-02T19:59:00-04:00"
} }
}, },
{ {
"name": "eth3", "name": "eth3",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-10-02T19:59:00-04:00"
} }
}, },
{ {
"name": "eth4", "name": "eth4",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-10-02T19:59:00-04:00"
} }
} }
] ]
}, }
}
Figure 8: Example B-2 DetNet JSON Service Aggregation
B.4. Example C-1 JSON Relay Aggregation/Disaggregation Configuration
This illustrates the Relay node 1 aggregating the forwarding sub-
layers of DetNet flows 1 and 2 into a forwarding sub-layer. A
diagram illustrating both aggregation and disaggregation is shown and
then the corresponding JSON operational data follows.
Please consult the PDF or HTML versions for the Case C-1 Diagram.
Figure 9: Case C-1 Example JSON Service Aggregation/Disaggregation
{
"ietf-detnet:detnet": { "ietf-detnet:detnet": {
"traffic-profile": [ "traffic-profile": [
{ {
"profile-name": "pf-1", "name": "pf-1",
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "100000000", "min-bandwidth": "100000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 100000000, "max-latency-variation": 100000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-services": [ "member-services": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"profile-name": "pf-2", "name": "pf-2",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 2, "max-pkts-per-interval": 2,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"afl-1", "afl-1",
"afl-2" "afl-2"
] ]
}, },
{ {
"profile-name": "pf-3", "name": "pf-3",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 1, "max-pkts-per-interval": 1,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"fsl-1", "fsl-1",
"fsl-2", "fsl-2",
"fsl-3", "fsl-3",
"fsl-4", "fsl-4",
"fsl-5", "fsl-5",
"fsl-6" "fsl-6"
] ]
} }
], ],
"service-sub-layer": { "service": {
"service-sub-layer-list": [ "sub-layer": [
{ {
"name": "ssl-1", "name": "ssl-1",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"service-protection": { "service-protection": {
"service-protection-type": "replication", "protection": "replication",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-relay", "operation": "relay",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 100 "label": "100"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 101 "label": "101"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"fsl-2", "fsl-2",
"fsl-3" "fsl-3"
] ]
} }
] ]
} }
} }
}, },
{ {
"name": "ssl-2", "name": "ssl-2",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"service-protection": { "service-protection": {
"service-protection-type": "replication", "protection": "replication",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-relay", "operation": "relay",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 103 "label": "103"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 104 "label": "104"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"fsl-5", "fsl-5",
"fsl-6" "fsl-6"
] ]
} }
] ]
} }
} }
} }
] ]
}, },
"forwarding-sub-layer": { "forwarding": {
"forwarding-sub-layer-list": [ "sub-layer": [
{ {
"name": "fsl-1", "name": "fsl-1",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth0", "interface": "eth0",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10000 "label": "10000"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1" "ssl-1"
] ]
} }
} }
}, },
{ {
"name": "fsl-2", "name": "fsl-2",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1" "ssl-1"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"aggregation-forwarding-sub-layer": "afl-1", "aggregation-sub-layer": "afl-1",
"forwarding-label": { "forwarding-label": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10003 "label": "10003"
} }
] ]
} }
} }
} }
} }
}, },
{ {
"name": "fsl-3", "name": "fsl-3",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1" "ssl-1"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"aggregation-forwarding-sub-layer": "afl-2", "aggregation-sub-layer": "afl-2",
"forwarding-label": { "forwarding-label": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10004 "label": "10004"
} }
] ]
} }
} }
} }
} }
}, },
{ {
"name": "fsl-4", "name": "fsl-4",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth1", "interface": "eth1",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10006 "label": "10006"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-2" "ssl-2"
] ]
} }
} }
}, },
{ {
"name": "fsl-5", "name": "fsl-5",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-2" "ssl-2"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"aggregation-forwarding-sub-layer": "afl-1", "aggregation-sub-layer": "afl-1",
"forwarding-label": { "forwarding-label": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10009 "label": "10009"
} }
] ]
} }
} }
} }
} }
}, },
{ {
"name": "fsl-6", "name": "fsl-6",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-2" "ssl-2"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"aggregation-forwarding-sub-layer": "afl-2", "aggregation-sub-layer": "afl-2",
"forwarding-label": { "forwarding-label": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10010 "label": "10010"
} }
] ]
} }
} }
} }
} }
}, },
{ {
"name": "afl-1", "name": "afl-1",
"traffic-profile": "pf-2", "traffic-profile": "pf-2",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"forwarding-aggregation": { "forwarding-aggregation": {
"forwarding-sub-layer": [ "sub-layer": [
"fsl-2", "fsl-2",
"fsl-5" "fsl-5"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth2", "outgoing-interface": "eth2",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20000 "label": "20000"
} }
] ]
} }
} }
} }
}, },
{ {
"name": "afl-2", "name": "afl-2",
"traffic-profile": "pf-2", "traffic-profile": "pf-2",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"forwarding-aggregation": { "forwarding-aggregation": {
"forwarding-sub-layer": [ "sub-layer": [
"fsl-3", "fsl-3",
"fsl-6" "fsl-6"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth3", "outgoing-interface": "eth3",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20001 "label": "20001"
} }
] ]
} }
} }
} }
} }
] ]
} }
} },
}
Figure 9: Example C-1 DetNet JSON Relay Service Aggregation
{
"ietf-interfaces:interfaces": { "ietf-interfaces:interfaces": {
"interface": [ "interface": [
{ {
"name": "eth0", "name": "eth0",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth1", "name": "eth1",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth2", "name": "eth2",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth3", "name": "eth3",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth4", "name": "eth4",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
} }
] ]
}, }
}
Figure 10: Example C-1 DetNet JSON Relay Service Aggregation
{
"ietf-detnet:detnet": { "ietf-detnet:detnet": {
"traffic-profile": [ "traffic-profile": [
{ {
"profile-name": "pf-1", "name": "pf-1",
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "100000000", "min-bandwidth": "100000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 100000000, "max-latency-variation": 100000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-services": [ "member-services": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"profile-name": "pf-2", "name": "pf-2",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 2, "max-pkts-per-interval": 2,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"afl-1", "afl-1",
"afl-2" "afl-2"
] ]
}, },
{ {
"profile-name": "pf-3", "name": "pf-3",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 1, "max-pkts-per-interval": 1,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"fsl-1", "fsl-1",
"fsl-2", "fsl-2",
"fsl-3", "fsl-3",
"fsl-4", "fsl-4",
"fsl-5", "fsl-5",
"fsl-6" "fsl-6"
] ]
} }
], ],
"service-sub-layer": { "service": {
"service-sub-layer-list": [ "sub-layer": [
{ {
"name": "ssl-1", "name": "ssl-1",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"service-protection": { "service-protection": {
"service-protection-type": "elimination", "protection": "elimination",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-relay", "operation": "relay",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 101 "label": "101"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 102 "label": "102"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"fsl-3" "fsl-3"
] ]
} }
] ]
} }
} }
}, },
{ {
"name": "ssl-2", "name": "ssl-2",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"service-protection": { "service-protection": {
"service-protection-type": "elimination", "protection": "elimination",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-relay", "operation": "relay",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 104 "label": "104"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 105 "label": "105"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"fsl-6" "fsl-6"
] ]
} }
] ]
} }
} }
} }
] ]
}, },
"forwarding-sub-layer": { "forwarding": {
"forwarding-sub-layer-list": [ "sub-layer": [
{ {
"name": "afl-1", "name": "afl-1",
"traffic-profile": "pf-2", "traffic-profile": "pf-2",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth0", "interface": "eth0",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20002 "label": "20002"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-disaggregation": { "forwarding-disaggregation": {
"forwarding-sub-layer": [ "sub-layer": [
"fsl-1", "fsl-1",
"fsl-4" "fsl-4"
] ]
} }
} }
}, },
{ {
"name": "afl-2", "name": "afl-2",
"traffic-profile": "pf-2", "traffic-profile": "pf-2",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth1", "interface": "eth1",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20003 "label": "20003"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-disaggregation": { "forwarding-disaggregation": {
"forwarding-sub-layer": [ "sub-layer": [
"fsl-2", "fsl-2",
"fsl-5" "fsl-5"
] ]
} }
} }
}, },
{ {
"name": "fsl-1", "name": "fsl-1",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth0", "interface": "eth0",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10003 "label": "10003"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1" "ssl-1"
] ]
} }
} }
}, },
{ {
"name": "fsl-2", "name": "fsl-2",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth1", "interface": "eth1",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10004 "label": "10004"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1" "ssl-1"
] ]
} }
} }
}, },
{ {
"name": "fsl-3", "name": "fsl-3",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1" "ssl-1"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth2", "outgoing-interface": "eth2",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10005 "label": "10005"
} }
] ]
} }
} }
} }
}, },
{ {
"name": "fsl-4", "name": "fsl-4",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth0", "interface": "eth0",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10009 "label": "10009"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-2" "ssl-2"
] ]
} }
} }
}, },
{ {
"name": "fsl-5", "name": "fsl-5",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth1", "interface": "eth1",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10010 "label": "10010"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-2" "ssl-2"
] ]
} }
} }
}, },
{ {
"name": "fsl-6", "name": "fsl-6",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-2" "ssl-2"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth3", "outgoing-interface": "eth3",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10011 "label": "10011"
} }
] ]
} }
} }
} }
} }
] ]
} }
} },
}
Figure 10: Example C-1 DetNet JSON Relay Service Disaggregation
A.5. Example C-2 JSON Relay Aggregation Service Sub-Layer
This illustrates the Relay node 1 aggregating the service sub-layers
of DetNet flows 1 and 2 into a forwarding sub-layer A diagram
illustrating both aggregation and disaggregation is shown and then
the corresponding JSON operational data follows.
Please consult the PDF or HTML versions for the Case C-2 Diagram.
Figure 11: Case C-2 Example JSON Service Aggregation/Disaggregation
{
"ietf-interfaces:interfaces": { "ietf-interfaces:interfaces": {
"interface": [ "interface": [
{ {
"name": "eth0", "name": "eth0",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth1", "name": "eth1",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth2", "name": "eth2",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth3", "name": "eth3",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth4", "name": "eth4",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
} }
] ]
}, }
}
Figure 11: Example C-1 DetNet JSON Relay Service Disaggregation
B.5. Example C-2 JSON Relay Aggregation Service Sub-Layer
This illustrates the Relay node 1 aggregating the service sub-layers
of DetNet flows 1 and 2 into a forwarding sub-layer A diagram
illustrating both aggregation and disaggregation is shown and then
the corresponding JSON operational data follows.
Please consult the PDF or HTML versions for the Case C-2 Diagram.
Figure 12: Case C-2 Example JSON Service Aggregation/Disaggregation
{
"ietf-detnet:detnet": { "ietf-detnet:detnet": {
"traffic-profile": [ "traffic-profile": [
{ {
"profile-name": "pf-1", "name": "pf-1",
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "100000000", "min-bandwidth": "100000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 100000000, "max-latency-variation": 100000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-services": [ "member-services": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"profile-name": "pf-2", "name": "pf-2",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 1, "max-pkts-per-interval": 1,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"fsl-1", "fsl-1",
"fsl-2" "fsl-2"
] ]
}, },
{ {
"profile-name": "pf-3", "name": "pf-3",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 2, "max-pkts-per-interval": 2,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"afl-1", "afl-1",
"afl-2" "afl-2"
] ]
} }
], ],
"service-sub-layer": { "service": {
"service-sub-layer-list": [ "sub-layer": [
{ {
"name": "ssl-1", "name": "ssl-1",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"service-protection": { "service-protection": {
"service-protection-type": "replication", "protection": "replication",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-relay", "operation": "relay",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 100 "label": "100"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 101 "label": "101"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"afl-1", "afl-1",
"afl-2" "afl-2"
] ]
} }
] ]
} }
} }
}, },
{ {
"name": "ssl-2", "name": "ssl-2",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"service-protection": { "service-protection": {
"service-protection-type": "replication", "protection": "replication",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-relay", "operation": "relay",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 103 "label": "103"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 104 "label": "104"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"afl-1", "afl-1",
"afl-2" "afl-2"
] ]
} }
] ]
} }
} }
} }
] ]
}, },
"forwarding-sub-layer": { "forwarding": {
"forwarding-sub-layer-list": [ "sub-layer": [
{ {
"name": "fsl-1", "name": "fsl-1",
"traffic-profile": "pf-2", "traffic-profile": "pf-2",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth0", "interface": "eth0",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10000 "label": "10000"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1" "ssl-1"
] ]
} }
} }
}, },
{ {
"name": "fsl-2", "name": "fsl-2",
"traffic-profile": "pf-2", "traffic-profile": "pf-2",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth1", "interface": "eth1",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10006 "label": "10006"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-2" "ssl-2"
] ]
} }
} }
}, },
{ {
"name": "afl-1", "name": "afl-1",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth2", "outgoing-interface": "eth2",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20000 "label": "20000"
} }
] ]
} }
} }
} }
}, },
{ {
"name": "afl-2", "name": "afl-2",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth3", "outgoing-interface": "eth3",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20001 "label": "20001"
} }
] ]
} }
} }
} }
} }
] ]
}
}
}
Figure 12: Example C-2 DetNet JSON Relay Aggregation Service Sub-
Layer
{ }
},
"ietf-interfaces:interfaces": { "ietf-interfaces:interfaces": {
"interface": [ "interface": [
{ {
"name": "eth0", "name": "eth0",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth1", "name": "eth1",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth2", "name": "eth2",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth3", "name": "eth3",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth4", "name": "eth4",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
} }
] ]
}, }
}
Figure 13: Example C-2 DetNet JSON Relay Aggregation Service Sub-
Layer
{
"ietf-detnet:detnet": { "ietf-detnet:detnet": {
"traffic-profile": [ "traffic-profile": [
{ {
"profile-name": "pf-1", "name": "pf-1",
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "100000000", "min-bandwidth": "100000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 100000000, "max-latency-variation": 100000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-services": [ "member-services": [
"ssl-1", "ssl-1",
skipping to change at page 85, line 4 skipping to change at page 90, line 24
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 100000000, "max-latency-variation": 100000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-services": [ "member-services": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"profile-name": "pf-2", "name": "pf-2",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 1, "max-pkts-per-interval": 1,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"fsl-1", "fsl-1",
"fsl-2" "fsl-2"
] ]
}, },
{ {
"profile-name": "pf-3", "name": "pf-3",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 2, "max-pkts-per-interval": 2,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"afl-1", "afl-1",
"afl-2" "afl-2"
] ]
} }
], ],
"service-sub-layer": { "service": {
"service-sub-layer-list": [ "sub-layer": [
{ {
"name": "ssl-1", "name": "ssl-1",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"service-protection": { "service-protection": {
"service-protection-type": "elimination", "protection": "elimination",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-relay", "operation": "relay",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 101 "label": "101"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 102 "label": "102"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"fsl-1" "fsl-1"
] ]
} }
] ]
} }
} }
}, },
{ {
"name": "ssl-2", "name": "ssl-2",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"service-protection": { "service-protection": {
"service-protection-type": "elimination", "protection": "elimination",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-relay", "operation": "relay",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 104 "label": "104"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 105 "label": "105"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"fsl-2" "fsl-2"
] ]
} }
] ]
} }
} }
} }
] ]
}, },
"forwarding-sub-layer": { "forwarding": {
"forwarding-sub-layer-list": [ "sub-layer": [
{ {
"name": "afl-1", "name": "afl-1",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth0", "interface": "eth0",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20002 "label": "20002"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
} }
} }
}, },
{ {
"name": "afl-2", "name": "afl-2",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth1", "interface": "eth1",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20003 "label": "20003"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
} }
} }
}, },
{ {
"name": "fsl-1", "name": "fsl-1",
"traffic-profile": "pf-2", "traffic-profile": "pf-2",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1" "ssl-1"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth2", "outgoing-interface": "eth2",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10005 "label": "10005"
} }
] ]
} }
} }
} }
}, },
{ {
"name": "fsl-2", "name": "fsl-2",
"traffic-profile": "pf-2", "traffic-profile": "pf-2",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-2" "ssl-2"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth3", "outgoing-interface": "eth3",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10011 "label": "10011"
} }
] ]
} }
} }
} }
} }
] ]
} }
}
}
Figure 13: Example C-2 DetNet JSON Relay Disaggregation Service
Sub-Layer
A.6. Example C-3 JSON Relay Service Sub-Layer Aggregation/
Disaggregation
This illustrates the Relay node 1 aggregating the service sub-layers
of DetNet flows 1 and 2 into a service sub-layer of Aggregated DetNet
flow 1. It also illustrates the Relay node 2 disaggregating the
aggregated DetNet flow 1 into the DetNet flows 1 and 2 service sub-
layers. A diagram illustrating both aggregation and disaggregation
is shown and then the corresponding JSON operational data follows.
Please consult the PDF or HTML versions for the Case C-3 Diagram.
Figure 14: Case C-3 Example JSON Service Aggregation/Disaggregation
{ },
"ietf-interfaces:interfaces": { "ietf-interfaces:interfaces": {
"interface": [ "interface": [
{ {
"name": "eth0", "name": "eth0",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth1", "name": "eth1",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth2", "name": "eth2",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth3", "name": "eth3",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth4", "name": "eth4",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
} }
] ]
}, }
}
Figure 14: Example C-2 DetNet JSON Relay Disaggregation Service
Sub-Layer
B.6. Example C-3 JSON Relay Service Sub-Layer Aggregation/
Disaggregation
This illustrates the Relay node 1 aggregating the service sub-layers
of DetNet flows 1 and 2 into a service sub-layer of Aggregated DetNet
flow 1. It also illustrates the Relay node 2 disaggregating the
aggregated DetNet flow 1 into the DetNet flows 1 and 2 service sub-
layers. A diagram illustrating both aggregation and disaggregation
is shown and then the corresponding JSON operational data follows.
Please consult the PDF or HTML versions for the Case C-3 Diagram.
Figure 15: Case C-3 Example JSON Service Aggregation/Disaggregation
{
"ietf-detnet:detnet": { "ietf-detnet:detnet": {
"traffic-profile": [ "traffic-profile": [
{ {
"profile-name": "pf-1", "name": "pf-1",
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "100000000", "min-bandwidth": "100000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 100000000, "max-latency-variation": 100000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-services": [ "member-services": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"profile-name": "pf-2", "name": "pf-2",
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "200000000", "min-bandwidth": "200000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 100000000, "max-latency-variation": 100000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-services": [ "member-services": [
"asl-1" "asl-1"
skipping to change at page 91, line 31 skipping to change at page 97, line 4
"min-bandwidth": "200000000", "min-bandwidth": "200000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 100000000, "max-latency-variation": 100000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-services": [ "member-services": [
"asl-1" "asl-1"
] ]
}, },
{ {
"profile-name": "pf-3", "name": "pf-3",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 1, "max-pkts-per-interval": 1,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"fsl-1", "fsl-1",
"fsl-2" "fsl-2"
] ]
}, },
{ {
"profile-name": "pf-4", "name": "pf-4",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 2, "max-pkts-per-interval": 2,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"fsl-3", "fsl-3",
"fsl-4" "fsl-4"
] ]
} }
], ],
"service-sub-layer": { "service": {
"service-sub-layer-list": [ "sub-layer": [
{ {
"name": "ssl-1", "name": "ssl-1",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"service-protection": { "service-protection": {
"service-protection-type": "none", "protection": "none",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-relay", "operation": "relay",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 100 "label": "100"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"aggregation-service-sub-layer": "asl-1", "aggregation-sub-layer": "asl-1",
"service-label": { "service-label": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 101 "label": "101"
} }
] ]
} }
} }
} }
} }
}, },
{ {
"name": "ssl-2", "name": "ssl-2",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"service-protection": { "service-protection": {
"service-protection-type": "none", "protection": "none",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-relay", "operation": "relay",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 103 "label": "103"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"aggregation-service-sub-layer": "asl-1", "aggregation-sub-layer": "asl-1",
"service-label": { "service-label": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 104 "label": "104"
} }
] ]
} }
} }
} }
} }
}, },
{ {
"name": "asl-1", "name": "asl-1",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-2", "traffic-profile": "pf-2",
"service-protection": { "service-protection": {
"service-protection-type": "replication", "protection": "replication",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-initiation", "operation": "initiation",
"incoming-type": { "incoming": {
"service-aggregation": { "service-aggregation": {
"service-sub-layer": [ "sub-layer": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 1000 "label": "1000"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"fsl-3", "fsl-3",
"fsl-4" "fsl-4"
] ]
} }
] ]
} }
} }
} }
] ]
}, },
"forwarding-sub-layer": { "forwarding": {
"forwarding-sub-layer-list": [ "sub-layer": [
{ {
"name": "fsl-1", "name": "fsl-1",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth0", "interface": "eth0",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10000 "label": "10000"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1" "ssl-1"
] ]
} }
} }
}, },
{ {
"name": "fsl-2", "name": "fsl-2",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth1", "interface": "eth1",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10006 "label": "10006"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-2" "ssl-2"
] ]
} }
} }
}, },
{ {
"name": "fsl-3", "name": "fsl-3",
"traffic-profile": "pf-4", "traffic-profile": "pf-4",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"asl-1" "asl-1"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth2", "outgoing-interface": "eth2",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20000 "label": "20000"
} }
] ]
} }
} }
} }
}, },
{ {
"name": "fsl-4", "name": "fsl-4",
"traffic-profile": "pf-4", "traffic-profile": "pf-4",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"asl-1" "asl-1"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth3", "outgoing-interface": "eth3",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20001 "label": "20001"
} }
] ]
} }
} }
} }
} }
] ]
} }
} },
}
Figure 15: Example C-3 DetNet JSON Relay Service Sub-Layer
Aggregation
{
"ietf-interfaces:interfaces": { "ietf-interfaces:interfaces": {
"interface": [ "interface": [
{ {
"name": "eth0", "name": "eth0",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth1", "name": "eth1",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth2", "name": "eth2",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth3", "name": "eth3",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth4", "name": "eth4",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
} }
] ]
}, }
}
Figure 16: Example C-3 DetNet JSON Relay Service Sub-Layer
Aggregation
{
"ietf-detnet:detnet": { "ietf-detnet:detnet": {
"traffic-profile": [ "traffic-profile": [
{ {
"profile-name": "pf-1", "name": "pf-1",
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "100000000", "min-bandwidth": "100000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 100000000, "max-latency-variation": 100000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-services": [ "member-services": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"profile-name": "pf-2", "name": "pf-2",
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "200000000", "min-bandwidth": "200000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 100000000, "max-latency-variation": 100000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-services": [ "member-services": [
"asl-1" "asl-1"
] ]
}, },
{ {
"profile-name": "pf-3", "name": "pf-3",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 1, "max-pkts-per-interval": 1,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"fsl-3", "fsl-3",
"fsl-4" "fsl-4"
] ]
}, },
{ {
"profile-name": "pf-4", "name": "pf-4",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 2, "max-pkts-per-interval": 2,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"fsl-1", "fsl-1",
"fsl-2" "fsl-2"
] ]
} }
], ],
"service-sub-layer": { "service": {
"service-sub-layer-list": [ "sub-layer": [
{ {
"name": "ssl-1", "name": "ssl-1",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"service-protection": { "service-protection": {
"service-protection-type": "none", "protection": "none",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-relay", "operation": "relay",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 101 "label": "101"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 102 "label": "102"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"fsl-3" "fsl-3"
] ]
} }
] ]
} }
} }
}, },
{ {
"name": "ssl-2", "name": "ssl-2",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"service-protection": { "service-protection": {
"service-protection-type": "none", "protection": "none",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-relay", "operation": "relay",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 104 "label": "104"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 105 "label": "105"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"fsl-4" "fsl-4"
] ]
} }
] ]
} }
} }
}, },
{ {
"name": "asl-1", "name": "asl-1",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-2", "traffic-profile": "pf-2",
"service-protection": { "service-protection": {
"service-protection-type": "elimination", "protection": "elimination",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-termination", "operation": "termination",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 1000 "label": "1000"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-disaggregation": { "service-disaggregation": {
"service-sub-layer": [ "sub-layer": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
} }
} }
} }
] ]
}, },
"forwarding-sub-layer": { "forwarding": {
"forwarding-sub-layer-list": [ "sub-layer": [
{ {
"name": "fsl-1", "name": "fsl-1",
"traffic-profile": "pf-4", "traffic-profile": "pf-4",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth0", "interface": "eth0",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20002 "label": "20002"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"asl-1" "asl-1"
] ]
} }
} }
}, },
{ {
"name": "fsl-2", "name": "fsl-2",
"traffic-profile": "pf-4", "traffic-profile": "pf-4",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth1", "interface": "eth1",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20003 "label": "20003"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"asl-1" "asl-1"
] ]
} }
} }
}, },
{ {
"name": "fsl-3", "name": "fsl-3",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1" "ssl-1"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth2", "outgoing-interface": "eth2",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10005 "label": "10005"
} }
] ]
} }
} }
} }
}, },
{ {
"name": "fsl-4", "name": "fsl-4",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-2" "ssl-2"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth3", "outgoing-interface": "eth3",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10011 "label": "10011"
} }
] ]
} }
} }
} }
} }
] ]
} }
}
}
Figure 16: Example C-3 DetNet JSON Relay Service Sub-Layer
Disaggregation
A.7. Example C-4 JSON Relay Service Sub-Layer Aggregation/
Disaggregation
This illustrates the Relay node 1 aggregating the forwarding sub-
layers of DetNet flow 1 and 2 into a service sub-layer of Aggregated
DetNet flow 1. This also illustrates the Relay node 2 disaggregating
the service sub-layer of Aggregated DetNet flow 1 to forwarding sub-
layers of DetNet flow 1 and 2. A diagram illustrating both
aggregation and disaggregation is shown and then the corresponding
JSON operational data follows.
Please consult the PDF or HTML versions for the Case C-4 Diagram
Figure 17: Case C-4 Example JSON Service Aggregation/Disaggregation },
{
"ietf-interfaces:interfaces": { "ietf-interfaces:interfaces": {
"interface": [ "interface": [
{ {
"name": "eth0", "name": "eth0",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth1", "name": "eth1",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth2", "name": "eth2",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth3", "name": "eth3",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth4", "name": "eth4",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
} }
] ]
}, }
}
Figure 17: Example C-3 DetNet JSON Relay Service Sub-Layer
Disaggregation
B.7. Example C-4 JSON Relay Service Sub-Layer Aggregation/
Disaggregation
This illustrates the Relay node 1 aggregating the forwarding sub-
layers of DetNet flow 1 and 2 into a service sub-layer of Aggregated
DetNet flow 1. This also illustrates the Relay node 2 disaggregating
the service sub-layer of Aggregated DetNet flow 1 to forwarding sub-
layers of DetNet flow 1 and 2. A diagram illustrating both
aggregation and disaggregation is shown and then the corresponding
JSON operational data follows.
Please consult the PDF or HTML versions for the Case C-4 Diagram
Figure 18: Case C-4 Example JSON Service Aggregation/Disaggregation
{
"ietf-detnet:detnet": { "ietf-detnet:detnet": {
"traffic-profile": [ "traffic-profile": [
{ {
"profile-name": "pf-1", "name": "pf-1",
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "100000000", "min-bandwidth": "100000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 100000000, "max-latency-variation": 100000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-services": [ "member-services": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"profile-name": "pf-2", "name": "pf-2",
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "200000000", "min-bandwidth": "200000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 100000000, "max-latency-variation": 100000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-services": [ "member-services": [
"asl-1" "asl-1"
skipping to change at page 105, line 30 skipping to change at page 111, line 4
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "200000000", "min-bandwidth": "200000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 100000000, "max-latency-variation": 100000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-services": [ "member-services": [
"asl-1" "asl-1"
] ]
}, },
{ {
"profile-name": "pf-3", "name": "pf-3",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 1, "max-pkts-per-interval": 1,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"fsl-1", "fsl-1",
"fsl-2", "fsl-2",
"fsl-3", "fsl-3",
"fsl-4" "fsl-4"
] ]
}, },
{ {
"profile-name": "pf-4", "name": "pf-4",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 2, "max-pkts-per-interval": 2,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"fsl-5", "fsl-5",
"fsl-6" "fsl-6"
] ]
} }
], ],
"service-sub-layer": { "service": {
"service-sub-layer-list": [ "sub-layer": [
{ {
"name": "ssl-1", "name": "ssl-1",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"service-protection": { "service-protection": {
"service-protection-type": "none", "protection": "none",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-relay", "operation": "relay",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 100 "label": "100"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 101 "label": "101"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"fsl-3" "fsl-3"
] ]
} }
] ]
} }
} }
}, },
{ {
"name": "ssl-2", "name": "ssl-2",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"service-protection": { "service-protection": {
"service-protection-type": "none", "protection": "none",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-relay", "operation": "relay",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 103 "label": "103"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 104 "label": "104"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"fsl-4" "fsl-4"
] ]
} }
] ]
} }
} }
}, },
{ {
"name": "asl-1", "name": "asl-1",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-2", "traffic-profile": "pf-2",
"service-protection": { "service-protection": {
"service-protection-type": "replication", "protection": "replication",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-initiation", "operation": "initiation",
"incoming-type": { "incoming": {
"forwarding-aggregation": { "forwarding-aggregation": {
"forwarding-sub-layer": [ "sub-layer": [
"fsl-3", "fsl-3",
"fsl-4" "fsl-4"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 1000 "label": "1000"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"fsl-5", "fsl-5",
"fsl-6" "fsl-6"
] ]
} }
] ]
} }
} }
} }
] ]
}, },
"forwarding-sub-layer": { "forwarding": {
"forwarding-sub-layer-list": [ "sub-layer": [
{ {
"name": "fsl-1", "name": "fsl-1",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth0", "interface": "eth0",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10000 "label": "10000"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1" "ssl-1"
] ]
} }
} }
}, },
{ {
"name": "fsl-2", "name": "fsl-2",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth1", "interface": "eth1",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10006 "label": "10006"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-2" "ssl-2"
] ]
} }
} }
}, },
{ {
"name": "fsl-3", "name": "fsl-3",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1" "ssl-1"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"service-aggregation": { "service-aggregation": {
"aggregation-service-sub-layer": "asl-1", "aggregation-sub-layer": "asl-1",
"optional-forwarding-label": { "optional-forwarding-label": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20004 "label": "20004"
} }
] ]
} }
} }
} }
} }
}, },
{ {
"name": "fsl-4", "name": "fsl-4",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-2" "ssl-2"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"service-aggregation": { "service-aggregation": {
"aggregation-service-sub-layer": "asl-1", "aggregation-sub-layer": "asl-1",
"optional-forwarding-label": { "optional-forwarding-label": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20005 "label": "20005"
} }
] ]
} }
} }
} }
} }
}, },
{ {
"name": "fsl-5", "name": "fsl-5",
"traffic-profile": "pf-4", "traffic-profile": "pf-4",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"asl-1" "asl-1"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth2", "outgoing-interface": "eth2",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20000 "label": "20000"
} }
] ]
} }
} }
} }
}, },
{ {
"name": "fsl-6", "name": "fsl-6",
"traffic-profile": "pf-4", "traffic-profile": "pf-4",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"asl-1" "asl-1"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth3", "outgoing-interface": "eth3",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20001 "label": "20001"
} }
] ]
} }
} }
} }
} }
] ]
} }
} },
}
Figure 18: Example C-4 DetNet JSON Relay Service Sub-Layer
Aggregation
{
"ietf-interfaces:interfaces": { "ietf-interfaces:interfaces": {
"interface": [ "interface": [
{ {
"name": "eth0", "name": "eth0",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth1", "name": "eth1",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth2", "name": "eth2",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth3", "name": "eth3",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth4", "name": "eth4",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
} }
] ]
}, }
}
Figure 19: Example C-4 DetNet JSON Relay Service Sub-Layer
Aggregation
{
"ietf-detnet:detnet": { "ietf-detnet:detnet": {
"traffic-profile": [ "traffic-profile": [
{ {
"profile-name": "pf-1", "name": "pf-1",
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "100000000", "min-bandwidth": "100000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 100000000, "max-latency-variation": 100000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-services": [ "member-services": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"profile-name": "pf-2", "name": "pf-2",
"traffic-requirements": { "traffic-requirements": {
"min-bandwidth": "200000000", "min-bandwidth": "200000000",
"max-latency": 100000000, "max-latency": 100000000,
"max-latency-variation": 100000000, "max-latency-variation": 100000000,
"max-loss": 2, "max-loss": 2,
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"member-services": [ "member-services": [
"asl-1" "asl-1"
] ]
}, },
{ {
"profile-name": "pf-3", "name": "pf-3",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 1, "max-pkts-per-interval": 1,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"fsl-3", "fsl-3",
"fsl-4", "fsl-4",
"fsl-5", "fsl-5",
"fsl-6" "fsl-6"
] ]
}, },
{ {
"profile-name": "pf-4", "name": "pf-4",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 2, "max-pkts-per-interval": 2,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"fsl-1", "fsl-1",
"fsl-2" "fsl-2"
] ]
} }
], ],
"service-sub-layer": { "service": {
"service-sub-layer-list": [ "sub-layer": [
{ {
"name": "ssl-1", "name": "ssl-1",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"service-protection": { "service-protection": {
"service-protection-type": "none", "protection": "none",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-relay", "operation": "relay",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 101 "label": "101"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 102 "label": "102"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"fsl-5" "fsl-5"
] ]
} }
] ]
} }
} }
}, },
{ {
"name": "ssl-2", "name": "ssl-2",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"service-protection": { "service-protection": {
"service-protection-type": "none", "protection": "none",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-relay", "operation": "relay",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 104 "label": "104"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"service-outgoing-list": [ "service-outgoing": [
{ {
"service-outgoing-index": 0, "index": 0,
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 105 "label": "105"
} }
] ]
}, },
"forwarding-sub-layer": [ "sub-layer": [
"fsl-6" "fsl-6"
] ]
} }
] ]
} }
} }
}, },
{ {
"name": "asl-1", "name": "asl-1",
"service-rank": 10, "service-rank": 10,
"traffic-profile": "pf-2", "traffic-profile": "pf-2",
"service-protection": { "service-protection": {
"service-protection-type": "elimination", "protection": "elimination",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
}, },
"service-operation-type": "service-termination", "operation": "termination",
"incoming-type": { "incoming": {
"service-id": { "service-id": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 1000 "label": "1000"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-disaggregation": { "forwarding-disaggregation": {
"forwarding-sub-layer": [ "sub-layer": [
"fsl-3", "fsl-3",
"fsl-4" "fsl-4"
] ]
} }
} }
} }
] ]
}, },
"forwarding-sub-layer": { "forwarding": {
"forwarding-sub-layer-list": [ "sub-layer": [
{ {
"name": "fsl-1", "name": "fsl-1",
"traffic-profile": "pf-4", "traffic-profile": "pf-4",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth0", "interface": "eth0",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20002 "label": "20002"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"asl-1" "asl-1"
] ]
} }
} }
}, },
{ {
"name": "fsl-2", "name": "fsl-2",
"traffic-profile": "pf-4", "traffic-profile": "pf-4",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth1", "interface": "eth1",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20003 "label": "20003"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"asl-1" "asl-1"
] ]
} }
} }
}, },
{ {
"name": "fsl-3", "name": "fsl-3",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth0", "interface": "eth0",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20004 "label": "20004"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1" "ssl-1"
] ]
} }
} }
}, },
{ {
"name": "fsl-4", "name": "fsl-4",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth1", "interface": "eth1",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20005 "label": "20005"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-2" "ssl-2"
] ]
} }
} }
}, },
{ {
"name": "fsl-5", "name": "fsl-5",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-1" "ssl-1"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth2", "outgoing-interface": "eth2",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10005 "label": "10005"
} }
] ]
} }
} }
} }
}, },
{ {
"name": "fsl-6", "name": "fsl-6",
"traffic-profile": "pf-3", "traffic-profile": "pf-3",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"service-sub-layer": { "service-sub-layer": {
"service-sub-layer": [ "sub-layer": [
"ssl-2" "ssl-2"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth3", "outgoing-interface": "eth3",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10011 "label": "10011"
} }
] ]
} }
} }
} }
} }
] ]
} }
} },
}
Figure 19: Example C-4 DetNet JSON Relay Service Sub-Layer
Disaggregation
A.8. Example D-1 JSON Transit Forwarding Sub-Layer Aggregation/
Disaggregation
This illustrates the Transit node 1 aggregating the forwarding sub-
layers of DetNet flow 1 and 2 into a forwarding sub-layer. This also
illustrates a Transit node 4 disaggregating a forwarding sub-layer
into DetNet flow 1 and 2 forwarding sub-layers.
Please consult the PDF or HTML versions for the Case D-1 Diagram
Figure 20: Case D-1 Example Service Aggregation/Disaggregation
{
"ietf-interfaces:interfaces": { "ietf-interfaces:interfaces": {
"interface": [ "interface": [
{ {
"name": "eth0", "name": "eth0",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth1", "name": "eth1",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth2", "name": "eth2",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth3", "name": "eth3",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth4", "name": "eth4",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
} }
] ]
}, }
}
Figure 20: Example C-4 DetNet JSON Relay Service Sub-Layer
Disaggregation
B.8. Example D-1 JSON Transit Forwarding Sub-Layer Aggregation/
Disaggregation
This illustrates the Transit node 1 aggregating the forwarding sub-
layers of DetNet flow 1 and 2 into a forwarding sub-layer. This also
illustrates a Transit node 4 disaggregating a forwarding sub-layer
into DetNet flow 1 and 2 forwarding sub-layers.
Please consult the PDF or HTML versions for the Case D-1 Diagram
Figure 21: Case D-1 Example Service Aggregation/Disaggregation
{
"ietf-detnet:detnet": { "ietf-detnet:detnet": {
"traffic-profile": [ "traffic-profile": [
{ {
"profile-name": "pf-1", "name": "pf-1",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 1, "max-pkts-per-interval": 1,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"fsl-1", "fsl-1",
"fsl-2" "fsl-2"
] ]
}, },
{ {
"profile-name": "pf-2", "name": "pf-2",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 2, "max-pkts-per-interval": 2,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"afl-1" "afl-1"
] ]
} }
], ],
"forwarding-sub-layer": { "forwarding": {
"forwarding-sub-layer-list": [ "sub-layer": [
{ {
"name": "fsl-1", "name": "fsl-1",
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"forwarding-operation-type": "pop-impose-and-forward", "operation": "pop-impose-and-forward",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth0", "interface": "eth0",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10000 "label": "10000"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"aggregation-forwarding-sub-layer": "afl-1", "aggregation-sub-layer": "afl-1",
"forwarding-label": { "forwarding-label": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10002 "label": "10002"
} }
] ]
} }
} }
} }
} }
}, },
{ {
"name": "fsl-2", "name": "fsl-2",
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"forwarding-operation-type": "pop-impose-and-forward", "operation": "pop-impose-and-forward",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth1", "interface": "eth1",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10004 "label": "10004"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-sub-layer": { "forwarding-sub-layer": {
"aggregation-forwarding-sub-layer": "afl-1", "aggregation-sub-layer": "afl-1",
"forwarding-label": { "forwarding-label": {
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10006 "label": "10006"
} }
] ]
} }
} }
} }
} }
}, },
{ {
"name": "afl-1", "name": "afl-1",
"traffic-profile": "pf-2", "traffic-profile": "pf-2",
"forwarding-operation-type": "impose-and-forward", "operation": "impose-and-forward",
"incoming-type": { "incoming": {
"forwarding-aggregation": { "forwarding-aggregation": {
"forwarding-sub-layer": [ "sub-layer": [
"fsl-1", "fsl-1",
"fsl-2" "fsl-2"
] ]
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth3", "outgoing-interface": "eth3",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20000 "label": "20000"
} }
] ]
} }
} }
} }
} }
] ]
} }
} },
}
Figure 21: Example D-1 DetNet JSON Relay Service Sub-Layer
Aggregation
{
"ietf-interfaces:interfaces": { "ietf-interfaces:interfaces": {
"interface": [ "interface": [
{ {
"name": "eth0", "name": "eth0",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth1", "name": "eth1",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth2", "name": "eth2",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth3", "name": "eth3",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
}, },
{ {
"name": "eth4", "name": "eth4",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"oper-status": "up", "oper-status": "up",
"statistics": { "statistics": {
"discontinuity-time": "2020-12-18T23:59:00Z" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
} }
] ]
}, }
}
Figure 22: Example D-1 DetNet JSON Relay Service Sub-Layer
Aggregation
{
"ietf-detnet:detnet": { "ietf-detnet:detnet": {
"traffic-profile": [ "traffic-profile": [
{ {
"profile-name": "pf-1", "name": "pf-1",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 1, "max-pkts-per-interval": 1,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"fsl-1", "fsl-1",
"fsl-2" "fsl-2"
] ]
}, },
{ {
"profile-name": "pf-2", "name": "pf-2",
"flow-spec": { "traffic-spec": {
"interval": 125, "interval": 125,
"max-pkts-per-interval": 2, "max-pkts-per-interval": 2,
"max-payload-size": 1518 "max-payload-size": 1518
}, },
"member-fwd-sublayers": [ "member-fwd-sublayers": [
"afl-1" "afl-1"
] ]
} }
], ],
"forwarding-sub-layer": { "forwarding": {
"forwarding-sub-layer-list": [ "sub-layer": [
{ {
"name": "fsl-1", "name": "fsl-1",
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"forwarding-operation-type": "swap-and-forward", "operation": "swap-and-forward",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth1", "interface": "eth1",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10002 "label": "10002"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth3", "outgoing-interface": "eth3",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10003 "label": "10003"
} }
] ]
} }
} }
} }
}, },
{ {
"name": "fsl-2", "name": "fsl-2",
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"forwarding-operation-type": "swap-and-forward", "operation": "swap-and-forward",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth1", "interface": "eth1",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10006 "label": "10006"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"interface": { "interface": {
"outgoing-interface": "eth2", "outgoing-interface": "eth2",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 10007 "label": "10007"
} }
] ]
} }
} }
} }
}, },
{ {
"name": "afl-1", "name": "afl-1",
"traffic-profile": "pf-2", "traffic-profile": "pf-2",
"forwarding-operation-type": "pop-and-lookup", "operation": "pop-and-lookup",
"incoming-type": { "incoming": {
"forwarding-id": { "forwarding-id": {
"interface": "eth1", "interface": "eth1",
"mpls-label-stack": { "mpls-label-stack": {
"entry": [ "entry": [
{ {
"id": 0, "id": 0,
"label": 20001 "label": "20001"
} }
] ]
} }
} }
}, },
"outgoing-type": { "outgoing": {
"forwarding-disaggregation": { "forwarding-disaggregation": {
"forwarding-sub-layer": [ "sub-layer": [
"fsl-1", "fsl-1",
"fsl-2" "fsl-2"
] ]
} }
} }
} }
] ]
} }
},
"ietf-interfaces:interfaces": {
"interface": [
{
"name": "eth0",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-12-18T18:59:00-05:00"
}
},
{
"name": "eth1",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-12-18T18:59:00-05:00"
}
},
{
"name": "eth2",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-12-18T18:59:00-05:00"
}
},
{
"name": "eth3",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-12-18T18:59:00-05:00"
}
},
{
"name": "eth4",
"type": "iana-if-type:ethernetCsmacd",
"oper-status": "up",
"statistics": {
"discontinuity-time": "2020-12-18T18:59:00-05:00"
}
}
]
} }
} }
Figure 22: Example D-1 DetNet JSON Relay Service Sub-Layer Figure 23: Example D-1 DetNet JSON Relay Service Sub-Layer
Disaggregation Disaggregation
Authors' Addresses Authors' Addresses
Xuesong Geng Xuesong Geng
Huawei Technologies Huawei Technologies
Email: gengxuesong@huawei.com Email: gengxuesong@huawei.com
Mach(Guoyi) Chen
Huawei Technologies
Email: mach.chen@huawei.com
Yeoncheol Ryoo Yeoncheol Ryoo
ETRI ETRI
Email: dbduscjf@etri.re.kr Email: dbduscjf@etri.re.kr
Don Fedyk Don Fedyk
LabN Consulting, L.L.C. LabN Consulting, L.L.C.
Email: dfedyk@labn.net Email: dfedyk@labn.net
 End of changes. 790 change blocks. 
1684 lines changed or deleted 1965 lines changed or added

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