< draft-ietf-detnet-yang-14.txt   draft-ietf-detnet-yang-15.txt >
Network Working Group X. Geng Network Working Group X. Geng
Internet-Draft Huawei Technologies Internet-Draft Huawei Technologies
Intended status: Standards Track Y. Ryoo Intended status: Standards Track Y. Ryoo
Expires: 25 April 2022 ETRI Expires: 9 June 2022 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
22 October 2021 6 December 2021
Deterministic Networking (DetNet) YANG Model Deterministic Networking (DetNet) YANG Model
draft-ietf-detnet-yang-14 draft-ietf-detnet-yang-15
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 on devices along the path without dependency on any signaling service on devices along the path without dependency on any signaling
protocol. It also specifies operational status for flows. An protocol. It also specifies operational status for flows. An
operator or network controller programs the configuration of the operator or network controller programs the configuration of the
devices. devices.
skipping to change at page 1, line 46 skipping to change at page 1, line 46
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on 25 April 2022. This Internet-Draft will expire on 9 June 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 Revised BSD License text as
as described in Section 4.e of the Trust Legal Provisions and are 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 Revised BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Abbreviations . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Abbreviations . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3
4. DetNet YANG Module . . . . . . . . . . . . . . . . . . . . . 3 4. DetNet YANG Module . . . . . . . . . . . . . . . . . . . . . 3
4.1. DetNet Application Flow YANG Attributes . . . . . . . . . 5 4.1. DetNet Application Flow YANG Attributes . . . . . . . . . 5
4.2. DetNet Service Sub-layer YANG Attributes . . . . . . . . 5 4.2. DetNet Service Sub-layer YANG Attributes . . . . . . . . 5
4.3. DetNet Forwarding Sub-layer YANG Attributes . . . . . . . 5 4.3. DetNet Forwarding Sub-layer YANG Attributes . . . . . . . 5
5. DetNet Flow Aggregation . . . . . . . . . . . . . . . . . . . 6 5. DetNet Flow Aggregation . . . . . . . . . . . . . . . . . . . 6
6. DetNet YANG Structure Considerations . . . . . . . . . . . . 7 6. DetNet YANG Structure Considerations . . . . . . . . . . . . 7
7. DetNet Configuration YANG Structures . . . . . . . . . . . . 8 7. DetNet Configuration YANG Structures . . . . . . . . . . . . 8
8. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 9 8. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 9
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 38 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 38
10. Security Considerations . . . . . . . . . . . . . . . . . . . 39 10. Security Considerations . . . . . . . . . . . . . . . . . . . 39
11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 39 11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 40
12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 40 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 40
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 40 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 40
13.1. Normative References . . . . . . . . . . . . . . . . . . 40 13.1. Normative References . . . . . . . . . . . . . . . . . . 40
13.2. Informative References . . . . . . . . . . . . . . . . . 41 13.2. Informative References . . . . . . . . . . . . . . . . . 42
Appendix A. DetNet Configuration YANG Tree . . . . . . . . . . . 42 Appendix A. DetNet Configuration YANG Tree . . . . . . . . . . . 43
Appendix B. Examples . . . . . . . . . . . . . . . . . . . . . . 51 Appendix B. Examples . . . . . . . . . . . . . . . . . . . . . . 52
B.1. Example A-1 JSON Configuration/Operational . . . . . . . 51 B.1. Example A-1 JSON Configuration/Operational . . . . . . . 52
B.2. Example B-1 XML Config: Aggregation using a Forwarding B.2. Example B-1 XML Config: Aggregation using a Forwarding
Sub-layer . . . . . . . . . . . . . . . . . . . . . . . . 56 Sub-layer . . . . . . . . . . . . . . . . . . . . . . . . 57
B.3. Example B-2 JSON Service Aggregation Configuration . . . 60 B.3. Example B-2 JSON Service Aggregation Configuration . . . 61
B.4. Example C-1 JSON Relay Aggregation/Disaggregation B.4. Example C-1 JSON Relay Aggregation/Disaggregation
Configuration . . . . . . . . . . . . . . . . . . . . . . 66 Configuration . . . . . . . . . . . . . . . . . . . . . . 67
B.5. Example C-2 JSON Relay Aggregation Service Sub-Layer . . 83 B.5. Example C-2 JSON Relay Aggregation Service Sub-Layer . . 84
B.6. Example C-3 JSON Relay Service Sub-Layer Aggregation/ B.6. Example C-3 JSON Relay Service Sub-Layer Aggregation/
Disaggregation . . . . . . . . . . . . . . . . . . . . . 95 Disaggregation . . . . . . . . . . . . . . . . . . . . . 96
B.7. Example C-4 JSON Relay Service Sub-Layer Aggregation/ B.7. Example C-4 JSON Relay Service Sub-Layer Aggregation/
Disaggregation . . . . . . . . . . . . . . . . . . . . . 109 Disaggregation . . . . . . . . . . . . . . . . . . . . . 110
B.8. Example D-1 JSON Transit Forwarding Sub-Layer Aggregation/ B.8. Example D-1 JSON Transit Forwarding Sub-Layer Aggregation/
Disaggregation . . . . . . . . . . . . . . . . . . . . . 126 Disaggregation . . . . . . . . . . . . . . . . . . . . . 127
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 133 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 134
1. Introduction 1. Introduction
DetNet (Deterministic Networking) provides a capability to carry DetNet (Deterministic Networking) provides a capability to carry
specified unicast or multicast data flows for real-time applications specified unicast or multicast data flows for real-time applications
with extremely low packet loss rates and assured maximum end-to-end with extremely low packet loss rates and assured maximum end-to-end
delivery latency. A description of the general background and delivery latency. A description of the general background and
concepts of DetNet can be found in [RFC8655]. concepts of DetNet can be found in [RFC8655].
This document defines a YANG model for DetNet based on YANG data This document defines a YANG model for DetNet based on YANG data
skipping to change at page 4, line 17 skipping to change at page 4, line 17
the relationship between data instance node types and the included the relationship between data instance node types and the included
layers. Node types typically are logical per DetNet service and one layers. Node types typically are logical per DetNet service and one
DetNet service can be one node type while another is another node DetNet service can be one node type while another is another node
type on same device. This model is a controller based model because type on same device. This model is a controller based model because
a controller or operator configures all the devices to form a a controller or operator configures all the devices to form a
service. service.
+---------------------------------------------------+ +---------------------------------------------------+
| Instance | | Instance |
+-----+-----------------+-----------------+---------------+ +-----+-----------------+-----------------+---------------+
| |Edge Node | Transit Node | Relay Node | | |Edge Node | Relay Node | Transit Node |
+-----+-----------------+-----------------+---------------+ +-----+-----------------+-----------------+---------------+
| L |Application | | | | L |Application | | |
| a +-----------------+-----------------+---------------+ | a +-----------------+-----------------+---------------+
| y |Service Sub-Layer|Service Sub-Layer| | | y |Service Sub-Layer|Service Sub-Layer| |
| e +-----------------+-----------------+---------------+ | e +-----------------+-----------------+---------------+
| r |Forwarding S-L |Forwarding S-L | Forwarding S-L| | r |Forwarding S-L |Forwarding S-L | Forwarding S-L|
+-----+-----------------+-----------------+---------------+ +-----+-----------------+-----------------+---------------+
Figure 1: Detnet Layers and Node Types Figure 1: Detnet Layers and Node Types
skipping to change at page 7, line 14 skipping to change at page 7, line 14
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.
6. 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| |
+-----+------+ +-----+------+ +-------+------+ | +-----+------+ +-----+------+ +-------+------+ |
| | | | | | | |
+-----+------+ +-----+------+ +-------+------+ | +-----+------+ +-----+------+ +-------+------+ |
| Reference | | Reference | | Reference | | | Reference | | Reference | | Reference | |
| to Traffic | | to Traffic | | to Traffic | +--------+-------+ | to Traffic | | to Traffic | | to Traffic | +-------+-------+
| Profile | | Profile | | Profile | | Traffic Profile| | Profile | | Profile | | Profile | |Traffic Profile|
+------------+ +------------+ +--------------+ +----------------+ +------------+ +------------+ +--------------+ +---------------+
There are three layer types in DetNet YANG Model: App-flow data There are three layer types in DetNet YANG Model: App-flow data
layer, service sub-layer and forwarding sub-layer. Additionally, the layer, service sub-layer and forwarding sub-layer. Additionally, the
Traffic parameters are captured in a Traffic profile that can be Traffic parameters are captured in a Traffic profile that can be
referenced by any of the layers. referenced by any of the layers.
Below is a a summary YANG tree showing the major items. A complete Below is a a summary YANG tree showing the major items. A complete
YANG tree is in section Appendix A. YANG tree is in section Appendix A.
A traffic profile can be created for application, service sub-layer A traffic profile can be created for application, service sub-layer
skipping to change at page 8, line 17 skipping to change at page 8, line 17
The following is a partial tree representation of the YANG as defined The following is a partial tree representation of the YANG as defined
in [RFC8340]. This corresponds to the structure layout in the in [RFC8340]. This corresponds to the structure layout in the
previous section. previous section.
module: ietf-detnet module: ietf-detnet
+--rw detnet +--rw detnet
+--rw traffic-profile* [name] +--rw traffic-profile* [name]
| +--rw name string | +--rw name string
| +--rw traffic-requirements | +--rw traffic-requirements
| +--rw traffic-spec | +--rw traffic-spec
| +--ro member-apps* app-flow-ref | +--ro member-app* app-flow-ref
| +--ro member-services* service-sub-layer-ref | +--ro member-service* service-sub-layer-ref
| +--ro member-fwd-sublayers* forwarding-sub-layer-ref | +--ro member-fwd-sublayer* forwarding-sub-layer-ref
+--rw app-flows +--rw app-flows
| +--rw app-flow* [name] | +--rw app-flow* [name]
| +--rw name string | +--rw name string
| +--rw bidir-congruent? boolean | +--rw bidir-congruent? boolean
| +--ro outgoing-service? service-sub-layer-ref | +--ro outgoing-service? service-sub-layer-ref
| +--ro incoming-service? service-sub-layer-ref | +--ro incoming-service? service-sub-layer-ref
| +--rw traffic-profile? traffic-profile-ref | +--rw traffic-profile? traffic-profile-ref
| +--rw ingress | +--rw ingress
| | ... | | ...
| +--rw egress | +--rw egress
skipping to change at page 11, line 5 skipping to change at page 11, line 5
without modification, is permitted pursuant to, and subject to without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(https://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
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.";
revision 2021-10-20 { revision 2021-11-18 {
description description
"initial revision"; "initial revision";
reference reference
"RFC XXXX: Deterministic Networking (DetNet) YANG Model"; "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.";
skipping to change at page 27, line 48 skipping to change at page 27, line 48
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 reference
"RFC 9016 Section 4.2"; "RFC 9016 Section 4.2";
} }
} }
container traffic-spec { container traffic-spec {
description description
"Flow-specification specifies how the Source transmits "Traffic-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
"RFC 9016 Section 5.5"; "RFC 9016 Section 5.5";
leaf interval { leaf interval {
type uint32; type uint32;
units "nanoseconds"; units "nanoseconds";
description description
skipping to change at page 28, line 47 skipping to change at page 28, line 47
} }
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 reference
"RFC 9016 Section 5.5, IEEE802.1Q"; "RFC 9016 Section 5.5, IEEE802.1Q";
} }
} }
leaf-list member-apps { leaf-list member-app {
type app-flow-ref; type app-flow-ref;
config false; config false;
description description
"A list of Applications attached to this profile. Each "A list of Applications attached to this profile. Each
application that uses a profile has an automatically application that uses a profile has an automatically
populated reference."; populated reference.";
reference reference
"RFC XXXX: Deterministic Networking (DetNet) YANG Model "RFC XXXX: Deterministic Networking (DetNet) YANG Model
Section 5"; Section 5";
} }
leaf-list member-services { leaf-list member-service {
type service-sub-layer-ref; type service-sub-layer-ref;
config false; config false;
description description
"A list of Service Sub-layers attached to this profile. "A list of Service Sub-layers attached to this profile.
Each Service Sub-layers that uses a profile has an Each Service Sub-layers that uses a profile has an
automatically populated reference."; automatically populated reference.";
reference reference
"RFC XXXX: Deterministic Networking (DetNet) YANG Model "RFC XXXX: Deterministic Networking (DetNet) YANG Model
Section 5"; Section 5";
} }
leaf-list member-fwd-sublayers { leaf-list member-fwd-sublayer {
type forwarding-sub-layer-ref; type forwarding-sub-layer-ref;
config false; config false;
description description
"A list of Forwarding Sub-layers attached to this profile. "A list of Forwarding Sub-layers attached to this profile.
Each Forwarding Sub-layers that uses a profile has an Each Forwarding Sub-layers that uses a profile has an
automatically populated reference."; automatically populated reference.";
reference reference
"RFC XXXX: Deterministic Networking (DetNet) YANG Model "RFC XXXX: Deterministic Networking (DetNet) YANG Model
Section 5"; Section 5";
} }
skipping to change at page 39, line 37 skipping to change at page 39, line 37
layer is the secure transport layer, and the mandatory-to-implement layer is the secure transport layer, and the mandatory-to-implement
secure transport is Secure Shell (SSH) [RFC6242]. The lowest secure transport is Secure Shell (SSH) [RFC6242]. The lowest
RESTCONF layer is HTTPS, and the mandatory-to-implement secure RESTCONF layer is HTTPS, and the mandatory-to-implement secure
transport is TLS [RFC8446]. transport is TLS [RFC8446].
The Network Configuration Access Control Model (NACM) [RFC8341] The Network Configuration Access Control Model (NACM) [RFC8341]
provides the means to restrict access for particular NETCONF or provides the means to restrict access for particular NETCONF or
RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or
RESTCONF protocol operations and content. RESTCONF protocol operations and content.
There are a number of data nodes defined in the modules that are There are a number of data nodes defined in the module that are
writable/creatable/deletable (i.e., config true, which is the writable/creatable/deletable (i.e., config true, which is the
default). These data nodes may be considered sensitive or vulnerable default). These data nodes may be considered sensitive or vulnerable
in some network environments. Write operations (e.g., edit-config) in some network environments. Write operations (e.g., edit-config)
to these data nodes without proper protection can break or to these data nodes without proper protection can break or
incorrectly connect DetNet flows. incorrectly connect DetNet flows. Since this is a configured Data
Plane any changes that are not coordinated with all devices along the
path the whole DetNet module is considered vulnerable and should have
authorized access only.
Similarly, the data nodes in these YANG modules may be considered
sensitive or vulnerable in some network environments. It is thus
important to control read access (e.g., via get, get-config, or
notification) to these data nodes. These are the subtrees and data
node and their sensitivity/vulnerability:
/detnet/app-flows: This controls the application details so it could
be considered sensitive.
/detnet/traffic-profile/member-app: This links traffic profiles to
applications, o this also coudl be considered moer sensitive. The
trafic profiles liked to service sub-layer and forwarding sub-layer
are less sensitive.
/detnet/service/sub-layer/incoming/app-flow: This links applications
to services.
/detnet/service/sub-layer/outgoing/app-flow: This links applications
to services.
11. Contributors 11. Contributors
The editors of this document wish to thank and acknowledge the The editors of this document wish to thank and acknowledge the
following people who contributed substantially to the content of this following people who contributed substantially to the content of this
document and should be considered coauthors: document and should be considered coauthors:
Mach(Guoyi) Chen Mach(Guoyi) Chen
Huawei Technologies Huawei Technologies
Email: mach.chen@huawei.com Email: mach.chen@huawei.com
12. Acknowledgments 12. Acknowledgments
The editors of this document would like to thank Lou Berger, Tom The editors of this document would like to thank Lou Berger, Tom
Petch and Xufeng Lui for their detailed comments. Petch and Xufeng Lui for their detailed comments.
13. References 13. References
13.1. Normative References 13.1. Normative References
skipping to change at page 42, line 35 skipping to change at page 43, line 14
[RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration
Access Control Model", STD 91, RFC 8341, Access Control Model", STD 91, RFC 8341,
DOI 10.17487/RFC8341, March 2018, DOI 10.17487/RFC8341, March 2018,
<https://www.rfc-editor.org/info/rfc8341>. <https://www.rfc-editor.org/info/rfc8341>.
Appendix A. DetNet Configuration YANG Tree Appendix A. DetNet Configuration YANG Tree
This is the full YANG tree as described in [RFC8340]. This is the full YANG tree as described in [RFC8340].
module: ietf-detnet module: ietf-detnet
+--rw detnet +--rw detnet
+--rw traffic-profile* [name] +--rw traffic-profile* [name]
| +--rw name string | +--rw name string
| +--rw traffic-requirements | +--rw traffic-requirements
| | +--rw min-bandwidth? uint64 | | +--rw min-bandwidth? uint64
| | +--rw max-latency? uint32 | | +--rw max-latency? uint32
| | +--rw max-latency-variation? uint32 | | +--rw max-latency-variation? uint32
| | +--rw max-loss? uint32 | | +--rw max-loss? uint32
| | +--rw max-consecutive-loss-tolerance? uint32 | | +--rw max-consecutive-loss-tolerance? uint32
| | +--rw max-misordering? uint32 | | +--rw max-misordering? uint32
| +--rw traffic-spec | +--rw traffic-spec
| | +--rw interval? uint32 | | +--rw interval? uint32
| | +--rw max-pkts-per-interval? uint32 | | +--rw max-pkts-per-interval? uint32
| | +--rw max-payload-size? uint32 | | +--rw max-payload-size? uint32
| | +--rw min-payload-size? uint32 | | +--rw min-payload-size? uint32
| | +--rw min-pkts-per-interval? uint32 | | +--rw min-pkts-per-interval? uint32
| +--ro member-apps* app-flow-ref | +--ro member-app* app-flow-ref
| +--ro member-services* service-sub-layer-ref | +--ro member-service* service-sub-layer-ref
| +--ro member-fwd-sublayers* forwarding-sub-layer-ref | +--ro member-fwd-sublayer* forwarding-sub-layer-ref
+--rw app-flows +--rw app-flows
| +--rw app-flow* [name] | +--rw app-flow* [name]
| +--rw name string | +--rw name string
| +--rw bidir-congruent? boolean | +--rw bidir-congruent? boolean
| +--ro outgoing-service? service-sub-layer-ref | +--ro outgoing-service? service-sub-layer-ref
| +--ro incoming-service? service-sub-layer-ref | +--ro incoming-service? service-sub-layer-ref
| +--rw traffic-profile? traffic-profile-ref | +--rw traffic-profile? traffic-profile-ref
| +--rw ingress | +--rw ingress
| | +--ro app-flow-status? identityref | | +--ro app-flow-status? identityref
| | +--rw interface if:interface-ref | | +--rw interface if:interface-ref
| | +--rw (data-flow-type)? | | +--rw (data-flow-type)?
| | +--:(tsn-app-flow) | | +--:(tsn-app-flow)
| | | +--rw tsn-app-flow | | | +--rw tsn-app-flow
| | | +--rw source-mac-address? | | | +--rw source-mac-address?
| | | | yang:mac-address | | | | yang:mac-address
| | | +--rw destination-mac-address? | | | +--rw destination-mac-address?
| | | | yang:mac-address | | | | yang:mac-address
| | | +--rw ethertype? | | | +--rw ethertype?
| | | | ethertypes:ethertype | | | | ethertypes:ethertype
| | | +--rw vlan-id? | | | +--rw vlan-id?
| | | | dot1q-types:vlanid | | | | dot1q-types:vlanid
| | | +--rw pcp? | | | +--rw pcp?
| | | dot1q-types:priority-type | | | dot1q-types:priority-type
| | +--:(ip-app-flow) | | +--:(ip-app-flow)
| | | +--rw ip-app-flow | | | +--rw ip-app-flow
| | | +--rw src-ip-prefix? inet:ip-prefix | | | +--rw src-ip-prefix? inet:ip-prefix
| | | +--rw dest-ip-prefix? inet:ip-prefix | | | +--rw dest-ip-prefix? inet:ip-prefix
| | | +--rw protocol-next-header? uint8 | | | +--rw protocol-next-header? uint8
| | | +--rw dscp? inet:dscp | | | +--rw dscp? inet:dscp
| | | +--rw flow-label? | | | +--rw flow-label?
| | | | inet:ipv6-flow-label | | | | inet:ipv6-flow-label
| | | +--rw source-port | | | +--rw source-port
| | | | +--rw (port-range-or-operator)? | | | | +--rw (port-range-or-operator)?
| | | | +--:(range) | | | | +--:(range)
| | | | | +--rw lower-port | | | | | +--rw lower-port
| | | | | | inet:port-number | | | | | | inet:port-number
| | | | | +--rw upper-port | | | | | +--rw upper-port
| | | | | inet:port-number | | | | | inet:port-number
| | | | +--:(operator) | | | | +--:(operator)
| | | | +--rw operator? operator | | | | +--rw operator? operator
| | | | +--rw port inet:port-number | | | | +--rw port inet:port-number
| | | +--rw destination-port | | | +--rw destination-port
| | | | +--rw (port-range-or-operator)? | | | | +--rw (port-range-or-operator)?
| | | | +--:(range) | | | | +--:(range)
| | | | | +--rw lower-port | | | | | +--rw lower-port
| | | | | | inet:port-number | | | | | | inet:port-number
| | | | | +--rw upper-port | | | | | +--rw upper-port
| | | | | inet:port-number | | | | | inet:port-number
| | | | +--:(operator) | | | | +--:(operator)
| | | | +--rw operator? operator | | | | +--rw operator? operator
| | | | +--rw port inet:port-number | | | | +--rw port inet:port-number
| | | +--rw ipsec-spi? ipsec-spi | | | +--rw ipsec-spi? ipsec-spi
| | +--:(mpls-app-flow) | | +--:(mpls-app-flow)
| | +--rw mpls-app-flow | | +--rw mpls-app-flow
| | +--rw (label-space)? | | +--rw (label-space)?
| | +--:(context-label-space) | | +--:(context-label-space)
| | | +--rw mpls-label-stack | | | +--rw mpls-label-stack
| | | +--rw entry* [id] | | | +--rw entry* [id]
| | | +--rw id uint8 | | | +--rw id uint8
| | | +--rw label? | | | +--rw label?
| | | | rt-types:mpls-label | | | | rt-types:mpls-label
| | | +--rw ttl? uint8 | | | +--rw ttl? uint8
| | | +--rw traffic-class? uint8 | | | +--rw traffic-class? uint8
| | +--:(platform-label-space) | | +--:(platform-label-space)
| | +--rw label? | | +--rw label?
| | rt-types:mpls-label | | rt-types:mpls-label
| +--rw egress | +--rw egress
| +--rw (application-type)? | +--rw (application-type)?
| +--:(ethernet) | +--:(ethernet)
| | +--rw ethernet | | +--rw ethernet
| | +--rw interface? if:interface-ref | | +--rw interface? if:interface-ref
| +--:(ip-mpls) | +--:(ip-mpls)
| +--rw ip-mpls | +--rw ip-mpls
| +--rw (next-hop-options) | +--rw (next-hop-options)
| +--:(simple-next-hop) | +--:(simple-next-hop)
| | +--rw outgoing-interface? | | +--rw outgoing-interface?
| | | if:interface-ref | | | if:interface-ref
| | +--rw (flow-type)? | | +--rw (flow-type)?
| | +--:(ip) | | +--:(ip)
| | | +--rw next-hop-address? | | | +--rw next-hop-address?
| | | inet:ip-address-no-zone | | | inet:ip-address-no-zone
| | +--:(mpls) | | +--:(mpls)
| | +--rw mpls-label-stack | | +--rw mpls-label-stack
| | +--rw entry* [id] | | +--rw entry* [id]
| | +--rw id uint8 | | +--rw id uint8
| | +--rw label? | | +--rw label?
| | | rt-types:mpls-label | | | rt-types:mpls-label
| | +--rw ttl? uint8 | | +--rw ttl? uint8
| | +--rw traffic-class? uint8 | | +--rw traffic-class? uint8
| +--:(next-hop-list) | +--:(next-hop-list)
| +--rw next-hop* [hop-index] | +--rw next-hop* [hop-index]
| +--rw hop-index uint8 | +--rw hop-index uint8
| +--rw outgoing-interface? | +--rw outgoing-interface?
| | if:interface-ref | | if:interface-ref
| +--rw (flow-type)? | +--rw (flow-type)?
| +--:(ip) | +--:(ip)
| | +--rw next-hop-address? | | +--rw next-hop-address?
| | inet:ip-address-no-zone | | inet:ip-address-no-
| +--:(mpls) | | zone
| +--rw mpls-label-stack | +--:(mpls)
| +--rw entry* [id] | +--rw mpls-label-stack
| +--rw id | +--rw entry* [id]
| | uint8 | +--rw id
| +--rw label? | | uint8
| | rt-types:mpls-label | +--rw label?
| +--rw ttl? | | rt-types:mpls-
| | uint8 | | label
| +--rw traffic-class? | +--rw ttl?
| uint8 | | uint8
+--rw service | +--rw traffic-class?
| +--rw sub-layer* [name] | uint8
| +--rw name string +--rw service
| +--rw service-rank? uint8 | +--rw sub-layer* [name]
| +--rw traffic-profile? traffic-profile-ref | +--rw name string
| +--rw service-protection | +--rw service-rank? uint8
| | +--rw protection? service-protection | +--rw traffic-profile? traffic-profile-ref
| | +--rw sequence-number-length? sequence-number-field | +--rw service-protection
| +--rw operation? operation | | +--rw protection? service-protection
| +--rw incoming | | +--rw sequence-number-length? sequence-number-field
| | +--rw (incoming) | +--rw operation? operation
| | +--:(app-flow) | +--rw incoming
| | | +--rw app-flow | | +--rw (incoming)
| | | +--rw flow* app-flow-ref | | +--:(app-flow)
| | +--:(service-aggregation) | | | +--rw app-flow
| | | +--rw service-aggregation | | | +--rw flow* app-flow-ref
| | | +--rw sub-layer* service-sub-layer-ref | | +--:(service-aggregation)
| | +--:(forwarding-aggregation) | | | +--rw service-aggregation
| | | +--rw forwarding-aggregation | | | +--rw sub-layer* service-sub-layer-ref
| | | +--rw sub-layer* forwarding-sub-layer-ref | | +--:(forwarding-aggregation)
| | +--:(service-id) | | | +--rw forwarding-aggregation
| | +--rw service-id | | | +--rw sub-layer* forwarding-sub-layer-ref
| | +--rw (detnet-flow-type)? | | +--:(service-id)
| | +--:(ip-detnet-flow) | | +--rw service-id
| | | +--rw src-ip-prefix? | | +--rw (detnet-flow-type)?
| | | | inet:ip-prefix | | +--:(ip-detnet-flow)
| | | +--rw dest-ip-prefix? | | | +--rw src-ip-prefix?
| | | | inet:ip-prefix | | | | inet:ip-prefix
| | | +--rw protocol-next-header? uint8 | | | +--rw dest-ip-prefix?
| | | +--rw dscp? inet:dscp | | | | inet:ip-prefix
| | | +--rw flow-label? | | | +--rw protocol-next-header? uint8
| | | | inet:ipv6-flow-label | | | +--rw dscp? inet:dscp
| | | +--rw source-port | | | +--rw flow-label?
| | | | +--rw (port-range-or-operator)? | | | | inet:ipv6-flow-label
| | | | +--:(range) | | | +--rw source-port
| | | | | +--rw lower-port | | | | +--rw (port-range-or-operator)?
| | | | | | inet:port-number | | | | +--:(range)
| | | | | +--rw upper-port | | | | | +--rw lower-port
| | | | | inet:port-number | | | | | | inet:port-number
| | | | +--:(operator) | | | | | +--rw upper-port
| | | | +--rw operator? operator | | | | | inet:port-number
| | | | +--rw port | | | | +--:(operator)
| | | | inet:port-number | | | | +--rw operator? operator
| | | +--rw destination-port | | | | +--rw port
| | | | +--rw (port-range-or-operator)? | | | | inet:port-number
| | | | +--:(range) | | | +--rw destination-port
| | | | | +--rw lower-port | | | | +--rw (port-range-or-operator)?
| | | | | | inet:port-number | | | | +--:(range)
| | | | | +--rw upper-port | | | | | +--rw lower-port
| | | | | inet:port-number | | | | | | inet:port-number
| | | | +--:(operator) | | | | | +--rw upper-port
| | | | +--rw operator? operator | | | | | inet:port-number
| | | | +--rw port | | | | +--:(operator)
| | | | inet:port-number | | | | +--rw operator? operator
| | | +--rw ipsec-spi? ipsec-spi | | | | +--rw port
| | +--:(mpls-detnet-flow) | | | | inet:port-number
| | +--rw (label-space)? | | | +--rw ipsec-spi? ipsec-spi
| | +--:(context-label-space) | | +--:(mpls-detnet-flow)
| | | +--rw mpls-label-stack | | +--rw (label-space)?
| | | +--rw entry* [id] | | +--:(context-label-space)
| | | +--rw id uint8 | | | +--rw mpls-label-stack
| | | +--rw label? | | | +--rw entry* [id]
| | | | rt-types:mpls-label | | | +--rw id uint8
| | | +--rw ttl? uint8 | | | +--rw label?
| | | +--rw traffic-class? uint8 | | | | rt-types:mpls-label
| | +--:(platform-label-space) | | | +--rw ttl? uint8
| | +--rw label? | | | +--rw traffic-class? uint8
| | rt-types:mpls-label | | +--:(platform-label-space)
| +--rw outgoing | | +--rw label?
| +--rw (outgoing) | | rt-types:mpls-label
| +--:(forwarding-sub-layer) | +--rw outgoing
| | +--rw forwarding-sub-layer | +--rw (outgoing)
| | +--rw service-outgoing* [index] | +--:(forwarding-sub-layer)
| | +--rw index uint8 | | +--rw forwarding-sub-layer
| | +--rw (header-type)? | | +--rw service-outgoing* [index]
| | | +--:(mpls) | | +--rw index uint8
| | | | +--rw mpls-label-stack | | +--rw (header-type)?
| | | | +--rw entry* [id] | | | +--:(mpls)
| | | | +--rw id uint8 | | | | +--rw mpls-label-stack
| | | | +--rw label? | | | | +--rw entry* [id]
| | | | | rt-types:mpls-label | | | | +--rw id uint8
| | | | +--rw ttl? uint8 | | | | +--rw label?
| | | | +--rw traffic-class? uint8 | | | | | rt-types:mpls-label
| | | +--:(ip) | | | | +--rw ttl? uint8
| | | +--rw src-ip-address? | | | | +--rw traffic-class? uint8
| | | | inet:ip-address-no-zone | | | +--:(ip)
| | | +--rw dest-ip-address? | | | +--rw src-ip-address?
| | | | inet:ip-address-no-zone | | | | inet:ip-address-no-zone
| | | +--rw protocol-next-header? uint8 | | | +--rw dest-ip-address?
| | | +--rw dscp? | | | | inet:ip-address-no-zone
| | | | inet:dscp | | | +--rw protocol-next-header? uint8
| | | +--rw flow-label? | | | +--rw dscp?
| | | | inet:ipv6-flow-label | | | | inet:dscp
| | | +--rw source-port? | | | +--rw flow-label?
| | | | inet:port-number | | | | inet:ipv6-flow-label
| | | +--rw destination-port? | | | +--rw source-port?
| | | inet:port-number | | | | inet:port-number
| | +--rw sub-layer* | | | +--rw destination-port?
| | forwarding-sub-layer-ref | | | inet:port-number
| +--:(service-sub-layer) | | +--rw sub-layer*
| | +--rw service-sub-layer | | forwarding-sub-layer-ref
| | +--rw aggregation-sub-layer? | +--:(service-sub-layer)
| | | service-sub-layer-ref | | +--rw service-sub-layer
| | +--rw service-label | | +--rw aggregation-sub-layer?
| | +--rw mpls-label-stack | | | service-sub-layer-ref
| | +--rw entry* [id] | | +--rw service-label
| | +--rw id uint8 | | +--rw mpls-label-stack
| | +--rw label? | | +--rw entry* [id]
| | | rt-types:mpls-label | | +--rw id uint8
| | +--rw ttl? uint8 | | +--rw label?
| | +--rw traffic-class? uint8 | | | rt-types:mpls-label
| +--:(app-flow) | | +--rw ttl? uint8
| | +--rw app-flow | | +--rw traffic-class? uint8
| | +--rw flow* app-flow-ref | +--:(app-flow)
| +--:(service-disaggregation) | | +--rw app-flow
| | +--rw service-disaggregation | | +--rw flow* app-flow-ref
| | +--rw sub-layer* service-sub-layer-ref | +--:(service-disaggregation)
| +--:(forwarding-disaggregation) | | +--rw service-disaggregation
| +--rw forwarding-disaggregation | | +--rw sub-layer* service-sub-layer-ref
| +--rw sub-layer* forwarding-sub-layer-ref | +--:(forwarding-disaggregation)
+--rw forwarding | +--rw forwarding-disaggregation
+--rw sub-layer* [name] | +--rw sub-layer* forwarding-sub-layer-ref
+--rw name string +--rw forwarding
+--rw traffic-profile? traffic-profile-ref +--rw sub-layer* [name]
+--rw operation? forwarding-operations +--rw name string
+--rw incoming +--rw traffic-profile? traffic-profile-ref
| +--rw (incoming) +--rw operation? forwarding-operations
| +--:(service-sub-layer) +--rw incoming
| | +--rw service-sub-layer | +--rw (incoming)
| | +--rw sub-layer* service-sub-layer-ref | +--:(service-sub-layer)
| +--:(forwarding-aggregation) | | +--rw service-sub-layer
| | +--rw forwarding-aggregation | | +--rw sub-layer* service-sub-layer-ref
| | +--rw sub-layer* forwarding-sub-layer-ref | +--:(forwarding-aggregation)
| +--:(forwarding-id) | | +--rw forwarding-aggregation
| +--rw forwarding-id | | +--rw sub-layer* forwarding-sub-layer-ref
| +--rw interface? | +--:(forwarding-id)
| | if:interface-ref | +--rw forwarding-id
| +--rw (detnet-flow-type)? | +--rw interface?
| +--:(ip-detnet-flow) | | if:interface-ref
| | +--rw src-ip-prefix? | +--rw (detnet-flow-type)?
| | | inet:ip-prefix | +--:(ip-detnet-flow)
| | +--rw dest-ip-prefix? | | +--rw src-ip-prefix?
| | | inet:ip-prefix | | | inet:ip-prefix
| | +--rw protocol-next-header? uint8 | | +--rw dest-ip-prefix?
| | +--rw dscp? inet:dscp | | | inet:ip-prefix
| | +--rw flow-label? | | +--rw protocol-next-header? uint8
| | | inet:ipv6-flow-label | | +--rw dscp? inet:dscp
| | +--rw source-port | | +--rw flow-label?
| | | +--rw (port-range-or-operator)? | | | inet:ipv6-flow-label
| | | +--:(range) | | +--rw source-port
| | | | +--rw lower-port | | | +--rw (port-range-or-operator)?
| | | | | inet:port-number | | | +--:(range)
| | | | +--rw upper-port | | | | +--rw lower-port
| | | | inet:port-number | | | | | inet:port-number
| | | +--:(operator) | | | | +--rw upper-port
| | | +--rw operator? operator | | | | inet:port-number
| | | +--rw port | | | +--:(operator)
| | | inet:port-number | | | +--rw operator? operator
| | +--rw destination-port | | | +--rw port
| | | +--rw (port-range-or-operator)? | | | inet:port-number
| | | +--:(range) | | +--rw destination-port
| | | | +--rw lower-port | | | +--rw (port-range-or-operator)?
| | | | | inet:port-number | | | +--:(range)
| | | | +--rw upper-port | | | | +--rw lower-port
| | | | inet:port-number | | | | | inet:port-number
| | | +--:(operator) | | | | +--rw upper-port
| | | +--rw operator? operator | | | | inet:port-number
| | | +--rw port | | | +--:(operator)
| | | inet:port-number | | | +--rw operator? operator
| | +--rw ipsec-spi? ipsec-spi | | | +--rw port
| +--:(mpls-detnet-flow) | | | inet:port-number
| +--rw (label-space)? | | +--rw ipsec-spi? ipsec-spi
| +--:(context-label-space) | +--:(mpls-detnet-flow)
| | +--rw mpls-label-stack | +--rw (label-space)?
| | +--rw entry* [id] | +--:(context-label-space)
| | +--rw id uint8 | | +--rw mpls-label-stack
| | +--rw label? | | +--rw entry* [id]
| | | rt-types:mpls-label | | +--rw id uint8
| | +--rw ttl? uint8 | | +--rw label?
| | +--rw traffic-class? uint8 | | | rt-types:mpls-label
| +--:(platform-label-space) | | +--rw ttl? uint8
| +--rw label? | | +--rw traffic-class? uint8
| rt-types:mpls-label | +--:(platform-label-space)
+--rw outgoing | +--rw label?
+--rw (outgoing) | rt-types:mpls-label
+--:(interface) +--rw outgoing
| +--rw interface +--rw (outgoing)
| +--rw (next-hop-options) +--:(interface)
| +--:(simple-next-hop) | +--rw interface
| | +--rw outgoing-interface? | +--rw (next-hop-options)
| | | if:interface-ref | +--:(simple-next-hop)
| | +--rw (flow-type)? | | +--rw outgoing-interface?
| | +--:(ip) | | | if:interface-ref
| | | +--rw (operation-type)? | | +--rw (flow-type)?
| | | +--:(ip-forwarding) | | +--:(ip)
| | | | +--rw next-hop-address? | | | +--rw (operation-type)?
| | | | inet:ip-address-no-zone | | | +--:(ip-forwarding)
| | | +--:(mpls-over-ip-encapsulation) | | | | +--rw next-hop-address?
| | | +--rw src-ip-address? | | | | inet:ip-address-no-zone
| | | | inet:ip-address-no-zone | | | +--:(mpls-over-ip-
| | | +--rw dest-ip-address? | | | encapsulation)
| | | | inet:ip-address-no-zone | | | +--rw src-ip-address?
| | | +--rw protocol-next-header? | | | | inet:ip-address-no-zone
| | | | uint8 | | | +--rw dest-ip-address?
| | | +--rw dscp? | | | | inet:ip-address-no-zone
| | | | inet:dscp | | | +--rw protocol-next-header?
| | | +--rw flow-label? | | | | uint8
| | | | inet:ipv6-flow-label | | | +--rw dscp?
| | | +--rw source-port? | | | | inet:dscp
| | | | inet:port-number | | | +--rw flow-label?
| | | +--rw destination-port? | | | | inet:ipv6-flow-label
| | | inet:port-number | | | +--rw source-port?
| | +--:(mpls) | | | | inet:port-number
| | +--rw mpls-label-stack | | | +--rw destination-port?
| | +--rw entry* [id] | | | inet:port-number
| | +--rw id uint8 | | +--:(mpls)
| | +--rw label? | | +--rw mpls-label-stack
| | | rt-types:mpls-label | | +--rw entry* [id]
| | +--rw ttl? uint8 | | +--rw id uint8
| | +--rw traffic-class? uint8 | | +--rw label?
| +--:(next-hop-list) | | | rt-types:mpls-label
| +--rw next-hop* [hop-index] | | +--rw ttl? uint8
| +--rw hop-index | | +--rw traffic-class? uint8
| | uint8 | +--:(next-hop-list)
| +--rw outgoing-interface? | +--rw next-hop* [hop-index]
| | if:interface-ref | +--rw hop-index
| +--rw (flow-type)? | | uint8
| +--:(ip) | +--rw outgoing-interface?
| | +--rw (operation-type)? | | if:interface-ref
| | +--:(ip-forwarding) | +--rw (flow-type)?
| | | +--rw next-hop-address? | +--:(ip)
| | | inet:ip-address-no-zone | | +--rw (operation-type)?
| | +--:(mpls-over-ip- | | +--:(ip-forwarding)
| | encapsulation) | | | +--rw next-hop-address?
| | +--rw src-ip-address? | | | inet:ip-address-no-
| | | inet:ip-address-no-zone | | | zone
| | +--rw dest-ip-address? | | +--:(mpls-over-ip-
| | | inet:ip-address-no-zone | | encapsulation)
| | +--rw protocol-next-header? | | +--rw src-ip-address?
| | | uint8 | | | inet:ip-address-no-
| | +--rw dscp? | | | zone
| | | inet:dscp | | +--rw dest-ip-address?
| | +--rw flow-label? | | | inet:ip-address-no-
| | | inet:ipv6-flow-label | | | zone
| | +--rw source-port? | | +--rw protocol-next-
| | | inet:port-number | | | header?
| | +--rw destination-port? | | | uint8
| | inet:port-number | | +--rw dscp?
| +--:(mpls) | | | inet:dscp
| +--rw mpls-label-stack | | +--rw flow-label?
| +--rw entry* [id] | | | inet:ipv6-flow-
| +--rw id | | | label
| | uint8 | | +--rw source-port?
| +--rw label? | | | inet:port-number
| | rt-types:mpls-label | | +--rw destination-port?
| +--rw ttl? | | inet:port-number
| | uint8 | +--:(mpls)
| +--rw traffic-class? | +--rw mpls-label-stack
| uint8 | +--rw entry* [id]
+--:(service-aggregation) | +--rw id
| +--rw service-aggregation | | uint8
| +--rw aggregation-sub-layer? | +--rw label?
| | service-sub-layer-ref | | rt-types:mpls-
| +--rw optional-forwarding-label | | label
| +--rw mpls-label-stack | +--rw ttl?
| +--rw entry* [id] | | uint8
| +--rw id uint8 | +--rw traffic-class?
| +--rw label? | uint8
| | rt-types:mpls-label +--:(service-aggregation)
| +--rw ttl? uint8 | +--rw service-aggregation
| +--rw traffic-class? uint8 | +--rw aggregation-sub-layer?
+--:(forwarding-sub-layer) | | service-sub-layer-ref
| +--rw forwarding-sub-layer | +--rw optional-forwarding-label
| +--rw aggregation-sub-layer? | +--rw mpls-label-stack
| | forwarding-sub-layer-ref | +--rw entry* [id]
| +--rw forwarding-label | +--rw id uint8
| +--rw mpls-label-stack | +--rw label?
| +--rw entry* [id] | | rt-types:mpls-label
| +--rw id uint8 | +--rw ttl? uint8
| +--rw label? | +--rw traffic-class? uint8
| | rt-types:mpls-label +--:(forwarding-sub-layer)
| +--rw ttl? uint8 | +--rw forwarding-sub-layer
| +--rw traffic-class? uint8 | +--rw aggregation-sub-layer?
+--:(service-sub-layer) | | forwarding-sub-layer-ref
| +--rw service-sub-layer | +--rw forwarding-label
| +--rw sub-layer* service-sub-layer-ref | +--rw mpls-label-stack
+--:(forwarding-disaggregation) | +--rw entry* [id]
+--rw forwarding-disaggregation | +--rw id uint8
+--rw sub-layer* forwarding-sub-layer-ref | +--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 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. Note that IPv4 and IPv6 addresses are config false objects. Note that IPv4 and IPv6 addresses are
supported but for clarity in the examples and diagrams IPv4 has been supported but for clarity in the examples and diagrams IPv4 has been
used in most examples. The IP types are imported from [RFC6991] and used in most examples. The IP types are imported from [RFC6991] and
these support both IPv4 and IPv6. these support both IPv4 and IPv6.
skipping to change at page 52, line 25 skipping to change at page 53, line 10
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"traffic-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-app": [
"app-0", "app-0",
"app-1" "app-1"
] ]
}, },
{ {
"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,
skipping to change at page 52, line 47 skipping to change at page 53, line 32
"max-consecutive-loss-tolerance": 5, "max-consecutive-loss-tolerance": 5,
"max-misordering": 0 "max-misordering": 0
}, },
"traffic-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-service": [
"ssl-1" "ssl-1"
] ]
}, },
{ {
"name": "pf-3", "name": "pf-3",
"traffic-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-sublayer": [
"fsl-1" "fsl-1"
] ]
} }
], ],
"app-flows": { "app-flows": {
"app-flow": [ "app-flow": [
{ {
"name": "app-0", "name": "app-0",
"bidir-congruent": false, "bidir-congruent": false,
"outgoing-service": "ssl-1", "outgoing-service": "ssl-1",
skipping to change at page 56, line 18 skipping to change at page 57, line 4
} }
}, },
{ {
"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-18T18:59:00-05:00" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
} }
] ]
} }
} }
Figure 4: Example A-1 DetNet JSON configuration Figure 4: Example A-1 DetNet JSON configuration
B.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 5: 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>
<discontinuity-time>2020-12-18T23:59:00Z</discontinuity-time> <discontinuity-time
</statistics> >2020-12-18T23:59:00Z</discontinuity-time>
</interface> </statistics>
<interface> </interface>
<name>eth1</name> <interface>
<type>ia:ethernetCsmacd</type> <name>eth1</name>
<oper-status>up</oper-status> <type>ia:ethernetCsmacd</type>
<statistics> <oper-status>up</oper-status>
<discontinuity-time>2020-12-18T23:59:00Z</discontinuity-time> <statistics>
</statistics> <discontinuity-time
</interface> >2020-12-18T23:59:00Z</discontinuity-time>
<interface> </statistics>
<name>eth2</name> </interface>
<type>ia:ethernetCsmacd</type> <interface>
<oper-status>up</oper-status> <name>eth2</name>
<statistics> <type>ia:ethernetCsmacd</type>
<discontinuity-time>2020-12-18T23:59:00Z</discontinuity-time> <oper-status>up</oper-status>
</statistics> <statistics>
</interface> <discontinuity-time
<interface> >2020-12-18T23:59:00Z</discontinuity-time>
<name>eth3</name> </statistics>
<type>ia:ethernetCsmacd</type> </interface>
<oper-status>up</oper-status> <interface>
<statistics> <name>eth3</name>
<discontinuity-time>2020-12-18T23:59:00Z</discontinuity-time> <type>ia:ethernetCsmacd</type>
</statistics> <oper-status>up</oper-status>
</interface> <statistics>
<interface> <discontinuity-time
<name>eth4</name> >2020-12-18T23:59:00Z</discontinuity-time>
<type>ia:ethernetCsmacd</type> </statistics>
<oper-status>up</oper-status> </interface>
<statistics> <interface>
<discontinuity-time>2020-12-18T23:59:00Z</discontinuity-time> <name>eth4</name>
</statistics> <type>ia:ethernetCsmacd</type>
</interface> <oper-status>up</oper-status>
</interfaces> <statistics>
<detnet <discontinuity-time
xmlns="urn:ietf:params:xml:ns:yang:ietf-detnet"> >2020-12-18T23:59:00Z</discontinuity-time>
<app-flows> </statistics>
<app-flow> </interface>
<name>app-1</name> </interfaces>
<bidir-congruent>false</bidir-congruent> <detnet
<outgoing-service>ssl-1</outgoing-service> xmlns="urn:ietf:params:xml:ns:yang:ietf-detnet">
<traffic-profile>1</traffic-profile> <app-flows>
<ingress> <app-flow>
<app-flow-status>ready</app-flow-status> <name>app-1</name>
<interface>eth0</interface> <bidir-congruent>false</bidir-congruent>
<ip-app-flow> <outgoing-service>ssl-1</outgoing-service>
<src-ip-prefix>192.0.2.1/32</src-ip-prefix> <traffic-profile>1</traffic-profile>
<dest-ip-prefix>192.0.2.8/32</dest-ip-prefix> <ingress>
<dscp>6</dscp> <app-flow-status>ready</app-flow-status>
</ip-app-flow> <interface>eth0</interface>
</ingress> <ip-app-flow>
</app-flow> <src-ip-prefix>192.0.2.1/32</src-ip-prefix>
<app-flow> <dest-ip-prefix>192.0.2.8/32</dest-ip-prefix>
<name>app-2</name> <dscp>6</dscp>
<bidir-congruent>false</bidir-congruent> </ip-app-flow>
<outgoing-service>ssl-2</outgoing-service> </ingress>
<traffic-profile>1</traffic-profile> </app-flow>
<ingress> <app-flow>
<app-flow-status>ready</app-flow-status> <name>app-2</name>
<interface>eth1</interface> <bidir-congruent>false</bidir-congruent>
<ip-app-flow> <outgoing-service>ssl-2</outgoing-service>
<src-ip-prefix>192.0.2.2/32</src-ip-prefix> <traffic-profile>1</traffic-profile>
<dest-ip-prefix>192.0.2.9/32</dest-ip-prefix> <ingress>
<dscp>7</dscp> <app-flow-status>ready</app-flow-status>
</ip-app-flow> <interface>eth1</interface>
</ingress> <ip-app-flow>
</app-flow> <src-ip-prefix>192.0.2.2/32</src-ip-prefix>
</app-flows> <dest-ip-prefix>192.0.2.9/32</dest-ip-prefix>
<traffic-profile> <dscp>7</dscp>
<name>1</name> </ip-app-flow>
<traffic-requirements> </ingress>
<min-bandwidth>100000000</min-bandwidth> </app-flow>
<max-latency>100000000</max-latency> </app-flows>
<max-latency-variation>200000000</max-latency-variation> <traffic-profile>
<max-loss>2</max-loss> <name>1</name>
<max-consecutive-loss-tolerance>5</max-consecutive-loss-tolerance> <traffic-requirements>
<max-misordering>0</max-misordering> <min-bandwidth>100000000</min-bandwidth>
</traffic-requirements> <max-latency>100000000</max-latency>
<member-apps>app-1</member-apps> <max-latency-variation>200000000</max-latency-variation>
<member-apps>app-2</member-apps> <max-loss>2</max-loss>
</traffic-profile> <max-consecutive-loss-tolerance
<traffic-profile> >5</max-consecutive-loss-tolerance>
<name>2</name> <max-misordering>0</max-misordering>
<traffic-requirements> </traffic-requirements>
<min-bandwidth>100000000</min-bandwidth> <member-app>app-1</member-app>
<max-latency>100000000</max-latency> <member-app>app-2</member-app>
<max-latency-variation>200000000</max-latency-variation> </traffic-profile>
<max-loss>2</max-loss> <traffic-profile>
<max-consecutive-loss-tolerance>5</max-consecutive-loss-tolerance> <name>2</name>
<max-misordering>0</max-misordering> <traffic-requirements>
</traffic-requirements> <min-bandwidth>100000000</min-bandwidth>
<member-services>ssl-1</member-services> <max-latency>100000000</max-latency>
<member-services>ssl-2</member-services> <max-latency-variation>200000000</max-latency-variation>
</traffic-profile> <max-loss>2</max-loss>
<traffic-profile> <max-consecutive-loss-tolerance
<name>3</name> >5</max-consecutive-loss-tolerance>
<traffic-spec> <max-misordering>0</max-misordering>
<interval>5</interval> </traffic-requirements>
<max-pkts-per-interval>10</max-pkts-per-interval> <member-service>ssl-1</member-service>
<max-payload-size>1500</max-payload-size> <member-service>ssl-2</member-service>
</traffic-spec> </traffic-profile>
<member-fwd-sublayers>afl-1</member-fwd-sublayers> <traffic-profile>
<name>3</name>
</traffic-profile> <traffic-spec>
<service> <interval>5</interval>
<sub-layer> <max-pkts-per-interval>10</max-pkts-per-interval>
<name>ssl-1</name> <max-payload-size>1500</max-payload-size>
<service-rank>10</service-rank> </traffic-spec>
<traffic-profile>2</traffic-profile> <member-fwd-sublayer>afl-1</member-fwd-sublayer>
<operation>initiation</operation> </traffic-profile>
<service-protection> <service>
<protection>none</protection> <sub-layer>
<sequence-number-length>long-sn</sequence-number-length> <name>ssl-1</name>
</service-protection> <service-rank>10</service-rank>
<incoming> <traffic-profile>2</traffic-profile>
<app-flow> <operation>initiation</operation>
<flow>app-1</flow> <service-protection>
</app-flow> <protection>none</protection>
</incoming> <sequence-number-length>long-sn</sequence-number-length>
<outgoing> </service-protection>
<forwarding-sub-layer> <incoming>
<service-outgoing> <app-flow>
<index>0</index> <flow>app-1</flow>
<mpls-label-stack> </app-flow>
<entry> </incoming>
<id>0</id> <outgoing>
<label>100</label> <forwarding-sub-layer>
</entry> <service-outgoing>
</mpls-label-stack> <index>0</index>
<sub-layer>afl-1</sub-layer> <mpls-label-stack>
</service-outgoing> <entry>
</forwarding-sub-layer> <id>0</id>
</outgoing> <label>100</label>
</sub-layer> </entry>
<sub-layer> </mpls-label-stack>
<name>ssl-2</name> <sub-layer>afl-1</sub-layer>
<service-rank>10</service-rank> </service-outgoing>
<traffic-profile>2</traffic-profile> </forwarding-sub-layer>
<operation>initiation</operation> </outgoing>
<service-protection> </sub-layer>
<protection>none</protection> <sub-layer>
<sequence-number-length>long-sn</sequence-number-length> <name>ssl-2</name>
</service-protection> <service-rank>10</service-rank>
<incoming> <traffic-profile>2</traffic-profile>
<app-flow> <operation>initiation</operation>
<flow>app-2</flow> <service-protection>
</app-flow> <protection>none</protection>
</incoming> <sequence-number-length>long-sn</sequence-number-length>
<outgoing> </service-protection>
<forwarding-sub-layer> <incoming>
<service-outgoing> <app-flow>
<index>0</index> <flow>app-2</flow>
<mpls-label-stack> </app-flow>
<entry> </incoming>
<id>0</id> <outgoing>
<label>103</label> <forwarding-sub-layer>
</entry> <service-outgoing>
</mpls-label-stack> <index>0</index>
<sub-layer>afl-1</sub-layer> <mpls-label-stack>
</service-outgoing> <entry>
</forwarding-sub-layer> <id>0</id>
</outgoing> <label>103</label>
</sub-layer> </entry>
</service> </mpls-label-stack>
<forwarding> <sub-layer>afl-1</sub-layer>
<sub-layer> </service-outgoing>
<name>afl-1</name> </forwarding-sub-layer>
<traffic-profile>3</traffic-profile> </outgoing>
<operation>impose-and-forward</operation> </sub-layer>
<incoming> </service>
<service-sub-layer> <forwarding>
<sub-layer>ssl-1</sub-layer> <sub-layer>
<sub-layer>ssl-2</sub-layer> <name>afl-1</name>
</service-sub-layer> <traffic-profile>3</traffic-profile>
</incoming> <operation>impose-and-forward</operation>
<outgoing> <incoming>
<interface> <service-sub-layer>
<outgoing-interface>eth2</outgoing-interface> <sub-layer>ssl-1</sub-layer>
<mpls-label-stack> <sub-layer>ssl-2</sub-layer>
<entry> </service-sub-layer>
<id>0</id> </incoming>
<label>10000</label> <outgoing>
</entry> <interface>
</mpls-label-stack> <outgoing-interface>eth2</outgoing-interface>
</interface> <mpls-label-stack>
</outgoing> <entry>
</sub-layer> <id>0</id>
</forwarding> <label>10000</label>
</detnet> </entry>
</mpls-label-stack>
</interface>
</outgoing>
</sub-layer>
</forwarding>
</detnet>
Figure 6: Example B-1 DetNet XML configuration Figure 6: Example B-1 DetNet XML configuration
B.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.
skipping to change at page 61, line 22 skipping to change at page 62, line 18
{ {
"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-app": [
"app-1", "app-1",
"app-2" "app-2"
] ]
}, },
{ {
"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-service": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"name": "3", "name": "3",
"traffic-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-sublayer": [
"afl-1" "afl-1"
] ]
} }
], ],
"app-flows": { "app-flows": {
"app-flow": [ "app-flow": [
{ {
"name": "app-1", "name": "app-1",
"bidir-congruent": false, "bidir-congruent": false,
"outgoing-service": "ssl-1", "outgoing-service": "ssl-1",
"traffic-profile": "1", "traffic-profile": "1",
"ingress": { "ingress": {
"app-flow-status": "ietf-detnet:ready", "app-flow-status": "ietf-detnet:ready",
skipping to change at page 67, line 7 skipping to change at page 67, line 52
{ {
"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-service": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"name": "pf-2", "name": "pf-2",
"traffic-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-sublayer": [
"afl-1", "afl-1",
"afl-2" "afl-2"
] ]
}, },
{ {
"name": "pf-3", "name": "pf-3",
"traffic-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-sublayer": [
"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": { "service": {
skipping to change at page 75, line 4 skipping to change at page 75, line 49
} }
}, },
{ {
"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-18T18:59:00-05:00" "discontinuity-time": "2020-12-18T18:59:00-05:00"
} }
} }
] ]
} }
} }
Figure 10: Example C-1 DetNet JSON Relay Service Aggregation Figure 10: Example C-1 DetNet JSON Relay Service Aggregation
{ {
"ietf-detnet:detnet": { "ietf-detnet:detnet": {
"traffic-profile": [ "traffic-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-service": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"name": "pf-2", "name": "pf-2",
"traffic-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-sublayer": [
"afl-1", "afl-1",
"afl-2" "afl-2"
] ]
}, },
{ {
"name": "pf-3", "name": "pf-3",
"traffic-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-sublayer": [
"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": { "service": {
"sub-layer": [ "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": {
"protection": "elimination", "protection": "elimination",
"sequence-number-length": "long-sn" "sequence-number-length": "long-sn"
skipping to change at page 83, line 40 skipping to change at page 84, line 37
{ {
"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-service": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"name": "pf-2", "name": "pf-2",
"traffic-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-sublayer": [
"fsl-1", "fsl-1",
"fsl-2" "fsl-2"
] ]
}, },
{ {
"name": "pf-3", "name": "pf-3",
"traffic-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-sublayer": [
"afl-1", "afl-1",
"afl-2" "afl-2"
] ]
} }
], ],
"service": { "service": {
"sub-layer": [ "sub-layer": [
{ {
"name": "ssl-1", "name": "ssl-1",
"service-rank": 10, "service-rank": 10,
skipping to change at page 89, line 42 skipping to change at page 90, line 37
{ {
"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-service": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"name": "pf-2", "name": "pf-2",
"traffic-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
skipping to change at page 90, line 4 skipping to change at page 90, line 48
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"name": "pf-2", "name": "pf-2",
"traffic-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-sublayer": [
"fsl-1", "fsl-1",
"fsl-2" "fsl-2"
] ]
}, },
{ {
"name": "pf-3", "name": "pf-3",
"traffic-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-sublayer": [
"afl-1", "afl-1",
"afl-2" "afl-2"
] ]
} }
], ],
"service": { "service": {
"sub-layer": [ "sub-layer": [
{ {
"name": "ssl-1", "name": "ssl-1",
"service-rank": 10, "service-rank": 10,
skipping to change at page 96, line 6 skipping to change at page 96, line 50
{ {
"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-service": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"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-service": [
"asl-1" "asl-1"
] ]
}, },
{ {
"name": "pf-3", "name": "pf-3",
"traffic-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-sublayer": [
"fsl-1", "fsl-1",
"fsl-2" "fsl-2"
] ]
}, },
{ {
"name": "pf-4", "name": "pf-4",
"traffic-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-sublayer": [
"fsl-3", "fsl-3",
"fsl-4" "fsl-4"
] ]
} }
], ],
"service": { "service": {
"sub-layer": [ "sub-layer": [
{ {
"name": "ssl-1", "name": "ssl-1",
"service-rank": 10, "service-rank": 10,
skipping to change at page 102, line 46 skipping to change at page 103, line 43
{ {
"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-service": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"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-service": [
"asl-1" "asl-1"
] ]
}, },
{ {
"name": "pf-3", "name": "pf-3",
"traffic-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-sublayer": [
"fsl-3", "fsl-3",
"fsl-4" "fsl-4"
] ]
}, },
{ {
"name": "pf-4", "name": "pf-4",
"traffic-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-sublayer": [
"fsl-1", "fsl-1",
"fsl-2" "fsl-2"
] ]
} }
], ],
"service": { "service": {
"sub-layer": [ "sub-layer": [
{ {
"name": "ssl-1", "name": "ssl-1",
"service-rank": 10, "service-rank": 10,
skipping to change at page 110, line 6 skipping to change at page 110, line 50
{ {
"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-service": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"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-service": [
"asl-1" "asl-1"
] ]
}, },
{ {
"name": "pf-3", "name": "pf-3",
"traffic-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-sublayer": [
"fsl-1", "fsl-1",
"fsl-2", "fsl-2",
"fsl-3", "fsl-3",
"fsl-4" "fsl-4"
] ]
}, },
{ {
"name": "pf-4", "name": "pf-4",
"traffic-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-sublayer": [
"fsl-5", "fsl-5",
"fsl-6" "fsl-6"
] ]
} }
], ],
"service": { "service": {
"sub-layer": [ "sub-layer": [
{ {
"name": "ssl-1", "name": "ssl-1",
"service-rank": 10, "service-rank": 10,
skipping to change at page 118, line 18 skipping to change at page 119, line 18
{ {
"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-service": [
"ssl-1", "ssl-1",
"ssl-2" "ssl-2"
] ]
}, },
{ {
"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-service": [
"asl-1" "asl-1"
] ]
}, },
{ {
"name": "pf-3", "name": "pf-3",
"traffic-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-sublayer": [
"fsl-3", "fsl-3",
"fsl-4", "fsl-4",
"fsl-5", "fsl-5",
"fsl-6" "fsl-6"
] ]
}, },
{ {
"name": "pf-4", "name": "pf-4",
"traffic-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-sublayer": [
"fsl-1", "fsl-1",
"fsl-2" "fsl-2"
] ]
} }
], ],
"service": { "service": {
"sub-layer": [ "sub-layer": [
{ {
"name": "ssl-1", "name": "ssl-1",
"service-rank": 10, "service-rank": 10,
skipping to change at page 126, line 27 skipping to change at page 127, line 27
{ {
"ietf-detnet:detnet": { "ietf-detnet:detnet": {
"traffic-profile": [ "traffic-profile": [
{ {
"name": "pf-1", "name": "pf-1",
"traffic-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-sublayer": [
"fsl-1", "fsl-1",
"fsl-2" "fsl-2"
] ]
}, },
{ {
"name": "pf-2", "name": "pf-2",
"traffic-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-sublayer": [
"afl-1" "afl-1"
] ]
} }
], ],
"forwarding": { "forwarding": {
"sub-layer": [ "sub-layer": [
{ {
"name": "fsl-1", "name": "fsl-1",
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"operation": "pop-impose-and-forward", "operation": "pop-impose-and-forward",
skipping to change at page 130, line 7 skipping to change at page 131, line 7
{ {
"ietf-detnet:detnet": { "ietf-detnet:detnet": {
"traffic-profile": [ "traffic-profile": [
{ {
"name": "pf-1", "name": "pf-1",
"traffic-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-sublayer": [
"fsl-1", "fsl-1",
"fsl-2" "fsl-2"
] ]
}, },
{ {
"name": "pf-2", "name": "pf-2",
"traffic-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-sublayer": [
"afl-1" "afl-1"
] ]
} }
], ],
"forwarding": { "forwarding": {
"sub-layer": [ "sub-layer": [
{ {
"name": "fsl-1", "name": "fsl-1",
"traffic-profile": "pf-1", "traffic-profile": "pf-1",
"operation": "swap-and-forward", "operation": "swap-and-forward",
 End of changes. 72 change blocks. 
706 lines changed or deleted 745 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/