idnits 2.17.00 (12 Aug 2021) /tmp/idnits53709/draft-ietf-detnet-yang-06.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 22 instances of too long lines in the document, the longest one being 16 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 248 has weird spacing: '...er-port inet:...' == Line 249 has weird spacing: '...er-port inet:...' == Line 256 has weird spacing: '...er-port inet:...' == Line 257 has weird spacing: '...er-port inet:...' == Line 337 has weird spacing: '...er-port inet:...' == (44 more instances...) -- The document date (June 11, 2020) is 708 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Unused Reference: 'I-D.finn-detnet-bounded-latency' is defined on line 3391, but no explicit reference was found in the text == Unused Reference: 'I-D.ietf-detnet-ip' is defined on line 3401, but no explicit reference was found in the text == Unused Reference: 'I-D.ietf-detnet-mpls' is defined on line 3406, but no explicit reference was found in the text == Unused Reference: 'I-D.ietf-detnet-topology-yang' is defined on line 3411, but no explicit reference was found in the text == Unused Reference: 'I-D.geng-detnet-info-distribution' is defined on line 3436, but no explicit reference was found in the text == Unused Reference: 'I-D.ietf-detnet-use-cases' is defined on line 3442, but no explicit reference was found in the text == Unused Reference: 'I-D.ietf-teas-yang-te' is defined on line 3447, but no explicit reference was found in the text == Unused Reference: 'I-D.ietf-teas-yang-te-topo' is defined on line 3453, but no explicit reference was found in the text == Unused Reference: 'I-D.thubert-tsvwg-detnet-transport' is defined on line 3459, but no explicit reference was found in the text == Unused Reference: 'I-D.varga-detnet-service-model' is defined on line 3464, but no explicit reference was found in the text == Unused Reference: 'IEEE802.1CB' is defined on line 3469, but no explicit reference was found in the text == Unused Reference: 'IEEE802.1Q-2014' is defined on line 3475, but no explicit reference was found in the text == Unused Reference: 'IEEE802.1Qbu' is defined on line 3480, but no explicit reference was found in the text == Unused Reference: 'IEEE802.1Qbv' is defined on line 3485, but no explicit reference was found in the text == Unused Reference: 'IEEE802.1Qcc' is defined on line 3490, but no explicit reference was found in the text == Unused Reference: 'IEEE802.1Qch' is defined on line 3496, but no explicit reference was found in the text == Unused Reference: 'IEEE802.1Qci' is defined on line 3502, but no explicit reference was found in the text == Unused Reference: 'RFC3209' is defined on line 3508, but no explicit reference was found in the text == Unused Reference: 'RFC4875' is defined on line 3513, but no explicit reference was found in the text == Unused Reference: 'RFC8342' is defined on line 3520, but no explicit reference was found in the text ** Downref: Normative reference to an Informational draft: draft-finn-detnet-bounded-latency (ref. 'I-D.finn-detnet-bounded-latency') == Outdated reference: draft-ietf-detnet-flow-information-model has been published as RFC 9016 ** Downref: Normative reference to an Informational draft: draft-ietf-detnet-flow-information-model (ref. 'I-D.ietf-detnet-flow-information-model') == Outdated reference: draft-ietf-detnet-ip has been published as RFC 8939 == Outdated reference: draft-ietf-detnet-mpls has been published as RFC 8964 == Outdated reference: draft-ietf-detnet-use-cases has been published as RFC 8578 == Outdated reference: A later version (-29) exists of draft-ietf-teas-yang-te-23 == Outdated reference: draft-ietf-teas-yang-te-topo has been published as RFC 8795 Summary: 3 errors (**), 0 flaws (~~), 33 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group X. Geng 3 Internet-Draft M. Chen 4 Intended status: Standards Track Huawei Technologies 5 Expires: December 13, 2020 Y. Ryoo 6 ETRI 7 Z. Li 8 China Mobile 9 R. Rahman 10 Cisco Systems 11 D. Fedyk 12 LabN Consulting, L.L.C. 13 June 11, 2020 15 Deterministic Networking (DetNet) Configuration YANG Model 16 draft-ietf-detnet-yang-06 18 Abstract 20 This document contains the specification for Deterministic Networking 21 flow configuration YANG Model. The model allows for provisioning of 22 end-to-end DetNet service along the path without dependency on any 23 signaling protocol. 25 The YANG module defined in this document conforms to the Network 26 Management Datastore Architecture (NMDA). 28 Requirements Language 30 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 31 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 32 document are to be interpreted as described in RFC 2119 [RFC2119]. 34 Status of This Memo 36 This Internet-Draft is submitted in full conformance with the 37 provisions of BCP 78 and BCP 79. 39 Internet-Drafts are working documents of the Internet Engineering 40 Task Force (IETF). Note that other groups may also distribute 41 working documents as Internet-Drafts. The list of current Internet- 42 Drafts is at https://datatracker.ietf.org/drafts/current/. 44 Internet-Drafts are draft documents valid for a maximum of six months 45 and may be updated, replaced, or obsoleted by other documents at any 46 time. It is inappropriate to use Internet-Drafts as reference 47 material or to cite them other than as "work in progress." 48 This Internet-Draft will expire on December 13, 2020. 50 Copyright Notice 52 Copyright (c) 2020 IETF Trust and the persons identified as the 53 document authors. All rights reserved. 55 This document is subject to BCP 78 and the IETF Trust's Legal 56 Provisions Relating to IETF Documents 57 (https://trustee.ietf.org/license-info) in effect on the date of 58 publication of this document. Please review these documents 59 carefully, as they describe your rights and restrictions with respect 60 to this document. Code Components extracted from this document must 61 include Simplified BSD License text as described in Section 4.e of 62 the Trust Legal Provisions and are provided without warranty as 63 described in the Simplified BSD License. 65 Table of Contents 67 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 68 2. Terminologies . . . . . . . . . . . . . . . . . . . . . . . . 3 69 3. DetNet Configuration Module . . . . . . . . . . . . . . . . . 3 70 3.1. DetNet Appliction Flow Configuration Attributes . . . . . 3 71 3.2. DetNet Service Sub-layer Configuration Attributes . . . . 3 72 3.3. DetNet Forwarding Sub-layer Configuration Attributes . . 4 73 4. DetNet YANG Structure Considerations . . . . . . . . . . . . 4 74 5. DetNet Configuration YANG Structures . . . . . . . . . . . . 5 75 6. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 16 76 7. An alternative DetNet YANG model . . . . . . . . . . . . . . 34 77 7.1. Conventions . . . . . . . . . . . . . . . . . . . . . . . 35 78 7.1.1. Aggregation . . . . . . . . . . . . . . . . . . . . . 35 79 7.2. Alternative DetNet Configuration YANG . . . . . . . . . . 36 80 7.3. Alternative DetNet Configuration YANG Model . . . . . . . 50 81 7.4. Test Configuration . . . . . . . . . . . . . . . . . . . 67 82 7.4.1. DetNet Test Configuration YANG Model . . . . . . . . 67 83 7.4.2. DetNet Test Configuration YANG Model . . . . . . . . 69 84 8. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 70 85 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 71 86 10. Security Considerations . . . . . . . . . . . . . . . . . . . 71 87 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 71 88 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 71 89 12.1. Normative References . . . . . . . . . . . . . . . . . . 71 90 12.2. Informative References . . . . . . . . . . . . . . . . . 72 91 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 74 93 1. Introduction 95 DetNet (Deterministic Networking) provides a capability to carry 96 specified unicast or multicast data flows for real-time applications 97 with extremely low packet loss rates and assured maximum end-to-end 98 delivery latency. A description of the general background and 99 concepts of DetNet can be found in [RFC8655]. 101 This document defines a YANG model for DetNet based on YANG data 102 types and modeling language defined in [RFC6991] and [RFC7950]. 103 DetNet service, which is designed for describing the characteristics 104 of services being provided for application flows over a network, and 105 DetNet configuration, which is designed for DetNet flow path 106 establishment, flow status reporting, and DetNet functions 107 configuration in order to achieve end-to-end bounded latency and zero 108 congestion loss, are both included in this document. 110 2. Terminologies 112 This documents uses the terminologies defined in [RFC8655]. 114 3. DetNet Configuration Module 116 DetNet configuration module includes DetNet App-flow configuration, 117 DetNet Service Sub-layer configuration, and DetNet Forwarding Sub- 118 layer configuration. The corresponding attributes used in different 119 sub-layers are defined in Section 3.1, 3.2, 3.3 respectively. 121 3.1. DetNet Appliction Flow Configuration Attributes 123 DetNet application flow is responsible for mapping between 124 application flows and DetNet flows at the edge node(egress/ingress 125 node). Where the application flows can be either layer 2 or layer 3 126 flows. To map a flow at the User Network Interface (UNI), the 127 corresponding attributes are defined in 128 [I-D.ietf-detnet-flow-information-model]. 130 3.2. DetNet Service Sub-layer Configuration Attributes 132 DetNet service functions, e.g., DetNet tunnel initialization/ 133 termination and service protection, are provided in DetNet service 134 sub-layer. To support these functions, the following service 135 attributes need to be configured: 137 o DetNet flow identification 139 o Service function indication, indicates which service function will 140 be invoked at a DetNet edge, relay node or end station. (DetNet 141 tunnel initialization or termination are default functions in 142 DetNet service layer, so there is no need for explicit 143 indication). The corresponding arguments for service functions 144 also needs to be defined. 146 3.3. DetNet Forwarding Sub-layer Configuration Attributes 148 As defined in [RFC8655], DetNet forwarding sub-layer optionally 149 provides congestion protection for DetNet flows over paths provided 150 by the underlying network. Explicit route is another mechanism that 151 is used by DetNet to avoid temporary interruptions caused by the 152 convergence of routing or bridging protocols, and it is also 153 implemented at the DetNet forwarding sub-layer. 155 To support congestion protection and explicit route, the following 156 transport layer related attributes are necessary: 158 o Traffic Specification, refers to Section 7.2 of 159 [I-D.ietf-detnet-flow-information-model]. It may used for 160 resource reservation, flow shaping, filtering and policing. 162 o Explicit path, existing explicit route mechanisms can be reused. 163 For example, if Segment Routing (SR) tunnel is used as the 164 transport tunnel, the configuration is mainly at the ingress node 165 of the transport layer; if the static MPLS tunnel is used as the 166 transport tunnel, the configurations need to be at every transit 167 node along the path; for pure IP based transport tunnel, it's 168 similar to the static MPLS case. 170 4. DetNet YANG Structure Considerations 172 The picture shows that the general structure of the DetNet YANG 173 Model: 175 +-----------+ 176 |ietf-detnet| 177 +-----+-----+ 178 | 179 +-------------+---------------+ 180 | | | 181 +-----+-----+ +-----+-----+ +-------+------+ 182 | App Flows | |service s-l| |forwarding s-l| 183 +-----------+ +-----------+ +--------------+ 185 There are three instances in DetNet YANG Model: App-flow instance, 186 service sub-layer instance and forwarding sub-layer instance, 187 respectively corresponding to four parts of DetNet functions defined 188 in section 3. In each instance, there are four elements: name, in- 189 segments, out-segments and operations, which means: 191 o Name: indicates the key value of the instance identification. 193 o In-segments: indicates the key value of identification, e.g., 194 Layer 2 App flow identification, Layer 3 App flow identification 195 and DetNet flow identification. 197 o Out-segments: indicates the information of DetNet processing(e.g., 198 DetNet forwarding, DetNet header Encapsulation) and the mapping 199 relationship to the lower sub-layer/sub-network. 201 o Operations: indicates DetNet functions, e.g., DetNet forwarding 202 functions, DetNet Service functions, DetNet Resource Reservation. 204 These elements are different when the technologies used for the 205 specific instance is different. So this structure is abstract, which 206 allows for different technology specifics as defined in different 207 data plane drafts. 209 5. DetNet Configuration YANG Structures 211 module: ietf-detnet-config-modify 212 +--rw app-flows 213 | +--rw app-flow* [name] 214 | +--rw name string 215 | +--ro app-id? uint16 216 | +--rw app-flow-bidir-congruent? boolean 217 | +--rw traffic-requirements 218 | | +--rw min-bandwidth? uint64 219 | | +--rw max-latency? uint32 220 | | +--rw max-latency-variation? uint32 221 | | +--rw max-loss? uint8 222 | | +--rw max-consecutive-loss-tolerance? uint32 223 | | +--rw max-misordering? uint32 224 | +--rw traffic-specification 225 | | +--rw interval? uint32 226 | | +--rw max-packets-per-interval? uint32 227 | | +--rw max-payload-size? uint32 228 | | +--rw average-packets-per-interval? uint32 229 | | +--rw average-payload-size? uint32 230 | +--rw in-segment 231 | | +--rw interface? if:interface-ref 232 | | +--rw (data-flow-type)? 233 | | +--:(tsn-app-flow) 234 | | | +--rw source-mac-address? yang:mac-address 235 | | | +--rw destination-mac-address? yang:mac-address 236 | | | +--rw ethertype? eth:ethertype 237 | | | +--rw vlan-id? uint16 238 | | | +--rw pcp? uint8 239 | | +--:(ip-app-flow) 240 | | | +--rw src-ip-prefix? inet:ip-prefix 241 | | | +--rw dest-ip-prefix? inet:ip-prefix 242 | | | +--rw next-header? uint8 243 | | | +--rw traffic-class? uint8 244 | | | +--rw flow-label? inet:ipv6-flow-label 245 | | | +--rw source-port 246 | | | | +--rw (port-range-or-operator)? 247 | | | | +--:(range) 248 | | | | | +--rw lower-port inet:port-number 249 | | | | | +--rw upper-port inet:port-number 250 | | | | +--:(operator) 251 | | | | +--rw operator? operator 252 | | | | +--rw port inet:port-number 253 | | | +--rw destination-port 254 | | | | +--rw (port-range-or-operator)? 255 | | | | +--:(range) 256 | | | | | +--rw lower-port inet:port-number 257 | | | | | +--rw upper-port inet:port-number 258 | | | | +--:(operator) 259 | | | | +--rw operator? operator 260 | | | | +--rw port inet:port-number 261 | | | +--rw ipsec-spi? ipsec-spi 262 | | +--:(mpls-app-flow) 263 | | +--rw (label-space)? 264 | | +--:(context-label-space) 265 | | | +--rw mpls-label-stack 266 | | | +--rw entry* [id] 267 | | | +--rw id uint8 268 | | | +--rw label? rt-types:mpls-label 269 | | | +--rw ttl? uint8 270 | | | +--rw traffic-class? uint8 271 | | +--:(platform-label-space) 272 | | +--rw label? rt-types:mpls-label 273 | +--rw out-segment 274 | +--rw (outgoing-options) 275 | +--:(ingress-proxy) 276 | | +--rw service-sub-layer? service-sub-layer-ref 277 | +--:(egress) 278 | +--rw (next-hop-options) 279 | +--:(simple-next-hop) 280 | | +--rw mpls-header 281 | | | +--rw mpls-label-stack 282 | | | +--rw entry* [id] 283 | | | +--rw id uint8 284 | | | +--rw label? rt-types:mpls-label 285 | | | +--rw ttl? uint8 286 | | | +--rw traffic-class? uint8 287 | | +--rw outgoing-interface? if:interface-ref 288 | +--:(next-hop-list) 289 | +--rw next-hop-list 290 | +--rw next-hop* [hop-index] 291 | +--rw hop-index uint8 292 | +--rw mpls-header 293 | | +--rw mpls-label-stack 294 | | +--rw entry* [id] 295 | | +--rw id uint8 296 | | +--rw label? rt-types:mpls-label 297 | | +--rw ttl? uint8 298 | | +--rw traffic-class? uint8 299 | +--rw outgoing-interface? if:interface-ref 300 +--rw service-sub-layer 301 | +--rw service-sub-layer-list* [name] 302 | +--rw name string 303 | +--ro service-id? uint16 304 | +--rw service-rank? uint8 305 | +--rw traffic-requirements 306 | | +--rw min-bandwidth? uint64 307 | | +--rw max-latency? uint32 308 | | +--rw max-latency-variation? uint32 309 | | +--rw max-loss? uint8 310 | | +--rw max-consecutive-loss-tolerance? uint32 311 | | +--rw max-misordering? uint32 312 | +--rw traffic-specification 313 | | +--rw interval? uint32 314 | | +--rw max-packets-per-interval? uint32 315 | | +--rw max-payload-size? uint32 316 | | +--rw average-packets-per-interval? uint32 317 | | +--rw average-payload-size? uint32 318 | +--rw service-protection 319 | | +--rw service-protection-type? service-protection-type 320 | | +--rw sequence-number-length? sequence-number-field 321 | +--rw service-operation-type? service-operation-type 322 | +--rw in-segment 323 | | +--rw (incoming-options) 324 | | +--:(ingress-proxy) 325 | | | +--rw app-flow* app-flow-ref 326 | | +--:(detnet-service-identification) 327 | | +--rw (detnet-flow-type)? 328 | | +--:(ip-detnet-flow) 329 | | | +--rw src-ip-prefix? inet:ip-prefix 330 | | | +--rw dest-ip-prefix? inet:ip-prefix 331 | | | +--rw next-header? uint8 332 | | | +--rw traffic-class? uint8 333 | | | +--rw flow-label? inet:ipv6-flow-label 334 | | | +--rw source-port 335 | | | | +--rw (port-range-or-operator)? 336 | | | | +--:(range) 337 | | | | | +--rw lower-port inet:port-number 338 | | | | | +--rw upper-port inet:port-number 339 | | | | +--:(operator) 340 | | | | +--rw operator? operator 341 | | | | +--rw port inet:port-number 342 | | | +--rw destination-port 343 | | | | +--rw (port-range-or-operator)? 344 | | | | +--:(range) 345 | | | | | +--rw lower-port inet:port-number 346 | | | | | +--rw upper-port inet:port-number 347 | | | | +--:(operator) 348 | | | | +--rw operator? operator 349 | | | | +--rw port inet:port-number 350 | | | +--rw ipsec-spi? ipsec-spi 351 | | +--:(mpls-detnet-flow) 352 | | +--rw (label-space)? 353 | | +--:(context-label-space) 354 | | | +--rw mpls-label-stack 355 | | | +--rw entry* [id] 356 | | | +--rw id uint8 357 | | | +--rw label? rt-types:mpls-label 358 | | | +--rw ttl? uint8 359 | | | +--rw traffic-class? uint8 360 | | +--:(platform-label-space) 361 | | +--rw label? rt-types:mpls-label 362 | +--rw out-segment 363 | +--rw (outgoing-options) 364 | +--:(egress-proxy) 365 | | +--rw app-flow* app-flow-ref 366 | +--:(detnet-service-output) 367 | +--rw service-output-list* [service-output-index] 368 | +--rw service-output-index uint8 369 | +--rw (header-type)? 370 | | +--:(detnet-mpls-header) 371 | | | +--rw mpls-label-stack 372 | | | +--rw entry* [id] 373 | | | +--rw id uint8 374 | | | +--rw label? rt-types:mpls-label 375 | | | +--rw ttl? uint8 376 | | | +--rw traffic-class? uint8 377 | | +--:(detnet-ip-header) 378 | | +--rw src-ip-address? inet:ip-address 379 | | +--rw dest-ip-address? inet:ip-address 380 | | +--rw next-header? uint8 381 | | +--rw traffic-class? uint8 382 | | +--rw flow-label? inet:ipv6-flow-label 383 | | +--rw source-port? inet:port-number 384 | | +--rw destination-port? inet:port-number 385 | +--rw next-layer* [index] 386 | +--rw index uint8 387 | +--rw forwarding-sub-layer? forwarding-sub-layer-ref 388 +--rw forwarding-sub-layer 389 | +--rw forwarding-sub-layer-list* [name] 390 | +--rw name string 391 | +--ro forwarding-id? uint16 392 | +--rw traffic-requirements 393 | | +--rw min-bandwidth? uint64 394 | | +--rw max-latency? uint32 395 | | +--rw max-latency-variation? uint32 396 | | +--rw max-loss? uint8 397 | | +--rw max-consecutive-loss-tolerance? uint32 398 | | +--rw max-misordering? uint32 399 | +--rw traffic-specification 400 | | +--rw interval? uint32 401 | | +--rw max-packets-per-interval? uint32 402 | | +--rw max-payload-size? uint32 403 | | +--rw average-packets-per-interval? uint32 404 | | +--rw average-payload-size? uint32 405 | +--rw forwarding-operation-type? forwarding-operations-type 406 | +--rw in-segment 407 | | +--rw (incoming-options) 408 | | +--:(detnet-service-forwarding) 409 | | | +--rw service-sub-layer* service-sub-layer-ref 410 | | +--:(detnet-forwarding-identification) 411 | | +--rw interface? if:interface-ref 412 | | +--rw (detnet-flow-type)? 413 | | +--:(ip-detnet-flow) 414 | | | +--rw src-ip-prefix? inet:ip-prefix 415 | | | +--rw dest-ip-prefix? inet:ip-prefix 416 | | | +--rw next-header? uint8 417 | | | +--rw traffic-class? uint8 418 | | | +--rw flow-label? inet:ipv6-flow-label 419 | | | +--rw source-port 420 | | | | +--rw (port-range-or-operator)? 421 | | | | +--:(range) 422 | | | | | +--rw lower-port inet:port-number 423 | | | | | +--rw upper-port inet:port-number 424 | | | | +--:(operator) 425 | | | | +--rw operator? operator 426 | | | | +--rw port inet:port-number 427 | | | +--rw destination-port 428 | | | | +--rw (port-range-or-operator)? 429 | | | | +--:(range) 430 | | | | | +--rw lower-port inet:port-number 431 | | | | | +--rw upper-port inet:port-number 432 | | | | +--:(operator) 433 | | | | +--rw operator? operator 434 | | | | +--rw port inet:port-number 435 | | | +--rw ipsec-spi? ipsec-spi 436 | | +--:(mpls-detnet-flow) 437 | | +--rw (label-space)? 438 | | +--:(context-label-space) 439 | | | +--rw mpls-label-stack 440 | | | +--rw entry* [id] 441 | | | +--rw id uint8 442 | | | +--rw label? rt-types:mpls-label 443 | | | +--rw ttl? uint8 444 | | | +--rw traffic-class? uint8 445 | | +--:(platform-label-space) 446 | | +--rw label? rt-types:mpls-label 447 | +--rw out-segment 448 | +--rw (outgoing-options) 449 | +--:(service-operation) 450 | | +--rw service-sub-layer* service-sub-layer-ref 451 | +--:(detnet-forwarding-output) 452 | +--rw (next-hop-options) 453 | +--:(simple-next-hop) 454 | | +--rw (header-type)? 455 | | | +--:(detnet-mpls-header) 456 | | | | +--rw mpls-label-stack 457 | | | | +--rw entry* [id] 458 | | | | +--rw id uint8 459 | | | | +--rw label? rt-types:mpls-label 460 | | | | +--rw ttl? uint8 461 | | | | +--rw traffic-class? uint8 462 | | | +--:(detnet-ip-header) 463 | | | +--rw src-ip-address? inet:ip-address 464 | | | +--rw dest-ip-address? inet:ip-address 465 | | | +--rw next-header? uint8 466 | | | +--rw traffic-class? uint8 467 | | | +--rw flow-label? inet:ipv6-flow-label 468 | | | +--rw source-port? inet:port-number 469 | | | +--rw destination-port? inet:port-number 470 | | +--rw outgoing-interface? if:interface-ref 471 | +--:(next-hop-list) 472 | +--rw next-hop-list 473 | +--rw next-hop* [hop-index] 474 | +--rw hop-index uint8 475 | +--rw (header-type)? 476 | | +--:(detnet-mpls-header) 477 | | | +--rw mpls-label-stack 478 | | | +--rw entry* [id] 479 | | | +--rw id uint8 480 | | | +--rw label? rt-types:mpls-label 481 | | | +--rw ttl? uint8 482 | | | +--rw traffic-class? uint8 483 | | +--:(detnet-ip-header) 484 | | +--rw src-ip-address? inet:ip-address 485 | | +--rw dest-ip-address? inet:ip-address 486 | | +--rw next-header? uint8 487 | | +--rw traffic-class? uint8 488 | | +--rw flow-label? inet:ipv6-flow-label 489 | | +--rw source-port? inet:port-number 490 | | +--rw destination-port? inet:port-number 491 | +--rw outgoing-interface? if:interface-ref 492 +--rw sub-network 493 +--rw sub-network-list* [name] 494 +--rw name string 496 grouping ip-header: 497 +--rw src-ip-address? inet:ip-address 498 +--rw dest-ip-address? inet:ip-address 499 +--rw next-header? uint8 500 +--rw traffic-class? uint8 501 +--rw flow-label? inet:ipv6-flow-label 502 +--rw source-port? inet:port-number 503 +--rw destination-port? inet:port-number 504 grouping l2-header: 505 +--rw source-mac-address? yang:mac-address 506 +--rw destination-mac-address? yang:mac-address 507 +--rw ethertype? eth:ethertype 508 +--rw vlan-id? uint16 509 +--rw pcp? uint8 510 grouping destination-ip-port-identification: 511 +--rw destination-port 512 +--rw (port-range-or-operator)? 513 +--:(range) 514 | +--rw lower-port inet:port-number 515 | +--rw upper-port inet:port-number 516 +--:(operator) 517 +--rw operator? operator 518 +--rw port inet:port-number 519 grouping source-ip-port-identification: 520 +--rw source-port 521 +--rw (port-range-or-operator)? 522 +--:(range) 523 | +--rw lower-port inet:port-number 524 | +--rw upper-port inet:port-number 525 +--:(operator) 526 +--rw operator? operator 527 +--rw port inet:port-number 528 grouping ip-flow-identification: 529 +--rw src-ip-prefix? inet:ip-prefix 530 +--rw dest-ip-prefix? inet:ip-prefix 531 +--rw next-header? uint8 532 +--rw traffic-class? uint8 533 +--rw flow-label? inet:ipv6-flow-label 534 +--rw source-port 535 | +--rw (port-range-or-operator)? 536 | +--:(range) 537 | | +--rw lower-port inet:port-number 538 | | +--rw upper-port inet:port-number 539 | +--:(operator) 540 | +--rw operator? operator 541 | +--rw port inet:port-number 542 +--rw destination-port 543 | +--rw (port-range-or-operator)? 544 | +--:(range) 545 | | +--rw lower-port inet:port-number 546 | | +--rw upper-port inet:port-number 547 | +--:(operator) 548 | +--rw operator? operator 549 | +--rw port inet:port-number 550 +--rw ipsec-spi? ipsec-spi 551 grouping mpls-flow-identification: 552 +--rw (label-space)? 553 +--:(context-label-space) 554 | +--rw mpls-label-stack 555 | +--rw entry* [id] 556 | +--rw id uint8 557 | +--rw label? rt-types:mpls-label 558 | +--rw ttl? uint8 559 | +--rw traffic-class? uint8 560 +--:(platform-label-space) 561 +--rw label? rt-types:mpls-label 562 grouping traffic-specification: 563 +--rw traffic-specification 564 +--rw interval? uint32 565 +--rw max-packets-per-interval? uint32 566 +--rw max-payload-size? uint32 567 +--rw average-packets-per-interval? uint32 568 +--rw average-payload-size? uint32 569 grouping traffic-requirements: 570 +--rw traffic-requirements 571 +--rw min-bandwidth? uint64 572 +--rw max-latency? uint32 573 +--rw max-latency-variation? uint32 574 +--rw max-loss? uint8 575 +--rw max-consecutive-loss-tolerance? uint32 576 +--rw max-misordering? uint32 577 grouping data-flow-spec: 578 +--rw (data-flow-type)? 579 +--:(tsn-app-flow) 580 | +--rw source-mac-address? yang:mac-address 581 | +--rw destination-mac-address? yang:mac-address 582 | +--rw ethertype? eth:ethertype 583 | +--rw vlan-id? uint16 584 | +--rw pcp? uint8 585 +--:(ip-app-flow) 586 | +--rw src-ip-prefix? inet:ip-prefix 587 | +--rw dest-ip-prefix? inet:ip-prefix 588 | +--rw next-header? uint8 589 | +--rw traffic-class? uint8 590 | +--rw flow-label? inet:ipv6-flow-label 591 | +--rw source-port 592 | | +--rw (port-range-or-operator)? 593 | | +--:(range) 594 | | | +--rw lower-port inet:port-number 595 | | | +--rw upper-port inet:port-number 596 | | +--:(operator) 597 | | +--rw operator? operator 598 | | +--rw port inet:port-number 599 | +--rw destination-port 600 | | +--rw (port-range-or-operator)? 601 | | +--:(range) 602 | | | +--rw lower-port inet:port-number 603 | | | +--rw upper-port inet:port-number 604 | | +--:(operator) 605 | | +--rw operator? operator 606 | | +--rw port inet:port-number 607 | +--rw ipsec-spi? ipsec-spi 608 +--:(mpls-app-flow) 609 +--rw (label-space)? 610 +--:(context-label-space) 611 | +--rw mpls-label-stack 612 | +--rw entry* [id] 613 | +--rw id uint8 614 | +--rw label? rt-types:mpls-label 615 | +--rw ttl? uint8 616 | +--rw traffic-class? uint8 617 +--:(platform-label-space) 618 +--rw label? rt-types:mpls-label 619 grouping detnet-flow-spec: 621 +--rw (detnet-flow-type)? 622 +--:(ip-detnet-flow) 623 | +--rw src-ip-prefix? inet:ip-prefix 624 | +--rw dest-ip-prefix? inet:ip-prefix 625 | +--rw next-header? uint8 626 | +--rw traffic-class? uint8 627 | +--rw flow-label? inet:ipv6-flow-label 628 | +--rw source-port 629 | | +--rw (port-range-or-operator)? 630 | | +--:(range) 631 | | | +--rw lower-port inet:port-number 632 | | | +--rw upper-port inet:port-number 633 | | +--:(operator) 634 | | +--rw operator? operator 635 | | +--rw port inet:port-number 636 | +--rw destination-port 637 | | +--rw (port-range-or-operator)? 638 | | +--:(range) 639 | | | +--rw lower-port inet:port-number 640 | | | +--rw upper-port inet:port-number 641 | | +--:(operator) 642 | | +--rw operator? operator 643 | | +--rw port inet:port-number 644 | +--rw ipsec-spi? ipsec-spi 645 +--:(mpls-detnet-flow) 646 +--rw (label-space)? 647 +--:(context-label-space) 648 | +--rw mpls-label-stack 649 | +--rw entry* [id] 650 | +--rw id uint8 651 | +--rw label? rt-types:mpls-label 652 | +--rw ttl? uint8 653 | +--rw traffic-class? uint8 654 +--:(platform-label-space) 655 +--rw label? rt-types:mpls-label 656 grouping app-flows-ref: 657 +--rw app-flow* app-flow-ref 658 grouping service-sub-layer-ref: 659 +--rw service-sub-layer* service-sub-layer-ref 660 grouping forwarding-sub-layer-ref: 661 +--rw forwarding-sub-layer* forwarding-sub-layer-ref 662 grouping detnet-header: 663 +--rw (header-type)? 664 +--:(detnet-mpls-header) 665 | +--rw mpls-label-stack 666 | +--rw entry* [id] 667 | +--rw id uint8 668 | +--rw label? rt-types:mpls-label 669 | +--rw ttl? uint8 670 | +--rw traffic-class? uint8 671 +--:(detnet-ip-header) 672 +--rw src-ip-address? inet:ip-address 673 +--rw dest-ip-address? inet:ip-address 674 +--rw next-header? uint8 675 +--rw traffic-class? uint8 676 +--rw flow-label? inet:ipv6-flow-label 677 +--rw source-port? inet:port-number 678 +--rw destination-port? inet:port-number 679 grouping detnet-app-next-hop-content: 680 +--rw (next-hop-options) 681 +--:(simple-next-hop) 682 | +--rw mpls-header 683 | | +--rw mpls-label-stack 684 | | +--rw entry* [id] 685 | | +--rw id uint8 686 | | +--rw label? rt-types:mpls-label 687 | | +--rw ttl? uint8 688 | | +--rw traffic-class? uint8 689 | +--rw outgoing-interface? if:interface-ref 690 +--:(next-hop-list) 691 +--rw next-hop-list 692 +--rw next-hop* [hop-index] 693 +--rw hop-index uint8 694 +--rw mpls-header 695 | +--rw mpls-label-stack 696 | +--rw entry* [id] 697 | +--rw id uint8 698 | +--rw label? rt-types:mpls-label 699 | +--rw ttl? uint8 700 | +--rw traffic-class? uint8 701 +--rw outgoing-interface? if:interface-ref 702 grouping detnet-forwarding-next-hop-content: 703 +--rw (next-hop-options) 704 +--:(simple-next-hop) 705 | +--rw (header-type)? 706 | | +--:(detnet-mpls-header) 707 | | | +--rw mpls-label-stack 708 | | | +--rw entry* [id] 709 | | | +--rw id uint8 710 | | | +--rw label? rt-types:mpls-label 711 | | | +--rw ttl? uint8 712 | | | +--rw traffic-class? uint8 713 | | +--:(detnet-ip-header) 714 | | +--rw src-ip-address? inet:ip-address 715 | | +--rw dest-ip-address? inet:ip-address 716 | | +--rw next-header? uint8 717 | | +--rw traffic-class? uint8 718 | | +--rw flow-label? inet:ipv6-flow-label 719 | | +--rw source-port? inet:port-number 720 | | +--rw destination-port? inet:port-number 721 | +--rw outgoing-interface? if:interface-ref 722 +--:(next-hop-list) 723 +--rw next-hop-list 724 +--rw next-hop* [hop-index] 725 +--rw hop-index uint8 726 +--rw (header-type)? 727 | +--:(detnet-mpls-header) 728 | | +--rw mpls-label-stack 729 | | +--rw entry* [id] 730 | | +--rw id uint8 731 | | +--rw label? rt-types:mpls-label 732 | | +--rw ttl? uint8 733 | | +--rw traffic-class? uint8 734 | +--:(detnet-ip-header) 735 | +--rw src-ip-address? inet:ip-address 736 | +--rw dest-ip-address? inet:ip-address 737 | +--rw next-header? uint8 738 | +--rw traffic-class? uint8 739 | +--rw flow-label? inet:ipv6-flow-label 740 | +--rw source-port? inet:port-number 741 | +--rw destination-port? inet:port-number 742 +--rw outgoing-interface? if:interface-ref 744 6. DetNet Configuration YANG Model 746 747 module ietf-detnet-config-modify { 748 namespace "urn:ietf:params:xml:ns:yang:ietf-detnet-config"; 749 prefix "ietf-detnet"; 751 import ietf-yang-types { 752 prefix "yang"; 753 } 755 import ietf-inet-types{ 756 prefix "inet"; 757 } 759 import ietf-ethertypes { 760 prefix "eth"; 761 } 763 import ietf-routing-types { 764 prefix "rt-types"; 766 } 768 import ietf-routing { 769 prefix "rt"; 770 } 772 import ietf-packet-fields { 773 prefix "packet-fields"; 774 } 775 import ietf-interfaces { 776 prefix "if"; 777 } 779 organization "IETF DetNet Working Group"; 781 contact 782 "WG Web: 783 WG List: 784 WG Chair: Lou Berger 785 787 Janos Farkas 788 790 Editor: Xuesong Geng 791 793 Editor: Mach Chen 794 796 Editor: Zhenqiang Li 797 799 Editor: Reshad Rahman 800 802 Editor: Yeoncheol Ryoo 803 "; 805 description 806 "This YANG module describes the parameters needed 807 for DetNet flow configuration and flow status 808 reporting"; 810 revision 2020-03-04 { 811 description "initial revision"; 812 reference "RFC XXXX: draft-ietf-detnet-yang-02"; 814 } 816 typedef app-flow-ref { 817 type leafref { 818 path "/ietf-detnet:app-flows" 819 + "/ietf-detnet:app-flow" 820 + "/ietf-detnet:name"; 821 } 822 } 824 typedef service-sub-layer-ref { 825 type leafref { 826 path "/ietf-detnet:service-sub-layer" 827 + "/ietf-detnet:service-sub-layer-list" 828 + "/ietf-detnet:name"; 829 } 830 } 832 typedef forwarding-sub-layer-ref { 833 type leafref { 834 path "/ietf-detnet:forwarding-sub-layer" 835 + "/ietf-detnet:forwarding-sub-layer-list" 836 + "/ietf-detnet:name"; 837 } 838 } 840 typedef sub-network-ref { 841 type leafref { 842 path "/ietf-detnet:sub-network" 843 + "/ietf-detnet:sub-network-list" 844 + "/ietf-detnet:name"; 845 } 846 } 848 typedef ipsec-spi { 849 type uint32 { 850 range "1..max"; 851 } 852 description 853 "SPI"; 854 } 856 typedef service-operation-type { 857 type enumeration { 858 enum service-initiation { 859 description 860 "Operation for DetNet service sub-layer encapsulation"; 861 } 862 enum service-termination { 863 description 864 "Operation for DetNet service sub-layer decapsulation"; 865 } 866 enum service-relay { 867 description 868 "Operation for DetNet service sub-layer swap"; 869 } 870 enum non-detnet { 871 description 872 "No operation for DetNet service sub-layer"; 873 } 874 } 875 } 877 typedef forwarding-operations-type { 878 type enumeration { 879 enum forward { 880 description 881 "Operation forward to next-hop"; 882 } 883 enum impose-and-forward { 884 description 885 "Operation impose outgoing label(s) and forward to 886 next-hop"; 887 } 888 enum pop-and-forward { 889 description 890 "Operation pop incoming label and forward to next-hop"; 891 } 892 enum pop-impose-and-forward { 893 description 894 "Operation pop incoming label, impose one or more 895 outgoing label(s) and forward to next-hop"; 896 } 897 enum swap-and-forward { 898 description 899 "Operation swap incoming label, with outgoing label and 900 forward to next-hop"; 901 } 902 enum pop-and-lookup { 903 description 904 "Operation pop incoming label and perform a lookup"; 905 } 906 } 907 description "MPLS operations types"; 908 } 909 typedef service-protection-type { 910 type enumeration { 911 enum none { 912 description 913 "no service protection provide"; 914 } 915 enum replication { 916 description 917 "A Packet Replication Function (PRF) replicates 918 DetNet flow packets and forwards them to one or 919 more next hops in the DetNet domain. The number 920 of packet copies sent to each next hop is a 921 DetNet flow specific parameter at the node doing 922 the replication. PRF can be implemented by an 923 edge node, a relay node, or an end system"; 924 } 925 enum elimination { 926 description 927 "A Packet Elimination Function (PEF) eliminates 928 duplicate copies of packets to prevent excess 929 packets flooding the network or duplicate 930 packets being sent out of the DetNet domain. 931 PEF can be implemented by an edge node, a relay 932 node, or an end system."; 933 } 934 enum ordering { 935 description 936 "A Packet Ordering Function (POF) re-orders 937 packets within a DetNet flow that are received 938 out of order. This function can be implemented 939 by an edge node, a relay node, or an end system."; 940 } 941 enum elimination-ordering { 942 description 943 "A combination of PEF and POF that can be 944 implemented by an edge node, a relay node, or 945 an end system."; 946 } 947 enum elimination-replication { 948 description 949 "A combination of PEF and PRF that can be 950 implemented by an edge node, a relay node, or 951 an end system"; 952 } 953 enum elimination-ordering-replicaiton { 954 description 955 "A combination of PEF, POF and PRF that can be 956 implemented by an edge node, a relay node, or 957 an end system"; 958 } 959 } 960 } 962 typedef sequence-number-generation-type { 963 type enumeration { 964 enum copy-from-app-flow { 965 description 966 "Copy the app-flow sequence number to the DetNet-flow"; 967 } 968 enum generate-by-detnet-flow { 969 description 970 "Generate the sequence number by DetNet flow"; 971 } 972 } 973 } 975 typedef sequence-number-field { 976 type enumeration { 977 enum zero-sn { 978 description "there is no DetNet sequence number field."; 979 } 980 enum short-sn { 981 description "there is 16bit DetNet sequence number field"; 982 value 16; 983 } 984 enum long-sn { 985 description "there is 28bit DetNet sequence number field"; 986 value 28; 987 } 988 } 989 } 991 grouping ip-header { 992 description 993 "The IPv4/IPv6 packet header information"; 994 leaf src-ip-address { 995 type inet:ip-address; 996 description 997 "The source IP address of the header"; 998 } 999 leaf dest-ip-address { 1000 type inet:ip-address; 1001 description 1002 "The destination IP address of the header"; 1003 } 1004 leaf next-header { 1005 type uint8; 1006 description 1007 "The next header of the IPv6 header"; 1008 } 1009 leaf traffic-class { 1010 type uint8; 1011 description 1012 "The traffic class value of the header"; 1013 } 1014 leaf flow-label { 1015 type inet:ipv6-flow-label; 1016 description 1017 "The flow label value of the header"; 1018 } 1019 leaf source-port { 1020 type inet:port-number; 1021 description 1022 "The source port number"; 1023 } 1024 leaf destination-port { 1025 type inet:port-number; 1026 description 1027 "The destination port number"; 1028 } 1029 } 1031 grouping l2-header { 1032 description 1033 "The Ethernet or TSN packet header information"; 1034 leaf source-mac-address { 1035 type yang:mac-address; 1036 description 1037 "The source MAC address value of the ethernet header"; 1038 } 1039 leaf destination-mac-address { 1040 type yang:mac-address; 1041 description 1042 "The destination MAC address value of the ethernet header"; 1043 } 1044 leaf ethertype { 1045 type eth:ethertype; 1046 description 1047 "The ethernet packet type value of the ethernet header"; 1048 } 1049 leaf vlan-id { 1050 type uint16; 1051 description 1052 "The Vlan value of the ethernet header"; 1054 } 1055 leaf pcp { 1056 type uint8; 1057 description 1058 "The priority value of the ethernet header"; 1059 } 1060 } 1061 grouping destination-ip-port-identification { 1062 description 1063 "The TCP/UDP port(source/destination) identification information"; 1064 container destination-port { 1065 uses packet-fields:port-range-or-operator; 1066 } 1067 } 1069 grouping source-ip-port-identification { 1070 description 1071 "The TCP/UDP port(source/destination) identification information"; 1072 container source-port { 1073 uses packet-fields:port-range-or-operator; 1074 } 1075 } 1077 grouping ip-flow-identification { 1078 description 1079 "The IPv4/IPv6 packet header identification information"; 1080 leaf src-ip-prefix { 1081 type inet:ip-prefix; 1082 description 1083 "The source IP address of the header"; 1084 } 1085 leaf dest-ip-prefix { 1086 type inet:ip-prefix; 1087 description 1088 "The destination IP address of the header"; 1089 } 1090 leaf next-header { 1091 type uint8; 1092 description 1093 "The next header of the IPv6 header"; 1094 } 1095 leaf traffic-class { 1096 type uint8; 1097 description 1098 "The traffic class value of the header"; 1099 } 1100 leaf flow-label { 1101 type inet:ipv6-flow-label; 1102 description 1103 "The flow label value of the header"; 1104 } 1105 uses source-ip-port-identification; 1106 uses destination-ip-port-identification; 1107 leaf ipsec-spi { 1108 type ipsec-spi; 1109 description "Security parameter index of SA entry"; 1110 } 1111 } 1113 grouping mpls-flow-identification { 1114 description 1115 "The MPLS packet header identification information"; 1116 choice label-space { 1117 description ""; 1118 case context-label-space { 1119 uses rt-types:mpls-label-stack; 1120 } 1121 case platform-label-space { 1122 leaf label { 1123 type rt-types:mpls-label; 1124 } 1125 } 1126 } 1127 } 1129 grouping traffic-specification { 1130 container traffic-specification { 1131 description 1132 "traffic-specification specifies how the Source 1133 transmits packets for the flow. This is the 1134 promise/request of the Source to the network. 1135 The network uses this traffic specification 1136 to allocate resources and adjust queue 1137 parameters in network nodes."; 1138 reference 1139 "draft-ietf-detnet-flow-information-model"; 1140 leaf interval { 1141 type uint32; 1142 description 1143 "The period of time in which the traffic 1144 specification cannot be exceeded"; 1145 } 1146 leaf max-packets-per-interval{ 1147 type uint32; 1148 description 1149 "The maximum number of packets that the 1150 source will transmit in one Interval."; 1151 } 1152 leaf max-payload-size{ 1153 type uint32; 1154 description 1155 "The maximum payload size that the source 1156 will transmit."; 1157 } 1158 leaf average-packets-per-interval { 1159 type uint32; 1160 description 1161 "The average number of packets that the 1162 source will transmit in one Interval"; 1163 } 1164 leaf average-payload-size { 1165 type uint32; 1166 description 1167 "The average payload size that the 1168 source will transmit."; 1169 } 1170 } 1171 } 1173 grouping traffic-requirements { 1174 container traffic-requirements { 1175 description 1176 "FlowRequirements: defines the attributes of the App-flow 1177 regarding bandwidth, latency, latency variation, loss, and 1178 misordering tolerance."; 1179 leaf min-bandwidth { 1180 type uint64; 1181 description 1182 "MinBandwidth is the minimum bandwidth that has to be 1183 guaranteed for the DetNet service. MinBandwidth is 1184 specified in octets per second."; 1185 } 1186 leaf max-latency { 1187 type uint32; 1188 description 1189 "MaxLatency is the maximum latency from Ingress to Egress(es) 1190 for a single packet of the DetNet flow. MaxLatency is 1191 specified as an integer number of nanoseconds"; 1192 } 1193 leaf max-latency-variation { 1194 type uint32; 1195 description 1196 "MaxLatencyVariation is the difference between the minimum and 1197 the maximum end-to-end one-way latency. MaxLatencyVariation 1198 is specified as an integer number of nanoseconds."; 1199 } 1200 leaf max-loss { 1201 type uint8; 1202 description 1203 "MaxLoss defines the maximum Packet Loss Ratio (PLR) parameter 1204 for the DetNet service between the Ingress and Egress(es) of 1205 the DetNet domain."; 1206 } 1207 leaf max-consecutive-loss-tolerance { 1208 type uint32; 1209 description 1210 "Some applications have special loss requirement, such as 1211 MaxConsecutiveLossTolerance. The maximum consecutive loss 1212 tolerance parameter describes the maximum number of 1213 consecutive packets whose loss can be tolerated. The maximum 1214 consecutive loss tolerance can be measured for example based 1215 on sequence number"; 1216 } 1217 leaf max-misordering { 1218 type uint32; 1219 description 1220 "MaxMisordering describes the tolerable maximum number of 1221 packets that can be received out of order. The maximum 1222 allowed misordering can be measured for example based on 1223 sequence number. The value zero for the maximum allowed 1224 misordering indicates that in order delivery is required, 1225 misordering cannot be tolerated."; 1226 } 1227 } 1228 } 1230 grouping data-flow-spec { 1231 description "app-flow identification"; 1232 choice data-flow-type { 1233 case tsn-app-flow { 1234 uses l2-header; 1235 } 1236 case ip-app-flow { 1237 uses ip-flow-identification; 1238 } 1239 case mpls-app-flow { 1240 uses mpls-flow-identification; 1241 } 1242 } 1243 } 1244 grouping detnet-flow-spec { 1245 description "detnet-flow identificatioin"; 1246 choice detnet-flow-type { 1247 case ip-detnet-flow { 1248 uses ip-flow-identification; 1249 } 1250 case mpls-detnet-flow { 1251 uses mpls-flow-identification; 1252 } 1253 } 1254 } 1256 grouping app-flows-ref { 1257 description "incoming or outgoing app-flow reference group"; 1258 leaf-list app-flow { 1259 type app-flow-ref; 1260 description "List of ingress or egress app-flows"; 1261 } 1262 } 1264 grouping service-sub-layer-ref { 1265 description "incoming or outgoing service sub-layer reference group"; 1266 leaf-list service-sub-layer { 1267 type service-sub-layer-ref; 1268 description 1269 "List of incoming or outgoing service sub-layer 1270 that has to aggregate or disaggregate"; 1271 } 1272 } 1274 grouping forwarding-sub-layer-ref { 1275 description "incoming or outgoing forwarding sub-layer reference group"; 1276 leaf-list forwarding-sub-layer { 1277 type forwarding-sub-layer-ref; 1278 description 1279 "List of incoming or outgoing forwarding sub-layer 1280 that has to aggregate or disaggregate"; 1281 } 1282 } 1284 grouping detnet-header { 1285 description "DetNet header info for DetNet encapsulation or swap"; 1286 choice header-type { 1287 case detnet-mpls-header { 1288 description 1289 "MPLS label stack for DetNet MPLS encapsulation or forwarding"; 1290 uses rt-types:mpls-label-stack; 1291 } 1292 case detnet-ip-header { 1293 description 1294 "IPv4/IPv6 packet header for DetNet IP encapsulation"; 1295 uses ip-header; 1296 } 1297 } 1298 } 1300 grouping detnet-app-next-hop-content { 1301 description 1302 "Generic parameters of DetNet next hops."; 1303 choice next-hop-options { 1304 mandatory true; 1305 description 1306 "Options for next hops. 1307 It is expected that further cases will be added through 1308 augments from other modules, e.g., for recursive 1309 next hops."; 1310 case simple-next-hop { 1311 description 1312 "This case represents a simple next hop consisting of the 1313 next-hop address and/or outgoing interface. 1314 Modules for address families MUST augment this case with a 1315 leaf containing a next-hop address of that address 1316 family."; 1317 container mpls-header { 1318 description 1319 "MPLS label stack for DetNet MPLS encapsulation or forwarding"; 1320 uses rt-types:mpls-label-stack; 1321 } 1322 leaf outgoing-interface { 1323 type if:interface-ref; 1324 } 1325 } 1326 case next-hop-list { 1327 container next-hop-list { 1328 description 1329 "Container for multiple next hops."; 1330 list next-hop { 1331 key "hop-index"; 1332 description 1333 "An entry in a next-hop list. 1335 Modules for address families MUST augment this list 1336 with a leaf containing a next-hop address of that 1337 address family."; 1338 leaf hop-index { 1339 type uint8; 1340 description ""; 1341 } 1342 container mpls-header { 1343 description 1344 "MPLS label stack for DetNet MPLS encapsulation or forwarding"; 1345 uses rt-types:mpls-label-stack; 1346 } 1347 leaf outgoing-interface { 1348 type if:interface-ref; 1349 } 1350 } 1351 } 1352 } 1353 } 1354 } 1356 grouping detnet-forwarding-next-hop-content { 1357 description 1358 "Generic parameters of DetNet next hops."; 1359 choice next-hop-options { 1360 mandatory true; 1361 description 1362 "Options for next hops. 1363 It is expected that further cases will be added through 1364 augments from other modules, e.g., for recursive 1365 next hops."; 1366 case simple-next-hop { 1367 description 1368 "This case represents a simple next hop consisting of the 1369 next-hop address and/or outgoing interface. 1370 Modules for address families MUST augment this case with a 1371 leaf containing a next-hop address of that address 1372 family."; 1373 uses detnet-header; 1374 leaf outgoing-interface { 1375 type if:interface-ref; 1376 } 1377 } 1378 case next-hop-list { 1379 container next-hop-list { 1380 description 1381 "Container for multiple next hops."; 1382 list next-hop { 1383 key "hop-index"; 1384 description 1385 "An entry in a next-hop list. 1387 Modules for address families MUST augment this list 1388 with a leaf containing a next-hop address of that 1389 address family."; 1391 leaf hop-index { 1392 type uint8; 1393 description ""; 1394 } 1395 uses detnet-header; 1396 leaf outgoing-interface { 1397 type if:interface-ref; 1398 } 1399 } 1400 } 1401 } 1402 } 1403 } 1405 container app-flows { 1406 description 1407 "The DetNet app-flow configuration"; 1408 list app-flow { 1409 key "name"; 1410 description ""; 1411 leaf name { 1412 type "string"; 1413 description "The name to identify the DetNet app-flow"; 1414 } 1415 leaf app-id { 1416 type uint16; 1417 config false; 1418 description 1419 "The DetNet Application ID"; 1420 } 1421 leaf app-flow-bidir-congruent { 1422 type boolean; 1423 description 1424 "Defines the data path requirement of the App-flow whether 1425 it must share the same data path and physical path 1426 for both directions through the network, 1427 e.g., to provide congruent paths in the two directions."; 1428 } 1429 uses traffic-requirements; 1430 uses traffic-specification; 1431 container in-segment { 1432 description "app-flow identification"; 1433 leaf interface { 1434 type if:interface-ref; 1435 description ""; 1436 } 1437 uses data-flow-spec; 1438 } 1439 container out-segment { 1440 description 1441 "ingress proxy that incoming app-flow map to detnet-flow 1442 and egress proxy that next-hop for outging app-flow"; 1443 choice outgoing-options { 1444 mandatory true; 1445 description 1446 ""; 1447 case ingress-proxy { 1448 leaf service-sub-layer { 1449 type service-sub-layer-ref; 1450 } 1451 } 1452 case egress { 1453 uses detnet-app-next-hop-content; 1454 } 1455 } 1456 } 1457 } 1458 } 1459 container service-sub-layer { 1460 description "The DetNet service sub-layer configuration"; 1461 list service-sub-layer-list { 1462 key "name"; 1463 description ""; 1464 leaf name { 1465 type string; 1466 description "The name of the DetNet service sub-layer"; 1467 } 1468 leaf service-id { 1469 type uint16; 1470 config false; 1471 description 1472 "The DetNet service ID"; 1473 } 1474 leaf service-rank { 1475 type uint8; 1476 description 1477 "The DetNet rank for this service"; 1478 } 1479 uses traffic-requirements; 1480 uses traffic-specification; 1481 container service-protection { 1482 leaf service-protection-type { 1483 type service-protection-type; 1484 description 1485 "The DetNet service protection type 1486 such as PRF, PEF, PEOF,PERF, and PEORF"; 1488 } 1489 leaf sequence-number-length { 1490 type sequence-number-field; 1491 description 1492 "sequence number filed can choice 0 bit, 16bit, 28 bit filed"; 1493 } 1494 } 1495 leaf service-operation-type { 1496 type service-operation-type; 1497 } 1498 container in-segment { 1499 description 1500 "The DetNet service sub-layer inbound configuration. 1501 This should not be used if this service operation is initiation"; 1502 choice incoming-options { 1503 mandatory true; 1504 description 1505 ""; 1506 case ingress-proxy { 1507 uses app-flows-ref; 1508 } 1509 case detnet-service-identification { 1510 uses detnet-flow-spec; 1511 } 1512 } 1513 } 1514 container out-segment { 1515 description 1516 "The DetNet service sub-layer outbound configuration. 1517 This should not be used 1518 if this service operation is termination"; 1519 choice outgoing-options { 1520 mandatory true; 1521 description 1522 ""; 1523 case egress-proxy { 1524 uses app-flows-ref; 1525 } 1526 case detnet-service-output { 1527 //uses detnet-service-next-hop-content; 1528 list service-output-list { 1529 key "service-output-index"; 1530 leaf service-output-index { 1531 type uint8; 1532 } 1533 uses detnet-header; 1534 list next-layer{ 1535 key "index"; 1536 description "lower-layer info"; 1537 leaf index { 1538 type uint8; 1539 } 1540 leaf forwarding-sub-layer { 1541 type forwarding-sub-layer-ref; 1542 } 1543 } 1544 } 1545 } 1546 } 1547 } 1548 } 1549 } 1550 container forwarding-sub-layer { 1551 description "The DetNet forwarding sub-layer configuration"; 1552 list forwarding-sub-layer-list { 1553 key "name"; 1554 description ""; 1555 leaf name { 1556 type string; 1557 description "The name of the DetNet forwarding sub-layer"; 1558 } 1559 leaf forwarding-id { 1560 type uint16; 1561 config false; 1562 description 1563 "The DetNet forwarding ID"; 1564 } 1565 uses traffic-requirements; 1566 uses traffic-specification; 1567 leaf forwarding-operation-type { 1568 type forwarding-operations-type; 1569 } 1570 container in-segment { 1571 description 1572 "The DetNet forwarding sub-layer inbound configuration. This should not be used 1573 if this forwarding operation is impose-and-forward"; 1575 choice incoming-options { 1576 mandatory true; 1577 description 1578 ""; 1579 case detnet-service-forwarding { 1580 uses service-sub-layer-ref; 1581 } 1582 case detnet-forwarding-identification { 1583 leaf interface { 1584 type if:interface-ref; 1585 description ""; 1586 } 1587 uses detnet-flow-spec; 1588 } 1589 } 1590 } 1591 container out-segment { 1592 description 1593 "The DetNet forwarding sub-layer outbound configuration. This should not be used 1594 if this forwarding operation is pop-and-lookup"; 1595 choice outgoing-options { 1596 mandatory true; 1597 description 1598 ""; 1599 case service-operation { 1600 uses service-sub-layer-ref; 1601 } 1602 case detnet-forwarding-output { 1603 uses detnet-forwarding-next-hop-content; 1604 } 1605 } 1606 } 1607 } 1608 } 1609 container sub-network { 1610 description ""; 1611 list sub-network-list { 1612 key "name"; 1613 description ""; 1614 leaf name { 1615 type string; 1616 description ""; 1617 } 1618 } 1619 } 1620 } 1621 1623 7. An alternative DetNet YANG model 1625 This is a model that is organized by the concepts in the flow model. 1626 In order to align with the principles in the flow document a ground 1627 up model was built. In order to illustrate this YANG model some 1628 example test configurations are used to validate the model. Building 1629 the DetNet YANG model is not that easy because the number of 1630 permutations of IP/MPLS data planes with and without aggregation at 1631 each layer is hard to keep straight. This model tries to follow the 1632 current DetNet data plane documents and supported data planes. The 1633 examples do not illustrate aggregation but the models are build for 1634 several levels of aggregation. 1636 7.1. Conventions 1638 This YANG model consists of three main sections: application, service 1639 sub-layer and forwarding sub-layer, that use a number of common 1640 building blocks. Many of the building blocks are also the same as 1641 the first model presented in this document. To minimize duplication, 1642 leaf-refs between the sections are utilized. With a single leaf-ref 1643 between an application and a service sub-layer the backend code can 1644 relate the two instances. The backend code can also populate a read 1645 only instance of a leaf-ref for the operational view so leaf-refs 1646 only need to be configured once for both objects. Early versions of 1647 the model used leaf-refs configure mainly outside the service sub- 1648 layer, however this turned out being awkward because the in the 1649 current model of the service sub-layer presented here it is binding a 1650 service id to the leaf-ref. Therefore the leaf-ref for an 1651 application and a forwarding sub-layer is more naturally configured 1652 from the service sub-layer. 1654 Another point about the model is each component has two 1655 unidirectional parts. Applications would typically contain both 1656 directions and become a complete bidirectional entity containing both 1657 directionsl of a flow. Service sub-layers components can be 1658 configured as unidirectional with only one direction being 1659 configured. Forwarding sub-layer components are unidirectional. 1660 Leaf-refs are used for each direction even though there are cases 1661 where a single leaf-ref could work in a bidirctional model. DetNet 1662 Services require configuarion of each undirectional flow and have 1663 configuration options based on the roles they play and the types of 1664 traffic mappings. 1666 DetNet Edges have application, service and forwarding configuration. 1667 DetNet Relays only use DetNet services sub-layer and forwarding sub- 1668 layer configuration. DetNet Transit nodes may only have forwarding 1669 sub-layer configuration. The behavior is DetNet service dependent, 1670 such that a a physical node may be an edge node for some flows, it 1671 may be a relay node for some flows and it may be a transit node for 1672 some flows. The full YANG model is defined and only the relevant 1673 aspects are configured at each stage. 1675 7.1.1. Aggregation 1677 Aggregation may be configured at each of the instances. Aggregation 1678 is data plane specific. DetNet Service Sub-layer MPLS aggregation 1679 for example, from application to service adds a per Application 1680 Service sub-layer label. If a DetNet service is aggregated to 1681 another DetNet service there are a couple ways this can be 1682 accomplished. 1684 A service sub-layer can play a role similar to an application to 1685 another service allowing aggregation of services. A service sub- 1686 layer can appear as relay service peering with that service. Relay 1687 functions are dependent in the traffic type. Aggregation can be 1688 achieved by encapsulation (MPLS) or by wild cards (IP) using the 1689 native IP header. IP headers that are used in place aggregate by 1690 allowing a broader address range (wild cards) or port range or DSCP 1691 filter. These aggregating flows also require the reverse operation 1692 to disaggregate the traffic at the edge of the DetNet service. 1694 There are many ways to achieve aggregation and this can complicate 1695 the YANG design to some degree. The current models support 1696 aggregation but the configuration examples provided are illustrating 1697 no aggregation for this version of the draft. 1699 7.2. Alternative DetNet Configuration YANG 1701 module: ietf-detnet-configa 1702 +--rw detnet 1703 +--rw applications 1704 | +--rw app-list* [name] 1705 | | +--rw name string 1706 | | +--ro app-id? uint16 1707 | | +--rw app-flow-bidir-congruent? boolean 1708 | | +--ro service-outbound? service-ref 1709 | | +--ro service-inbound? service-ref 1710 | | +--rw traffic-requirements 1711 | | | +--rw min-bandwidth? uint64 1712 | | | +--rw max-latency? uint32 1713 | | | +--rw max-latency-variation? uint32 1714 | | | +--rw max-loss? percent 1715 | | | +--rw max-consecutive-loss-tolerance? uint32 1716 | | | +--rw max-misordering? uint32 1717 | | +--rw traffic-specification 1718 | | +--rw interval? uint32 1719 | | +--rw max-packets-per-interval? uint64 1720 | | +--rw max-payload-size? uint32 1721 | +--rw app-ingress* [name] 1722 | | +--rw name string 1723 | | +--ro app-flow-status? identityref 1724 | | +--rw incoming-interface* if:interface-ref 1725 | | +--rw (detnet-forwarding-type)? 1726 | | +--:(ethernet) 1727 | | | +--rw ethernet 1728 | | | +--rw placeholder? string 1729 | | +--:(ip) 1730 | | | +--rw ip 1731 | | | +--rw source inet:ip-prefix 1732 | | | +--rw destination inet:ip-prefix 1733 | | | +--rw protocol-next uint8 1734 | | | +--rw dscp* uint8 1735 | | | +--rw ipv6-flow-label? inet:ipv6-flow-label 1736 | | | +--rw (l4)? 1737 | | | +--:(tcp) 1738 | | | | +--rw tcp 1739 | | | | +--rw source-port 1740 | | | | | +--rw (source-port)? 1741 | | | | | +--:(range-or-operator) 1742 | | | | | +--rw range-or-operator 1743 | | | | | +--rw (port-range-or-operator)? 1744 | | | | | +--:(range) 1745 | | | | | | +--rw lower-port inet: 1746 port-number 1747 | | | | | | +--rw upper-port inet: 1748 port-number 1749 | | | | | +--:(operator) 1750 | | | | | +--rw operator? opera 1751 tor 1752 | | | | | +--rw port inet: 1753 port-number 1754 | | | | +--rw destination-port 1755 | | | | +--rw (destination-port)? 1756 | | | | +--:(range-or-operator) 1757 | | | | +--rw range-or-operator 1758 | | | | +--rw (port-range-or-operator)? 1759 | | | | +--:(range) 1760 | | | | | +--rw lower-port inet: 1761 port-number 1762 | | | | | +--rw upper-port inet: 1763 port-number 1764 | | | | +--:(operator) 1765 | | | | +--rw operator? opera 1766 tor 1767 | | | | +--rw port inet: 1768 port-number 1769 | | | +--:(udp) 1770 | | | | +--rw udp 1771 | | | | +--rw source-port 1772 | | | | | +--rw (source-port)? 1773 | | | | | +--:(range-or-operator) 1774 | | | | | +--rw range-or-operator 1775 | | | | | +--rw (port-range-or-operator)? 1776 | | | | | +--:(range) 1777 | | | | | | +--rw lower-port inet: 1778 port-number 1779 | | | | | | +--rw upper-port inet: 1780 port-number 1781 | | | | | +--:(operator) 1782 | | | | | +--rw operator? opera 1783 tor 1784 | | | | | +--rw port inet: 1785 port-number 1786 | | | | +--rw destination-port 1787 | | | | +--rw (destination-port)? 1788 | | | | +--:(range-or-operator) 1789 | | | | +--rw range-or-operator 1790 | | | | +--rw (port-range-or-operator)? 1791 | | | | +--:(range) 1792 | | | | | +--rw lower-port inet: 1793 port-number 1794 | | | | | +--rw upper-port inet: 1795 port-number 1796 | | | | +--:(operator) 1797 | | | | +--rw operator? opera 1798 tor 1799 | | | | +--rw port inet: 1800 port-number 1801 | | | +--:(ipsec) 1802 | | | +--rw ipsec 1803 | | | +--rw ipsec-spi? ipsec-spi 1804 | | +--:(mpls) 1805 | | +--rw mpls 1806 | | +--rw (label-space)? 1807 | | +--:(interface) 1808 | | | +--rw interface 1809 | | | +--rw mpls-label-stack 1810 | | | +--rw entry* [id] 1811 | | | +--rw id uint8 1812 | | | +--rw label? rt-types:mpls- 1813 label 1814 | | | +--rw ttl? uint8 1815 | | | +--rw traffic-class? uint8 1816 | | +--:(platform) 1817 | | +--rw platform 1818 | | +--rw mpls-label-stack 1819 | | +--rw entry* [id] 1820 | | +--rw id uint8 1821 | | +--rw label? rt-types:mpls- 1822 label 1823 | | +--rw ttl? uint8 1824 | | +--rw traffic-class? uint8 1825 | +--rw app-egress* [name] 1826 | +--rw name string 1827 | +--ro app-flow-status? identityref 1828 | +--rw next-hop 1829 | +--rw (application-type)? 1830 | +--:(ethernet) 1831 | | +--rw ethernet 1832 | | +--rw ethernet-place-holder? string 1833 | +--:(ip-mpls) 1834 | +--rw ip-mpls 1835 | +--rw (next-hop-options) 1836 | +--:(simple-next-hop) 1837 | | +--rw simple-next-hop 1838 | | +--rw outgoing-interface? if:interface 1839 -ref 1840 | | +--rw mpls-label-stack 1841 | | +--rw entry* [id] 1842 | | +--rw id uint8 1843 | | +--rw label? rt-types:mp 1844 ls-label 1845 | | +--rw ttl? uint8 1846 | | +--rw traffic-class? uint8 1847 | +--:(special-next-hop) 1848 | | +--rw special-next-hop 1849 | | +--rw special-next-hop? enumeration 1850 | +--:(next-hop) 1851 | +--rw next-hop* [hop-index] 1852 | +--rw hop-index uint8 1853 | +--rw outgoing-interface? if:interface 1854 -ref 1855 | +--rw index? string 1856 | +--rw backup-index? string 1857 | +--rw loadshare? uint16 1858 | +--rw role? nhlfe-role 1859 | +--rw mpls-label-stack 1860 | +--rw entry* [id] 1861 | +--rw id uint8 1862 | +--rw label? rt-types:mp 1863 ls-label 1864 | +--rw ttl? uint8 1865 | +--rw traffic-class? uint8 1866 +--rw services 1867 | +--rw service-list* [name] 1868 | +--rw name string 1869 | +--ro service-id? uint16 1870 | +--rw service-rank? uint8 1871 | +--rw outbound 1872 | | +--ro forward-sublayer-output* fwd-sub-layer-output-ref 1873 | | +--rw service-protection-type? identityref 1874 | | +--rw sequence_number_length? uint8 1875 | | +--rw application-input* [name] 1876 | | | +--rw name application-ref 1877 | | | +--rw (detnet-forwarding-type)? 1878 | | | +--:(ip) 1879 | | | | +--rw ip 1880 | | | | +--rw source inet:ip-prefix 1881 | | | | +--rw destination inet:ip-prefix 1882 | | | | +--rw protocol-next uint8 1883 | | | | +--rw dscp* uint8 1884 | | | | +--rw ipv6-flow-label? inet:ipv6-flow-label 1885 | | | | +--rw (l4)? 1886 | | | | +--:(tcp) 1887 | | | | | +--rw tcp 1888 | | | | | +--rw source-port 1889 | | | | | | +--rw (source-port)? 1890 | | | | | | +--:(range-or-operator) 1891 | | | | | | +--rw range-or-operator 1892 | | | | | | +--rw (port-range-or-oper 1893 ator)? 1894 | | | | | | +--:(range) 1895 | | | | | | | +--rw lower-port 1896 inet:port-number 1897 | | | | | | | +--rw upper-port 1898 inet:port-number 1899 | | | | | | +--:(operator) 1900 | | | | | | +--rw operator? 1901 operator 1902 | | | | | | +--rw port 1903 inet:port-number 1904 | | | | | +--rw destination-port 1905 | | | | | +--rw (destination-port)? 1906 | | | | | +--:(range-or-operator) 1907 | | | | | +--rw range-or-operator 1908 | | | | | +--rw (port-range-or-oper 1909 ator)? 1910 | | | | | +--:(range) 1911 | | | | | | +--rw lower-port 1912 inet:port-number 1913 | | | | | | +--rw upper-port 1914 inet:port-number 1915 | | | | | +--:(operator) 1916 | | | | | +--rw operator? 1917 operator 1918 | | | | | +--rw port 1919 inet:port-number 1920 | | | | +--:(udp) 1921 | | | | | +--rw udp 1922 | | | | | +--rw source-port 1923 | | | | | | +--rw (source-port)? 1924 | | | | | | +--:(range-or-operator) 1925 | | | | | | +--rw range-or-operator 1926 | | | | | | +--rw (port-range-or-oper 1927 ator)? 1928 | | | | | | +--:(range) 1929 | | | | | | | +--rw lower-port 1930 inet:port-number 1931 | | | | | | | +--rw upper-port 1932 inet:port-number 1933 | | | | | | +--:(operator) 1934 | | | | | | +--rw operator? 1935 operator 1936 | | | | | | +--rw port 1937 inet:port-number 1938 | | | | | +--rw destination-port 1939 | | | | | +--rw (destination-port)? 1940 | | | | | +--:(range-or-operator) 1941 | | | | | +--rw range-or-operator 1942 | | | | | +--rw (port-range-or-oper 1943 ator)? 1944 | | | | | +--:(range) 1945 | | | | | | +--rw lower-port 1946 inet:port-number 1947 | | | | | | +--rw upper-port 1948 inet:port-number 1949 | | | | | +--:(operator) 1950 | | | | | +--rw operator? 1951 operator 1952 | | | | | +--rw port 1953 inet:port-number 1954 | | | | +--:(ipsec) 1955 | | | | +--rw ipsec 1956 | | | | +--rw ipsec-spi? ipsec-spi 1957 | | | +--:(mpls-service-label) 1958 | | | +--rw mpls-service-label? rt-types:mpls-label-g 1959 eneral-use 1960 | | +--rw prev-relay-services* [name] 1961 | | | +--rw name service-ref 1962 | | | +--rw (detnet-forwarding-type)? 1963 | | | +--:(ip) 1964 | | | | +--rw ip 1965 | | | | +--rw source inet:ip-prefix 1966 | | | | +--rw destination inet:ip-prefix 1967 | | | | +--rw protocol-next uint8 1968 | | | | +--rw dscp* uint8 1969 | | | | +--rw ipv6-flow-label? inet:ipv6-flow-label 1970 | | | | +--rw (l4)? 1971 | | | | +--:(tcp) 1972 | | | | | +--rw tcp 1973 | | | | | +--rw source-port 1974 | | | | | | +--rw (source-port)? 1975 | | | | | | +--:(range-or-operator) 1976 | | | | | | +--rw range-or-operator 1977 | | | | | | +--rw (port-range-or-oper 1978 ator)? 1979 | | | | | | +--:(range) 1980 | | | | | | | +--rw lower-port 1981 inet:port-number 1982 | | | | | | | +--rw upper-port 1983 inet:port-number 1984 | | | | | | +--:(operator) 1985 | | | | | | +--rw operator? 1986 operator 1987 | | | | | | +--rw port 1988 inet:port-number 1989 | | | | | +--rw destination-port 1990 | | | | | +--rw (destination-port)? 1991 | | | | | +--:(range-or-operator) 1992 | | | | | +--rw range-or-operator 1993 | | | | | +--rw (port-range-or-oper 1994 ator)? 1995 | | | | | +--:(range) 1996 | | | | | | +--rw lower-port 1997 inet:port-number 1998 | | | | | | +--rw upper-port 1999 inet:port-number 2000 | | | | | +--:(operator) 2001 | | | | | +--rw operator? 2002 operator 2003 | | | | | +--rw port 2004 inet:port-number 2005 | | | | +--:(udp) 2006 | | | | | +--rw udp 2007 | | | | | +--rw source-port 2008 | | | | | | +--rw (source-port)? 2009 | | | | | | +--:(range-or-operator) 2010 | | | | | | +--rw range-or-operator 2011 | | | | | | +--rw (port-range-or-oper 2012 ator)? 2013 | | | | | | +--:(range) 2014 | | | | | | | +--rw lower-port 2015 inet:port-number 2016 | | | | | | | +--rw upper-port 2017 inet:port-number 2018 | | | | | | +--:(operator) 2019 | | | | | | +--rw operator? 2020 operator 2021 | | | | | | +--rw port 2022 inet:port-number 2023 | | | | | +--rw destination-port 2024 | | | | | +--rw (destination-port)? 2025 | | | | | +--:(range-or-operator) 2026 | | | | | +--rw range-or-operator 2027 | | | | | +--rw (port-range-or-oper 2028 ator)? 2029 | | | | | +--:(range) 2030 | | | | | | +--rw lower-port 2031 inet:port-number 2032 | | | | | | +--rw upper-port 2033 inet:port-number 2034 | | | | | +--:(operator) 2035 | | | | | +--rw operator? 2036 operator 2037 | | | | | +--rw port 2038 inet:port-number 2039 | | | | +--:(ipsec) 2040 | | | | +--rw ipsec 2041 | | | | +--rw ipsec-spi? ipsec-spi 2042 | | | +--:(mpls-service-label) 2043 | | | +--rw mpls-service-label? rt-types:mpls-label-g 2044 eneral-use 2045 | | +--rw traffic-requirements 2046 | | | +--rw min-bandwidth? uint64 2047 | | | +--rw max-latency? uint32 2048 | | | +--rw max-latency-variation? uint32 2049 | | | +--rw max-loss? percent 2050 | | | +--rw max-consecutive-loss-tolerance? uint32 2051 | | | +--rw max-misordering? uint32 2052 | | +--rw traffic-specification 2053 | | +--rw interval? uint32 2054 | | +--rw max-packets-per-interval? uint64 2055 | | +--rw max-payload-size? uint32 2056 | +--rw inbound 2057 | +--rw forward-sublayer-input* fwd-sub-layer-input-ref 2058 | +--rw service-protection-type? identityref 2059 | +--rw sequence_number_length? uint8 2060 | +--rw application-output* [name] 2061 | | +--rw name application-ref 2062 | | +--rw (detnet-forwarding-type)? 2063 | | +--:(ip) 2064 | | | +--rw ip 2065 | | | +--rw source inet:ip-prefix 2066 | | | +--rw destination inet:ip-prefix 2067 | | | +--rw protocol-next uint8 2068 | | | +--rw dscp* uint8 2069 | | | +--rw ipv6-flow-label? inet:ipv6-flow-label 2070 | | | +--rw (l4)? 2071 | | | +--:(tcp) 2072 | | | | +--rw tcp 2073 | | | | +--rw source-port 2074 | | | | | +--rw (source-port)? 2075 | | | | | +--:(range-or-operator) 2076 | | | | | +--rw range-or-operator 2077 | | | | | +--rw (port-range-or-oper 2078 ator)? 2079 | | | | | +--:(range) 2080 | | | | | | +--rw lower-port 2081 inet:port-number 2082 | | | | | | +--rw upper-port 2083 inet:port-number 2084 | | | | | +--:(operator) 2085 | | | | | +--rw operator? 2086 operator 2087 | | | | | +--rw port 2088 inet:port-number 2089 | | | | +--rw destination-port 2090 | | | | +--rw (destination-port)? 2091 | | | | +--:(range-or-operator) 2092 | | | | +--rw range-or-operator 2093 | | | | +--rw (port-range-or-oper 2094 ator)? 2095 | | | | +--:(range) 2096 | | | | | +--rw lower-port 2097 inet:port-number 2098 | | | | | +--rw upper-port 2099 inet:port-number 2100 | | | | +--:(operator) 2101 | | | | +--rw operator? 2102 operator 2103 | | | | +--rw port 2104 inet:port-number 2105 | | | +--:(udp) 2106 | | | | +--rw udp 2107 | | | | +--rw source-port 2108 | | | | | +--rw (source-port)? 2109 | | | | | +--:(range-or-operator) 2110 | | | | | +--rw range-or-operator 2111 | | | | | +--rw (port-range-or-oper 2113 ator)? 2114 | | | | | +--:(range) 2115 | | | | | | +--rw lower-port 2116 inet:port-number 2117 | | | | | | +--rw upper-port 2118 inet:port-number 2119 | | | | | +--:(operator) 2120 | | | | | +--rw operator? 2121 operator 2122 | | | | | +--rw port 2123 inet:port-number 2124 | | | | +--rw destination-port 2125 | | | | +--rw (destination-port)? 2126 | | | | +--:(range-or-operator) 2127 | | | | +--rw range-or-operator 2128 | | | | +--rw (port-range-or-oper 2129 ator)? 2130 | | | | +--:(range) 2131 | | | | | +--rw lower-port 2132 inet:port-number 2133 | | | | | +--rw upper-port 2134 inet:port-number 2135 | | | | +--:(operator) 2136 | | | | +--rw operator? 2137 operator 2138 | | | | +--rw port 2139 inet:port-number 2140 | | | +--:(ipsec) 2141 | | | +--rw ipsec 2142 | | | +--rw ipsec-spi? ipsec-spi 2143 | | +--:(mpls-service-label) 2144 | | +--rw mpls-service-label? rt-types:mpls-label-g 2145 eneral-use 2146 | +--rw next-relay-services* [name] 2147 | +--rw name service-ref 2148 | +--rw (detnet-forwarding-type)? 2149 | +--:(ip) 2150 | | +--rw ip 2151 | | +--rw source inet:ip-prefix 2152 | | +--rw destination inet:ip-prefix 2153 | | +--rw protocol-next uint8 2154 | | +--rw dscp* uint8 2155 | | +--rw ipv6-flow-label? inet:ipv6-flow-label 2156 | | +--rw (l4)? 2157 | | +--:(tcp) 2158 | | | +--rw tcp 2159 | | | +--rw source-port 2160 | | | | +--rw (source-port)? 2161 | | | | +--:(range-or-operator) 2162 | | | | +--rw range-or-operator 2163 | | | | +--rw (port-range-or-oper 2164 ator)? 2165 | | | | +--:(range) 2166 | | | | | +--rw lower-port 2167 inet:port-number 2168 | | | | | +--rw upper-port 2169 inet:port-number 2170 | | | | +--:(operator) 2171 | | | | +--rw operator? 2172 operator 2173 | | | | +--rw port 2174 inet:port-number 2175 | | | +--rw destination-port 2176 | | | +--rw (destination-port)? 2177 | | | +--:(range-or-operator) 2178 | | | +--rw range-or-operator 2179 | | | +--rw (port-range-or-oper 2180 ator)? 2181 | | | +--:(range) 2182 | | | | +--rw lower-port 2183 inet:port-number 2184 | | | | +--rw upper-port 2185 inet:port-number 2186 | | | +--:(operator) 2187 | | | +--rw operator? 2188 operator 2189 | | | +--rw port 2190 inet:port-number 2191 | | +--:(udp) 2192 | | | +--rw udp 2193 | | | +--rw source-port 2194 | | | | +--rw (source-port)? 2195 | | | | +--:(range-or-operator) 2196 | | | | +--rw range-or-operator 2197 | | | | +--rw (port-range-or-oper 2198 ator)? 2199 | | | | +--:(range) 2200 | | | | | +--rw lower-port 2201 inet:port-number 2202 | | | | | +--rw upper-port 2203 inet:port-number 2204 | | | | +--:(operator) 2205 | | | | +--rw operator? 2206 operator 2207 | | | | +--rw port 2208 inet:port-number 2209 | | | +--rw destination-port 2210 | | | +--rw (destination-port)? 2211 | | | +--:(range-or-operator) 2212 | | | +--rw range-or-operator 2213 | | | +--rw (port-range-or-oper 2214 ator)? 2215 | | | +--:(range) 2216 | | | | +--rw lower-port 2217 inet:port-number 2218 | | | | +--rw upper-port 2219 inet:port-number 2220 | | | +--:(operator) 2221 | | | +--rw operator? 2222 operator 2223 | | | +--rw port 2224 inet:port-number 2225 | | +--:(ipsec) 2226 | | +--rw ipsec 2227 | | +--rw ipsec-spi? ipsec-spi 2228 | +--:(mpls-service-label) 2229 | +--rw mpls-service-label? rt-types:mpls-label-g 2230 eneral-use 2231 +--rw fwd-sub-layer-input* [name] 2232 | +--rw name string 2233 | +--rw incoming-interface* if:interface-ref 2234 | +--rw (connectors)? 2235 | | +--:(service-sub-layers) 2236 | | | +--ro service-sub-layers* service-ref 2237 | | +--:(forwarding-sub-layers) 2238 | | +--ro forwarding-sub-layers* fwd-sub-layer-output-ref 2239 | +--rw (detnet-forwarding-type)? 2240 | +--:(ip) 2241 | | +--rw ip 2242 | | +--rw source inet:ip-prefix 2243 | | +--rw destination inet:ip-prefix 2244 | | +--rw protocol-next uint8 2245 | | +--rw dscp* uint8 2246 | | +--rw ipv6-flow-label? inet:ipv6-flow-label 2247 | | +--rw (l4)? 2248 | | +--:(tcp) 2249 | | | +--rw tcp 2250 | | | +--rw source-port 2251 | | | | +--rw (source-port)? 2252 | | | | +--:(range-or-operator) 2253 | | | | +--rw range-or-operator 2254 | | | | +--rw (port-range-or-operator)? 2255 | | | | +--:(range) 2256 | | | | | +--rw lower-port inet:por 2258 t-number 2259 | | | | | +--rw upper-port inet:por 2260 t-number 2261 | | | | +--:(operator) 2262 | | | | +--rw operator? operator 2263 | | | | +--rw port inet:por 2264 t-number 2265 | | | +--rw destination-port 2266 | | | +--rw (destination-port)? 2267 | | | +--:(range-or-operator) 2268 | | | +--rw range-or-operator 2269 | | | +--rw (port-range-or-operator)? 2270 | | | +--:(range) 2271 | | | | +--rw lower-port inet:por 2272 t-number 2273 | | | | +--rw upper-port inet:por 2274 t-number 2275 | | | +--:(operator) 2276 | | | +--rw operator? operator 2277 | | | +--rw port inet:por 2278 t-number 2279 | | +--:(udp) 2280 | | | +--rw udp 2281 | | | +--rw source-port 2282 | | | | +--rw (source-port)? 2283 | | | | +--:(range-or-operator) 2284 | | | | +--rw range-or-operator 2285 | | | | +--rw (port-range-or-operator)? 2286 | | | | +--:(range) 2287 | | | | | +--rw lower-port inet:por 2288 t-number 2289 | | | | | +--rw upper-port inet:por 2290 t-number 2291 | | | | +--:(operator) 2292 | | | | +--rw operator? operator 2293 | | | | +--rw port inet:por 2294 t-number 2295 | | | +--rw destination-port 2296 | | | +--rw (destination-port)? 2297 | | | +--:(range-or-operator) 2298 | | | +--rw range-or-operator 2299 | | | +--rw (port-range-or-operator)? 2300 | | | +--:(range) 2301 | | | | +--rw lower-port inet:por 2302 t-number 2303 | | | | +--rw upper-port inet:por 2304 t-number 2305 | | | +--:(operator) 2306 | | | +--rw operator? operator 2307 | | | +--rw port inet:por 2308 t-number 2309 | | +--:(ipsec) 2310 | | +--rw ipsec 2311 | | +--rw ipsec-spi? ipsec-spi 2312 | +--:(mpls) 2313 | +--rw mpls 2314 | +--rw (label-space)? 2315 | +--:(interface) 2316 | | +--rw interface 2317 | | +--rw mpls-label-stack 2318 | | +--rw entry* [id] 2319 | | +--rw id uint8 2320 | | +--rw label? rt-types:mpls-lab 2321 el 2322 | | +--rw ttl? uint8 2323 | | +--rw traffic-class? uint8 2324 | +--:(platform) 2325 | +--rw platform 2326 | +--rw mpls-label-stack 2327 | +--rw entry* [id] 2328 | +--rw id uint8 2329 | +--rw label? rt-types:mpls-lab 2330 el 2331 | +--rw ttl? uint8 2332 | +--rw traffic-class? uint8 2333 +--rw fwd-sub-layer-output* [name] 2334 +--rw name string 2335 +--rw connectors 2336 | +--rw outbound-service* service-ref 2337 | +--rw prev-forward-sub-layer* fwd-sub-layer-output-ref 2338 +--rw traffic-requirements 2339 | +--rw min-bandwidth? uint64 2340 | +--rw max-latency? uint32 2341 | +--rw max-latency-variation? uint32 2342 | +--rw max-loss? percent 2343 | +--rw max-consecutive-loss-tolerance? uint32 2344 | +--rw max-misordering? uint32 2345 +--rw traffic-specification 2346 | +--rw interval? uint32 2347 | +--rw max-packets-per-interval? uint64 2348 | +--rw max-payload-size? uint32 2349 +--rw next-hop 2350 +--rw (next-hop-options) 2351 +--:(simple-next-hop) 2352 | +--rw simple-next-hop 2353 | +--rw outgoing-interface? if:interface-ref 2354 | +--rw mpls-label-stack 2355 | +--rw entry* [id] 2356 | +--rw id uint8 2357 | +--rw label? rt-types:mpls-label 2358 | +--rw ttl? uint8 2359 | +--rw traffic-class? uint8 2360 +--:(special-next-hop) 2361 | +--rw special-next-hop 2362 | +--rw special-next-hop? enumeration 2363 +--:(next-hop) 2364 +--rw next-hop* [hop-index] 2365 +--rw hop-index uint8 2366 +--rw outgoing-interface? if:interface-ref 2367 +--rw index? string 2368 +--rw backup-index? string 2369 +--rw loadshare? uint16 2370 +--rw role? nhlfe-role 2371 +--rw mpls-label-stack 2372 +--rw entry* [id] 2373 +--rw id uint8 2374 +--rw label? rt-types:mpls-label 2375 +--rw ttl? uint8 2376 +--rw traffic-class? uint8 2378 7.3. Alternative DetNet Configuration YANG Model 2380 file "ietf-detnet-configa@2020-06-02.yang" 2381 module ietf-detnet-configa { 2382 namespace "urn:ietf:params:xml:ns:yang:ietf-detnet-configa"; 2383 prefix "ietf-detnet"; 2385 import ietf-inet-types{ 2386 prefix "inet"; 2387 } 2389 import ietf-routing-types { 2390 prefix "rt-types"; 2391 } 2393 import ietf-interfaces { 2394 prefix "if"; 2395 } 2397 import ietf-routing { 2398 prefix "rt"; 2399 } 2401 import ietf-mpls { 2402 prefix "mpls"; 2403 } 2405 import ietf-packet-fields { 2406 prefix "packet-fields"; 2407 } 2409 organization "IETF DetNet Working Group"; 2411 contact 2412 " Editor: Don Fedyk dfedyk@labn.net "; 2413 description 2414 "This YANG module describes the parameters needed 2415 for DetNet flow configuration and flow status reporting"; 2417 revision 2020-06-02 { 2418 description "initial revision"; 2419 reference 2420 "RFC XXXX: draft-ietf-detnet-flow-information-model-06"; 2421 } 2423 identity status { 2424 description 2425 "Base identity from which all application-status 2426 actions are derived"; 2427 } 2429 identity none { 2430 base "status"; 2431 description 2432 "Application no ingress/egress"; 2433 reference 2434 "draft-ietf-detnet-flow-information-model-06 Section 5.8"; 2435 } 2437 identity ready { 2438 base "status"; 2439 description 2440 "Application ingress/egress ready"; 2441 reference 2442 "draft-ietf-detnet-flow-information-model-06 Section 5.8"; 2443 } 2445 identity failed { 2446 base "status"; 2447 description 2448 "Application ingres/egresss failed"; 2449 reference 2450 "draft-ietf-detnet-flow-information-model-06 Section 5.8"; 2451 } 2453 identity out-of-service { 2454 base "status"; 2455 description 2456 "Application Administratively blocked"; 2457 reference 2458 "draft-ietf-detnet-flow-information-model-06 Section 5.8"; 2459 } 2461 identity partial-failed { 2462 base "status"; 2463 description 2464 "Application One or more Egress ready, and one or more Egress 2465 failed. The DetNet flow can be used if the Ingress is 2466 Ready."; 2467 reference 2468 "draft-ietf-detnet-flow-information-model-06 Section 5.8"; 2469 } 2471 typedef ipsec-spi { 2472 type uint32 { 2473 range "1..max"; 2474 } 2475 description 2476 "SPI"; 2477 } 2479 typedef application-ref { 2480 type leafref { 2481 path "/ietf-detnet:detnet/ietf-detnet:applications" + 2482 "/ietf-detnet:app-list/ietf-detnet:name"; 2483 } 2484 description 2485 "This type is used by applications ingress and egress to 2486 refernce application."; 2487 } 2488 typedef application-ingress-ref { 2489 type leafref { 2490 path "/ietf-detnet:detnet/ietf-detnet:applications" + 2491 "/ietf-detnet:app-ingress/ietf-detnet:name"; 2492 } 2493 description 2494 "This type is used by applications to reference ingress 2495 interfaces."; 2496 } 2498 typedef application-egress-ref { 2499 type leafref { 2500 path "/ietf-detnet:detnet/ietf-detnet:applications" + 2501 "/ietf-detnet:app-egress/ietf-detnet:name"; 2502 } 2503 description 2504 "This type is used by applications to reference egress 2505 interfaces."; 2506 } 2508 typedef service-ref { 2509 type leafref { 2510 path "/ietf-detnet:detnet/ietf-detnet:services" + 2511 "/ietf-detnet:service-list/ietf-detnet:name"; 2512 } 2513 description 2514 "This type is used by applications and forwarding sub-layers 2515 data models that need to reference a configured 2516 service-sub-layer."; 2517 } 2519 typedef fwd-sub-layer-input-ref { 2520 type leafref { 2521 path "/ietf-detnet:detnet/ietf-detnet:fwd-sub-layer-input" 2522 + "/ietf-detnet:name"; 2523 } 2524 description 2525 "This type is used by applications to reference input 2526 interfaces."; 2527 } 2529 typedef fwd-sub-layer-output-ref { 2530 type leafref { 2531 path "/ietf-detnet:detnet/ietf-detnet:fwd-sub-layer-output" 2532 + "/ietf-detnet:name"; 2533 } 2534 description 2535 "This type is used by applications to reference output 2536 interfaces."; 2537 } 2539 // Service protection 2540 identity service-protection-type { 2541 description 2542 "Base identity from which specific 2543 interface types are derived."; 2544 } 2545 identity no-protection { 2546 base "service-protection-type"; 2547 description 2548 "no service protection provided"; 2549 } 2551 identity replication { 2552 base "service-protection-type"; 2553 description 2554 "A Packet Replication Function (PRF) replicates DetNet flow 2555 packets and forwards them to one or more next hops in the 2556 DetNet domain. The number of packet copies sent to each next 2557 hop is a DetNet flow specific parameter at the node doing the 2558 replication. PRF can be implemented by an edge node, a relay 2559 node, or an end system"; 2560 } 2562 identity elimination { 2563 base "service-protection-type"; 2564 description 2565 "A Packet Elimination Function (PEF) eliminates duplicate 2566 copies of packets to prevent excess packets flooding the 2567 network or duplicate packets being sent out of the DetNet 2568 domain. PEF can be implemented by an edge node, a relay node, 2569 or an end system."; 2570 } 2572 identity ordering { 2573 base "service-protection-type"; 2574 description 2575 "A Packet Ordering Function (POF) re-orders packets within a 2576 DetNet flow that are received out of order. This function can 2577 be implemented by an edge node, a relay node, or an end 2578 system."; 2579 } 2581 identity elimination-ordering { 2582 base "service-protection-type"; 2583 description 2584 "A combination of PEF and POF that can be implemented by an 2585 edge node, a relay node, or an end system."; 2586 } 2588 identity elimination-replication { 2589 base "service-protection-type"; 2590 description 2591 "A combination of PEF and PRF that can be implemented by an 2592 edge node, a relay node, or an end system"; 2594 } 2596 identity elimination-ordering-replication { 2597 base "service-protection-type"; 2598 description 2599 "A combination of PEF, POF and PRF that can be implemented by 2600 an edge node, a relay node, or an end system"; 2601 } 2602 typedef percent { 2603 type uint8 { 2604 range "0 .. 100"; 2605 } 2606 description "Percentage"; 2607 } 2609 grouping ip-ports { 2610 container source-port { 2611 choice source-port { 2612 container range-or-operator { 2613 uses packet-fields:port-range-or-operator; 2614 description 2615 "Source port definition from range or operator."; 2616 } 2617 description 2618 "Choice of source port definition using range/operator or a 2619 choice to support future 'case' statements, such as one 2620 enabling a group of source ports to be referenced."; 2621 } 2622 description 2623 "Source port definition."; 2624 } 2625 container destination-port { 2626 choice destination-port { 2627 container range-or-operator { 2628 uses packet-fields:port-range-or-operator; 2629 description 2630 "Destination port definition from range or operator."; 2631 } 2632 description 2633 "Choice of destination port definition using range/operator 2634 or a choice to support future 'case' statements, such as 2635 one enabling a group of source ports to be referenced."; 2636 } 2637 description 2638 "Destination port definition."; 2639 } 2640 } 2642 grouping ip-incoming { 2643 description 2644 "The IPv4 packet header identification information"; 2645 leaf source { 2646 type inet:ip-prefix; 2647 mandatory true; 2648 description "IP source address prefix"; 2649 } 2650 leaf destination { 2651 type inet:ip-prefix; 2652 description "IP destination address prefix"; 2653 mandatory true; 2654 } 2655 leaf protocol-next { 2656 type uint8; 2657 mandatory true; 2658 description 2659 "Internet Protocol number. Refers to the protocol of the 2660 payload. In IPv6, this field is known as 'next-header', and 2661 if extension headers are present, the protocol is present in 2662 the 'upper-layer' header."; 2663 reference 2664 "RFC 791: Internet Protocol 2665 RFC 8200: Internet Protocol, Version 6 (IPv6) Specification."; 2666 } 2667 leaf-list dscp { 2668 type uint8 { 2669 range "0 .. 64"; 2670 } 2671 description 2672 "The DSCP field of the header"; 2673 } 2674 leaf ipv6-flow-label { 2675 type inet:ipv6-flow-label; 2676 description 2677 "The DSCP field of the header"; 2678 } 2679 choice l4 { 2680 container tcp { 2681 uses ip-ports; 2682 } 2683 container udp { 2684 uses ip-ports; 2685 } 2686 container ipsec { 2687 leaf ipsec-spi { 2688 type ipsec-spi; 2689 description 2690 "Security parameter index of SA entry."; 2691 } 2692 } 2693 } 2694 } // End of ip-incoming 2696 grouping traffic-specification { 2697 container traffic-specification { 2698 description 2699 "Traffic-specification specifies how the Source transmits 2700 packets for the flow. This is the promise/request of the 2701 Source to the network. The network uses this traffic 2702 specification to allocate resources and adjust queue 2703 parameters in network nodes."; 2704 reference 2705 "draft-ietf-detnet-flow-information-model-06 Section 5.5"; 2706 leaf interval { 2707 type uint32; 2708 description 2709 "The period of time in which the traffic specification 2710 cannot be exceeded"; 2711 } 2712 leaf max-packets-per-interval{ 2713 type uint64; 2714 units "bits"; 2715 description 2716 "The maximum number of packets that the source will 2717 transmit in one Interval."; 2718 } 2719 leaf max-payload-size{ 2720 type uint32; 2721 description 2722 "The maximum payload size in bytes that the source will 2723 transmit."; 2724 } 2725 } 2726 } 2727 grouping traffic-requirements { 2728 container traffic-requirements { 2729 description 2730 "FlowRequirements: defines the attributes of the App-flow 2731 regarding bandwidth, latency, latency variation, loss, and 2732 misordering tolerance."; 2733 reference 2734 "draft-ietf-detnet-flow-information-model-06 Section 5.9"; 2735 leaf min-bandwidth { 2736 type uint64; 2737 description 2738 "MinBandwidth is the minimum bandwidth that has to be 2739 guaranteed for the DetNet service. MinBandwidth is 2740 specified in octets per second."; 2741 } 2742 leaf max-latency { 2743 type uint32; 2744 description 2745 "MaxLatency is the maximum latency from Ingress to 2746 Egress(es) for a single packet of the DetNet flow. 2747 MaxLatency is specified as an integer number of 2748 nanoseconds"; 2749 } 2750 leaf max-latency-variation { 2751 type uint32; 2752 description 2753 "MaxLatencyVariation is the difference between the minimum 2754 and the maximum end-to-end one-way latency. 2755 MaxLatencyVariation is specified as an integer number of 2756 nanoseconds."; 2757 } 2758 leaf max-loss { 2759 type percent; 2760 description 2761 "MaxLoss defines the maximum Packet Loss Ratio (PLR) 2762 parameter for the DetNet service between the Ingress and 2763 Egress(es) of the DetNet domain."; 2764 } 2765 leaf max-consecutive-loss-tolerance { 2766 type uint32; 2767 description 2768 "Some applications have special loss requirement, such as 2769 MaxConsecutiveLossTolerance. The maximum consecutive loss 2770 tolerance parameter describes the maximum number of 2771 consecutive packets whose loss can be tolerated. The 2772 maximum consecutive loss tolerance can be measured for 2773 example based on sequence number"; 2774 } 2775 leaf max-misordering { 2776 type uint32; 2777 description 2778 "MaxMisordering describes the tolerable maximum number of 2779 packets that can be received out of order. The maximum 2780 allowed misordering can be measured for example based on 2781 sequence number. The value zero for the maximum allowed 2782 misordering indicates that in order delivery is required, 2783 misordering cannot be tolerated."; 2784 } 2785 } 2787 } 2789 // Copied from ietf-routing 2790 grouping next-hop-state-content { 2791 description 2792 "Generic state parameters of next hops."; 2793 choice next-hop-options { 2794 mandatory true; 2795 description 2796 "Options for next hops. 2798 It is expected that further cases will be added through 2799 augments from other modules, e.g., for recursive next 2800 hops."; 2801 container simple-next-hop { 2802 description 2803 "This case represents a simple next hop consisting of the 2804 next-hop address and/or outgoing interface. 2806 Modules for address families MUST augment this case with 2807 a leaf containing a next-hop address of that address 2808 family."; 2809 leaf outgoing-interface { 2810 type if:interface-ref; 2811 description 2812 "Name of the outgoing interface."; 2813 } 2814 uses rt-types:mpls-label-stack; 2815 } 2816 container special-next-hop { 2817 uses rt:special-next-hop; 2818 } 2819 list next-hop { 2820 key hop-index; 2821 description 2822 "An entry in a next-hop list. Modules for address 2823 families MUST augment this list with a leaf containing a 2824 next-hop address of that address family."; 2825 leaf hop-index { 2826 type uint8; 2827 description ""; 2828 } 2829 leaf outgoing-interface { 2830 type if:interface-ref; 2831 description 2832 "Name of the outgoing interface."; 2833 } 2834 uses mpls:nhlfe-multiple-contents; 2835 } 2836 } 2837 } 2839 grouping mpls-incoming { 2840 description ""; 2841 choice label-space { 2842 description ""; 2843 container interface{ 2844 description 2845 "MPLS label is associated with non-platform label space, all 2846 of the F-labels and incoming interface information was used 2847 for identification"; 2848 uses rt-types:mpls-label-stack; 2849 } //End of non-platform-label-space 2850 container platform { 2851 description 2852 "MPLS label is associated with platform label space, only 2853 the F-label is used for identification"; 2854 uses rt-types:mpls-label-stack; 2855 } 2856 } 2857 } 2859 grouping ip-mpls-service { 2860 choice detnet-forwarding-type { 2861 container ip { 2862 uses ip-incoming; 2863 } 2864 leaf mpls-service-label { 2865 type rt-types:mpls-label-general-use; 2866 description 2867 "A service label for DetNet sent on egress, checked on 2868 ingress"; 2869 } //End of Service-Label 2870 } //End of detnet-forwarding-type */ 2871 } //End of ip-mpls-service */ 2873 grouping ip-mpls-profile { 2874 choice detnet-forwarding-type { 2875 container ip { 2876 uses ip-incoming; 2877 } 2878 container mpls { 2879 uses mpls-incoming; 2880 } //End of mpls 2881 } //End of detnet-forwarding-type */ 2883 } // ip-mpls-profile */ 2885 grouping ip-mpls-incoming { 2886 leaf-list incoming-interface { 2887 type if:interface-ref; 2888 description 2889 "The name of the interface"; 2890 } 2891 choice detnet-forwarding-type { 2892 description "Traffic type"; 2893 container ip { 2894 description "IP encapsulation information"; 2895 uses ip-incoming; 2896 } 2897 container mpls { 2898 uses mpls-incoming; 2899 } //End of mpls 2900 } //End of detnet-forwarding-type */ 2901 } // ip-mpls-incoming */ 2903 grouping eth-ip-mpls-incoming { 2904 leaf-list incoming-interface { 2905 type if:interface-ref; 2906 description 2907 "The name of the interface"; 2908 } 2909 choice detnet-forwarding-type { 2910 description "Traffic type"; 2911 container ethernet { 2912 leaf placeholder { 2913 type string; 2914 description "Place holder for matching ethernet"; 2915 } 2916 } 2917 container ip { 2918 description "IP encapsulation information"; 2919 uses ip-incoming; 2920 } 2921 container mpls { 2922 uses mpls-incoming; 2923 } //End of mpls 2924 } //End of detnet-forwarding-type */ 2925 } // ip-mpls-incoming */ 2927 grouping service-group { 2928 leaf service-protection-type { 2929 type identityref { 2930 base service-protection-type; 2932 } 2933 description 2934 "The DetNet service protection type such as PRF, PEF, 2935 PEOF, PERF, and PEORF"; 2936 } 2937 leaf sequence_number_length { 2938 type uint8 { 2939 range "0 | 16 | 28"; 2940 } 2941 default 0; 2942 description 2943 "When the sequence number field length is 16 or 28 bits for 2944 a flow, the sequence number MUST be incremented by one for 2945 each new app-flow packet sent. When the field length is 16 2946 bits, d-CW bits 4 to 15 MUST be set to zero (0)."; 2947 } 2948 } 2950 container detnet { 2951 container applications { 2952 description 2953 "DetNet applications"; 2954 list app-list { 2955 key "name"; 2956 description 2957 "list of the DetNet configurations"; 2958 leaf name { 2959 type string; 2960 description 2961 "The name to identify the DetNet configuration"; 2962 } 2963 leaf app-id { 2964 type uint16; 2965 config false; 2966 description 2967 "The DetNet service ID"; 2968 reference 2969 "draft-ietf-detnet-flow-information-model-06 Section 6.1"; 2970 } 2971 leaf app-flow-bidir-congruent { 2972 type boolean; 2973 description 2974 "Defines the data path requirement of the App-flow 2975 whether it must share the same data path and physical 2976 path for both directions through the network, e.g., to 2977 provide congruent paths in the two directions."; 2978 } 2979 leaf service-outbound{ 2980 type service-ref; 2981 description "Binding to this applications outgoing 2982 service"; 2983 } 2984 leaf service-inbound{ 2985 type service-ref; 2986 description "Binding to this applications incoming 2987 service"; 2988 } 2989 uses traffic-requirements; 2990 uses traffic-specification; 2991 } 2992 list app-ingress { 2993 key "name"; 2994 description 2995 "Ingress DetNet application flows or a compound flow"; 2996 leaf name { 2997 type string; 2998 description 2999 "Ingress DetNet application"; 3000 } 3001 leaf app-flow-status { 3002 type identityref { 3003 base status; 3004 } 3005 config false; 3006 description "Status of ingress application flow"; 3007 } 3008 uses eth-ip-mpls-incoming; 3009 } //End of app-ingress 3010 list app-egress { 3011 key "name"; 3012 description 3013 "Ingress DetNet application flows or a compound flow"; 3014 leaf name { 3015 type string; 3016 description 3017 "Ingress DetNet application"; 3018 } 3019 leaf app-flow-status { 3020 type identityref { 3021 base status; 3022 } 3023 config false; 3024 description "Status of egress application flows"; 3025 } 3026 container next-hop { 3027 description 3028 "Route's next-hop attribute."; 3029 choice application-type { 3030 container ethernet { 3031 leaf ethernet-place-holder { 3032 type string; 3033 description "Place holder for matching ethernet"; 3034 } 3035 } 3036 container ip-mpls { 3037 uses next-hop-state-content; 3038 } 3039 } 3040 } 3041 } // End of app-egress 3042 } // End of applications 3043 container services { 3044 description 3045 "DetNet services"; 3046 list service-list { 3047 key "name"; 3048 description 3049 "list of the DetNet configurations"; 3050 leaf name { 3051 type string; 3052 description 3053 "The name to identify the DetNet configuration"; 3054 } 3055 leaf service-id { 3056 type uint16; 3057 config false; 3058 description 3059 "The DetNet service ID"; 3060 } 3061 leaf service-rank { 3062 type uint8; 3063 description 3064 "The DetNet rank for this service"; 3065 } 3066 container outbound{ 3067 leaf-list forward-sublayer-output { 3068 type fwd-sub-layer-output-ref; 3069 config false; 3070 } 3071 uses service-group; 3072 list application-input { 3073 key "name"; 3074 description 3075 "list of the DetNet applications"; 3076 leaf name { 3077 type application-ref; 3078 description 3079 "List of input applications"; 3080 } 3081 uses ip-mpls-service; 3082 } 3083 list prev-relay-services { 3084 key "name"; 3085 description 3086 "list of the DetNet applications"; 3087 leaf name { 3088 type service-ref; 3089 description 3090 "List of input applications"; 3091 } 3092 uses ip-mpls-service; 3093 } 3094 uses traffic-requirements; 3095 uses traffic-specification; 3096 } 3097 container inbound{ 3098 leaf-list forward-sublayer-input { 3099 type fwd-sub-layer-input-ref; 3100 config false; 3101 description 3102 "List of input forwarding sub-layer interfaces"; 3103 } 3104 uses service-group; 3105 list application-output { 3106 key "name"; 3107 description ""; 3108 leaf name { 3109 type application-ref; 3110 //config false; 3111 description 3112 "List of input applications"; 3113 } 3114 uses ip-mpls-service; 3115 } 3116 list next-relay-services { 3117 key "name"; 3118 description "The Next service"; 3119 leaf name { 3120 type service-ref; 3121 description "Binding to another service"; 3122 } 3123 uses ip-mpls-service; 3125 } 3126 } 3127 } // End of service-list 3128 } // End of services 3130 list fwd-sub-layer-input { 3131 key "name"; 3132 description 3133 "Incoming DetNet member flows or a compound flow 3134 for receiving a packet from a port"; 3135 leaf name { 3136 type string; 3137 description 3138 "Incoming DetNet sub-layer name"; 3139 } 3140 leaf-list incoming-interface { 3141 type if:interface-ref; 3142 description 3143 "The name of the interface"; 3144 } 3145 choice connectors { 3146 list services { 3147 key "name"; 3148 description "Binding to this sub-layer services"; 3149 leaf name { 3150 type service-ref; 3151 description "Binding to this sub-layer services"; 3152 } 3153 uses ip-mpls-profile; 3154 } 3155 list forwarding-sub-layers { 3156 key "name"; 3157 description "Binding to the next forwarding sub-layer "; 3158 leaf name { 3159 type fwd-sub-layer-output-ref; 3160 description "Binding to the next forwarding sub-layer "; 3161 } 3162 uses ip-mpls-profile; 3163 } 3164 } 3165 } //End of sub-layer 3166 list fwd-sub-layer-output { 3167 key "name"; 3168 description 3169 "Outgoing DetNet member flows or a compound flow 3170 for sending a packet to a port"; 3171 leaf name { 3172 type string; 3173 description 3174 "Outgoing DetNet sub-layer index"; 3175 } 3176 container connectors { 3177 leaf-list outbound-service { 3178 type service-ref; 3179 description "Binding to this sub-layer services"; 3180 } 3181 leaf-list prev-forward-sub-layer { 3182 type fwd-sub-layer-output-ref; 3183 description "Binding to the next forwarding sub-layer "; 3184 } 3185 } 3186 uses traffic-requirements; 3187 uses traffic-specification; 3188 container next-hop { 3189 description 3190 "IPv4 packet header encapsulation information"; 3191 uses next-hop-state-content; 3192 } 3193 } // End of out-segments 3194 } // End of detnet 3195 } // End of ietf-detnet-flow 3196 3198 7.4. Test Configuration 3200 The following XML test configuration shows some of the parameters for 3201 a DetNet application, service sub-layer and forwarding sub-layer. 3203 7.4.1. DetNet Test Configuration YANG Model 3205 The case illustrated is for an ingress IP application to an MPLS 3206 service sub-layer and MPLS forwarding sub-layer. In this example a 3207 unidirectional flow is configured. The application input traffic is 3208 IP. The Service links the application "app1", the service ID, a 3209 service label and the outgoing forwarding sublayer "fsl1". The 3210 service label is from the remote end serice for the unidirectional 3211 path. 3213 3221 3222 3223 app1 3224 false 3225 3226 3227 port1 3228 eth0 3229 3230 1.1.1.1/32 3231 2.2.2.2/32 3232 6 3233 40 3234 3235 3236 3237 3238 3239 ssl1 3240 10 3241 3242 fsl1 3243 0 3244 3245 app1 3246 55555 3247 3248 3249 100000000 3250 10000000 3251 2000000 3252 2 3253 5 3254 3255 0 3256 3257 3258 5 3259 10 3260 1500 3261 3262 3263 3264 3265 3266 fsl1 3267 3268 3269 1 3270 eth1 3271 3272 3273 1 3274 42 3275 5 3276 3277 3278 3279 3280 3281 3283 7.4.2. DetNet Test Configuration YANG Model 3285 The next case illustrated is for an egress IP application from an 3286 MPLS service sub-layer and MPLS forwarding sub-layer. In this 3287 example a unidirectional flow is configured. The application egress 3288 traffic is IP. The Service links the application "app2", the service 3289 ID, a service label and the outgoing forwarding sub-layer "fsl2". 3290 Again the service label is relevant to this egress service. The 3291 forwarding sub-layer has an mpls stack that it removes. The next 3292 label can be looked up because the forwarding sub-layer has a 3293 reference to any DetNet services and those services have registered 3294 the service label such that forwarding layer can forward to the 3295 respective service sub-layer. Since the service sub-layer label is 3296 unique to "app1" the service layer can forward the flow to the 3297 correct app1. While not illustrated a single service can associated 3298 multiple applications with a unique service label. 3300 3308 3309 3310 app2 3311 false 3312 3313 3314 port1 3315 3316 3317 3318 eth0 3319 3320 3321 3322 3323 3324 3325 ssl2 3326 10 3327 3328 fsl2 3329 0 3330 3331 app1 3332 55555 3333 3334 3335 3336 3337 3338 fsl2 3339 eth1 3340 3341 ssl2 3342 3343 3344 3345 3346 3347 1 3348 42 3349 5 3350 3351 3352 3353 3354 3355 3357 8. Open Issues 3359 There are some open issues that are still under discussion: 3361 o The name of 'in-segment' and 'out-segment' are still under 3362 discussion. These terms are used in YANG model for MPLS, but they 3363 may cause confusion in DetNet. 3365 o Whether application flow should be in service sub-layer is still 3366 under discussion. 3368 o Whether we are supposed to define a new YANG Model for DetNet as 3369 the current draft does, or we should augment the current YANG 3370 Model. 3372 These issues will be resolved in the following versions of the draft. 3374 9. IANA Considerations 3376 This document makes no request of IANA. 3378 Note to RFC Editor: this section may be removed on publication as an 3379 RFC. 3381 10. Security Considerations 3383 3385 11. Acknowledgements 3387 12. References 3389 12.1. Normative References 3391 [I-D.finn-detnet-bounded-latency] 3392 Finn, N., Boudec, J., Mohammadpour, E., Zhang, J., Varga, 3393 B., and J. Farkas, "DetNet Bounded Latency", draft-finn- 3394 detnet-bounded-latency-04 (work in progress), June 2019. 3396 [I-D.ietf-detnet-flow-information-model] 3397 Varga, B., Farkas, J., Cummings, R., Jiang, Y., and D. 3398 Fedyk, "DetNet Flow Information Model", draft-ietf-detnet- 3399 flow-information-model-10 (work in progress), May 2020. 3401 [I-D.ietf-detnet-ip] 3402 Varga, B., Farkas, J., Berger, L., Fedyk, D., and S. 3403 Bryant, "DetNet Data Plane: IP", draft-ietf-detnet-ip-06 3404 (work in progress), April 2020. 3406 [I-D.ietf-detnet-mpls] 3407 Varga, B., Farkas, J., Berger, L., Malis, A., Bryant, S., 3408 and J. Korhonen, "DetNet Data Plane: MPLS", draft-ietf- 3409 detnet-mpls-06 (work in progress), April 2020. 3411 [I-D.ietf-detnet-topology-yang] 3412 Geng, X., Chen, M., Li, Z., and R. Rahman, "Deterministic 3413 Networking (DetNet) Topology YANG Model", draft-ietf- 3414 detnet-topology-yang-00 (work in progress), January 2019. 3416 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 3417 Requirement Levels", BCP 14, RFC 2119, 3418 DOI 10.17487/RFC2119, March 1997, 3419 . 3421 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 3422 RFC 6991, DOI 10.17487/RFC6991, July 2013, 3423 . 3425 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 3426 RFC 7950, DOI 10.17487/RFC7950, August 2016, 3427 . 3429 [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, 3430 "Deterministic Networking Architecture", RFC 8655, 3431 DOI 10.17487/RFC8655, October 2019, 3432 . 3434 12.2. Informative References 3436 [I-D.geng-detnet-info-distribution] 3437 Geng, X., Chen, M., Li, Z., Qin, F., and L. Qiang, "IGP-TE 3438 Extensions for DetNet Information Distribution", draft- 3439 geng-detnet-info-distribution-04 (work in progress), July 3440 2019. 3442 [I-D.ietf-detnet-use-cases] 3443 Grossman, E., "Deterministic Networking Use Cases", draft- 3444 ietf-detnet-use-cases-20 (work in progress), December 3445 2018. 3447 [I-D.ietf-teas-yang-te] 3448 Saad, T., Gandhi, R., Liu, X., Beeram, V., and I. Bryskin, 3449 "A YANG Data Model for Traffic Engineering Tunnels and 3450 Interfaces", draft-ietf-teas-yang-te-23 (work in 3451 progress), March 2020. 3453 [I-D.ietf-teas-yang-te-topo] 3454 Liu, X., Bryskin, I., Beeram, V., Saad, T., Shah, H., and 3455 O. Dios, "YANG Data Model for Traffic Engineering (TE) 3456 Topologies", draft-ietf-teas-yang-te-topo-22 (work in 3457 progress), June 2019. 3459 [I-D.thubert-tsvwg-detnet-transport] 3460 Thubert, P., "A Transport Layer for Deterministic 3461 Networks", draft-thubert-tsvwg-detnet-transport-01 (work 3462 in progress), October 2017. 3464 [I-D.varga-detnet-service-model] 3465 Varga, B. and J. Farkas, "DetNet Service Model", draft- 3466 varga-detnet-service-model-02 (work in progress), May 3467 2017. 3469 [IEEE802.1CB] 3470 IEEE, "IEEE, "Frame Replication and Elimination for 3471 Reliability (IEEE Draft P802.1CB)", 2017, 3472 .", 3473 2016. 3475 [IEEE802.1Q-2014] 3476 "IEEE, "IEEE Std 802.1Q Bridges and Bridged Networks", 3477 2014, .", 3478 2014. 3480 [IEEE802.1Qbu] 3481 IEEE, "IEEE, "IEEE Std 802.1Qbu Bridges and Bridged 3482 Networks - Amendment 26: Frame Preemption", 2016, 3483 .", 2016. 3485 [IEEE802.1Qbv] 3486 "IEEE, "IEEE Std 802.1Qbu Bridges and Bridged Networks - 3487 Amendment 25: Enhancements for Scheduled Traffic", 2015, 3488 .", 2016. 3490 [IEEE802.1Qcc] 3491 IEEE, "IEEE, "Stream Reservation Protocol (SRP) 3492 Enhancements and Performance Improvements (IEEE Draft 3493 P802.1Qcc)", 2017, 3494 .". 3496 [IEEE802.1Qch] 3497 IEEE, "IEEE, "Cyclic Queuing and Forwarding (IEEE Draft 3498 P802.1Qch)", 2017, 3499 .", 3500 2016. 3502 [IEEE802.1Qci] 3503 IEEE, "IEEE, "Per-Stream Filtering and Policing (IEEE 3504 Draft P802.1Qci)", 2016, 3505 .", 3506 2016. 3508 [RFC3209] Awduche, D., Berger, L., Gan, D., Li, T., Srinivasan, V., 3509 and G. Swallow, "RSVP-TE: Extensions to RSVP for LSP 3510 Tunnels", RFC 3209, DOI 10.17487/RFC3209, December 2001, 3511 . 3513 [RFC4875] Aggarwal, R., Ed., Papadimitriou, D., Ed., and S. 3514 Yasukawa, Ed., "Extensions to Resource Reservation 3515 Protocol - Traffic Engineering (RSVP-TE) for Point-to- 3516 Multipoint TE Label Switched Paths (LSPs)", RFC 4875, 3517 DOI 10.17487/RFC4875, May 2007, 3518 . 3520 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 3521 and R. Wilton, "Network Management Datastore Architecture 3522 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 3523 . 3525 Authors' Addresses 3527 Xuesong Geng 3528 Huawei Technologies 3530 Email: gengxuesong@huawei.com 3532 Mach(Guoyi) Chen 3533 Huawei Technologies 3535 Email: mach.chen@huawei.com 3537 Yeoncheol Ryoo 3538 ETRI 3540 Email: dbduscjf@etri.re.kr 3542 Zhenqiang Li 3543 China Mobile 3545 Email: lizhenqiang@chinamobile.com 3547 Reshad Rahman 3548 Cisco Systems 3550 Email: rrahman@cisco.com 3551 Don Fedyk 3552 LabN Consulting, L.L.C. 3554 Email: dfedyk@labn.net