module ietf-diffserv {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-diffserv";
prefix diffserv;
import ietf-qos-classifier {
prefix classifier;
}
import ietf-qos-policy {
prefix policy;
}
import ietf-qos-action {
prefix action;
}
import ietf-inet-types {
prefix inet;
}
organization "IETF RTG (Routing Area) Working Group";
contact
"WG Web:
WG List:
WG Chair: Jurgen Schonwalder
WG Chair: Lou Berger
WG Chair: Kent Watsen
Editor: Aseem Choudhary
Editor: Mahesh Jethanandani
= ../dscp-min" {
error-message
"The dscp-max must be greater than or equal to dscp-min";
}
description
"maximum value of dscp min-max range";
}
}
description
"Filter grouping containing list of dscp ranges";
}
grouping source-ipv4-prefix {
list source-ipv4-prefix {
key "source-ipv4-prefix";
description
"list of source ipv4 prefix";
leaf source-ipv4-prefix {
type inet:ipv4-prefix;
description
"source ipv4 prefix";
}
}
description
"Filter grouping containing list of source ipv4 prefixes";
}
grouping destination-ipv4-prefix {
list destination-ipv4-prefix {
key "destination-ipv4-prefix";
description
"list of destination ipv4 prefix";
leaf destination-ipv4-prefix {
type inet:ipv4-prefix;
description
"destination ipv4 prefix";
}
}
description
"Filter grouping containing list of destination ipv4 prefix";
}
grouping source-ipv6-prefix {
list source-ipv6-prefix {
key "source-ipv6-prefix";
description
"list of source ipv6 prefix";
leaf source-ipv6-prefix {
type inet:ipv6-prefix;
description
"source ipv6 prefix";
}
}
description
"Filter grouping containing list of source ipv6 prefixes";
}
grouping destination-ipv6-prefix {
list destination-ipv6-prefix {
key "destination-ipv6-prefix";
description
"list of destination ipv4 or ipv6 prefix";
leaf destination-ipv6-prefix {
type inet:ipv6-prefix;
description
"destination ipv6 prefix";
}
}
description
"Filter grouping containing list of destination ipv6 prefix";
}
grouping source-port {
list source-port {
key "source-port-min source-port-max";
description
"list of ranges of source port";
leaf source-port-min {
type inet:port-number;
description
"minimum value of source port range";
}
leaf source-port-max {
type inet:port-number;
must ". >= ../source-port-min" {
error-message
"The source-port-max must be greater than or equal to
source-port-min";
}
description
"maximum value of source port range";
}
}
description
"Filter grouping containing list of source port ranges";
}
grouping destination-port {
list destination-port {
key "destination-port-min destination-port-max";
description
"list of ranges of destination port";
leaf destination-port-min {
type inet:port-number;
description
"minimum value of destination port range";
}
leaf destination-port-max {
type inet:port-number;
must ". >= ../destination-port-min" {
error-message
"The destination-port-max must be greater than or equal to
destination-port-min";
}
description
"maximum value of destination port range";
}
}
description
"Filter grouping containing list of destination port ranges";
}
grouping protocol {
list protocol {
key "protocol-min protocol-max";
description
"list of ranges of protocol values. Protocol refers to the
value in the protocol field of the ipv4 header and value
in the 'next-header' field of ipv6 header. In ipv6 header,
'next-header' field indicates first extension header or the
protocol in the 'upper-layer' header.";
reference
"RFC 791: Internet Protocol
RFC 8200: Internet Protocol, Version 6 (IPv6)
Specification";
leaf protocol-min {
type uint8 {
range "0..255";
}
description
"minimum value of protocol range";
}
leaf protocol-max {
type uint8 {
range "0..255";
}
must ". >= ../protocol-min" {
error-message
"The protocol-max must be greater than or equal to
protocol-min";
}
description
"maximum value of protocol range";
}
}
description
"Filter grouping containing list of Protocol ranges";
}
grouping traffic-group {
container traffic-group {
leaf traffic-group-name {
type string ;
description
"This leaf defines name of the traffic group referenced";
}
description
"traffic group container";
}
description
"traffic group grouping";
}
augment "/classifier:classifiers/classifier:classifier" +
"/classifier:filter" {
choice filter-param {
description
"Choice of filter types";
case dscp {
uses dscp;
description
"Filter containing list of dscp ranges";
}
case source-ipv4-prefix {
uses source-ipv4-prefix;
description
"Filter containing list of source ipv4 prefixes";
}
case destination-ipv4-prefix {
uses destination-ipv4-prefix;
description
"Filter containing list of destination ipv4 prefix";
}
case source-ipv6-prefix { uses source-ipv6-prefix;
description
"Filter containing list of source ipv6 prefixes";
}
case destination-ipv6-prefix {
uses destination-ipv6-prefix;
description
"Filter containing list of destination ipv6 prefix";
}
case source-port {
uses source-port;
description
"Filter containing list of source-port ranges";
}
case destination-port {
uses destination-port;
description
"Filter containing list of destination-port ranges";
}
case protocol {
uses protocol;
description
"Filter Type Protocol";
}
case traffic-group {
uses traffic-group;
description
"Filter Type traffic-group";
}
}
description
"augments diffserv filters to qos classifier";
}
augment "/policy:policies/policy:policy/policy:classifier" +
"/policy:filter" {
when "../../policy:type = 'diffserv:ipv4-diffserv-policy-type' or
../../policy:type = 'diffserv:ipv6-diffserv-policy-type' or
../../policy:type = 'diffserv:diffserv-policy-type'" {
description
"If policy type is v4, v6 or default diffserv,
below filters can be used.";
}
choice filter-params {
description
"Choice of action types";
case dscp {
uses dscp;
description
"Filter containing list of dscp ranges";
}
case source-ipv4-prefix {
when "../../policy:type !=" +
"'diffserv:ipv6-diffserv-policy-type'" {
description
"If policy type is v6, this filter cannot be used.";
}
uses source-ipv4-prefix;
description
"Filter containing list of source ipv4 prefixes";
}
case destination-ipv4-prefix {
when "../../policy:type !=" +
"'diffserv:ipv6-diffserv-policy-type'" {
description
"If policy type is v6, this filter cannot be used.";
}
uses destination-ipv4-prefix;
description
"Filter containing list of destination ipv4 prefix";
}
case source-ipv6-prefix {
when "../../policy:type !=" +
"'diffserv:ipv4-diffserv-policy-type'" {
description
"If policy type is v4, this filter cannot be used.";
}
uses source-ipv6-prefix;
description
"Filter containing list of source ipv6 prefixes";
}
case destination-ipv6-prefix {
when "../../policy:type !=" +
"'diffserv:ipv4-diffserv-policy-type'" {
description
"If policy type is v4, this filter cannot be used.";
}
uses destination-ipv6-prefix;
description
"Filter containing list of destination ipv6 prefix";
}
case source-port {
uses source-port;
description
"Filter containing list of source-port ranges";
}
case destination-port {
uses destination-port;
description
"Filter containing list of destination-port ranges";
}
case protocol {
uses protocol;
description
"Filter Type Protocol";
}
case traffic-group {
uses traffic-group;
description
"Filter Type traffic-group";
}
}
description
"Augments Diffserv Classifier with common filter types";
}
augment "/policy:policies/policy:policy/policy:classifier" +
"/policy:action/policy:action-params" {
when "../../policy:type = 'diffserv:ipv4-diffserv-policy-type' or
../../policy:type = 'diffserv:ipv6-diffserv-policy-type' or
../../policy:type = 'diffserv:diffserv-policy-type' " {
description
"If policy type is v4, v6 or default diffserv,
the below actions can be used.";
}
description
"Augments Diffserv Policy with action configuration";
case dscp-marking {
uses action:dscp-marking;
}
case meter-inline {
if-feature action:meter-inline-feature;
uses action:meter;
}
case meter-reference {
if-feature action:meter-reference-feature;
uses action:meter-reference;
}
case traffic-group-marking {
if-feature action:traffic-group-feature;
uses action:traffic-group-marking;
}
case child-policy {
if-feature action:child-policy-feature;
uses action:child-policy;
}
case count {
if-feature action:count-feature;
uses action:count;
}
case named-count {
if-feature action:named-counter-feature;
uses action:named-counter;
}
case queue-inline {
if-feature diffserv-queue-inline-support;
uses action:queue;
}
case scheduler-inline {
if-feature diffserv-scheduler-inline-support;
uses action:scheduler;
}
}
}