idnits 2.17.1 draft-asechoud-rtgwg-qos-model-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: ---------------------------------------------------------------------------- == It seems as if not all pages are separated by form feeds - found 0 form feeds but 72 pages Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** The document seems to lack an IANA Considerations section. (See Section 2.2 of https://www.ietf.org/id-info/checklist for how to handle the case when there are no actions for IANA.) Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 187 has weird spacing: '...cal-not boo...' == Line 209 has weird spacing: '...cal-not boo...' == Line 211 has weird spacing: '...on-type ide...' == Line 231 has weird spacing: '...on-type ide...' == Line 235 has weird spacing: '...on-type ide...' == (26 more instances...) -- The document date (April 30, 2017) is 2552 days in the past. Is this intentional? -- Found something which looks like a code comment -- if you have code sections in the document, please surround them with '' and '' lines. Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) ** Downref: Normative reference to an Informational RFC: RFC 2697 ** Downref: Normative reference to an Informational RFC: RFC 2698 ** Obsolete normative reference: RFC 7223 (Obsoleted by RFC 8343) Summary: 4 errors (**), 0 flaws (~~), 8 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group A. Choudhary 3 Internet-Draft M. Jethanandani 4 Intended status: Standards Track Cisco Systems 5 Expires: November 1, 2017 N. Strahle 6 E. Aries 7 Juniper Networks 8 I. Chen 9 Kuatro Technologies 10 April 30, 2017 12 YANG Model for QoS 13 draft-asechoud-rtgwg-qos-model-01 15 Abstract 17 This document describes a YANG model for Quality of Service (QoS) 18 configuration and operational parameters. 20 Status of This Memo 22 This Internet-Draft is submitted in full conformance with the 23 provisions of BCP 78 and BCP 79. 25 Internet-Drafts are working documents of the Internet Engineering 26 Task Force (IETF). Note that other groups may also distribute 27 working documents as Internet-Drafts. The list of current Internet- 28 Drafts is at http://datatracker.ietf.org/drafts/current/. 30 Internet-Drafts are draft documents valid for a maximum of six months 31 and may be updated, replaced, or obsoleted by other documents at any 32 time. It is inappropriate to use Internet-Drafts as reference 33 material or to cite them other than as "work in progress." 35 This Internet-Draft will expire on November 1, 2017. 37 Copyright Notice 39 Copyright (c) 2017 IETF Trust and the persons identified as the 40 document authors. All rights reserved. 42 This document is subject to BCP 78 and the IETF Trust's Legal 43 Provisions Relating to IETF Documents 44 (http://trustee.ietf.org/license-info) in effect on the date of 45 publication of this document. Please review these documents 46 carefully, as they describe your rights and restrictions with respect 47 to this document. Code Components extracted from this document must 48 include Simplified BSD License text as described in Section 4.e of 49 the Trust Legal Provisions and are provided without warranty as 50 described in the Simplified BSD License. 52 Table of Contents 54 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 55 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 56 3. QoS Model Design . . . . . . . . . . . . . . . . . . . . . . 3 57 4. DiffServ Model Design . . . . . . . . . . . . . . . . . . . . 3 58 5. Modules Tree Structure . . . . . . . . . . . . . . . . . . . 4 59 6. Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 60 6.1. IETF-QOS-CLASSIFIER . . . . . . . . . . . . . . . . . . . 9 61 6.2. IETF-QOS-POLICY . . . . . . . . . . . . . . . . . . . . . 15 62 6.3. IETF-QOS-ACTION . . . . . . . . . . . . . . . . . . . . . 18 63 6.4. IETF-QOS-TARGET . . . . . . . . . . . . . . . . . . . . . 30 64 6.5. IETF-DIFFSERV . . . . . . . . . . . . . . . . . . . . . . 36 65 7. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 40 66 8. Security Considerations . . . . . . . . . . . . . . . . . . . 40 67 9. Acknowledgement . . . . . . . . . . . . . . . . . . . . . . . 40 68 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 40 69 10.1. Normative References . . . . . . . . . . . . . . . . . . 40 70 10.2. Informative References . . . . . . . . . . . . . . . . . 41 71 Appendix A. Company A, Company B and Company C examples . . . . 41 72 A.1. Example of Company A Diffserv Model . . . . . . . . . . . 41 73 A.2. Example of Company B Diffserv Model . . . . . . . . . . . 51 74 A.3. Example of Company C Diffserv Model . . . . . . . . . . . 64 75 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 71 77 1. Introduction 79 This document defines a base YANG [RFC6020] data module for Quality 80 of Service (QoS) configuration and operational parameters. 81 Differentiated Services (DiffServ) module is an augmentation of the 82 base QoS model. Remote Procedure Calls (RPC) or notification 83 definition is currently not part of this document and will be added 84 later if necessary. QoS base modules define a basic building blocks 85 to define a classifier, policy, action and target. The base modules 86 have been augmented to include packet match fields, action 87 parameters, and statistics data to define the DiffServ module. It is 88 left up to individual vendors to stitch actions like queues, random- 89 detect (RED) and vendor specific parameters of the DiffServ policy 90 definitions. Designing the module in this manner allows for a very 91 flexible and extensible module that should fit in with most of the 92 vendor requirements. The DiffServ model is based on DiffServ 93 architecture, and various references have been made to available 94 standard architecture documents. 96 DiffServ is a preferred approach for network service providers to 97 offer services to different customers based on their network Quality- 98 of-Service (QoS) objectives. The traffic streams are differentiated 99 based on DiffServ Code Points (DSCP) carried in the IP header of each 100 packet. The DSCP markings are applied by upstream node or by the 101 edge router on entry to the DiffServ network. 103 2. Terminology 105 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 106 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 107 document are to be interpreted as described in [RFC2119]. 109 3. QoS Model Design 111 A classifier consists of packets which may be grouped when a logical 112 set of rules are applied on different packet header fields. The 113 grouping may be based on different values or range of values of same 114 packet header field, presence or absence of some values or range of 115 values of a packet field or a combination thereof. The QoS 116 classifier is defined in the ietf-qos-classifier module. 118 A classifier entry contains one or more packet conditioning 119 functions. A packet conditioning function is typically based on 120 direction of traffic and may drop, mark or delay network packets. A 121 set of classifier entries with corresponding conditioning functions 122 when arranged in order of priority represents a QoS policy. A QoS 123 policy may contain one or more classifier entries. These are defined 124 in ietf-qos-policy module. 126 Actions are configured in line with respect to the policy module. 127 These include marking, dropping or shaping. Actions are defined in 128 the ietf-qos-action module. 130 A meter qualifies if the traffic arrival rate is based on agreed upon 131 rate and variability. A meter is modeled based on commonly used 132 alogrithms in industry, Single Rate Tri Color Marking (srTCM) 133 [RFC2697] meter, Two Rate Tri Color Marking (trTCM) [RFC2698] meter, 134 and Single Rate Two Color Marking meter. Different vendors can 135 extend it with other types of meters as well. 137 4. DiffServ Model Design 139 DiffServ architecture [RFC3289] and [RFC2475] describe the 140 architecture as a simple model where traffic entering a network is 141 classified and possibly conditioned at the boundary of the network 142 and assigned a different Behavior Aggregate (BA). Each BA is 143 identified by a specific value of DSCP, and is used to select a Per 144 Hop Behavior (PHB). 146 The packet classification policy identifies the subset of traffic 147 which may receive a DiffServ by being conditioned or mapped. Packet 148 classifiers select packets within a stream based on the content of 149 some portion of the packet header. There are two types of 150 classifiers, the BA classifier, and the Multi-Field (MF) classifier 151 which selects packets based on a value which is combination of one or 152 more header fields. In the ietf-diffserv module, this is realized by 153 augmenting the QoS classification module. 155 Traffic conditioning includes metering, shaping and/or marking. A 156 meter is used to measure the traffic against a given traffic profile. 157 The traffic profile specifies the temporal property of the traffic. 158 A packet that arrives is first determined to be in or out of the 159 profile, which will result in the action of marked, dropped or 160 shaped. This is realized in vendor specific modules based on the 161 parameters defined in action module. The metering parameters are 162 augmented to the QoS policy module when metering is defined inline, 163 and to the metering template when metering profile is referred in 164 policy module. 166 Finally, statistics are realized in the ietf-diffserv module by 167 augmenting the QoS target module. 169 5. Modules Tree Structure 171 This document defines five YANG modules - four QoS base modules and 172 one DiffServ module. 174 ietf-qos-classifier consists of classifier entries identified by a 175 classifier entry name. Each entry MAY contain a list of filter 176 entries. When no filter entry is present in a classifier entry, it 177 matches all traffic. 179 module: ietf-qos-classifier 180 +--rw classifiers 181 +--rw classifier-entry* [classifier-entry-name] 182 +--rw classifier-entry-name string 183 +--rw classifier-entry-descr? string 184 +--rw classifier-entry-filter-operation? identityref 185 +--rw filter-entry* [filter-type filter-logical-not] 186 +--rw filter-type identityref 187 +--rw filter-logical-not boolean 189 An ietf-qos-policy module contains list of policy objects identified 190 by a policy name and policy type which MUST be provided. With 191 different values of policy types, each vendor MAY define their own 192 construct of policy for different QoS functionalities. Each vendor 193 MAY augment classifier entry in a policy definition with a set of 194 actions. 196 module: ietf-qos-policy 197 +--rw policies 198 +--rw policy-entry* [policy-name policy-type] 199 +--rw policy-name string 200 +--rw policy-type identityref 201 +--rw policy-descr? string 202 +--rw classifier-entry* [classifier-entry-name] 203 +--rw classifier-entry-name string 204 +--rw classifier-entry-inline? boolean 205 +--rw classifier-entry-filter-oper? identityref 206 +--rw filter-entry* [filter-type filter-logical-not] 207 {policy-inline-classifier-config}? 208 | +--rw filter-type identityref 209 | +--rw filter-logical-not boolean 210 +--rw classifier-action-entry-cfg* [action-type] 211 +--rw action-type identityref 212 +--rw (action-cfg-params)? 214 ietf-qos-action module contains grouping of set of QoS actions. 215 These include metering, marking, dropping and shaping. Marking sets 216 DiffServ codepoint value in the classified packet. Color-aware and 217 Color-blind meters are augmented by vendor specific modules based on 218 the parameters defined in action module. 220 module: ietf-qos-action 221 +--rw meter-template 222 +--rw meter-entry* [meter-name] {meter-template-support}? 223 +--rw meter-name string 224 +--rw (meter-type)? 225 +--:(one-rate-two-color-meter-type) 226 | +--rw one-rate-two-color-meter 227 | +--rw meter-rate? uint64 228 | +--rw meter-burst? uint64 229 | +--rw conform-action 230 | | +--rw meter-action-params* [meter-action-type] 231 | | +--rw meter-action-type identityref 232 | | +--rw (meter-action-val)? 233 | +--rw exceed-action 234 | +--rw meter-action-params* [meter-action-type] 235 | +--rw meter-action-type identityref 236 | +--rw (meter-action-val)? 237 +--:(one-rate-tri-color-meter-type) 238 | +--rw one-rate-tri-color-meter 239 | +--rw committed-rate? uint64 240 | +--rw committed-burst? uint64 241 | +--rw excess-burst? uint64 242 | +--rw conform-action 243 | | +--rw meter-action-params* [meter-action-type] 244 | | +--rw meter-action-type identityref 245 | | +--rw (meter-action-val)? 246 | +--rw exceed-action 247 | | +--rw meter-action-params* [meter-action-type] 248 | | +--rw meter-action-type identityref 249 | | +--rw (meter-action-val)? 250 | +--rw violate-action 251 | +--rw meter-action-params* [meter-action-type] 252 | +--rw meter-action-type identityref 253 | +--rw (meter-action-val)? 254 +--:(two-rate-tri-color-meter-type) 255 +--rw two-rate-tri-color-meter 256 +--rw committed-rate? uint64 257 +--rw committed-burst? uint64 258 +--rw peak-rate? uint64 259 +--rw peak-burst? uint64 260 +--rw conform-action 261 | +--rw meter-action-params* [meter-action-type] 262 | +--rw meter-action-type identityref 263 | +--rw (meter-action-val)? 264 +--rw exceed-action 265 | +--rw meter-action-params* [meter-action-type] 266 | +--rw meter-action-type identityref 267 | +--rw (meter-action-val)? 268 +--rw violate-action 269 +--rw meter-action-params* [meter-action-type] 270 +--rw meter-action-type identityref 271 +--rw (meter-action-val)? 273 ietf-qos-target module contains reference of qos-policy and augments 274 ietf-interfaces [RFC7223] module. A single policy of a particular 275 policy-type can be applied on an interface in each direction of 276 traffic. Policy-type is of type identity and is populated in a 277 vendor specific manner. This way it provides greater flexibility for 278 each vendor to define different policy types each with its own 279 capabilities and restrictions. 281 Classifier counters are associated with a target. 283 module: ietf-qos-target 284 augment /if:interfaces/if:interface: 285 +--rw qos-target-entry* [direction policy-type] 286 +--rw direction identityref 287 +--rw policy-type identityref 288 +--rw policy-name string 289 +--ro qos-target-classifier-statistics* 290 +--ro classifier-entry-name? string 291 +--ro classifier-entry-statistics 292 +--ro classified-pkts? uint64 293 +--ro classified-bytes? uint64 294 +--ro classified-rate? uint64 296 Diffserv module augments QoS classifier module. Many of the YANG 297 types defined in [RFC6991] are represented as leafs in the classifier 298 module. 300 Metering and marking actions are realized by augmenting the QoS 301 policy-module. Any queuing, AQM and scheduling actions are part of 302 vendor specific augmentation. Statistics are realized by augmenting 303 the QoS target module. 305 module: ietf-diffserv 306 augment /classifier:classifiers/classifier:classifier-entry 307 /classifier:filter-entry: 308 +--rw (filter-param)? 309 +--:(dscp) 310 | +--rw dscp-cfg* [dscp-min dscp-max] 311 | +--rw dscp-min inet:dscp 312 | +--rw dscp-max inet:dscp 313 +--:(source-ip-address) 314 | +--rw source-ip-address-cfg* [source-ip-addr] 315 | +--rw source-ip-addr inet:ip-prefix 316 +--:(destination-ip-address) 317 | +--rw destination-ip-address-cfg* [destination-ip-addr] 318 | +--rw destination-ip-addr inet:ip-prefix 319 +--:(source-port) 320 | +--rw source-port-cfg* [source-port-min source-port-max] 321 | +--rw source-port-min inet:port-number 322 | +--rw source-port-max inet:port-number 323 +--:(destination-port) 324 | +--rw destination-port-cfg* 325 [destination-port-min destination-port-max] 326 | +--rw destination-port-min inet:port-number 327 | +--rw destination-port-max inet:port-number 328 +--:(protocol) 329 +--rw protocol-cfg* [protocol-min protocol-max] 330 +--rw protocol-min uint8 331 +--rw protocol-max uint8 332 augment /policy:policies/policy:policy-entry 333 /policy:classifier-entry/policy:filter-entry: 334 +--rw (filter-params)? 335 +--:(dscp) 336 | +--rw dscp-cfg* [dscp-min dscp-max] 337 | +--rw dscp-min inet:dscp 338 | +--rw dscp-max inet:dscp 339 +--:(source-ip-address) 340 | +--rw source-ip-address-cfg* [source-ip-addr] 341 | +--rw source-ip-addr inet:ip-prefix 342 +--:(destination-ip-address) 343 | +--rw destination-ip-address-cfg* [destination-ip-addr] 344 | +--rw destination-ip-addr inet:ip-prefix 345 +--:(source-port) 346 | +--rw source-port-cfg* [source-port-min source-port-max] 347 | +--rw source-port-min inet:port-number 348 | +--rw source-port-max inet:port-number 349 +--:(destination-port) 350 | +--rw destination-port-cfg* 351 [destination-port-min destination-port-max] 352 | +--rw destination-port-min inet:port-number 353 | +--rw destination-port-max inet:port-number 354 +--:(protocol) 355 +--rw protocol-cfg* [protocol-min protocol-max] 356 +--rw protocol-min uint8 357 +--rw protocol-max uint8 358 augment /policy:policies/policy:policy-entry 359 /policy:classifier-entry/policy:classifier-action-entry-cfg: 360 +--rw (action-cfg-params)? 361 +--:(dscp-marking) 362 +--rw dscp-cfg 363 +--rw dscp? inet:dscp 364 augment /if:interfaces/if:interface/target:qos-target-entry 365 /target:qos-target-classifier-statistics: 366 +--ro diffserv-action-statistics 367 +--ro one-rate-two-color-meter-statistics 368 | +--ro conform-pkts? uint64 369 | +--ro conform-bytes? uint64 370 | +--ro conform-rate? uint64 371 | +--ro exceed-pkts? uint64 372 | +--ro exceed-bytes? uint64 373 | +--ro exceed-rate? uint64 374 +--ro one-rate-tri-color-meter-statistics 375 | +--ro conform-pkts? uint64 376 | +--ro conform-bytes? uint64 377 | +--ro conform-rate? uint64 378 | +--ro exceed-pkts? uint64 379 | +--ro exceed-bytes? uint64 380 | +--ro exceed-rate? uint64 381 | +--ro violate-pkts? uint64 382 | +--ro violate-bytes? uint64 383 | +--ro violate-rate? uint64 384 +--ro two-rate-tri-color-meter-statistics 385 +--ro conform-pkts? uint64 386 +--ro conform-bytes? uint64 387 +--ro conform-rate? uint64 388 +--ro exceed-pkts? uint64 389 +--ro exceed-bytes? uint64 390 +--ro exceed-rate? uint64 391 +--ro violate-pkts? uint64 392 +--ro violate-bytes? uint64 393 +--ro violate-rate? uint64 395 6. Modules 397 6.1. IETF-QOS-CLASSIFIER 399 file "ietf-qos-classifier@2016-03-03.yang" 400 module ietf-qos-classifier { 401 yang-version 1; 402 namespace "urn:ietf:params:xml:ns:yang:ietf-qos-classifier"; 403 prefix classifier; 404 import ietf-inet-types { 405 prefix inet; 406 } 407 organization "IETF RTG (Routing Area) Working Group"; 408 contact 409 "WG Web: 410 WG List: 411 WG Chair: Chris Bowers 412 413 WG Chair: Jeff Tantsura 414 415 Editor: Aseem Choudhary 416 417 Editor: Mahesh Jethanandani 418 419 Editor: Norm Strahle 420 "; 421 description 422 "This module contains a collection of YANG definitions for 423 configuring qos specification implementations. 424 Copyright (c) 2014 IETF Trust and the persons identified as 425 authors of the code. All rights reserved. 426 Redistribution and use in source and binary forms, with or 427 without modification, is permitted pursuant to, and subject 428 to the license terms contained in, the Simplified BSD License 429 set forth in Section 4.c of the IETF Trust's Legal Provisions 430 Relating to IETF Documents 431 (http://trustee.ietf.org/license-info). 432 This version of this YANG module is part of RFC XXXX; see 433 the RFC itself for full legal notices."; 434 revision 2016-03-03 { 435 description 436 "Latest revision of qos base classifier module"; 437 reference "RFC XXXX"; 438 } 439 feature policy-inline-classifier-config { 440 description 441 " This feature allows classifier configuration 442 directly under policy."; 443 } 444 identity filter-type { 445 description 446 "This is identity of base filter-type"; 447 } 448 identity dscp { 449 base filter-type; 450 description 451 "Differentiated services code point filter-type"; 452 } 453 identity source-ip-address { 454 base filter-type; 455 description 456 "source ipv4 and ipv6 address filter-type"; 457 } 458 identity destination-ip-address { 459 base filter-type; 460 description 461 "destination ipv4 and ipv6 address filter-type"; 462 } 463 identity source-port { 464 base filter-type; 465 description 466 "source port filter-type"; 467 } 468 identity destination-port { 469 base filter-type; 470 description 471 "destination port filter-type"; 472 } 473 identity protocol { 474 base filter-type; 475 description 476 "protocol type filter-type"; 477 } 478 identity classifier-entry-filter-operation-type { 479 description 480 "Classifier entry filter logical operation"; 481 } 482 identity match-any-filter { 483 base classifier-entry-filter-operation-type; 484 description 485 "Classifier entry filter logical OR operation"; 486 } 487 identity match-all-filter { 488 base classifier-entry-filter-operation-type; 489 description 490 "Classifier entry filter logical AND operation"; 491 } 492 grouping dscp-cfg { 493 list dscp-cfg { 494 key "dscp-min dscp-max"; 495 description 496 "list of dscp ranges"; 497 leaf dscp-min { 498 type inet:dscp; 499 description 500 "Minimum value of dscp min-max range"; 501 } 502 leaf dscp-max { 503 type inet:dscp; 504 description 505 "maximum value of dscp min-max range"; 506 } 507 } 508 description 509 "Filter grouping containing list of dscp ranges"; 510 } 511 grouping source-ip-address-cfg { 512 list source-ip-address-cfg { 513 key "source-ip-addr"; 514 description 515 "list of source ipv4 or ipv6 address"; 516 leaf source-ip-addr { 517 type inet:ip-prefix; 518 description 519 "source ipv4 or ipv6 prefix"; 520 } 521 } 522 description 523 "Filter grouping containing list of source ip addresses"; 524 } 525 grouping destination-ip-address-cfg { 526 list destination-ip-address-cfg { 527 key "destination-ip-addr"; 528 description 529 "list of destination ipv4 or ipv6 address"; 530 leaf destination-ip-addr { 531 type inet:ip-prefix; 532 description 533 "destination ipv4 or ipv6 prefix"; 534 } 535 } 536 description 537 "Filter grouping containing list of destination ip address"; 538 } 539 grouping source-port-cfg { 540 list source-port-cfg { 541 key "source-port-min source-port-max"; 542 description 543 "list of ranges of source port"; 544 leaf source-port-min { 545 type inet:port-number; 546 description 547 "minimum value of source port range"; 548 } 549 leaf source-port-max { 550 type inet:port-number; 551 description 552 "maximum value of source port range"; 553 } 554 } 555 description 556 "Filter grouping containing list of source port ranges"; 557 } 558 grouping destination-port-cfg { 559 list destination-port-cfg { 560 key "destination-port-min destination-port-max"; 561 description 562 "list of ranges of destination port"; 563 leaf destination-port-min { 564 type inet:port-number; 565 description 566 "minimum value of destination port range"; 567 } 568 leaf destination-port-max { 569 type inet:port-number; 570 description 571 "maximum value of destination port range"; 572 } 573 } 574 description 575 "Filter grouping containing list of destination port ranges"; 576 } 577 grouping protocol-cfg { 578 list protocol-cfg { 579 key "protocol-min protocol-max"; 580 description 581 "list of ranges of protocol values"; 582 leaf protocol-min { 583 type uint8 { 584 range "0..255"; 585 } 586 description 587 "minimum value of protocol range"; 588 } 589 leaf protocol-max { 590 type uint8 { 591 range "0..255"; 592 } 593 description 594 "maximum value of protocol range"; 595 } 596 } 597 description 598 "Filter grouping containing list of Protocol ranges"; 599 } 600 grouping filters { 601 description 602 "Filters types in a Classifier entry"; 603 leaf filter-type { 604 type identityref { 605 base filter-type; 606 } 607 description 608 "This leaf defines type of the filter"; 609 } 610 leaf filter-logical-not { 611 type boolean; 612 description 613 " 614 This is logical-not operator for a filter. When true, it 615 indicates filter looks for absence of a pattern defined 616 by the filter 617 "; 618 } 620 } 621 grouping classifier-entry-generic-attr { 622 description 623 " 624 Classifier generic attributes like name, 625 description, operation type 626 "; 627 leaf classifier-entry-name { 628 type string; 629 description 630 "classifier entry name"; 631 } 632 leaf classifier-entry-descr { 633 type string; 634 description 635 "classifier entry description statement"; 636 } 637 leaf classifier-entry-filter-operation { 638 type identityref { 639 base classifier-entry-filter-operation-type; 640 } 641 default "match-any-filter"; 642 description 643 "Filters are applicable as match-any or match-all filters"; 644 } 645 } 646 grouping classifier-entry-inline-attr { 647 description 648 "attributes of inline classifier in a policy"; 649 leaf classifier-entry-inline { 650 type boolean; 651 default "false"; 652 description 653 "Indication of inline classifier entry"; 654 } 655 leaf classifier-entry-filter-oper { 656 type identityref { 657 base classifier-entry-filter-operation-type; 658 } 659 default "match-all-filter"; 660 description 661 "Filters are applicable as match-any or match-all filters"; 662 } 663 list filter-entry { 664 if-feature policy-inline-classifier-config; 665 must "../classifier-entry-inline = 'true'" { 666 description 667 "For inline filter configuration, inline attribute 668 must be true"; 670 } 671 key "filter-type filter-logical-not"; 672 uses filters; 673 description 674 "Filters configured inline in a policy"; 675 } 676 } 677 container classifiers { 678 description 679 "list of classifier entry"; 680 list classifier-entry { 681 key "classifier-entry-name"; 682 description 683 "each classifier entry contains a list of filters"; 684 uses classifier-entry-generic-attr; 685 list filter-entry { 686 key "filter-type filter-logical-not"; 687 uses filters; 688 description 689 "Filter entry configuration"; 690 } 691 } 692 } 693 } 694 696 6.2. IETF-QOS-POLICY 698 file "ietf-qos-policy@2016-03-03.yang" 699 module ietf-qos-policy { 700 yang-version 1; 701 namespace "urn:ietf:params:xml:ns:yang:ietf-qos-policy"; 702 prefix policy; 703 import ietf-qos-classifier { 704 prefix classifier; 705 } 706 organization "IETF RTG (Routing Area) Working Group"; 707 contact 708 "WG Web: 709 WG List: 710 WG Chair: Chris Bowers 711 712 WG Chair: Jeff Tantsura 713 714 Editor: Aseem Choudhary 715 716 Editor: Mahesh Jethanandani 717 718 Editor: Norm Strahle 719 "; 720 description 721 "This module contains a collection of YANG definitions for 722 configuring qos specification implementations. 723 Copyright (c) 2014 IETF Trust and the persons identified as 724 authors of the code. All rights reserved. 725 Redistribution and use in source and binary forms, with or 726 without modification, is permitted pursuant to, and subject 727 to the license terms contained in, the Simplified BSD License 728 set forth in Section 4.c of the IETF Trust's Legal Provisions 729 Relating to IETF Documents 730 (http://trustee.ietf.org/license-info). 731 This version of this YANG module is part of RFC XXXX; see 732 the RFC itself for full legal notices."; 733 revision 2016-03-03 { 734 description 735 "Latest revision of qos policy"; 736 reference "RFC XXXX"; 737 } 738 identity policy-type { 739 description 740 "This base identity type defines policy-types"; 741 } 742 grouping policy-generic-attr { 743 description 744 "Policy Attributes"; 745 leaf policy-name { 746 type string; 747 description 748 "policy name"; 749 } 750 leaf policy-type { 751 type identityref { 752 base policy-type; 753 } 754 description 755 "policy type"; 756 } 757 leaf policy-descr { 758 type string; 759 description 760 "policy description"; 761 } 762 } 763 identity action-type { 764 description 765 "This base identity type defines action-types"; 766 } 767 grouping classifier-action-entry-cfg { 768 description 769 "List of Configuration of classifier & associated actions"; 770 list classifier-action-entry-cfg { 771 key "action-type"; 772 ordered-by user; 773 description 774 "Configuration of classifier & associated actions"; 775 leaf action-type { 776 type identityref { 777 base action-type; 778 } 779 description 780 "This defines action type "; 781 } 782 choice action-cfg-params { 783 description 784 "Choice of action types"; 785 } 786 } 787 } 788 container policies { 789 description 790 "list of policy templates"; 791 list policy-entry { 792 key "policy-name policy-type"; 793 description 794 "policy template"; 795 uses policy-generic-attr; 796 list classifier-entry { 797 key "classifier-entry-name"; 798 ordered-by user; 799 description 800 "Classifier entry configuration in a policy"; 801 leaf classifier-entry-name { 802 type string; 803 description 804 "classifier entry name"; 805 } 806 uses classifier:classifier-entry-inline-attr; 807 uses classifier-action-entry-cfg; 808 } 809 } 810 } 811 } 812 814 6.3. IETF-QOS-ACTION 816 file "ietf-qos-action@2016-06-15.yang" 817 module ietf-qos-action { 818 namespace "urn:ietf:params:xml:ns:yang:ietf-qos-action"; 819 prefix action; 820 import ietf-inet-types { 821 prefix inet; 822 } 823 import ietf-qos-policy { 824 prefix policy; 825 } 826 organization "IETF RTG (Routing Area) Working Group"; 827 contact 828 "WG Web: 829 WG List: 830 WG Chair: Chris Bowers 831 832 WG Chair: Jeff Tantsura 833 834 Editor: Aseem Choudhary 835 836 Editor: Mahesh Jethanandani 837 838 Editor: Norm Strahle 839 "; 840 description 841 "This module contains a collection of YANG definitions for 842 configuring qos specification implementations. 843 Copyright (c) 2014 IETF Trust and the persons identified as 844 authors of the code. All rights reserved. 845 Redistribution and use in source and binary forms, with or 846 without modification, is permitted pursuant to, and subject 847 to the license terms contained in, the Simplified BSD License 848 set forth in Section 4.c of the IETF Trust's Legal Provisions 849 Relating to IETF Documents 850 (http://trustee.ietf.org/license-info). 851 This version of this YANG module is part of RFC XXXX; see 852 the RFC itself for full legal notices."; 853 revision 2016-06-15 { 854 description 855 "Latest revision for qos actions"; 856 reference "RFC XXXX"; 857 } 858 feature meter-template-support { 859 description 860 " This feature allows support of meter-template."; 861 } 862 identity rate-unit-type { 863 description 864 "base rate-unit type"; 865 } 866 identity bits-per-second { 867 base rate-unit-type; 868 description 869 "bits per second identity"; 870 } 871 identity kilo-bits-per-second { 872 base rate-unit-type; 873 description 874 "kilo bits per second identity"; 875 } 876 identity mega-bits-per-second { 877 base rate-unit-type; 878 description 879 "mega bits per second identity"; 880 } 881 identity giga-bits-per-second { 882 base rate-unit-type; 883 description 884 "mega bits per second identity"; 885 } 886 identity percent { 887 base rate-unit-type; 888 description 889 "percentage"; 890 } 892 identity dscp-marking { 893 base policy:action-type; 894 description 895 "dscp marking action type"; 896 } 897 identity meter-inline { 898 base policy:action-type; 899 description 900 "meter-inline action type"; 901 } 902 identity meter-reference { 903 base policy:action-type; 904 description 905 "meter reference action type"; 906 } 907 identity min-rate { 908 base policy:action-type; 909 description 910 "min-rate action type"; 911 } 912 identity max-rate { 913 base policy:action-type; 914 description 915 "max-rate action type"; 916 } 917 identity queue { 918 base policy:action-type; 919 description 920 "queue action type"; 921 } 922 identity schedular { 923 base policy:action-type; 924 description 925 "schedular action type"; 926 } 927 identity discard { 928 base policy:action-type; 929 description 930 "discard action type"; 931 } 932 identity child-policy { 933 base policy:action-type; 934 description 935 "child-policy action type"; 936 } 937 identity count { 938 base policy:action-type; 939 description 940 "discard action type"; 941 } 943 identity meter-type { 944 description 945 "This base identity type defines meter types"; 946 } 947 identity one-rate-two-color-meter-type { 948 base meter-type; 949 description 950 "one rate two color meter type"; 951 } 952 identity one-rate-tri-color-meter-type { 953 base meter-type; 954 description 955 "one rate three color meter type"; 956 } 957 identity two-rate-tri-color-meter-type { 958 base meter-type; 959 description 960 "two rate three color meter action type"; 961 } 963 identity drop-type { 964 description 965 "drop algorithm"; 966 } 967 identity tail-drop { 968 base drop-type; 969 description 970 "tail drop algorithm"; 971 } 972 identity random-detect { 973 base drop-type; 974 description 975 "random detect algorithm"; 976 } 978 identity meter-action-type { 979 description 980 "action type in a meter"; 981 } 982 identity meter-action-drop { 983 base meter-action-type; 984 description 985 "drop action type in a meter"; 986 } 987 identity meter-action-mark-dscp { 988 base meter-action-type; 989 description 990 "dscp mark action type in a meter"; 991 } 993 grouping rate-value-unit { 994 leaf rate-value { 995 type uint64; 996 description 997 "rate value"; 998 } 999 leaf rate-unit { 1000 type identityref { 1001 base rate-unit-type; 1002 } 1003 description 1004 "rate unit"; 1005 } 1006 description 1007 "rate value and unit grouping"; 1008 } 1009 grouping burst { 1010 description 1011 "burst size or interval configuration"; 1012 choice burst-type { 1013 case size { 1014 leaf burst-size { 1015 type uint64; 1016 units "bytes"; 1017 description 1018 "burst size"; 1019 } 1020 } 1021 case interval { 1022 leaf burst-interval { 1023 type uint64; 1024 units "microsecond"; 1025 description 1026 "burst interval"; 1027 } 1028 } 1029 description 1030 "Choice of burst type"; 1031 } 1032 } 1034 grouping threshold { 1035 description 1036 "Threshold Parameters"; 1037 container threshold { 1038 description 1039 "threshold"; 1040 choice threshold-type { 1041 case size { 1042 leaf threshold-size { 1043 type uint64; 1044 units "bytes"; 1045 description 1046 "Threshold size"; 1047 } 1048 } 1049 case interval { 1050 leaf threshold-interval { 1051 type uint64; 1052 units "microsecond"; 1053 description 1054 "Threshold interval"; 1055 } 1056 } 1057 description 1058 "Choice of threshold type"; 1059 } 1060 } 1061 } 1063 grouping drop { 1064 container drop-cfg { 1065 leaf drop-action { 1066 type empty; 1067 description 1068 "always drop algorithm"; 1069 } 1070 description 1071 "the drop action"; 1072 } 1073 description 1074 "always drop grouping"; 1075 } 1077 grouping queuelimit { 1078 container qlimit-thresh { 1079 uses threshold; 1080 description 1081 "the queue limit"; 1082 } 1083 description 1084 "the queue limit beyond which queue will not hold any packet"; 1085 } 1087 grouping meter-action-params { 1088 description 1089 "meter action parameters"; 1090 list meter-action-params { 1091 key "meter-action-type"; 1092 ordered-by user; 1093 description 1094 "Configuration of basic-meter & associated actions"; 1095 leaf meter-action-type { 1096 type identityref { 1097 base meter-action-type; 1098 } 1099 description 1100 "meter action type"; 1101 } 1102 choice meter-action-val { 1103 description 1104 " meter action based on choice of meter action type"; 1105 } 1106 } 1107 } 1109 grouping one-rate-two-color-meter { 1110 container one-rate-two-color-meter { 1111 description 1112 "single rate two color marker meter"; 1113 leaf meter-rate { 1114 type uint64; 1115 units "bits-per-second"; 1116 description 1117 "meter rate"; 1118 } 1119 leaf meter-burst { 1120 type uint64; 1121 units "byes"; 1122 description 1123 "burst size"; 1124 } 1125 container conform-action { 1126 uses meter-action-params; 1127 description 1128 "conform action"; 1129 } 1130 container exceed-action { 1131 uses meter-action-params; 1132 description 1133 "exceed action"; 1134 } 1135 } 1136 description 1137 "single rate two color marker meter attributes"; 1138 } 1140 grouping one-rate-tri-color-meter { 1141 container one-rate-tri-color-meter { 1142 description 1143 "single rate three color meter"; 1144 leaf committed-rate { 1145 type uint64; 1146 units "bits-per-second"; 1147 description 1148 "meter rate"; 1149 } 1150 leaf committed-burst { 1151 type uint64; 1152 units "byes"; 1153 description 1154 "commited burst size"; 1155 } 1156 leaf excess-burst { 1157 type uint64; 1158 units "byes"; 1159 description 1160 "excess burst size"; 1161 } 1162 container conform-action { 1163 uses meter-action-params; 1164 description 1165 "conform, or green action"; 1166 } 1167 container exceed-action { 1168 uses meter-action-params; 1169 description 1170 "exceed, or yellow action"; 1171 } 1172 container violate-action { 1173 uses meter-action-params; 1174 description 1175 "violate, or red action"; 1176 } 1177 } 1178 description 1179 "one-rate-tri-color-meter attributes"; 1180 } 1182 grouping two-rate-tri-color-meter { 1183 container two-rate-tri-color-meter { 1184 description 1185 "two rate three color meter"; 1186 leaf committed-rate { 1187 type uint64; 1188 units "bits-per-second"; 1189 description 1190 "meter rate"; 1191 } 1192 leaf committed-burst { 1193 type uint64; 1194 units "byes"; 1195 description 1196 "commited burst size"; 1197 } 1198 leaf peak-rate { 1199 type uint64; 1200 units "bits-per-second"; 1201 description 1202 "meter rate"; 1203 } 1204 leaf peak-burst { 1205 type uint64; 1206 units "byes"; 1207 description 1208 "commited burst size"; 1209 } 1210 container conform-action { 1211 uses meter-action-params; 1212 description 1213 "conform, or green action"; 1214 } 1215 container exceed-action { 1216 uses meter-action-params; 1217 description 1218 "exceed, or yellow action"; 1219 } 1220 container violate-action { 1221 uses meter-action-params; 1222 description 1223 "exceed, or red action"; 1224 } 1225 } 1226 description 1227 "two-rate-tri-color-meter attributes"; 1228 } 1230 grouping meter { 1231 choice meter-type { 1232 case one-rate-two-color-meter-type { 1233 uses one-rate-two-color-meter; 1234 description 1235 "basic meter"; 1236 } 1237 case one-rate-tri-color-meter-type { 1238 uses one-rate-tri-color-meter; 1239 description 1240 "one rate tri-color meter"; 1241 } 1242 case two-rate-tri-color-meter-type { 1243 uses two-rate-tri-color-meter; 1244 description 1245 "two rate tri-color meter"; 1247 } 1248 description 1249 " meter action based on choice of meter action type"; 1250 } 1251 description 1252 "meter attributes"; 1253 } 1255 container meter-template { 1256 description 1257 "list of meter templates"; 1258 list meter-entry { 1259 if-feature meter-template-support; 1260 key "meter-name"; 1261 description 1262 "meter entry template"; 1263 leaf meter-name { 1264 type string; 1265 description 1266 "meter identifier"; 1267 } 1268 uses meter; 1269 } 1270 } 1272 grouping meter-reference { 1273 container meter-reference-cfg { 1274 leaf meter-type { 1275 type identityref { 1276 base meter-type; 1277 } 1278 description 1279 "This leaf defines type of the filter"; 1280 } 1281 description 1282 "meter reference"; 1283 } 1284 description 1285 "meter reference"; 1286 } 1288 grouping count { 1289 container count-cfg { 1290 leaf count-action { 1291 type empty; 1292 description 1293 "count action"; 1294 } 1295 description 1296 "the count action"; 1297 } 1298 description 1299 "the count action grouping"; 1300 } 1302 grouping discard { 1303 container discard-cfg { 1304 leaf discard { 1305 type empty; 1306 description 1307 "discard action"; 1308 } 1309 description 1310 "discard action"; 1311 } 1312 description 1313 "discard grouping"; 1314 } 1315 grouping priority { 1316 container priority-cfg { 1317 leaf priority-level { 1318 type uint8; 1319 description 1320 "priority level"; 1321 } 1322 description 1323 "priority attributes"; 1324 } 1325 description 1326 "priority attributes grouping"; 1327 } 1328 grouping min-rate { 1329 container min-rate-cfg { 1330 uses rate-value-unit; 1331 description 1332 "min guaranteed bandwidth"; 1333 } 1334 description 1335 "minimum rate grouping"; 1336 } 1337 grouping dscp-marking { 1338 container dscp-cfg { 1339 leaf dscp { 1340 type inet:dscp; 1341 description 1342 "dscp marking"; 1344 } 1345 description 1346 "dscp marking container"; 1347 } 1348 description 1349 "dscp marking grouping"; 1350 } 1351 grouping max-rate { 1352 container max-rate-cfg { 1353 uses rate-value-unit; 1354 uses burst; 1355 description 1356 "maximum rate attributes container"; 1357 } 1358 description 1359 "maximum rate attributes"; 1360 } 1361 grouping queue { 1362 container queue-cfg { 1363 uses priority; 1364 uses min-rate; 1365 uses max-rate; 1366 container algorithmic-drop-cfg { 1367 choice drop-algorithm { 1368 case tail-drop { 1369 container tail-drop-cfg { 1370 leaf tail-drop-alg { 1371 type empty; 1372 description 1373 "tail drop algorithm"; 1374 } 1375 description 1376 "Tail Drop configuration container"; 1377 } 1378 description 1379 "Tail Drop choice"; 1380 } 1381 description 1382 "Choice of Drop Algorithm"; 1383 } 1384 description 1385 "Algorithmic Drop configuration container"; 1386 } 1387 description 1388 "Queue configuration container"; 1389 } 1390 description 1391 "Queue grouping"; 1393 } 1394 grouping schedular { 1395 container schedular-cfg { 1396 uses min-rate; 1397 uses max-rate; 1398 description 1399 "Schedular configuration container"; 1400 } 1401 description 1402 "Schedular configuration grouping"; 1403 } 1404 } 1405 1407 6.4. IETF-QOS-TARGET 1409 file "ietf-qos-target@2016-06-15.yang" 1410 module ietf-qos-target { 1411 yang-version 1; 1412 namespace "urn:ietf:params:xml:ns:yang:ietf-qos-target"; 1413 prefix target; 1414 import ietf-interfaces { 1415 prefix if; 1416 } 1417 import ietf-qos-policy { 1418 prefix policy; 1419 } 1420 organization "IETF RTG (Routing Area) Working Group"; 1421 contact 1422 "WG Web: 1423 WG List: 1424 WG Chair: Chris Bowers 1425 1426 WG Chair: Jeff Tantsura 1427 1428 Editor: Aseem Choudhary 1429 1430 Editor: Mahesh Jethanandani 1431 "; 1434 description 1435 "This module contains a collection of YANG definitions for 1436 configuring qos specification implementations. 1437 Copyright (c) 2014 IETF Trust and the persons identified as 1438 authors of the code. All rights reserved. 1439 Redistribution and use in source and binary forms, with or 1440 without modification, is permitted pursuant to, and subject 1441 to the license terms contained in, the Simplified BSD License 1442 set forth in Section 4.c of the IETF Trust's Legal Provisions 1443 Relating to IETF Documents 1444 (http://trustee.ietf.org/license-info). 1445 This version of this YANG module is part of RFC XXXX; see 1446 the RFC itself for full legal notices."; 1447 revision 2016-06-15 { 1448 description 1449 "Latest revision qos based policy applied to a target"; 1450 reference "RFC XXXX"; 1451 } 1452 identity direction { 1453 description 1454 "This is identity of traffic direction"; 1455 } 1456 identity inbound { 1457 base direction; 1458 description 1459 "Direction of traffic coming into the network entry"; 1460 } 1461 identity outbound { 1462 base direction; 1463 description 1464 "Direction of traffic going out of the network entry"; 1465 } 1466 feature target-inline-policy-config { 1467 description 1468 "This feature allows the policy configuration 1469 directly under a target."; 1470 } 1471 grouping wred-stats { 1472 description 1473 "WRED Counters"; 1474 leaf early-drop-pkts { 1475 type uint64; 1476 description 1477 "Early drop packets "; 1478 } 1479 leaf early-drop-bytes { 1480 type uint64; 1481 description 1482 "Early drop bytes "; 1483 } 1484 } 1485 grouping classifier-entry-stats { 1486 description 1487 "Classifier Counters"; 1488 container classifier-entry-statistics { 1489 config false; 1490 description 1491 " 1492 This group defines the classifier filter statistics of 1493 each classifier entry 1494 "; 1495 leaf classified-pkts { 1496 type uint64; 1497 description 1498 " Number of total packets which filtered 1499 to the classifier-entry"; 1500 } 1501 leaf classified-bytes { 1502 type uint64; 1503 description 1504 " Number of total bytes which filtered 1505 to the classifier-entry"; 1506 } 1507 leaf classified-rate { 1508 type uint64; 1509 units "bits-per-second"; 1510 description 1511 " Rate of average data flow through the 1512 classifier-entry"; 1513 } 1514 } 1515 } 1516 grouping queuing-stats { 1517 description 1518 "Queuing Counters"; 1519 container queuing-statistics { 1520 description 1521 "queue related statistics "; 1522 leaf output-pkts { 1523 type uint64; 1524 description 1525 "Number of packets transmitted from queue "; 1526 } 1527 leaf output-bytes { 1528 type uint64; 1529 description 1530 "Number of bytes transmitted from queue "; 1531 } 1532 leaf queue-size-pkts { 1533 type uint64; 1534 description 1535 "Number of packets currently buffered "; 1536 } 1537 leaf queue-size-bytes { 1538 type uint64; 1539 description 1540 "Number of bytes currently buffered "; 1541 } 1542 leaf drop-pkts { 1543 type uint64; 1544 description 1545 "Total number of packets dropped "; 1546 } 1547 leaf drop-bytes { 1548 type uint64; 1549 description 1550 "Total number of bytes dropped "; 1551 } 1552 container wred-stats { 1553 uses wred-stats; 1554 description 1555 "Container for WRED statistics"; 1556 } 1557 } 1558 } 1559 grouping two-color-marking-meter-stats { 1560 description 1561 "Two-Color-Marking Metering Counters"; 1562 leaf conform-pkts { 1563 type uint64; 1564 description 1565 "Number of conform packets"; 1566 } 1567 leaf conform-bytes { 1568 type uint64; 1569 description 1570 "Bytes of conform packets"; 1571 } 1572 leaf conform-rate { 1573 type uint64; 1574 units "bits-per-second"; 1575 description 1576 "Traffic Rate measured as conformimg"; 1577 } 1578 leaf exceed-pkts { 1579 type uint64; 1580 description 1581 "Number of packets counted as exceeding"; 1582 } 1583 leaf exceed-bytes { 1584 type uint64; 1585 description 1586 "Bytes of packets counted as exceeding"; 1587 } 1588 leaf exceed-rate { 1589 type uint64; 1590 units "bits-per-second"; 1591 description 1592 "Traffic Rate measured as exceeding"; 1593 } 1594 } 1595 grouping tri-color-marking-meter-stats { 1596 description 1597 "Tri-Color-Marking Metering Counters"; 1598 leaf conform-pkts { 1599 type uint64; 1600 description 1601 "Number of conform packets"; 1602 } 1603 leaf conform-bytes { 1604 type uint64; 1605 description 1606 "Bytes of conform packets"; 1607 } 1608 leaf conform-rate { 1609 type uint64; 1610 units "bits-per-second"; 1611 description 1612 "Traffic Rate measured as conformimg"; 1613 } 1614 leaf exceed-pkts { 1615 type uint64; 1616 description 1617 "Number of packets counted as exceeding"; 1618 } 1619 leaf exceed-bytes { 1620 type uint64; 1621 description 1622 "Bytes of packets counted as exceeding"; 1623 } 1624 leaf exceed-rate { 1625 type uint64; 1626 units "bits-per-second"; 1627 description 1628 "Traffic Rate measured as exceeding"; 1629 } 1630 leaf violate-pkts { 1631 type uint64; 1632 description 1633 "Number of packets counted as violating"; 1634 } 1635 leaf violate-bytes { 1636 type uint64; 1637 description 1638 "Bytes of packets counted as violating"; 1639 } 1640 leaf violate-rate { 1641 type uint64; 1642 units "bits-per-second"; 1643 description 1644 "Traffic Rate measured as violating"; 1645 } 1646 } 1647 grouping meter-stats { 1648 description 1649 "Metering Counters"; 1650 container one-rate-two-color-meter-statistics { 1651 uses two-color-marking-meter-stats; 1652 description 1653 "One rate two color marker meter statistics"; 1654 } 1655 container one-rate-tri-color-meter-statistics { 1656 uses tri-color-marking-meter-stats; 1657 description 1658 "One rate tri color marker meter statistics"; 1659 } 1660 container two-rate-tri-color-meter-statistics { 1661 uses tri-color-marking-meter-stats; 1662 description 1663 "Two rate tri color marker meter statistics"; 1664 } 1665 } 1666 augment "/if:interfaces/if:interface" { 1667 description 1668 "Augments Diffserv Target Entry to Interface module"; 1669 list qos-target-entry { 1670 key "direction policy-type"; 1671 description 1672 "policy target for inbound or outbound direction"; 1673 leaf direction { 1674 type identityref { 1675 base direction; 1676 } 1677 description 1678 "Direction fo the traffic flow either inbound or outbound"; 1679 } 1680 leaf policy-type { 1681 type identityref { 1682 base policy:policy-type; 1683 } 1684 description 1685 "Policy entry type"; 1686 } 1687 leaf policy-name { 1688 type string; 1689 mandatory true; 1690 description 1691 "Policy entry name"; 1692 } 1693 list qos-target-classifier-statistics { 1694 config false; 1695 description 1696 "Statistics for each Classifier Entry in a Policy"; 1697 leaf classifier-entry-name { 1698 type string; 1699 description 1700 "Classifier Entry Name"; 1701 } 1702 uses classifier-entry-stats; 1703 } 1704 } 1705 } 1706 } 1707 1709 6.5. IETF-DIFFSERV 1711 file "ietf-diffserv@2016-06-15.yang" 1712 module ietf-diffserv { 1713 yang-version 1; 1714 namespace "urn:ietf:params:xml:ns:yang:ietf-diffserv"; 1715 prefix diffserv; 1716 import ietf-interfaces { 1717 prefix if; 1718 } 1719 import ietf-qos-classifier { 1720 prefix classifier; 1721 } 1722 import ietf-qos-policy { 1723 prefix policy; 1724 } 1725 import ietf-qos-action { 1726 prefix action; 1727 } 1728 import ietf-qos-target { 1729 prefix target; 1730 } 1731 organization "IETF RTG (Routing Area) Working Group"; 1732 contact 1733 "WG Web: 1734 WG List: 1735 WG Chair: Chris Bowers 1736 1737 WG Chair: Jeff Tantsura 1738 1739 Editor: Aseem Choudhary 1740 1741 Editor: Mahesh Jethanandani 1742 "; 1745 description 1746 "This module contains a collection of YANG definitions for 1747 configuring diffserv specification implementations. 1748 Copyright (c) 2014 IETF Trust and the persons identified as 1749 authors of the code. All rights reserved. 1750 Redistribution and use in source and binary forms, with or 1751 without modification, is permitted pursuant to, and subject 1752 to the license terms contained in, the Simplified BSD License 1753 set forth in Section 4.c of the IETF Trust's Legal Provisions 1754 Relating to IETF Documents 1755 (http://trustee.ietf.org/license-info). 1756 This version of this YANG module is part of RFC XXXX; see 1757 the RFC itself for full legal notices."; 1758 revision 2016-06-15 { 1759 description 1760 "Latest revision of diffserv based classifier"; 1761 reference "RFC XXXX"; 1762 } 1763 augment "/classifier:classifiers/classifier:classifier-entry/" + 1764 "classifier:filter-entry" { 1765 choice filter-param { 1766 description 1767 "Choice of filter types"; 1768 case dscp { 1769 uses classifier:dscp-cfg; 1770 description 1771 "Filter containing list of dscp ranges"; 1772 } 1773 case source-ip-address { 1774 uses classifier:source-ip-address-cfg; 1775 description 1776 "Filter containing list of source ip addresses"; 1778 } 1779 case destination-ip-address { 1780 uses classifier:destination-ip-address-cfg; 1781 description 1782 "Filter containing list of destination ip address"; 1783 } 1784 case source-port { 1785 uses classifier:source-port-cfg; 1786 description 1787 "Filter containing list of source-port ranges"; 1788 } 1789 case destination-port { 1790 uses classifier:destination-port-cfg; 1791 description 1792 "Filter containing list of destination-port ranges"; 1793 } 1794 case protocol { 1795 uses classifier:protocol-cfg; 1796 description 1797 "Filter Type Protocol"; 1798 } 1799 } 1800 description 1801 "augments diffserv filters to qos classifier"; 1802 } 1804 augment "/policy:policies" + 1805 "/policy:policy-entry" + 1806 "/policy:classifier-entry" + 1807 "/policy:filter-entry" { 1808 choice filter-params { 1809 description 1810 "Choice of action types"; 1811 case dscp { 1812 uses classifier:dscp-cfg; 1813 description 1814 "Filter containing list of dscp ranges"; 1815 } 1816 case source-ip-address { 1817 uses classifier:source-ip-address-cfg; 1818 description 1819 "Filter containing list of source ip addresses"; 1820 } 1821 case destination-ip-address { 1822 uses classifier:destination-ip-address-cfg; 1823 description 1824 "Filter containing list of destination ip address"; 1825 } 1826 case source-port { 1827 uses classifier:source-port-cfg; 1828 description 1829 "Filter containing list of source-port ranges"; 1830 } 1831 case destination-port { 1832 uses classifier:destination-port-cfg; 1833 description 1834 "Filter containing list of destination-port ranges"; 1835 } 1836 case protocol { 1837 uses classifier:protocol-cfg; 1838 description 1839 "Filter Type Protocol"; 1840 } 1841 } 1842 description 1843 "Augments Diffserv Classifier with common filter types"; 1844 } 1845 augment "/policy:policies/policy:policy-entry/" + 1846 "policy:classifier-entry/" + 1847 "policy:classifier-action-entry-cfg" { 1848 choice action-cfg-params { 1849 description 1850 "Choice of action types"; 1851 case dscp-marking { 1852 uses action:dscp-marking; 1853 } 1854 } 1855 description 1856 "augments dscp-marking and meter to qos policy"; 1857 } 1858 augment "/if:interfaces/if:interface/target:qos-target-entry/" + 1859 "target:qos-target-classifier-statistics" { 1860 container diffserv-action-statistics { 1861 uses target:meter-stats; 1862 description 1863 "meter statistics"; 1864 } 1865 description 1866 "augments meter stats to qos target module"; 1867 } 1868 } 1869 1871 7. Open Issues 1873 The model is still work in progress, and the authors are working on 1874 further refinements. List of open issues. 1876 o Support of reading statistics, e.g. classifier and queue 1877 statistics. 1879 o Interface bindings. We need more agreement, e.g. on handling 1880 multiple policies of same type on an interface. 1882 o Security considerations. 1884 8. Security Considerations 1886 9. Acknowledgement 1888 10. References 1890 10.1. Normative References 1892 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1893 Requirement Levels", BCP 14, RFC 2119, 1894 DOI 10.17487/RFC2119, March 1997, 1895 . 1897 [RFC2697] Heinanen, J. and R. Guerin, "A Single Rate Three Color 1898 Marker", RFC 2697, DOI 10.17487/RFC2697, September 1999, 1899 . 1901 [RFC2698] Heinanen, J. and R. Guerin, "A Two Rate Three Color 1902 Marker", RFC 2698, DOI 10.17487/RFC2698, September 1999, 1903 . 1905 [RFC3289] Baker, F., Chan, K., and A. Smith, "Management Information 1906 Base for the Differentiated Services Architecture", 1907 RFC 3289, DOI 10.17487/RFC3289, May 2002, 1908 . 1910 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1911 the Network Configuration Protocol (NETCONF)", RFC 6020, 1912 DOI 10.17487/RFC6020, October 2010, 1913 . 1915 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", 1916 RFC 6991, DOI 10.17487/RFC6991, July 2013, 1917 . 1919 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 1920 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 1921 . 1923 10.2. Informative References 1925 [RFC2475] Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z., 1926 and W. Weiss, "An Architecture for Differentiated 1927 Services", RFC 2475, DOI 10.17487/RFC2475, December 1998, 1928 . 1930 Appendix A. Company A, Company B and Company C examples 1932 Company A, Company B and Company C Diffserv modules augments all the 1933 filter types of the QoS classifier module as well as the QoS policy 1934 module that allow it to define marking, metering, min-rate, max-rate 1935 actions. Queuing and metering counters are realized by augmenting of 1936 the QoS target module. 1938 A.1. Example of Company A Diffserv Model 1940 The following Company A vendor example augments the qos and diffserv 1941 model, demonstrating some of the following functionality: 1943 - use of template based classifier definitions 1945 - use of single policy type modelling queue, scheduler policy, and a 1946 filter policy. All of these policies either augment the qos policy 1947 or the diffserv modules 1949 - support of hierarchial policy. 1951 - use of inline actions in a policy 1953 - flexibility in marking dscp or metadata at ingress and/or egress. 1955 module example-compa-diffserv { 1956 namespace "urn:ietf:params:xml:ns:yang:example-compa-diffserv"; 1957 prefix example; 1959 import ietf-interfaces { 1960 prefix if; 1961 } 1962 import ietf-qos-classifier { 1963 prefix classifier; 1964 } 1965 import ietf-qos-policy { 1966 prefix policy; 1968 } 1969 import ietf-qos-action { 1970 prefix action; 1971 } 1972 import ietf-qos-target { 1973 prefix target; 1974 } 1975 import ietf-diffserv { 1976 prefix diffserv; 1977 } 1979 organization "Company A"; 1980 contact 1981 "Editor: XYZ 1982 "; 1983 description 1984 "This module contains a collection of YANG definitions of 1985 companyA diffserv specification extension."; 1986 revision 2016-06-15 { 1987 description 1988 "Initial revision for diffserv actions on network packets"; 1989 reference 1990 "RFC 6020: YANG - A Data Modeling Language for the 1991 Network Configuration Protocol (NETCONF)"; 1992 } 1994 identity default-policy-type { 1995 base policy:policy-type; 1996 description 1997 "This defines default policy-type"; 1998 } 2000 identity qos-group { 2001 base classifier:filter-type; 2002 description 2003 "qos-group filter-type"; 2004 } 2006 grouping qos-group-cfg { 2007 list qos-group-cfg { 2008 key "qos-group-min qos-group-max"; 2009 description 2010 "list of dscp ranges"; 2011 leaf qos-group-min { 2012 type uint8; 2013 description 2014 "Minimum value of qos-group range"; 2015 } 2016 leaf qos-group-max { 2017 type uint8; 2018 description 2019 "maximum value of qos-group range"; 2020 } 2021 } 2022 description 2023 "Filter containing list of qos-group ranges"; 2024 } 2026 grouping wred-threshold { 2027 container wred-min-thresh { 2028 uses action:threshold; 2029 description 2030 "Minimum threshold"; 2031 } 2032 container wred-max-thresh { 2033 uses action:threshold; 2034 description 2035 "Maximum threshold"; 2036 } 2037 leaf mark-probability { 2038 type uint32 { 2039 range "1..1000"; 2040 } 2041 description 2042 "Mark probability"; 2043 } 2044 description 2045 "WRED threshold attributes"; 2046 } 2048 grouping randomdetect { 2049 leaf exp-weighting-const { 2050 type uint32; 2051 description 2052 "Exponential weighting constant factor for wred profile"; 2053 } 2054 uses wred-threshold; 2055 description 2056 "Random detect attributes"; 2057 } 2059 /************************************************* 2060 * Augmentation to Classifier Module 2061 *************************************************/ 2063 augment "/classifier:classifiers/" + 2064 "classifier:classifier-entry/" + 2065 "classifier:filter-entry/diffserv:filter-param" { 2066 case qos-group { 2067 uses qos-group-cfg; 2068 description 2069 "Filter containing list of qos-group ranges. 2070 Qos-group represent packet metadata information 2071 in a device. "; 2072 } 2073 description 2074 "augmentation of classifier filters"; 2075 } 2077 /************************************************* 2078 * Augmentation to Policy Module 2079 *************************************************/ 2081 augment "/policy:policies/policy:policy-entry/" + 2082 "policy:classifier-entry/" + 2083 "policy:classifier-action-entry-cfg/" + 2084 "policy:action-cfg-params" { 2085 case priority { 2086 uses action:priority; 2087 } 2088 case min-rate { 2089 uses action:min-rate; 2090 } 2091 case max-rate { 2092 uses action:max-rate; 2093 } 2094 case random-detect { 2095 uses randomdetect; 2096 } 2097 case meter-inline { 2098 uses action:meter; 2099 } 2100 case child-policy { 2101 leaf child-policy { 2102 type leafref { 2103 path "/policy:policies/policy:policy-entry/" + 2104 "policy:policy-name"; 2105 } 2106 description 2107 "Child Policy in the hierarchial configuration"; 2108 } 2109 } 2110 description 2111 "Augment the actions to policy entry"; 2113 } 2115 augment "/policy:policies" + 2116 "/policy:policy-entry" + 2117 "/policy:classifier-entry" + 2118 "/policy:classifier-action-entry-cfg" + 2119 "/policy:action-cfg-params" + 2120 "/example:meter-inline" + 2121 "/example:meter-type" + 2122 "/example:one-rate-two-color-meter-type" + 2123 "/example:one-rate-two-color-meter" + 2124 "/example:conform-action" + 2125 "/example:meter-action-params" + 2126 "/example:meter-action-val" { 2128 description 2129 "augment the one-rate-two-color meter conform 2130 with actions"; 2131 case meter-action-drop { 2132 description 2133 "meter drop"; 2134 uses action:drop; 2135 } 2136 case meter-action-mark-dscp { 2137 description 2138 "meter action dscp marking"; 2139 uses action:dscp-marking; 2140 } 2141 } 2142 augment "/policy:policies" + 2143 "/policy:policy-entry" + 2144 "/policy:classifier-entry" + 2145 "/policy:classifier-action-entry-cfg" + 2146 "/policy:action-cfg-params" + 2147 "/example:meter-inline" + 2148 "/example:meter-type" + 2149 "/example:one-rate-two-color-meter-type" + 2150 "/example:one-rate-two-color-meter" + 2151 "/example:exceed-action" + 2152 "/example:meter-action-params" + 2153 "/example:meter-action-val" { 2155 description 2156 "augment the one-rate-two-color meter exceed 2157 with actions"; 2158 case meter-action-drop { 2159 description 2160 "meter drop"; 2161 uses action:drop; 2162 } 2163 case meter-action-mark-dscp { 2164 description 2165 "meter action dscp marking"; 2166 uses action:dscp-marking; 2167 } 2168 } 2169 augment "/policy:policies" + 2170 "/policy:policy-entry" + 2171 "/policy:classifier-entry" + 2172 "/policy:classifier-action-entry-cfg" + 2173 "/policy:action-cfg-params" + 2174 "/example:meter-inline" + 2175 "/example:meter-type" + 2176 "/example:one-rate-tri-color-meter-type" + 2177 "/example:one-rate-tri-color-meter" + 2178 "/example:conform-action" + 2179 "/example:meter-action-params" + 2180 "/example:meter-action-val" { 2182 description 2183 "augment the one-rate-tri-color meter conform 2184 with actions"; 2185 case meter-action-drop { 2186 description 2187 "meter drop"; 2188 uses action:drop; 2189 } 2190 case meter-action-mark-dscp { 2191 description 2192 "meter action dscp marking"; 2193 uses action:dscp-marking; 2194 } 2195 } 2196 augment "/policy:policies" + 2197 "/policy:policy-entry" + 2198 "/policy:classifier-entry" + 2199 "/policy:classifier-action-entry-cfg" + 2200 "/policy:action-cfg-params" + 2201 "/example:meter-inline" + 2202 "/example:meter-type" + 2203 "/example:one-rate-tri-color-meter-type" + 2204 "/example:one-rate-tri-color-meter" + 2205 "/example:exceed-action" + 2206 "/example:meter-action-params" + 2207 "/example:meter-action-val" { 2209 description 2210 "augment the one-rate-tri-color meter exceed 2211 with actions"; 2212 case meter-action-drop { 2213 description 2214 "meter drop"; 2215 uses action:drop; 2216 } 2217 case meter-action-mark-dscp { 2218 description 2219 "meter action dscp marking"; 2220 uses action:dscp-marking; 2221 } 2222 } 2223 augment "/policy:policies" + 2224 "/policy:policy-entry" + 2225 "/policy:classifier-entry" + 2226 "/policy:classifier-action-entry-cfg" + 2227 "/policy:action-cfg-params" + 2228 "/example:meter-inline" + 2229 "/example:meter-type" + 2230 "/example:one-rate-tri-color-meter-type" + 2231 "/example:one-rate-tri-color-meter" + 2232 "/example:violate-action" + 2233 "/example:meter-action-params" + 2234 "/example:meter-action-val" { 2235 description 2236 "augment the one-rate-tri-color meter conform 2237 with actions"; 2238 case meter-action-drop { 2239 description 2240 "meter drop"; 2241 uses action:drop; 2242 } 2243 case meter-action-mark-dscp { 2244 description 2245 "meter action dscp marking"; 2246 uses action:dscp-marking; 2247 } 2248 } 2250 augment "/policy:policies" + 2251 "/policy:policy-entry" + 2252 "/policy:classifier-entry" + 2253 "/policy:classifier-action-entry-cfg" + 2254 "/policy:action-cfg-params" + 2255 "/example:meter-inline" + 2256 "/example:meter-type" + 2257 "/example:two-rate-tri-color-meter-type" + 2258 "/example:two-rate-tri-color-meter" + 2259 "/example:conform-action" + 2260 "/example:meter-action-params" + 2261 "/example:meter-action-val" { 2263 description 2264 "augment the one-rate-tri-color meter conform 2265 with actions"; 2266 case meter-action-drop { 2267 description 2268 "meter drop"; 2269 uses action:drop; 2270 } 2271 case meter-action-mark-dscp { 2272 description 2273 "meter action dscp marking"; 2274 uses action:dscp-marking; 2275 } 2276 } 2277 augment "/policy:policies" + 2278 "/policy:policy-entry" + 2279 "/policy:classifier-entry" + 2280 "/policy:classifier-action-entry-cfg" + 2281 "/policy:action-cfg-params" + 2282 "/example:meter-inline" + 2283 "/example:meter-type" + 2284 "/example:two-rate-tri-color-meter-type" + 2285 "/example:two-rate-tri-color-meter" + 2286 "/example:exceed-action" + 2287 "/example:meter-action-params" + 2288 "/example:meter-action-val" { 2290 description 2291 "augment the two-rate-tri-color meter exceed 2292 with actions"; 2293 case meter-action-drop { 2294 description 2295 "meter drop"; 2296 uses action:drop; 2297 } 2298 case meter-action-mark-dscp { 2299 description 2300 "meter action dscp marking"; 2301 uses action:dscp-marking; 2302 } 2303 } 2304 augment "/policy:policies" + 2305 "/policy:policy-entry" + 2306 "/policy:classifier-entry" + 2307 "/policy:classifier-action-entry-cfg" + 2308 "/policy:action-cfg-params" + 2309 "/example:meter-inline" + 2310 "/example:meter-type" + 2311 "/example:two-rate-tri-color-meter-type" + 2312 "/example:two-rate-tri-color-meter" + 2313 "/example:violate-action" + 2314 "/example:meter-action-params" + 2315 "/example:meter-action-val" { 2316 description 2317 "augment the two-rate-tri-color meter violate 2318 with actions"; 2319 case meter-action-drop { 2320 description 2321 "meter drop"; 2322 uses action:drop; 2323 } 2324 case meter-action-mark-dscp { 2325 description 2326 "meter action dscp marking"; 2327 uses action:dscp-marking; 2328 } 2329 } 2330 augment "/policy:policies" + 2331 "/policy:policy-entry" + 2332 "/policy:classifier-entry" + 2333 "/policy:classifier-action-entry-cfg" + 2334 "/policy:action-cfg-params" + 2335 "/example:meter-inline" + 2336 "/example:meter-type" + 2337 "/example:one-rate-two-color-meter-type" + 2338 "/example:one-rate-two-color-meter" { 2339 description 2340 "augment the one-rate-two-color meter with" + 2341 "color classifiers"; 2342 container conform-color { 2343 uses classifier:classifier-entry-generic-attr; 2344 description 2345 "conform color classifier container"; 2346 } 2347 container exceed-color { 2348 uses classifier:classifier-entry-generic-attr; 2349 description 2350 "exceed color classifier container"; 2351 } 2352 } 2353 augment "/policy:policies" + 2354 "/policy:policy-entry" + 2355 "/policy:classifier-entry" + 2356 "/policy:classifier-action-entry-cfg" + 2357 "/policy:action-cfg-params" + 2358 "/example:meter-inline" + 2359 "/example:meter-type" + 2360 "/example:one-rate-tri-color-meter-type" + 2361 "/example:one-rate-tri-color-meter" { 2362 description 2363 "augment the one-rate-tri-color meter with" + 2364 "color classifiers"; 2365 container conform-color { 2366 uses classifier:classifier-entry-generic-attr; 2367 description 2368 "conform color classifier container"; 2369 } 2370 container exceed-color { 2371 uses classifier:classifier-entry-generic-attr; 2372 description 2373 "exceed color classifier container"; 2374 } 2375 container violate-color { 2376 uses classifier:classifier-entry-generic-attr; 2377 description 2378 "violate color classifier container"; 2379 } 2380 } 2381 augment "/policy:policies" + 2382 "/policy:policy-entry" + 2383 "/policy:classifier-entry" + 2384 "/policy:classifier-action-entry-cfg" + 2385 "/policy:action-cfg-params" + 2386 "/example:meter-inline" + 2387 "/example:meter-type" + 2388 "/example:two-rate-tri-color-meter-type" + 2389 "/example:two-rate-tri-color-meter" { 2390 description 2391 "augment the two-rate-tri-color meter with" + 2392 "color classifiers"; 2393 container conform-color { 2394 uses classifier:classifier-entry-generic-attr; 2395 description 2396 "conform color classifier container"; 2397 } 2398 container exceed-color { 2399 uses classifier:classifier-entry-generic-attr; 2400 description 2401 "exceed color classifier container"; 2402 } 2403 container violate-color { 2404 uses classifier:classifier-entry-generic-attr; 2405 description 2406 "violate color classifier container"; 2407 } 2408 } 2410 /************************************************* 2411 * Augmentation to Target Module 2412 *************************************************/ 2414 augment "/if:interfaces/if:interface/" + 2415 "target:qos-target-entry/" + 2416 "target:qos-target-classifier-statistics/" + 2417 "diffserv:diffserv-action-statistics" { 2418 uses target:queuing-stats; 2419 description 2420 "Augment the statistics to policy entry"; 2421 } 2422 augment "/if:interfaces/if:interface/" + 2423 "target:qos-target-entry/" + 2424 "target:qos-target-classifier-statistics" { 2425 leaf relative-path { 2426 type string; 2427 description 2428 "Relative Path of the classifier entry in the 2429 hierarchial policy"; 2430 } 2431 description 2432 "Augment the statistics to policy entry"; 2433 } 2434 } 2436 A.2. Example of Company B Diffserv Model 2438 The following vendor example augments the qos and diffserv model, 2439 demonstrating some of the following functionality: 2441 - use of inline classifier definitions (defined inline in the policy 2442 vs referencing an externally defined classifier) 2444 - use of mulitple policy types, e.g. a queue policy, a scheduler 2445 policy, and a filter policy. All of these policies either augment 2446 the qos policy or the diffserv modules 2447 - use of a queue module, which uses and extends the queue grouping 2448 from the ietf-qos-action module 2450 - use of meter templates (v.s. meter inline) 2452 - use of internal meta data for classification and marking 2454 module example-compb-diffserv-filter-policy { 2455 yang-version 1; 2456 namespace "urn:ietf:params:xml:ns:yang:" + 2457 "example-compb-diffserv-filter-policy"; 2458 prefix compb-filter-policy; 2460 import ietf-qos-classifier { 2461 prefix classifier; 2462 } 2463 import ietf-qos-policy { 2464 prefix policy; 2465 } 2466 import ietf-qos-action { 2467 prefix action; 2468 } 2469 import ietf-diffserv { 2470 prefix diffserv; 2471 } 2473 organization "Company B"; 2474 contact 2475 "Editor: XYZ 2476 "; 2478 description 2479 "This module contains a collection of YANG definitions for 2480 configuring diffserv specification implementations. 2481 Copyright (c) 2014 IETF Trust and the persons identified as 2482 authors of the code. All rights reserved. 2483 Redistribution and use in source and binary forms, with or 2484 without modification, is permitted pursuant to, and subject 2485 to the license terms contained in, the Simplified BSD License 2486 set forth in Section 4.c of the IETF Trust's Legal Provisions 2487 Relating to IETF Documents 2488 (http://trustee.ietf.org/license-info). 2489 This version of this YANG module is part of RFC XXXX; see 2490 the RFC itself for full legal notices."; 2492 revision 2015-04-07 { 2493 description 2494 "Latest revision of diffserv policy"; 2496 reference "RFC XXXX"; 2497 } 2499 /* 2500 * The policy must be of either type v4 or v6. Corresponding 2501 * address types must be used. Enforce with "must" statement? 2502 */ 2503 identity v4-diffserv-policy-type { 2504 base policy:policy-type; 2505 description 2506 "This defines default policy-type"; 2507 } 2509 identity v6-diffserv-policy-type { 2510 base policy:policy-type; 2511 description 2512 "This defines default policy-type"; 2513 } 2515 /************************************************* 2516 * Classification types 2517 *************************************************/ 2519 identity forwarding-class { 2520 base classifier:filter-type; 2521 description 2522 "Forwarding class filter type"; 2523 } 2525 identity internal-loss-priority { 2526 base classifier:filter-type; 2527 description 2528 "Internal loss priority filter type"; 2529 } 2531 grouping forwarding-class-cfg { 2532 list forwarding-class-cfg { 2533 key "forwarding-class"; 2534 description 2535 "list of forwarding-classes"; 2536 leaf forwarding-class { 2537 type string; 2538 description 2539 "Forwarding class name"; 2540 } 2541 } 2542 description 2543 "Filter containing list of forwarding classes"; 2544 } 2546 grouping loss-priority-cfg { 2547 list loss-priority-cfg { 2548 key "loss-priority"; 2549 description 2550 "list of loss-priorities"; 2551 leaf loss-priority { 2552 type enumeration { 2553 enum high { 2554 description "High Loss Priority"; 2555 } 2556 enum medium-high { 2557 description "Medium-high Loss Priority"; 2558 } 2559 enum medium-low { 2560 description "Medium-low Loss Priority"; 2561 } 2562 enum low { 2563 description "Low Loss Priority"; 2564 } 2565 } 2566 description 2567 "Loss-priority"; 2568 } 2569 } 2570 description 2571 "Filter containing list of loss priorities"; 2572 } 2574 augment "/policy:policies" + 2575 "/policy:policy-entry" + 2576 "/policy:classifier-entry" + 2577 "/policy:filter-entry" + 2578 "/diffserv:filter-params" { 2579 case forwarding-class { 2580 uses forwarding-class-cfg; 2581 description 2582 "Filter Type Internal-loss-priority"; 2583 } 2584 case internal-loss-priority { 2585 uses loss-priority-cfg; 2586 description 2587 "Filter Type Internal-loss-priority"; 2588 } 2589 description 2590 "Augments Diffserv Classifier with vendor" + 2591 " specific types"; 2592 } 2594 /************************************************* 2595 * Actions 2596 *************************************************/ 2598 identity mark-fwd-class { 2599 base policy:action-type; 2600 description 2601 "mark forwarding class action type"; 2602 } 2604 identity mark-loss-priority { 2605 base policy:action-type; 2606 description 2607 "mark loss-priority action type"; 2608 } 2610 grouping mark-fwd-class { 2611 container mark-fwd-class-cfg { 2612 leaf forwarding-class { 2613 type string; 2614 description 2615 "Forwarding class name"; 2616 } 2617 description 2618 "mark-fwd-class container"; 2619 } 2620 description 2621 "mark-fwd-class grouping"; 2622 } 2624 grouping mark-loss-priority { 2625 container mark-loss-priority-cfg { 2626 leaf loss-priority { 2627 type enumeration { 2628 enum high { 2629 description "High Loss Priority"; 2630 } 2631 enum medium-high { 2632 description "Medium-high Loss Priority"; 2633 } 2634 enum medium-low { 2635 description "Medium-low Loss Priority"; 2636 } 2637 enum low { 2638 description "Low Loss Priority"; 2640 } 2641 } 2642 description 2643 "Loss-priority"; 2644 } 2645 description 2646 "mark-loss-priority container"; 2647 } 2648 description 2649 "mark-loss-priority grouping"; 2650 } 2652 augment "/policy:policies" + 2653 "/policy:policy-entry" + 2654 "/policy:classifier-entry" + 2655 "/policy:classifier-action-entry-cfg" + 2656 "/diffserv:action-cfg-params" { 2657 case mark-fwd-class { 2658 uses mark-fwd-class; 2659 description 2660 "Mark forwarding class in the packet"; 2661 } 2662 case mark-loss-priority { 2663 uses mark-loss-priority; 2664 description 2665 "Mark loss priority in the packet"; 2666 } 2667 case meter-reference { 2668 uses action:meter-reference; 2669 description 2670 "Assign a meter as an action"; 2671 } 2672 case discard { 2673 uses action:discard; 2674 description 2675 "Discard action"; 2676 } 2677 case count { 2678 uses action:count; 2679 description 2680 "Count action - explicit count configuration"; 2681 } 2682 description 2683 "Augments common diffserv policy actions"; 2684 } 2686 augment "/action:meter-template" + 2687 "/action:meter-entry" + 2688 "/action:meter-type" + 2689 "/action:one-rate-tri-color-meter-type" + 2690 "/action:one-rate-tri-color-meter" { 2691 leaf one-rate-color-aware { 2692 type boolean; 2693 description 2694 "This defines if the meter is color-aware"; 2695 } 2696 } 2697 augment "/action:meter-template" + 2698 "/action:meter-entry" + 2699 "/action:meter-type" + 2700 "/action:two-rate-tri-color-meter-type" + 2701 "/action:two-rate-tri-color-meter" { 2702 leaf two-rate-color-aware { 2703 type boolean; 2704 description 2705 "This defines if the meter is color-aware"; 2706 } 2707 } 2709 /* example of augmenting a meter template with a 2710 /* vendor specific action */ 2711 augment "/action:meter-template" + 2712 "/action:meter-entry" + 2713 "/action:meter-type" + 2714 "/action:one-rate-two-color-meter-type" + 2715 "/action:one-rate-two-color-meter" + 2716 "/action:exceed-action" + 2717 "/action:meter-action-params" + 2718 "/action:meter-action-val" { 2719 case meter-action-drop { 2720 description 2721 "meter drop"; 2722 uses action:drop; 2723 } 2725 description 2726 "Augment the actions to basic meter"; 2727 } 2729 } 2731 module example-compb-queue-policy { 2732 yang-version 1; 2733 namespace "urn:ietf:params:xml:ns:yang:example-compb-queue-policy"; 2734 prefix queue-plcy; 2735 import ietf-qos-classifier { 2736 prefix classifier; 2737 } 2738 import ietf-qos-policy { 2739 prefix policy; 2740 } 2742 organization "Company B"; 2743 contact 2744 "Editor: XYZ 2745 "; 2747 description 2748 "This module defines a queue policy. The classification 2749 is based on aforwarding class, and the actions are queues. 2750 Copyright (c) 2014 IETF Trust and the persons identified as 2751 authors of the code. All rights reserved. 2752 Redistribution and use in source and binary forms, with or 2753 without modification, is permitted pursuant to, and subject 2754 to the license terms contained in, the Simplified BSD License 2755 set forth in Section 4.c of the IETF Trust's Legal Provisions 2756 Relating to IETF Documents 2757 (http://trustee.ietf.org/license-info). 2758 This version of this YANG module is part of RFC XXXX; see 2759 the RFC itself for full legal notices."; 2761 revision 2015-04-07 { 2762 description 2763 "Latest revision of diffserv policy"; 2764 reference "RFC XXXX"; 2765 } 2767 identity forwarding-class { 2768 base classifier:filter-type; 2769 description 2770 "Forwarding class filter type"; 2771 } 2773 grouping forwarding-class-cfg { 2774 leaf forwarding-class-cfg { 2775 type string; 2776 description 2777 "forwarding-class name"; 2778 } 2779 description 2780 "Forwarding class filter"; 2781 } 2782 augment "/policy:policies" + 2783 "/policy:policy-entry" + 2784 "/policy:classifier-entry" + 2785 "/policy:filter-entry" { 2786 /* Does NOT support "logical-not" of forwarding class. 2787 Use "must"? */ 2788 choice filter-params { 2789 description 2790 "Choice of filters"; 2791 case forwarding-class-cfg { 2792 uses forwarding-class-cfg; 2793 description 2794 "Filter Type Internal-loss-priority"; 2795 } 2796 } 2797 description 2798 "Augments Diffserv Classifier with fwd class filter"; 2799 } 2801 identity compb-queue { 2802 base policy:action-type; 2803 description 2804 "compb-queue action type"; 2805 } 2807 grouping compb-queue-name { 2808 container queue-name { 2809 leaf name { 2810 type string; 2811 description 2812 "Queue class name"; 2813 } 2814 description 2815 "compb queue container"; 2816 } 2817 description 2818 "compb-queue grouping"; 2819 } 2821 augment "/policy:policies" + 2822 "/policy:policy-entry" + 2823 "/policy:classifier-entry" + 2824 "/policy:classifier-action-entry-cfg" { 2825 choice action-cfg-params { 2826 description 2827 "Choice of action types"; 2828 case compb-queue { 2829 uses compb-queue-name; 2831 } 2832 } 2833 description 2834 "Augment the queue actions to queue policy entry"; 2835 } 2836 } 2838 module example-compb-queue { 2839 yang-version 1; 2840 namespace "urn:ietf:params:xml:ns:yang:ietf-compb-queue"; 2841 prefix compb-queue; 2843 import ietf-qos-action { 2844 prefix action; 2845 } 2847 organization "Company B"; 2848 contact 2849 "Editor: XYZ 2850 "; 2852 description 2853 "This module describes a compb queue module. This is a 2854 template for a queue within a queue policy, referenced 2855 by name. 2857 This version of this YANG module is part of RFC XXXX; see 2858 the RFC itself for full legal notices."; 2860 revision 2015-04-07 { 2861 description 2862 "Latest revision of diffserv based classifier"; 2863 reference "RFC XXXX"; 2864 } 2866 container compb-queue { 2867 description 2868 "Queue used in compb architecture"; 2869 leaf name { 2870 type string; 2871 description 2872 "A unique name identifying this queue"; 2873 } 2874 uses action:queue; 2875 container excess-rate { 2876 choice excess-rate-type { 2877 case percent { 2878 leaf excess-rate-percent { 2879 type uint32 { 2880 range "1..100"; 2881 } 2882 description 2883 "excess-rate-percent"; 2884 } 2885 } 2886 case proportion { 2887 leaf excess-rate-poroportion { 2888 type uint32 { 2889 range "1..1000"; 2890 } 2891 description 2892 "excess-rate-poroportion"; 2893 } 2894 } 2895 description 2896 "Choice of excess-rate type"; 2897 } 2898 description 2899 "Excess rate value"; 2900 } 2901 leaf excess-priority { 2902 type enumeration { 2903 enum high { 2904 description "High Loss Priority"; 2905 } 2906 enum medium-high { 2907 description "Medium-high Loss Priority"; 2908 } 2909 enum medium-low { 2910 description "Medium-low Loss Priority"; 2911 } 2912 enum low { 2913 description "Low Loss Priority"; 2914 } 2915 enum none { 2916 description "No excess priority"; 2917 } 2918 } 2919 description 2920 "Priority of excess (above guaranted rate) traffic"; 2921 } 2922 container buffer-size { 2923 choice buffer-size-type { 2924 case percent { 2925 leaf buffer-size-percent { 2926 type uint32 { 2927 range "1..100"; 2928 } 2929 description 2930 "buffer-size-percent"; 2931 } 2932 } 2933 case temporal { 2934 leaf buffer-size-temporal { 2935 type uint64; 2936 units "microsecond"; 2937 description 2938 "buffer-size-temporal"; 2939 } 2940 } 2941 case remainder { 2942 leaf buffer-size-remainder { 2943 type empty; 2944 description 2945 "use remaining of buffer"; 2946 } 2947 } 2948 description 2949 "Choice of buffer size type"; 2950 } 2951 description 2952 "Buffer size value"; 2953 } 2954 } 2956 augment 2957 "/compb-queue" + 2958 "/queue-cfg" + 2959 "/algorithmic-drop-cfg" + 2960 "/drop-algorithm" { 2961 case random-detect { 2962 list drop-profile-list { 2963 key "priority"; 2964 description 2965 "map of priorities to drop-algorithms"; 2966 leaf priority { 2967 type enumeration { 2968 enum any { 2969 description "Any priority mapped here"; 2970 } 2971 enum high { 2972 description "High Priority Packet"; 2973 } 2974 enum medium-high { 2975 description "Medium-high Priority Packet"; 2976 } 2977 enum medium-low { 2978 description "Medium-low Priority Packet"; 2979 } 2980 enum low { 2981 description "Low Priority Packet"; 2982 } 2983 } 2984 description 2985 "Priority of guaranteed traffic"; 2986 } 2987 leaf drop-profile { 2988 type string; 2989 description 2990 "drop profile to use for this priority"; 2991 } 2992 } 2993 } 2994 description 2995 "compb random detect drop algorithm config"; 2996 } 2997 } 2999 module example-compb-scheduler-policy { 3000 yang-version 1; 3001 namespace "urn:ietf:params:xml:ns:yang:" + 3002 "example-compb-scheduler-policy"; 3003 prefix scheduler-plcy; 3005 import ietf-qos-action { 3006 prefix action; 3007 } 3009 import ietf-qos-policy { 3010 prefix policy; 3011 } 3013 organization "Company B"; 3014 contact 3015 "Editor: XYZ 3016 "; 3018 description 3019 "This module defines a scheduler policy. The classification 3020 is based on classifier-any, and the action is a scheduler."; 3022 revision 2015-04-07 { 3023 description 3024 "Latest revision of diffserv policy"; 3025 reference "RFC XXXX"; 3026 } 3028 identity queue-policy { 3029 base policy:action-type; 3030 description 3031 "forwarding-class-queue action type"; 3032 } 3034 grouping queue-policy-name { 3035 container compb-queue-policy-name { 3036 leaf name { 3037 type string; 3038 description 3039 "Queue policy name"; 3040 } 3041 description 3042 "compb-queue-policy container"; 3043 } 3044 description 3045 "compb-queue policy grouping"; 3046 } 3048 augment "/policy:policies" + 3049 "/policy:policy-entry" + 3050 "/policy:classifier-entry" + 3051 "/policy:classifier-action-entry-cfg" { 3052 choice action-cfg-params { 3053 case schedular { 3054 uses action:schedular; 3055 } 3056 case queue-policy { 3057 uses queue-policy-name; 3058 } 3059 description 3060 "Augment the scheduler policy with a queue policy"; 3061 } 3062 } 3063 } 3065 A.3. Example of Company C Diffserv Model 3067 Company C vendor augmentation is based on Ericsson's implementation 3068 differentiated QoS. This implementation first sorts traffic based on 3069 a classifier, which can sort traffic into one or more traffic 3070 forwarding classes. Then, a policer or meter policy references the 3071 classifier and its traffic forwarding classes to specify different 3072 service levels for each traffic forwarding class. 3074 Because each classifier sorts traffic into one or more traffic 3075 forwarding classes, this type of classifier does not align with ietf- 3076 qos-classifier.yang, which defines one traffic forwarding class per 3077 classifier. Additionally, Company C's policing and metering policies 3078 relies on the classifier's pre-defined traffic forwarding classes to 3079 provide differentiated services, rather than redefining the patterns 3080 within a policing or metering policy, as is defined in ietf- 3081 diffserv.yang. 3083 Due to these differences, even though Company C uses all the building 3084 blocks of classifier and policy, Company C's augmentation does not 3085 use ietf-diffserv.yang to provide differentiated service levels. 3086 Instead, Company C's augmentation uses the basic building blocks, 3087 ietf-qos-policy.yang to provide differentiated services. 3089 module example-compc-qos-policy { 3090 yang-version 1.1; 3091 namespace "urn:example-compc-qos-policy"; 3092 prefix "compcqos"; 3094 import ietf-qos-policy { 3095 prefix "pol"; 3096 } 3098 import ietf-qos-action { 3099 prefix "action"; 3100 } 3102 organization ""; 3103 contact ""; 3104 description ""; 3106 revision 2016-09-26 { 3107 description ""; 3108 reference ""; 3109 } 3111 /* identities */ 3113 identity compc-qos-policy { 3114 base pol:policy-type; 3115 } 3117 identity mdrr-queuing-policy { 3118 base compc-qos-policy; 3120 } 3122 identity pwfq-queuing-policy { 3123 base compc-qos-policy; 3124 } 3126 identity policing-policy { 3127 base compc-qos-policy; 3128 } 3130 identity metering-policy { 3131 base compc-qos-policy; 3132 } 3134 identity forwarding-policy { 3135 base compc-qos-policy; 3136 } 3138 identity overhead-profile-policy { 3139 base compc-qos-policy; 3140 } 3142 identity resource-profile-policy { 3143 base compc-qos-policy; 3144 } 3146 identity protocol-rate-limit-policy { 3147 base compc-qos-policy; 3148 } 3150 identity compc-qos-action { 3151 base pol:action-type; 3152 } 3154 /* groupings */ 3156 grouping redirect-action-grp { 3157 container redirect { 3158 /* Redirect options */ 3159 } 3160 } 3162 /* deviations */ 3164 deviation "/pol:policies/pol:policy-entry" { 3165 deviate add { 3166 must "pol:type = compc-qos-policy" { 3167 description 3168 "Only policy types drived from compc-qos-policy " + 3169 "are supported"; 3170 } 3171 } 3172 } 3174 deviation "/pol:policies/pol:policy-entry/pol:classifier-entry" { 3175 deviate add { 3176 must "../per-class-action = 'true'" { 3177 description 3178 "Only policies with per-class actions have classifiers"; 3179 } 3180 must "((../sub-type != 'mdrr-queuing-policy') and " + 3181 " (../sub-type != 'pwfq-queuing-policy')) or " + 3182 "(((../sub-type = 'mdrr-queuing-policy') or " + 3183 " (../sub-type = 'pwfq-queueing-policy')) and " + 3184 " ((classifier-entry-name = '0') or " + 3185 " (classifier-entry-name = '1') or " + 3186 " (classifier-entry-name = '2') or " + 3187 " (classifier-entry-name = '3') or " + 3188 " (classifier-entry-name = '4') or " + 3189 " (classifier-entry-name = '5') or " + 3190 " (classifier-entry-name = '6') or " + 3191 " (classifier-entry-name = '7') or " + 3192 " (classifier-entry-name = '8')))" { 3193 description 3194 "MDRR queuing policy's or PWFQ queuing policy's " + 3195 "classifier-entry-name is limited to the listed values"; 3196 } 3197 } 3198 } 3200 deviation "/pol:policies/pol:policy-entry/pol:classifier-entry" + 3201 "/pol:classifier-action-entry-cfg" { 3202 deviate add { 3203 max-elements 1; 3204 must "action-type = 'compc-qos-action'" { 3205 description 3206 "Only compc-qos-action is allowed"; 3207 } 3208 } 3209 } 3211 /* augments */ 3213 augment "/pol:policies/pol:policy-entry" { 3214 when "pol:type = 'compc-qos-policy')" { 3215 description 3216 "Additional nodes only for diffserv-policy"; 3217 } 3218 leaf sub-type { 3219 type identityref { 3220 base compc-qos-policy; 3221 } 3222 mandatory true; 3223 /* The value of this leaf must not change once configured */ 3224 } 3225 leaf per-class-action { 3226 mandatory true; 3227 type boolean; 3228 must "(((. = 'true') and " + 3229 " ((../sub-type = 'policing-policy') or " + 3230 " (../sub-type = 'metering-policy') or " + 3231 " (../sub-type = 'mdrr-queuing-policy') or " + 3232 " (../sub-type = 'pwfq-queuing-policy') or " + 3233 " (../sub-type = 'forwarding-policy'))) or " + 3234 " ((. = 'false') and " + 3235 " ((../sub-type = 'overhead-profile-policy') or " + 3236 " (../sub-type = 'resource-profile-policy') or " + 3237 " (../sub-type = 'protocol-rate-limit-policy')))" { 3238 description 3239 "Only certain policies have per-class action"; 3240 } 3241 } 3242 container traffic-classifier { 3243 presence true; 3244 when "../sub-type = 'policing-policy' or " + 3245 "../sub-type = 'metering-policy' or " + 3246 "../sub-type = 'forwarding-policy'" { 3247 description 3248 "A classifier for policing-policy or metering-policy"; 3249 } 3250 leaf name { 3251 type string; 3252 mandatory true; 3253 description 3254 "Traffic classifier name"; 3255 } 3256 leaf type { 3257 type enumeration { 3258 enum 'internal-dscp-only-classifier' { 3259 value 0; 3260 description 3261 "Classify traffic based on (internal) dscp only"; 3262 } 3263 enum 'ipv4-header-based-classifier' { 3264 value 1; 3265 description 3266 "Classify traffic based on IPv4 packet header fields"; 3267 } 3268 enum 'ipv6-header-based-classifier' { 3269 value 2; 3270 description 3271 "Classify traffic based on IPv6 packet header fields"; 3272 } 3273 } 3274 mandatory true; 3275 description 3276 "Traffic classifier type"; 3277 } 3278 } 3279 container traffic-queue { 3280 when "(../sub-type = 'mdrr-queuing-policy') or " + 3281 "(../sub-type = 'pwfq-queuing-policy')" { 3282 description 3283 "Queuing policy properties"; 3284 } 3285 leaf queue-map { 3286 type string; 3287 description 3288 "Traffic queue map for queuing policy"; 3289 } 3290 } 3291 container overhead-profile { 3292 when "../sub-type = 'overhead-profile-policy'" { 3293 description 3294 "Overhead profile policy properties"; 3295 } 3296 } 3297 container resource-profile { 3298 when "../sub-type = 'resource-profile-policy'" { 3299 description 3300 "Resource profile policy properties"; 3301 } 3302 } 3303 container protocol-rate-limit { 3304 when "../sub-type = 'protocol-rate-limit-policy'" { 3305 description 3306 "Protocol rate limit policy properties"; 3307 } 3308 } 3309 } 3311 augment "/pol:policies/pol:policy-entry/pol:classifier-entry" + 3312 "/pol:classifier-action-entry-cfg/pol:action-cfg-params" { 3313 when "../../../pol:type = 'compc-qos-policy')" { 3314 description 3315 "Configurations for a classifier-policy-type policy"; 3316 } 3317 case metering-or-policing-policy { 3318 when "../../../sub-type = 'policing-policy' or " 3319 + "../../../sub-type = 'metering-policy'" { 3320 } 3321 container dscp-marking { 3322 uses action:dscp-marking; 3323 } 3324 container precedence-marking { 3325 uses action:dscp-marking; 3326 } 3327 container priority-marking { 3328 uses action:priority; 3329 } 3330 container rate-limiting { 3331 uses action:one-rate-two-color-meter; 3332 } 3333 } 3334 case mdrr-queuing-policy { 3335 when "../../../sub-type = 'mdrr-queuing-policy'" { 3336 description 3337 "MDRR queue handling properties for the traffic " + 3338 "classified into current queue"; 3339 } 3340 leaf mdrr-queue-weight { 3341 type uint8 { 3342 range "20..100"; 3343 } 3344 units percentage; 3345 } 3346 } 3347 case pwfq-queuing-policy { 3348 when "../../../sub-type = 'pwfq-queuing-policy'" { 3349 description 3350 "PWFQ queue handling properties for traffic " + 3351 "classified into current queue"; 3352 } 3353 leaf pwfq-queue-weight { 3354 type uint8 { 3355 range "20..100"; 3356 } 3357 units percentage; 3358 } 3359 leaf pwfq-queue-priority { 3360 type uint8; 3361 } 3362 leaf pwfq-queue-rate { 3363 type uint8; 3364 } 3365 } 3366 case forwarding-policy { 3367 when "../../../sub-type = 'forwarding-policy'" { 3368 description 3369 "Forward policy handling properties for traffic " + 3370 "in this classifier"; 3371 } 3372 uses redirect-action-grp; 3373 } 3374 description 3375 "Add the classify action configuration"; 3376 } 3378 } 3380 Authors' Addresses 3382 Aseem Choudhary 3383 Cisco Systems 3384 170 W. Tasman Drive 3385 San Jose, CA 95134 3386 US 3388 Email: asechoud@cisco.com 3390 Mahesh Jethanandani 3391 Cisco Systems 3392 170 W. Tasman Drive 3393 San Jose, CA 95134 3394 US 3396 Email: mjethanandani@gmail.com 3398 Norm Strahle 3399 Juniper Networks 3400 1194 North Mathilda Avenue 3401 Sunnyvale, CA 94089 3402 US 3404 Email: nstrahle@juniper.net 3405 Ebben Aries 3406 Juniper Networks 3407 1194 North Mathilda Avenue 3408 Sunnyvale, CA 94089 3409 US 3411 Email: exa@juniper.net 3413 Ing-Wher Chen 3414 Kuatro Technologies 3416 Email: ichen@kuatrotech.com