< draft-chen-rtgwg-qos-yang-03.txt   draft-chen-rtgwg-qos-yang-04.txt >
RTGWG I. Chen RTGWG I. Chen
Internet-Draft Kuatro Technologies Internet-Draft Kuatro Technologies
Intended status: Standards Track October 19, 2016 Intended status: Standards Track October 20, 2016
Expires: April 22, 2017 Expires: April 23, 2017
YANG Data Model for QoS YANG Data Model for QoS
draft-chen-rtgwg-qos-yang-03 draft-chen-rtgwg-qos-yang-04
Abstract Abstract
This document defines a YANG data model to describe quality-of- This document defines a YANG data model to describe quality-of-
service (QoS) configurations. service (QoS) configurations.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
skipping to change at page 1, line 31 skipping to change at page 1, line 31
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on April 22, 2017. This Internet-Draft will expire on April 23, 2017.
Copyright Notice Copyright Notice
Copyright (c) 2016 IETF Trust and the persons identified as the Copyright (c) 2016 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 16 skipping to change at page 2, line 16
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 2 1.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 2
2. Design of the Data Model . . . . . . . . . . . . . . . . . . 3 2. Design of the Data Model . . . . . . . . . . . . . . . . . . 3
3. Related Work . . . . . . . . . . . . . . . . . . . . . . . . 4 3. Related Work . . . . . . . . . . . . . . . . . . . . . . . . 4
4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 5 4. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 5
5. Security Consideration . . . . . . . . . . . . . . . . . . . 55 5. Security Consideration . . . . . . . . . . . . . . . . . . . 55
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 55 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 55
7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 55 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 55
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 55 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 55
8.1. Normative References . . . . . . . . . . . . . . . . . . 55 8.1. Normative References . . . . . . . . . . . . . . . . . . 56
8.2. Informative References . . . . . . . . . . . . . . . . . 56 8.2. Informative References . . . . . . . . . . . . . . . . . 56
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 56 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 56
1. Introduction 1. Introduction
This document defines a YANG [RFC7950] data model to specify Quality- This document defines a YANG [RFC7950] data model to specify Quality-
of-Service (QoS) configurations. QoS configurations include policies of-Service (QoS) configurations. QoS configurations include policies
and profiles that allow an administrator of a device to classify, and profiles that allow an administrator of a device to classify,
mark, rate-limit, and perform other actions on incoming and outgoing mark, rate-limit, and perform other actions on incoming and outgoing
packets. packets.
skipping to change at page 5, line 19 skipping to change at page 5, line 19
the YANG model proposed in this document and ietf-qos- the YANG model proposed in this document and ietf-qos-
policy@2016-03-03.yang is that both claim to model QoS. policy@2016-03-03.yang is that both claim to model QoS.
Consequently, the authors of the two documents have put in contact to Consequently, the authors of the two documents have put in contact to
understand the similarities and differences between the two YANG understand the similarities and differences between the two YANG
models. While there are no resolutions yet, the goal of all involved models. While there are no resolutions yet, the goal of all involved
is to eliminate unnecessary duplication and design one coherent QoS is to eliminate unnecessary duplication and design one coherent QoS
model (or more if needed). model (or more if needed).
4. YANG Module 4. YANG Module
<CODE BEGINS> file "ietf-qos.yang" <CODE BEGINS> file "ietf-qos@2016-10-20.yang"
module ietf-qos { module ietf-qos {
namespace "urn:ietf:params:xml:ns:yang:ietf-qos"; namespace "urn:ietf:params:xml:ns:yang:ietf-qos";
prefix qos; prefix qos;
organization "IETF when standardized"; organization "IETF when standardized";
contact "IETF when standardized"; contact "IETF when standardized";
description description
"QOS YANG Model"; "QOS YANG Model";
revision "2016-10-20" {
description "Second revision: " +
" - Correct confdc compile errors";
reference "";
}
revision "2015-06-04" { revision "2015-06-04" {
description "Initial revision"; description "Initial revision";
reference ""; reference "";
} }
typedef dscp-code-all-values-type { typedef dscp-code-all-values-type {
type union { type union {
type uint8 { type uint8 {
range "0..63"; range "0..63";
} }
skipping to change at page 8, line 11 skipping to change at page 8, line 17
grouping mdrr-congestion-avoidance-map-grp { grouping mdrr-congestion-avoidance-map-grp {
description "mdrr-congestion-avoidance-map-grp"; description "mdrr-congestion-avoidance-map-grp";
leaf congestion-avoidance-map-reference { leaf congestion-avoidance-map-reference {
type leafref { type leafref {
path "/qos:qos/qos:congestion-avoidance-maps" path "/qos:qos/qos:congestion-avoidance-maps"
+ "/qos:congestion-avoidance-map/qos:name"; + "/qos:congestion-avoidance-map/qos:name";
} }
must must
"/qos:qos/qos:congestion-avoidance-maps" + "/qos:qos/qos:congestion-avoidance-maps" +
"/qos:congestion-avoidance-map/" + "/qos:congestion-avoidance-map[qos:name = current()]" +
"[qos:name = current()]/qos:mdrr" { "/qos:mdrr" {
description "Must be an mdrr congestion avoidance map"; description "Must be an mdrr congestion avoidance map";
} }
description "congestion-avoidance-map-reference"; description "congestion-avoidance-map-reference";
} }
} }
grouping pwfq-congestion-avoidance-map-grp { grouping pwfq-congestion-avoidance-map-grp {
description "pwfq-congestion-avoidance-map-grp"; description "pwfq-congestion-avoidance-map-grp";
leaf congestion-avoidance-map-reference { leaf congestion-avoidance-map-reference {
type leafref { type leafref {
path "/qos:qos/qos:congestion-avoidance-maps" path "/qos:qos/qos:congestion-avoidance-maps"
+ "/qos:congestion-avoidance-map/qos:name"; + "/qos:congestion-avoidance-map/qos:name";
} }
must must
"/qos:qos/qos:congestion-avoidance-maps/" + "/qos:qos/qos:congestion-avoidance-maps/" +
"/qos:congestion-avoidance-map/" + "/qos:congestion-avoidance-map[qos:name = current()]" +
"[qos:name = current()]/qos:pwfq" { "/qos:pwfq" {
description "Must be a pwfq congestion avoidance map"; description "Must be a pwfq congestion avoidance map";
} }
description "congestion-avoidance-map-reference"; description "congestion-avoidance-map-reference";
} }
} }
grouping queue-map-grp { grouping queue-map-grp {
description "queue-map-grp"; description "queue-map-grp";
leaf queue-map-reference { leaf queue-map-reference {
type leafref { type leafref {
path "/qos:qos/qos:queue-maps/qos:queue-map/qos:name"; path "/qos:qos/qos:queue-maps/qos:queue-map/qos:name";
} }
description "queue-map-reference"; description "queue-map-reference";
} }
} }
skipping to change at page 14, line 48 skipping to change at page 15, line 4
units "percent"; units "percent";
description "percentage"; description "percentage";
} }
uses rate-counters-grp; uses rate-counters-grp;
} }
} }
} }
} }
} }
} }
grouping policy-packet-handling-card-family-1-3-grp {
description "policy packet handling for card-family 1 and 3";
uses policy-packet-handling-grp {
augment "policy-packet-handling/" +
"rate-limiting/rate-type/bit-rate-type/bit-rate" {
description "bit-rate";
uses policy-card-family-1-3-bit-rate-grp;
}
}
}
grouping policy-packet-handling-card-family-2-grp {
description "policy packet handling for card-family 2";
uses policy-packet-handling-grp {
augment "policy-packet-handling/" +
"rate-limiting/rate-type/bit-rate-type/bit-rate" {
uses policy-card-family-2-bit-rate-grp;
description "augment bit-rate";
}
}
}
grouping inline-rate-specifications-packet-handling-grp { grouping inline-rate-specifications-packet-handling-grp {
description "inline-rate-specifications-packet-handling-grp"; description "inline-rate-specifications-packet-handling-grp";
choice inline-rate-specifications { choice inline-rate-specifications {
description "inline-rate-specifications"; description "inline-rate-specifications";
case mark-dscp { case mark-dscp {
leaf mark-dscp { leaf mark-dscp {
type dscp-code-all-values-type; type dscp-code-all-values-type;
description "mark-dscp"; description "mark-dscp";
} }
skipping to change at page 17, line 4 skipping to change at page 17, line 29
container card-family-2 { container card-family-2 {
description "card-family-2"; description "card-family-2";
uses metering-or-policing-card-family-2-grp; uses metering-or-policing-card-family-2-grp;
} }
} }
case card-family-3 { case card-family-3 {
container card-family-3 { container card-family-3 {
description "card-family-3"; description "card-family-3";
uses metering-or-policing-card-family-3-grp; uses metering-or-policing-card-family-3-grp;
} }
} }
case default-card-family { case default-card-family {
/* The default card-family is card-family-1. */ /* The default card-family is card-family-1. */
uses metering-or-policing-card-family-1-grp; uses metering-or-policing-card-family-1-grp;
} }
} }
} }
grouping metering-or-policing-card-family-1-grp { grouping metering-or-policing-card-family-1-grp {
description "metering-or-policing-card-family-1-grp"; description "metering-or-policing-card-family-1-grp";
uses policy-group-grp { uses policy-group-grp {
augment "policy/group/class-group/class-group/classes/class/" + augment "policy/group/class-group/class-group/classes/class/" +
"packet-handling" { "packet-handling" {
description "augment packet-handling"; description "augment packet-handling";
uses policy-packet-handling-grp { uses policy-packet-handling-card-family-1-3-grp;
augment "policy-packet-handling/" +
"rate-limiting/rate-type/bit-rate-type/bit-rate" {
description "bit-rate";
uses policy-card-family-1-3-bit-rate-grp;
}
}
} }
} }
uses inline-rate-specifications-packet-handling-grp { uses inline-rate-specifications-packet-handling-grp {
augment "inline-rate-specifications/rate-limiting/rate" { augment "inline-rate-specifications/rate-limiting/rate" {
description "augment rate"; description "augment rate";
uses policy-card-family-1-3-bit-rate-grp; uses policy-card-family-1-3-bit-rate-grp;
uses informational-grp; uses informational-grp;
} }
} }
uses rate-calculation-exclude-layer-2-overhead-grp; uses rate-calculation-exclude-layer-2-overhead-grp;
} }
grouping metering-or-policing-card-family-2-grp { grouping metering-or-policing-card-family-2-grp {
description "metering-or-policing-card-family-2-grp"; description "metering-or-policing-card-family-2-grp";
uses policy-group-grp { uses policy-group-grp {
augment "policy/group/class-group/class-group/classes/class/" + augment "policy/group/class-group/class-group/classes/class/" +
"packet-handling" { "packet-handling" {
description "packet-handling"; description "packet-handling";
uses policy-packet-handling-grp { uses policy-packet-handling-card-family-2-grp;
augment "policy-packet-handling/" +
"rate-limiting/rate-type/bit-rate-type/bit-rate" {
description "augment bit-rate";
uses policy-card-family-2-bit-rate-grp;
}
}
} }
} }
uses inline-rate-specifications-packet-handling-grp { uses inline-rate-specifications-packet-handling-grp {
augment "inline-rate-specifications/rate-limiting/rate" { augment "inline-rate-specifications/rate-limiting/rate" {
description "augment rate"; description "augment rate";
uses policy-card-family-2-bit-rate-grp; uses policy-card-family-2-bit-rate-grp;
uses informational-grp; uses informational-grp;
} }
} }
uses rate-calculation-exclude-layer-2-overhead-grp; uses rate-calculation-exclude-layer-2-overhead-grp;
} }
grouping metering-or-policing-card-family-3-grp { grouping metering-or-policing-card-family-3-grp {
description "metering-or-policing-card-family-3-grp"; description "metering-or-policing-card-family-3-grp";
uses policy-group-grp { uses policy-group-grp {
augment "policy/group/class-group/class-group/classes/class/" + augment "policy/group/class-group/class-group/classes/class/" +
"packet-handling" { "packet-handling" {
description "augment packet-handling"; description "augment packet-handling";
uses policy-packet-handling-grp { uses policy-packet-handling-card-family-1-3-grp;
augment "policy-packet-handling/" +
"rate-limiting/rate-type/bit-rate-type/bit-rate" {
uses policy-card-family-2-bit-rate-grp;
description "augment bit-rate";
}
}
} }
} }
uses inline-rate-specifications-packet-handling-grp { uses inline-rate-specifications-packet-handling-grp {
augment "inline-rate-specifications/rate-limiting/rate" { augment "inline-rate-specifications/rate-limiting/rate" {
description "augment rate"; description "augment rate";
uses policy-card-family-1-3-bit-rate-grp; uses policy-card-family-1-3-bit-rate-grp;
uses informational-grp; uses informational-grp;
} }
} }
uses rate-calculation-exclude-layer-2-overhead-grp; uses rate-calculation-exclude-layer-2-overhead-grp;
skipping to change at page 24, line 47 skipping to change at page 25, line 4
description "queue"; description "queue";
leaf num { leaf num {
type uint8 { type uint8 {
range "0..7"; range "0..7";
} }
description "priority"; description "priority";
} }
uses pwfq-queue-choice-priority-or-rate-grp; uses pwfq-queue-choice-priority-or-rate-grp;
} }
} }
grouping pwfq-rate-card-family-1-grp { grouping pwfq-rate-card-family-1-grp {
description "pwfq-rate-card-family-1-grp"; description "pwfq-rate-card-family-1-grp";
choice rate-or-weight { choice rate-or-weight {
description "rate-or-weight"; description "rate-or-weight";
case rate-minimum { case rate-minimum {
container rate-minimum { container rate-minimum {
presence "Configure minimum rate"; presence "Configure minimum rate";
description "rate-minimum"; description "rate-minimum";
leaf rate-minimum { leaf rate {
type uint32 { type uint32 {
range "8..1000000"; range "8..1000000";
} }
units "kbps"; units "kbps";
mandatory true; mandatory true;
description "rate-minimum"; description "rate-minimum";
} }
leaf burst { leaf burst {
type uint32 { type uint32 {
range "64..1875000000"; range "64..1875000000";
skipping to change at page 25, line 36 skipping to change at page 25, line 41
type uint16 { type uint16 {
range "1..1023"; range "1..1023";
} }
description "weight"; description "weight";
} }
} }
} }
container rate-maximum { container rate-maximum {
presence "Configure maximum rate"; presence "Configure maximum rate";
description "rate-maximum"; description "rate-maximum";
leaf rate-maximum { leaf rate {
type uint32 { type uint32 {
range "8..10000000"; range "8..10000000";
} }
units "kbps"; units "kbps";
mandatory true; mandatory true;
description "rate-maximum"; description "rate-maximum";
} }
leaf burst { leaf burst {
type uint32 { type uint32 {
range "64..1875000000"; range "64..1875000000";
skipping to change at page 25, line 47 skipping to change at page 26, line 4
type uint32 { type uint32 {
range "8..10000000"; range "8..10000000";
} }
units "kbps"; units "kbps";
mandatory true; mandatory true;
description "rate-maximum"; description "rate-maximum";
} }
leaf burst { leaf burst {
type uint32 { type uint32 {
range "64..1875000000"; range "64..1875000000";
} }
units "byte"; units "byte";
description "burst"; description "burst";
} }
} }
} }
grouping pwfq-rate-card-family-2-grp { grouping pwfq-rate-card-family-2-grp {
description "pwfq-rate-card-family-2-grp"; description "pwfq-rate-card-family-2-grp";
choice rate-or-weight { choice rate-or-weight {
description "rate-or-weight"; description "rate-or-weight";
case rate-minimum { case rate-minimum {
container rate-minimum { container rate-minimum {
presence "Configure minimum rate"; presence "Configure minimum rate";
description "rate-minimum"; description "rate-minimum";
leaf rate-minimum { leaf rate {
type uint32 { type uint32 {
range "8..1000000"; range "8..1000000";
} }
units "kbps"; units "kbps";
mandatory true; mandatory true;
description "rate-minimum"; description "rate-minimum";
} }
} }
} }
case weight { case weight {
skipping to change at page 26, line 37 skipping to change at page 26, line 42
type uint16 { type uint16 {
range "1..4096"; range "1..4096";
} }
description "weight"; description "weight";
} }
} }
} }
container rate-maximum { container rate-maximum {
presence "Configure maximum rate"; presence "Configure maximum rate";
description "rate-maximum"; description "rate-maximum";
leaf rate-maximum { leaf rate {
type uint32 { type uint32 {
range "64..1000000"; range "64..1000000";
} }
units "kbps"; units "kbps";
mandatory true; mandatory true;
description "rate-maximum"; description "rate-maximum";
} }
} }
} }
grouping pwfq-rate-card-family-3-grp { grouping pwfq-rate-card-family-3-grp {
description "pwfq-rate-card-family-3-grp"; description "pwfq-rate-card-family-3-grp";
container rate-minimum { container rate-minimum {
presence "Configure minimum rate"; presence "Configure minimum rate";
description "rate-minimum"; description "rate-minimum";
leaf rate-minimum { leaf rate {
type uint32 { type uint32 {
range "8..1000000"; range "8..1000000";
} }
units "kbps"; units "kbps";
mandatory true; mandatory true;
description "rate-minimum"; description "rate-minimum";
} }
leaf burst { leaf burst {
type uint32 { type uint32 {
range "64..1875000000"; range "64..1875000000";
} }
units "byte"; units "byte";
description "burst"; description "burst";
} }
} }
container rate-maximum { container rate-maximum {
presence "Configure maximum rate"; presence "Configure maximum rate";
description "rate-maximum"; description "rate-maximum";
leaf rate-maximum { leaf rate {
type uint32 { type uint32 {
range "8..10000000"; range "8..10000000";
} }
units "kbps"; units "kbps";
mandatory true; mandatory true;
description "rate-maximum"; description "rate-maximum";
} }
container counters { container counters {
presence "Enable counting"; presence "Enable counting";
description "counters"; description "counters";
skipping to change at page 39, line 26 skipping to change at page 39, line 30
} }
description "ip list"; description "ip list";
} }
} }
} }
case out { case out {
container out { container out {
presence "ip-class-map-out"; presence "ip-class-map-out";
description "out direction"; description "out direction";
list qos { list qos {
must "dscp-code != to-qos" { must "dscp-code != to-ip" {
description description
"dscp-code must be different from to-qos"; "dscp-code must be different from to-ip";
} }
key "dscp-code"; key "dscp-code";
leaf dscp-code { leaf dscp-code {
type uint8 { type uint8 {
range "0..63"; range "0..63";
} }
description "dscp-code"; description "dscp-code";
} }
leaf to-ip { leaf to-ip {
type uint8 { type uint8 {
skipping to change at page 52, line 31 skipping to change at page 52, line 35
key "num"; key "num";
description "num-queues"; description "num-queues";
leaf num { leaf num {
type uint8 { type uint8 {
range "2 | 4 | 8"; range "2 | 4 | 8";
} }
description "num-queues"; description "num-queues";
} }
uses num-queues-grp { uses num-queues-grp {
refine "queue" { refine "queue" {
must "id < num" { must "id < ../num" {
description description
"A queue's id must be less than number of queues"; "A queue's id must be less than number of queues";
} }
} }
} }
} }
} }
grouping num-queues-grp { grouping num-queues-grp {
description "num-queues"; description "num-queues";
 End of changes. 29 change blocks. 
46 lines changed or deleted 51 lines changed or added

This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/