bbf-qos-classifiers

This module contains a collection of YANG definitions for supporting the Broadband Forum requirements on the management of Quali...

  • Version: 2021-06-02

    bbf-qos-classifiers@2021-06-02


    
      module bbf-qos-classifiers {
    
        yang-version 1.1;
    
        namespace
          "urn:bbf:yang:bbf-qos-classifiers";
    
        prefix bbf-qos-cls;
    
        import ietf-inet-types {
          prefix inet;
        }
        import bbf-yang-types {
          prefix bbf-yang;
        }
        import bbf-dot1q-types {
          prefix bbf-dot1qt;
        }
        import bbf-frame-classification {
          prefix bbf-classif;
        }
        import bbf-qos-types {
          prefix bbf-qos-t;
        }
    
        organization
          "Broadband Forum <https://www.broadband-forum.org>
    Common YANG Work Area";
    
        contact
          "Comments or questions about this Broadband Forum YANG module
    should be directed to <mailto:help@broadband-forum.org>.
    
    Editor:      Nick Hancock, ADTRAN
    
    Editor:      Ludwig Pauwels, Nokia
    
    PS Leader:   Joey Boyd, ADTRAN
    
    PS Leader:   Sowrirajan Padmanabhan, Nokia
    
    WA Director: Joey Boyd, ADTRAN
    
    WA Director: Sven Ooghe, Nokia";
    
        description
          "This module contains a collection of YANG definitions for
    supporting the Broadband Forum requirements on the management of
    Quality of Service (QoS) as applicable to access network
    equipment. As such, this module is specific to access network
    equipment (e.g., BBF-specified Access Nodes and FTTdp DPUs).
    
    Specifically, this module contains a collection of classifiers
    that can be used to classify frames and assign actions to be
    applied to those frames.
    
    Copyright (c) 2017-2021, Broadband Forum
    
    Redistribution and use in source and binary forms, with or
    without modification, are permitted provided that the following
    conditions are met:
    
    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
    
    2. Redistributions in binary form must reproduce the above
       copyright notice, this list of conditions and the following
       disclaimer in the documentation and/or other materials
       provided with the distribution.
    
    3. Neither the name of the copyright holder nor the names of its
       contributors may be used to endorse or promote products
       derived from this software without specific prior written
       permission.
    
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
    CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
    ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    
    The above license is used as a license under copyright only.
    Please reference the Forum IPR Policy for patent licensing terms
    <https://www.broadband-forum.org/ipr-policy>.
    
    Any moral rights which are necessary to exercise under the above
    license grant are also deemed granted under this license.
    
    This version of this YANG module is part of TR-383a4; see
    the TR itself for full legal notices.";
    
        revision "2021-06-02" {
          description
            "Amendment 4.
    * Approval Date:    2021-06-02.
    * Publication Date: 2021-06-02.";
          reference
            "TR-383a4: Common YANG Modules
            	  <https://www.broadband-forum.org/technical/download/
            		   TR-383_Amendment-4.pdf>";
    
        }
    
        revision "2020-10-13" {
          description
            "Amendment 3.
    * Approval Date:    2020-10-13.
    * Publication Date: 2020-10-13.";
          reference
            "TR-383a3: Common YANG Modules
            	  <https://www.broadband-forum.org/technical/download/
            		   TR-383_Amendment-3.pdf>";
    
        }
    
        revision "2018-07-13" {
          description
            "Amendment 1.
    * Approval Date:    2018-06-04.
    * Publication Date: see revision date above.";
          reference
            "TR-383: Common YANG Modules
            	<https://www.broadband-forum.org/technical/download/
            		 TR-383_Amendment-1.pdf>";
    
        }
    
        revision "2017-05-08" {
          description
            "Initial revision.
    * Approval Date:    see revision date above.
    * Publication Date: 2017-06-02.";
          reference
            "TR-383: Common YANG Modules
            	<https://www.broadband-forum.org/technical/download/
            		 TR-383.pdf>";
    
        }
    
    
        feature qos-action-permit {
          description
            "This feature indicates whether the system supports the action
    'permit' for frames that are classified using a QoS
    classification mechanism.";
        }
    
        feature qos-configurable-defaults {
          description
            "This feature indicates whether the configuration of QoS default
    behaviors is supported.";
        }
    
        typedef qos-pbit-marking-index {
          type uint8;
          description
            "An index to a Priority Code Point bits (p-bits) marking list.
    
    The marking list is a piece of metadata, i.e. it is data that
    belongs to the frame but is not a field of the frame itself.
    Once assigned to the frame it travels with the frame until the
    frame is transmitted or discarded, this independent of all
    frame manipulations that take place. The content of this
    marking list is generated via a QoS profile or via a copy from
    the frame's pbit in a VLAN sub-interface ingress rewrite. Note
    that a frame has just one p-bits marking list, i.e. if multiple
    actions write to the same position in the list, then the last
    write overwrites the previous.
    
    As an example, it is possible to provide a metadata pbit to a
    frame at the ingress side, this data travels with the frame
    through the switch, and the metadata is used at the egress side
    when a VLAN tag is pushed into the frame.";
        }
    
        typedef qos-dei-marking-index {
          type uint8;
          description
            "An index to a Drop Eligibility Indicator (DEI) marking list.
    
    The marking list is a piece of metadata, i.e. it is data that
    belongs to the frame but is not a field of the frame itself.
    Once assigned to the frame it travels with the frame until the
    frame is transmitted or discarded, this independent of all
    frame manipulations that take place. The content of this
    marking list is generated via a QoS profile or via a copy from
    the frame's DEI in a VLAN sub-interface ingress rewrite. Note
    that a frame has just one DEI marking list, i.e. if multiple
    actions write to the same position in the list, then the last
    write overwrites the previous.
    
    As an example, it is possible to provide a metadata DEI to a
    frame at the ingress side, this data travels with the frame
    through the switch, and the metadata is used at the egress side
    when a VLAN tag is pushed into the frame.";
        }
    
        identity classifier-entry-filter-operation-type {
          description
            "Classifier entry filter logical operation.";
        }
    
        identity match-any-filter {
          base classifier-entry-filter-operation-type;
          description
            "Classifier entry filter logical OR operation.";
        }
    
        identity match-all-filter {
          base classifier-entry-filter-operation-type;
          description
            "Classifier entry filter logical AND operation.";
        }
    
        identity action-type {
          description
            "This base identity type defines action-types.";
        }
    
        identity pbit-marking {
          base action-type;
          description
            "The action-type identity indicating the system shall generate
    one or more values for the priority bits (p-bits).";
        }
    
        identity dei-marking {
          base action-type;
          description
            "The action-type identity indicating the system shall generate
    one or more values for the Drop Eligibility Inidicator (DEI)
    bit.";
        }
    
        identity scheduling-traffic-class {
          base action-type;
          description
            "The action-type identity indicating a scheduling traffic
    class.";
        }
    
        identity dscp-marking {
          base action-type;
          description
            "The action-type identity indicating the system shall generate
    a value for the Differentiated Services Code Point (DSCP)
    bits.";
        }
    
        identity permit {
          base action-type;
          description
            "The action-type identity indicating the permit action. I.e.
    frames to which this action is assigned are permitted and will
    be subject to the next step of frame processing where further
    actions can be assigned.";
        }
    
        identity action-scope {
          description
            "This base identity type defines action scopes.";
        }
    
        identity vlan-sub-interface {
          base action-scope;
          description
            "The scope of the action is the VLAN sub-interface.";
        }
    
        identity ethernet-interface {
          base action-scope;
          description
            "The scope of the action is the Ethernet like interface. This
    encompasses all VLAN sub-interfaces within the Ethernet like
    interface in scope.";
        }
    
        typedef action-scope {
          type identityref {
            base action-scope;
          }
          description "The scope of the action.";
        }
    
        typedef qos-color {
          type enumeration {
            enum "green" {
              value 0;
              description
                "Identifies the green color frame.";
            }
            enum "yellow" {
              value 1;
              description
                "Identifies the yellow color frame.";
            }
            enum "red" {
              value 2;
              description
                "Identifies the red color frame.";
            }
          }
          description
            "Defines the frame color that match.";
        }
    
        container classifiers {
          description
            "Provides data nodes that allow to manage methods to classify
    frames and assign actions in the context of QoS.";
          container system-default-actions {
            config false;
            description
              "Reports the set of system defaults that apply when the
    application of QoS policies does not generate such data, but
    the processing of a frame requires this data.
    
    When a frame is received or to be transmitted on an
    interface, then it can be subject to QoS policies that are
    configured for this interface. The definition of QoS policies
    includes the assignment of metadata to frames which can then
    be used during the further processing of the frame.
    
    An example is the assignment of a traffic class. This traffic
    class is used, after the forwarding decision has been made
    and all QOS polices are applied, to identify the queue on the
    outgoing interface. If a traffic class is not explictly
    configured, a default must be used for each matched ingress
    frame. This value is reported in 'scheduling-traffic-class'.
    
    And similar for the other data nodes.";
            leaf scheduling-traffic-class {
              type union {
                type bbf-qos-t:traffic-class-id;
                type enumeration {
                  enum "discard" {
                    value 0;
                    description
                      "The traffic class 'discard' means that frames will
    not get a traffic class by default. When the
    processing of the frame comes to a moment that a
    traffic class is needed, and none is assigned through
    having applied the QoS profiles, then the system
    shall discard the frame.";
                  }
                }
              }
              description
                "Defines the traffic class assigned by default to frames.";
            }
    
            leaf flow-color {
              type union {
                type qos-color;
                type enumeration {
                  enum "discard" {
                    value 0;
                    description
                      "The flow color 'discard' means that frames will not
    get a flow color by default. When the processing of
    the frame comes to a moment that a flow color is
    needed, and none is assigned through having applied
    the QoS profiles, then the system shall discard the
    frame.";
                  }
                }
              }
              description
                "Defines the frame's flow color for when color-aware
    classification and/or actions are needed in the processing
    of a frame.";
            }
    
            leaf bac-color {
              type union {
                type qos-color;
                type enumeration {
                  enum "discard" {
                    value 0;
                    description
                      "The BAC color 'discard' means that frames will not
    get a BAC color by default. When the processing of
    the frame comes to a moment that a BAC color is
    needed, and none is assigned through having applied
    the QoS profiles, then the system shall discard the
    frame.";
                  }
                }
              }
              description
                "Defines the frame's BAC color for when color-aware
    classification and/or actions are needed in the processing
    of a frame. More specific, when the frame is to be queued
    using a color aware BAC method.";
            }
          }  // container system-default-actions
    
          container configurable-default-actions {
            if-feature qos-configurable-defaults;
            description
              "Defines data nodes that allow to configure the default
    behavior for when the processing of a frame requires data,
    and the former applying of QoS policies did not generate such
    data. The configured defaults overrule the system defaults
    provide in the container 'system-default-actions'.
    
    More in detail, when a frame is received or to be
    transmitted on an interface, then it can be subject to QoS
    policies that are configured for this interface. The
    definition of QoS policies includes the assignment of
    metadata to frames which can then be used during the
    further processing of the frame.
    
    An example is the assignment of a traffic class. This traffic
    class is used, after the forwarding decision has been made
    and all QOS polices are applied, to identify the queue on the
    outgoing interface. If a traffic class is not explictly
    configured, a default must be used for each matched ingress
    frame. This value is configured in
    'scheduling-traffic-class'.
    
    And similar for the other data nodes.";
            leaf scheduling-traffic-class {
              type union {
                type bbf-qos-t:traffic-class-id;
                type enumeration {
                  enum "discard" {
                    value 0;
                    description
                      "The traffic class 'discard' means that frames will
    not get a traffic class by default. When the
    processing of the frame comes to a moment that a
    traffic class is needed, and none is assigned through
    having applied the QoS profiles, then the system
    shall discard the frame.";
                  }
                }
              }
              description
                "Defines the traffic class assigned by default to frames.";
            }
    
            leaf flow-color {
              type union {
                type qos-color;
                type enumeration {
                  enum "discard" {
                    value 0;
                    description
                      "The flow color 'discard' means that frames will not
    get a flow color by default. When the processing of
    the frame comes to a moment that a flow color is
    needed, and none is assigned through having applied
    the QoS profiles, then the system shall discard the
    frame.";
                  }
                }
              }
              description
                "Defines the frame's flow color for when color-aware
    classification and/or actions are needed in the processing
    of a frame.";
            }
    
            leaf bac-color {
              type union {
                type qos-color;
                type enumeration {
                  enum "discard" {
                    value 0;
                    description
                      "The BAC color 'discard' means that frames will not
    get a BAC color by default. When the processing of
    the frame comes to a moment that a BAC color is
    needed, and none is assigned through having applied
    the QoS profiles, then the system shall discard the
    frame.";
                  }
                }
              }
              description
                "Defines the frame's BAC color for when color-aware
    classification and/or actions are needed in the processing
    of a frame. More specific, when the frame is to be queued
    using a color aware BAC method.";
            }
          }  // container configurable-default-actions
    
          list classifier-entry {
            key "name";
            description
              "Classifier entry template.";
            leaf name {
              type bbf-yang:string-ascii64;
              description "Classifier name.";
            }
    
            leaf description {
              type bbf-yang:string-ascii64-or-empty;
              description
                "Description of the class template.";
            }
    
            leaf filter-operation {
              type identityref {
                base classifier-entry-filter-operation-type;
              }
              default
                "bbf-qos-cls:match-any-filter";
              status deprecated;
              description
                "Filters are applicable as any or all filters.";
            }
    
            choice filter-method {
              description
                "Configuration of filter methods.";
              case inline {
                description
                  "The classifier criteria are directly configured here.";
                container match-criteria {
                  status deprecated;
                  description
                    "Filter operations are performed on all match criteria with
    each having a default configuration.
    
    The 'match-all-filter' operation will logically AND each of
    the criteria. For example, configuring 'match-all' and
    dscp-range to 'any' will match on tagged and untagged frames
    that contain a DSCP field and contain any protocol as the
    default configuration for the protocol is 'any-protocol'.
    
    The 'match-any-filter' operation will logically OR each of
    the configured criteria. For example, configuring 'untagged'
    and dscp-range to '10-20' will match on all untagged frames
    as well as any IP packet containing a DSCP value of 10 to 20
    as well as frames containing any protocol as the default
    configuration for the protocol is 'any-protocol'.";
                  choice vlan-tag-match-type {
                    status deprecated;
                    description
                      "Provides a choice of how the frames may be matched.
    
    If no case is configured, then it has the same meaning as
    if case 'match-all' has been configured.";
                    case match-all {
                      status deprecated;
                      leaf match-all {
                        type empty;
                        status deprecated;
                        description
                          "Matches all traffic, i.e; irrespective of the frame
    being tagged or untagged.";
                      }
                    }  // case match-all
    
                    case untagged {
                      status deprecated;
                      leaf untagged {
                        type empty;
                        status deprecated;
                        description
                          "Untagged match. Matches all untagged traffic.";
                      }
                    }  // case untagged
    
                    case vlan-tagged {
                      status deprecated;
                      list tag {
                        key "index";
                        min-elements 1;
                        max-elements 2;
                        status deprecated;
                        description
                          "The tags to match, with the outermost tag to match
    assigned index 0.";
                        leaf index {
                          type bbf-classif:tag-index;
                          must
                            "count(../../tag[index = 0]) > 0" {
                            error-message
                              "An inner tag can only be matched on when also matching on an outer tag.";
                            description
                              "Only allow matching on an inner tag, if also
    matching on the outer tags at the same time.";
                          }
                          status deprecated;
                          description
                            "The index into the tag stack, outermost tag first.";
                        }
    
                        leaf in-pbit-list {
                          type bbf-dot1qt:pbit-list;
                          status deprecated;
                          description
                            "Filter containing p-bits value(s) to be matched with
    the value of the corresponding frame field. The list
    of values form an OR condition: in case the value of
    the frame field matches with one of the values of the
    leaf then there is a match. In case the leaf
    specifies a set of values and none of them appear in
    the frame, then there is no match. In case the leaf
    specifies a value for a frame field that is not
    present, then no frames match the filter. For
    example, an untagged frame does not contain p-bits,
    hence this frame will not match a specified p-bits
    value. In case the leaf is an empty list, or unknown,
    then no match is required and all frames classify
    the filter, including untagged frames.
    
    An Ethernet frame can contain multiple VLAN tags or
    no VLAN tag. The vlan-tag-match-type/vlan-tagged/tag
    is a list and the element with index 0 is used to
    match with the p-bits of outermost VLAN tag of the
    frame, the element with index 1 is used to match with
    the p-bits of the second VLAN tag of the frame.";
                        }
    
                        leaf in-dei {
                          type uint8 {
                            range "0..1";
                          }
                          status deprecated;
                          description
                            "Filter containing DEI bit value(s) to be matched with
    the values of the corresponding frame fields. In case
    the leaf specifies a value for a frame field that is
    not present, then no frames match the filter. For
    example, an untagged frame does not contain a DEI
    bit, hence this frame will not match a specified DEI
    bit value. In case the leaf is unknown, no match is
    required and all frames classify the filter,
    including untagged frames.
    
    An Ethernet frame can contain multiple VLAN tags or
    no VLAN tag. The vlan-tag-match-type/vlan-tagged/tag
    is a list and the element with index 0 is used to
    match with the DEI bit of the outermost VLAN tag of
    the frame, the element with index 1 is used to match
    with the DEI bit of the second VLAN tag of the
    frame.";
                        }
                      }  // list tag
                    }  // case vlan-tagged
                  }  // choice vlan-tag-match-type
    
                  leaf dscp-range {
                    type bbf-classif:dscp-range-or-any;
                    default "any";
                    status deprecated;
                    description
                      "String identifying the DSCP values and/or range.";
                  }
    
                  choice protocols {
                    status deprecated;
                    description
                      "The choice allows to specify combintations of frame field
    values that identify a particular protocol or allows to
    indicate any protocol.
    
    If no case is configured, then it has the same meaning as
    if case 'any-protocol' has been configured.";
                    case any-protocol {
                      status deprecated;
                      leaf any-protocol {
                        type empty;
                        status deprecated;
                        description
                          "Identifies any protocol, i.e. not match is specified
    for any protocol.";
                      }
                    }  // case any-protocol
    
                    case protocol {
                      status deprecated;
                      leaf-list protocol {
                        type bbf-classif:protocols;
                        status deprecated;
                        description
                          "Defines the protocols which will be matched.";
                      }
                    }  // case protocol
                  }  // choice protocols
    
                  list pbit-marking-list {
                    key "index";
                    status deprecated;
                    description
                      "Match on metadata created as the output of another
    classifier. This metadata consists of a p-bits value
    associated with a numeric index.";
                    leaf index {
                      type qos-pbit-marking-index;
                      status deprecated;
                      description
                        "The index associated with a p-bits value.";
                    }
    
                    leaf pbit-value {
                      type bbf-dot1qt:pbit;
                      status deprecated;
                      description
                        "A p-bits value to be used as match criteria from the output
    of another classifier associated with the same QoS
    policy.";
                    }
                  }  // list pbit-marking-list
    
                  list dei-marking-list {
                    key "index";
                    status deprecated;
                    description
                      "Match on metadata created as the output of another
    classifier. This metadata consists of a DEI value associated
    with a numeric index.";
                    leaf index {
                      type qos-dei-marking-index;
                      status deprecated;
                      description
                        "The index associated with a DEI value.";
                    }
    
                    leaf dei-value {
                      type bbf-dot1qt:dei;
                      status deprecated;
                      description
                        "A DEI value to be used as match criteria from the output of
    another classifier associated with the same QoS policy.";
                    }
                  }  // list dei-marking-list
    
                  leaf-list flow-color {
                    type qos-color;
                    status deprecated;
                    description
                      "Defines the frame color as a classification criterion for
    assigning frames to a flow.";
                  }
                }  // container match-criteria
              }  // case inline
    
              case all-packets {
                description
                  "The classifier applies to all frames that are in the
    scope of the flow on which the classifier applies.";
                leaf all-packets {
                  type empty;
                  description
                    "Identifies all frames.";
                }
              }  // case all-packets
    
              case by-reference {
                description
                  "The classifier criteria are configured in a separate list.";
                list filter {
                  key "name";
                  description
                    "Filters to be matched.";
                  leaf name {
                    type bbf-yang:string-ascii64;
                    description
                      "Name of the filter.";
                  }
    
                  leaf filter-name {
                    type leafref {
                      path "/bbf-qos-filt:filters/bbf-qos-filt:filter/bbf-qos-filt:name";
                    }
                    description
                      "A reference to a filter.";
                  }
                }  // list filter
              }  // case by-reference
            }  // choice filter-method
    
            list classifier-action-entry-cfg {
              key "action-type";
              ordered-by user;
              description
                "Configuration of classifier associated actions.";
              leaf action-type {
                type identityref {
                  base action-type;
                }
                description
                  "This defines the action type.";
              }
    
              choice action-cfg-params {
                description
                  "Choice of action types.";
                container pbit-marking-cfg {
                  when
                    "../action-type='bbf-qos-cls:pbit-marking'" {
                    description
                      "Only applicable when the action-type is
    'pbit-marking'.";
                  }
                  description
                    "P-bits marking configuration container.";
                  list pbit-marking-list {
                    key "index";
                    description
                      "Creates metadata which can be used to determine p-bits values
    to write to a VLAN tag or as match criteria for another
    classifier associated with another QoS policy with which the
    frame is to be processed. Each entry uses a unique numeric
    index associated with a p-bits value.";
                    leaf index {
                      type qos-pbit-marking-index;
                      description
                        "The index associated with a p-bits value.";
                    }
    
                    leaf pbit-value {
                      type bbf-dot1qt:pbit;
                      description
                        "A p-bits value to be inserted in the p-bits of a frame's
    VLAN tag or as match criteria for another classifier
    associated with another QoS policy with which the frame is
    to be processed.";
                    }
                  }  // list pbit-marking-list
                }  // container pbit-marking-cfg
                container dei-marking-cfg {
                  when
                    "../action-type='bbf-qos-cls:dei-marking'" {
                    description
                      "Only applicable when the action-type is
    dei-marking.";
                  }
                  description
                    "DEI marking configuration container.";
                  list dei-marking-list {
                    key "index";
                    description
                      "Creates metadata which can be used to determine DEI values to
    write to a VLAN tag or as match criteria for another
    classifier associated with another QoS policy with which the
    frame is to be processed. Each entry uses a unique numeric
    index associated with a DEI value.";
                    leaf index {
                      type qos-dei-marking-index;
                      description
                        "The index associated with a DEI value.";
                    }
    
                    leaf dei-value {
                      type bbf-dot1qt:dei;
                      description
                        "A DEI value to be inserted in the DEI bit of a frame's VLAN
    tag or as match criteria for another classifier associated
    with another QoS policy with which the frame is to be
    processed.";
                    }
                  }  // list dei-marking-list
                }  // container dei-marking-cfg
                container dscp-marking-cfg {
                  when
                    "../action-type='bbf-qos-cls:dscp-marking'" {
                    description
                      "Only applicable when the action-type is
    dscp-marking.";
                  }
                  description
                    "DSCP marking configuration container.";
                  leaf dscp {
                    type inet:dscp;
                    description
                      "The value to be inserted in the DSCP field in the header of
    an IP packet.";
                  }
                }  // container dscp-marking-cfg
                leaf scheduling-traffic-class {
                  when
                    "../action-type=
    'bbf-qos-cls:scheduling-traffic-class'" {
                    description
                      "Only applicable when the action-type is
    scheduling-traffic-class.";
                  }
                  type bbf-qos-t:traffic-class-id;
                  description
                    "Define the traffic class for scheduling.";
                }
    
                case permit {
                  if-feature bbf-qos-cls:qos-action-permit;
                  description
                    "The action type for frames matching a classification
    criterium is that they are permitted and will be subject
    to further processing.";
                  leaf permit {
                    when
                      "../bbf-qos-cls:action-type="bbf-qos-cls:permit"" {
                      description
                        "Only applicable when the action-type is 'permit'.";
                    }
                    type empty;
                    description
                      "The action type for frames matching a classification
    criterium is 'permit'.";
                  }
                }  // case permit
                leaf flow-color {
                  when
                    "../bbf-qos-cls:action-type="bbf-qos-plc:flow-color"" {
                    description
                      "Only applicable when the action-type is flow-color.";
                  }
                  type qos-color;
                  description
                    "Defines the frame color for when color-aware
    classification/actions is needed in a proceeding QoS
    policy.";
                }
                leaf bac-color {
                  when
                    "../bbf-qos-cls:action-type="bbf-qos-plc:bac-color"" {
                    description
                      "Only applicable when the action-type is bac-color.";
                  }
                  type qos-color;
                  description
                    "Defines the frame color for color aware BAC queuing.";
                }
                leaf discard {
                  when
                    "../bbf-qos-cls:action-type="bbf-qos-plc:discard"" {
                    description
                      "Only applicable when the action-type is discard.";
                  }
                  type empty;
                  description
                    "Defines the action discard frames for a flow.";
                }
                container policing {
                  when
                    "../bbf-qos-cls:action-type="bbf-qos-plc:policing"" {
                    description
                      "Only applicable when the action-type is policing.";
                  }
                  description
                    "Defines a policing function shall be applied to a flow.";
                  leaf policing-profile {
                    type leafref {
                      path "/bbf-qos-plc:policing-profiles/bbf-qos-plc:policing-profile/bbf-qos-plc:name";
                    }
                    description
                      "The name of the referenced policing-profile.";
                  }
                }  // container policing
    
                case envelope-policing {
                  description
                    "The set of actions is extended with a possibility to
    associate a Policer flow.";
                  container policer-envelope-flow {
                    description
                      "Nodes used to uniquely identify a Policer flow associated
    with an envelope.";
                    leaf envelope {
                      type leafref {
                        path "/bbf-qos-plc-ep:envelope-profiles/bbf-qos-plc-ep:envelope-profile/bbf-qos-plc-ep:name";
                      }
                      description
                        "A reference to a Policer envelope profile.";
                    }
    
                    leaf flow {
                      type leafref {
                        path "/bbf-qos-plc-ep:envelope-profiles/bbf-qos-plc-ep:envelope-profile[bbf-qos-plc-ep:name=current()/../envelope]/bbf-qos-plc-ep:flows/bbf-qos-plc-ep:flow/bbf-qos-plc-ep:rank";
                      }
                      description
                        "A reference to a Policer flow within an envelope.";
                    }
                  }  // container policer-envelope-flow
                }  // case envelope-policing
    
                case rate-limit-frames {
                  description
                    "The set of actions is extended with a possibility to rate
    limit the number of frames that match a classification. The
    rate limit specifies a limit for the number of frames.
    Frames that exceed this limit are discarded.";
                  container rate-limit-frames {
                    when
                      "../bbf-qos-cls:action-type=
    'bbf-qos-rc:rate-limit-frames'" {
                      description
                        "Only applicable when the action-type is
    rate-limit-frames.";
                    }
                    description
                      "The set of leaves that specify the allowed rate.";
                    leaf rate {
                      type uint32;
                      units "frames per second";
                      description
                        "Limits the number of frames per second to this
    number.";
                    }
    
                    leaf burst-size {
                      type uint32;
                      units "frames";
                      description
                        "The burst-size together with the frame-rate define a
    mechanism to control a frame rate.";
                    }
                  }  // container rate-limit-frames
                }  // case rate-limit-frames
              }  // choice action-cfg-params
            }  // list classifier-action-entry-cfg
          }  // list classifier-entry
        }  // container classifiers
      }  // module bbf-qos-classifiers
    

© 2023 YumaWorks, Inc. All rights reserved.