idnits 2.17.1 draft-ietf-detnet-yang-10.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 : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 302 has weird spacing: '...er-port ine...' == Line 303 has weird spacing: '...er-port ine...' == Line 310 has weird spacing: '...er-port ine...' == Line 311 has weird spacing: '...er-port ine...' -- The document date (February 18, 2021) is 1156 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) No issues found here. Summary: 0 errors (**), 0 flaws (~~), 5 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: August 22, 2021 Y. Ryoo 6 ETRI 7 D. Fedyk 8 LabN Consulting, L.L.C. 9 R. Rahman 10 Individual 11 Z. Li 12 China Mobile 13 February 18, 2021 15 Deterministic Networking (DetNet) YANG Model 16 draft-ietf-detnet-yang-10 18 Abstract 20 This document contains the specification for the Deterministic 21 Networking YANG Model for configuration and operational data for 22 DetNet Flows. The model allows for provisioning of end-to-end DetNet 23 service along the path without dependency on any signaling protocol. 24 It also specifies operational status for flows. 26 The YANG module defined in this document conforms to the Network 27 Management Datastore Architecture (NMDA). 29 Requirements Language 31 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 32 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 33 document are to be interpreted as described in RFC 2119 [RFC2119]. 35 Status of This Memo 37 This Internet-Draft is submitted in full conformance with the 38 provisions of BCP 78 and BCP 79. 40 Internet-Drafts are working documents of the Internet Engineering 41 Task Force (IETF). Note that other groups may also distribute 42 working documents as Internet-Drafts. The list of current Internet- 43 Drafts is at https://datatracker.ietf.org/drafts/current/. 45 Internet-Drafts are draft documents valid for a maximum of six months 46 and may be updated, replaced, or obsoleted by other documents at any 47 time. It is inappropriate to use Internet-Drafts as reference 48 material or to cite them other than as "work in progress." 49 This Internet-Draft will expire on August 22, 2021. 51 Copyright Notice 53 Copyright (c) 2021 IETF Trust and the persons identified as the 54 document authors. All rights reserved. 56 This document is subject to BCP 78 and the IETF Trust's Legal 57 Provisions Relating to IETF Documents 58 (https://trustee.ietf.org/license-info) in effect on the date of 59 publication of this document. Please review these documents 60 carefully, as they describe your rights and restrictions with respect 61 to this document. Code Components extracted from this document must 62 include Simplified BSD License text as described in Section 4.e of 63 the Trust Legal Provisions and are provided without warranty as 64 described in the Simplified BSD License. 66 Table of Contents 68 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 69 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 70 3. DetNet YANG Module . . . . . . . . . . . . . . . . . . . . . 3 71 3.1. DetNet Application Flow YANG Attributes . . . . . . . . . 3 72 3.2. DetNet Service Sub-layer YANG Attributes . . . . . . . . 3 73 3.3. DetNet Forwarding Sub-layer YANG Attributes . . . . . . . 4 74 4. DetNet Flow Aggregation . . . . . . . . . . . . . . . . . . . 4 75 5. DetNet YANG Structure Considerations . . . . . . . . . . . . 5 76 6. DetNet Configuration YANG Structures . . . . . . . . . . . . 6 77 7. DetNet Configuration YANG Model . . . . . . . . . . . . . . . 15 78 8. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 41 79 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41 80 10. Security Considerations . . . . . . . . . . . . . . . . . . . 42 81 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 42 82 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 42 83 12.1. Normative References . . . . . . . . . . . . . . . . . . 42 84 12.2. Informative References . . . . . . . . . . . . . . . . . 42 85 Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 42 86 A.1. Example JSON Configuration/Operational . . . . . . . . . 43 87 A.2. Example XML Config: Aggregation using a Forwarding 88 Sublayer . . . . . . . . . . . . . . . . . . . . . . . . 47 89 A.3. Example JSON Service Aggregation Configuration . . . . . 51 90 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 57 92 1. Introduction 94 DetNet (Deterministic Networking) provides a capability to carry 95 specified unicast or multicast data flows for real-time applications 96 with extremely low packet loss rates and assured maximum end-to-end 97 delivery latency. A description of the general background and 98 concepts of DetNet can be found in [RFC8655]. 100 This document defines a YANG model for DetNet based on YANG data 101 types and modeling language defined in [RFC6991] and [RFC7950]. 102 DetNet service, which is designed for describing the characteristics 103 of services being provided for application flows over a network, and 104 DetNet configuration, which is designed for DetNet flow path 105 establishment, flow status reporting, and DetNet functions 106 configuration in order to achieve end-to-end bounded latency and zero 107 congestion loss, are both included in this document. 109 2. Terminology 111 This document uses the terminology defined in [RFC8655]. 113 3. DetNet YANG Module 115 The DetNet YANG module includes DetNet App-flow, DetNet Service Sub- 116 layer, and DetNet Forwarding Sub-layer configuration and operational 117 objects. The corresponding attributes used in different sub-layers 118 are defined in Section 3.1, 3.2, 3.3 respectively. 120 3.1. DetNet Application Flow YANG Attributes 122 DetNet application flow is responsible for mapping between 123 application flows and DetNet flows at the edge node(egress/ingress 124 node). The the application flows can be either layer 2 or layer 3 125 flows. To map a flow at the User Network Interface (UNI), the 126 corresponding attributes are defined in 127 [I-D.ietf-detnet-flow-information-model]. 129 3.2. DetNet Service Sub-layer YANG Attributes 131 DetNet service functions, e.g., DetNet tunnel initialization/ 132 termination and service protection, are provided in the DetNet 133 service sub-layer. To support these functions, the following service 134 attributes need to be configured: 136 o DetNet flow identification 138 o Service function indication, indicates which service function will 139 be invoked at a DetNet edge, relay node or end station. (DetNet 140 tunnel initialization or termination are default functions in 141 DetNet service layer, so there is no need for explicit 142 indication). The corresponding arguments for service functions 143 also needs to be defined. 145 3.3. DetNet Forwarding Sub-layer YANG Attributes 147 As defined in [RFC8655], DetNet forwarding sub-layer optionally 148 provides congestion protection for DetNet flows over paths provided 149 by the underlying network. Explicit route is another mechanism that 150 is used by DetNet to avoid temporary interruptions caused by the 151 convergence of routing or bridging protocols, and it is also 152 implemented at the DetNet forwarding sub-layer. 154 To support congestion protection and explicit route, the following 155 transport layer related attributes are necessary: 157 o Flow Specification and Traffic Requirements, refers to 158 [I-D.ietf-detnet-flow-information-model]. These may used for 159 resource reservation, flow shaping, filtering and policing by a 160 control plane or other network management and control mechanisms. 162 o Since this model programs the data plane existing explicit route 163 mechanisms can be reused. If a static MPLS tunnel is used as the 164 transport tunnel, the configuration need to be at every transit 165 node along the path. For an IP based path, the static 166 configuration is similar to the static MPLS case. This document 167 provides data-plane configuration of IP addresses or MPLS labels 168 but it does not provide control plane mapping mapping or other 169 aspects. 171 4. DetNet Flow Aggregation 173 DetNet provides the capability of flow aggregation to improve 174 scaleability of DetNet data, management and control planes. 175 Aggregated flows can be viewed by the some DetNet nodes as individual 176 DetNet flows. When aggregating DetNet flows, the flows should be 177 compatible: if bandwidth reservations are used, the reservation 178 should be a reasonable representation of the individual reservations; 179 if maximum delay bounds are used, the system should ensure that the 180 aggregate does not exceed the delay bounds of the individual flows. 182 The DetNet YANG model defined in this document supports DetNet flow 183 aggregation with the following functions: 185 o Aggregation flow encapsulation/decapsulation/identification 187 o Mapping individual DetNet flows to an aggregated flow 189 o Changing traffic specification parameters for aggregated flow 191 The following cases of DetNet aggregation are supported: 193 o Ingress node aggregates App flows into a service sub-layer of 194 DetNet flow 196 o In ingress node, the service sub-layers of DetNet flows are 197 aggregated into a forwarding sub-layer 199 o In ingress node, the service sub-layers of DetNet flows are 200 aggregated into a service sub-layer of an aggregated DetNet flow 202 o Relay node aggregates the forwarding sub-layers DetNet flows into 203 a forwarding sub-layer 205 o Relay node aggregates the service sub-layers of DetNet flows into 206 a forwarding sub-layer 208 o Relay node aggregates the service sub-layers of DetNet flows into 209 a service sub-layer of Aggregated DetNet flow 211 o Relay node aggregates the forwarding sub-layers of DetNet flow 212 into a service sub-layer of Aggregated DetNet flow 214 o Transit node aggregates the forwarding sub-layers of DetNet flows 215 into a forwarding sub-layer 217 Traffic requirements and traffic specification may be tracked for 218 individual or aggregate flows but reserving resources and tracking 219 the services in the aggregated flow is out of scope. 221 5. DetNet YANG Structure Considerations 223 The picture shows that the general structure of the DetNet YANG 224 Model: 226 +-----------+ 227 |ietf-detnet| 228 +-----+-----+ 229 | 230 +-------------+---------------+-------------------+ 231 | | | | 232 +-----+-----+ +-----+-----+ +-------+------+ | 233 | App Flows | |service s-l| |forwarding s-l| | 234 +-----+-----+ +-----+-----+ +-------+------+ | 235 | | | | 236 +-----+-----+ +-----+-----+ +-------+------+ +--------+-------+ 237 | Ref to TR | | Ref to TR | | Ref to TR | | Traffic Profile| 238 +-----------+ +-----------+ +--------------+ +----------------+ 240 There are three instances in DetNet YANG Model: App-flow instance, 241 service sub-layer instance and forwarding sub-layer instance, 242 respectively corresponding to four parts of DetNet functions defined 243 in section 3. 245 6. DetNet Configuration YANG Structures 247 module: ietf-detnet 248 +--rw detnet 249 +--rw traffic-profile* [profile-name] 250 | +--rw profile-name string 251 | +--rw traffic-requirements 252 | | +--rw min-bandwidth? uint64 253 | | +--rw max-latency? uint32 254 | | +--rw max-latency-variation? uint32 255 | | +--rw max-loss? uint32 256 | | +--rw max-consecutive-loss-tolerance? uint32 257 | | +--rw max-misordering? uint32 258 | +--rw flow-spec 259 | | +--rw interval? uint32 260 | | +--rw max-pkts-per-interval? uint32 261 | | +--rw max-payload-size? uint32 262 | | +--rw min-payload-size? uint32 263 | | +--rw min-pkts-per-interval? uint32 264 | +--ro member-apps* app-flow-ref 265 | +--ro member-services* service-sub-layer-ref 266 | +--ro member-fwd-sublayers* forwarding-sub-layer-ref 267 +--rw app-flows 268 | +--rw app-flow* [name] 269 | +--rw name string 270 | +--rw app-flow-bidir-congruent? boolean 271 | +--ro outgoing-service? service-sub-layer-ref 272 | +--ro incoming-service? service-sub-layer-ref 273 | +--rw traffic-profile? traffic-profile-ref 274 | +--rw ingress 275 | | +--rw name? string 276 | | +--ro app-flow-status? identityref 277 | | +--rw interface? if:interface-ref 278 | | +--rw (data-flow-type)? 279 | | +--:(tsn-app-flow) 280 | | | +--rw tsn-app-flow 281 | | | +--rw source-mac-address? 282 | | | | yang:mac-address 283 | | | +--rw destination-mac-address? 284 | | | | yang:mac-address 285 | | | +--rw ethertype? 286 | | | | ethertypes:ethertype 287 | | | +--rw vlan-id? 288 | | | | dot1q-types:vlanid 289 | | | +--rw pcp? 290 | | | dot1q-types:priority-type 291 | | +--:(ip-app-flow) 292 | | | +--rw ip-app-flow 293 | | | +--rw src-ip-prefix? inet:ip-prefix 294 | | | +--rw dest-ip-prefix? inet:ip-prefix 295 | | | +--rw protocol-next-header? uint8 296 | | | +--rw dscp? inet:dscp 297 | | | +--rw flow-label? 298 | | | | inet:ipv6-flow-label 299 | | | +--rw source-port 300 | | | | +--rw (port-range-or-operator)? 301 | | | | +--:(range) 302 | | | | | +--rw lower-port inet:port-number 303 | | | | | +--rw upper-port inet:port-number 304 | | | | +--:(operator) 305 | | | | +--rw operator? operator 306 | | | | +--rw port inet:port-number 307 | | | +--rw destination-port 308 | | | | +--rw (port-range-or-operator)? 309 | | | | +--:(range) 310 | | | | | +--rw lower-port inet:port-number 311 | | | | | +--rw upper-port inet:port-number 312 | | | | +--:(operator) 313 | | | | +--rw operator? operator 314 | | | | +--rw port inet:port-number 315 | | | +--rw ipsec-spi? ipsec-spi 316 | | +--:(mpls-app-flow) 317 | | +--rw mpls-app-flow 318 | | +--rw (label-space)? 319 | | +--:(context-label-space) 320 | | | +--rw mpls-label-stack 321 | | | +--rw entry* [id] 322 | | | +--rw id uint8 323 | | | +--rw label? 324 | | | | rt-types:mpls-label 325 | | | +--rw ttl? uint8 326 | | | +--rw traffic-class? uint8 327 | | +--:(platform-label-space) 328 | | +--rw label? 329 | | rt-types:mpls-label 330 | +--rw egress 331 | +--rw name? string 332 | +--rw (application-type)? 333 | +--:(ethernet) 334 | | +--rw ethernet 335 | | +--rw interface? if:interface-ref 336 | +--:(ip-mpls) 337 | +--rw ip-mpls 338 | +--rw (next-hop-options) 339 | +--:(simple-next-hop) 340 | | +--rw outgoing-interface? 341 | | | if:interface-ref 342 | | +--rw (flow-type)? 343 | | +--:(ip) 344 | | | +--rw next-hop-address? 345 | | | inet:ip-address 346 | | +--:(mpls) 347 | | +--rw mpls-label-stack 348 | | +--rw entry* [id] 349 | | +--rw id uint8 350 | | +--rw label? 351 | | | rt-types:mpls-label 352 | | +--rw ttl? uint8 353 | | +--rw traffic-class? uint8 354 | +--:(next-hop-list) 355 | +--rw next-hop* [hop-index] 356 | +--rw hop-index uint8 357 | +--rw outgoing-interface? 358 | | if:interface-ref 359 | +--rw (flow-type)? 360 | +--:(ip) 361 | | +--rw next-hop-address? 362 | | inet:ip-address 363 | +--:(mpls) 364 | +--rw mpls-label-stack 365 | +--rw entry* [id] 366 | +--rw id 367 | | uint8 368 | +--rw label? 369 | | rt-types:mpls-label 370 | +--rw ttl? 371 | | uint8 372 | +--rw traffic-class? 373 | uint8 374 +--rw service-sub-layer 375 | +--rw service-sub-layer-list* [name] 376 | +--rw name string 377 | +--rw service-rank? uint8 378 | +--rw traffic-profile? traffic-profile-ref 379 | +--rw service-protection 380 | | +--rw service-protection-type? service-protection-type 381 | | +--rw sequence-number-length? sequence-number-field 382 | +--rw service-operation-type? service-operation-type 383 | +--rw incoming-type 384 | | +--rw (incoming-type) 385 | | +--:(app-flow) 386 | | | +--rw app-flow 387 | | | +--rw app-flow-list* app-flow-ref 388 | | +--:(service-aggregation) 389 | | | +--rw service-aggregation 390 | | | +--rw service-sub-layer* 391 | | | service-sub-layer-ref 392 | | +--:(forwarding-aggregation) 393 | | | +--rw forwarding-aggregation 394 | | | +--rw forwarding-sub-layer* 395 | | | forwarding-sub-layer-ref 396 | | +--:(service-id) 397 | | +--rw service-id 398 | | +--rw (detnet-flow-type)? 399 | | +--:(ip-detnet-flow) 400 | | | +--rw src-ip-prefix? 401 | | | | inet:ip-prefix 402 | | | +--rw dest-ip-prefix? 403 | | | | inet:ip-prefix 404 | | | +--rw protocol-next-header? uint8 405 | | | +--rw dscp? inet:dscp 406 | | | +--rw flow-label? 407 | | | | inet:ipv6-flow-label 408 | | | +--rw source-port 409 | | | | +--rw (port-range-or-operator)? 410 | | | | +--:(range) 411 | | | | | +--rw lower-port 412 | | | | | | inet:port-number 413 | | | | | +--rw upper-port 414 | | | | | inet:port-number 415 | | | | +--:(operator) 416 | | | | +--rw operator? operator 417 | | | | +--rw port 418 | | | | inet:port-number 419 | | | +--rw destination-port 420 | | | | +--rw (port-range-or-operator)? 421 | | | | +--:(range) 422 | | | | | +--rw lower-port 423 | | | | | | inet:port-number 424 | | | | | +--rw upper-port 425 | | | | | inet:port-number 426 | | | | +--:(operator) 427 | | | | +--rw operator? operator 428 | | | | +--rw port 429 | | | | inet:port-number 430 | | | +--rw ipsec-spi? ipsec-spi 431 | | +--:(mpls-detnet-flow) 432 | | +--rw (label-space)? 433 | | +--:(context-label-space) 434 | | | +--rw mpls-label-stack 435 | | | +--rw entry* [id] 436 | | | +--rw id uint8 437 | | | +--rw label? 438 | | | | rt-types:mpls-label 439 | | | +--rw ttl? uint8 440 | | | +--rw traffic-class? uint8 441 | | +--:(platform-label-space) 442 | | +--rw label? 443 | | rt-types:mpls-label 444 | +--rw outgoing-type 445 | +--rw (outgoing-type) 446 | +--:(forwarding-sub-layer) 447 | | +--rw forwarding-sub-layer 448 | | +--rw service-outgoing-list* 449 | | [service-outgoing-index] 450 | | +--rw service-outgoing-index uint8 451 | | +--rw (header-type)? 452 | | | +--:(detnet-mpls-header) 453 | | | | +--rw mpls-label-stack 454 | | | | +--rw entry* [id] 455 | | | | +--rw id uint8 456 | | | | +--rw label? 457 | | | | | rt-types:mpls-label 458 | | | | +--rw ttl? uint8 459 | | | | +--rw traffic-class? uint8 460 | | | +--:(detnet-ip-header) 461 | | | +--rw src-ip-address? 462 | | | | inet:ip-address 463 | | | +--rw dest-ip-address? 464 | | | | inet:ip-address 465 | | | +--rw protocol-next-header? uint8 466 | | | +--rw dscp? 467 | | | | inet:dscp 468 | | | +--rw flow-label? 469 | | | | inet:ipv6-flow-label 470 | | | +--rw source-port? 471 | | | | inet:port-number 472 | | | +--rw destination-port? 473 | | | inet:port-number 474 | | +--rw forwarding-sub-layer* 475 | | forwarding-sub-layer-ref 476 | +--:(service-sub-layer) 477 | | +--rw service-sub-layer 478 | | +--rw aggregation-service-sub-layer? 479 | | | service-sub-layer-ref 480 | | +--rw service-label 481 | | +--rw mpls-label-stack 482 | | +--rw entry* [id] 483 | | +--rw id uint8 484 | | +--rw label? 485 | | | rt-types:mpls-label 486 | | +--rw ttl? uint8 487 | | +--rw traffic-class? uint8 488 | +--:(app-flow) 489 | | +--rw app-flow 490 | | +--rw app-flow-list* app-flow-ref 491 | +--:(service-disaggregation) 492 | | +--rw service-disaggregation 493 | | +--rw service-sub-layer* 494 | | service-sub-layer-ref 495 | +--:(forwarding-disaggregation) 496 | +--rw forwarding-disaggregation 497 | +--rw forwarding-sub-layer* 498 | forwarding-sub-layer-ref 499 +--rw forwarding-sub-layer 500 +--rw forwarding-sub-layer-list* [name] 501 +--rw name string 502 +--rw traffic-profile? traffic-profile-ref 503 +--rw forwarding-operation-type? 504 | forwarding-operations-type 505 +--rw incoming-type 506 | +--rw (incoming-type) 507 | +--:(service-sub-layer) 508 | | +--rw service-sub-layer 509 | | +--rw service-sub-layer* 510 | | service-sub-layer-ref 511 | +--:(forwarding-aggregation) 512 | | +--rw forwarding-aggregation 513 | | +--rw forwarding-sub-layer* 514 | | forwarding-sub-layer-ref 515 | +--:(forwarding-id) 516 | +--rw forwarding-id 517 | +--rw interface? 518 | | if:interface-ref 519 | +--rw (detnet-flow-type)? 520 | +--:(ip-detnet-flow) 521 | | +--rw src-ip-prefix? 522 | | | inet:ip-prefix 523 | | +--rw dest-ip-prefix? 524 | | | inet:ip-prefix 525 | | +--rw protocol-next-header? uint8 526 | | +--rw dscp? inet:dscp 527 | | +--rw flow-label? 528 | | | inet:ipv6-flow-label 529 | | +--rw source-port 530 | | | +--rw (port-range-or-operator)? 531 | | | +--:(range) 532 | | | | +--rw lower-port 533 | | | | | inet:port-number 534 | | | | +--rw upper-port 535 | | | | inet:port-number 536 | | | +--:(operator) 537 | | | +--rw operator? operator 538 | | | +--rw port 539 | | | inet:port-number 540 | | +--rw destination-port 541 | | | +--rw (port-range-or-operator)? 542 | | | +--:(range) 543 | | | | +--rw lower-port 544 | | | | | inet:port-number 545 | | | | +--rw upper-port 546 | | | | inet:port-number 547 | | | +--:(operator) 548 | | | +--rw operator? operator 549 | | | +--rw port 550 | | | inet:port-number 551 | | +--rw ipsec-spi? ipsec-spi 552 | +--:(mpls-detnet-flow) 553 | +--rw (label-space)? 554 | +--:(context-label-space) 555 | | +--rw mpls-label-stack 556 | | +--rw entry* [id] 557 | | +--rw id uint8 558 | | +--rw label? 559 | | | rt-types:mpls-label 560 | | +--rw ttl? uint8 561 | | +--rw traffic-class? uint8 562 | +--:(platform-label-space) 563 | +--rw label? 564 | rt-types:mpls-label 565 +--rw outgoing-type 566 +--rw (outgoing-type) 567 +--:(interface) 568 | +--rw interface 569 | +--rw (next-hop-options) 570 | +--:(simple-next-hop) 571 | | +--rw outgoing-interface? 572 | | | if:interface-ref 573 | | +--rw (flow-type)? 574 | | +--:(ip) 575 | | | +--rw (operation-type)? 576 | | | +--:(ip-forwarding) 577 | | | | +--rw next-hop-address? 578 | | | | inet:ip-address 579 | | | +--:(mpls-over-ip-encapsulation) 580 | | | +--rw src-ip-address? 581 | | | | inet:ip-address 582 | | | +--rw dest-ip-address? 583 | | | | inet:ip-address 584 | | | +--rw protocol-next-header? 585 | | | | uint8 586 | | | +--rw dscp? 587 | | | | inet:dscp 588 | | | +--rw flow-label? 589 | | | | inet:ipv6-flow-label 590 | | | +--rw source-port? 591 | | | | inet:port-number 592 | | | +--rw destination-port? 593 | | | inet:port-number 594 | | +--:(mpls) 595 | | +--rw mpls-label-stack 596 | | +--rw entry* [id] 597 | | +--rw id uint8 598 | | +--rw label? 599 | | | rt-types:mpls-label 600 | | +--rw ttl? uint8 601 | | +--rw traffic-class? uint8 602 | +--:(next-hop-list) 603 | +--rw next-hop* [hop-index] 604 | +--rw hop-index 605 | | uint8 606 | +--rw outgoing-interface? 607 | | if:interface-ref 608 | +--rw (flow-type)? 609 | +--:(ip) 610 | | +--rw (operation-type)? 611 | | +--:(ip-forwarding) 612 | | | +--rw next-hop-address? 613 | | | inet:ip-address 614 | | +--:(mpls-over-ip- 615 | | encapsulation) 616 | | +--rw src-ip-address? 617 | | | inet:ip-address 618 | | +--rw dest-ip-address? 619 | | | inet:ip-address 620 | | +--rw protocol-next-header? 621 | | | uint8 622 | | +--rw dscp? 623 | | | inet:dscp 624 | | +--rw flow-label? 625 | | | inet:ipv6-flow-label 626 | | +--rw source-port? 627 | | | inet:port-number 628 | | +--rw destination-port? 629 | | inet:port-number 630 | +--:(mpls) 631 | +--rw mpls-label-stack 632 | +--rw entry* [id] 633 | +--rw id 634 | | uint8 635 | +--rw label? 636 | | rt-types:mpls-label 637 | +--rw ttl? 638 | | uint8 639 | +--rw traffic-class? 640 | uint8 641 +--:(service-aggregation) 642 | +--rw service-aggregation 643 | +--rw aggregation-service-sub-layer? 644 | | service-sub-layer-ref 645 | +--rw optional-forwarding-label 646 | +--rw mpls-label-stack 647 | +--rw entry* [id] 648 | +--rw id uint8 649 | +--rw label? 650 | | rt-types:mpls-label 651 | +--rw ttl? uint8 652 | +--rw traffic-class? uint8 653 +--:(forwarding-sub-layer) 654 | +--rw forwarding-sub-layer 655 | +--rw aggregation-forwarding-sub-layer? 656 | | forwarding-sub-layer-ref 657 | +--rw forwarding-label 658 | +--rw mpls-label-stack 659 | +--rw entry* [id] 660 | +--rw id uint8 661 | +--rw label? 662 | | rt-types:mpls-label 663 | +--rw ttl? uint8 664 | +--rw traffic-class? uint8 665 +--:(service-sub-layer) 666 | +--rw service-sub-layer 667 | +--rw service-sub-layer* 668 | service-sub-layer-ref 669 +--:(forwarding-disaggregation) 670 +--rw forwarding-disaggregation 671 +--rw forwarding-sub-layer* 672 forwarding-sub-layer-ref 674 7. DetNet Configuration YANG Model 676 677 module ietf-detnet { 678 yang-version 1.1; 679 namespace "urn:ietf:params:xml:ns:yang:ietf-detnet"; 680 prefix ietf-detnet; 682 import ietf-yang-types { 683 prefix yang; 684 reference 685 "RFC 6021 - Common YANG Data Types."; 686 } 687 import ietf-inet-types { 688 prefix inet; 689 reference 690 "RFC 6991 - Common YANG Data Types."; 691 } 692 import ietf-ethertypes { 693 prefix ethertypes; 694 reference 695 "RFC 8519 - YANG Data Model for Network Access Control 696 Lists (ACLs)."; 697 } 698 import ietf-routing-types { 699 prefix rt-types; 700 reference 701 "RFC 8294 - Common YANG Data Types for the Routing Area."; 702 } 703 import ietf-packet-fields { 704 prefix packet-fields; 705 reference 706 "RFC 8519 - YANG Data Model for Network Access Control Lists 707 (ACLs)."; 708 } 709 import ietf-interfaces { 710 prefix if; 711 reference 712 "RFC 8343 - A YANG Data Model for Interface Management."; 713 } 714 import ieee802-dot1q-types { 715 prefix dot1q-types; 716 reference 717 "IEEE 802.1Qcx-2020 - IEEE Standard for Local and Metropolitan 718 Area Networks--Bridges and Bridged Networks Amendment 33: YANG 719 Data Model for Connectivity Fault Management."; 721 } 723 organization 724 "IETF DetNet Working Group"; 725 contact 726 "WG Web: 727 WG List: 729 Editor: Xuesong Geng 730 732 Editor: Yeoncheol Ryoo 733 735 Editor: Don Fedyk 736 ; 738 Editor: Reshad Rahman 739 741 Editor: Mach Chen 742 744 Editor: Zhenqiang Li 745 "; 746 description 747 "This YANG module describes the parameters needed 748 for DetNet flow configuration and flow status 749 reporting."; 751 revision 2021-02-17 { 752 description 753 "initial revision"; 754 reference 755 "RFC XXXX: draft-ietf-detnet-yang-10"; 756 } 758 identity app-status { 759 description 760 "Base identity from which all application-status 761 status types are derived."; 762 reference 763 "draft-ietf-detnet-flow-information-model Section 5.8"; 764 } 766 identity none { 767 base app-status; 768 description 769 "This Application has no status. This type of status is 770 expected when the configuration is incomplete."; 771 reference 772 "draft-ietf-detnet-flow-information-model Section 5.8"; 773 } 775 identity ready { 776 base app-status; 777 description 778 "Application ingress/egress ready."; 779 reference 780 "draft-ietf-detnet-flow-information-model Section 5.8"; 781 } 783 identity failed { 784 base app-status; 785 description 786 "Application ingres/egresss failed."; 787 reference 788 "draft-ietf-detnet-flow-information-model Section 5.8"; 789 } 791 identity out-of-service { 792 base app-status; 793 description 794 "Application Administratively blocked."; 795 reference 796 "draft-ietf-detnet-flow-information-model Section 5.8"; 797 } 799 identity partial-failed { 800 base app-status; 801 description 802 "This is an Application with one or more Egress ready, and one 803 or more Egress failed. The DetNet flow can be used if the 804 Ingress is Ready."; 805 reference 806 "draft-ietf-detnet-flow-information-model Section 5.8"; 807 } 809 typedef app-flow-ref { 810 type leafref { 811 path "/ietf-detnet:detnet" 812 + "/ietf-detnet:app-flows" 813 + "/ietf-detnet:app-flow" 814 + "/ietf-detnet:name"; 815 } 816 } 817 typedef service-sub-layer-ref { 818 type leafref { 819 path "/ietf-detnet:detnet" 820 + "/ietf-detnet:service-sub-layer" 821 + "/ietf-detnet:service-sub-layer-list" 822 + "/ietf-detnet:name"; 823 } 824 } 826 typedef forwarding-sub-layer-ref { 827 type leafref { 828 path "/ietf-detnet:detnet" 829 + "/ietf-detnet:forwarding-sub-layer" 830 + "/ietf-detnet:forwarding-sub-layer-list" 831 + "/ietf-detnet:name"; 832 } 833 } 835 typedef traffic-profile-ref { 836 type leafref { 837 path "/ietf-detnet:detnet" 838 + "/ietf-detnet:traffic-profile" 839 + "/ietf-detnet:profile-name"; 840 } 841 } 843 typedef ipsec-spi { 844 type uint32 { 845 range "1..max"; 846 } 847 description 848 "IPsec Security Parameters Index."; 849 reference 850 "IETF RFC 6071"; 851 } 853 typedef service-operation-type { 854 type enumeration { 855 enum service-initiation { 856 description 857 "This is an initiating service sub-layer encapsulation. "; 858 } 859 enum service-termination { 860 description 861 "Operation for DetNet service sub-layer decapsulation."; 862 } 863 enum service-relay { 864 description 865 "Operation for DetNet service sub-layer swap."; 866 } 867 enum non-detnet { 868 description 869 "No operation for DetNet service sub-layer."; 870 } 871 } 872 description 873 "Operation type identifies the behavior for this service 874 sub-layer instance. Operations are described as unidirectional 875 but a service sub-layer may combine operation types."; 876 } 878 typedef forwarding-operations-type { 879 type enumeration { 880 enum impose-and-forward { 881 description 882 "This operation impose outgoing label(s) and forward to 883 next-hop."; 884 reference 885 " A YANG Data Model for MPLS Base 886 draft-ietf-mpls-base-yang."; 887 } 888 enum pop-and-forward { 889 description 890 "This operation pops the incoming label and forwards to 891 the next-hop."; 892 reference 893 " A YANG Data Model for MPLS Base 894 draft-ietf-mpls-base-yang"; 895 } 896 enum pop-impose-and-forward { 897 description 898 "This operation pops the incoming label, imposes one or 899 more outgoing label(s) and forwards to the next-hop."; 900 reference 901 " A YANG Data Model for MPLS Base 902 draft-ietf-mpls-base-yang."; 903 } 904 enum swap-and-forward { 905 description 906 "This operation swaps incoming label, with an outgoing 907 label and forwards to the next-hop."; 908 reference 909 " A YANG Data Model for MPLS Base 910 draft-ietf-mpls-base-yang"; 911 } 912 enum forward { 913 description 914 "This operation forward to next-hop."; 915 } 916 enum pop-and-lookup { 917 description 918 "This operation pops incoming label and performs a 919 lookup."; 920 } 921 } 922 description 923 "MPLS operations types. This is an enum modeled after the 924 MPLS enum. The first 4 enums are the same as A YANG Data 925 Model for MPLS Base. draft-ietf-mpls-base-yang."; 926 } 928 typedef service-protection-type { 929 type enumeration { 930 enum none { 931 description 932 "No service protection provided."; 933 } 934 enum replication { 935 description 936 "A Packet Replication Function (PRF) replicates DetNet 937 flow packets and forwards them to one or more next hops in 938 the DetNet domain. The number of packet copies sent to 939 each next hop is a DetNet flow specific parameter at the 940 node doing the replication. PRF can be implemented by an 941 edge node, a relay node, or an end system."; 942 } 943 enum elimination { 944 description 945 "A Packet Elimination Function (PEF) eliminates duplicate 946 copies of packets to prevent excess packets flooding the 947 network or duplicate packets being sent out of the DetNet 948 domain. PEF can be implemented by an edge node, a relay 949 node, or an end system."; 950 } 951 enum ordering { 952 description 953 "A Packet Ordering Function (POF) re-orders packets within 954 a DetNet flow that are received out of order. This 955 function can be implemented by an edge node, a relay node, 956 or an end system."; 957 } 958 enum elimination-ordering { 959 description 960 "A combination of PEF and POF that can be implemented by 961 an edge node, a relay node, or an end system."; 962 } 963 enum elimination-replication { 964 description 965 "A combination of PEF and PRF that can be implemented by 966 an edge node, a relay node, or an end system."; 967 } 968 enum elimination-ordering-replicaiton { 969 description 970 "A combination of PEF, POF and PRF that can be implemented 971 by an edge node, a relay node, or an end system."; 972 } 973 } 974 } 976 typedef sequence-number-generation-type { 977 type enumeration { 978 enum copy-from-app-flow { 979 description 980 "This type means copy the app-flow sequence number to the 981 DetNet-flow."; 982 } 983 enum generate-by-detnet-flow { 984 description 985 "This type means generate the sequence number by the 986 DetNet flow."; 987 } 988 } 989 description 990 "An enumeration for the sequence number behaviors supported."; 991 } 993 typedef sequence-number-field { 994 type enumeration { 995 enum zero-sn { 996 description 997 "No DetNet sequence number field is used."; 998 } 999 enum short-sn { 1000 value 16; 1001 description 1002 "A 16-bit DetNet sequence number field is used."; 1003 } 1004 enum long-sn { 1005 value 28; 1006 description 1007 "A 28-bit DetNet sequence number field is used."; 1008 } 1010 } 1011 description 1012 "This type captures the sequence number behavior."; 1013 } 1015 grouping ip-header { 1016 description 1017 "This grouping captures the IPv4/IPv6 packet header 1018 information. it is modeled after existing fields"; 1019 leaf src-ip-address { 1020 type inet:ip-address; 1021 description 1022 "The source IP address in the header."; 1023 reference 1024 "RFC 6021 Common YANG Data Types"; 1025 } 1026 leaf dest-ip-address { 1027 type inet:ip-address; 1028 description 1029 "The destination IP address in the header."; 1030 reference 1031 "RFC 6021 Common YANG Data Types"; 1032 } 1033 leaf protocol-next-header { 1034 type uint8; 1035 description 1036 "Internet Protocol number. Refers to the protocol of the 1037 payload. In IPv6, this field is known as 'next-header', 1038 and if extension headers are present, the protocol is 1039 present in the 'upper-layer' header."; 1040 reference 1041 "RFC 791: Internet Protocol 1042 RFC 8200: Internet Protocol, Version 6 (IPv6) Specification."; 1043 } 1044 leaf dscp { 1045 type inet:dscp; 1046 description 1047 "The traffic class value in the header."; 1048 reference 1049 "RFC 6021 Common YANG Data Types"; 1050 } 1051 leaf flow-label { 1052 type inet:ipv6-flow-label; 1053 description 1054 "The flow label value of the header.IPV6 only."; 1055 reference 1056 "RFC 6021 Common YANG Data Types"; 1057 } 1058 leaf source-port { 1059 type inet:port-number; 1060 description 1061 "The source port number"; 1062 reference 1063 "RFC 6021 Common YANG Data Types"; 1064 } 1065 leaf destination-port { 1066 type inet:port-number; 1067 description 1068 "The destination port number."; 1069 reference 1070 "RFC 6021 Common YANG Data Types"; 1071 } 1072 } 1074 grouping l2-header { 1075 description 1076 "The Ethernet or TSN packet header information"; 1077 leaf source-mac-address { 1078 type yang:mac-address; 1079 description 1080 "The source MAC address value of the Ethernet header."; 1081 } 1082 leaf destination-mac-address { 1083 type yang:mac-address; 1084 description 1085 "The destination MAC address value of the Ethernet header."; 1086 } 1087 leaf ethertype { 1088 type ethertypes:ethertype; 1089 description 1090 "The Ethernet packet type value of the Ethernet header."; 1091 } 1092 leaf vlan-id { 1093 type dot1q-types:vlanid; 1094 description 1095 "The VLAN value of the Ethernet header."; 1096 reference 1097 "IEEE 802.1Qcx-2020."; 1098 } 1099 leaf pcp { 1100 type dot1q-types:priority-type; 1101 description 1102 "The priority value of the Ethernet header."; 1103 reference 1104 "IEEE 802.1Qcx-2020."; 1105 } 1107 } 1109 grouping destination-ip-port-id { 1110 description 1111 "The TCP/UDP port(source/destination) identification 1112 information."; 1113 container destination-port { 1114 uses packet-fields:port-range-or-operator; 1115 } 1116 } 1118 grouping source-ip-port-id { 1119 description 1120 "The TCP/UDP port(source/destination) identification 1121 information."; 1122 container source-port { 1123 uses packet-fields:port-range-or-operator; 1124 } 1125 } 1127 grouping ip-flow-id { 1128 description 1129 "The IPv4/IPv6 packet header identification information."; 1130 leaf src-ip-prefix { 1131 type inet:ip-prefix; 1132 description 1133 "The source IP prefix"; 1134 reference 1135 "RFC 6021 Common YANG Data Types"; 1136 } 1137 leaf dest-ip-prefix { 1138 type inet:ip-prefix; 1139 description 1140 "The destination IP prefix"; 1141 reference 1142 "RFC 6021 Common YANG Data Types"; 1143 } 1144 leaf protocol-next-header { 1145 type uint8; 1146 description 1147 "Internet Protocol number. Refers to the protocol of the 1148 payload. In IPv6, this field is known as 'next-header', and 1149 if extension headers are present, the protocol is present in 1150 the 'upper-layer' header."; 1151 reference 1152 "RFC 791: Internet Protocol 1153 RFC 8200: Internet Protocol, Version 6 (IPv6) Specification."; 1154 } 1155 leaf dscp { 1156 type inet:dscp; 1157 description 1158 "The traffic class value in the header."; 1159 reference 1160 "RFC 6021 Common YANG Data Types"; 1161 } 1162 leaf flow-label { 1163 type inet:ipv6-flow-label; 1164 description 1165 "The flow label value of the header."; 1166 reference 1167 "RFC 6021 Common YANG Data Types"; 1168 } 1169 uses source-ip-port-id; 1170 uses destination-ip-port-id; 1171 leaf ipsec-spi { 1172 type ipsec-spi; 1173 description 1174 "IPsec Security Parameters Index of the Security Association."; 1175 reference 1176 "IETF RFC 6071 IP Security (IPsec) and Internet Key Exchange 1177 (IKE) Document Roadmap."; 1178 } 1179 } 1181 grouping mpls-flow-id { 1182 description 1183 "The MPLS packet header identification information."; 1184 choice label-space { 1185 description 1186 "Designates the label space being used."; 1187 case context-label-space { 1188 uses rt-types:mpls-label-stack; 1189 } 1190 case platform-label-space { 1191 leaf label { 1192 type rt-types:mpls-label; 1193 } 1194 } 1195 } 1196 } 1198 grouping data-flow-spec { 1199 description 1200 "app-flow identification"; 1201 choice data-flow-type { 1202 container tsn-app-flow { 1203 uses l2-header; 1204 } 1205 container ip-app-flow { 1206 uses ip-flow-id; 1207 } 1208 container mpls-app-flow { 1209 uses mpls-flow-id; 1210 } 1211 } 1212 } 1214 grouping detnet-flow-spec { 1215 description 1216 "detnet-flow identification."; 1217 choice detnet-flow-type { 1218 case ip-detnet-flow { 1219 uses ip-flow-id; 1220 } 1221 case mpls-detnet-flow { 1222 uses mpls-flow-id; 1223 } 1224 } 1225 } 1227 grouping app-flows-group { 1228 description 1229 "Incoming or outgoing app-flow reference group."; 1230 leaf-list app-flow-list { 1231 type app-flow-ref; 1232 description 1233 "List of ingress or egress app-flows."; 1234 } 1235 } 1237 grouping service-sub-layer-group { 1238 description 1239 "Incoming or outgoing service sub-layer reference group."; 1240 leaf-list service-sub-layer { 1241 type service-sub-layer-ref; 1242 description 1243 "List of incoming or outgoing service sub-layers that have 1244 to aggregate or disaggregate."; 1245 } 1246 } 1248 grouping forwarding-sub-layer-group { 1249 description 1250 "Incoming or outgoing forwarding sub-layer reference group."; 1252 leaf-list forwarding-sub-layer { 1253 type forwarding-sub-layer-ref; 1254 description 1255 "List of incoming or outgoing forwarding sub-layers that 1256 have to aggregate or disaggregate."; 1257 } 1258 } 1260 grouping detnet-header { 1261 description 1262 "DetNet header info for DetNet encapsulation or swap."; 1263 choice header-type { 1264 case detnet-mpls-header { 1265 description 1266 "MPLS label stack for DetNet MPLS encapsulation or 1267 forwarding."; 1268 uses rt-types:mpls-label-stack; 1269 } 1270 case detnet-ip-header { 1271 description 1272 "IPv4/IPv6 packet header for DetNet IP encapsulation."; 1273 uses ip-header; 1274 } 1275 } 1276 } 1278 grouping detnet-app-next-hop-content { 1279 description 1280 "Generic parameters of DetNet next hops."; 1281 choice next-hop-options { 1282 mandatory true; 1283 description 1284 "Options for next hops. It is expected that further cases 1285 will be added through 1286 augments from other modules, e.g., for recursive 1287 next hops."; 1288 case simple-next-hop { 1289 description 1290 "This case represents a simple next hop consisting of the 1291 next-hop address and/or outgoing interface. 1292 Modules for address families MUST augment this case with a 1293 leaf containing a next-hop address of that address 1294 family."; 1295 leaf outgoing-interface { 1296 type if:interface-ref; 1297 } 1298 choice flow-type { 1299 case ip { 1300 leaf next-hop-address { 1301 type inet:ip-address; 1302 } 1303 } 1304 case mpls { 1305 uses rt-types:mpls-label-stack; 1306 } 1307 } 1308 } 1309 case next-hop-list { 1310 description 1311 "Container for multiple next hops."; 1312 list next-hop { 1313 key "hop-index"; 1314 description 1315 "An entry in a next-hop list. Modules for address 1316 families MUST augment this list with a leaf containing a 1317 next-hop address of that address family."; 1318 leaf hop-index { 1319 type uint8; 1320 description 1321 "A user-specified identifier utilized to uniquely 1322 reference the next-hop entry in the next-hop list. 1323 The value of this index has no semantic meaning other 1324 than for referencing the entry."; 1325 } 1326 leaf outgoing-interface { 1327 type if:interface-ref; 1328 description 1329 "Name of the outgoing interface."; 1330 } 1331 choice flow-type { 1332 case ip { 1333 leaf next-hop-address { 1334 type inet:ip-address; 1335 } 1336 } 1337 case mpls { 1338 uses rt-types:mpls-label-stack; 1339 } 1340 } 1341 } 1342 } 1343 } 1344 } 1346 grouping detnet-forwarding-next-hop-content { 1347 description 1348 "Generic parameters of DetNet next hops."; 1349 choice next-hop-options { 1350 mandatory true; 1351 description 1352 "Options for next hops. 1353 It is expected that further cases will be added through 1354 augments from other modules, e.g., for recursive 1355 next hops."; 1356 case simple-next-hop { 1357 description 1358 "This case represents a simple next hop consisting of the 1359 next-hop address and/or outgoing interface. 1360 Modules for address families MUST augment this case with a 1361 leaf containing a next-hop address of that address 1362 family."; 1363 leaf outgoing-interface { 1364 type if:interface-ref; 1365 } 1366 choice flow-type { 1367 case ip { 1368 choice operation-type { 1369 case ip-forwarding { 1370 leaf next-hop-address { 1371 type inet:ip-address; 1372 } 1373 } 1374 case mpls-over-ip-encapsulation { 1375 uses ip-header; 1376 } 1377 } 1378 } 1379 case mpls { 1380 uses rt-types:mpls-label-stack; 1381 } 1382 } 1383 } 1384 case next-hop-list { 1385 description 1386 "Container for multiple next hops."; 1387 list next-hop { 1388 key "hop-index"; 1389 description 1390 "An entry in a next-hop list. Modules for address 1391 families MUST augment this list with a leaf containing a 1392 next-hop address of that address family."; 1393 leaf hop-index { 1394 type uint8; 1395 description 1396 "The value of the index for a hop."; 1397 } 1398 leaf outgoing-interface { 1399 type if:interface-ref; 1400 } 1401 choice flow-type { 1402 case ip { 1403 choice operation-type { 1404 case ip-forwarding { 1405 leaf next-hop-address { 1406 type inet:ip-address; 1407 } 1408 } 1409 case mpls-over-ip-encapsulation { 1410 uses ip-header; 1411 } 1412 } 1413 } 1414 case mpls { 1415 uses rt-types:mpls-label-stack; 1416 } 1417 } 1418 } 1419 } 1420 } 1421 } 1423 container detnet { 1424 list traffic-profile { 1425 key "profile-name"; 1426 description 1427 "A traffic profile."; 1428 leaf profile-name { 1429 type string; 1430 description 1431 "An Aggregation group ID. Zero means the service is not 1432 part of a group."; 1433 } 1434 container traffic-requirements { 1435 description 1436 "This defines the attributes of the App-flow 1437 regarding bandwidth, latency, latency variation, loss, and 1438 misordering tolerance."; 1439 reference 1440 "draft-ietf-detnet-flow-information-model Section 4.2"; 1441 leaf min-bandwidth { 1442 type uint64; 1443 units "bps"; 1444 description 1445 "This is the minimum bandwidth that has to be 1446 guaranteed for the DetNet service. MinBandwidth is 1447 specified in octets per second."; 1448 } 1449 leaf max-latency { 1450 type uint32; 1451 units "nanoseconds"; 1452 description 1453 "This is the maximum latency from Ingress to 1454 Egress(es) for a single packet of the DetNet flow. 1455 MaxLatency is specified as an integer number of 1456 nanoseconds."; 1457 } 1458 leaf max-latency-variation { 1459 type uint32; 1460 units "nanoseconds"; 1461 description 1462 "This is the difference between the 1463 minimum and the maximum end-to-end one-way latency. 1464 MaxLatencyVariation is specified as an integer number of 1465 nanoseconds."; 1466 } 1467 leaf max-loss { 1468 type uint32; 1469 description 1470 "This defines the maximum Packet Loss Ratio (PLR) 1471 parameter for the DetNet service between the Ingress and 1472 Egress(es) of the DetNet domain."; 1473 } 1474 leaf max-consecutive-loss-tolerance { 1475 type uint32; 1476 units "packets"; 1477 description 1478 "Some applications have special loss requirement, such 1479 as MaxConsecutiveLossTolerance. The maximum consecutive 1480 loss tolerance parameter describes the maximum number of 1481 consecutive packets whose loss can be tolerated. The 1482 maximum consecutive loss tolerance can be measured for 1483 example based on sequence number."; 1484 } 1485 leaf max-misordering { 1486 type uint32; 1487 units "packets"; 1488 description 1489 "This describes the tolerable maximum number 1490 of packets that can be received out of order. The 1491 maximum allowed misordering can be measured for example 1492 based on sequence number. The value zero for the 1493 maximum allowed misordering indicates that in order 1494 delivery is required, misordering cannot be tolerated."; 1495 } 1496 } 1497 container flow-spec { 1498 description 1499 "Flow-specification specifies how the Source transmits 1500 packets for the flow. This is the promise/request of the 1501 Source to the network. The network uses this flow 1502 specification to allocate resources and adjust queue 1503 parameters in network nodes."; 1504 reference 1505 "draft-ietf-detnet-flow-information-model Section 5.5"; 1506 leaf interval { 1507 type uint32; 1508 units "nanoseconds"; 1509 description 1510 "The period of time in which the traffic 1511 specification cannot be exceeded."; 1512 } 1513 leaf max-pkts-per-interval { 1514 type uint32; 1515 description 1516 "The maximum number of packets that the 1517 source will transmit in one interval."; 1518 } 1519 leaf max-payload-size { 1520 type uint32; 1521 description 1522 "The maximum payload size that the source 1523 will transmit."; 1524 } 1525 leaf min-payload-size { 1526 type uint32; 1527 description 1528 "The minimum payload size that the source 1529 will transmit."; 1530 } 1531 leaf min-pkts-per-interval { 1532 type uint32; 1533 description 1534 "The minimum number of packets that the 1535 source will transmit in one interval."; 1536 } 1537 } 1538 leaf-list member-apps { 1539 type app-flow-ref; 1540 config false; 1541 description 1542 "Applications attached to this profile."; 1543 } 1544 leaf-list member-services { 1545 type service-sub-layer-ref; 1546 config false; 1547 description 1548 "Services attached to this profile."; 1549 } 1550 leaf-list member-fwd-sublayers { 1551 type forwarding-sub-layer-ref; 1552 config false; 1553 description 1554 "Forwarding sub-layer attached to this profile."; 1555 } 1556 } 1557 container app-flows { 1558 description 1559 "The DetNet app-flow configuration."; 1560 reference 1561 "draft-ietf-detnet-flow-information-model Section Section 4.1"; 1562 list app-flow { 1563 key "name"; 1564 description 1565 "A unique (management) identifier of the App-flow."; 1566 leaf name { 1567 type string; 1568 description 1569 "A unique (management) identifier of the App-flow."; 1570 reference 1571 "draft-ietf-detnet-flow-information-model 1572 Sections 4.1, 5.1"; 1573 } 1574 leaf app-flow-bidir-congruent { 1575 type boolean; 1576 default false; 1577 description 1578 "Defines the data path requirement of the App-flow 1579 whether it must share the same data path and physical 1580 path for both directions through the network, e.g., to 1581 provide congruent paths in the two directions."; 1582 reference 1583 "draft-ietf-detnet-flow-information-model Section 4.2"; 1584 } 1585 leaf outgoing-service { 1586 type service-sub-layer-ref; 1587 config false; 1588 description 1589 "Binding to this applications outgoing 1590 service."; 1591 } 1592 leaf incoming-service { 1593 type service-sub-layer-ref; 1594 config false; 1595 description 1596 "Binding to this applications incoming service."; 1597 } 1598 leaf traffic-profile { 1599 type traffic-profile-ref; 1600 description 1601 "The Traffic Profile for this group."; 1602 } 1603 container ingress { 1604 description 1605 "Ingress DetNet application flows or a compound flow."; 1606 leaf name { 1607 type string; 1608 description 1609 "Ingress DetNet application."; 1610 } 1611 leaf app-flow-status { 1612 type identityref { 1613 base app-status; 1614 } 1615 config false; 1616 description 1617 "Status of ingress application flow."; 1618 reference 1619 "draft-ietf-detnet-flow-information-model Sections 1620 4.1, 5.8"; 1621 } 1622 leaf interface { 1623 type if:interface-ref; 1624 description 1625 "Interface is used for any service type where a whole 1626 interface is mapped to the applications. It may be 1627 further filtered by type"; 1628 } 1629 uses data-flow-spec; 1630 } //End of app-ingress 1631 container egress { 1632 description 1633 "Route's next-hop attribute."; 1634 leaf name { 1635 type string; 1636 description 1637 "Egress DetNet application."; 1638 } 1639 choice application-type { 1640 container ethernet { 1641 leaf interface { 1642 type if:interface-ref; 1643 } 1644 description 1645 "TSN unaware maps to an interface."; 1646 } 1647 container ip-mpls { 1648 uses detnet-app-next-hop-content; 1649 } 1650 } 1651 } 1652 } 1653 } 1654 container service-sub-layer { 1655 description 1656 "The DetNet service sub-layer configuration."; 1657 list service-sub-layer-list { 1658 key "name"; 1659 description 1660 "Services are indexed by name."; 1661 leaf name { 1662 type string; 1663 description 1664 "The name of the DetNet service sub-layer."; 1665 } 1666 leaf service-rank { 1667 type uint8; 1668 description 1669 "The DetNet rank for this service."; 1670 reference 1671 "draft-ietf-detnet-flow-information-model Section 5.7."; 1672 } 1673 leaf traffic-profile { 1674 type traffic-profile-ref; 1675 description 1676 "The Traffic Profile for this service."; 1677 } 1678 container service-protection { 1679 leaf service-protection-type { 1680 type service-protection-type; 1681 description 1682 "The DetNet service protection type such as PRF, PEF, 1683 PEOF,PERF, and PEORF."; 1685 reference 1686 "draft-ietf-detnet-data-plane-framework Section 4.3"; 1687 } 1688 leaf sequence-number-length { 1689 type sequence-number-field; 1690 description 1691 "Sequence number field length can be one of 0 (none), 1692 16-bits or 28-bits."; 1693 } 1694 } 1695 leaf service-operation-type { 1696 type service-operation-type; 1697 } 1698 container incoming-type { 1699 description 1700 "The DetNet service sub-layer incoming configuration."; 1701 choice incoming-type { 1702 mandatory true; 1703 description 1704 "A service sub-layer may have App flows or other 1705 service sub-layers."; 1706 container app-flow { 1707 description 1708 "This service sub-layer is related to the app-flows 1709 of the upper layer and provide ingress proxy or 1710 ingress aggregation at the ingress node."; 1711 uses app-flows-group; 1712 } 1713 container service-aggregation { 1714 description 1715 "This service sub-layer is related to the service 1716 sub-layer of the upper layer and provide 1717 service-to-service aggregation at the ingress node 1718 or relay node."; 1719 uses service-sub-layer-group; 1720 } 1721 container forwarding-aggregation { 1722 description 1723 "This service sub-layer is related to the forwarding 1724 sub-layer of the upper layer and provide 1725 forwarding-to-service aggregation at the ingress 1726 node or relay node."; 1727 uses forwarding-sub-layer-group; 1728 } 1729 container service-id { 1730 description 1731 "This service sub-layer is related to the service or 1732 forwarding sub-layer of the lower layer and provide 1733 DetNet service relay or termination at the relay 1734 node or egress node."; 1735 uses detnet-flow-spec; 1736 } 1737 } 1738 } 1739 container outgoing-type { 1740 description 1741 "The DetNet service sub-layer outgoing configuration."; 1742 choice outgoing-type { 1743 mandatory true; 1744 description 1745 "The out-going type may be a forwarding Sub-layer or a 1746 service sub-layer or ? types need to be named."; 1747 container forwarding-sub-layer { 1748 description 1749 "This service sub-layer is sent to the forwarding 1750 sub-layers of the lower layer for DetNet service 1751 forwarding or service-to-forwarding aggregation at 1752 the ingress node or relay node. When the operation 1753 type is service-initiation, The service sub-layer 1754 encapsulates the DetNet Control-Word and services 1755 label, which are for individual DetNet flow when the 1756 incoming type is app-flow and for aggregated DetNet 1757 flow when the incoming type is service or 1758 forwarding. The service sub-layer swaps the service 1759 label when the operation type is service-relay."; 1760 list service-outgoing-list { 1761 key "service-outgoing-index"; 1762 description 1763 "List of the outgoing service 1764 that separately for each node 1765 where services will be eliminated."; 1766 leaf service-outgoing-index { 1767 type uint8; 1768 } 1769 uses detnet-header; 1770 uses forwarding-sub-layer-group; 1771 } 1772 } 1773 container service-sub-layer { 1774 description 1775 "This service sub-layer is sent to the service 1776 sub-layers of the lower layer for service-to-service 1777 aggregation at the ingress node or relay node. The 1778 service sub-layer encapsulates the DetNet 1779 Control-Word and S-label when the operation type is 1780 service-initiation, and swaps the S-label when the 1781 operation type is service-relay."; 1782 leaf aggregation-service-sub-layer { 1783 type service-sub-layer-ref; 1784 description 1785 "reference point of the service-sub-layer 1786 at which this service will be aggregated."; 1787 } 1788 container service-label { 1789 uses rt-types:mpls-label-stack; 1790 } 1791 } 1792 container app-flow { 1793 description 1794 "This service sub-layer is sent to the app-flow of 1795 the upper layer for egress proxy at the egress node, 1796 and decapsulates the DetNet Control-Word and S-label 1797 for individual DetNet service. This outgoing type 1798 only can be chosen when the operation type is 1799 service-termination."; 1800 uses app-flows-group; 1801 } 1802 container service-disaggregation { 1803 description 1804 "This service sub-layer is sent to the service 1805 sub-layer of the upper layer for service-to-service 1806 disaggregation at the relay node or egress node, and 1807 decapsulates the DetNet Control-Word and A-label for 1808 aggregated DetNet service. This outgoing type only 1809 can be chosen when the operation type is 1810 service-termination."; 1811 uses service-sub-layer-group; 1812 } 1813 container forwarding-disaggregation { 1814 description 1815 "This service sub-layer is sent to the forwarding 1816 sub-layer of the upper layer for 1817 forwarding-to-service disaggregation at the relay 1818 node or egress node, and decapsulates the DetNet 1819 Control-Word and A-label for aggregated DetNet 1820 service. This outgoing type only can be chosen when 1821 the operation type is service-termination."; 1822 uses forwarding-sub-layer-group; 1823 } 1824 } 1825 } 1826 } 1827 } 1828 container forwarding-sub-layer { 1829 description 1830 "The DetNet forwarding sub-layer configuration."; 1831 list forwarding-sub-layer-list { 1832 key "name"; 1833 description 1834 "The List is one or more DetNet Traffic types."; 1835 leaf name { 1836 type string; 1837 description 1838 "The name of the DetNet forwarding sub-layer."; 1839 } 1840 leaf traffic-profile { 1841 type traffic-profile-ref; 1842 description 1843 "The Traffic Profile for this group."; 1844 } 1845 leaf forwarding-operation-type { 1846 type forwarding-operations-type; 1847 } 1848 container incoming-type { 1849 description 1850 "The DetNet forwarding sub-layer incoming configuration."; 1851 choice incoming-type { 1852 mandatory true; 1853 description 1854 "Cases of incoming types."; 1855 container service-sub-layer { 1856 description 1857 "This forwarding sub-layer is related to the service 1858 sub-layers of the upper layer and provide DetNet 1859 forwarding or service-to-forwarding aggregation at 1860 the ingress node or relay node."; 1861 uses service-sub-layer-group; 1862 } 1863 container forwarding-aggregation { 1864 description 1865 "This forwarding sub-layer is related to the 1866 forwarding sub-layer of the upper layer and provide 1867 forwarding-to-forwarding aggregation at the ingress 1868 node or relay node or transit node."; 1869 uses forwarding-sub-layer-group; 1870 } 1871 container forwarding-id { 1872 description 1873 "This forwarding sub-layer is related to all of the 1874 lower layer and provide DetNet forwarding swap or 1875 termination at the transit node or relay node or 1876 egress node."; 1878 leaf interface { 1879 type if:interface-ref; 1880 description 1881 "This is the interface associated with the 1882 forwarding sub-layer."; 1883 } 1884 uses detnet-flow-spec; 1885 } 1886 } 1887 } 1888 container outgoing-type { 1889 description 1890 "The DetNet forwarding sub-layer outbound 1891 configuration."; 1892 choice outgoing-type { 1893 mandatory true; 1894 description 1895 "This is when a service connected directly to an 1896 interface with no forwarding sub-layer."; 1897 container 1898 interface { 1899 description 1900 "This forwarding sub-layer is sent to the interface 1901 for send to next-hop at the ingress node or relay 1902 node or transit node."; 1903 uses detnet-forwarding-next-hop-content; 1904 } 1905 container service-aggregation { 1906 description 1907 "This forwarding sub-layer is sent to the service 1908 sub-layers of the lower layer for 1909 forwarding-to-service aggregation at the ingress 1910 node or relay node."; 1911 leaf aggregation-service-sub-layer { 1912 type service-sub-layer-ref; 1913 } 1914 container optional-forwarding-label { 1915 uses rt-types:mpls-label-stack; 1916 } 1917 } 1918 container forwarding-sub-layer { 1919 description 1920 "This forwarding sub-layer is sent to the forwarding 1921 sub-layers of the lower layer for 1922 forwarding-to-forwarding aggregation at the ingress 1923 node or relay node or transit node."; 1924 leaf aggregation-forwarding-sub-layer { 1925 type forwarding-sub-layer-ref; 1927 } 1928 container forwarding-label { 1929 uses rt-types:mpls-label-stack; 1930 } 1931 } 1932 container service-sub-layer { 1933 description 1934 "This forwarding sub-layer is sent to the service 1935 sub-layer of the upper layer and decapsulate the 1936 F-label for DetNet service or service-to-forwarding 1937 disaggregation at the relay node or egress node. 1938 This outgoing type only can be chosen when the 1939 operation type is pop-and-lookup."; 1940 uses service-sub-layer-group; 1941 } 1942 container forwarding-disaggregation { 1943 description 1944 "This forwarding sub-layer is sent to the forwarding 1945 sub-layer of the upper layer and decapsulate the 1946 F-label for forwarding-to-forwarding disaggregation 1947 at the transit node or relay node or egress node. 1948 This outgoing type only can be chosen when the 1949 operation type is pop-and-lookup."; 1950 uses forwarding-sub-layer-group; 1951 } 1952 } 1953 } 1954 } 1955 } 1956 } 1957 } 1958 1960 8. Open Issues 1962 There are some open issues that are still under discussion: 1964 o Terminology. 1966 o Security Considerations. 1968 These issues will be resolved in the following versions of the draft. 1970 9. IANA Considerations 1972 This document makes no request of IANA. 1974 Note to RFC Editor: this section may be removed on publication as an 1975 RFC. 1977 10. Security Considerations 1979 1981 11. Acknowledgements 1983 12. References 1985 12.1. Normative References 1987 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1988 Requirement Levels", BCP 14, RFC 2119, 1989 DOI 10.17487/RFC2119, March 1997, 1990 . 1992 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 1993 RFC 6991, DOI 10.17487/RFC6991, July 2013, 1994 . 1996 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1997 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1998 . 2000 [RFC8655] Finn, N., Thubert, P., Varga, B., and J. Farkas, 2001 "Deterministic Networking Architecture", RFC 8655, 2002 DOI 10.17487/RFC8655, October 2019, 2003 . 2005 12.2. Informative References 2007 [I-D.ietf-detnet-flow-information-model] 2008 Varga, B., Farkas, J., Cummings, R., Jiang, Y., and D. 2009 Fedyk, "DetNet Flow and Service Information Model", draft- 2010 ietf-detnet-flow-information-model-14 (work in progress), 2011 January 2021. 2013 Appendix A. Examples 2015 The following examples are provided. These examples are tested with 2016 Yanglint and use operational output to exercise both config true and 2017 config false objects 2019 o A simple DetNet application illustrating multiplexing of 2020 Application Flows. 2022 o A case of Forwarding sub-layer aggregation using a single 2023 forwarding sublayer. 2025 o A case of Service sub-layer aggregation with and aggregation 2026 label. 2028 A.1. Example JSON Configuration/Operational 2030 { 2031 "ietf-interfaces:interfaces": { 2032 "interface": [ 2033 { 2034 "name": "eth0", 2035 "type": "iana-if-type:ethernetCsmacd", 2036 "oper-status": "up", 2037 "statistics": { 2038 "discontinuity-time": "2020-12-18T23:59:00Z" 2039 } 2040 }, 2041 { 2042 "name": "eth1", 2043 "type": "iana-if-type:ethernetCsmacd", 2044 "oper-status": "up", 2045 "statistics": { 2046 "discontinuity-time": "2020-12-18T23:59:00Z" 2047 } 2048 }, 2049 { 2050 "name": "eth2", 2051 "type": "iana-if-type:ethernetCsmacd", 2052 "oper-status": "up", 2053 "statistics": { 2054 "discontinuity-time": "2020-12-18T23:59:00Z" 2055 } 2056 }, 2057 { 2058 "name": "eth3", 2059 "type": "iana-if-type:ethernetCsmacd", 2060 "oper-status": "up", 2061 "statistics": { 2062 "discontinuity-time": "2020-12-18T23:59:00Z" 2063 } 2064 }, 2065 { 2066 "name": "eth4", 2067 "type": "iana-if-type:ethernetCsmacd", 2068 "oper-status": "up", 2069 "statistics": { 2070 "discontinuity-time": "2020-12-18T23:59:00Z" 2071 } 2072 } 2073 ] 2074 }, 2075 "ietf-detnet:detnet": { 2076 "app-flows": { 2077 "app-flow": [ 2078 { 2079 "name": "app-0", 2080 "app-flow-bidir-congruent": false, 2081 "outgoing-service": "ssl-1", 2082 "traffic-profile": "pf-1", 2083 "ingress": { 2084 "app-flow-status": "ready", 2085 "interface": "eth0", 2086 "ip-app-flow": { 2087 "src-ip-prefix": "1.1.1.1/32", 2088 "dest-ip-prefix": "8.8.8.0/24", 2089 "dscp": 6 2090 } 2091 } 2092 }, 2093 { 2094 "name": "app-1", 2095 "app-flow-bidir-congruent": false, 2096 "outgoing-service": "ssl-1", 2097 "traffic-profile": "pf-1", 2098 "ingress": { 2099 "app-flow-status": "ready", 2100 "interface": "eth0", 2101 "ip-app-flow": { 2102 "src-ip-prefix": "2.1.1.1/32", 2103 "dest-ip-prefix": "9.8.8.0/24", 2104 "dscp": 7 2105 } 2106 } 2107 } 2108 ] 2109 }, 2110 "traffic-profile": [ 2111 { 2112 "profile-name": "pf-1", 2113 "traffic-requirements": { 2114 "min-bandwidth": "100000000", 2115 "max-latency": 100000000, 2116 "max-latency-variation": 200000000, 2117 "max-loss": 2, 2118 "max-consecutive-loss-tolerance": 5, 2119 "max-misordering": 0 2120 }, 2121 "flow-spec": { 2122 "interval": 5, 2123 "max-pkts-per-interval": 10, 2124 "max-payload-size": 1500, 2125 "min-payload-size": 100, 2126 "min-pkts-per-interval": 1 2127 }, 2128 "member-apps": [ 2129 "app-0", 2130 "app-1" 2131 ] 2132 }, 2133 { 2134 "profile-name": "pf-2", 2135 "traffic-requirements": { 2136 "min-bandwidth": "200000000", 2137 "max-latency": 100000000, 2138 "max-latency-variation": 200000000, 2139 "max-loss": 2, 2140 "max-consecutive-loss-tolerance": 5, 2141 "max-misordering": 0 2142 }, 2143 "flow-spec": { 2144 "interval": 5, 2145 "max-pkts-per-interval": 10, 2146 "max-payload-size": 1500, 2147 "min-payload-size": 100, 2148 "min-pkts-per-interval": 1 2149 }, 2150 "member-services": [ 2151 "ssl-1" 2152 ] 2153 }, 2154 { 2155 "profile-name": "pf-3", 2156 "flow-spec": { 2157 "interval": 5, 2158 "max-pkts-per-interval": 10, 2159 "max-payload-size": 1500 2160 }, 2161 "member-fwd-sublayers": [ 2162 "fsl-1" 2163 ] 2164 } 2165 ], 2166 "service-sub-layer": { 2167 "service-sub-layer-list": [ 2168 { 2169 "name": "ssl-1", 2170 "service-rank": 10, 2171 "traffic-profile": "pf-2", 2172 "service-operation-type": "service-initiation", 2173 "service-protection": { 2174 "service-protection-type": "none", 2175 "sequence-number-length": "long-sn" 2176 }, 2177 "incoming-type": { 2178 "app-flow": { 2179 "app-flow-list": [ 2180 "app-0", 2181 "app-1" 2182 ] 2183 } 2184 }, 2185 "outgoing-type": { 2186 "forwarding-sub-layer": { 2187 "service-outgoing-list": [ 2188 { 2189 "service-outgoing-index": 0, 2190 "mpls-label-stack": { 2191 "entry": [ 2192 { 2193 "id": 0, 2194 "label": 100 2195 } 2196 ] 2197 }, 2198 "forwarding-sub-layer": [ 2199 "fsl-1" 2200 ] 2201 } 2202 ] 2203 } 2204 } 2205 } 2206 ] 2207 }, 2208 "forwarding-sub-layer": { 2209 "forwarding-sub-layer-list": [ 2210 { 2211 "name": "fsl-1", 2212 "traffic-profile": "pf-3", 2213 "forwarding-operation-type": "impose-and-forward", 2214 "incoming-type": { 2215 "service-sub-layer": { 2216 "service-sub-layer": [ 2217 "ssl-1" 2218 ] 2219 } 2220 }, 2221 "outgoing-type": { 2222 "interface": { 2223 "outgoing-interface": "eth2", 2224 "mpls-label-stack": { 2225 "entry": [ 2226 { 2227 "id": 0, 2228 "label": 10000 2229 } 2230 ] 2231 } 2232 } 2233 } 2234 } 2235 ] 2236 } 2237 } 2238 } 2240 Figure 1: Example DetNet JSON configuration 2242 A.2. Example XML Config: Aggregation using a Forwarding Sublayer 2244 2247 2248 eth0 2249 ia:ethernetCsmacd 2250 up 2251 2252 2020-12-18T23:59:00Z 2253 2254 2255 2256 eth1 2257 ia:ethernetCsmacd 2258 up 2259 2260 2020-12-18T23:59:00Z 2261 2263 2264 2265 eth2 2266 ia:ethernetCsmacd 2267 up 2268 2269 2020-12-18T23:59:00Z 2270 2271 2272 2273 eth3 2274 ia:ethernetCsmacd 2275 up 2276 2277 2020-12-18T23:59:00Z 2278 2279 2280 2281 eth4 2282 ia:ethernetCsmacd 2283 up 2284 2285 2020-12-18T23:59:00Z 2286 2287 2288 2289 2291 2292 2293 app-1 2294 false 2295 ssl-1 2296 1 2297 2298 ready 2299 eth0 2300 2301 1.1.1.1/32 2302 8.8.8.8/32 2303 6 2304 2305 2306 2307 2308 app-2 2309 false 2310 ssl-2 2311 1 2312 2313 ready 2314 eth1 2315 2316 2.1.1.1/32 2317 9.8.8.8/32 2318 7 2319 2320 7 2321 2322 2323 2324 2325 1 2326 2327 100000000 2328 100000000 2329 200000000 2330 2 2331 5 2332 0 2333 2334 app-1 2335 app-2 2336 2337 2338 2 2339 2340 100000000 2341 100000000 2342 200000000 2343 2 2344 5 2345 0 2346 2347 ssl-1 2348 ssl-2 2349 2350 2351 3 2352 2353 5 2354 10 2355 1500 2356 2357 afl-1 2358 2359 2360 2361 ssl-1 2362 10 2363 2 2364 service-initiation 2365 2366 2367 none 2368 long-sn 2369 2370 2371 2372 app-1 2373 2374 2375 2376 2377 2378 0 2379 2380 2381 0 2382 2383 2384 2385 afl-1 2386 2387 2388 2389 2390 2391 ssl-2 2392 10 2393 2 2394 service-initiation 2395 2396 2397 none 2398 long-sn 2399 2400 2401 2402 app-2 2403 2404 2405 2406 2407 2408 0 2409 2410 2411 0 2412 2413 2414 2415 afl-1 2416 2417 2418 2419 2420 2421 2422 2423 afl-1 2424 3 2425 impose-and-forward 2426 2427 2428 2429 ssl-1 2430 ssl-2 2431 2432 2433 2434 2435 eth2 2436 2437 2438 0 2439 2440 2441 2442 2443 2444 2445 2446 2448 Figure 2: Example DetNet XML configuration 2450 A.3. Example JSON Service Aggregation Configuration 2452 { 2453 "ietf-interfaces:interfaces": { 2454 "interface": [ 2455 { 2456 "name": "eth0", 2457 "type": "iana-if-type:ethernetCsmacd", 2458 "oper-status": "up", 2459 "statistics": { 2460 "discontinuity-time": "2020-10-02T23:59:00Z" 2461 } 2462 }, 2463 { 2464 "name": "eth1", 2465 "type": "iana-if-type:ethernetCsmacd", 2466 "oper-status": "up", 2467 "statistics": { 2468 "discontinuity-time": "2020-10-02T23:59:00Z" 2469 } 2470 }, 2471 { 2472 "name": "eth2", 2473 "type": "iana-if-type:ethernetCsmacd", 2474 "oper-status": "up", 2475 "statistics": { 2476 "discontinuity-time": "2020-10-02T23:59:00Z" 2477 } 2478 }, 2479 { 2480 "name": "eth3", 2481 "type": "iana-if-type:ethernetCsmacd", 2482 "oper-status": "up", 2483 "statistics": { 2484 "discontinuity-time": "2020-10-02T23:59:00Z" 2485 } 2486 }, 2487 { 2488 "name": "eth4", 2489 "type": "iana-if-type:ethernetCsmacd", 2490 "oper-status": "up", 2491 "statistics": { 2492 "discontinuity-time": "2020-10-02T23:59:00Z" 2493 } 2494 } 2495 ] 2496 }, 2497 "ietf-detnet:detnet": { 2498 "app-flows": { 2499 "app-flow": [ 2500 { 2501 "name": "app-1", 2502 "app-flow-bidir-congruent": false, 2503 "outgoing-service": "ssl-1", 2504 "traffic-profile": "1", 2505 "ingress": { 2506 "app-flow-status": "ready", 2507 "interface": "eth0", 2508 "ip-app-flow": { 2509 "src-ip-prefix": "1.1.1.1/32", 2510 "dest-ip-prefix": "8.8.8.8/32", 2511 "dscp": 6 2512 } 2513 } 2514 }, 2515 { 2516 "name": "app-2", 2517 "app-flow-bidir-congruent": false, 2518 "outgoing-service": "ssl-2", 2519 "traffic-profile": "1", 2520 "ingress": { 2521 "app-flow-status": "ready", 2522 "interface": "eth0", 2523 "ip-app-flow": { 2524 "src-ip-prefix": "2.1.1.1/32", 2525 "dest-ip-prefix": "9.8.8.8/32", 2526 "dscp": 7 2527 } 2528 } 2529 } 2530 ] 2531 }, 2532 "traffic-profile": [ 2533 { 2534 "profile-name": "1", 2535 "traffic-requirements": { 2536 "min-bandwidth": "100000000", 2537 "max-latency": 100000000, 2538 "max-latency-variation": 200000000, 2539 "max-loss": 2, 2540 "max-consecutive-loss-tolerance": 5, 2541 "max-misordering": 0 2542 }, 2543 "member-apps": [ 2544 "app-1", 2545 "app-2" 2546 ] 2547 }, 2548 { 2549 "profile-name": "2", 2550 "traffic-requirements": { 2551 "min-bandwidth": "100000000", 2552 "max-latency": 100000000, 2553 "max-latency-variation": 200000000, 2554 "max-loss": 2, 2555 "max-consecutive-loss-tolerance": 5, 2556 "max-misordering": 0 2557 }, 2558 "member-services": [ 2559 "ssl-1", 2560 "ssl-2" 2561 ] 2562 }, 2563 { 2564 "profile-name": "3", 2565 "flow-spec": { 2566 "interval": 5, 2567 "max-pkts-per-interval": 10, 2568 "max-payload-size": 1500 2569 }, 2570 "member-fwd-sublayers": [ 2571 "afl-1" 2572 ] 2573 } 2574 ], 2575 "service-sub-layer": { 2576 "service-sub-layer-list": [ 2577 { 2578 "name": "ssl-1", 2579 "service-rank": 10, 2580 "traffic-profile": "2", 2581 "service-protection": { 2582 "service-protection-type": "none", 2583 "sequence-number-length": "long-sn" 2584 }, 2585 "service-operation-type": "service-initiation", 2586 "incoming-type": { 2587 "app-flow": { 2588 "app-flow-list": [ 2589 "app-1" 2590 ] 2591 } 2592 }, 2593 "outgoing-type": { 2594 "service-sub-layer": { 2595 "aggregation-service-sub-layer": "asl-1", 2596 "service-label": { 2597 "mpls-label-stack": { 2598 "entry": [ 2599 { 2600 "id": 0, 2601 "label": 102 2602 } 2603 ] 2604 } 2605 } 2606 } 2607 } 2608 }, 2609 { 2610 "name": "ssl-2", 2611 "service-rank": 10, 2612 "traffic-profile": "2", 2613 "service-operation-type": "service-initiation", 2614 "service-protection": { 2615 "service-protection-type": "none", 2616 "sequence-number-length": "long-sn" 2617 }, 2618 "incoming-type": { 2619 "app-flow": { 2620 "app-flow-list": [ 2621 "app-2" 2622 ] 2623 } 2624 }, 2625 "outgoing-type": { 2626 "service-sub-layer": { 2627 "aggregation-service-sub-layer": "asl-1", 2628 "service-label": { 2629 "mpls-label-stack": { 2630 "entry": [ 2631 { 2632 "id": 0, 2633 "label": 105 2634 } 2635 ] 2636 } 2637 } 2638 } 2639 } 2640 }, 2641 { 2642 "name": "asl-1", 2643 "service-rank": 10, 2644 "service-protection": { 2645 "service-protection-type": "none", 2646 "sequence-number-length": "long-sn" 2648 }, 2649 "incoming-type": { 2650 "service-aggregation": { 2651 "service-sub-layer": [ 2652 "ssl-1", 2653 "ssl-2" 2654 ] 2655 } 2656 }, 2657 "outgoing-type": { 2658 "forwarding-sub-layer": { 2659 "service-outgoing-list": [ 2660 { 2661 "service-outgoing-index": 0, 2662 "mpls-label-stack": { 2663 "entry": [ 2664 { 2665 "id": 0, 2666 "label": 1000 2667 } 2668 ] 2669 }, 2670 "forwarding-sub-layer": [ 2671 "afl-1" 2672 ] 2673 } 2674 ] 2675 } 2676 } 2677 } 2678 ] 2679 }, 2680 "forwarding-sub-layer": { 2681 "forwarding-sub-layer-list": [ 2682 { 2683 "name": "afl-1", 2684 "traffic-profile": "3", 2685 "forwarding-operation-type": "impose-and-forward", 2686 "incoming-type": { 2687 "service-sub-layer": { 2688 "service-sub-layer": [ 2689 "asl-1" 2690 ] 2691 } 2692 }, 2693 "outgoing-type": { 2694 "interface": { 2695 "outgoing-interface": "eth2", 2696 "mpls-label-stack": { 2697 "entry": [ 2698 { 2699 "id": 0, 2700 "label": 20000 2701 } 2702 ] 2703 } 2704 } 2705 } 2706 } 2707 ] 2708 } 2709 } 2710 } 2712 Figure 3: Example DetNet JSON Service Aggregation 2714 Authors' Addresses 2716 Xuesong Geng 2717 Huawei Technologies 2719 Email: gengxuesong@huawei.com 2721 Mach(Guoyi) Chen 2722 Huawei Technologies 2724 Email: mach.chen@huawei.com 2726 Yeoncheol Ryoo 2727 ETRI 2729 Email: dbduscjf@etri.re.kr 2731 Don Fedyk 2732 LabN Consulting, L.L.C. 2734 Email: dfedyk@labn.net 2736 Reshad Rahman 2737 Individual 2739 Email: reshad@yahoo.com 2740 Zhenqiang Li 2741 China Mobile 2743 Email: lizhenqiang@chinamobile.com