idnits 2.17.1 draft-vassilev-netmod-network-bridge-01.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 (January 7, 2019) is 1930 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 1322, but no explicit reference was found in the text == Unused Reference: 'RFC6241' is defined on line 1325, but no explicit reference was found in the text == Unused Reference: 'RFC6991' is defined on line 1329, but no explicit reference was found in the text == Unused Reference: 'XSD' is defined on line 1345, but no explicit reference was found in the text -- Possible downref: Non-RFC (?) normative reference: ref. 'OpenFlow' -- Possible downref: Non-RFC (?) normative reference: ref. 'XSD' Summary: 0 errors (**), 0 flaws (~~), 11 warnings (==), 3 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 January 7, 2019 5 Expires: July 11, 2019 7 A YANG Data Model for Network Bridge Management 8 draft-vassilev-netmod-network-bridge-01 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 July 11, 2019. 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 . . . . . . . . . . . . 20 62 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28 63 8.1. NETWORK BRIDGE YANG Modules . . . . . . . . . . . . . . . 28 64 9. Security Considerations . . . . . . . . . . . . . . . . . . . 29 65 10. Normative References . . . . . . . . . . . . . . . . . . . . 29 66 Appendix A. Example . . . . . . . . . . . . . . . . . . . . . . 30 67 A.1. Model . . . . . . . . . . . . . . . . . . . . . . . . . . 30 68 A.2. Scheduler diagram . . . . . . . . . . . . . . . . . . . . 33 69 A.3. Topology . . . . . . . . . . . . . . . . . . . . . . . . 33 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 | +--(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 342 rpcs: 343 +---x transmit-packet 344 +---w input 345 +---w egress? netbr:port-ref 346 +---w ingress? netbr:port-ref 347 +---w payload? binary 348 +---w action* [order] 349 +---w order int32 350 +--(action)? 351 +--:(output-action-case) 352 | +---w output-action 353 | +---w out-port? netbr:port-ref 354 | +---w max-length? uint16 355 +--:(controller-action-case) 356 | +---w controller-action 357 | +---w max-length? uint16 358 +--:(drop-action-case) 359 | +---w drop-action! 360 +--:(pop-vlan-action-case) 361 | +---w pop-vlan-action! 362 +--:(push-vlan-action-case) 363 | +---w push-vlan-action 364 | +---w ethernet-type? uint16 365 | +---w tag? int32 366 | +---w pcp? int32 367 | +---w cfi? vlan-cfi 368 | +---w vlan-id? vlan-id 369 +--:(set-vlan-cfi-action-case) 370 | +---w set-vlan-cfi-action 371 | +---w vlan-cfi? vlan-cfi 372 +--:(set-vlan-id-action-case) 373 | +---w set-vlan-id-action 374 | +---w vlan-id? vlan-id 375 +--:(set-vlan-pcp-action-case) 376 | +---w set-vlan-pcp-action 377 | +---w vlan-pcp? vlan-pcp 378 +--:(strip-vlan-action-case) 379 +---w strip-vlan-action! 381 notifications: 382 +---n packet-received 383 +--ro packet-in-reason? identityref 384 +--ro ingress? netbr:port-ref 385 +--ro payload? binary 386 +--ro match 387 +--ro in-port? netbr:port-ref 388 +--ro ethernet-match 389 | +--ro ethernet-source! 390 | | +--ro address yang:mac-address 391 | | +--ro mask? yang:mac-address 392 | +--ro ethernet-destination! 393 | | +--ro address yang:mac-address 394 | | +--ro mask? yang:mac-address 395 | +--ro ethernet-type! 396 | +--ro type ether-type 397 +--ro vlan-match 398 +--ro vlan-id! 399 | +--ro vlan-id-present? boolean 400 | +--ro vlan-id? vlan-id 401 +--ro vlan-pcp? vlan-pcp 403 4. Network Bridge Scheduler Module Tree Diagram 405 module: ietf-network-bridge-scheduler 406 augment /flow:flows/flow:flow: 407 +--rw traffic-class? 408 -> /netbr:bridge/sched:traffic-classes/traffic-class 409 augment /netbr:bridge/netbr:ports/netbr:port: 410 +--rw class? port-class-ref 411 +--rw class-instance-index? uint32 412 augment /netbr:bridge: 413 +--rw default-traffic-class? traffic-class-ref 414 +--rw default-port-class? traffic-class-ref 415 +--rw traffic-classes 416 | +--rw traffic-class* identityref 417 +--rw port-classes 418 +--rw port-class* identityref 419 augment /if:interfaces/if:interface: 420 +--rw scheduler 421 +--rw gate-controllers 422 +--rw gate-controller* [id type] 423 +--rw id string 424 +--rw type identityref 425 +--rw inputs 426 | +--rw input* [class index] 427 | +--rw class identityref 428 | +--rw index uint32 429 | +--ro queued-pkts? uint64 430 | +--ro queued-bytes? uint64 431 | +--ro discards? uint64 432 | +--ro overflow-discards? uint64 433 | +--ro error-discards? uint64 434 +--rw input-classes 435 +--rw input-class* [class] 436 +--rw class identityref 437 +--ro queued-pkts? uint64 438 +--ro queued-bytes? uint64 439 +--ro discards? uint64 440 +--ro overflow-discards? uint64 441 +--ro error-discards? uint64 442 augment /netbr:bridge: 443 +--rw scheduler-classes 444 +--rw scheduler-class* [egress-port-class] 445 +--rw egress-port-class sched:port-class-ref 446 +--rw inputs 447 | +--rw input* [traffic-class ingress-port-class] 448 | +--rw traffic-class traffic-class-ref 449 | +--rw ingress-port-class port-class-ref 450 | +--rw gate-controller? leafref 451 | +--rw input-class? leafref 452 | +--rw base-index? uint32 453 +--rw gate-controllers 454 +--rw gate-controller* [id] 455 +--rw id string 456 +--rw type identityref 457 +--rw inputs 458 | +--rw input* [class] 459 | +--rw class identityref 460 | +--rw instance-count? uint32 461 | +--rw constant-propagation-delay? uint64 462 | +--rw configurable-delay-line? uint64 463 | +--rw queue-len? uint32 464 +--rw output 465 +--rw gate-controller? 466 | -> ../../../gate-controller/id 467 +--rw input-class? leafref 468 +--rw index? uint32 470 5. Network Bridge Module YANG 472 file "ietf-network-bridge@2018-07-15.yang" 474 module ietf-network-bridge { 475 namespace "urn:ietf:params:xml:ns:yang:ietf-network-bridge"; 476 prefix netbr; 478 import ietf-interfaces { 479 prefix if; 480 } 482 organization 483 "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; 484 contact 485 "WG Web: 486 WG List: 488 Editor: Vladimir Vassilev 489 "; 490 description 491 "This module contains a collection of YANG definitions for 492 description and management of network bridges. 494 Copyright (c) 2015 IETF Trust and the persons identified as 495 authors of the code. All rights reserved. 497 Redistribution and use in source and binary forms, with or 498 without modification, is permitted pursuant to, and subject 499 to the license terms contained in, the Simplified BSD License 500 set forth in Section 4.c of the IETF Trust's Legal Provisions 501 Relating to IETF Documents 502 (http://trustee.ietf.org/license-info). 504 This version of this YANG module is part of RFC XXXX; see 505 the RFC itself for full legal notices."; 507 revision 2018-07-15 { 508 description 509 "Initial revision."; 510 reference "RFC XXXX: Network Bridge"; 511 } 513 container bridge { 514 container ports { 515 list port { 516 key "name"; 517 unique "index"; 518 leaf name { 519 type string; 520 } 521 leaf index { 522 type uint64; 523 } 524 } 525 } 526 } 527 augment "/if:interfaces/if:interface" { 528 leaf port-name { 529 type leafref { 530 path "/netbr:bridge/netbr:ports/netbr:port/netbr:name"; 531 } 532 } 533 } 535 typedef port-ref { 536 type leafref { 537 path "/if:interfaces/if:interface/netbr:port-name"; 538 } 539 description 540 "This type is used by data models that need to reference 541 configured bridge ports."; 542 } 543 } 545 547 6. Network Bridge Flows Module YANG 549 file "ietf-network-bridge-flows@2018-07-15.yang" 551 module ietf-network-bridge-flows { 552 namespace "urn:ietf:params:xml:ns:yang:ietf-network-bridge-flows"; 553 prefix flow; 555 import ietf-network-bridge { 556 prefix netbr; 557 } 558 import ietf-inet-types { 559 prefix inet; 560 revision-date 2013-07-15; 561 } 562 import ietf-yang-types { 563 prefix yang; 564 revision-date 2013-07-15; 565 } 566 organization 567 "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; 568 contact 569 "WG Web: 570 WG List: 572 Editor: Vladimir Vassilev 573 "; 575 description 576 "This module contains a collection of YANG definitions for 577 description and management of network bridge based on 578 flows."; 580 revision 2018-07-15 { 581 description 582 "Unreleased revision."; 583 reference "RFC XXXX: Network Bridge"; 584 } 586 typedef vlan-cfi { 587 type int32; 588 } 590 grouping address { 591 choice address { 592 case ipv4 { 593 leaf ipv4-address { 594 type inet:ipv4-prefix; 595 } 596 } 597 case ipv6 { 598 leaf ipv6-address { 599 type inet:ipv6-prefix; 600 } 601 } 602 } 603 } 605 grouping ordered { 606 leaf order { 607 type int32; 608 } 609 } 611 grouping action-list { 612 list action { 613 key "order"; 614 uses ordered; 615 uses action; 616 } 617 } 619 grouping action { 620 choice action { 621 case output-action-case { 622 container output-action { 623 leaf out-port { 624 type netbr:port-ref; 625 } 626 leaf max-length { 627 type uint16; 628 } 629 } 630 } 631 case controller-action-case { 632 container controller-action { 633 leaf max-length { 634 type uint16; 635 } 636 } 637 } 638 case drop-action-case { 639 container drop-action { 640 presence "no content action"; 641 } 642 } 643 case pop-vlan-action-case { 644 container pop-vlan-action { 645 presence "no content action"; 646 } 647 } 648 case push-vlan-action-case { 649 container push-vlan-action { 650 leaf ethernet-type { 651 type uint16; 652 } 653 leaf tag { 654 type int32; 655 } 656 leaf pcp { 657 type int32; 658 } 659 leaf cfi { 660 type vlan-cfi; 661 } 662 leaf vlan-id { 663 type vlan-id; 664 } 665 } 666 } 667 case set-vlan-cfi-action-case { 668 container set-vlan-cfi-action { 669 leaf vlan-cfi { 670 type vlan-cfi; 671 } 672 } 673 } 674 case set-vlan-id-action-case { 675 container set-vlan-id-action { 676 leaf vlan-id { 677 type vlan-id; 678 } 679 } 680 } 681 case set-vlan-pcp-action-case { 682 container set-vlan-pcp-action { 683 leaf vlan-pcp { 684 type vlan-pcp; 685 } 686 } 687 } 688 case strip-vlan-action-case { 689 container strip-vlan-action { 690 presence "no content action"; 691 } 692 } 693 } 694 } 696 typedef vlan-pcp { 697 description 698 "IEEE 802.1p priority. It indicates the frame priority level. 699 Values are from 0 (best effort) to 7 (highest); 700 1 represents the lowest priority."; 701 type uint8 { 702 range "0..7"; 703 } 704 } 706 typedef vlan-id { 707 type uint16 { 708 range "0..4095"; 709 } 711 } 713 typedef ether-type { 714 type uint32; 715 } 717 grouping mac-address-filter { 718 leaf address { 719 mandatory true; 720 type yang:mac-address; 721 } 722 leaf mask { 723 type yang:mac-address; 724 } 725 } 727 grouping ethernet-match-fields { 728 container ethernet-source { 729 description 730 "Ethernet source address."; 731 presence "Match field is active and set"; 732 uses mac-address-filter; 733 } 734 container ethernet-destination { 735 description 736 "Ethernet destination address."; 737 presence "Match field is active and set"; 738 uses mac-address-filter; 739 } 740 container ethernet-type { 741 description 742 "Ethernet frame type."; 743 presence "Match field is active and set"; 744 leaf type { 745 mandatory true; 746 type ether-type; 747 } 748 } 749 } 751 grouping vlan-match-fields { 752 container vlan-id { 753 description 754 "VLAN id."; 755 presence "Match field is active and set"; 756 leaf vlan-id-present { 757 type boolean; 758 } 759 leaf vlan-id { 760 type vlan-id; 761 } 762 } 763 leaf vlan-pcp { 764 description 765 "VLAN priority."; 766 type vlan-pcp; 767 } 768 } 770 grouping match { 771 leaf in-port { 772 type netbr:port-ref; 773 } 774 container ethernet-match { 775 uses ethernet-match-fields; 776 } 777 container vlan-match { 778 uses vlan-match-fields; 779 } 780 } 782 grouping raw-packet { 783 description 784 "Basic packet structure."; 785 leaf ingress { 786 type netbr:port-ref; 787 } 788 leaf payload { 789 type binary; 790 } 791 } 793 grouping packet-in { 794 leaf packet-in-reason { 795 type identityref { 796 base packet-in-reason; 797 } 798 } 799 uses raw-packet; 800 } 802 grouping ethernet-packet { 803 description 804 "Ethernet packet headers structure."; 805 leaf source { 806 type yang:mac-address; 808 } 809 leaf destination { 810 type yang:mac-address; 811 } 812 } 814 identity packet-in-reason { 815 description 816 "Base identity for all the available packet in reasons."; 817 } 819 identity no-match { 820 base packet-in-reason; 821 description 822 "No matching flow in the classifier"; 823 } 825 identity send-to-controller { 826 base packet-in-reason; 827 description 828 "Explicit instruction to send packet to controller"; 829 } 831 identity invalid-ttl { 832 base packet-in-reason; 833 description 834 "Packet with invalid TTL"; 835 } 837 notification packet-received { 838 description 839 "Delivery of incoming packet."; 840 uses packet-in; 841 container match { 842 uses match; 843 } 844 } 845 rpc transmit-packet { 846 description 847 "Sending packet out."; 848 input { 849 leaf egress { 850 type netbr:port-ref; 851 } 852 uses raw-packet; 853 uses action-list; 854 } 855 } 856 container packet-in-message { 857 uses packet-in; 858 container match { 859 uses match; 860 } 861 } 863 grouping flow { 864 container match { 865 uses match; 866 } 867 container actions { 868 uses action-list; 869 } 870 leaf priority { 871 type uint16; 872 } 873 leaf container-name { 874 type string; 875 } 876 leaf flow-name { 877 type string; 878 } 879 } 881 typedef flow-id { 882 type inet:uri; 883 } 885 container flows { 886 list flow { 887 key "id"; 888 leaf id { 889 type flow-id; 890 } 891 uses flow; 892 } 893 } 894 } 896 898 7. Network Bridge Scheduler Module YANG 900 file "ietf-network-bridge-scheduler@2019-01-07.yang" 902 module ietf-network-bridge-scheduler { 903 namespace "urn:ietf:params:xml:ns:yang:ietf-network-bridge-scheduler"; 904 prefix sched; 906 import ietf-network-bridge { 907 prefix netbr; 908 } 909 import ietf-network-bridge-flows { 910 prefix flow; 911 } 912 import ietf-interfaces { 913 prefix if; 914 } 916 organization 917 "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; 918 contact 919 "WG Web: 920 WG List: 922 Editor: Vladimir Vassilev 923 "; 924 description 925 "This module contains a collection of YANG definitions for 926 description and management of network bridge schedulers. 928 Copyright (c) 2019 IETF Trust and the persons identified as 929 authors of the code. All rights reserved. 931 Redistribution and use in source and binary forms, with or 932 without modification, is permitted pursuant to, and subject 933 to the license terms contained in, the Simplified BSD License 934 set forth in Section 4.c of the IETF Trust's Legal Provisions 935 Relating to IETF Documents 936 (http://trustee.ietf.org/license-info). 938 This version of this YANG module is part of RFC XXXX; see 939 the RFC itself for full legal notices."; 941 revision 2019-01-07 { 942 description 943 "Initial revision."; 944 reference "RFC XXXX: Network Bridge"; 945 } 947 identity gate-controller { 948 description 949 "Represents the gate control block type e.g. round-robin, 950 priority-based, time-aware-802dot1qbv etc."; 951 } 952 identity aggregator { 953 base gate-controller; 954 description 955 "Abstract identity that all gate control blocks with multiple 956 inputs and single output use as basetype e.g. round-robin, 957 priority-based, time-aware-802dot1qbv etc."; 958 } 960 identity filter { 961 base gate-controller; 962 description 963 "Abstract identity that all gate control blocks with corresponding 964 input and output instances use as basetype e.g. rate-limiters, 965 simple propagation delays, shapers etc."; 966 } 968 identity gate-controller-input { 969 description 970 "Identifies gate controller input type."; 971 } 973 identity private-queue-aggregator-input { 974 base gate-controller-input; 975 description 976 "Abstract input identifier for gate controller 977 inputs of the aggregator type where all 978 instances of the input types derived from 979 this identifier have their own private queue."; 980 } 982 identity shared-queue-aggregator-input { 983 base gate-controller-input; 984 description 985 "Abstract input identifier for gate controller 986 inputs of the aggregator type where all 987 instances of the input types derived from 988 this identifier have shared queue."; 989 } 991 identity filter-input { 992 base gate-controller-input; 993 description 994 "Abstract input identifier for gate controller 995 inputs of the filter type."; 996 } 998 identity traffic-class { 999 description 1000 "Identifies traffic class."; 1001 } 1003 identity port-class { 1004 description 1005 "Identifies port class. Ports that belong to a class 1006 will have the same scheduler-class on their egress 1007 and have identical flow path through the rest of 1008 the scheduler classes."; 1009 } 1011 typedef port-class-ref { 1012 type leafref { 1013 path "/netbr:bridge/sched:port-classes/sched:port-class"; 1014 } 1015 description 1016 "This type is used by data models that need to reference 1017 configured port-class."; 1018 } 1020 typedef traffic-class-ref { 1021 type leafref { 1022 path "/netbr:bridge/sched:traffic-classes/sched:traffic-class"; 1023 } 1024 description 1025 "This type is used by data models that need to reference 1026 configured traffic-class."; 1027 } 1029 augment "/flow:flows/flow:flow" { 1030 leaf traffic-class { 1031 type leafref { 1032 path "/netbr:bridge/sched:traffic-classes/sched:traffic-class"; 1033 } 1034 description 1035 "Specifies the traffic class of a flow. 1036 When not present the default traffic class is used."; 1037 } 1038 } 1039 augment "/netbr:bridge/netbr:ports/netbr:port" { 1040 leaf class { 1041 type port-class-ref; 1042 } 1043 leaf class-instance-index { 1044 type uint32; 1045 } 1046 } 1047 augment "/netbr:bridge" { 1048 leaf default-traffic-class { 1049 type traffic-class-ref; 1050 description 1051 "Specifies the traffic-class for flows without 1052 /flow:flows/flow:flow/sched:traffic-class leaf."; 1053 } 1054 leaf default-port-class { 1055 type traffic-class-ref; 1056 description 1057 "Specifies the traffic-class for flows without 1058 /flow:flows/flow:flow/sched:traffic-class leaf."; 1059 } 1060 container traffic-classes { 1061 leaf-list traffic-class { 1062 type identityref { 1063 base traffic-class; 1064 } 1065 } 1066 } 1067 container port-classes { 1068 leaf-list port-class { 1069 type identityref { 1070 base port-class; 1071 } 1072 } 1073 } 1074 } 1076 grouping gate-controller-input-config { 1077 leaf constant-propagation-delay { 1078 type uint64; 1079 description 1080 "Constant delay attributed to delays in the gate-controller."; 1081 units "picoseconds"; 1082 } 1083 leaf configurable-delay-line { 1084 type uint64; 1085 description 1086 "Some gate controllers can delay the flow of packets with 1087 configurable delay which is added to the constant 1088 propagation-delay. Only inputs with zero queue lengths 1089 have deterministic delays equal to the sum of the 1090 constant-propagation-delay and the configurable-delay-line 1091 leafs. Inputs with queues have variable higher delay with 1092 dynamic component based on the controllers logic."; 1093 units "picoseconds"; 1094 } 1095 leaf queue-len { 1096 type uint32; 1097 units "bytes"; 1098 } 1099 } 1101 grouping gate-controller-queue-state { 1102 leaf queued-pkts { 1103 config false; 1104 type uint64; 1105 } 1106 leaf queued-bytes { 1107 config false; 1108 type uint64; 1109 } 1110 leaf discards { 1111 config false; 1112 type uint64; 1113 description 1114 "The total number of discarded packets that were 1115 received on this input. This includes but is not 1116 limited to the overflow-discards. For example 1117 gate-controllers can start discarding certain 1118 packets before the input queue is filled. These 1119 discards are not registered as overflow-discards. 1121 The lower 32 bits of the sum of all discards 1122 counters part of a scheduler are equal to the 1123 /if:interfaces/if:interface/if:statistics/if:out-discards 1124 counter for the corresponding interface."; 1125 } 1126 leaf overflow-discards { 1127 config false; 1128 type uint64; 1129 description 1130 "Unintended discard caused by overflow of 1131 the input queue of the gate controller."; 1132 } 1133 leaf error-discards { 1134 config false; 1135 type uint64; 1136 } 1137 } 1139 augment "/if:interfaces/if:interface" { 1140 container scheduler { 1141 container gate-controllers { 1142 list gate-controller { 1143 key "id"; 1144 leaf id { 1145 type string; 1146 } 1147 leaf type { 1148 type identityref { 1149 base gate-controller; 1150 } 1151 mandatory true; 1152 } 1153 container inputs { 1154 list input { 1155 key "class index"; 1156 leaf class { 1157 type identityref { 1158 base gate-controller-input; 1159 } 1160 } 1161 leaf index { 1162 type uint32; 1163 } 1164 uses gate-controller-queue-state; 1165 } 1166 } 1167 container input-classes { 1168 list input-class { 1169 key "class"; 1170 leaf class { 1171 type identityref { 1172 base gate-controller-input; 1173 } 1174 } 1175 uses gate-controller-queue-state; 1176 } 1177 } 1178 } 1179 } 1180 } 1181 } 1182 augment "/netbr:bridge" { 1183 container scheduler-classes { 1184 list scheduler-class { 1185 key "egress-port-class"; 1186 leaf egress-port-class { 1187 type sched:port-class-ref; 1188 } 1189 container inputs { 1190 list input { 1191 key "traffic-class ingress-port-class"; 1192 leaf traffic-class { 1193 type traffic-class-ref; 1194 } 1195 leaf ingress-port-class { 1196 type port-class-ref; 1197 } 1198 leaf gate-controller { 1199 type leafref { 1200 path "../../../gate-controllers/gate-controller/id"; 1201 } 1202 } 1203 leaf input-class { 1204 type leafref { 1205 path "../../../gate-controllers/gate-controller" 1206 + "[id=current()/../gate-controller]" 1207 + "/inputs/input/class"; 1208 } 1209 } 1210 leaf base-index { 1211 type uint32; 1212 default "0"; 1213 } 1214 } 1215 } 1216 container gate-controllers { 1217 list gate-controller { 1218 key "id"; 1219 leaf id { 1220 type string; 1221 } 1222 leaf type { 1223 type identityref { 1224 base gate-controller; 1225 } 1226 mandatory true; 1227 } 1228 container inputs { 1229 list input { 1230 key "class"; 1231 leaf class { 1232 type identityref { 1233 base gate-controller-input; 1234 } 1235 mandatory true; 1236 } 1237 leaf instance-count { 1238 type uint32; 1239 } 1240 uses gate-controller-input-config; 1241 } 1242 } 1243 container output { 1244 leaf gate-controller { 1245 type leafref { 1246 path "../../../gate-controller/id"; 1247 } 1248 } 1249 leaf input-class { 1250 type leafref { 1251 path "../../../gate-controller" 1252 + "[id=current()/../gate-controller]/" 1253 + "inputs/input/class"; 1254 } 1255 } 1256 leaf index { 1257 type uint32; 1258 description 1259 "In case the gate-controller is aggregator this is the 1260 index of the only input it is connected to from the 1261 specified class. 1262 If the gate-controller is filter with more then one 1263 input-output pairs this is the base index and the 1264 remaining indexes are connected to consecutive input 1265 indexes of the specified input class."; 1266 } 1267 } 1268 } 1269 } 1270 } 1271 } 1272 } 1273 } 1275 1277 8. IANA Considerations 1279 8.1. NETWORK BRIDGE YANG Modules 1281 This document registers 3 YANG modules in the YANG Module Names 1282 registry [RFC7950]. 1284 name: ietf-network-bridge 1285 namespace: 1286 urn:ietf:params:xml:ns:yang:ietf-network-bridge 1287 prefix: netbr 1288 // RFC Ed. remove this line and replace XXXX in next line 1289 reference: RFC XXXX 1291 name: ietf-network-bridge-flows 1292 namespace: 1293 urn:ietf:params:xml:ns:yang:ietf-network-bridge-flows 1294 prefix: flow 1295 // RFC Ed. remove this line and replace XXXX in next line 1296 reference: RFC XXXX 1298 name: ietf-network-bridge-scheduler 1299 namespace: 1300 urn:ietf:params:xml:ns:yang:ietf-network-bridge-scheduler 1301 prefix: sched 1302 // RFC Ed. remove this line and replace XXXX in next line 1303 reference: RFC XXXX 1305 9. Security Considerations 1307 This document does not introduce any new security concerns in 1308 addition to those specified in [RFC7950], section 15. 1310 10. Normative References 1312 [OpenFlow] 1313 "Open Networking Foundation", ""OpenFlow Switch 1314 Specification"", December 2009, 1315 . 1319 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1320 Requirement Levels", BCP 14, RFC 2119, March 1997. 1322 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 1323 January 2004. 1325 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1326 and A. Bierman, Ed., "Network Configuration Protocol 1327 (NETCONF)", RFC 6241, June 2011. 1329 [RFC6991] Schoenwaelder, J., "Common YANG Data Types", RFC 6991, 1330 July 2013. 1332 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1333 RFC 7950, DOI 10.17487/RFC7950, August 2016, 1334 . 1336 [RFC8340] Bjorklund, M., Ed. and L. Berger, Ed., "YANG Tree 1337 Diagrams", RFC 8340, DOI 10.17487/RFC8340, March 2018, 1338 . 1340 [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., 1341 and R. Wilton, "Network Management Datastore Architecture 1342 (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, 1343 . 1345 [XSD] Malhotra, A. and P. Biron, "XML Schema Part 2: Datatypes 1346 Second Edition", World Wide Web Consortium Recommendation 1347 REC-xmlschema-2-20041028, October 2004, 1348 . 1350 Appendix A. Example 1352 Example bridge with signaling, video0, video1 and best-effort traffic 1353 classes. 1355 A.1. Model 1357 file "example-bridge@2018-07-15.yang" 1359 module example-bridge { 1360 yang-version 1.1; 1361 namespace "http://example.com/ns/example-bridge"; 1362 prefix example; 1364 import ietf-network-bridge { 1365 prefix netbr; 1366 } 1367 import ietf-network-bridge-scheduler { 1368 prefix sched; 1369 } 1371 organization 1372 "example.com"; 1373 description 1374 "Example of bridge."; 1376 revision 2018-07-15 { 1377 description 1378 "Initial."; 1379 } 1380 identity video0 { 1381 base sched:traffic-class; 1382 } 1384 identity video1 { 1385 base sched:traffic-class; 1386 } 1388 identity signaling { 1389 base sched:traffic-class; 1390 } 1392 identity best-effort { 1393 base sched:traffic-class; 1394 } 1396 identity default-port { 1397 base sched:port-class; 1398 } 1400 //Strict priority aggregator with 3 classes: 1401 identity strict-priority-aggregator { 1402 base sched:aggregator; 1403 } 1405 identity pri0 { 1406 base sched:shared-queue-aggregator-input; 1407 base strict-priority-aggregator; 1408 } 1410 identity pri1 { 1411 base sched:shared-queue-aggregator-input; 1412 base strict-priority-aggregator; 1413 } 1415 identity pri2 { 1416 base sched:shared-queue-aggregator-input; 1417 base strict-priority-aggregator; 1418 } 1420 //Cyclic timeslot schedule aggregator with 2 timeslots: 1421 identity cyclic-timeslot-schedule-aggregator { 1422 base sched:aggregator; 1423 } 1425 identity timeslot0 { 1426 base sched:shared-queue-aggregator-input; 1427 base cyclic-timeslot-schedule-aggregator; 1428 } 1430 identity timeslot1 { 1431 base sched:shared-queue-aggregator-input; 1432 base cyclic-timeslot-schedule-aggregator; 1433 } 1435 augment "/netbr:bridge/sched:scheduler-classes/sched:scheduler-class" 1436 + "/sched:gate-controllers/sched:gate-controller" { 1437 when "./sched:type = 'example:cyclic-timeslot-schedule-aggregator'"; 1438 leaf period { 1439 type uint32; 1440 units "nanoseconds"; 1441 } 1442 leaf time-slot0-interval { 1443 type uint32; 1444 units "nanoseconds"; 1445 } 1446 leaf time-slot1-interval { 1447 type uint32; 1448 units "nanoseconds"; 1449 } 1450 } 1452 //Rate limiter - filter: 1453 identity rate-limiter { 1454 base sched:filter; 1455 } 1457 identity in { 1458 base sched:filter-input; 1459 base rate-limiter; 1460 } 1462 augment "/netbr:bridge/sched:scheduler-classes/sched:scheduler-class" 1463 + "/sched:gate-controllers/sched:gate-controller" { 1464 when "./sched:type = 'example:rate-limiter'"; 1465 leaf interval { 1466 type uint32; 1467 units "nanoseconds"; 1468 } 1469 leaf limit { 1470 type uint32; 1471 units "octets"; 1472 } 1473 } 1474 } 1475 1477 A.2. Scheduler diagram 1479 The scheduler toplogy and the gate controller instances are specified 1480 in the operational configuration data that can be modified or not 1481 depending on the underlying implementation. The single letter 1482 identifiers for the gate-controllers have the following identities: 1484 o r1,r2 - rate-limiter instances 1486 o a - trivial aggregator instance (implemented using strict- 1487 priority-aggregator) 1489 o t - cyclic-timeslot-schedule-aggregator instance 1491 o p - strict-priority-aggregator instance 1493 signaling video0 video1 best-effort 1494 v v v v 1495 | | | | 1496 +--+ +-----------+ / 1497 |r1| | t | / 1498 +--+ +-----------+ / 1499 | | / 1500 +-+ | / 1501 |a| | / 1502 +-+ | / 1503 | / / 1504 +--+ / / 1505 |r2| / / 1506 +--+ / / 1507 | / / 1508 +---------------+ 1509 | p | 1510 +---------------+ 1511 | 1512 v 1514 A.3. Topology 1516 The example flow configuration is for the topology in the diagram 1517 below. 1519 +-------+ p0 +-------+ p1 +-------+ 1520 | host0 |------| br0 |-----| host1 | 1521 +-------+ +-------+ +-------+ 1522 p2| 1523 +-------+ 1524 | host2 | 1525 +-------+ 1527 A.4. CLI listing 1529 CLI commands configuring flows and assigning flows to traffic- 1530 classes: 1532 > create /flows/flow[id='video0'] -- \ 1533 match/vlan-match/vlan-id/vlan-id=10 \ 1534 actions/action[order='0']/output-action/out-port=p2 1535 > merge /flows/flow[id='video0'] -- traffic-class=video0 1536 > create /flows/flow[id='video1'] -- \ 1537 match/vlan-match/vlan-id/vlan-id=11 \ 1538 actions/action[order='0']/output-action/out-port=p2 1539 > merge /flows/flow[id='video1'] -- traffic-class=video1 1540 > create /flows/flow[id='best-effort-to-host0'] -- \ 1541 match/ethernet-match/ethernet-destination\ 1542 /address=00:01:02:03:00:00 \ 1543 actions/action[order='0']/output-action/out-port=p0 1544 > merge /flows/flow[id='best-effort-to-host0'] -- \ 1545 traffic-class=best-effort 1546 > create /flows/flow[id='best-effort-to-host1'] -- \ 1547 match/ethernet-match/ethernet-destination\ 1548 /address=00:01:02:03:00:01 \ 1549 actions/action[order='0']/output-action/out-port=p1 1550 > merge /flows/flow[id='best-effort-to-host1'] -- \ 1551 traffic-class=best-effort 1552 > create /flows/flow[id='best-effort-to-host2'] -- \ 1553 match/ethernet-match/ethernet-destination\ 1554 /address=00:01:02:03:00:02 \ 1555 actions/action[order='0']/output-action/out-port=p2 1556 > merge /flows/flow[id='best-effort-to-host2'] -- \ 1557 traffic-class=best-effort 1558 > create /flows/flow[id='ptp-to-host0'] -- \ 1559 match/ethernet-match/ethernet-destination\ 1560 /address=00:01:02:03:00:00 \ 1561 actions/action[order='0']/output-action/out-port=p0 1562 > merge /flows/flow[id='ptp-to-host0'] -- \ 1563 traffic-class=signaling 1564 > create /flows/flow[id='ptp-to-host1'] -- \ 1565 match/ethernet-match/ethernet-destination\ 1566 /address=00:01:02:03:00:01 \ 1567 actions/action[order='0']/output-action/out-port=p1 1568 > merge /flows/flow[id='ptp-to-host1'] -- \ 1569 traffic-class=signaling 1570 > create /flows/flow[id='ptp-to-host2'] -- \ 1571 match/ethernet-match/ethernet-destination\ 1572 /address=00:01:02:03:00:02 \ 1573 actions/action[order='0']/output-action/out-port=p2 1574 > merge /flows/flow[id='ptp-to-host2'] -- \ 1575 traffic-class=signaling 1576 > commit 1578 CLI commands configuring and monitorig the scheduler: 1580 > replace /bridge/scheduler-classes/scheduler-class/gate-controllers\ 1581 /gate-controller[id='p']/inputs/input/queue-len value=1048576 1582 > replace /bridge/scheduler-classes/scheduler-class/gate-controllers\ 1583 /gate-controller[id='t']/time-slot0-interval value=5000000 1584 > commit 1585 > xget /interfaces/interface[name='if2']/scheduler/gate-controllers\ 1586 /gate-controller[id='r1']/inputs/input[index='1']/overflow-discards 1587 ... 1588 overflow-discards 33 1589 ... 1590 > xget /interfaces/interface[name='if2']/scheduler/gate-controllers\ 1591 /gate-controller[id='p']/input-classes/ 1592 input-class[class='pri2']/overflow-discards 1593 ... 1594 overflow-discards 1000000 1595 ... 1597 A.5. Configuration Data Instance 1599 1600 1601 1602 1603 1604 p0 1605 0 1606 1609 example:default-port 1610 1612 0 1613 1614 1615 p1 1616 1 1617 1620 example:default-port 1621 1623 1 1624 1625 1626 p2 1627 2 1628 1631 example:default-port 1632 1634 2 1635 1636 1637 1640 example:best-effort 1641 1644 example:best-effort 1645 1648 1650 example:best-effort 1651 1653 example:signaling 1654 1656 example:video0 1657 1659 example:video1 1660 1661 1664 1665 example:default-port 1666 1667 1670 1671 1673 example:default-port 1674 1675 1676 1678 example:best-effort 1679 1681 example:default-port 1682 p 1683 1685 example:pri2 1686 0 1687 1688 1689 1691 example:signaling 1692 1694 example:default-port 1695 r1 1696 1698 example:in 1699 0 1700 1701 1702 1704 example:video0 1705 1707 example:default-port 1708 t 1709 1711 example:timeslot0 1712 0 1713 1714 1715 1717 example:video1 1718 1720 example:default-port 1721 t 1722 1724 example:timeslot1 1725 0 1726 1727 1728 1729 1730 a 1731 1733 example:strict-priority-aggregator 1734 1735 1736 1738 example:pri0 1739 3 1740 2048 1741 1742 1743 1744 r2 1745 1747 example:in 1748 0 1749 1750 1751 1752 p 1753 1754 example:strict-priority-aggregator 1755 1756 1757 1759 example:pri0 1760 1 1761 2048 1762 1763 1764 1766 example:pri1 1767 1 1768 32768 1769 1770 1771 1773 example:pri2 1774 3 1775 1048576 1776 1777 1778 1779 1780 r1 1781 1783 example:rate-limiter 1784 1785 1786 1788 example:in 1789 3 1790 1791 1792 1793 a 1794 1796 example:pri0 1797 0 1798 1799 1800 10000000 1801 1802 12500 1803 1804 1805 r2 1806 1807 example:rate-limiter 1808 1809 1810 1812 example:in 1813 1 1814 1815 1816 1817 p 1818 1820 example:pri0 1821 0 1822 1823 1824 10000000 1825 1826 125000 1827 1828 1829 t 1830 1831 example:cyclic-timeslot-schedule-aggregator 1832 1833 1834 1836 example:timeslot0 1837 3 1838 1048576 1839 1840 1841 1843 example:timeslot1 1844 3 1845 1048576 1846 1847 1848 1849 p 1850 1852 example:pri0 1853 2 1854 1855 1856 10000000 1857 1859 5000000 1860 1862 5000000 1863 1864 1865 1866 1867 1868 1869 1870 best-effort-to-host0 1871 1872 1873 1874
00:01:02:03:00:00
1875
1876
1877
1878 1879 1880 0 1881 1882 p0 1883 1884 1885 1886 1889 example:best-effort 1890
1891 1892 best-effort-to-host1 1893 1894 1895 1896
00:01:02:03:00:01
1897
1898
1899
1900 1901 1902 0 1903 1904 p1 1905 1906 1907 1908 1911 example:best-effort 1912
1913 1914 best-effort-to-host2 1915 1916 1917 1918
00:01:02:03:00:02
1919
1920
1921
1922 1923 1924 0 1925 1926 p2 1927 1928 1929 1930 1933 example:best-effort 1934
1935 1936 ptp-to-host0 1937 1938 1939 1940
00:01:02:03:00:00
1941
1942
1943
1944 1945 1946 0 1947 1948 p0 1949 1950 1951 1952 1955 example:signaling 1956
1957 1958 ptp-to-host1 1959 1960 1961 1962
00:01:02:03:00:01
1963
1965
1966
1967 1968 1969 0 1970 1971 p1 1972 1973 1974 1975 1978 example:signaling 1979
1980 1981 ptp-to-host2 1982 1983 1984 1985
00:01:02:03:00:02
1986
1987
1988
1989 1990 1991 0 1992 1993 p2 1994 1995 1996 1997 2000 example:signaling 2001
2002 2003 video0 2004 2005 2006 2007 10 2008 2009 2010 2011 2012 2013 0 2014 2015 p2 2016 2017 2018 2019 2022 example:video0 2023 2024 2025 video1 2026 2027 2028 2029 11 2030 2031 2032 2033 2034 2035 0 2036 2037 p2 2038 2039 2040 2041 2044 example:video1 2045 2046
2047 2048 2049 if0 2050 2052 ianaift:ethernetCsmacd 2053 2055 p0 2056 2057 2058 if1 2059 2060 ianaift:ethernetCsmacd 2061 2063 p1 2064 2065 2066 if2 2067 2068 ianaift:ethernetCsmacd 2069 2071 p2 2072 2073 2074 2075 2076
2078 A.6. Companion YANG Data Model for Implementations Not Compliant with 2079 NMDA 2081 The YANG modules defined in this document are designed to be used in 2082 conjunction with implementations that support the Network Management 2083 Datastore Architecture (NMDA) as defined in [RFC8342]. In order to 2084 allow implementations to use the data model even in cases when NMDA 2085 is not supported, the following companion module is defined. 2087 file "ietf-network-bridge-scheduler- 2088 state@2019-01-07.yang" 2090 module ietf-network-bridge-scheduler-state { 2091 namespace 2092 "urn:ietf:params:xml:ns:yang:ietf-network-bridge-scheduler-state"; 2094 prefix sched-state; 2096 import ietf-interfaces { 2097 prefix if; 2098 } 2099 import ietf-network-bridge-scheduler { 2100 prefix sched; 2101 } 2103 organization 2104 "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; 2105 contact 2106 "WG Web: 2107 WG List: 2108 Editor: Vladimir Vassilev 2109 "; 2110 description 2111 "This module contains /if:interfaces-state/if:interface 2112 augmentation which mirrors the 'scheduler' container 2113 as the one part of the 'ietf-network-bridge-scheduler' 2114 but contains only read-only state data. The data model is 2115 not needed when the underlying implementation infrastructure 2116 supports the Network Management Datastore Architecture (NMDA). 2118 Copyright (c) 2019 IETF Trust and the persons identified as 2119 authors of the code. All rights reserved. 2121 Redistribution and use in source and binary forms, with or 2122 without modification, is permitted pursuant to, and subject 2123 to the license terms contained in, the Simplified BSD License 2124 set forth in Section 4.c of the IETF Trust's Legal Provisions 2125 Relating to IETF Documents 2126 (http://trustee.ietf.org/license-info). 2128 This version of this YANG module is part of RFC XXXX; see 2129 the RFC itself for full legal notices."; 2131 revision 2019-01-07 { 2132 description 2133 "Initial revision."; 2134 reference "RFC XXXX: Network Bridge"; 2135 } 2137 augment "/if:interfaces-state/if:interface" { 2138 container scheduler { 2139 container gate-controllers { 2140 list gate-controller { 2141 key "id type"; 2142 leaf id { 2143 type string; 2144 } 2145 leaf type { 2146 type identityref { 2147 base sched:gate-controller; 2148 } 2149 mandatory true; 2150 } 2151 container inputs { 2152 list input { 2153 key "class index"; 2154 leaf class { 2155 type identityref { 2156 base sched:gate-controller-input; 2157 } 2158 } 2159 leaf index { 2160 type uint32; 2161 } 2162 uses sched:gate-controller-queue-state; 2163 } 2164 } 2165 container input-classes { 2166 list input-class { 2167 key "class"; 2168 leaf class { 2169 type identityref { 2170 base sched:gate-controller-input; 2171 } 2172 } 2173 uses sched:gate-controller-queue-state; 2174 } 2175 } 2176 } 2177 } 2178 } 2179 } 2180 } 2182 2184 Author's Address 2186 Vladimir Vassilev 2187 Transpacket 2189 Email: vladimir@transpacket.com