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: Chris Bowers
WG Chair: Jeff Tantsura
Editor: Aseem Choudhary
Editor: Mahesh Jethanandani
Editor: Norm Strahle
";
description
"This module contains a collection of YANG definitions for
configuring diffserv specification implementations.
Copyright (c) 2019 IETF Trust and the persons identified as
the document authors. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents
(http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices.";
revision 2019-01-13 {
description
"Latest revision of diffserv based classifier";
reference "RFC XXXX";
}
feature diffserv-queue-inline-support {
description
"Queue inline support in diffserv policy";
}
feature diffserv-scheduler-inline-support {
description
"scheduler inline support in diffserv policy";
}
identity diffserv-policy-type {
base policy:policy-type;
description
"This defines ip policy-type";
}
identity ipv4-diffserv-policy-type {
base policy:policy-type;
description
"This defines ipv4 policy-type";
}
identity ipv6-diffserv-policy-type {
base policy:policy-type;
description
"This defines ipv6 policy-type";
}
identity dscp {
base classifier:filter-type;
description
"Differentiated services code point filter-type";
}
identity source-ipv4-address {
base classifier:filter-type;
description
"source ipv4 address filter-type";
}
identity destination-ipv4-address {
base classifier:filter-type;
description
"destination ipv4 address filter-type";
}
identity source-ipv6-address {
base classifier:filter-type;
description
"source ipv6 address filter-type";
}
identity destination-ipv6-address {
base classifier:filter-type;
description
"destination ipv6 address filter-type";
}
identity source-port {
base classifier:filter-type;
description
"source port filter-type";
}
identity destination-port {
base classifier:filter-type;
description
"destination port filter-type";
}
identity protocol {
base classifier:filter-type;
description
"protocol type filter-type";
}
identity traffic-group-name {
base classifier:filter-type;
description
"traffic-group filter type";
}
identity meter-type {
description
"This base identity type defines meter types";
}
identity one-rate-two-color-meter-type {
base meter-type;
description
"one rate two color meter type";
}
identity one-rate-tri-color-meter-type {
base meter-type;
description
"one rate three color meter type";
}
identity two-rate-tri-color-meter-type {
base meter-type;
description
"two rate three color meter action type";
}
grouping dscp-cfg {
list dscp-cfg {
key "dscp-min dscp-max";
description
"list of dscp ranges";
leaf dscp-min {
type inet:dscp;
description
"Minimum value of dscp min-max range";
}
leaf dscp-max {
type inet:dscp;
description
"maximum value of dscp min-max range";
}
}
description
"Filter grouping containing list of dscp ranges";
}
grouping source-ipv4-address-cfg {
list source-ipv4-address-cfg {
key "source-ipv4-addr";
description
"list of source ipv4 address";
leaf source-ipv4-addr {
type inet:ipv4-prefix;
description
"source ipv4 prefix";
}
}
description
"Filter grouping containing list of source ipv4 addresses";
}
grouping destination-ipv4-address-cfg {
list destination-ipv4-address-cfg {
key "destination-ipv4-addr";
description
"list of destination ipv4 address";
leaf destination-ipv4-addr {
type inet:ipv4-prefix;
description
"destination ipv4 prefix";
}
}
description
"Filter grouping containing list of destination ipv4 address";
}
grouping source-ipv6-address-cfg {
list source-ipv6-address-cfg {
key "source-ipv6-addr";
description
"list of source ipv6 address";
leaf source-ipv6-addr {
type inet:ipv6-prefix;
description
"source ipv6 prefix";
}
}
description
"Filter grouping containing list of source ipv6 addresses";
}
grouping destination-ipv6-address-cfg {
list destination-ipv6-address-cfg {
key "destination-ipv6-addr";
description
"list of destination ipv4 or ipv6 address";
leaf destination-ipv6-addr {
type inet:ipv6-prefix;
description
"destination ipv6 prefix";
}
}
description
"Filter grouping containing list of destination ipv6 address";
}
grouping source-port-cfg {
list source-port-cfg {
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;
description
"maximum value of source port range";
}
}
description
"Filter grouping containing list of source port ranges";
}
grouping destination-port-cfg {
list destination-port-cfg {
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;
description
"maximum value of destination port range";
}
}
description
"Filter grouping containing list of destination port ranges";
}
grouping protocol-cfg {
list protocol-cfg {
key "protocol-min protocol-max";
description
"list of ranges of protocol values";
leaf protocol-min {
type uint8 {
range "0..255";
}
description
"minimum value of protocol range";
}
leaf protocol-max {
type uint8 {
range "0..255";
}
description
"maximum value of protocol range";
}
}
description
"Filter grouping containing list of Protocol ranges";
}
grouping traffic-group-cfg {
container traffic-group-cfg {
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-entry" +
"/classifier:filter-entry" {
choice filter-param {
description
"Choice of filter types";
case dscp {
uses dscp-cfg;
description
"Filter containing list of dscp ranges";
}
case source-ipv4-address {
uses source-ipv4-address-cfg;
description
"Filter containing list of source ipv4 addresses";
}
case destination-ipv4-address {
uses destination-ipv4-address-cfg;
description
"Filter containing list of destination ipv4 address";
}
case source-ipv6-address {
uses source-ipv6-address-cfg;
description
"Filter containing list of source ipv6 addresses";
}
case destination-ipv6-address {
uses destination-ipv6-address-cfg;
description
"Filter containing list of destination ipv6 address";
}
case source-port {
uses source-port-cfg;
description
"Filter containing list of source-port ranges";
}
case destination-port {
uses destination-port-cfg;
description
"Filter containing list of destination-port ranges";
}
case protocol {
uses protocol-cfg;
description
"Filter Type Protocol";
}
case traffic-group {
uses traffic-group-cfg;
description
"Filter Type traffic-group";
}
}
description
"augments diffserv filters to qos classifier";
}
augment "/policy:policies/policy:policy-entry" +
"/policy:classifier-entry/policy:filter-entry" {
choice filter-params {
description
"Choice of action types";
case dscp {
uses dscp-cfg;
description
"Filter containing list of dscp ranges";
}
case source-ipv4-address {
when "../../policy:policy-type !=
'diffserv:ipv6-diffserv-policy-type'" {
description
"If policy type is v6, this filter cannot be used.";
}
uses source-ipv4-address-cfg;
description
"Filter containing list of source ipv4 addresses";
}
case destination-ipv4-address {
when "../../policy:policy-type !=
'diffserv:ipv6-diffserv-policy-type'" {
description
"If policy type is v6, this filter cannot be used.";
}
uses destination-ipv4-address-cfg;
description
"Filter containing list of destination ipv4 address";
}
case source-ipv6-address {
when "../../policy:policy-type !=
'diffserv:ipv4-diffserv-policy-type'" {
description
"If policy type is v4, this filter cannot be used.";
}
uses source-ipv6-address-cfg;
description
"Filter containing list of source ipv6 addresses";
}
case destination-ipv6-address {
when "../../policy:policy-type !=
'diffserv:ipv4-diffserv-policy-type'" {
description
"If policy type is v4, this filter cannot be used.";
}
uses destination-ipv6-address-cfg;
description
"Filter containing list of destination ipv6 address";
}
case source-port {
uses source-port-cfg;
description
"Filter containing list of source-port ranges";
}
case destination-port {
uses destination-port-cfg;
description
"Filter containing list of destination-port ranges";
}
case protocol {
uses protocol-cfg;
description
"Filter Type Protocol";
}
case traffic-group {
uses traffic-group-cfg;
description
"Filter Type traffic-group";
}
}
description
"Augments Diffserv Classifier with common filter types";
}
augment "/policy:policies/policy:policy-entry" +
"/policy:classifier-entry" +
"/policy:classifier-action-entry-cfg" +
"/policy:action-cfg-params" {
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 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;
}
description
"Augments Diffserv Policy with action configuration";
}
}