idnits 2.17.1 draft-vassilev-netmod-network-bridge-02.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 274 has weird spacing: '...address yan...' == Line 277 has weird spacing: '...address yan...' == Line 280 has weird spacing: '...rw type eth...' == Line 293 has weird spacing: '...address yan...' == Line 296 has weird spacing: '...address yan...' == (6 more instances...) -- The document date (July 5, 2019) is 1756 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: 'RFC3688' is defined on line 1360, but no explicit reference was found in the text == Unused Reference: 'RFC6241' is defined on line 1363, but no explicit reference was found in the text == Unused Reference: 'RFC6991' is defined on line 1367, but no explicit reference was found in the text -- Possible downref: Non-RFC (?) normative reference: ref. 'OpenFlow' Summary: 0 errors (**), 0 flaws (~~), 10 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group V. Vassilev 3 Internet-Draft Transpacket 4 Intended status: Standards Track July 5, 2019 5 Expires: January 6, 2020 7 A YANG Data Model for Network Bridge Management 8 draft-vassilev-netmod-network-bridge-02 10 Abstract 12 This document introduces new YANG model of a network bridge. 14 Status of This Memo 16 This Internet-Draft is submitted in full conformance with the 17 provisions of BCP 78 and BCP 79. 19 Internet-Drafts are working documents of the Internet Engineering 20 Task Force (IETF). Note that other groups may also distribute 21 working documents as Internet-Drafts. The list of current Internet- 22 Drafts is at https://datatracker.ietf.org/drafts/current/. 24 Internet-Drafts are draft documents valid for a maximum of six months 25 and may be updated, replaced, or obsoleted by other documents at any 26 time. It is inappropriate to use Internet-Drafts as reference 27 material or to cite them other than as "work in progress." 29 This Internet-Draft will expire on January 6, 2020. 31 Copyright Notice 33 Copyright (c) 2019 IETF Trust and the persons identified as the 34 document authors. All rights reserved. 36 This document is subject to BCP 78 and the IETF Trust's Legal 37 Provisions Relating to IETF Documents 38 (https://trustee.ietf.org/license-info) in effect on the date of 39 publication of this document. Please review these documents 40 carefully, as they describe your rights and restrictions with respect 41 to this document. Code Components extracted from this document must 42 include Simplified BSD License text as described in Section 4.e of 43 the Trust Legal Provisions and are provided without warranty as 44 described in the Simplified BSD License. 46 Table of Contents 48 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 49 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 2 50 1.1.1. YANG . . . . . . . . . . . . . . . . . . . . . . . . 3 51 1.1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . 3 52 1.2. Problem Statement . . . . . . . . . . . . . . . . . . . . 3 53 1.3. Solution . . . . . . . . . . . . . . . . . . . . . . . . 3 54 1.3.1. Forwarding . . . . . . . . . . . . . . . . . . . . . 4 55 1.3.2. Scheduling . . . . . . . . . . . . . . . . . . . . . 4 56 2. Network Bridge Module Tree Diagram . . . . . . . . . . . . . 7 57 3. Network Bridge Flows Module Tree Diagram . . . . . . . . . . 7 58 4. Network Bridge Scheduler Module Tree Diagram . . . . . . . . 10 59 5. Network Bridge Module YANG . . . . . . . . . . . . . . . . . 12 60 6. Network Bridge Flows Module YANG . . . . . . . . . . . . . . 13 61 7. Network Bridge Scheduler Module YANG . . . . . . . . . . . . 21 62 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 29 63 8.1. NETWORK BRIDGE YANG Modules . . . . . . . . . . . . . . . 29 64 9. Security Considerations . . . . . . . . . . . . . . . . . . . 30 65 10. Normative References . . . . . . . . . . . . . . . . . . . . 30 66 Appendix A. Example . . . . . . . . . . . . . . . . . . . . . . 31 67 A.1. Model . . . . . . . . . . . . . . . . . . . . . . . . . . 31 68 A.2. Scheduler diagram . . . . . . . . . . . . . . . . . . . . 33 69 A.3. Topology . . . . . . . . . . . . . . . . . . . . . . . . 34 70 A.4. CLI listing . . . . . . . . . . . . . . . . . . . . . . . 34 71 A.5. Configuration Data Instance . . . . . . . . . . . . . . . 36 72 A.6. Companion YANG Data Model for Implementations Not 73 Compliant with NMDA . . . . . . . . . . . . . . . . . . . 46 74 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 48 76 1. Introduction 78 There is a need for a YANG model for management of network bridges. 79 The model should allow the variety of existing forwarding and 80 scheduling technologies to be defined as interoperable modules that 81 can be interconnected and extended. 83 1.1. Terminology 85 The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 86 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 87 "OPTIONAL" in this document are to be interpreted as described in BCP 88 14, [RFC2119]. 90 1.1.1. YANG 92 The following terms are defined in [RFC7950]: 94 o must statement 96 o augment statement 98 o context node 100 o container 102 o data node 104 o key leaf 106 o leaf 108 o leaf-list 110 o list 112 1.1.2. Tree Diagrams 114 Tree diagrams used in this document follow the notation defined in 115 [RFC8340]. 117 1.2. Problem Statement 119 This document attempts to address the problem of defining YANG model 120 of a network bridge that can be used as common framework by different 121 forwarding and scheduling implementations. 123 1.3. Solution 125 A Network bridge has more then 1 ingress and 1 or more egress ports. 126 It has 1 or more traffic classes. The proposed model splits the 127 design into 2 components - 1) Forwarding component and 2) Scheduling 128 component. The forwarding component is connected to all ingress 129 ports and forwards traffic from them to the scheduler instances 130 connected to the egress ports. The scheduling component is a set of 131 scheduler instances - topologies of interconnected aggregators and 132 filters connected to a single egress port and as many as 133 ingress_ports_count*traffic_class_count datapaths from the forwarding 134 component. 136 1.3.1. Forwarding 138 The simple idea of creating a YANG model for a subset of the original 139 [OpenFlow] specification is used as base for the model for management 140 of the Forwarding Information Base (FIB) of the bridge. 142 1.3.2. Scheduling 144 The scheduler(s) have 1 or more input datapaths and 1 output. To 145 each datapath the forwarding component can forward flows. Many 146 different scheduler implementations have structure based on common 147 modular abstractions flow meters, delay lines, queues, gates and gate 148 control logic that determines the gate states based on variables 149 defined in the flow meter, the delay line or the queue or signals and 150 timers available to the gate control logic algorithm. The concept is 151 illustrated with the following model of a 2 ingress ports, 2 traffic 152 classes implementation of a 2 class strict priority scheduling 153 bridge: 155 ingress0 ingress1 156 V V 157 | | 158 +------------------------------+ 159 | FIB | 160 | class0 class1 | 161 | 0->0 1->0 0->0 1->0 | 162 +------------------------------+ 163 | | | | 164 {M} {M} {M} {M} 165 | | | | 166 \ / \ / 167 \ / \ / 168 +-------+ +-------+ 169 | Queue | | Queue | 170 |=======| |=======| 171 |=======| |=======| 172 |=======| |=======| 173 |=======| |=======| 174 +-------+ +-------+ 175 | | 176 G0 G1 177 +-----------------------------+ 178 | C | 179 | strict-priority | 180 +-----------------------------+ 181 | 182 V 183 egress* 185 The common structure of a scheduler module (S) consisting of topology 186 of consecutive flow-meters (M), gates (G) connected to a common gate 187 control - (C) with a single egress port. A new module type 188 representing delay line (D) is added to the structure of the 189 scheduler before Q. The delay line (D) is important for time- 190 sensitive scheduler models where propagation delays, store-and- 191 forward delays and even programmable delays in some cases need to be 192 represented. For certain time sensitive applications it is important 193 to differentiate between different ports due to rate conversion, 194 store and forward and other factors influencing the behavior of the 195 bridge. This is why the concept of a port class is introduced in the 196 model. 198 v v 199 | | 200 {M0} {Mn} 201 | | 202 +---+ +---+ 203 | D | | D | 204 | e | | e | 205 | l | | l | 206 | a | | a | 207 | y | | y | 208 +---+ +---+ 209 | | 210 +-----+ +-----+ 211 | Q0 | | Qn | 212 |=====| |=====| 213 |=====| ... |=====| 214 |=====| |=====| 215 |=====| |=====| 216 +-----+ +-----+ 217 | | 218 G0 Gn 219 +--------------------+ 220 | C | 221 +--------------------+ 222 | 223 v 225 Depending on the scheduler design the ingress flows can specify 226 different D and Q parameters e.g. D.time=0 means no delay, Q.len=0 227 means no buffering and immediate drop of packets in case the gate is 228 closed. With the submodules collapsed to an integral generic gate 229 controller module (GC) the diagram becomes much simpler. 231 ingress0 ingress1 232 V V 233 | | 234 +------------------------------+ 235 | FIB | 236 | class0 class1 | 237 | 0->0 1->0 0->0 1->0 | 238 +------------------------------+ 239 | | | | 240 +-----------------------------+ 241 | GC | 242 +-----------------------------+ 243 | 244 V 245 egress0 247 Complex scheduler designs exist that can combine several different 248 gate controllers into complex topology. This concept is demonstrated 249 in the example bridge. 251 2. Network Bridge Module Tree Diagram 253 module: ietf-network-bridge 254 +--rw bridge 255 +--rw ports 256 +--rw port* [name] 257 +--rw name string 258 +--rw index? uint64 260 augment /if:interfaces/if:interface: 261 +--rw port-name? -> /bridge/ports/port/name 263 3. Network Bridge Flows Module Tree Diagram 265 module: ietf-network-bridge-flows 266 +--rw packet-in-message 267 | +--rw packet-in-reason? identityref 268 | +--rw ingress? netbr:port-ref 269 | +--rw payload? binary 270 | +--rw match 271 | +--rw in-port? netbr:port-ref 272 | +--rw ethernet-match 273 | | +--rw ethernet-source! 274 | | | +--rw address yang:mac-address 275 | | | +--rw mask? yang:mac-address 276 | | +--rw ethernet-destination! 277 | | | +--rw address yang:mac-address 278 | | | +--rw mask? yang:mac-address 279 | | +--rw ethernet-type! 280 | | +--rw type ether-type 281 | +--rw vlan-match 282 | +--rw vlan-id! 283 | | +--rw vlan-id-present? boolean 284 | | +--rw vlan-id? vlan-id 285 | +--rw vlan-pcp? vlan-pcp 286 +--rw flows 287 +--rw flow* [id] 288 +--rw id flow-id 289 +--rw match 290 | +--rw in-port? netbr:port-ref 291 | +--rw ethernet-match 292 | | +--rw ethernet-source! 293 | | | +--rw address yang:mac-address 294 | | | +--rw mask? yang:mac-address 295 | | +--rw ethernet-destination! 296 | | | +--rw address yang:mac-address 297 | | | +--rw mask? yang:mac-address 298 | | +--rw ethernet-type! 299 | | +--rw type ether-type 300 | +--rw vlan-match 301 | +--rw vlan-id! 302 | | +--rw vlan-id-present? boolean 303 | | +--rw vlan-id? vlan-id 304 | +--rw vlan-pcp? vlan-pcp 305 +--rw actions 306 | +--rw action* [order] 307 | +--rw order int32 308 | +--rw (action)? 309 | +--:(output-action-case) 310 | | +--rw output-action 311 | | +--rw out-port? netbr:port-ref 312 | | +--rw max-length? uint16 313 | +--:(controller-action-case) 314 | | +--rw controller-action 315 | | +--rw max-length? uint16 316 | +--:(drop-action-case) 317 | | +--rw drop-action! 318 | +--:(pop-vlan-action-case) 319 | | +--rw pop-vlan-action! 320 | +--:(push-vlan-action-case) 321 | | +--rw push-vlan-action 322 | | +--rw ethernet-type? uint16 323 | | +--rw tag? int32 324 | | +--rw pcp? int32 325 | | +--rw cfi? vlan-cfi 326 | | +--rw vlan-id? vlan-id 327 | +--:(set-vlan-cfi-action-case) 328 | | +--rw set-vlan-cfi-action 329 | | +--rw vlan-cfi? vlan-cfi 330 | +--:(set-vlan-id-action-case) 331 | | +--rw set-vlan-id-action 332 | | +--rw vlan-id? vlan-id 333 | +--:(set-vlan-pcp-action-case) 334 | | +--rw set-vlan-pcp-action 335 | | +--rw vlan-pcp? vlan-pcp 336 | +--:(strip-vlan-action-case) 337 | +--rw strip-vlan-action! 338 +--rw priority? uint16 339 +--rw container-name? string 340 +--rw flow-name? string 341 +--ro flow-statistics 342 +--ro packet-count? yang:counter64 343 +--ro byte-count? yang:counter64 345 rpcs: 346 +---x transmit-packet 347 +---w input 348 +---w egress? netbr:port-ref 349 +---w ingress? netbr:port-ref 350 +---w payload? binary 351 +---w action* [order] 352 +---w order int32 353 +---w (action)? 354 +--:(output-action-case) 355 | +---w output-action 356 | +---w out-port? netbr:port-ref 357 | +---w max-length? uint16 358 +--:(controller-action-case) 359 | +---w controller-action 360 | +---w max-length? uint16 361 +--:(drop-action-case) 362 | +---w drop-action! 363 +--:(pop-vlan-action-case) 364 | +---w pop-vlan-action! 365 +--:(push-vlan-action-case) 366 | +---w push-vlan-action 367 | +---w ethernet-type? uint16 368 | +---w tag? int32 369 | +---w pcp? int32 370 | +---w cfi? vlan-cfi 371 | +---w vlan-id? vlan-id 372 +--:(set-vlan-cfi-action-case) 373 | +---w set-vlan-cfi-action 374 | +---w vlan-cfi? vlan-cfi 375 +--:(set-vlan-id-action-case) 376 | +---w set-vlan-id-action 377 | +---w vlan-id? vlan-id 378 +--:(set-vlan-pcp-action-case) 379 | +---w set-vlan-pcp-action 380 | +---w vlan-pcp? vlan-pcp 381 +--:(strip-vlan-action-case) 382 +---w strip-vlan-action! 384 notifications: 385 +---n packet-received 386 +--ro packet-in-reason? identityref 387 +--ro ingress? netbr:port-ref 388 +--ro payload? binary 389 +--ro match 390 +--ro in-port? netbr:port-ref 391 +--ro ethernet-match 392 | +--ro ethernet-source! 393 | | +--ro address yang:mac-address 394 | | +--ro mask? yang:mac-address 395 | +--ro ethernet-destination! 396 | | +--ro address yang:mac-address 397 | | +--ro mask? yang:mac-address 398 | +--ro ethernet-type! 399 | +--ro type ether-type 400 +--ro vlan-match 401 +--ro vlan-id! 402 | +--ro vlan-id-present? boolean 403 | +--ro vlan-id? vlan-id 404 +--ro vlan-pcp? vlan-pcp 406 4. Network Bridge Scheduler Module Tree Diagram 408 module: ietf-network-bridge-scheduler 409 augment /flow:flows/flow:flow: 410 +--rw traffic-class? 411 -> /netbr:bridge/sched:traffic-classes/traffic-class 412 augment /netbr:bridge/netbr:ports/netbr:port: 413 +--rw class? port-class-ref 414 +--rw class-instance-index? uint32 415 augment /netbr:bridge: 416 +--rw default-traffic-class? traffic-class-ref 417 +--rw default-port-class? traffic-class-ref 418 +--rw traffic-classes 419 | +--rw traffic-class* identityref 420 +--rw port-classes 421 +--rw port-class* identityref 423 augment /if:interfaces/if:interface: 424 +--rw scheduler 425 +--rw gate-controllers 426 +--rw gate-controller* [id] 427 +--rw id string 428 +--rw type identityref 429 +--rw inputs 430 | +--rw input* [class index] 431 | +--rw class identityref 432 | +--rw index uint32 433 | +--ro queued-pkts? uint64 434 | +--ro queued-bytes? uint64 435 | +--ro discards? uint64 436 | +--ro overflow-discards? uint64 437 | +--ro error-discards? uint64 438 +--rw input-classes 439 +--rw input-class* [class] 440 +--rw class identityref 441 +--ro queued-pkts? uint64 442 +--ro queued-bytes? uint64 443 +--ro discards? uint64 444 +--ro overflow-discards? uint64 445 +--ro error-discards? uint64 446 augment /netbr:bridge: 447 +--rw scheduler-classes 448 +--rw scheduler-class* [egress-port-class] 449 +--rw egress-port-class sched:port-class-ref 450 +--rw inputs 451 | +--rw input* [traffic-class ingress-port-class] 452 | +--rw traffic-class traffic-class-ref 453 | +--rw ingress-port-class port-class-ref 454 | +--rw gate-controller? leafref 455 | +--rw input-class? leafref 456 | +--rw base-index? uint32 457 +--rw gate-controllers 458 +--rw gate-controller* [id] 459 +--rw id string 460 +--rw type identityref 461 +--rw inputs 462 | +--rw input* [class] 463 | +--rw class identityref 464 | +--rw instance-count? uint32 465 | +--rw constant-propagation-delay? uint64 466 | +--rw configurable-delay-line? uint64 467 | +--rw queue-len? uint32 468 +--rw output 469 +--rw gate-controller? 470 | -> ../../../gate-controller/id 471 +--rw input-class? leafref 472 +--rw index? uint32 474 5. Network Bridge Module YANG 476 file "ietf-network-bridge@2019-07-05.yang" 478 module ietf-network-bridge { 479 namespace "urn:ietf:params:xml:ns:yang:ietf-network-bridge"; 480 prefix netbr; 482 import ietf-interfaces { 483 prefix if; 484 } 486 organization 487 "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; 488 contact 489 "WG Web: 490 WG List: 492 Editor: Vladimir Vassilev 493 "; 494 description 495 "This module contains a collection of YANG definitions for 496 description and management of network bridges. 498 Copyright (c) 2019 IETF Trust and the persons identified as 499 authors of the code. All rights reserved. 501 Redistribution and use in source and binary forms, with or 502 without modification, is permitted pursuant to, and subject 503 to the license terms contained in, the Simplified BSD 504 License set forth in Section 4.c of the IETF Trust's 505 Legal Provisions Relating to IETF Documents 506 (http://trustee.ietf.org/license-info). 508 This version of this YANG module is part of RFC XXXX; see 509 the RFC itself for full legal notices."; 511 revision 2019-07-05 { 512 description 513 "Initial revision."; 514 reference "RFC XXXX: Network Bridge"; 515 } 517 container bridge { 518 description "Bridge parameters."; 519 container ports { 520 description "Member ports."; 521 list port { 522 key "name"; 523 description 524 "The list of bridge ports on the device."; 525 unique "index"; 526 leaf name { 527 type string; 528 } 529 leaf index { 530 type uint64; 531 } 532 } 533 } 534 } 535 augment "/if:interfaces/if:interface" { 536 leaf port-name { 537 type leafref { 538 path "/netbr:bridge/netbr:ports/netbr:port/netbr:name"; 539 } 540 } 541 } 543 typedef port-ref { 544 type leafref { 545 path "/if:interfaces/if:interface/netbr:port-name"; 546 } 547 description 548 "This type is used by data models that need to reference 549 configured bridge ports."; 550 } 551 } 553 555 6. Network Bridge Flows Module YANG 557 file "ietf-network-bridge-flows@2019-07-05.yang" 559 module ietf-network-bridge-flows { 560 namespace "urn:ietf:params:xml:ns:yang:ietf-network-bridge-flows"; 561 prefix flow; 563 import ietf-network-bridge { 564 prefix netbr; 565 } 566 import ietf-inet-types { 567 prefix inet; 568 revision-date 2013-07-15; 569 } 570 import ietf-yang-types { 571 prefix yang; 572 revision-date 2013-07-15; 573 } 575 organization 576 "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; 577 contact 578 "WG Web: 579 WG List: 581 Editor: Vladimir Vassilev 582 "; 583 description 584 "This module contains a collection of YANG definitions for 585 description and management of network bridge based on 586 flows. 588 Copyright (c) 2019 IETF Trust and the persons identified as 589 authors of the code. All rights reserved. 591 Redistribution and use in source and binary forms, with or 592 without modification, is permitted pursuant to, and subject 593 to the license terms contained in, the Simplified BSD 594 License set forth in Section 4.c of the IETF Trust's 595 Legal Provisions Relating to IETF Documents 596 (http://trustee.ietf.org/license-info). 598 This version of this YANG module is part of RFC XXXX; see 599 the RFC itself for full legal notices."; 601 revision 2019-07-05 { 602 description 603 "Unreleased revision."; 604 reference 605 "RFC XXXX: Network Bridge"; 606 } 608 typedef vlan-pcp { 609 type uint8 { 610 range "0..7"; 611 } 612 description 613 "IEEE 802.1p priority. It indicates the frame priority level. 614 Values are from 0 (best effort) to 7 (highest); 615 1 represents the lowest priority."; 616 } 618 typedef vlan-id { 619 type uint16 { 620 range "0..4095"; 621 } 622 } 624 typedef ether-type { 625 type uint32; 626 } 628 typedef vlan-cfi { 629 type int32; 630 } 632 grouping address { 633 choice address { 634 case ipv4 { 635 leaf ipv4-address { 636 type inet:ipv4-prefix; 637 } 638 } 639 case ipv6 { 640 leaf ipv6-address { 641 type inet:ipv6-prefix; 642 } 643 } 644 } 645 } 647 grouping ordered { 648 leaf order { 649 type int32; 650 } 651 } 653 grouping action-list { 654 list action { 655 key "order"; 656 uses ordered; 657 uses action; 658 } 659 } 661 grouping action { 662 choice action { 663 case output-action-case { 664 container output-action { 665 leaf out-port { 666 type netbr:port-ref; 667 } 668 leaf max-length { 669 type uint16; 670 } 671 } 672 } 673 case controller-action-case { 674 container controller-action { 675 leaf max-length { 676 type uint16; 677 } 678 } 679 } 680 case drop-action-case { 681 container drop-action { 682 presence "no content action"; 683 } 684 } 685 case pop-vlan-action-case { 686 container pop-vlan-action { 687 presence "no content action"; 688 } 689 } 690 case push-vlan-action-case { 691 container push-vlan-action { 692 leaf ethernet-type { 693 type uint16; 694 } 695 leaf tag { 696 type int32; 697 } 698 leaf pcp { 699 type int32; 700 } 701 leaf cfi { 702 type vlan-cfi; 703 } 704 leaf vlan-id { 705 type vlan-id; 706 } 707 } 708 } 709 case set-vlan-cfi-action-case { 710 container set-vlan-cfi-action { 711 leaf vlan-cfi { 712 type vlan-cfi; 713 } 714 } 715 } 716 case set-vlan-id-action-case { 717 container set-vlan-id-action { 718 leaf vlan-id { 719 type vlan-id; 720 } 721 } 722 } 723 case set-vlan-pcp-action-case { 724 container set-vlan-pcp-action { 725 leaf vlan-pcp { 726 type vlan-pcp; 727 } 728 } 729 } 730 case strip-vlan-action-case { 731 container strip-vlan-action { 732 presence "no content action"; 733 } 734 } 735 } 736 } 738 grouping mac-address-filter { 739 leaf address { 740 type yang:mac-address; 741 mandatory true; 742 } 743 leaf mask { 744 type yang:mac-address; 745 } 746 } 748 grouping ethernet-match-fields { 749 container ethernet-source { 750 presence "Match field is active and set"; 751 description 752 "Ethernet source address."; 753 uses mac-address-filter; 754 } 755 container ethernet-destination { 756 presence "Match field is active and set"; 757 description 758 "Ethernet destination address."; 760 uses mac-address-filter; 761 } 762 container ethernet-type { 763 presence "Match field is active and set"; 764 description 765 "Ethernet frame type."; 766 leaf type { 767 type ether-type; 768 mandatory true; 769 } 770 } 771 } 773 grouping vlan-match-fields { 774 container vlan-id { 775 presence "Match field is active and set"; 776 description 777 "VLAN id."; 778 leaf vlan-id-present { 779 type boolean; 780 } 781 leaf vlan-id { 782 type vlan-id; 783 } 784 } 785 leaf vlan-pcp { 786 type vlan-pcp; 787 description 788 "VLAN priority."; 789 } 790 } 792 grouping match { 793 leaf in-port { 794 type netbr:port-ref; 795 } 796 container ethernet-match { 797 uses ethernet-match-fields; 798 } 799 container vlan-match { 800 uses vlan-match-fields; 801 } 802 } 804 grouping raw-packet { 805 description 806 "Basic packet structure."; 807 leaf ingress { 808 type netbr:port-ref; 809 } 810 leaf payload { 811 type binary; 812 } 813 } 815 grouping packet-in { 816 leaf packet-in-reason { 817 type identityref { 818 base packet-in-reason; 819 } 820 } 821 uses raw-packet; 822 } 824 grouping ethernet-packet { 825 description 826 "Ethernet packet headers structure."; 827 leaf source { 828 type yang:mac-address; 829 } 830 leaf destination { 831 type yang:mac-address; 832 } 833 } 835 identity packet-in-reason { 836 description 837 "Base identity for all the available packet in reasons."; 838 } 840 identity no-match { 841 base packet-in-reason; 842 description 843 "No matching flow in the classifier"; 844 } 846 identity send-to-controller { 847 base packet-in-reason; 848 description 849 "Explicit instruction to send packet to controller"; 850 } 852 identity invalid-ttl { 853 base packet-in-reason; 854 description 855 "Packet with invalid TTL"; 857 } 859 notification packet-received { 860 description 861 "Delivery of incoming packet."; 862 uses packet-in; 863 container match { 864 uses match; 865 } 866 } 868 rpc transmit-packet { 869 description 870 "Sending packet out."; 871 input { 872 leaf egress { 873 type netbr:port-ref; 874 } 875 uses raw-packet; 876 uses action-list; 877 } 878 } 880 container packet-in-message { 881 uses packet-in; 882 container match { 883 uses match; 884 } 885 } 887 grouping flow { 888 container match { 889 uses match; 890 } 891 container actions { 892 uses action-list; 893 } 894 leaf priority { 895 type uint16; 896 } 897 leaf container-name { 898 type string; 899 } 900 leaf flow-name { 901 type string; 902 } 903 } 904 typedef flow-id { 905 type inet:uri; 906 } 908 container flows { 909 list flow { 910 key "id"; 911 leaf id { 912 type flow-id; 913 } 914 uses flow; 915 container flow-statistics { 916 config false; 917 leaf packet-count { 918 type yang:counter64; 919 } 920 leaf byte-count { 921 type yang:counter64; 922 } 923 } 924 } 925 } 926 } 928 930 7. Network Bridge Scheduler Module YANG 932 file "ietf-network-bridge-scheduler@2019-07-05.yang" 934 module ietf-network-bridge-scheduler { 935 namespace "urn:ietf:params:xml:ns:yang:ietf-network-bridge-scheduler"; 936 prefix sched; 938 import ietf-network-bridge { 939 prefix netbr; 940 } 941 import ietf-network-bridge-flows { 942 prefix flow; 943 } 944 import ietf-interfaces { 945 prefix if; 946 } 948 organization 949 "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; 950 contact 951 "WG Web: 952 WG List: 954 Editor: Vladimir Vassilev 955 "; 956 description 957 "This module contains a collection of YANG definitions for 958 description and management of network bridge schedulers. 960 Copyright (c) 2019 IETF Trust and the persons identified as 961 authors of the code. All rights reserved. 963 Redistribution and use in source and binary forms, with or 964 without modification, is permitted pursuant to, and subject 965 to the license terms contained in, the Simplified BSD 966 License set forth in Section 4.c of the IETF Trust's 967 Legal Provisions Relating to IETF Documents 968 (http://trustee.ietf.org/license-info). 970 This version of this YANG module is part of RFC XXXX; see 971 the RFC itself for full legal notices."; 973 revision 2019-07-05 { 974 description 975 "Initial revision."; 976 reference 977 "RFC XXXX: Network Bridge"; 978 } 980 identity gate-controller { 981 description 982 "Represents the gate control block type e.g. round-robin, 983 priority-based, time-aware-802dot1qbv etc."; 984 } 986 identity aggregator { 987 base gate-controller; 988 description 989 "Abstract identity that all gate control blocks with multiple 990 inputs and single output use as basetype e.g. round-robin, 991 priority-based, time-aware-802dot1qbv etc."; 992 } 994 identity filter { 995 base gate-controller; 996 description 997 "Abstract identity that all gate control blocks with corresponding 998 input and output instances use as basetype e.g. rate-limiters, 999 simple propagation delays, shapers etc."; 1001 } 1003 identity gate-controller-input { 1004 description 1005 "Identifies gate controller input type."; 1006 } 1008 identity private-queue-aggregator-input { 1009 base gate-controller-input; 1010 description 1011 "Abstract input identifier for gate controller 1012 inputs of the aggregator type where all 1013 instances of the input types derived from 1014 this identifier have their own private queue."; 1015 } 1017 identity shared-queue-aggregator-input { 1018 base gate-controller-input; 1019 description 1020 "Abstract input identifier for gate controller 1021 inputs of the aggregator type where all 1022 instances of the input types derived from 1023 this identifier have shared queue."; 1024 } 1026 identity filter-input { 1027 base gate-controller-input; 1028 description 1029 "Abstract input identifier for gate controller 1030 inputs of the filter type."; 1031 } 1033 identity traffic-class { 1034 description 1035 "Identifies traffic class."; 1036 } 1038 identity port-class { 1039 description 1040 "Identifies port class. Ports that belong to a class 1041 will have the same scheduler-class on their egress 1042 and have identical flow path through the rest of 1043 the scheduler classes."; 1044 } 1046 typedef port-class-ref { 1047 type leafref { 1048 path "/netbr:bridge/sched:port-classes/sched:port-class"; 1050 } 1051 description 1052 "This type is used by data models that need to reference 1053 configured port-class."; 1054 } 1056 typedef traffic-class-ref { 1057 type leafref { 1058 path "/netbr:bridge/sched:traffic-classes/sched:traffic-class"; 1059 } 1060 description 1061 "This type is used by data models that need to reference 1062 configured traffic-class."; 1063 } 1065 augment "/flow:flows/flow:flow" { 1066 leaf traffic-class { 1067 type leafref { 1068 path "/netbr:bridge/sched:traffic-classes/sched:traffic-class"; 1069 } 1070 description 1071 "Specifies the traffic class of a flow. 1072 When not present the default traffic class is used."; 1073 } 1074 } 1076 augment "/netbr:bridge/netbr:ports/netbr:port" { 1077 leaf class { 1078 type port-class-ref; 1079 } 1080 leaf class-instance-index { 1081 type uint32; 1082 } 1083 } 1085 augment "/netbr:bridge" { 1086 leaf default-traffic-class { 1087 type traffic-class-ref; 1088 description 1089 "Specifies the traffic-class for flows without 1090 /flow:flows/flow:flow/sched:traffic-class leaf."; 1091 } 1092 leaf default-port-class { 1093 type traffic-class-ref; 1094 description 1095 "Specifies the traffic-class for flows without 1096 /flow:flows/flow:flow/sched:traffic-class leaf."; 1097 } 1098 container traffic-classes { 1099 leaf-list traffic-class { 1100 type identityref { 1101 base traffic-class; 1102 } 1103 } 1104 } 1105 container port-classes { 1106 leaf-list port-class { 1107 type identityref { 1108 base port-class; 1109 } 1110 } 1111 } 1112 } 1114 grouping gate-controller-input-config { 1115 leaf constant-propagation-delay { 1116 type uint64; 1117 units "picoseconds"; 1118 description 1119 "Constant delay attributed to delays in the gate-controller."; 1120 } 1121 leaf configurable-delay-line { 1122 type uint64; 1123 units "picoseconds"; 1124 description 1125 "Some gate controllers can delay the flow of packets with 1126 configurable delay which is added to the constant 1127 propagation-delay. Only inputs with zero queue lengths 1128 have deterministic delays equal to the sum of the 1129 constant-propagation-delay and the configurable-delay-line 1130 leafs. Inputs with queues have variable higher delay with 1131 dynamic component based on the controllers logic."; 1132 } 1133 leaf queue-len { 1134 type uint32; 1135 units "bytes"; 1136 } 1137 } 1139 grouping gate-controller-queue-state { 1140 leaf queued-pkts { 1141 type uint64; 1142 config false; 1143 } 1144 leaf queued-bytes { 1145 type uint64; 1146 config false; 1147 } 1148 leaf discards { 1149 type uint64; 1150 config false; 1151 description 1152 "The total number of discarded packets that were 1153 received on this input. This includes but is not 1154 limited to the overflow-discards. For example 1155 gate-controllers can start discarding certain 1156 packets before the input queue is filled. These 1157 discards are not registered as overflow-discards. 1159 The lower 32 bits of the sum of all discards 1160 counters part of a scheduler are equal to the 1161 /if:interfaces/if:interface/if:statistics/if:out-discards 1162 counter for the corresponding interface."; 1163 } 1164 leaf overflow-discards { 1165 type uint64; 1166 config false; 1167 description 1168 "Unintended discard caused by overflow of 1169 the input queue of the gate controller."; 1170 } 1171 leaf error-discards { 1172 type uint64; 1173 config false; 1174 } 1175 } 1177 augment "/if:interfaces/if:interface" { 1178 container scheduler { 1179 container gate-controllers { 1180 list gate-controller { 1181 key "id"; 1182 leaf id { 1183 type string; 1184 } 1185 leaf type { 1186 type identityref { 1187 base gate-controller; 1188 } 1189 mandatory true; 1190 } 1191 container inputs { 1192 list input { 1193 key "class index"; 1194 leaf class { 1195 type identityref { 1196 base gate-controller-input; 1197 } 1198 } 1199 leaf index { 1200 type uint32; 1201 } 1202 uses gate-controller-queue-state; 1203 } 1204 } 1205 container input-classes { 1206 list input-class { 1207 key "class"; 1208 leaf class { 1209 type identityref { 1210 base gate-controller-input; 1211 } 1212 } 1213 uses gate-controller-queue-state; 1214 } 1215 } 1216 } 1217 } 1218 } 1219 } 1221 augment "/netbr:bridge" { 1222 container scheduler-classes { 1223 list scheduler-class { 1224 key "egress-port-class"; 1225 leaf egress-port-class { 1226 type sched:port-class-ref; 1227 } 1228 container inputs { 1229 list input { 1230 key "traffic-class ingress-port-class"; 1231 leaf traffic-class { 1232 type traffic-class-ref; 1233 } 1234 leaf ingress-port-class { 1235 type port-class-ref; 1236 } 1237 leaf gate-controller { 1238 type leafref { 1239 path "../../../gate-controllers/gate-controller/id"; 1240 } 1241 } 1242 leaf input-class { 1243 type leafref { 1244 path "../../../gate-controllers/gate-controller" 1245 + "[id=current()/../gate-controller]" 1246 + "/inputs/input/class"; 1247 } 1248 } 1249 leaf base-index { 1250 type uint32; 1251 default "0"; 1252 } 1253 } 1254 } 1255 container gate-controllers { 1256 list gate-controller { 1257 key "id"; 1258 leaf id { 1259 type string; 1260 } 1261 leaf type { 1262 type identityref { 1263 base gate-controller; 1264 } 1265 mandatory true; 1266 } 1267 container inputs { 1268 list input { 1269 key "class"; 1270 leaf class { 1271 type identityref { 1272 base gate-controller-input; 1273 } 1274 mandatory true; 1275 } 1276 leaf instance-count { 1277 type uint32; 1278 } 1279 uses gate-controller-input-config; 1280 } 1281 } 1282 container output { 1283 leaf gate-controller { 1284 type leafref { 1285 path "../../../gate-controller/id"; 1286 } 1287 } 1288 leaf input-class { 1289 type leafref { 1290 path "../../../gate-controller" 1291 + "[id=current()/../gate-controller]/" 1292 + "inputs/input/class"; 1293 } 1294 } 1295 leaf index { 1296 type uint32; 1297 description 1298 "In case the gate-controller is aggregator this is the 1299 index of the only input it is connected to from the 1300 specified class. 1301 If the gate-controller is filter with more then one 1302 input-output pairs this is the base index and the 1303 remaining indexes are connected to consecutive input 1304 indexes of the specified input class."; 1305 } 1306 } 1307 } 1308 } 1309 } 1310 } 1311 } 1312 } 1314 1316 8. IANA Considerations 1318 8.1. NETWORK BRIDGE YANG Modules 1320 This document registers 3 YANG modules in the YANG Module Names 1321 registry [RFC7950]. 1323 name: ietf-network-bridge 1324 namespace: 1325 urn:ietf:params:xml:ns:yang:ietf-network-bridge 1326 prefix: netbr 1327 // RFC Ed. remove this line and replace XXXX in next line 1328 reference: RFC XXXX 1330 name: ietf-network-bridge-flows 1331 namespace: 1332 urn:ietf:params:xml:ns:yang:ietf-network-bridge-flows 1333 prefix: flow 1334 // RFC Ed. remove this line and replace XXXX in next line 1335 reference: RFC XXXX 1336 name: ietf-network-bridge-scheduler 1337 namespace: 1338 urn:ietf:params:xml:ns:yang:ietf-network-bridge-scheduler 1339 prefix: sched 1340 // RFC Ed. remove this line and replace XXXX in next line 1341 reference: RFC XXXX 1343 9. Security Considerations 1345 This document does not introduce any new security concerns in 1346 addition to those specified in [RFC7950], section 15. 1348 10. Normative References 1350 [OpenFlow] 1351 "Open Networking Foundation", ""OpenFlow Switch 1352 Specification"", December 2009, 1353 . 1357 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1358 Requirement Levels", BCP 14, RFC 2119, March 1997. 1360 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 1361 January 2004. 1363 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1364 and A. Bierman, Ed., "Network Configuration Protocol 1365 (NETCONF)", RFC 6241, June 2011. 1367 [RFC6991] Schoenwaelder, J., "Common YANG Data Types", RFC 6991, 1368 July 2013. 1370 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1371 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1372 . 1374 [RFC8340] Bjorklund, M., Ed. and L. Berger, Ed., "YANG Tree 1375 Diagrams", RFC 8340, DOI 10.17487/RFC8340, March 2018, 1376 . 1378 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 1379 and R. Wilton, "Network Management Datastore Architecture 1380 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 1381 . 1383 Appendix A. Example 1385 Example bridge with signaling, video0, video1 and best-effort traffic 1386 classes. 1388 A.1. Model 1390 module example-bridge { 1391 yang-version 1.1; 1392 namespace "http://example.com/ns/example-bridge"; 1393 prefix example; 1395 import ietf-network-bridge { 1396 prefix netbr; 1397 } 1398 import ietf-network-bridge-scheduler { 1399 prefix sched; 1400 } 1402 organization 1403 "example.com"; 1404 description 1405 "Example of bridge."; 1407 revision 2018-07-15 { 1408 description 1409 "Initial."; 1410 } 1412 identity video0 { 1413 base sched:traffic-class; 1414 } 1416 identity video1 { 1417 base sched:traffic-class; 1418 } 1420 identity signaling { 1421 base sched:traffic-class; 1422 } 1424 identity best-effort { 1425 base sched:traffic-class; 1426 } 1428 identity default-port { 1429 base sched:port-class; 1430 } 1431 //Strict priority aggregator with 3 classes: 1432 identity strict-priority-aggregator { 1433 base sched:aggregator; 1434 } 1436 identity pri0 { 1437 base sched:shared-queue-aggregator-input; 1438 base strict-priority-aggregator; 1439 } 1441 identity pri1 { 1442 base sched:shared-queue-aggregator-input; 1443 base strict-priority-aggregator; 1444 } 1446 identity pri2 { 1447 base sched:shared-queue-aggregator-input; 1448 base strict-priority-aggregator; 1449 } 1451 //Cyclic timeslot schedule aggregator with 2 timeslots: 1452 identity cyclic-timeslot-schedule-aggregator { 1453 base sched:aggregator; 1454 } 1456 identity timeslot0 { 1457 base sched:shared-queue-aggregator-input; 1458 base cyclic-timeslot-schedule-aggregator; 1459 } 1461 identity timeslot1 { 1462 base sched:shared-queue-aggregator-input; 1463 base cyclic-timeslot-schedule-aggregator; 1464 } 1466 augment "/netbr:bridge/sched:scheduler-classes/sched:scheduler-class" 1467 + "/sched:gate-controllers/sched:gate-controller" { 1468 when "./sched:type = 'example:cyclic-timeslot-schedule-aggregator'"; 1469 leaf period { 1470 type uint32; 1471 units "nanoseconds"; 1472 } 1473 leaf time-slot0-interval { 1474 type uint32; 1475 units "nanoseconds"; 1476 } 1477 leaf time-slot1-interval { 1478 type uint32; 1479 units "nanoseconds"; 1480 } 1481 } 1483 //Rate limiter - filter: 1484 identity rate-limiter { 1485 base sched:filter; 1486 } 1488 identity in { 1489 base sched:filter-input; 1490 base rate-limiter; 1491 } 1493 augment "/netbr:bridge/sched:scheduler-classes/sched:scheduler-class" 1494 + "/sched:gate-controllers/sched:gate-controller" { 1495 when "./sched:type = 'example:rate-limiter'"; 1496 leaf interval { 1497 type uint32; 1498 units "nanoseconds"; 1499 } 1500 leaf limit { 1501 type uint32; 1502 units "octets"; 1503 } 1504 } 1505 } 1507 A.2. Scheduler diagram 1509 The scheduler toplogy and the gate controller instances are specified 1510 in the operational configuration data that can be modified or not 1511 depending on the underlying implementation. The single letter 1512 identifiers for the gate-controllers have the following identities: 1514 o r1,r2 - rate-limiter instances 1516 o a - trivial aggregator instance (implemented using strict- 1517 priority-aggregator) 1519 o t - cyclic-timeslot-schedule-aggregator instance 1521 o p - strict-priority-aggregator instance 1522 signaling video0 video1 best-effort 1523 v v v v 1524 | | | | 1525 +--+ +-----------+ / 1526 |r1| | t | / 1527 +--+ +-----------+ / 1528 | | / 1529 +-+ | / 1530 |a| | / 1531 +-+ | / 1532 | / / 1533 +--+ / / 1534 |r2| / / 1535 +--+ / / 1536 | / / 1537 +---------------+ 1538 | p | 1539 +---------------+ 1540 | 1541 v 1543 A.3. Topology 1545 The example flow configuration is for the topology in the diagram 1546 below. 1548 +-------+ p0 +-------+ p1 +-------+ 1549 | host0 |------| br0 |-----| host1 | 1550 +-------+ +-------+ +-------+ 1551 p2| 1552 +-------+ 1553 | host2 | 1554 +-------+ 1556 A.4. CLI listing 1558 CLI commands configuring flows and assigning flows to traffic- 1559 classes: 1561 > create /flows/flow[id='video0'] -- \ 1562 match/vlan-match/vlan-id/vlan-id=10 \ 1563 actions/action[order='0']/output-action/out-port=p2 1564 > merge /flows/flow[id='video0'] -- traffic-class=video0 1565 > create /flows/flow[id='video1'] -- \ 1566 match/vlan-match/vlan-id/vlan-id=11 \ 1567 actions/action[order='0']/output-action/out-port=p2 1568 > merge /flows/flow[id='video1'] -- traffic-class=video1 1569 > create /flows/flow[id='best-effort-to-host0'] -- \ 1570 match/ethernet-match/ethernet-destination\ 1571 /address=00:01:02:03:00:00 \ 1572 actions/action[order='0']/output-action/out-port=p0 1573 > merge /flows/flow[id='best-effort-to-host0'] -- \ 1574 traffic-class=best-effort 1575 > create /flows/flow[id='best-effort-to-host1'] -- \ 1576 match/ethernet-match/ethernet-destination\ 1577 /address=00:01:02:03:00:01 \ 1578 actions/action[order='0']/output-action/out-port=p1 1579 > merge /flows/flow[id='best-effort-to-host1'] -- \ 1580 traffic-class=best-effort 1581 > create /flows/flow[id='best-effort-to-host2'] -- \ 1582 match/ethernet-match/ethernet-destination\ 1583 /address=00:01:02:03:00:02 \ 1584 actions/action[order='0']/output-action/out-port=p2 1585 > merge /flows/flow[id='best-effort-to-host2'] -- \ 1586 traffic-class=best-effort 1587 > create /flows/flow[id='ptp-to-host0'] -- \ 1588 match/ethernet-match/ethernet-destination\ 1589 /address=00:01:02:03:00:00 \ 1590 actions/action[order='0']/output-action/out-port=p0 1591 > merge /flows/flow[id='ptp-to-host0'] -- \ 1592 traffic-class=signaling 1593 > create /flows/flow[id='ptp-to-host1'] -- \ 1594 match/ethernet-match/ethernet-destination\ 1595 /address=00:01:02:03:00:01 \ 1596 actions/action[order='0']/output-action/out-port=p1 1597 > merge /flows/flow[id='ptp-to-host1'] -- \ 1598 traffic-class=signaling 1599 > create /flows/flow[id='ptp-to-host2'] -- \ 1600 match/ethernet-match/ethernet-destination\ 1601 /address=00:01:02:03:00:02 \ 1602 actions/action[order='0']/output-action/out-port=p2 1603 > merge /flows/flow[id='ptp-to-host2'] -- \ 1604 traffic-class=signaling 1605 > commit 1607 CLI commands configuring and monitorig the scheduler: 1609 > replace /bridge/scheduler-classes/scheduler-class/gate-controllers\ 1610 /gate-controller[id='p']/inputs/input/queue-len value=1048576 1611 > replace /bridge/scheduler-classes/scheduler-class/gate-controllers\ 1612 /gate-controller[id='t']/time-slot0-interval value=5000000 1613 > commit 1614 > xget /interfaces/interface[name='if2']/scheduler/gate-controllers\ 1615 /gate-controller[id='r1']/inputs/input[index='1']/overflow-discards 1616 ... 1617 overflow-discards 33 1618 ... 1619 > xget /interfaces/interface[name='if2']/scheduler/gate-controllers\ 1620 /gate-controller[id='p']/input-classes/ 1621 input-class[class='pri2']/overflow-discards 1622 ... 1623 overflow-discards 1000000 1624 ... 1626 A.5. Configuration Data Instance 1628 1629 1630 1631 1632 1633 p0 1634 0 1635 1638 example:default-port 1639 1641 0 1642 1643 1644 p1 1645 1 1646 1649 example:default-port 1650 1652 1 1653 1654 1655 p2 1656 2 1657 1660 example:default-port 1661 1663 2 1664 1665 1666 1669 example:best-effort 1670 1673 example:best-effort 1674 1677 1679 example:best-effort 1680 1682 example:signaling 1683 1685 example:video0 1686 1688 example:video1 1689 1690 1693 1694 example:default-port 1695 1696 1699 1700 1702 example:default-port 1703 1704 1705 1707 example:best-effort 1708 1710 example:default-port 1711 p 1712 1714 example:pri2 1715 0 1716 1717 1718 1720 example:signaling 1721 1723 example:default-port 1724 r1 1725 1727 example:in 1728 0 1729 1730 1731 1733 example:video0 1734 1736 example:default-port 1737 t 1738 1740 example:timeslot0 1741 0 1742 1743 1744 1746 example:video1 1747 1749 example:default-port 1750 t 1751 1753 example:timeslot1 1754 0 1755 1756 1757 1758 1759 a 1760 1762 example:strict-priority-aggregator 1763 1764 1765 1767 example:pri0 1768 3 1769 2048 1770 1771 1772 1773 r2 1774 1776 example:in 1777 0 1778 1779 1780 1781 p 1782 1783 example:strict-priority-aggregator 1784 1785 1786 1788 example:pri0 1789 1 1790 2048 1791 1792 1793 1795 example:pri1 1796 1 1797 32768 1798 1799 1800 1802 example:pri2 1803 3 1804 1048576 1805 1806 1807 1808 1809 r1 1810 1812 example:rate-limiter 1813 1814 1815 1817 example:in 1818 3 1819 1820 1821 1822 a 1823 1825 example:pri0 1826 0 1827 1828 1829 10000000 1830 1831 12500 1832 1833 1834 r2 1835 1836 example:rate-limiter 1837 1838 1839 1841 example:in 1842 1 1843 1844 1845 1846 p 1847 1849 example:pri0 1850 0 1851 1852 1853 10000000 1854 1855 125000 1856 1857 1858 t 1859 1860 example:cyclic-timeslot-schedule-aggregator 1861 1862 1863 1865 example:timeslot0 1866 3 1867 1048576 1868 1869 1870 1872 example:timeslot1 1873 3 1874 1048576 1875 1876 1877 1878 p 1879 1881 example:pri0 1882 2 1883 1884 1885 10000000 1886 1888 5000000 1889 1891 5000000 1892 1893 1894 1895 1896 1897 1898 1899 best-effort-to-host0 1900 1901 1902 1903
00:01:02:03:00:00
1904
1905
1906
1907 1908 1909 0 1910 1911 p0 1912 1913 1914 1915 1918 example:best-effort 1919
1920 1921 best-effort-to-host1 1922 1923 1924 1925
00:01:02:03:00:01
1926
1927
1928
1929 1930 1931 0 1932 1933 p1 1934 1935 1936 1937 1940 example:best-effort 1941
1942 1943 best-effort-to-host2 1944 1945 1946 1947
00:01:02:03:00:02
1948
1949
1950
1951 1952 1953 0 1954 1955 p2 1956 1957 1958 1959 1962 example:best-effort 1963
1964 1965 ptp-to-host0 1966 1967 1968 1969
00:01:02:03:00:00
1970
1971
1972
1973 1974 1975 0 1976 1977 p0 1978 1979 1980 1981 1984 example:signaling 1985
1986 1987 ptp-to-host1 1988 1989 1990 1991
00:01:02:03:00:01
1992
1994
1995
1996 1997 1998 0 1999 2000 p1 2001 2002 2003 2004 2007 example:signaling 2008
2009 2010 ptp-to-host2 2011 2012 2013 2014
00:01:02:03:00:02
2015
2016
2017
2018 2019 2020 0 2021 2022 p2 2023 2024 2025 2026 2029 example:signaling 2030
2031 2032 video0 2033 2034 2035 2036 10 2037 2038 2039 2040 2041 2042 0 2043 2044 p2 2045 2046 2047 2048 2051 example:video0 2052 2053 2054 video1 2055 2056 2057 2058 11 2059 2060 2061 2062 2063 2064 0 2065 2066 p2 2067 2068 2069 2070 2073 example:video1 2074 2075
2076 2077 2078 if0 2079 2081 ianaift:ethernetCsmacd 2082 2084 p0 2085 2086 2087 if1 2088 2089 ianaift:ethernetCsmacd 2090 2092 p1 2093 2094 2095 if2 2096 2097 ianaift:ethernetCsmacd 2098 2100 p2 2101 2102 2103 2104 2105
2107 A.6. Companion YANG Data Model for Implementations Not Compliant with 2108 NMDA 2110 The YANG modules defined in this document are designed to be used in 2111 conjunction with implementations that support the Network Management 2112 Datastore Architecture (NMDA) as defined in [RFC8342]. In order to 2113 allow implementations to use the data model even in cases when NMDA 2114 is not supported, the following companion module is defined. 2116 file "ietf-network-bridge-scheduler- 2117 state@2019-07-05.yang" 2119 module ietf-network-bridge-scheduler-state { 2120 namespace 2121 "urn:ietf:params:xml:ns:yang:ietf-network-bridge-scheduler-state"; 2122 prefix sched-state; 2124 import ietf-interfaces { 2125 prefix if; 2126 } 2127 import ietf-network-bridge-scheduler { 2128 prefix sched; 2129 } 2131 organization 2132 "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; 2133 contact 2134 "WG Web: 2135 WG List: 2137 Editor: Vladimir Vassilev 2138 "; 2139 description 2140 "This module contains /if:interfaces-state/if:interface 2141 augmentation which mirrors the 'scheduler' container 2142 as the one part of the 'ietf-network-bridge-scheduler' 2143 but contains only read-only state data. The data model is 2144 not needed when the underlying implementation infrastructure 2145 supports the Network Management Datastore Architecture (NMDA). 2147 Copyright (c) 2019 IETF Trust and the persons identified as 2148 authors of the code. All rights reserved. 2150 Redistribution and use in source and binary forms, with or 2151 without modification, is permitted pursuant to, and subject 2152 to the license terms contained in, the Simplified BSD 2153 License set forth in Section 4.c of the IETF Trust's 2154 Legal Provisions Relating to IETF Documents 2155 (http://trustee.ietf.org/license-info). 2157 This version of this YANG module is part of RFC XXXX; see 2158 the RFC itself for full legal notices."; 2160 revision 2019-07-05 { 2161 description 2162 "Initial revision."; 2163 reference 2164 "RFC XXXX: Network Bridge"; 2165 } 2167 augment "/if:interfaces-state/if:interface" { 2168 container scheduler { 2169 container gate-controllers { 2170 list gate-controller { 2171 key "id type"; 2172 leaf id { 2173 type string; 2174 } 2175 leaf type { 2176 type identityref { 2177 base sched:gate-controller; 2178 } 2179 mandatory true; 2180 } 2181 container inputs { 2182 list input { 2183 key "class index"; 2184 leaf class { 2185 type identityref { 2186 base sched:gate-controller-input; 2187 } 2188 } 2189 leaf index { 2190 type uint32; 2191 } 2192 uses sched:gate-controller-queue-state; 2193 } 2194 } 2195 container input-classes { 2196 list input-class { 2197 key "class"; 2198 leaf class { 2199 type identityref { 2200 base sched:gate-controller-input; 2201 } 2202 } 2203 uses sched:gate-controller-queue-state; 2204 } 2205 } 2206 } 2207 } 2208 } 2209 } 2210 } 2212 2214 Author's Address 2216 Vladimir Vassilev 2217 Transpacket 2219 Email: vladimir@transpacket.com