module ietf-diffserv {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-diffserv";
prefix diffserv;
import ietf-qos-classifier {
prefix classifier;
reference "RFC XXXX: YANG Model for QoS";
}
import ietf-qos-policy {
prefix policy;
reference "RFC XXXX: YANG Model for QoS";
}
import ietf-qos-action {
prefix action;
reference "RFC XXXX: YANG Model for QoS";
}
import ietf-inet-types {
prefix inet;
reference "RFC 6991: Common YANG Data Types";
}
organization "IETF RTG (Routing Area) Working Group";
contact
"WG Web:
WG List:
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
authors of the code. 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 2020-03-17 {
description
"Latest revision of diffserv based classifier";
reference "RFC XXXX: YANG Model for QoS";
}
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;
must ". >= ../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";
reference
"RFC 2474: Definition of the Differentiated Services
Field (DS Field) in the IPv4 and IPv6 Headers.";
}
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";
reference
"RFC 791: Internet Protocol.";
}
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";
reference
"RFC 791: Internet Protocol.";
}
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";
reference
"RFC 4291: IP Version 6 Addressing Architecture.";
}
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";
reference
"RFC 4291: IP Version 6 Addressing Architecture.";
}
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;
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";
reference
"RFC 768: User Datagram Protocol
RFC 793: TRANSMISSION CONTROL PROTOCOL";
}
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;
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";
reference
"RFC 768: User Datagram Protocol
RFC 793: TRANSMISSION CONTROL PROTOCOL";
}
grouping protocol-cfg {
list protocol-cfg {
key "protocol-min protocol-max";
description
"list of ranges of protocol values.
Internet Protocol number refers to the protocol of the
payloadi in ipv4 header. In IPv6, this field is known as
'next-header', and if extension headers are present, the
protocol is present in the 'upper-layer' header.";
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";
reference
"RFC 791: Internet Protocol.
RFC 8200: Internet Protocol, Version 6 (IPv6) Specification.";
}
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" {
when "../../policy:policy-type =
'diffserv:ipv4-diffserv-policy-type' or
../../policy:policy-type =
'diffserv:ipv6-diffserv-policy-type' or
../../policy:policy-type =
'diffserv:diffserv-policy-type'" {
description
"Filters can be augmented if policy type is
ipv4, ipv6 or default diffserv policy types ";
}
description
"Augments Diffserv Classifier with common filter types";
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";
}
}
}
augment "/policy:policies/policy:policy-entry" +
"/policy:classifier-entry" +
"/policy:classifier-action-entry-cfg" +
"/policy:action-cfg-params" {
when "../../policy:policy-type =
'diffserv:ipv4-diffserv-policy-type' or
../../policy:policy-type =
'diffserv:ipv6-diffserv-policy-type' or
../../policy:policy-type =
'diffserv:diffserv-policy-type' " {
description
"Actions can be augmented if policy type is ipv4,
ipv6 or default diffserv policy types ";
}
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 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;
}
}
}