Cisco-IOS-XR-um-policymap-classmap-cfg

This module contains a collection of IOS-XR YANG model derived from CLI. Copyright (c) 2013-2021 by Cisco Systems, Inc. All ri...

  • Version: 2021-05-11

    Cisco-IOS-XR-um-policymap-classmap-cfg@2021-05-11


    
      module Cisco-IOS-XR-um-policymap-classmap-cfg {
    
        yang-version 1;
    
        namespace
          "http://cisco.com/ns/yang/Cisco-IOS-XR-um-policymap-classmap-cfg";
    
        prefix um-policymap-classmap-cfg;
    
        import cisco-semver {
          prefix semver;
        }
        import ietf-inet-types {
          prefix inet;
        }
        import ietf-yang-types {
          prefix yang;
        }
        import Cisco-IOS-XR-types {
          prefix xr2;
        }
    
        organization "Cisco Systems, Inc.";
    
        contact
          "
         Cisco Systems, Inc.
         Customer Service
         
         Postal: 170 W Tasman Drive
         San Jose, CA 95134
         
         Tel: +1 1800 553-NETS
         
         E-mail: cs-yang@cisco.com
        ";
    
        description
          "
         This module contains a collection of IOS-XR YANG model derived from CLI.
         
         Copyright (c) 2013-2021 by Cisco Systems, Inc.
         All rights reserved.
        ";
    
        revision "2021-05-11" {
          description
            "Removed MUST check under policy-map/qos/class for
           not(random-detect-default and random-detect)
           2021-05-05
             Added MUST check under policy-map/qos/class for qos-actions elements for not
           accepting empty policy-map
           2020-10-05
             Changed ipv4/ipv6/ethernet-services under access-group to leaf-lists
           2020-08-24
             Removed some nodes which are not supported via YANG";
        }
    
        revision "2020-01-27" {
          description
            "Added discard-class node under queue-limit";
        }
    
        revision "2019-06-10" {
          description
            "Establish semantic version baseline.";
        }
    
        revision "2019-04-01" {
          description "Initial version";
        }
    
        semver:module-version "2.0.0";
        semver:module-version "1.0.0";
        semver:module-version "1.0.0";
    
        feature pmap-type-qos {
          description "QoS policy-map";
        }
    
        feature pmap-type-pbr {
          description "PBR policy-map";
        }
    
        feature pmap-type-accounting {
          description "Accounting policy-map";
        }
    
        feature pmap-type-redirect {
          description "Redirect policy-map";
        }
    
        feature pmap-type-traffic {
          description "Traffic policy-map";
        }
    
        feature pmap-type-control {
          description
            "Subscriber control policy-map";
        }
    
        feature pmap-type-afmon {
          description
            "Peformance traffic policy-map";
        }
    
        feature cmap-type-qos {
          description "QOS class-map";
        }
    
        feature cmap-type-traffic {
          description "Traffic class-map";
        }
    
        feature match-ipv4-acl {
          description "Match based on ipv4 ACL";
        }
    
        feature match-ipv6-acl {
          description "Match based on ipv6 ACL";
        }
    
        feature match-ethernet-services-acl {
          description
            "Match based on Ethernet Services";
        }
    
        feature match-ipv4-dscp {
          description "Match based on ipv4 DSCP";
        }
    
        feature match-ipv4-prec {
          description
            "Match based on ipv4 precedence";
        }
    
        feature match-ipv6-dscp {
          description "Match based on ipv6 DSCP";
        }
    
        feature match-ipv6-prec {
          description
            "Match based on ipv6 precedence";
        }
    
        feature match-dscp {
          description "Match based on DSCP";
        }
    
        feature match-prec {
          description
            "Match based on precedence";
        }
    
        feature match-proto {
          description "Match based on protocol";
        }
    
        feature match-mpls-exp-top {
          description
            "Match based on mpls experimental topmost";
        }
    
        feature match-cos {
          description "Match based on COS";
        }
    
        feature match-cos-inner {
          description "Match inner based on COS";
        }
    
        feature match-vlan {
          description "Match based on Vlan Ids";
        }
    
        feature match-vlan-inner {
          description
            "Match based on inner Vlan Ids";
        }
    
        feature match-source-port {
          description
            "Match based on source port";
        }
    
        feature match-destination-port {
          description
            "Match based on destination port";
        }
    
        feature match-src-mac {
          description
            "Match based on MAC source address";
        }
    
        feature match-dst-mac {
          description
            "Match based on MAC destination address";
        }
    
        feature match-src-addr-ipv4 {
          description
            "Match based on ipv4 source address";
        }
    
        feature match-dst-addr-ipv4 {
          description
            "Match based on ipv4 destination address";
        }
    
        feature match-src-addr-ipv6 {
          description
            "Match based on ipv6 source address";
        }
    
        feature match-dst-addr-ipv6 {
          description
            "Match based on ipv6 destination address";
        }
    
        feature match-atm {
          description
            "Match based on ATM specific criteria";
        }
    
        feature match-cac {
          description
            "Match based on CAC fields";
        }
    
        feature match-dei {
          description "Match based on DEI bit";
        }
    
        feature match-dei-inner {
          description
            "Match inner based on DEI bit";
        }
    
        feature match-discard-class {
          description
            "Match based on discard class";
        }
    
        feature match-ethertype {
          description "Match based on ethertype";
        }
    
        feature match-flow-key {
          description "Match based on flow keys";
        }
    
        feature match-fragment-type {
          description
            "Match based on fragment type";
        }
    
        feature match-fr-de {
          description
            "Match based on FrameRelay DE bit";
        }
    
        feature match-fr {
          description
            "Match based on frame-relay specific criteria";
        }
    
        feature match-mpls-disp-ipv4-acl {
          description
            "Match based on MPLS Label Disposition IPv4 access list";
        }
    
        feature match-mpls-disp-ipv6-acl {
          description
            "Match based on MPLS Label Disposition IPv6 access list";
        }
    
        feature match-mpls-disp-cmap {
          description
            "Match based on MPLS Label Disposition class-map";
        }
    
        feature match-mpls-exp-imposition {
          description
            "Match based on MPLS experimental imposition label";
        }
    
        feature match-ipv4-packet-length {
          description
            "Match based on IPV4 packet length";
        }
    
        feature match-ipv6-packet-length {
          description
            "Match based on IPV6 packet length";
        }
    
        feature match-authen-status {
          description
            "Match based on authentication status";
        }
    
        feature match-timer {
          description "Match based on timer";
        }
    
        feature match-username {
          description "Match based on user name";
        }
    
        feature match-vpls-known {
          description
            "Match based on VPLS field known";
        }
    
        feature match-vpls-unknown {
          description
            "Match based on VPLS field unknown";
        }
    
        feature match-vpls-control {
          description
            "Match based on VPLS field control";
        }
    
        feature matchnot-ipv4-acl {
          description
            "Not match based on IPV4 access-list";
        }
    
        feature matchnot-ipv6-acl {
          description
            "Not match based on IPV6 access-list";
        }
    
        feature matchnot-es-acl {
          description
            "Not match based on ethernet services access-list";
        }
    
        feature matchnot-cac-local {
          description "Not match based on CAC";
        }
    
        feature matchnot-dei {
          description
            "Not match based on DEI bit";
        }
    
        feature matchnot-authen-status {
          description
            "Not match based on authentication status";
        }
    
        feature matchnot-protocol {
          description
            "Not match based on protocol";
        }
    
        feature matchnot-timer {
          description "Not match based on timer";
        }
    
        feature matchnot-username {
          description
            "Not match based on user name";
        }
    
        feature matchnot-ethertype {
          description
            "Not match based on ethertype";
        }
    
        feature matchnot-fr-de {
          description "Not match based on FR DE";
        }
    
        feature matchnot-fr {
          description
            "Not match based on FrameRelay";
        }
    
        feature matchnot-ipv4-packet-length {
          description
            "Not match based on IPV4 packet length";
        }
    
        feature matchnot-ipv6-packet-length {
          description
            "Not match based on IPV6 packet length";
        }
    
        feature matchnot-vlan {
          description
            "Not match based on Vlan Ids";
        }
    
        feature matchnot-vlan-inner {
          description
            "Not match based on inner Vlan Ids";
        }
    
        feature matchnot-vpls-known {
          description
            "Not match based on VPLS field known";
        }
    
        feature matchnot-vpls-unknown {
          description
            "Not match based on VPLS field unknown";
        }
    
        feature matchnot-vpls-bcast {
          description
            "Not match based on VPLS field broadcast";
        }
    
        feature matchnot-vpls-control {
          description
            "Not match based on VPLS field control";
        }
    
        feature matchnot-vpls-mcast {
          description
            "Not match based on VPLS field multicast";
        }
    
        feature matchnot-flow-tag {
          description
            "Not match based on flow-tag";
        }
    
        feature matchnot-mac-address {
          description
            "Not match based on MAC address";
        }
    
        feature matchnot-mpls-disp-ipv4-acl {
          description
            "Not match based on MPLS Label Disposition IPv4 access list";
        }
    
        feature matchnot-mpls-disp-ipv6-acl {
          description
            "Not match based on MPLS Label Disposition IPv6 access list";
        }
    
        feature action-compress-header-ip {
          description
            "IP header compression action";
        }
    
        feature action-encap-sequence {
          description
            "Encapsulation sequence action";
        }
    
        feature action-authenticate {
          description
            "Authentication related action";
        }
    
        feature action-authorize {
          description
            "Authorization related action";
        }
    
        feature action-disconnect {
          description "Disconnect session";
        }
    
        feature action-monitor {
          description "Monitor session";
        }
    
        feature action-set-timer {
          description
            "Set a timer to execute a rule on its expiry";
        }
    
        feature action-stop-timer {
          description
            "Disable timer before it expires";
        }
    
        feature action-http-redirect {
          description "HTTP redirect action";
        }
    
        feature action-http-enrichment {
          description "HTTP enrichment action";
        }
    
        feature action-redirect-nexthop {
          description
            "PBF redirect nexthop action";
        }
    
        feature action-redirect-rt {
          description
            "Forward to specific route-target";
        }
    
        feature action-service-function {
          description
            "NSH service function action";
        }
    
        feature action-set-dst-address {
          description "Set destination address";
        }
    
        feature action-set-df {
          description "Set DF bit";
        }
    
        feature action-set-fwd-class {
          description "Set forward class";
        }
    
        feature action-set-src-address {
          description "Set source address";
        }
    
        feature action-transmit {
          description
            "Forward packet to the original destination";
        }
    
        feature action-decap-gre {
          description "Decapsulate GRE packet";
        }
    
        feature action-react {
          description
            "Generate alert on specific event";
        }
    
        feature action-react-snmp {
          description "Report via snmp";
        }
    
        feature action-react-alarm {
          description "Alarms";
        }
    
        feature action-react-grouped-alarm {
          description "Grouped alarms";
        }
    
        feature action-cac {
          description
            "Call admission control action";
        }
    
        feature action-bandwidth {
          description "Bandwidth";
        }
    
        feature action-service-fragment {
          description
            "Refer to an existing service fragment";
        }
    
        feature action-pfc {
          description "PFC feature";
        }
    
        feature action-police-peak-burst {
          description "Excess burst size";
        }
    
        feature action-police-conform-color {
          description
            "Conform color class for color aware policing";
        }
    
        feature action-police-exceed-color {
          description
            "Exceed color class for color aware policing";
        }
    
        feature action-police-coupled {
          description "Coupled policing";
        }
    
        feature action-police-set-fr-de {
          description
            "Set frame relay discard-eligible bit";
        }
    
        feature action-set-atm-clp {
          description
            "Set atm cell-loss-priority bit";
        }
    
        feature action-set-traffic-class {
          description
            "Set the Traffic Class identifiers on IPv4 or MPLS packets";
        }
    
        feature action-shape-burst {
          description "Excess burst size";
        }
    
        typedef trigger-value {
          type string {
            pattern
              "-{0,1}[0-9]+(\\\\.[0-9]+){0,1}";
          }
          description "Limit as a number";
        }
    
        typedef event-type {
          type enumeration {
            enum "account-logoff" {
              value 0;
              description "Account logoff event";
            }
            enum "account-logon" {
              value 1;
              description "Account logon event";
            }
            enum "authentication-failure" {
              value 2;
              description
                "Authentication failure event";
            }
            enum "authentication-no-response" {
              value 3;
              description
                "Authentication no response event";
            }
            enum "authorization-failure" {
              value 4;
              description
                "Authorization failure event";
            }
            enum "authorization-no-response" {
              value 5;
              description
                "Authorization no response event";
            }
            enum "authorize-dhcp-renew" {
              value 6;
              description
                "Authorize dhcp renew packet event";
            }
            enum "credit-exhausted" {
              value 7;
              description
                "Credit exhaustion event";
            }
            enum "exception" {
              value 8;
              description "Exception event";
            }
            enum "idle-timeout" {
              value 9;
              description "Idle timeout event";
            }
            enum "quota-depleted" {
              value 10;
              description
                "Quota depletion event";
            }
            enum "service-start" {
              value 11;
              description "Service start event";
            }
            enum "service-stop" {
              value 12;
              description "Service stop event";
            }
            enum "session-activate" {
              value 13;
              description
                "Session activate event";
            }
            enum "session-established" {
              value 14;
              description
                "session is in activated state (address is assigned to session)";
            }
            enum "session-identity-change" {
              value 15;
              description
                "session identity change event";
            }
            enum "session-start" {
              value 16;
              description "Session start event";
            }
            enum "session-stop" {
              value 17;
              description "Session stop event";
            }
            enum "session-umi-report" {
              value 18;
              description
                "session umi report event";
            }
            enum "timer-expiry" {
              value 19;
              description "Timer expiry event";
            }
          }
        }
    
        typedef dscp-value {
          type union {
            type uint8 {
              range "0..63";
            }
            type string {
              pattern
                "([0-9]{1,2})-([0-9]{1,2})";
            }
            type enumeration {
              enum "af11" {
                value 0;
                description
                  "Match packets with AF11 dscp (001010)";
              }
              enum "af12" {
                value 1;
                description
                  "Match packets with AF12 dscp (001100)";
              }
              enum "af13" {
                value 2;
                description
                  "Match packets with AF13 dscp (001110)";
              }
              enum "af21" {
                value 3;
                description
                  "Match packets with AF21 dscp (010010)";
              }
              enum "af22" {
                value 4;
                description
                  "Match packets with AF22 dscp (010100)";
              }
              enum "af23" {
                value 5;
                description
                  "Match packets with AF23 dscp (010110)";
              }
              enum "af31" {
                value 6;
                description
                  "Match packets with AF31 dscp (011010)";
              }
              enum "af32" {
                value 7;
                description
                  "Match packets with AF32 dscp (011100)";
              }
              enum "af33" {
                value 8;
                description
                  "Match packets with AF33 dscp (011110)";
              }
              enum "af41" {
                value 9;
                description
                  "Match packets with AF41 dscp (100010)";
              }
              enum "af42" {
                value 10;
                description
                  "Match packets with AF42 dscp (100100)";
              }
              enum "af43" {
                value 11;
                description
                  "Match packets with AF43 dscp (100110)";
              }
              enum "cs1" {
                value 12;
                description
                  "Match packets with CS1(precedence 1) dscp (001000)";
              }
              enum "cs2" {
                value 13;
                description
                  "Match packets with CS2(precedence 2) dscp (010000)";
              }
              enum "cs3" {
                value 14;
                description
                  "Match packets with CS3(precedence 3) dscp (011000)";
              }
              enum "cs4" {
                value 15;
                description
                  "Match packets with CS4(precedence 4) dscp (100000)";
              }
              enum "cs5" {
                value 16;
                description
                  "Match packets with CS5(precedence 5) dscp (101000)";
              }
              enum "cs6" {
                value 17;
                description
                  "Match packets with CS6(precedence 6) dscp (110000)";
              }
              enum "cs7" {
                value 18;
                description
                  "Match packets with CS7(precedence 7) dscp (111000)";
              }
              enum "default" {
                value 19;
                description
                  "Match packets with default DSCP (000000)";
              }
              enum "ef" {
                value 20;
                description
                  "Match packets with EF dscp (101110)";
              }
            }
          }
          description
            "Differentiated services codepoint value";
        }
    
        typedef protocol-type {
          type union {
            type uint8 {
              range "0..255";
            }
            type string {
              pattern
                "([0-9]{1,3})-([0-9]{1,3})";
            }
            type enumeration {
              enum "ahp" {
                value 0;
                description
                  "Authentication Header Protocol";
              }
              enum "eigrp" {
                value 1;
                description
                  "Cisco's EIGRP Routing Protocol";
              }
              enum "esp" {
                value 2;
                description
                  "Encapsulation Security Payload";
              }
              enum "gre" {
                value 3;
                description
                  "Cisco's GRE Tunneling";
              }
              enum "icmp" {
                value 4;
                description
                  "Internet Control Message Protocol";
              }
              enum "igmp" {
                value 5;
                description
                  "Internet Gateway Message Protocol";
              }
              enum "igrp" {
                value 6;
                description
                  "Cisco's IGRP Routing Protocol";
              }
              enum "ipinip" {
                value 7;
                description "IP in IP tunneling";
              }
              enum "ipv4" {
                value 8;
                description "Any IPv4 Protocol";
              }
              enum "ipv6" {
                value 9;
                description "Any IPv6 Protocol";
              }
              enum "ipv6icmp" {
                value 10;
                description
                  "IPV6Internet Control Message Protocol";
              }
              enum "mpls" {
                value 11;
                description "Any MPLS Packet";
              }
              enum "nos" {
                value 12;
                description
                  "KA9Q NOS Compatible IP over IP Tunneling";
              }
              enum "ospf" {
                value 13;
                description
                  "OSPF Routing Protocol";
              }
              enum "pcp" {
                value 14;
                description
                  "Payload Compression Protocol";
              }
              enum "pim" {
                value 15;
                description
                  "Protocol Independent Multicast";
              }
              enum "sctp" {
                value 16;
                description
                  "Stream Control Transmission Protocol";
              }
              enum "tcp" {
                value 17;
                description
                  "Transport Control Protocol";
              }
              enum "udp" {
                value 18;
                description
                  "User Datagram Protocol";
              }
            }
          }
        }
    
        typedef acl-list-name-type {
          type string {
            length "1..64";
          }
          description "Access list name";
        }
    
        typedef packet-length-type {
          type union {
            type uint16 {
              range "0..65535";
            }
            type string {
              pattern
                "([0-9]{1,5})-([0-9]{1,5})";
            }
          }
          description "IP packet length";
        }
    
        typedef precedence-type {
          type union {
            type uint8 {
              range "0..7";
            }
            type enumeration {
              enum "critical" {
                value 0;
                description
                  "Critical precedence (5)";
              }
              enum "flash" {
                value 1;
                description
                  "Flash precedence (3)";
              }
              enum "flash-override" {
                value 2;
                description
                  "Flash override precedence (4)";
              }
              enum "immediate" {
                value 3;
                description
                  "Immediate precedence (2)";
              }
              enum "internet" {
                value 4;
                description
                  "Internetwork control precedence (6)";
              }
              enum "network" {
                value 5;
                description
                  "Network control precedence (7)";
              }
              enum "priority" {
                value 6;
                description
                  "Priority precedence (1)";
              }
              enum "routine" {
                value 7;
                description
                  "Routine precedence (0)";
              }
            }
          }
          description "Precedence value";
        }
    
        typedef port-number-type {
          type union {
            type uint16 {
              range "0..65535";
            }
            type string {
              pattern "([0-9]+)-([0-9]+)";
            }
          }
        }
    
        typedef vlan-id-type {
          type union {
            type uint16 {
              range "1..4094";
            }
            type string {
              pattern
                "([1-9][0-9]{0,3})-([1-9][0-9]{0,3})";
            }
          }
        }
    
        typedef clear-text-password-type {
          type string;
          description "Clear text password";
        }
    
        typedef flow-monitor-map-name-type {
          type string {
            length "1..32";
            pattern
              "[a-zA-Z0-9][a-zA-Z0-9\\._@$%+#:=<>\\-]{0,62}";
          }
          description
            "Name of the flow monitor map";
        }
    
        typedef clone-interface-type {
          type xr2:Interface-name {
            pattern "^(Loopback)";
          }
          description "Specify an interface";
        }
    
        typedef rate-unit-type {
          type enumeration {
            enum "bps" {
              value 0;
              description
                "Bits per second (default)";
            }
            enum "gbps" {
              value 1;
              description "Gigabits per second";
            }
            enum "kbps" {
              value 2;
              description "Kilobits per second";
            }
            enum "mbps" {
              value 3;
              description "Megabits per second";
            }
            enum "cellsps" {
              value 4;
              description "Cells per second";
            }
            enum "pps" {
              value 5;
              description "Packets per second";
            }
          }
        }
    
        typedef burst-unit-type {
          type enumeration {
            enum "bytes" {
              value 0;
              description "Bytes (default)";
            }
            enum "gbytes" {
              value 1;
              description "Gigabytes";
            }
            enum "kbytes" {
              value 2;
              description "Kilobytes";
            }
            enum "mbytes" {
              value 3;
              description "Megabytes";
            }
            enum "ms" {
              value 4;
              description "Milliseconds";
            }
            enum "us" {
              value 5;
              description "Microseconds";
            }
            enum "packets" {
              value 6;
              description "Packets";
            }
          }
        }
    
        typedef wred-unit-type {
          type enumeration {
            enum "bytes" {
              value 0;
              description "Bytes";
            }
            enum "gbytes" {
              value 1;
              description "Gigabytes";
            }
            enum "kbytes" {
              value 2;
              description "Kilobytes";
            }
            enum "mbytes" {
              value 3;
              description "Megabytes";
            }
            enum "ms" {
              value 4;
              description "Milliseconds";
            }
            enum "us" {
              value 5;
              description "Microseconds";
            }
            enum "packets" {
              value 6;
              description "Packets (default)";
            }
          }
        }
    
        typedef cac-unit-type {
          type enumeration {
            enum "bps" {
              value 0;
              description "Bits per second";
            }
            enum "gbps" {
              value 1;
              description "Gigabits per second";
            }
            enum "kbps" {
              value 2;
              description
                "Kilobits per second (default)";
            }
            enum "mbps" {
              value 3;
              description "Megabits per second";
            }
            enum "cellsps" {
              value 4;
              description "Cells per second";
            }
          }
        }
    
        typedef pfc-unit-type {
          type enumeration {
            enum "bytes" {
              value 0;
              description "Bytes";
            }
            enum "gbytes" {
              value 1;
              description "Gigabytes";
            }
            enum "kbytes" {
              value 2;
              description "Kilobytes";
            }
            enum "mbytes" {
              value 3;
              description "Megabytes";
            }
            enum "ms" {
              value 4;
              description "Milliseconds";
            }
            enum "us" {
              value 5;
              description "Microseconds";
            }
            enum "cells" {
              value 6;
              description "Cells";
            }
            enum "packets" {
              value 7;
              description "Packets";
            }
          }
        }
    
        typedef service-policy-name-type {
          type string {
            pattern
              "[a-zA-Z0-9][a-zA-Z0-9\\._@$%+#:=<>\\-]{0,62}";
          }
        }
    
        container class-map {
          description "Configure a class-map";
          container type {
            description "class-map type";
            list qos {
              if-feature cmap-type-qos;
              must
                "not(match-all and match-any)";
              key "class-map-name";
              description "QoS class-map";
              leaf class-map-name {
                type string {
                  pattern
                    "[a-zA-Z0-9][a-zA-Z0-9\\._@$%+#:=<>\\-]{0,62}";
                }
                description
                  "Name of the class-map";
              }
    
              container match-all {
                presence
                  "Match all match criteria";
                description
                  "Match all match criteria";
              }  // container match-all
    
              container match-any {
                presence
                  "Match any match criteria (default)";
                description
                  "Match any match criteria (default)";
              }  // container match-any
    
              leaf description {
                type string;
                description
                  "Set description for this class-map";
              }
    
              container match {
                description
                  "Configure match criteria for this class.";
                container access-group {
                  description
                    "Match access group";
                  leaf-list ipv4 {
                    if-feature match-ipv4-acl;
                    type acl-list-name-type;
                    description
                      "IPv4 access list";
                  }
    
                  leaf-list ipv6 {
                    if-feature match-ipv6-acl;
                    type acl-list-name-type;
                    description
                      "IPv6 access list";
                  }
    
                  leaf-list ethernet-services {
                    if-feature match-ethernet-services-acl;
                    type acl-list-name-type;
                    description
                      "Ethernet-Services";
                  }
                }  // container access-group
    
                container atm {
                  if-feature match-atm;
                  description
                    "Match based on ATM specific criteria";
                  leaf-list clp {
                    type uint8 {
                      range "0..1";
                    }
                    max-elements 2;
                    ordered-by user;
                    description
                      "Match ATM CLP bit";
                  }
    
                  container oam {
                    presence "Match ATM OAM";
                    description "Match ATM OAM";
                  }  // container oam
                }  // container atm
    
                container cac {
                  if-feature match-cac;
                  description
                    "Match based on CAC fields";
                  container admitted {
                    presence
                      "Match packets admitted by CAC action";
                    description
                      "Match packets admitted by CAC action";
                  }  // container admitted
    
                  container unadmitted {
                    presence
                      "Match packets unadmitted by CAC action";
                    description
                      "Match packets unadmitted by CAC action";
                  }  // container unadmitted
                }  // container cac
    
                container cos {
                  if-feature match-cos;
                  description
                    "Match based on IEEE 802.1Q/ISL Class Of Service value";
                  leaf-list value {
                    type uint8 {
                      range "0..7";
                    }
                    max-elements 8;
                    description "COS value";
                  }
                }  // container cos
    
                container cos-inner {
                  if-feature match-cos-inner;
                  description
                    "Match inner cos values";
                  leaf-list value {
                    type uint8 {
                      range "0..7";
                    }
                    max-elements 8;
                    description
                      "inner cos value (Upto 8 values)";
                  }
                }  // container cos-inner
    
                leaf dei {
                  if-feature match-dei;
                  type uint8 {
                    range "0..1";
                  }
                  must "not(../dei-inner)";
                  description
                    "Match based on DEI bit (0/1)";
                }
    
                leaf dei-inner {
                  if-feature match-dei-inner;
                  type uint8 {
                    range "0..1";
                  }
                  must "not(../dei)";
                  description
                    "Match inner based on DEI bit (0/1)";
                }
    
                container destination-address {
                  description
                    "Match based on destination address";
                  container ipv4 {
                    if-feature match-dst-addr-ipv4;
                    description
                      "Match based on destination IPv4 address";
                    list address-prefix {
                      key "address netmask";
                      description "IPv4 address";
                      leaf address {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 address.";
                      }
    
                      leaf netmask {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 netmask.";
                      }
                    }  // list address-prefix
                  }  // container ipv4
    
                  container ipv6 {
                    if-feature match-dst-addr-ipv6;
                    description
                      "Match based on destination IPv6 address";
                    list address-prefix {
                      key "address prefix-length";
                      description "IPv6 address";
                      leaf address {
                        type inet:ipv6-address-no-zone;
                        description
                          "IPv6 address.";
                      }
    
                      leaf prefix-length {
                        type uint8 {
                          range "0..128";
                        }
                        description
                          "Length of the IPv6 Prefix.";
                      }
                    }  // list address-prefix
                  }  // container ipv6
    
                  leaf mac {
                    if-feature match-dst-mac;
                    type yang:mac-address;
                    description "MAC Address";
                  }
                }  // container destination-address
    
                container destination-port {
                  if-feature match-destination-port;
                  description
                    "Match based on destination port";
                  leaf-list port-number {
                    type port-number-type;
                    max-elements 5;
                    description
                      "destination port";
                  }
                }  // container destination-port
    
                container discard-class {
                  if-feature match-discard-class;
                  description
                    "Match based on discard class";
                  leaf-list id {
                    type uint8 {
                      range "0..7";
                    }
                    max-elements 8;
                    description
                      "Discard CLass Id";
                  }
                }  // container discard-class
    
                container dscp {
                  if-feature match-dscp;
                  description
                    "Match based on IP DSCP value";
                  leaf-list value {
                    type dscp-value;
                    description "DSCP value";
                  }
                }  // container dscp
    
                container dscp-ipv4 {
                  if-feature match-ipv4-dscp;
                  description
                    "Match based on IPv4 DSCP value";
                  leaf-list value {
                    type dscp-value;
                    description "DSCP value";
                  }
                }  // container dscp-ipv4
    
                container dscp-ipv6 {
                  if-feature match-ipv6-dscp;
                  description
                    "Match based on IPv6 DSCP value";
                  leaf-list value {
                    type dscp-value;
                    description "DSCP value";
                  }
                }  // container dscp-ipv6
    
                container ethertype {
                  if-feature match-ethertype;
                  description
                    "Match based on ethertype";
                  leaf-list value {
                    type union {
                      type uint16 {
                        range "1536..65535";
                      }
                      type enumeration {
                        enum "arp" {
                          value 0;
                          description
                            "Any ARP Ethertype";
                        }
                        enum "ipv4" {
                          value 1;
                          description
                            "Any IPv4 Ethertype";
                        }
                        enum "ipv6" {
                          value 2;
                          description
                            "Any IPv6 Ethertype";
                        }
                      }
                    }
                    max-elements 8;
                    description
                      "Ethertype Value";
                  }
                }  // container ethertype
    
                container flow-key {
                  if-feature match-flow-key;
                  description
                    "Match based on flow keys";
                  container five-tuple {
                    must
                      "not(../dst-ip or ../src-ip)";
                    presence
                      "Five tuples to identify a flow";
                    description
                      "Five tuples to identify a flow";
                  }  // container five-tuple
    
                  container dst-ip {
                    must "not(../five-tuple)";
                    presence
                      "Destination IP address";
                    description
                      "Destination IP address";
                  }  // container dst-ip
    
                  container src-ip {
                    must "not(../five-tuple)";
                    presence "Source IP address";
                    description
                      "Source IP address";
                  }  // container src-ip
    
                  container flow-cache {
                    description
                      "Configure the flow-cache parameters";
                    leaf idle-timeout {
                      type union {
                        type uint16 {
                          range "1..65534";
                        }
                        type enumeration {
                          enum "None" {
                            value 0;
                            description
                              "The flow does not expire";
                          }
                        }
                      }
                      description
                        "Maximum time of inactivity for a flow.";
                    }
                  }  // container flow-cache
                }  // container flow-key
    
                leaf fr-de {
                  if-feature match-fr-de;
                  type union {
                    type string {
                      pattern "1";
                    }
                    type uint8 {
                      range "0..1";
                    }
                  }
                  description
                    "Match based on FrameRelay DE bit";
                }
    
                container fragment-type {
                  if-feature match-fragment-type;
                  description
                    "Fragment type for a packet";
                  container dont-fragment {
                    presence
                      "Match don't-Fragment bit";
                    description
                      "Match don't-Fragment bit";
                  }  // container dont-fragment
    
                  container first-fragment {
                    presence
                      "Match first fragment bit";
                    description
                      "Match first fragment bit";
                  }  // container first-fragment
    
                  container is-fragment {
                    presence
                      "Match is-fragment bit";
                    description
                      "Match is-fragment bit";
                  }  // container is-fragment
    
                  container last-fragment {
                    presence
                      "Match last fragment bit";
                    description
                      "Match last fragment bit";
                  }  // container last-fragment
                }  // container fragment-type
    
                container frame-relay {
                  if-feature match-fr;
                  description
                    "Match based on frame-relay specific criteria";
                  leaf-list dlci {
                    type union {
                      type uint16 {
                        range "16..1007";
                      }
                      type string {
                        pattern
                          "([1-9][0-9]{1,3})-([1-9][0-9]{1,3})";
                      }
                    }
                    max-elements 8;
                    description
                      "Match frame-relay dlci value(s)";
                  }
                }  // container frame-relay
    
                container ipv4 {
                  description
                    "Match based on ipv4 icmp";
                  container icmp-code {
                    description
                      "Match based on ipv4 icmp code";
                    leaf-list value {
                      type union {
                        type uint8 {
                          range "0..255";
                        }
                        type string {
                          pattern
                            "([0-9]{1,3})-([0-9]{1,3})";
                        }
                      }
                      max-elements 5;
                      description
                        "IPv4 ICMP code";
                    }
                  }  // container icmp-code
    
                  container icmp-type {
                    description
                      "Match based on ipv4 icmp type";
                    leaf-list value {
                      type union {
                        type uint8 {
                          range "0..255";
                        }
                        type string {
                          pattern
                            "([0-9]{1,3})-([0-9]{1,3})";
                        }
                      }
                      max-elements 5;
                      description
                        "IPv4 ICMP type";
                    }
                  }  // container icmp-type
                }  // container ipv4
    
                container ipv6 {
                  description
                    "Match based on IPv6";
                  container icmp-code {
                    description "IPv6 ICMP code";
                    leaf-list value {
                      type union {
                        type uint8 {
                          range "0..255";
                        }
                        type string {
                          pattern
                            "([0-9]{1,3})-([0-9]{1,3})";
                        }
                      }
                      max-elements 5;
                      description "ICMP code";
                    }
                  }  // container icmp-code
    
                  container icmp-type {
                    description "IPv6 ICMP type";
                    leaf-list value {
                      type union {
                        type uint8 {
                          range "0..255";
                        }
                        type string {
                          pattern
                            "([0-9]{1,3})-([0-9]{1,3})";
                        }
                      }
                      max-elements 5;
                      description "ICMP type";
                    }
                  }  // container icmp-type
                }  // container ipv6
    
                container mpls {
                  description
                    "Match based on MPLS specific values";
                  container disposition {
                    description
                      "Match MPLS Label Disposition";
                    container access-group {
                      description "access group";
                      leaf ipv4 {
                        if-feature match-mpls-disp-ipv4-acl;
                        type string {
                          length "1..64";
                        }
                        description
                          "IPv4 access list";
                      }
    
                      leaf ipv6 {
                        if-feature match-mpls-disp-ipv6-acl;
                        type string {
                          length "1..64";
                        }
                        description
                          "IPv6 access list";
                      }
                    }  // container access-group
    
                    leaf class-map {
                      if-feature match-mpls-disp-cmap;
                      type string {
                        length "1..32";
                      }
                      description
                        "class-map name";
                    }
                  }  // container disposition
    
                  container experimental {
                    description
                      "Match MPLS experimental values";
                    container imposition {
                      if-feature match-mpls-exp-imposition;
                      description
                        "Match imposition label";
                      leaf-list label {
                        type uint8 {
                          range "0..7";
                        }
                        max-elements 8;
                        description
                          "MPLS experimental label";
                      }
                    }  // container imposition
    
                    container topmost {
                      if-feature match-mpls-exp-top;
                      description
                        "Match topmost label";
                      leaf-list label {
                        type uint8 {
                          range "0..7";
                        }
                        max-elements 8;
                        description
                          "MPLS experimental label";
                      }
                    }  // container topmost
                  }  // container experimental
                }  // container mpls
    
                container packet {
                  description
                    "Match based on packet length";
                  container length {
                    description "Packet length";
                    leaf-list value {
                      type packet-length-type;
                      max-elements 5;
                      description
                        "IP Packet Length";
                    }
                  }  // container length
    
                  container length-ipv4 {
                    if-feature match-ipv4-packet-length;
                    description
                      "IPV4 Packet Length";
                    leaf-list value {
                      type packet-length-type;
                      max-elements 5;
                    }
                  }  // container length-ipv4
    
                  container length-ipv6 {
                    if-feature match-ipv6-packet-length;
                    description
                      "IPV6 Packet Length";
                    leaf-list value {
                      type packet-length-type;
                      max-elements 5;
                    }
                  }  // container length-ipv6
                }  // container packet
    
                container precedence {
                  if-feature match-prec;
                  description
                    "Match based on IP precedence values";
                  leaf-list value {
                    type precedence-type;
                    max-elements 8;
                    description "IP precedence";
                  }
                }  // container precedence
    
                container precedence-ipv4 {
                  if-feature match-ipv4-prec;
                  description
                    "Match based on IPV4 precedence";
                  leaf-list value {
                    type precedence-type;
                    max-elements 8;
                    description
                      "IPV4 precedence";
                  }
                }  // container precedence-ipv4
    
                container precedence-ipv6 {
                  if-feature match-ipv6-prec;
                  description
                    "Match based on IPV6 precedence";
                  leaf-list value {
                    type precedence-type;
                    max-elements 8;
                    description
                      "IPV6 precedence";
                  }
                }  // container precedence-ipv6
    
                container protocol {
                  description
                    "Match based on L3 protocol (Upto 8 values or ranges)";
                  leaf-list number {
                    type protocol-type;
                    max-elements 8;
                    description
                      "Protocol Number";
                  }
                }  // container protocol
    
                container qos-group {
                  description
                    "Match based on QoS Group";
                  leaf-list id {
                    type union {
                      type uint16 {
                        range "0..512";
                      }
                      type string {
                        pattern
                          "([0-9]{1,3})-([0-9]{1,3})";
                      }
                    }
                    max-elements 8;
                    description "QoS Group Id";
                  }
                }  // container qos-group
    
                container source-address {
                  description
                    "Match based on source address";
                  container ipv4 {
                    if-feature match-src-addr-ipv4;
                    description
                      "Match based on source IPv4 address";
                    list address-prefix {
                      key "address netmask";
                      description "IPv4 address";
                      leaf address {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 address.";
                      }
    
                      leaf netmask {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 netmask.";
                      }
                    }  // list address-prefix
                  }  // container ipv4
    
                  container ipv6 {
                    if-feature match-src-addr-ipv6;
                    description
                      "Match based on source IPv6 address";
                    list address-prefix {
                      key "address prefix-length";
                      description "IPv6 address";
                      leaf address {
                        type inet:ipv6-address-no-zone;
                        description
                          "IPv6 address.";
                      }
    
                      leaf prefix-length {
                        type uint8 {
                          range "0..128";
                        }
                        description
                          "Length of the IPv6 Prefix.";
                      }
                    }  // list address-prefix
                  }  // container ipv6
    
                  leaf mac {
                    if-feature match-src-mac;
                    type yang:mac-address;
                    description "MAC Address";
                  }
                }  // container source-address
    
                container source-port {
                  if-feature match-source-port;
                  description
                    "Match based on source port";
                  leaf-list number {
                    type port-number-type;
                    max-elements 5;
                    description "source port";
                  }
                }  // container source-port
    
                container tcp-flag {
                  description
                    "Match based on TCP flags";
                  leaf value {
                    type uint16 {
                      range "0..4095";
                    }
                    description
                      "TCP flags value";
                  }
    
                  container any {
                    presence
                      "Match based on any bit set";
                    description
                      "Match based on any bit set";
                  }  // container any
                }  // container tcp-flag
    
                container traffic-class {
                  description
                    "Match based on Traffic Class";
                  leaf-list id {
                    type union {
                      type uint8 {
                        range "0..63";
                      }
                      type string {
                        pattern
                          "([0-9]{1,2})-([0-9]{1,2})";
                      }
                    }
                    max-elements 8;
                    description
                      "Traffic Class Id";
                  }
                }  // container traffic-class
    
                container vlan {
                  if-feature match-vlan;
                  description
                    "Match based on Vlan Ids";
                  leaf-list vlan-id {
                    type vlan-id-type;
                    max-elements 8;
                    description "Vlan Id";
                  }
                }  // container vlan
    
                container vlan-inner {
                  if-feature match-vlan-inner;
                  description
                    "Match based on inner Vlan Ids";
                  leaf-list vlan-id {
                    type vlan-id-type;
                    max-elements 8;
                    description "inner Vlan Id";
                  }
                }  // container vlan-inner
    
                container vpls {
                  description
                    "Match based on VPLS fields";
                  container known {
                    if-feature match-vpls-known;
                    presence "VPLS Known";
                    description "VPLS Known";
                  }  // container known
    
                  container unknown {
                    if-feature match-vpls-unknown;
                    presence "VPLS Unknown";
                    description "VPLS Unknown";
                  }  // container unknown
    
                  container broadcast {
                    presence "VPLS Broadcast";
                    description "VPLS Broadcast";
                  }  // container broadcast
    
                  container control {
                    if-feature match-vpls-control;
                    presence "VPLS Control";
                    description "VPLS Control";
                  }  // container control
    
                  container multicast {
                    presence "VPLS Multicast";
                    description "VPLS Multicast";
                  }  // container multicast
                }  // container vpls
              }  // container match
    
              container match-not {
                description
                  "Negate match criteria";
                container access-group {
                  description
                    "Match access group";
                  leaf-list ipv4 {
                    if-feature match-ipv4-acl;
                    type acl-list-name-type;
                    description
                      "IPv4 access list";
                  }
    
                  leaf-list ipv6 {
                    if-feature match-ipv6-acl;
                    type acl-list-name-type;
                    description
                      "IPv6 access list";
                  }
    
                  leaf-list ethernet-services {
                    if-feature match-ethernet-services-acl;
                    type acl-list-name-type;
                    description
                      "Ethernet-Services";
                  }
                }  // container access-group
    
                container cac {
                  if-feature match-cac;
                  description
                    "Match based on CAC fields";
                  container admitted {
                    presence
                      "Match packets admitted by CAC action";
                    description
                      "Match packets admitted by CAC action";
                  }  // container admitted
    
                  container unadmitted {
                    presence
                      "Match packets unadmitted by CAC action";
                    description
                      "Match packets unadmitted by CAC action";
                  }  // container unadmitted
                }  // container cac
    
                container cos {
                  if-feature match-cos;
                  description
                    "Match based on IEEE 802.1Q/ISL Class Of Service value";
                  leaf-list value {
                    type uint8 {
                      range "0..7";
                    }
                    max-elements 8;
                    description "COS value";
                  }
                }  // container cos
    
                container cos-inner {
                  if-feature match-cos-inner;
                  description
                    "Match inner cos values";
                  leaf-list value {
                    type uint8 {
                      range "0..7";
                    }
                    max-elements 8;
                    description
                      "inner cos value (Upto 8 values)";
                  }
                }  // container cos-inner
    
                leaf dei {
                  if-feature match-dei;
                  type uint8 {
                    range "0..1";
                  }
                  must "not(../dei-inner)";
                  description
                    "Match based on DEI bit (0/1)";
                }
    
                leaf dei-inner {
                  if-feature match-dei-inner;
                  type uint8 {
                    range "0..1";
                  }
                  must "not(../dei)";
                  description
                    "Match inner based on DEI bit (0/1)";
                }
    
                container destination-address {
                  description
                    "Match based on destination address";
                  container ipv4 {
                    description
                      "Match based on destination IPv4 address";
                    list address-prefix {
                      key "address netmask";
                      description "IPv4 address";
                      leaf address {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 address.";
                      }
    
                      leaf netmask {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 netmask.";
                      }
                    }  // list address-prefix
                  }  // container ipv4
    
                  container ipv6 {
                    description
                      "Match based on destination IPv6 address";
                    list address-prefix {
                      key "address prefix-length";
                      description "IPv6 address";
                      leaf address {
                        type inet:ipv6-address-no-zone;
                        description
                          "IPv6 address.";
                      }
    
                      leaf prefix-length {
                        type uint8 {
                          range "0..128";
                        }
                        description
                          "Length of the IPv6 Prefix.";
                      }
                    }  // list address-prefix
                  }  // container ipv6
    
                  leaf mac {
                    if-feature matchnot-mac-address;
                    type yang:mac-address;
                    description "MAC Address";
                  }
                }  // container destination-address
    
                container destination-port {
                  if-feature match-destination-port;
                  description
                    "Match based on destination port";
                  leaf-list port-number {
                    type port-number-type;
                    max-elements 5;
                    description
                      "destination port";
                  }
                }  // container destination-port
    
                container discard-class {
                  if-feature match-discard-class;
                  description
                    "Match based on discard class";
                  leaf-list id {
                    type uint8 {
                      range "0..7";
                    }
                    max-elements 8;
                    description
                      "Discard CLass Id";
                  }
                }  // container discard-class
    
                container dscp {
                  if-feature match-dscp;
                  description
                    "Match based on IP DSCP value";
                  leaf-list value {
                    type dscp-value;
                    description "DSCP value";
                  }
                }  // container dscp
    
                container dscp-ipv4 {
                  if-feature match-ipv4-dscp;
                  description
                    "Match based on IPv4 DSCP value";
                  leaf-list value {
                    type dscp-value;
                    description "DSCP value";
                  }
                }  // container dscp-ipv4
    
                container dscp-ipv6 {
                  if-feature match-ipv6-dscp;
                  description
                    "Match based on IPv6 DSCP value";
                  leaf-list value {
                    type dscp-value;
                    description "DSCP value";
                  }
                }  // container dscp-ipv6
    
                container ethertype {
                  if-feature match-ethertype;
                  description
                    "Match based on ethertype";
                  leaf-list value {
                    type union {
                      type uint16 {
                        range "1536..65535";
                      }
                      type enumeration {
                        enum "arp" {
                          value 0;
                          description
                            "Any ARP Ethertype";
                        }
                        enum "ipv4" {
                          value 1;
                          description
                            "Any IPv4 Ethertype";
                        }
                        enum "ipv6" {
                          value 2;
                          description
                            "Any IPv6 Ethertype";
                        }
                      }
                    }
                    max-elements 8;
                    description
                      "Ethertype Value";
                  }
                }  // container ethertype
    
                container fragment-type {
                  if-feature match-fragment-type;
                  description
                    "Fragment type for a packet";
                  container dont-fragment {
                    presence
                      "Match don't-Fragment bit";
                    description
                      "Match don't-Fragment bit";
                  }  // container dont-fragment
    
                  container first-fragment {
                    presence
                      "Match first fragment bit";
                    description
                      "Match first fragment bit";
                  }  // container first-fragment
    
                  container is-fragment {
                    presence
                      "Match is-fragment bit";
                    description
                      "Match is-fragment bit";
                  }  // container is-fragment
    
                  container last-fragment {
                    presence
                      "Match last fragment bit";
                    description
                      "Match last fragment bit";
                  }  // container last-fragment
                }  // container fragment-type
    
                container frame-relay {
                  if-feature match-fr;
                  description
                    "Match based on frame-relay specific criteria";
                  leaf-list dlci {
                    type union {
                      type uint16 {
                        range "16..1007";
                      }
                      type string {
                        pattern
                          "([1-9][0-9]{1,3})-([1-9][0-9]{1,3})";
                      }
                    }
                    max-elements 8;
                    description
                      "Match frame-relay dlci value(s)";
                  }
                }  // container frame-relay
    
                container ipv4 {
                  description
                    "Match based on ipv4 icmp";
                  container icmp-code {
                    description
                      "Match based on ipv4 icmp code";
                    leaf-list value {
                      type union {
                        type uint8 {
                          range "0..255";
                        }
                        type string {
                          pattern
                            "([0-9]{1,3})-([0-9]{1,3})";
                        }
                      }
                      max-elements 5;
                      description
                        "IPv4 ICMP code";
                    }
                  }  // container icmp-code
    
                  container icmp-type {
                    description
                      "Match based on ipv4 icmp type";
                    leaf-list value {
                      type union {
                        type uint8 {
                          range "0..255";
                        }
                        type string {
                          pattern
                            "([0-9]{1,3})-([0-9]{1,3})";
                        }
                      }
                      max-elements 5;
                      description
                        "IPv4 ICMP type";
                    }
                  }  // container icmp-type
                }  // container ipv4
    
                container ipv6 {
                  description
                    "Match based on IPv6";
                  container icmp-code {
                    description "IPv6 ICMP code";
                    leaf-list value {
                      type union {
                        type uint8 {
                          range "0..255";
                        }
                        type string {
                          pattern
                            "([0-9]{1,3})-([0-9]{1,3})";
                        }
                      }
                      max-elements 5;
                      description "ICMP code";
                    }
                  }  // container icmp-code
    
                  container icmp-type {
                    description "IPv6 ICMP type";
                    leaf-list value {
                      type union {
                        type uint8 {
                          range "0..255";
                        }
                        type string {
                          pattern
                            "([0-9]{1,3})-([0-9]{1,3})";
                        }
                      }
                      max-elements 5;
                      description "ICMP type";
                    }
                  }  // container icmp-type
                }  // container ipv6
    
                container mpls {
                  description
                    "Match based on MPLS specific values";
                  container disposition {
                    description
                      "Match MPLS Label Disposition";
                    container access-group {
                      description "access group";
                      leaf ipv4 {
                        if-feature matchnot-mpls-disp-ipv4-acl;
                        type string {
                          length "1..64";
                        }
                        description
                          "IPv4 access list";
                      }
    
                      leaf ipv6 {
                        if-feature matchnot-mpls-disp-ipv6-acl;
                        type string {
                          length "1..64";
                        }
                        description
                          "IPv6 access list";
                      }
                    }  // container access-group
                  }  // container disposition
    
                  container experimental {
                    description
                      "Match MPLS experimental values";
                    container topmost {
                      description
                        "Match topmost label";
                      leaf-list label {
                        type uint8 {
                          range "0..7";
                        }
                        max-elements 8;
                        description
                          "MPLS experimental label";
                      }
                    }  // container topmost
                  }  // container experimental
                }  // container mpls
    
                container packet {
                  description
                    "Match based on packet length";
                  container length {
                    description "Packet length";
                    leaf-list value {
                      type packet-length-type;
                      max-elements 5;
                      description
                        "IP Packet Length";
                    }
                  }  // container length
    
                  container length-ipv4 {
                    if-feature matchnot-ipv4-packet-length;
                    description
                      "IPV4 Packet Length";
                    leaf-list value {
                      type packet-length-type;
                      max-elements 5;
                    }
                  }  // container length-ipv4
    
                  container length-ipv6 {
                    if-feature matchnot-ipv6-packet-length;
                    description
                      "IPV6 Packet Length";
                    leaf-list value {
                      type packet-length-type;
                      max-elements 5;
                    }
                  }  // container length-ipv6
                }  // container packet
    
                container precedence {
                  if-feature match-prec;
                  description
                    "Match based on IP precedence values";
                  leaf-list value {
                    type precedence-type;
                    max-elements 8;
                    description "IP precedence";
                  }
                }  // container precedence
    
                container precedence-ipv4 {
                  if-feature match-ipv4-prec;
                  description
                    "Match based on IPV4 precedence";
                  leaf-list value {
                    type precedence-type;
                    max-elements 8;
                    description
                      "IPV4 precedence";
                  }
                }  // container precedence-ipv4
    
                container precedence-ipv6 {
                  if-feature match-ipv6-prec;
                  description
                    "Match based on IPV6 precedence";
                  leaf-list value {
                    type precedence-type;
                    max-elements 8;
                    description
                      "IPV6 precedence";
                  }
                }  // container precedence-ipv6
    
                container protocol {
                  description
                    "Match based on L3 protocol (Upto 8 values or ranges)";
                  leaf-list number {
                    type protocol-type;
                    max-elements 8;
                    description
                      "Protocol Number";
                  }
                }  // container protocol
    
                container qos-group {
                  description
                    "Match based on QoS Group";
                  leaf-list id {
                    type union {
                      type uint16 {
                        range "0..512";
                      }
                      type string {
                        pattern
                          "([0-9]{1,3})-([0-9]{1,3})";
                      }
                    }
                    max-elements 8;
                    description "QoS Group Id";
                  }
                }  // container qos-group
    
                container source-address {
                  description
                    "Match based on source address";
                  container ipv4 {
                    description
                      "Match based on source IPv4 address";
                    list address-prefix {
                      key "address netmask";
                      description "IPv4 address";
                      leaf address {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 address.";
                      }
    
                      leaf netmask {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 netmask.";
                      }
                    }  // list address-prefix
                  }  // container ipv4
    
                  container ipv6 {
                    description
                      "Match based on source IPv6 address";
                    list address-prefix {
                      key "address prefix-length";
                      description "IPv6 address";
                      leaf address {
                        type inet:ipv6-address-no-zone;
                        description
                          "IPv6 address.";
                      }
    
                      leaf prefix-length {
                        type uint8 {
                          range "0..128";
                        }
                        description
                          "Length of the IPv6 Prefix.";
                      }
                    }  // list address-prefix
                  }  // container ipv6
    
                  leaf mac {
                    if-feature matchnot-mac-address;
                    type yang:mac-address;
                    description "MAC Address";
                  }
                }  // container source-address
    
                container source-port {
                  if-feature match-source-port;
                  description
                    "Match based on source port";
                  leaf-list number {
                    type port-number-type;
                    max-elements 5;
                    description "source port";
                  }
                }  // container source-port
    
                container tcp-flag {
                  description
                    "Match based on TCP flags";
                  leaf value {
                    type uint16 {
                      range "0..4095";
                    }
                    description
                      "TCP flags value";
                  }
    
                  container any {
                    presence
                      "Match based on any bit set";
                    description
                      "Match based on any bit set";
                  }  // container any
                }  // container tcp-flag
    
                container traffic-class {
                  description
                    "Match based on Traffic Class";
                  leaf-list id {
                    type union {
                      type uint8 {
                        range "0..63";
                      }
                      type string {
                        pattern
                          "([0-9]{1,2})-([0-9]{1,2})";
                      }
                    }
                    max-elements 8;
                    description
                      "Traffic Class Id";
                  }
                }  // container traffic-class
    
                container vlan {
                  if-feature matchnot-vlan;
                  description
                    "Match based on Vlan Ids";
                  leaf-list vlan-id {
                    type vlan-id-type;
                    max-elements 8;
                    description "Vlan Id";
                  }
                }  // container vlan
    
                container vlan-inner {
                  if-feature matchnot-vlan-inner;
                  description
                    "Match based on inner Vlan Ids";
                  leaf-list vlan-id {
                    type vlan-id-type;
                    max-elements 8;
                    description "inner Vlan Id";
                  }
                }  // container vlan-inner
    
                container vpls {
                  description
                    "Match based on VPLS fields";
                  container known {
                    if-feature matchnot-vpls-known;
                    presence "VPLS Known";
                    description "VPLS Known";
                  }  // container known
    
                  container unknown {
                    if-feature matchnot-vpls-unknown;
                    presence "VPLS Unknown";
                    description "VPLS Unknown";
                  }  // container unknown
    
                  container broadcast {
                    if-feature matchnot-vpls-bcast;
                    presence "VPLS Broadcast";
                    description "VPLS Broadcast";
                  }  // container broadcast
    
                  container control {
                    if-feature matchnot-vpls-control;
                    presence "VPLS Control";
                    description "VPLS Control";
                  }  // container control
    
                  container multicast {
                    if-feature matchnot-vpls-mcast;
                    presence "VPLS Multicast";
                    description "VPLS Multicast";
                  }  // container multicast
                }  // container vpls
              }  // container match-not
            }  // list qos
    
            list subscriber-control {
              must
                "(not(match-all) and not(match-any)) or match-all or match-any";
              key "class-map-name";
              description
                "Subscriber control class-map";
              leaf class-map-name {
                type string {
                  pattern
                    "[a-zA-Z0-9][a-zA-Z0-9\\._@$%+#:=<>\\-]{0,62}";
                }
                description
                  "Name of the class-map";
              }
    
              container match-all {
                presence
                  "Match all match criteria";
                description
                  "Match all match criteria";
              }  // container match-all
    
              container match-any {
                presence
                  "Match any match criteria (default)";
                description
                  "Match any match criteria (default)";
              }  // container match-any
    
              leaf description {
                type string;
                description
                  "Set description for this class-map";
              }
    
              container match {
                description
                  "Configure match criteria for this class.";
                leaf authen-status {
                  if-feature match-authen-status;
                  type enumeration {
                    enum "authenticated" {
                      value 0;
                      description
                        "Authenticated";
                    }
                    enum "unauthenticated" {
                      value 1;
                      description
                        "Unauthenticated";
                    }
                  }
                  description
                    "Authentication Status";
                }
    
                container circuit-id {
                  description
                    "Match based on circuit ID";
                  leaf-list value {
                    type string {
                      length "1..32";
                    }
                    description "circuit ID";
                  }
                }  // container circuit-id
    
                container circuit-id-regexp {
                  description
                    "Match based on circuit ID regular expression";
                  leaf-list value {
                    type string {
                      length "1..32";
                    }
                    description
                      "Circuit ID regular expression";
                  }
                }  // container circuit-id-regexp
    
                container dhcp-client-id {
                  description
                    "Match based on dhcp client id";
                  list client-id {
                    key "id flag";
                    description "client id";
                    leaf id {
                      type string {
                        length "1..32";
                      }
                      description "client id";
                    }
    
                    leaf flag {
                      type enumeration {
                        enum "ascii" {
                          value 0;
                          description
                            "Ascii value";
                        }
                        enum "hex" {
                          value 1;
                          description
                            "Hex value";
                        }
                        enum "none" {
                          value 2;
                          description
                            "No flag set";
                        }
                      }
                      description
                        "client id flag";
                    }
                  }  // list client-id
                }  // container dhcp-client-id
    
                container dhcp-client-id-regexp {
                  description
                    "Match based on dhcp client id regular expression";
                  list client-id {
                    key "id flag";
                    description
                      "client id with regular expression";
                    leaf id {
                      type string {
                        length "1..32";
                      }
                      description
                        "client id with regular expression";
                    }
    
                    leaf flag {
                      type enumeration {
                        enum "ascii" {
                          value 0;
                          description
                            "Ascii value";
                        }
                        enum "hex" {
                          value 1;
                          description
                            "Hex value";
                        }
                        enum "none" {
                          value 2;
                          description
                            "No flag set";
                        }
                      }
                      description
                        "client id flag";
                    }
                  }  // list client-id
                }  // container dhcp-client-id-regexp
    
                container domain {
                  description
                    "Match base on domain name";
                  list domain-name {
                    key "name format";
                    description "Domain name";
                    leaf name {
                      type string {
                        length "1..32";
                      }
                      description "Domain name";
                    }
    
                    leaf format {
                      type string {
                        length "1..32";
                      }
                      description
                        "Domain format name";
                    }
                  }  // list domain-name
                }  // container domain
    
                container domain-regexp {
                  description
                    "Match base on domain name with regular expression";
                  list domain-name {
                    key "regexp format";
                    description "Domain name";
                    leaf regexp {
                      type string {
                        length "1..32";
                      }
                      description
                        "Domain name with regular expression";
                    }
    
                    leaf format {
                      type string {
                        length "1..32";
                      }
                      description
                        "Domain format name";
                    }
                  }  // list domain-name
                }  // container domain-regexp
    
                container protocol {
                  description
                    "Match based on protocol";
                  leaf-list name {
                    if-feature match-proto;
                    type enumeration {
                      enum "dhcpv4" {
                        value 0;
                        description "dhcpv4";
                      }
                      enum "dhcpv6" {
                        value 1;
                        description "dhcpv6";
                      }
                      enum "ppp" {
                        value 2;
                        description "ppp";
                      }
                    }
                    max-elements 3;
                    description "protocol name";
                  }
                }  // container protocol
    
                container remote-id {
                  description
                    "Match based on remote ID";
                  leaf-list id {
                    type string {
                      length "1..32";
                    }
                    description "remote-id";
                  }
                }  // container remote-id
    
                container remote-id-regexp {
                  description
                    "Remote ID with regular expression";
                  leaf-list id {
                    type string {
                      length "1..32";
                    }
                    description
                      "remote-id with regular expression";
                  }
                }  // container remote-id-regexp
    
                container service-name {
                  description
                    "Match based on service name";
                  leaf-list name {
                    type string {
                      length "1..32";
                    }
                    description "Service name";
                  }
                }  // container service-name
    
                container service-name-regexp {
                  description
                    "Match based on service name with regular expression";
                  leaf-list name {
                    type string {
                      length "1..32";
                    }
                    description
                      "Service name with regular expression";
                  }
                }  // container service-name-regexp
    
                container source-address {
                  description
                    "Match based on source address";
                  container ipv4 {
                    if-feature match-src-addr-ipv4;
                    description
                      "Match based on source IPv4 address";
                    list address-prefix {
                      key "address netmask";
                      description "IPv4 address";
                      leaf address {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 address.";
                      }
    
                      leaf netmask {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 netmask.";
                      }
                    }  // list address-prefix
                  }  // container ipv4
    
                  container ipv6 {
                    if-feature match-src-addr-ipv6;
                    description
                      "Match based on source IPv6 address";
                    list address-prefix {
                      key "address prefix-length";
                      description "IPv6 address";
                      leaf address {
                        type inet:ipv6-address-no-zone;
                        description
                          "IPv6 address.";
                      }
    
                      leaf prefix-length {
                        type uint8 {
                          range "0..128";
                        }
                        description
                          "Length of the IPv6 Prefix.";
                      }
                    }  // list address-prefix
                  }  // container ipv6
    
                  leaf mac {
                    if-feature match-src-mac;
                    type yang:mac-address;
                    description "MAC Address";
                  }
                }  // container source-address
    
                container timer {
                  if-feature match-timer;
                  description
                    "Match based on timer";
                  leaf-list name {
                    type string {
                      length "1..32";
                    }
                    description "Timer name";
                  }
                }  // container timer
    
                container timer-regexp {
                  description
                    "Timer with regular expression";
                  leaf-list name {
                    type string {
                      length "1..32";
                    }
                    description
                      "Timer name with regular expression";
                  }
                }  // container timer-regexp
    
                container username {
                  if-feature match-username;
                  description
                    "Match based on user name";
                  leaf-list name {
                    type string {
                      length "1..32";
                    }
                    description "User name";
                  }
                }  // container username
    
                container username-regexp {
                  if-feature match-username;
                  description
                    "Match based on user name with regular expression";
                  leaf-list name {
                    type string {
                      length "1..32";
                    }
                    description
                      "User name with regular expression";
                  }
                }  // container username-regexp
              }  // container match
    
              container match-not {
                description
                  "Negate match criteria";
                leaf authen-status {
                  if-feature match-authen-status;
                  type enumeration {
                    enum "authenticated" {
                      value 0;
                      description
                        "Authenticated";
                    }
                    enum "unauthenticated" {
                      value 1;
                      description
                        "Unauthenticated";
                    }
                  }
                  description
                    "Authentication Status";
                }
    
                container circuit-id {
                  description
                    "Match based on circuit ID";
                  leaf-list value {
                    type string {
                      length "1..32";
                    }
                    description "circuit ID";
                  }
                }  // container circuit-id
    
                container circuit-id-regexp {
                  description
                    "Match based on circuit ID regular expression";
                  leaf-list value {
                    type string {
                      length "1..32";
                    }
                    description
                      "Circuit ID regular expression";
                  }
                }  // container circuit-id-regexp
    
                container dhcp-client-id {
                  description
                    "Match based on dhcp client id";
                  list client-id {
                    key "id flag";
                    description "client id";
                    leaf id {
                      type string {
                        length "1..32";
                      }
                      description "client id";
                    }
    
                    leaf flag {
                      type enumeration {
                        enum "ascii" {
                          value 0;
                          description
                            "Ascii value";
                        }
                        enum "hex" {
                          value 1;
                          description
                            "Hex value";
                        }
                        enum "none" {
                          value 2;
                          description
                            "No flag set";
                        }
                      }
                      description
                        "client id flag";
                    }
                  }  // list client-id
                }  // container dhcp-client-id
    
                container dhcp-client-id-regexp {
                  description
                    "Match based on dhcp client id regular expression";
                  list client-id {
                    key "id flag";
                    description
                      "client id with regular expression";
                    leaf id {
                      type string {
                        length "1..32";
                      }
                      description
                        "client id with regular expression";
                    }
    
                    leaf flag {
                      type enumeration {
                        enum "ascii" {
                          value 0;
                          description
                            "Ascii value";
                        }
                        enum "hex" {
                          value 1;
                          description
                            "Hex value";
                        }
                        enum "none" {
                          value 2;
                          description
                            "No flag set";
                        }
                      }
                      description
                        "client id flag";
                    }
                  }  // list client-id
                }  // container dhcp-client-id-regexp
    
                container domain {
                  description
                    "Match base on domain name";
                  list domain-name {
                    key "name format";
                    description "Domain name";
                    leaf name {
                      type string {
                        length "1..32";
                      }
                      description "Domain name";
                    }
    
                    leaf format {
                      type string {
                        length "1..32";
                      }
                      description
                        "Domain format name";
                    }
                  }  // list domain-name
                }  // container domain
    
                container domain-regexp {
                  description
                    "Match base on domain name with regular expression";
                  list domain-name {
                    key "regexp format";
                    description "Domain name";
                    leaf regexp {
                      type string {
                        length "1..32";
                      }
                      description
                        "Domain name with regular expression";
                    }
    
                    leaf format {
                      type string {
                        length "1..32";
                      }
                      description
                        "Domain format name";
                    }
                  }  // list domain-name
                }  // container domain-regexp
    
                container protocol {
                  description
                    "Match based on protocol";
                  leaf-list name {
                    if-feature match-proto;
                    type enumeration {
                      enum "dhcpv4" {
                        value 0;
                        description "dhcpv4";
                      }
                      enum "dhcpv6" {
                        value 1;
                        description "dhcpv6";
                      }
                      enum "ppp" {
                        value 2;
                        description "ppp";
                      }
                    }
                    max-elements 3;
                    description "protocol name";
                  }
                }  // container protocol
    
                container remote-id {
                  description
                    "Match based on remote ID";
                  leaf-list id {
                    type string {
                      length "1..32";
                    }
                    description "remote-id";
                  }
                }  // container remote-id
    
                container remote-id-regexp {
                  description
                    "Remote ID with regular expression";
                  leaf-list id {
                    type string {
                      length "1..32";
                    }
                    description
                      "remote-id with regular expression";
                  }
                }  // container remote-id-regexp
    
                container service-name {
                  description
                    "Match based on service name";
                  leaf-list name {
                    type string {
                      length "1..32";
                    }
                    description "Service name";
                  }
                }  // container service-name
    
                container service-name-regexp {
                  description
                    "Match based on service name with regular expression";
                  leaf-list name {
                    type string {
                      length "1..32";
                    }
                    description
                      "Service name with regular expression";
                  }
                }  // container service-name-regexp
    
                container source-address {
                  description
                    "Match based on source address";
                  container ipv4 {
                    if-feature match-src-addr-ipv4;
                    description
                      "Match based on source IPv4 address";
                    list address-prefix {
                      key "address netmask";
                      description "IPv4 address";
                      leaf address {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 address.";
                      }
    
                      leaf netmask {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 netmask.";
                      }
                    }  // list address-prefix
                  }  // container ipv4
    
                  container ipv6 {
                    if-feature match-src-addr-ipv6;
                    description
                      "Match based on source IPv6 address";
                    list address-prefix {
                      key "address prefix-length";
                      description "IPv6 address";
                      leaf address {
                        type inet:ipv6-address-no-zone;
                        description
                          "IPv6 address.";
                      }
    
                      leaf prefix-length {
                        type uint8 {
                          range "0..128";
                        }
                        description
                          "Length of the IPv6 Prefix.";
                      }
                    }  // list address-prefix
                  }  // container ipv6
    
                  leaf mac {
                    if-feature match-src-mac;
                    type yang:mac-address;
                    description "MAC Address";
                  }
                }  // container source-address
    
                container timer {
                  if-feature match-timer;
                  description
                    "Match based on timer";
                  leaf-list name {
                    type string {
                      length "1..32";
                    }
                    description "Timer name";
                  }
                }  // container timer
    
                container timer-regexp {
                  description
                    "Timer with regular expression";
                  leaf-list name {
                    type string {
                      length "1..32";
                    }
                    description
                      "Timer name with regular expression";
                  }
                }  // container timer-regexp
    
                container username {
                  if-feature match-username;
                  description
                    "Match based on user name";
                  leaf-list name {
                    type string {
                      length "1..32";
                    }
                    description "User name";
                  }
                }  // container username
    
                container username-regexp {
                  if-feature match-username;
                  description
                    "Match based on user name with regular expression";
                  leaf-list name {
                    type string {
                      length "1..32";
                    }
                    description
                      "User name with regular expression";
                  }
                }  // container username-regexp
              }  // container match-not
            }  // list subscriber-control
    
            list traffic {
              if-feature cmap-type-traffic;
              must
                "not(match-all and match-any)";
              key "class-map-name";
              description "Traffic class-map";
              leaf class-map-name {
                type string {
                  pattern
                    "[a-zA-Z0-9][a-zA-Z0-9\\._@$%+#:=<>\\-]{0,62}";
                }
                description
                  "Name of the class-map";
              }
    
              container match-all {
                presence
                  "Match all match criteria";
                description
                  "Match all match criteria";
              }  // container match-all
    
              container match-any {
                presence
                  "Match any match criteria (default)";
                description
                  "Match any match criteria (default)";
              }  // container match-any
    
              leaf description {
                type string;
                description
                  "Set description for this class-map";
              }
    
              container match {
                description
                  "Configure match criteria for this class.";
                container access-group {
                  description
                    "Match access group";
                  leaf-list ipv4 {
                    if-feature match-ipv4-acl;
                    type acl-list-name-type;
                    description
                      "IPv4 access list";
                  }
    
                  leaf-list ipv6 {
                    if-feature match-ipv6-acl;
                    type acl-list-name-type;
                    description
                      "IPv6 access list";
                  }
    
                  leaf-list ethernet-services {
                    if-feature match-ethernet-services-acl;
                    type acl-list-name-type;
                    description
                      "Ethernet-Services";
                  }
                }  // container access-group
    
                container atm {
                  if-feature match-atm;
                  description
                    "Match based on ATM specific criteria";
                  leaf-list clp {
                    type uint8 {
                      range "0..1";
                    }
                    max-elements 2;
                    ordered-by user;
                    description
                      "Match ATM CLP bit";
                  }
    
                  container oam {
                    presence "Match ATM OAM";
                    description "Match ATM OAM";
                  }  // container oam
                }  // container atm
    
                container cos {
                  if-feature match-cos;
                  description
                    "Match based on IEEE 802.1Q/ISL Class Of Service value";
                  leaf-list value {
                    type uint8 {
                      range "0..7";
                    }
                    max-elements 8;
                    description "COS value";
                  }
                }  // container cos
    
                container cos-inner {
                  if-feature match-cos-inner;
                  description
                    "Match inner cos values";
                  leaf-list value {
                    type uint8 {
                      range "0..7";
                    }
                    max-elements 8;
                    description
                      "inner cos value (Upto 8 values)";
                  }
                }  // container cos-inner
    
                leaf dei {
                  if-feature match-dei;
                  type uint8 {
                    range "0..1";
                  }
                  must "not(../dei-inner)";
                  description
                    "Match based on DEI bit (0/1)";
                }
    
                leaf dei-inner {
                  if-feature match-dei-inner;
                  type uint8 {
                    range "0..1";
                  }
                  must "not(../dei)";
                  description
                    "Match inner based on DEI bit (0/1)";
                }
    
                container destination-address {
                  description
                    "Match based on destination address";
                  container ipv4 {
                    if-feature match-dst-addr-ipv4;
                    description
                      "Match based on destination IPv4 address";
                    list address-prefix {
                      key "address netmask";
                      description "IPv4 address";
                      leaf address {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 address.";
                      }
    
                      leaf netmask {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 netmask.";
                      }
                    }  // list address-prefix
                  }  // container ipv4
    
                  container ipv6 {
                    if-feature match-dst-addr-ipv6;
                    description
                      "Match based on destination IPv6 address";
                    list address-prefix {
                      key "address prefix-length";
                      description "IPv6 address";
                      leaf address {
                        type inet:ipv6-address-no-zone;
                        description
                          "IPv6 address.";
                      }
    
                      leaf prefix-length {
                        type uint8 {
                          range "0..128";
                        }
                        description
                          "Length of the IPv6 Prefix.";
                      }
                    }  // list address-prefix
                  }  // container ipv6
    
                  leaf mac {
                    if-feature match-dst-mac;
                    type yang:mac-address;
                    description "MAC Address";
                  }
                }  // container destination-address
    
                container destination-port {
                  if-feature match-destination-port;
                  description
                    "Match based on destination port";
                  leaf-list port-number {
                    type port-number-type;
                    max-elements 5;
                    description
                      "destination port";
                  }
                }  // container destination-port
    
                container dscp {
                  if-feature match-dscp;
                  description
                    "Match based on IP DSCP value";
                  leaf-list value {
                    type dscp-value;
                    description "DSCP value";
                  }
                }  // container dscp
    
                container dscp-ipv4 {
                  if-feature match-ipv4-dscp;
                  description
                    "Match based on IPv4 DSCP value";
                  leaf-list value {
                    type dscp-value;
                    description "DSCP value";
                  }
                }  // container dscp-ipv4
    
                container dscp-ipv6 {
                  if-feature match-ipv6-dscp;
                  description
                    "Match based on IPv6 DSCP value";
                  leaf-list value {
                    type dscp-value;
                    description "DSCP value";
                  }
                }  // container dscp-ipv6
    
                container ethertype {
                  if-feature match-ethertype;
                  description
                    "Match based on ethertype";
                  leaf-list value {
                    type union {
                      type uint16 {
                        range "1536..65535";
                      }
                      type enumeration {
                        enum "arp" {
                          value 0;
                          description
                            "Any ARP Ethertype";
                        }
                        enum "ipv4" {
                          value 1;
                          description
                            "Any IPv4 Ethertype";
                        }
                        enum "ipv6" {
                          value 2;
                          description
                            "Any IPv6 Ethertype";
                        }
                      }
                    }
                    max-elements 8;
                    description
                      "Ethertype Value";
                  }
                }  // container ethertype
    
                container flow-key {
                  if-feature match-flow-key;
                  description
                    "Match based on flow keys";
                  container five-tuple {
                    must
                      "not(../dst-ip or ../src-ip)";
                    presence
                      "Five tuples to identify a flow";
                    description
                      "Five tuples to identify a flow";
                  }  // container five-tuple
    
                  container dst-ip {
                    must "not(../five-tuple)";
                    presence
                      "Destination IP address";
                    description
                      "Destination IP address";
                  }  // container dst-ip
    
                  container src-ip {
                    must "not(../five-tuple)";
                    presence "Source IP address";
                    description
                      "Source IP address";
                  }  // container src-ip
    
                  container flow-cache {
                    description
                      "Configure the flow-cache parameters";
                    leaf idle-timeout {
                      type union {
                        type uint16 {
                          range "1..65534";
                        }
                        type enumeration {
                          enum "None" {
                            value 0;
                            description
                              "The flow does not expire";
                          }
                        }
                      }
                      description
                        "Maximum time of inactivity for a flow.";
                    }
                  }  // container flow-cache
                }  // container flow-key
    
                container flow-tag {
                  if-feature matchnot-flow-tag;
                  description
                    "Match based on flow-tag";
                  leaf-list tag-number {
                    type union {
                      type uint8 {
                        range "1..63";
                      }
                      type string {
                        pattern
                          "([1-9][0-9]{0,1})-([1-9][0-9]{0,1})";
                      }
                    }
                    max-elements 5;
                    description
                      "flow-tag number";
                  }
                }  // container flow-tag
    
                leaf fr-de {
                  if-feature match-fr-de;
                  type union {
                    type string {
                      pattern "1";
                    }
                    type uint8 {
                      range "0..1";
                    }
                  }
                  description
                    "Match based on FrameRelay DE bit";
                }
    
                container fragment-type {
                  if-feature match-fragment-type;
                  description
                    "Fragment type for a packet";
                  container dont-fragment {
                    presence
                      "Match don't-Fragment bit";
                    description
                      "Match don't-Fragment bit";
                  }  // container dont-fragment
    
                  container first-fragment {
                    presence
                      "Match first fragment bit";
                    description
                      "Match first fragment bit";
                  }  // container first-fragment
    
                  container is-fragment {
                    presence
                      "Match is-fragment bit";
                    description
                      "Match is-fragment bit";
                  }  // container is-fragment
    
                  container last-fragment {
                    presence
                      "Match last fragment bit";
                    description
                      "Match last fragment bit";
                  }  // container last-fragment
                }  // container fragment-type
    
                container frame-relay {
                  if-feature match-fr;
                  description
                    "Match based on frame-relay specific criteria";
                  leaf-list dlci {
                    type union {
                      type uint16 {
                        range "16..1007";
                      }
                      type string {
                        pattern
                          "([1-9][0-9]{1,3})-([1-9][0-9]{1,3})";
                      }
                    }
                    max-elements 8;
                    description
                      "Match frame-relay dlci value(s)";
                  }
                }  // container frame-relay
    
                container ipv4 {
                  description
                    "Match based on ipv4 icmp";
                  container icmp-code {
                    description
                      "Match based on ipv4 icmp code";
                    leaf-list value {
                      type union {
                        type uint8 {
                          range "0..255";
                        }
                        type string {
                          pattern
                            "([0-9]{1,3})-([0-9]{1,3})";
                        }
                      }
                      max-elements 5;
                      description
                        "IPv4 ICMP code";
                    }
                  }  // container icmp-code
    
                  container icmp-type {
                    description
                      "Match based on ipv4 icmp type";
                    leaf-list value {
                      type union {
                        type uint8 {
                          range "0..255";
                        }
                        type string {
                          pattern
                            "([0-9]{1,3})-([0-9]{1,3})";
                        }
                      }
                      max-elements 5;
                      description
                        "IPv4 ICMP type";
                    }
                  }  // container icmp-type
                }  // container ipv4
    
                container ipv6 {
                  description
                    "Match based on IPv6";
                  container icmp-code {
                    description "IPv6 ICMP code";
                    leaf-list value {
                      type union {
                        type uint8 {
                          range "0..255";
                        }
                        type string {
                          pattern
                            "([0-9]{1,3})-([0-9]{1,3})";
                        }
                      }
                      max-elements 5;
                      description "ICMP code";
                    }
                  }  // container icmp-code
    
                  container icmp-type {
                    description "IPv6 ICMP type";
                    leaf-list value {
                      type union {
                        type uint8 {
                          range "0..255";
                        }
                        type string {
                          pattern
                            "([0-9]{1,3})-([0-9]{1,3})";
                        }
                      }
                      max-elements 5;
                      description "ICMP type";
                    }
                  }  // container icmp-type
                }  // container ipv6
    
                container mpls {
                  description
                    "Match based on MPLS specific values";
                  container disposition {
                    description
                      "Match MPLS Label Disposition";
                    container access-group {
                      description "access group";
                      leaf ipv4 {
                        if-feature match-mpls-disp-ipv4-acl;
                        type string {
                          length "1..64";
                        }
                        description
                          "IPv4 access list";
                      }
    
                      leaf ipv6 {
                        if-feature match-mpls-disp-ipv6-acl;
                        type string {
                          length "1..64";
                        }
                        description
                          "IPv6 access list";
                      }
                    }  // container access-group
    
                    leaf class-map {
                      if-feature match-mpls-disp-cmap;
                      type string {
                        length "1..32";
                      }
                      description
                        "class-map name";
                    }
                  }  // container disposition
    
                  container experimental {
                    description
                      "Match MPLS experimental values";
                    container imposition {
                      if-feature match-mpls-exp-imposition;
                      description
                        "Match imposition label";
                      leaf-list label {
                        type uint8 {
                          range "0..7";
                        }
                        max-elements 8;
                        description
                          "MPLS experimental label";
                      }
                    }  // container imposition
    
                    container topmost {
                      if-feature match-mpls-exp-top;
                      description
                        "Match topmost label";
                      leaf-list label {
                        type uint8 {
                          range "0..7";
                        }
                        max-elements 8;
                        description
                          "MPLS experimental label";
                      }
                    }  // container topmost
                  }  // container experimental
                }  // container mpls
    
                container packet {
                  description
                    "Match based on packet length";
                  container length {
                    description "Packet length";
                    leaf-list value {
                      type packet-length-type;
                      max-elements 5;
                      description
                        "IP Packet Length";
                    }
                  }  // container length
    
                  container length-ipv4 {
                    if-feature match-ipv4-packet-length;
                    description
                      "IPV4 Packet Length";
                    leaf-list value {
                      type packet-length-type;
                      max-elements 5;
                    }
                  }  // container length-ipv4
    
                  container length-ipv6 {
                    if-feature match-ipv6-packet-length;
                    description
                      "IPV6 Packet Length";
                    leaf-list value {
                      type packet-length-type;
                      max-elements 5;
                    }
                  }  // container length-ipv6
                }  // container packet
    
                container precedence {
                  if-feature match-prec;
                  description
                    "Match based on IP precedence values";
                  leaf-list value {
                    type precedence-type;
                    max-elements 8;
                    description "IP precedence";
                  }
                }  // container precedence
    
                container precedence-ipv4 {
                  if-feature match-ipv4-prec;
                  description
                    "Match based on IPV4 precedence";
                  leaf-list value {
                    type precedence-type;
                    max-elements 8;
                    description
                      "IPV4 precedence";
                  }
                }  // container precedence-ipv4
    
                container precedence-ipv6 {
                  if-feature match-ipv6-prec;
                  description
                    "Match based on IPV6 precedence";
                  leaf-list value {
                    type precedence-type;
                    max-elements 8;
                    description
                      "IPV6 precedence";
                  }
                }  // container precedence-ipv6
    
                container protocol {
                  description
                    "Match based on L3 protocol (Upto 8 values or ranges)";
                  leaf-list number {
                    type protocol-type;
                    max-elements 8;
                    description
                      "Protocol Number";
                  }
                }  // container protocol
    
                container source-address {
                  description
                    "Match based on source address";
                  container ipv4 {
                    if-feature match-src-addr-ipv4;
                    description
                      "Match based on source IPv4 address";
                    list address-prefix {
                      key "address netmask";
                      description "IPv4 address";
                      leaf address {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 address.";
                      }
    
                      leaf netmask {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 netmask.";
                      }
                    }  // list address-prefix
                  }  // container ipv4
    
                  container ipv6 {
                    if-feature match-src-addr-ipv6;
                    description
                      "Match based on source IPv6 address";
                    list address-prefix {
                      key "address prefix-length";
                      description "IPv6 address";
                      leaf address {
                        type inet:ipv6-address-no-zone;
                        description
                          "IPv6 address.";
                      }
    
                      leaf prefix-length {
                        type uint8 {
                          range "0..128";
                        }
                        description
                          "Length of the IPv6 Prefix.";
                      }
                    }  // list address-prefix
                  }  // container ipv6
    
                  leaf mac {
                    if-feature match-src-mac;
                    type yang:mac-address;
                    description "MAC Address";
                  }
                }  // container source-address
    
                container source-port {
                  if-feature match-source-port;
                  description
                    "Match based on source port";
                  leaf-list number {
                    type port-number-type;
                    max-elements 5;
                    description "source port";
                  }
                }  // container source-port
    
                container tcp-flag {
                  description
                    "Match based on TCP flags";
                  leaf value {
                    type uint16 {
                      range "0..4095";
                    }
                    description
                      "TCP flags value";
                  }
    
                  container any {
                    presence
                      "Match based on any bit set";
                    description
                      "Match based on any bit set";
                  }  // container any
                }  // container tcp-flag
    
                container vlan {
                  if-feature match-vlan;
                  description
                    "Match based on Vlan Ids";
                  leaf-list vlan-id {
                    type vlan-id-type;
                    max-elements 8;
                    description "Vlan Id";
                  }
                }  // container vlan
    
                container vlan-inner {
                  if-feature match-vlan-inner;
                  description
                    "Match based on inner Vlan Ids";
                  leaf-list vlan-id {
                    type vlan-id-type;
                    max-elements 8;
                    description "inner Vlan Id";
                  }
                }  // container vlan-inner
    
                container vpls {
                  description
                    "Match based on VPLS fields";
                  container known {
                    if-feature match-vpls-known;
                    presence "VPLS Known";
                    description "VPLS Known";
                  }  // container known
    
                  container unknown {
                    if-feature match-vpls-unknown;
                    presence "VPLS Unknown";
                    description "VPLS Unknown";
                  }  // container unknown
    
                  container broadcast {
                    presence "VPLS Broadcast";
                    description "VPLS Broadcast";
                  }  // container broadcast
    
                  container control {
                    if-feature match-vpls-control;
                    presence "VPLS Control";
                    description "VPLS Control";
                  }  // container control
    
                  container multicast {
                    presence "VPLS Multicast";
                    description "VPLS Multicast";
                  }  // container multicast
                }  // container vpls
              }  // container match
    
              container match-not {
                description
                  "Negate match criteria";
                container access-group {
                  description
                    "Match access group";
                  leaf-list ipv4 {
                    if-feature match-ipv4-acl;
                    type acl-list-name-type;
                    description
                      "IPv4 access list";
                  }
    
                  leaf-list ipv6 {
                    if-feature match-ipv6-acl;
                    type acl-list-name-type;
                    description
                      "IPv6 access list";
                  }
    
                  leaf-list ethernet-services {
                    if-feature match-ethernet-services-acl;
                    type acl-list-name-type;
                    description
                      "Ethernet-Services";
                  }
                }  // container access-group
    
                container atm {
                  if-feature match-atm;
                  description
                    "Match based on ATM specific criteria";
                  leaf-list clp {
                    type uint8 {
                      range "0..1";
                    }
                    max-elements 2;
                    ordered-by user;
                    description
                      "Match ATM CLP bit";
                  }
    
                  container oam {
                    presence "Match ATM OAM";
                    description "Match ATM OAM";
                  }  // container oam
                }  // container atm
    
                container cos {
                  if-feature match-cos;
                  description
                    "Match based on IEEE 802.1Q/ISL Class Of Service value";
                  leaf-list value {
                    type uint8 {
                      range "0..7";
                    }
                    max-elements 8;
                    description "COS value";
                  }
                }  // container cos
    
                container cos-inner {
                  if-feature match-cos-inner;
                  description
                    "Match inner cos values";
                  leaf-list value {
                    type uint8 {
                      range "0..7";
                    }
                    max-elements 8;
                    description
                      "inner cos value (Upto 8 values)";
                  }
                }  // container cos-inner
    
                leaf dei {
                  if-feature match-dei;
                  type uint8 {
                    range "0..1";
                  }
                  must "not(../dei-inner)";
                  description
                    "Match based on DEI bit (0/1)";
                }
    
                leaf dei-inner {
                  if-feature match-dei-inner;
                  type uint8 {
                    range "0..1";
                  }
                  must "not(../dei)";
                  description
                    "Match inner based on DEI bit (0/1)";
                }
    
                container destination-address {
                  description
                    "Match based on destination address";
                  container ipv4 {
                    description
                      "Match based on destination IPv4 address";
                    list address-prefix {
                      key "address netmask";
                      description "IPv4 address";
                      leaf address {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 address.";
                      }
    
                      leaf netmask {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 netmask.";
                      }
                    }  // list address-prefix
                  }  // container ipv4
    
                  container ipv6 {
                    description
                      "Match based on destination IPv6 address";
                    list address-prefix {
                      key "address prefix-length";
                      description "IPv6 address";
                      leaf address {
                        type inet:ipv6-address-no-zone;
                        description
                          "IPv6 address.";
                      }
    
                      leaf prefix-length {
                        type uint8 {
                          range "0..128";
                        }
                        description
                          "Length of the IPv6 Prefix.";
                      }
                    }  // list address-prefix
                  }  // container ipv6
    
                  leaf mac {
                    if-feature matchnot-mac-address;
                    type yang:mac-address;
                    description "MAC Address";
                  }
                }  // container destination-address
    
                container destination-port {
                  if-feature match-destination-port;
                  description
                    "Match based on destination port";
                  leaf-list port-number {
                    type port-number-type;
                    max-elements 5;
                    description
                      "destination port";
                  }
                }  // container destination-port
    
                container dscp {
                  if-feature match-dscp;
                  description
                    "Match based on IP DSCP value";
                  leaf-list value {
                    type dscp-value;
                    description "DSCP value";
                  }
                }  // container dscp
    
                container dscp-ipv4 {
                  if-feature match-ipv4-dscp;
                  description
                    "Match based on IPv4 DSCP value";
                  leaf-list value {
                    type dscp-value;
                    description "DSCP value";
                  }
                }  // container dscp-ipv4
    
                container dscp-ipv6 {
                  if-feature match-ipv6-dscp;
                  description
                    "Match based on IPv6 DSCP value";
                  leaf-list value {
                    type dscp-value;
                    description "DSCP value";
                  }
                }  // container dscp-ipv6
    
                container ethertype {
                  if-feature match-ethertype;
                  description
                    "Match based on ethertype";
                  leaf-list value {
                    type union {
                      type uint16 {
                        range "1536..65535";
                      }
                      type enumeration {
                        enum "arp" {
                          value 0;
                          description
                            "Any ARP Ethertype";
                        }
                        enum "ipv4" {
                          value 1;
                          description
                            "Any IPv4 Ethertype";
                        }
                        enum "ipv6" {
                          value 2;
                          description
                            "Any IPv6 Ethertype";
                        }
                      }
                    }
                    max-elements 8;
                    description
                      "Ethertype Value";
                  }
                }  // container ethertype
    
                container flow-tag {
                  if-feature matchnot-flow-tag;
                  description
                    "Match based on flow-tag";
                  leaf-list tag-number {
                    type union {
                      type uint8 {
                        range "1..63";
                      }
                      type string {
                        pattern
                          "([1-9][0-9]{0,1})-([1-9][0-9]{0,1})";
                      }
                    }
                    max-elements 5;
                    description
                      "flow-tag number";
                  }
                }  // container flow-tag
    
                leaf fr-de {
                  if-feature match-fr-de;
                  type union {
                    type string {
                      pattern "1";
                    }
                    type uint8 {
                      range "0..1";
                    }
                  }
                  description
                    "Match based on FrameRelay DE bit";
                }
    
                container fragment-type {
                  if-feature match-fragment-type;
                  description
                    "Fragment type for a packet";
                  container dont-fragment {
                    presence
                      "Match don't-Fragment bit";
                    description
                      "Match don't-Fragment bit";
                  }  // container dont-fragment
    
                  container first-fragment {
                    presence
                      "Match first fragment bit";
                    description
                      "Match first fragment bit";
                  }  // container first-fragment
    
                  container is-fragment {
                    presence
                      "Match is-fragment bit";
                    description
                      "Match is-fragment bit";
                  }  // container is-fragment
    
                  container last-fragment {
                    presence
                      "Match last fragment bit";
                    description
                      "Match last fragment bit";
                  }  // container last-fragment
                }  // container fragment-type
    
                container frame-relay {
                  if-feature match-fr;
                  description
                    "Match based on frame-relay specific criteria";
                  leaf-list dlci {
                    type union {
                      type uint16 {
                        range "16..1007";
                      }
                      type string {
                        pattern
                          "([1-9][0-9]{1,3})-([1-9][0-9]{1,3})";
                      }
                    }
                    max-elements 8;
                    description
                      "Match frame-relay dlci value(s)";
                  }
                }  // container frame-relay
    
                container ipv4 {
                  description
                    "Match based on ipv4 icmp";
                  container icmp-code {
                    description
                      "Match based on ipv4 icmp code";
                    leaf-list value {
                      type union {
                        type uint8 {
                          range "0..255";
                        }
                        type string {
                          pattern
                            "([0-9]{1,3})-([0-9]{1,3})";
                        }
                      }
                      max-elements 5;
                      description
                        "IPv4 ICMP code";
                    }
                  }  // container icmp-code
    
                  container icmp-type {
                    description
                      "Match based on ipv4 icmp type";
                    leaf-list value {
                      type union {
                        type uint8 {
                          range "0..255";
                        }
                        type string {
                          pattern
                            "([0-9]{1,3})-([0-9]{1,3})";
                        }
                      }
                      max-elements 5;
                      description
                        "IPv4 ICMP type";
                    }
                  }  // container icmp-type
                }  // container ipv4
    
                container ipv6 {
                  description
                    "Match based on IPv6";
                  container icmp-code {
                    description "IPv6 ICMP code";
                    leaf-list value {
                      type union {
                        type uint8 {
                          range "0..255";
                        }
                        type string {
                          pattern
                            "([0-9]{1,3})-([0-9]{1,3})";
                        }
                      }
                      max-elements 5;
                      description "ICMP code";
                    }
                  }  // container icmp-code
    
                  container icmp-type {
                    description "IPv6 ICMP type";
                    leaf-list value {
                      type union {
                        type uint8 {
                          range "0..255";
                        }
                        type string {
                          pattern
                            "([0-9]{1,3})-([0-9]{1,3})";
                        }
                      }
                      max-elements 5;
                      description "ICMP type";
                    }
                  }  // container icmp-type
                }  // container ipv6
    
                container mpls {
                  description
                    "Match based on MPLS specific values";
                  container disposition {
                    description
                      "Match MPLS Label Disposition";
                    container access-group {
                      description "access group";
                      leaf ipv4 {
                        if-feature matchnot-mpls-disp-ipv4-acl;
                        type string {
                          length "1..64";
                        }
                        description
                          "IPv4 access list";
                      }
    
                      leaf ipv6 {
                        if-feature matchnot-mpls-disp-ipv6-acl;
                        type string {
                          length "1..64";
                        }
                        description
                          "IPv6 access list";
                      }
                    }  // container access-group
                  }  // container disposition
    
                  container experimental {
                    description
                      "Match MPLS experimental values";
                    container topmost {
                      description
                        "Match topmost label";
                      leaf-list label {
                        type uint8 {
                          range "0..7";
                        }
                        max-elements 8;
                        description
                          "MPLS experimental label";
                      }
                    }  // container topmost
                  }  // container experimental
                }  // container mpls
    
                container packet {
                  description
                    "Match based on packet length";
                  container length {
                    description "Packet length";
                    leaf-list value {
                      type packet-length-type;
                      max-elements 5;
                      description
                        "IP Packet Length";
                    }
                  }  // container length
    
                  container length-ipv4 {
                    if-feature matchnot-ipv4-packet-length;
                    description
                      "IPV4 Packet Length";
                    leaf-list value {
                      type packet-length-type;
                      max-elements 5;
                    }
                  }  // container length-ipv4
    
                  container length-ipv6 {
                    if-feature matchnot-ipv6-packet-length;
                    description
                      "IPV6 Packet Length";
                    leaf-list value {
                      type packet-length-type;
                      max-elements 5;
                    }
                  }  // container length-ipv6
                }  // container packet
    
                container precedence {
                  if-feature match-prec;
                  description
                    "Match based on IP precedence values";
                  leaf-list value {
                    type precedence-type;
                    max-elements 8;
                    description "IP precedence";
                  }
                }  // container precedence
    
                container precedence-ipv4 {
                  if-feature match-ipv4-prec;
                  description
                    "Match based on IPV4 precedence";
                  leaf-list value {
                    type precedence-type;
                    max-elements 8;
                    description
                      "IPV4 precedence";
                  }
                }  // container precedence-ipv4
    
                container precedence-ipv6 {
                  if-feature match-ipv6-prec;
                  description
                    "Match based on IPV6 precedence";
                  leaf-list value {
                    type precedence-type;
                    max-elements 8;
                    description
                      "IPV6 precedence";
                  }
                }  // container precedence-ipv6
    
                container protocol {
                  description
                    "Match based on L3 protocol (Upto 8 values or ranges)";
                  leaf-list number {
                    type protocol-type;
                    max-elements 8;
                    description
                      "Protocol Number";
                  }
                }  // container protocol
    
                container source-address {
                  description
                    "Match based on source address";
                  container ipv4 {
                    description
                      "Match based on source IPv4 address";
                    list address-prefix {
                      key "address netmask";
                      description "IPv4 address";
                      leaf address {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 address.";
                      }
    
                      leaf netmask {
                        type inet:ipv4-address-no-zone;
                        description
                          "IPv4 netmask.";
                      }
                    }  // list address-prefix
                  }  // container ipv4
    
                  container ipv6 {
                    description
                      "Match based on source IPv6 address";
                    list address-prefix {
                      key "address prefix-length";
                      description "IPv6 address";
                      leaf address {
                        type inet:ipv6-address-no-zone;
                        description
                          "IPv6 address.";
                      }
    
                      leaf prefix-length {
                        type uint8 {
                          range "0..128";
                        }
                        description
                          "Length of the IPv6 Prefix.";
                      }
                    }  // list address-prefix
                  }  // container ipv6
    
                  leaf mac {
                    if-feature matchnot-mac-address;
                    type yang:mac-address;
                    description "MAC Address";
                  }
                }  // container source-address
    
                container source-port {
                  if-feature match-source-port;
                  description
                    "Match based on source port";
                  leaf-list number {
                    type port-number-type;
                    max-elements 5;
                    description "source port";
                  }
                }  // container source-port
    
                container tcp-flag {
                  description
                    "Match based on TCP flags";
                  leaf value {
                    type uint16 {
                      range "0..4095";
                    }
                    description
                      "TCP flags value";
                  }
    
                  container any {
                    presence
                      "Match based on any bit set";
                    description
                      "Match based on any bit set";
                  }  // container any
                }  // container tcp-flag
    
                container vlan {
                  if-feature matchnot-vlan;
                  description
                    "Match based on Vlan Ids";
                  leaf-list vlan-id {
                    type vlan-id-type;
                    max-elements 8;
                    description "Vlan Id";
                  }
                }  // container vlan
    
                container vlan-inner {
                  if-feature matchnot-vlan-inner;
                  description
                    "Match based on inner Vlan Ids";
                  leaf-list vlan-id {
                    type vlan-id-type;
                    max-elements 8;
                    description "inner Vlan Id";
                  }
                }  // container vlan-inner
    
                container vpls {
                  description
                    "Match based on VPLS fields";
                  container known {
                    if-feature matchnot-vpls-known;
                    presence "VPLS Known";
                    description "VPLS Known";
                  }  // container known
    
                  container unknown {
                    if-feature matchnot-vpls-unknown;
                    presence "VPLS Unknown";
                    description "VPLS Unknown";
                  }  // container unknown
    
                  container broadcast {
                    if-feature matchnot-vpls-bcast;
                    presence "VPLS Broadcast";
                    description "VPLS Broadcast";
                  }  // container broadcast
    
                  container control {
                    if-feature matchnot-vpls-control;
                    presence "VPLS Control";
                    description "VPLS Control";
                  }  // container control
    
                  container multicast {
                    if-feature matchnot-vpls-mcast;
                    presence "VPLS Multicast";
                    description "VPLS Multicast";
                  }  // container multicast
                }  // container vpls
              }  // container match-not
            }  // list traffic
          }  // container type
        }  // container class-map
    
        container policy-map {
          description "Configure a policy-map";
          container type {
            description "policy-map type";
            list accounting {
              if-feature pmap-type-accounting;
              key "policy-map-name";
              description
                "Accounting policy-map";
              leaf policy-map-name {
                type string;
                description
                  "Name of the policymap";
              }
    
              leaf description {
                type string;
                description
                  "Set description for this policy-map";
              }
    
              list class {
                key "name type";
                leaf name {
                  type string {
                    pattern
                      "[a-zA-Z0-9][a-zA-Z0-9\\._@$%+#:=<>\\-]{0,62}";
                  }
                  description
                    "Name of the class-map";
                }
    
                leaf type {
                  type enumeration {
                    enum "traffic" {
                      value 3;
                      description
                        "Traffic Classmap.";
                    }
                  }
                  description
                    "The type of classmap";
                }
              }  // list class
            }  // list accounting
    
            list subscriber-control {
              if-feature pmap-type-control;
              key "policy-map-name";
              description
                "Subscriber control policy-map";
              leaf policy-map-name {
                type string;
                description
                  "Name of the policymap";
              }
    
              leaf description {
                type string;
                description
                  "Set description for this policy-map";
              }
    
              list event {
                must
                  "not(match-all and match-first)";
                key "type";
                description "Policy event";
                leaf type {
                  type event-type;
                  description
                    "Policy event type";
                }
    
                container match-all {
                  presence
                    "Execute all the matched classes";
                  description
                    "Execute all the matched classes";
                }  // container match-all
    
                container match-first {
                  presence
                    "Execute only the first matched class";
                  description
                    "Execute only the first matched class";
                }  // container match-first
    
                list class {
                  key "name type";
                  description "Class-map";
                  leaf name {
                    type string {
                      pattern
                        "[a-zA-Z0-9][a-zA-Z0-9\\._@$%+#:=<>\\-]{0,62}";
                    }
                    description
                      "Name of the class-map";
                  }
    
                  leaf type {
                    type enumeration {
                      enum "subscriber-control" {
                        value 4;
                        description
                          "Control Subscriber Classmap.";
                      }
                    }
                    description
                      "The type of classmap";
                  }
    
                  leaf action-strategy {
                    type enumeration {
                      enum "do-all" {
                        value 0;
                        description
                          "Do all actions";
                      }
                      enum "do-until-failure" {
                        value 1;
                        description
                          "Do all actions until failure";
                      }
                      enum "do-until-success" {
                        value 2;
                        description
                          "Do all actions until success";
                      }
                    }
                    description
                      "Strategy to execute class-map actions";
                  }
    
                  list action {
                    key "sequence-number";
                    leaf sequence-number {
                      type uint16 {
                        range "1..65535";
                      }
                      description
                        "Sequence number for this action";
                    }
    
                    container activate {
                      description "Activate";
                      container dynamic-template {
                        description
                          "actions related to dynamic templates";
                        leaf template-name {
                          type string;
                          description
                            "Dynamic template name";
                        }
    
                        container aaa {
                          description
                            "AAA specification";
                          leaf list {
                            type union {
                              type string;
                              type enumeration {
                                enum "default" {
                                  value 0;
                                  description
                                    "default AAA method list";
                                }
                              }
                            }
                            description
                              "Specify AAA method list that authentication should be made with";
                          }
                        }  // container aaa
                      }  // container dynamic-template
                    }  // container activate
    
                    container deactivate {
                      description "Deactivate";
                      container dynamic-template {
                        description
                          "actions related to dynamic templates";
                        leaf template-name {
                          type string;
                          description
                            "Dynamic template name";
                        }
    
                        container aaa {
                          description
                            "AAA specification";
                          leaf list {
                            type union {
                              type string;
                              type enumeration {
                                enum "default" {
                                  value 0;
                                  description
                                    "default AAA method list";
                                }
                              }
                            }
                            description
                              "Specify AAA method list that authentication should be made with";
                          }
                        }  // container aaa
                      }  // container dynamic-template
                    }  // container deactivate
    
                    container authenticate {
                      if-feature action-authenticate;
                      description
                        "Authentication related configuration";
                      container aaa {
                        description
                          "AAA specification";
                        leaf list {
                          type union {
                            type string;
                            type enumeration {
                              enum "default" {
                                value 0;
                                description
                                  "default AAA method list";
                              }
                            }
                          }
                          description
                            "Specify AAA method list that authentication should be made with";
                        }
                      }  // container aaa
                    }  // container authenticate
    
                    container authorize {
                      if-feature action-authorize;
                      description "Authorize";
                      container aaa {
                        description
                          "AAA specification";
                        leaf list {
                          type union {
                            type string;
                            type enumeration {
                              enum "default" {
                                value 0;
                                description
                                  "default AAA method list";
                              }
                            }
                          }
                          description
                            "Specify AAA method list that authentication should be made with";
                        }
                      }  // container aaa
    
                      leaf format {
                        type string;
                        description
                          "Specify an Authorize format name";
                      }
    
                      leaf identifier {
                        type enumeration {
                          enum "circuit-id" {
                            value 0;
                            description
                              "Authorize circuit ID";
                          }
                          enum "dhcp-client-id" {
                            value 1;
                            description
                              "Authorize dhcp client ID";
                          }
                          enum "remote-id" {
                            value 2;
                            description
                              "Authorize remote ID";
                          }
                          enum "service-name" {
                            value 3;
                            description
                              "Authorize Service Name";
                          }
                          enum
                            "source-address-ipv4" {
                            value 4;
                            description
                              "Authorize source IPv4 address";
                          }
                          enum
                            "source-address-ipv6" {
                            value 5;
                            description
                              "Authorize source IPv6 address";
                          }
                          enum
                            "source-address-mac" {
                            value 6;
                            description
                              "Authorize source MAC address";
                          }
                          enum "username" {
                            value 7;
                            description
                              "Authorize username";
                          }
                        }
                        description
                          "Specify an Authorize identifier";
                      }
    
                      leaf password {
                        type union {
                          type clear-text-password-type;
                          type enumeration {
                            enum "blank" {
                              value 0;
                              description
                                "use blank password";
                            }
                            enum "use-from-line" {
                              value 1;
                              description
                                "use from line";
                            }
                          }
                        }
                        description
                          "Specify a password to be used for AAA request";
                      }
                    }  // container authorize
    
                    container disconnect {
                      if-feature action-disconnect;
                      presence
                        "Disconnect session";
                      description
                        "Disconnect session";
                    }  // container disconnect
    
                    container monitor {
                      if-feature action-monitor;
                      presence "Monitor session";
                      description
                        "Monitor session";
                    }  // container monitor
    
                    container set-timer {
                      if-feature action-set-timer;
                      must "name and value";
                      presence
                        "indicates set-timer is configured";
                      description
                        "Set a timer to execute a rule on its expiry";
                      leaf name {
                        type string;
                        description
                          "Name of the timer";
                      }
    
                      leaf value {
                        type uint32 {
                          range "1..4294967295";
                        }
                        units "minutes";
                      }
                    }  // container set-timer
    
                    container stop-timer {
                      if-feature action-stop-timer;
                      description
                        "Disable timer before it expires";
                      leaf name {
                        type string;
                        description
                          "Name of the timer";
                      }
                    }  // container stop-timer
                  }  // list action
                }  // list class
              }  // list event
            }  // list subscriber-control
    
            list pbr {
              if-feature pmap-type-pbr;
              key "policy-map-name";
              description "PBR policy-map";
              leaf policy-map-name {
                type string;
                description
                  "Name of the policymap";
              }
    
              leaf description {
                type string;
                description
                  "Set description for this policy-map";
              }
    
              list class {
                key "name type";
                leaf name {
                  type string {
                    pattern
                      "[a-zA-Z0-9][a-zA-Z0-9\\._@$%+#:=<>\\-]{0,62}";
                  }
                  description
                    "Name of the class-map";
                }
    
                leaf type {
                  type enumeration {
                    enum "traffic" {
                      value 3;
                      description
                        "Traffic class-map.";
                    }
                  }
                  description
                    "The type of class-map";
                }
    
                container drop {
                  presence "Drop the packet";
                  description "Drop the packet";
                }  // container drop
    
                leaf http-redirect {
                  if-feature action-http-redirect;
                  type string;
                  description
                    "Configure HTTP redirect. Specify the URL HTTP requests should be redirected to";
                }
    
                container http-enrichment {
                  if-feature action-http-enrichment;
                  description
                    "Configure HTTP enrichment";
                  container subscriber-mac {
                    presence
                      "Subscriber MAC address";
                    description
                      "Subscriber MAC address";
                  }  // container subscriber-mac
    
                  container subscriber-ip {
                    presence
                      "Subscriber ipv4/ipv6 address";
                    description
                      "Subscriber ipv4/ipv6 address";
                  }  // container subscriber-ip
    
                  container hostname {
                    presence "Hostname";
                    description "Hostname";
                  }  // container hostname
    
                  container bng-interface {
                    presence
                      "BNG identifier interface";
                    description
                      "BNG identifier interface";
                  }  // container bng-interface
                }  // container http-enrichment
    
                container police {
                  description "Police traffic";
                  container rate {
                    must "value and unit";
                    presence
                      "indicates rate is configured";
                    description
                      "Committed Information Rate";
                    leaf value {
                      type uint32 {
                        range "1..4294967295";
                      }
                    }
    
                    leaf unit {
                      type rate-unit-type;
                    }
                  }  // container rate
                }  // container police
    
                container redirect-ipv4 {
                  if-feature action-redirect-nexthop;
                  description
                    "Configure PBF redirect feature with IPv4 configurations";
                  container default-route {
                    presence
                      "Forward to the default nexthop";
                    description
                      "Forward to the default nexthop";
                  }  // container default-route
    
                  container nexthop1 {
                    description
                      "Forward to specified nexthop";
                    leaf address {
                      type inet:ipv4-address;
                      description
                        "IPv4 Nexthop address";
                    }
    
                    leaf vrf {
                      type union {
                        type string;
                        type enumeration {
                          enum "default" {
                            value 0;
                            description
                              "Redirect to the default vrf";
                          }
                        }
                      }
                      description
                        "Enter specific VRF Name for this nexthop";
                    }
                  }  // container nexthop1
    
                  container nexthop2 {
                    description
                      "Forward to specified nexthop";
                    leaf address {
                      type inet:ipv4-address;
                      description
                        "IPv4 Nexthop address";
                    }
    
                    leaf vrf {
                      type union {
                        type string;
                        type enumeration {
                          enum "default" {
                            value 0;
                            description
                              "Redirect to the default vrf";
                          }
                        }
                      }
                      description
                        "Enter specific VRF Name for this nexthop";
                    }
                  }  // container nexthop2
    
                  container nexthop3 {
                    description
                      "Forward to specified nexthop";
                    leaf address {
                      type inet:ipv4-address;
                      description
                        "IPv4 Nexthop address";
                    }
    
                    leaf vrf {
                      type union {
                        type string;
                        type enumeration {
                          enum "default" {
                            value 0;
                            description
                              "Redirect to the default vrf";
                          }
                        }
                      }
                      description
                        "Enter specific VRF Name for this nexthop";
                    }
                  }  // container nexthop3
                }  // container redirect-ipv4
    
                container redirect-ipv6 {
                  if-feature action-redirect-nexthop;
                  description
                    "Configure PBF redirect feature with IPv6 configurations";
                  container default-route {
                    presence
                      "Forward to the default nexthop";
                    description
                      "Forward to the default nexthop";
                  }  // container default-route
    
                  container nexthop1 {
                    description
                      "Forward to specified nexthop";
                    leaf address {
                      type inet:ipv6-address;
                      description
                        "IPv6 Nexthop address";
                    }
    
                    leaf vrf {
                      type union {
                        type string;
                        type enumeration {
                          enum "default" {
                            value 0;
                            description
                              "Redirect to the default vrf";
                          }
                        }
                      }
                      description
                        "Enter specific VRF Name for this nexthop";
                    }
                  }  // container nexthop1
    
                  container nexthop2 {
                    description
                      "Forward to specified nexthop";
                    leaf address {
                      type inet:ipv6-address;
                      description
                        "IPv6 Nexthop address";
                    }
    
                    leaf vrf {
                      type union {
                        type string;
                        type enumeration {
                          enum "default" {
                            value 0;
                            description
                              "Redirect to the default vrf";
                          }
                        }
                      }
                      description
                        "Enter specific VRF Name for this nexthop";
                    }
                  }  // container nexthop2
    
                  container nexthop3 {
                    description
                      "Forward to specified nexthop";
                    leaf address {
                      type inet:ipv6-address;
                      description
                        "IPv6 Nexthop address";
                    }
    
                    leaf vrf {
                      type union {
                        type string;
                        type enumeration {
                          enum "default" {
                            value 0;
                            description
                              "Redirect to the default vrf";
                          }
                        }
                      }
                      description
                        "Enter specific VRF Name for this nexthop";
                    }
                  }  // container nexthop3
                }  // container redirect-ipv6
    
                container redirect-nexthop {
                  if-feature action-redirect-rt;
                  description
                    "Configure PBF redirect feature with forwarding to specified nexthop";
                  container route-target {
                    must
                      "(address and index) or as-number";
                    presence
                      "indicates route-target is configured";
                    description
                      "Enter specific route-target string";
                    leaf address {
                      type inet:ipv4-address-no-zone;
                      description
                        "IPv4 address.";
                    }
    
                    leaf index {
                      type uint16 {
                        range "0..65535";
                      }
                      description
                        "IPv4 Address:index";
                    }
    
                    leaf as-number {
                      type union {
                        type string {
                          pattern
                            "([1-9][0-9]{0,4}):(0|[1-9][0-9]{0,4})";
                        }
                        type string {
                          pattern
                            "(65536:|[1-9][0-9]{0,10}:)(0|[1-9][0-9]{0,4})";
                        }
                      }
                      description "AS number";
                    }
                  }  // container route-target
                }  // container redirect-nexthop
    
                container service-function-path {
                  if-feature action-service-function;
                  description
                    "Configure NSH service function action";
                  leaf path-id {
                    type uint32 {
                      range "1..16777215";
                    }
                    must "../index";
                    description
                      "Service function path id";
                  }
    
                  leaf index {
                    type uint8 {
                      range "1..255";
                    }
                    must "../path-id";
                    description
                      "Specify service path index";
                  }
    
                  leaf metadata {
                    type string;
                    must
                      "../index and ../path-id";
                    description
                      "service-function metadata";
                  }
                }  // container service-function-path
    
                container set {
                  description
                    "Configure marking for this class";
                  container destination-address {
                    if-feature action-set-dst-address;
                    description
                      "Set Destination address";
                    leaf ipv4 {
                      type inet:ipv4-address;
                      description "IPv4 address";
                    }
                  }  // container destination-address
    
                  leaf df {
                    if-feature action-set-df;
                    type uint8 {
                      range "0..1";
                    }
                    description "Set DF bit";
                  }
    
                  leaf dscp {
                    type dscp-value;
                    description "Set DSCP";
                  }
    
                  leaf forward-class {
                    if-feature action-set-fwd-class;
                    type uint8 {
                      range "1..7";
                    }
                    description
                      "Set forward class";
                  }
    
                  container source-address {
                    if-feature action-set-src-address;
                    description
                      "Set Source address";
                    leaf ipv4 {
                      type inet:ipv4-address;
                      description "IPv4 address";
                    }
                  }  // container source-address
                }  // container set
    
                container transmit {
                  if-feature action-transmit;
                  presence
                    "Forward packet to the original destination";
                  description
                    "Forward packet to the original destination";
                }  // container transmit
    
                container decapsulate {
                  if-feature action-decap-gre;
                  description
                    "Decapsulate GRE packet";
                  container gre {
                    presence
                      "Decapsulate GRE packet";
                    description
                      "Decapsulate GRE packet";
                  }  // container gre
                }  // container decapsulate
              }  // list class
            }  // list pbr
    
            list performance-traffic {
              if-feature pmap-type-afmon;
              key "policy-map-name";
              description
                "Performance traffic policy-map";
              leaf policy-map-name {
                type string;
                description
                  "Name of the policymap";
              }
    
              leaf description {
                type string;
                description
                  "Set description for this policy-map";
              }
    
              list class {
                key "name type";
                leaf name {
                  type string {
                    pattern
                      "[a-zA-Z0-9][a-zA-Z0-9\\._@$%+#:=<>\\-]{0,62}";
                  }
                  description
                    "Name of the class-map";
                }
    
                leaf type {
                  type enumeration {
                    enum "traffic" {
                      value 3;
                      description
                        "Traffic class-map.";
                    }
                  }
                  description
                    "The type of class-map";
                }
    
                container compress {
                  if-feature action-compress-header-ip;
                  description
                    "Configure compress action";
                  container header {
                    description
                      "Configure header compression";
                    container ip {
                      presence
                        "Configure IP header compression";
                      description
                        "Configure IP header compression";
                    }  // container ip
                  }  // container header
                }  // container compress
    
                leaf encap-sequence {
                  if-feature action-encap-sequence;
                  type union {
                    type uint8 {
                      range "1..15";
                    }
                    type enumeration {
                      enum "none" {
                        value 0;
                        description
                          "Encapsulation sequence none";
                      }
                    }
                  }
                  description
                    "Configure encapsulation sequence";
                }
    
                list react {
                  if-feature action-react;
                  key "operation-id";
                  description
                    "Generate alert on the specified event";
                  leaf operation-id {
                    type uint32 {
                      range "1..4294967294";
                    }
                    description
                      "Specify an operation id (num)";
                  }
    
                  container delay-factor {
                    presence
                      "React criterion delay factor of policy-map action.";
                    description
                      "React criterion delay factor of policy-map action.";
                  }  // container delay-factor
    
                  container media-stop {
                    presence
                      "React criterion media stop of policy-map action.";
                    description
                      "React criterion media stop of policy-map action.";
                  }  // container media-stop
    
                  container mrv {
                    presence
                      "React criterion mrv of policy-map action.";
                    description
                      "React criterion mrv of policy-map action.";
                  }  // container mrv
    
                  container flow-count {
                    presence
                      "React criterion flow count of policy-map action.";
                    description
                      "React criterion flow count of policy-map action.";
                  }  // container flow-count
    
                  container packet-rate {
                    presence
                      "React criterion packet rate of the policy-map action.";
                    description
                      "React criterion packet rate of the policy-map action.";
                  }  // container packet-rate
    
                  leaf description {
                    type string;
                    description
                      "Set Description for this alert action";
                  }
    
                  container trigger {
                    description
                      "Set the event trigger";
                    container value {
                      must
                        "lt or le or gt or ge or range";
                      presence
                        "indicates value is configured";
                      description
                        "Set the trigger criterion";
                      leaf lt {
                        type trigger-value;
                        description
                          "trigger only if metric is less than the given value";
                      }
    
                      leaf le {
                        type trigger-value;
                        description
                          "trigger only if metric is less than or equal to the given value";
                      }
    
                      leaf gt {
                        type trigger-value;
                        description
                          "trigger only if metric is greater than the given value";
                      }
    
                      leaf ge {
                        type trigger-value;
                        description
                          "trigger only if metric is greater than or equal to the given value";
                      }
    
                      leaf range {
                        type trigger-value;
                        description
                          "trigger only if metric is in the inclusive range";
                      }
                    }  // container value
    
                    container type {
                      must
                        "immediate or average";
                      presence
                        "indicates type is configured";
                      description
                        "Set the trigger type";
                      container immediate {
                        presence
                          "Immediate trigger";
                        description
                          "Immediate trigger";
                      }  // container immediate
    
                      leaf average {
                        type uint32 {
                          range "1..60";
                        }
                        description
                          "Trigger averaged over N intervals.";
                      }
                    }  // container type
                  }  // container trigger
    
                  container action {
                    description
                      "Set the event action";
                    container syslog {
                      presence
                        "Report via syslog";
                      description
                        "Report via syslog";
                    }  // container syslog
    
                    container snmp {
                      if-feature action-react-snmp;
                      presence
                        "Report via syslog";
                      description
                        "Report via syslog";
                    }  // container snmp
                  }  // container action
    
                  container alarm {
                    if-feature action-react-alarm;
                    description
                      "Configure alarms";
                    container type {
                      must "discrete or grouped";
                      presence
                        "indicates type is configured";
                      description
                        "Set the alarm type";
                      container discrete {
                        presence
                          "Discrete alarms";
                        description
                          "Discrete alarms";
                      }  // container discrete
    
                      container grouped {
                        if-feature action-react-grouped-alarm;
                        description
                          "Grouped alarms";
                        leaf count {
                          type uint16 {
                            range "1..65535";
                          }
                          units
                            "number of flows";
                          must "not(../percent)";
                          description
                            "Grouped on num-flows";
                        }
    
                        leaf percent {
                          type uint8 {
                            range "1..100";
                          }
                          units "percentage";
                          must "not(../count)";
                          description
                            "Grouped on percentage of flows";
                        }
                      }  // container grouped
                    }  // container type
    
                    leaf severity {
                      type enumeration {
                        enum "error" {
                          value 0;
                          description
                            "Error level alarm";
                        }
                        enum "critical" {
                          value 1;
                          description
                            "Critical level alarm";
                        }
                        enum "alert" {
                          value 2;
                          description
                            "Alert level alarm";
                        }
                        enum "emergency" {
                          value 3;
                          description
                            "Emergency level alarm";
                        }
                      }
                      description
                        "Set the alarm severity";
                    }
                  }  // container alarm
                }  // list react
              }  // list class
            }  // list performance-traffic
    
            list qos {
              if-feature pmap-type-qos;
              key "policy-map-name";
              description "QoS policy-map";
              leaf policy-map-name {
                type string;
                description
                  "Name of the policymap";
              }
    
              leaf description {
                type string;
                description
                  "Set description for this policy-map";
              }
    
              list class {
                must
                  "admit or
                 bandwidth or bandwidth-remaining or fragment or pause or police or
                 priority or queue-limits or random-detect-ecn or service-fragment or
                 service-policy or set or shape or random-detect-default or
                 random-detect or compress or encap-sequence";
                key "name type";
                leaf name {
                  type string {
                    pattern
                      "[a-zA-Z0-9][a-zA-Z0-9\\._@$%+#:=<>\\-]{0,62}";
                  }
                  description
                    "Name of the class-map";
                }
    
                leaf type {
                  type enumeration {
                    enum "qos" {
                      value 1;
                      description
                        "QoS class-map.";
                    }
                    enum "traffic" {
                      value 3;
                      description
                        "Traffic class-map.";
                    }
                  }
                  description
                    "The type of class-map";
                }
    
                container admit {
                  if-feature action-cac;
                  description
                    "Call admission control";
                  container cac {
                    description
                      "Call admission control (CAC) functionality";
                    container local {
                      must "rate and flow/rate";
                      presence
                        "indicates local is configured";
                      description
                        "CAC local flow type (default type)";
                      container flow {
                        description
                          "Flow attributes";
                        leaf idle-timeout {
                          type union {
                            type uint16 {
                              range "10..2550";
                            }
                            type enumeration {
                              enum "None" {
                                value 0;
                                description
                                  "The flow does not expire";
                              }
                            }
                          }
                          description
                            "Maximum time of inactivity for a flow";
                        }
    
                        container rate {
                          must "value and unit";
                          presence
                            "indicates rate is configured";
                          description
                            "Per flow rate";
                          leaf value {
                            type uint32 {
                              range
                                "1..4294967294";
                            }
                          }
    
                          leaf unit {
                            type cac-unit-type;
                          }
                        }  // container rate
                      }  // container flow
    
                      container rate {
                        must "value and unit";
                        presence
                          "indicates rate is configured";
                        description
                          "Maximum rate for all flows";
                        leaf value {
                          type uint32 {
                            range
                              "1..4294967294";
                          }
                        }
    
                        leaf unit {
                          type cac-unit-type;
                        }
                      }  // container rate
                    }  // container local
                  }  // container cac
                }  // container admit
    
                container bandwidth {
                  if-feature action-bandwidth;
                  must "value and unit";
                  presence
                    "indicates bandwidth is configured";
                  description
                    "Configure bandwidth for this class";
                  leaf value {
                    type union {
                      type uint32 {
                        range "1..4294967295";
                      }
                      type uint16 {
                        range "1..1000";
                      }
                      type uint32 {
                        range "1..1000000";
                      }
                      type uint32 {
                        range "1..100";
                      }
                    }
                  }
    
                  leaf unit {
                    type enumeration {
                      enum "bps" {
                        value 0;
                        description
                          "Bits per second";
                      }
                      enum "gbps" {
                        value 1;
                        description
                          "Gigabits per second";
                      }
                      enum "kbps" {
                        value 2;
                        description
                          "Kilobits per second";
                      }
                      enum "mbps" {
                        value 3;
                        description
                          "Megabits per second";
                      }
                      enum "cellsps" {
                        value 4;
                        description
                          "Cells per second";
                      }
                      enum "per-thousand" {
                        value 5;
                        description
                          "configure parts per-thousand bandwidth";
                      }
                      enum "per-million" {
                        value 6;
                        description
                          "configure parts per-million bandwidth";
                      }
                      enum "percent" {
                        value 7;
                        description
                          "configure a percentage bandwidth";
                      }
                    }
                  }
                }  // container bandwidth
    
                container bandwidth-remaining {
                  if-feature action-bandwidth;
                  must "unit and value";
                  presence
                    "indicates bandwidth-remaining is configured";
                  description
                    "Allocate left over bandwidth";
                  leaf unit {
                    type enumeration {
                      enum "percent" {
                        value 0;
                        description
                          "Allocate remaining bandwidth as percentage";
                      }
                      enum "ratio" {
                        value 1;
                        description
                          "Allocate remaining bandwidth as a ratio";
                      }
                    }
                    description
                      "Bandwidth value unit";
                  }
    
                  leaf value {
                    type union {
                      type uint8 {
                        range "1..100";
                      }
                      type uint32 {
                        range "1..4294967295";
                      }
                    }
                    description
                      "Bandwidth value";
                  }
                }  // container bandwidth-remaining
    
                container compress {
                  if-feature action-compress-header-ip;
                  description
                    "Configure compress action";
                  container header {
                    description
                      "Configure header compression";
                    container ip {
                      presence
                        "Configure IP header compression";
                      description
                        "Configure IP header compression";
                    }  // container ip
                  }  // container header
                }  // container compress
    
                leaf encap-sequence {
                  if-feature action-encap-sequence;
                  type union {
                    type uint8 {
                      range "1..15";
                    }
                    type enumeration {
                      enum "none" {
                        value 0;
                        description
                          "Encapsulation sequence none";
                      }
                    }
                  }
                  description
                    "Configure encapsulation sequence";
                }
    
                leaf fragment {
                  if-feature action-service-fragment;
                  type string {
                    length "1..64";
                  }
                  description
                    "Refer to an existing service fragment. Reference to a Service fragment.";
                }
    
                container pause {
                  if-feature action-pfc;
                  presence
                    "Configure PFC feature";
                  description
                    "Configure PFC feature";
                  container buffer-size {
                    must "value and unit";
                    presence
                      "indicates buffer-size is configured";
                    description
                      "Configure buffer size";
                    leaf value {
                      type uint32 {
                        range "1..4294967295";
                      }
                      description
                        "Range of buffer size";
                    }
    
                    leaf unit {
                      type pfc-unit-type;
                    }
                  }  // container buffer-size
    
                  container pause-threshold {
                    must "value and unit";
                    presence
                      "indicates pause-threshold is configured";
                    description
                      "Configure pasue threshold";
                    leaf value {
                      type uint32 {
                        range "1..4294967295";
                      }
                      description
                        "Range of pause threshold";
                    }
    
                    leaf unit {
                      type pfc-unit-type;
                    }
                  }  // container pause-threshold
    
                  container resume-threshold {
                    must "value and unit";
                    presence
                      "indicates resume-threshold is configured";
                    description
                      "Configure resume threshold";
                    leaf value {
                      type uint32 {
                        range "1..4294967295";
                      }
                      description
                        "Range of resume threshold";
                    }
    
                    leaf unit {
                      type pfc-unit-type;
                    }
                  }  // container resume-threshold
                }  // container pause
    
                container police {
                  description "Police traffic";
                  container conditional {
                    presence
                      "Conditional policer for priority traffic";
                    description
                      "Conditional policer for priority traffic";
                  }  // container conditional
    
                  container rate {
                    must "value and unit";
                    presence
                      "indicates rate is configured";
                    description
                      "Committed Information Rate";
                    leaf value {
                      type union {
                        type uint32 {
                          range "1..4294967295";
                        }
                        type uint8 {
                          range "1..100";
                        }
                        type uint16 {
                          range "1..1000";
                        }
                        type uint32 {
                          range "1..1000000";
                        }
                      }
                      description
                        "Committed Information Rate";
                    }
    
                    leaf unit {
                      type enumeration {
                        enum "bps" {
                          value 0;
                          description
                            "Bits per second (default)";
                        }
                        enum "gbps" {
                          value 1;
                          description
                            "Gigabits per second";
                        }
                        enum "kbps" {
                          value 2;
                          description
                            "Kilobits per second";
                        }
                        enum "mbps" {
                          value 3;
                          description
                            "Megabits per second";
                        }
                        enum "cellsps" {
                          value 4;
                          description
                            "Cells per second";
                        }
                        enum "pps" {
                          value 5;
                          description
                            "Packets per second";
                        }
                        enum "percent" {
                          value 6;
                          description
                            "Percent of the link bandwidth";
                        }
                        enum "per-thousand" {
                          value 7;
                          description
                            "Parts per-thousand of the link bandwidth";
                        }
                        enum "per-million" {
                          value 8;
                          description
                            "Parts per-million of the link bandwidth";
                        }
                      }
                      description "Rate unit";
                    }
                  }  // container rate
    
                  container burst {
                    description
                      "Burst size (BC)";
                    leaf value {
                      type uint32 {
                        range "1..4294967295";
                      }
                      description
                        "Burst size (BC)";
                    }
    
                    leaf unit {
                      type burst-unit-type;
                      description
                        "Burst size unit";
                    }
                  }  // container burst
    
                  container peak-burst {
                    if-feature action-police-peak-burst;
                    description
                      "Excess Burst size (BE)";
                    leaf value {
                      type uint32 {
                        range "1..4294967295";
                      }
                      description
                        "Exess burst size (BC)";
                    }
    
                    leaf unit {
                      type burst-unit-type;
                      description
                        "Burst size unit";
                    }
                  }  // container peak-burst
    
                  container peak-rate {
                    must "value and unit";
                    presence
                      "indicates peak-rate is configured";
                    description
                      "Peak Information Rate";
                    leaf value {
                      type union {
                        type uint32 {
                          range "1..4294967295";
                        }
                        type uint8 {
                          range "1..100";
                        }
                      }
                      description
                        "Peak Information Rate";
                    }
    
                    leaf unit {
                      type enumeration {
                        enum "bps" {
                          value 0;
                          description
                            "Bits per second (default)";
                        }
                        enum "gbps" {
                          value 1;
                          description
                            "Gigabits per second";
                        }
                        enum "kbps" {
                          value 2;
                          description
                            "Kilobits per second";
                        }
                        enum "mbps" {
                          value 3;
                          description
                            "Megabits per second";
                        }
                        enum "cellsps" {
                          value 4;
                          description
                            "Cells per second";
                        }
                        enum "pps" {
                          value 5;
                          description
                            "Packets per second";
                        }
                        enum "percent" {
                          value 6;
                          description
                            "Percent of the link bandwidth";
                        }
                      }
                    }
                  }  // container peak-rate
    
                  container conform-action {
                    description
                      "Action for conforming traffic";
                    container transmit {
                      presence "Transmit packet";
                      description
                        "Transmit packet";
                    }  // container transmit
    
                    container drop {
                      presence "Drop packet";
                      description "Drop packet";
                    }  // container drop
    
                    container set {
                      description
                        "Conditional marking";
                      leaf cos {
                        type uint8 {
                          range "0..7";
                        }
                        description
                          "Sets the specific IEEE 802.1Q Layer 2 CoS value of an
    outgoing packet.
    This command should be used by a router if a user wants
    to mark a packet that is being sent to a switch.
    Switches can leverage Layer 2 header information,
    including a CoS value marking. Packets entering an
    interface cannot be set with a CoS value.";
                      }
    
                      leaf cos-inner {
                        type uint8 {
                          range "0..7";
                        }
                        description
                          "Set inner COS";
                      }
    
                      leaf dei {
                        type uint8 {
                          range "0..1";
                        }
                        description "Set DEI";
                      }
    
                      leaf dei-imposition {
                        type uint8 {
                          range "0..1";
                        }
                        description
                          "Set DEI imposition bit.";
                      }
    
                      leaf discard-class {
                        type uint8 {
                          range "0..7";
                        }
                        description
                          "Sets the discard class on IPv4 or MPLS packets.
    The discard-class can be used only in service policies
    that are attached in the ingress policy.";
                      }
    
                      leaf dscp {
                        type dscp-value;
                        description
                          "Set IP DSCP (DiffServ CodePoint)";
                      }
    
                      leaf dscp-tunnel {
                        type dscp-value;
                        description
                          "Set DSCP Tunnel(for ipsec tunnels)";
                      }
    
                      leaf fr-de {
                        if-feature action-police-set-fr-de;
                        type uint8 {
                          range "0..1";
                        }
                        description
                          "Set frame relay discard-eligible bit";
                      }
    
                      container mpls {
                        description
                          "Set MPLS specific values";
                        container experimental {
                          description
                            "Set experimental";
                          leaf imposition {
                            type uint8 {
                              range "0..7";
                            }
                            description
                              "Sets the experimental value of the MPLS packet
    imposition labels.
    Imposition can be used only in service policies that
    are attached in the ingress policy";
                          }
    
                          leaf topmost {
                            type uint8 {
                              range "0..7";
                            }
                            description
                              "Sets the experimental value of the MPLS packet top-most
    labels.";
                          }
                        }  // container experimental
                      }  // container mpls
    
                      leaf precedence {
                        type precedence-type;
                        description
                          "Set IP Precedence";
                      }
    
                      leaf precedence-tunnel {
                        type precedence-type;
                        description
                          "Set Precedence tunnel(for ipsec tunnels)";
                      }
    
                      leaf qos-group {
                        type uint16 {
                          range "0..512";
                        }
                        description
                          "Sets the QoS group identifiers on IPv4 or MPLS packets.
    The set qos-group is supported only on an ingress policy.";
                      }
                    }  // container set
                  }  // container conform-action
    
                  container exceed-action {
                    description
                      "Action for exceeding traffic";
                    container transmit {
                      presence "Transmit packet";
                      description
                        "Transmit packet";
                    }  // container transmit
    
                    container drop {
                      presence "Drop packet";
                      description "Drop packet";
                    }  // container drop
    
                    container set {
                      description
                        "Conditional marking";
                      leaf cos {
                        type uint8 {
                          range "0..7";
                        }
                        description
                          "Sets the specific IEEE 802.1Q Layer 2 CoS value of an
    outgoing packet.
    This command should be used by a router if a user wants
    to mark a packet that is being sent to a switch.
    Switches can leverage Layer 2 header information,
    including a CoS value marking. Packets entering an
    interface cannot be set with a CoS value.";
                      }
    
                      leaf cos-inner {
                        type uint8 {
                          range "0..7";
                        }
                        description
                          "Set inner COS";
                      }
    
                      leaf dei {
                        type uint8 {
                          range "0..1";
                        }
                        description "Set DEI";
                      }
    
                      leaf dei-imposition {
                        type uint8 {
                          range "0..1";
                        }
                        description
                          "Set DEI imposition bit.";
                      }
    
                      leaf discard-class {
                        type uint8 {
                          range "0..7";
                        }
                        description
                          "Sets the discard class on IPv4 or MPLS packets.
    The discard-class can be used only in service policies
    that are attached in the ingress policy.";
                      }
    
                      leaf dscp {
                        type dscp-value;
                        description
                          "Set IP DSCP (DiffServ CodePoint)";
                      }
    
                      leaf dscp-tunnel {
                        type dscp-value;
                        description
                          "Set DSCP Tunnel(for ipsec tunnels)";
                      }
    
                      leaf fr-de {
                        if-feature action-police-set-fr-de;
                        type uint8 {
                          range "0..1";
                        }
                        description
                          "Set frame relay discard-eligible bit";
                      }
    
                      container mpls {
                        description
                          "Set MPLS specific values";
                        container experimental {
                          description
                            "Set experimental";
                          leaf imposition {
                            type uint8 {
                              range "0..7";
                            }
                            description
                              "Sets the experimental value of the MPLS packet
    imposition labels.
    Imposition can be used only in service policies that
    are attached in the ingress policy";
                          }
    
                          leaf topmost {
                            type uint8 {
                              range "0..7";
                            }
                            description
                              "Sets the experimental value of the MPLS packet top-most
    labels.";
                          }
                        }  // container experimental
                      }  // container mpls
    
                      leaf precedence {
                        type precedence-type;
                        description
                          "Set IP Precedence";
                      }
    
                      leaf precedence-tunnel {
                        type precedence-type;
                        description
                          "Set Precedence tunnel(for ipsec tunnels)";
                      }
    
                      leaf qos-group {
                        type uint16 {
                          range "0..512";
                        }
                        description
                          "Sets the QoS group identifiers on IPv4 or MPLS packets.
    The set qos-group is supported only on an ingress policy.";
                      }
                    }  // container set
                  }  // container exceed-action
    
                  container violate-action {
                    description
                      "Action for violating traffic";
                    container transmit {
                      presence "Transmit packet";
                      description
                        "Transmit packet";
                    }  // container transmit
    
                    container drop {
                      presence "Drop packet";
                      description "Drop packet";
                    }  // container drop
    
                    container set {
                      description
                        "Conditional marking";
                      leaf cos {
                        type uint8 {
                          range "0..7";
                        }
                        description
                          "Sets the specific IEEE 802.1Q Layer 2 CoS value of an
    outgoing packet.
    This command should be used by a router if a user wants
    to mark a packet that is being sent to a switch.
    Switches can leverage Layer 2 header information,
    including a CoS value marking. Packets entering an
    interface cannot be set with a CoS value.";
                      }
    
                      leaf cos-inner {
                        type uint8 {
                          range "0..7";
                        }
                        description
                          "Set inner COS";
                      }
    
                      leaf dei {
                        type uint8 {
                          range "0..1";
                        }
                        description "Set DEI";
                      }
    
                      leaf dei-imposition {
                        type uint8 {
                          range "0..1";
                        }
                        description
                          "Set DEI imposition bit.";
                      }
    
                      leaf discard-class {
                        type uint8 {
                          range "0..7";
                        }
                        description
                          "Sets the discard class on IPv4 or MPLS packets.
    The discard-class can be used only in service policies
    that are attached in the ingress policy.";
                      }
    
                      leaf dscp {
                        type dscp-value;
                        description
                          "Set IP DSCP (DiffServ CodePoint)";
                      }
    
                      leaf dscp-tunnel {
                        type dscp-value;
                        description
                          "Set DSCP Tunnel(for ipsec tunnels)";
                      }
    
                      leaf fr-de {
                        if-feature action-police-set-fr-de;
                        type uint8 {
                          range "0..1";
                        }
                        description
                          "Set frame relay discard-eligible bit";
                      }
    
                      container mpls {
                        description
                          "Set MPLS specific values";
                        container experimental {
                          description
                            "Set experimental";
                          leaf imposition {
                            type uint8 {
                              range "0..7";
                            }
                            description
                              "Sets the experimental value of the MPLS packet
    imposition labels.
    Imposition can be used only in service policies that
    are attached in the ingress policy";
                          }
    
                          leaf topmost {
                            type uint8 {
                              range "0..7";
                            }
                            description
                              "Sets the experimental value of the MPLS packet top-most
    labels.";
                          }
                        }  // container experimental
                      }  // container mpls
    
                      leaf precedence {
                        type precedence-type;
                        description
                          "Set IP Precedence";
                      }
    
                      leaf precedence-tunnel {
                        type precedence-type;
                        description
                          "Set Precedence tunnel(for ipsec tunnels)";
                      }
    
                      leaf qos-group {
                        type uint16 {
                          range "0..512";
                        }
                        description
                          "Sets the QoS group identifiers on IPv4 or MPLS packets.
    The set qos-group is supported only on an ingress policy.";
                      }
                    }  // container set
                  }  // container violate-action
    
                  leaf conform-color {
                    if-feature action-police-conform-color;
                    type string;
                    description
                      "Configure conform color class for color aware policing. Conform color class name.";
                  }
    
                  leaf exceed-color {
                    if-feature action-police-exceed-color;
                    type string;
                    description
                      "Configure exceed color class for color aware policing. Exceed color class name.";
                  }
    
                  container child-conform-aware {
                    if-feature action-police-coupled;
                    presence
                      "Enable coupled policing";
                    description
                      "Enable coupled policing";
                  }  // container child-conform-aware
                }  // container police
    
                container priority {
                  description
                    "Assign priority to this class";
                  leaf level {
                    type uint8 {
                      range "1..7";
                    }
                    description
                      "Configure a priority level";
                  }
                }  // container priority
    
                container queue-limits {
                  description "Queue Limit Node";
                  list queue-limit {
                    key "value unit";
                    description
                      "Configure queue-limit (taildrop threshold) for this class";
                    leaf value {
                      type union {
                        type uint32 {
                          range "1..4294967295";
                        }
                        type uint8 {
                          range "1..100";
                        }
                      }
                      description
                        "queue-limit value";
                    }
    
                    leaf unit {
                      type enumeration {
                        enum "bytes" {
                          value 0;
                          description "Bytes";
                        }
                        enum "kbytes" {
                          value 1;
                          description
                            "Kilobytes";
                        }
                        enum "mbytes" {
                          value 2;
                          description
                            "Megabytes";
                        }
                        enum "ms" {
                          value 3;
                          description
                            "Milliseconds";
                        }
                        enum "packets" {
                          value 4;
                          description
                            "Packets (default)";
                        }
                        enum "us" {
                          value 5;
                          description
                            "Microseconds";
                        }
                        enum "percent" {
                          value 6;
                          description
                            "Configure queue limit value in percentage";
                        }
                      }
                      description
                        "queue-limit unit";
                    }
    
                    container discard-classes {
                      description
                        "discard class container";
                      leaf-list discard-class {
                        type uint8 {
                          range "0..7";
                        }
                        description
                          "Remaining bandwidth value.";
                      }
                    }  // container discard-classes
                  }  // list queue-limit
                }  // container queue-limits
    
                container random-detect-default {
                  presence
                    "Enable RED with default min and max thresholds";
                  description
                    "Enable RED with default min and max thresholds";
                }  // container random-detect-default
    
                container random-detect-ecn {
                  presence
                    "Enable ECN based WRED";
                  description "ECN based WRED";
                }  // container random-detect-ecn
    
                list random-detect {
                  key "minimum-threshold-value minimum-threshold-unit maximum-threshold-value maximum-threshold-unit";
                  description
                    "Enable Random Early Detection.
    All RED profiles in a class must be based
    on the same field.";
                  leaf minimum-threshold-value {
                    type uint32 {
                      range "0..1073741823";
                    }
                    description
                      "Minimum threshold";
                  }
    
                  leaf minimum-threshold-unit {
                    type wred-unit-type;
                    description "threshold unit";
                  }
    
                  leaf maximum-threshold-value {
                    type uint32 {
                      range "0..1073741823";
                    }
                    description
                      "Maximum threshold";
                  }
    
                  leaf maximum-threshold-unit {
                    type wred-unit-type;
                    description "threshold unit";
                  }
    
                  leaf-list cos {
                    type uint8 {
                      range "0..7";
                    }
                    max-elements 8;
                    description
                      "COS based WRED (upto 8 values)";
                  }
    
                  leaf-list dei {
                    type uint8 {
                      range "0..1";
                    }
                    max-elements 8;
                    description "DEI based WRED";
                  }
    
                  leaf-list discard-class {
                    type uint8 {
                      range "0..7";
                    }
                    max-elements 8;
                    description
                      "Discard Class based WRED";
                  }
    
                  leaf-list dscp {
                    type dscp-value;
                    max-elements 8;
                    description
                      "DSCP based WRED";
                  }
    
                  leaf-list exp {
                    type uint8 {
                      range "0..7";
                    }
                    max-elements 8;
                    description
                      "MPLS Experimental value based WRED";
                  }
    
                  leaf-list precedence {
                    type union {
                      type uint8 {
                        range "0..7";
                      }
                      type enumeration {
                        enum "critical" {
                          value 0;
                          description
                            "Critical precedence (5)";
                        }
                        enum "flash" {
                          value 1;
                          description
                            "Flash precedence (3)";
                        }
                        enum "flash-override" {
                          value 2;
                          description
                            "Flash override precedence (4)";
                        }
                        enum "immediate" {
                          value 3;
                          description
                            "Immediate precedence (2)";
                        }
                        enum "internet" {
                          value 4;
                          description
                            "Internetwork control precedence (6)";
                        }
                        enum "network" {
                          value 5;
                          description
                            "Network control precedence (7)";
                        }
                        enum "priority" {
                          value 6;
                          description
                            "Priority precedence (1)";
                        }
                        enum "routine" {
                          value 7;
                          description
                            "Routine precedence (0)";
                        }
                      }
                    }
                    max-elements 8;
                    description
                      "Precedence based WRED";
                  }
                }  // list random-detect
    
                leaf service-fragment {
                  if-feature action-service-fragment;
                  type string {
                    length "1..64";
                  }
                  description
                    "Define a service fragment. Name of Service fragment";
                }
    
                container service-policy {
                  description
                    "Configure a child service policy";
                  leaf name {
                    type service-policy-name-type;
                    description
                      "Name of the child service policy";
                  }
    
                  leaf type {
                    type enumeration {
                      enum "pbr" {
                        value 0;
                        description
                          "PBR policy-map";
                      }
                      enum "performance-traffic" {
                        value 1;
                        description
                          "Performance traffic policy-map";
                      }
                      enum "qos" {
                        value 2;
                        description
                          "QoS policy-map (default)";
                      }
                      enum "redirect" {
                        value 3;
                        description
                          "Redirect policy-map";
                      }
                      enum "traffic" {
                        value 4;
                        description
                          "Traffic policy-map";
                      }
                    }
                    description
                      "The type of policy-map";
                  }
                }  // container service-policy
    
                container set {
                  description
                    "Configure marking for this class";
                  container atm-clp {
                    if-feature action-set-atm-clp;
                    presence
                      "Set atm cell-loss-priority bit";
                    description
                      "Set atm cell-loss-priority bit";
                  }  // container atm-clp
    
                  leaf traffic-class {
                    if-feature action-set-traffic-class;
                    type uint8 {
                      range "0..8";
                    }
                    description
                      "Sets the Traffic Class identifiers on IPv4 or MPLS packets.
    The set traffic-class is supported only on an ingress policy.";
                  }
    
                  leaf forward-class {
                    if-feature action-set-fwd-class;
                    type uint8 {
                      range "1..7";
                    }
                    description
                      "Set forward class";
                  }
    
                  leaf cos {
                    type uint8 {
                      range "0..7";
                    }
                    description
                      "Sets the specific IEEE 802.1Q Layer 2 CoS value of an
    outgoing packet.
    This command should be used by a router if a user wants
    to mark a packet that is being sent to a switch.
    Switches can leverage Layer 2 header information,
    including a CoS value marking. Packets entering an
    interface cannot be set with a CoS value.";
                  }
    
                  leaf cos-inner {
                    type uint8 {
                      range "0..7";
                    }
                    description "Set inner COS";
                  }
    
                  leaf dei {
                    type uint8 {
                      range "0..1";
                    }
                    description "Set DEI";
                  }
    
                  leaf dei-imposition {
                    type uint8 {
                      range "0..1";
                    }
                    description
                      "Set DEI imposition bit.";
                  }
    
                  leaf discard-class {
                    type uint8 {
                      range "0..7";
                    }
                    description
                      "Sets the discard class on IPv4 or MPLS packets.
    The discard-class can be used only in service policies
    that are attached in the ingress policy.";
                  }
    
                  leaf dscp {
                    type dscp-value;
                    description
                      "Set IP DSCP (DiffServ CodePoint)";
                  }
    
                  leaf dscp-tunnel {
                    type dscp-value;
                    description
                      "Set DSCP Tunnel(for ipsec tunnels)";
                  }
    
                  leaf fr-de {
                    if-feature action-police-set-fr-de;
                    type uint8 {
                      range "0..1";
                    }
                    description
                      "Set frame relay discard-eligible bit";
                  }
    
                  container mpls {
                    description
                      "Set MPLS specific values";
                    container experimental {
                      description
                        "Set experimental";
                      leaf imposition {
                        type uint8 {
                          range "0..7";
                        }
                        description
                          "Sets the experimental value of the MPLS packet
    imposition labels.
    Imposition can be used only in service policies that
    are attached in the ingress policy";
                      }
    
                      leaf topmost {
                        type uint8 {
                          range "0..7";
                        }
                        description
                          "Sets the experimental value of the MPLS packet top-most
    labels.";
                      }
                    }  // container experimental
                  }  // container mpls
    
                  leaf precedence {
                    type precedence-type;
                    description
                      "Set IP Precedence";
                  }
    
                  leaf precedence-tunnel {
                    type precedence-type;
                    description
                      "Set Precedence tunnel(for ipsec tunnels)";
                  }
    
                  leaf qos-group {
                    type uint16 {
                      range "0..512";
                    }
                    description
                      "Sets the QoS group identifiers on IPv4 or MPLS packets.
    The set qos-group is supported only on an ingress policy.";
                  }
                }  // container set
    
                container shape {
                  description
                    "Configure shaping for this class";
                  container average {
                    description
                      "Average rate shaping";
                    container rate {
                      must "value and unit";
                      presence
                        "indicates rate is configured";
                      description "Shape rate";
                      leaf value {
                        type union {
                          type uint32 {
                            range
                              "1..4294967295";
                          }
                          type uint16 {
                            range "1..1000";
                          }
                          type uint32 {
                            range "1..1000000";
                          }
                          type uint8 {
                            range "1..100";
                          }
                          type string {
                            pattern
                              "[$][a-zA-Z0-9][a-zA-Z0-9\\._@%+:\\-]{0,32}[ ][=][ ]\\d{1,10}";
                          }
                        }
                      }
    
                      leaf unit {
                        type enumeration {
                          enum "bps" {
                            value 0;
                            description
                              "Bits per second";
                          }
                          enum "cellsps" {
                            value 1;
                            description
                              "Cells per second";
                          }
                          enum "gbps" {
                            value 2;
                            description
                              "Gigabits per second";
                          }
                          enum "kbps" {
                            value 3;
                            description
                              "Kilobits per second";
                          }
                          enum "mbps" {
                            value 4;
                            description
                              "Megabits per second";
                          }
                          enum "per-thousand" {
                            value 5;
                            description
                              "Configure shape rate in per-thousand";
                          }
                          enum "per-million" {
                            value 6;
                            description
                              "Configure shape rate in per-million";
                          }
                          enum "percent" {
                            value 7;
                            description
                              "Configure shape rate in percentage";
                          }
                        }
                        description
                          "Shape rate unit";
                      }
                    }  // container rate
    
                    container excess-burst {
                      if-feature action-shape-burst;
                      must "size and unit";
                      presence
                        "indicates excess-burst is configured";
                      description
                        "Excess burst size";
                      leaf size {
                        type uint32 {
                          range "1..4294967295";
                        }
                      }
    
                      leaf unit {
                        type enumeration {
                          enum "bytes" {
                            value 0;
                            description "Bytes";
                          }
                          enum "cells" {
                            value 1;
                            description "Cells";
                          }
                          enum "gbytes" {
                            value 2;
                            description
                              "Gigabytes";
                          }
                          enum "kbytes" {
                            value 3;
                            description
                              "Kilobytes";
                          }
                          enum "mbytes" {
                            value 4;
                            description
                              "Megabytes";
                          }
                          enum "ms" {
                            value 5;
                            description
                              "Milliseconds";
                          }
                          enum "packets" {
                            value 6;
                            description
                              "Packets";
                          }
                          enum "us" {
                            value 7;
                            description
                              "Microseconds";
                          }
                        }
                      }
                    }  // container excess-burst
                  }  // container average
                }  // container shape
              }  // list class
            }  // list qos
    
            list redirect {
              if-feature pmap-type-redirect;
              key "policy-map-name";
              description "Redirect policy-map";
              leaf policy-map-name {
                type string;
                description
                  "Name of the policymap";
              }
    
              leaf description {
                type string;
                description
                  "Set description for this policy-map";
              }
    
              list class {
                key "name type";
                leaf name {
                  type string {
                    pattern
                      "[a-zA-Z0-9][a-zA-Z0-9\\._@$%+#:=<>\\-]{0,62}";
                  }
                  description
                    "Name of the class-map";
                }
    
                leaf type {
                  type enumeration {
                    enum "traffic" {
                      value 3;
                      description
                        "Traffic class-map.";
                    }
                  }
                  description
                    "The type of class-map";
                }
    
                container compress {
                  if-feature action-compress-header-ip;
                  description
                    "Configure compress action";
                  container header {
                    description
                      "Configure header compression";
                    container ip {
                      presence
                        "Configure IP header compression";
                      description
                        "Configure IP header compression";
                    }  // container ip
                  }  // container header
                }  // container compress
    
                leaf encap-sequence {
                  if-feature action-encap-sequence;
                  type union {
                    type uint8 {
                      range "1..15";
                    }
                    type enumeration {
                      enum "none" {
                        value 0;
                        description
                          "Encapsulation sequence none";
                      }
                    }
                  }
                  description
                    "Configure encapsulation sequence";
                }
    
                container priority {
                  presence "Test command";
                  description "Test command";
                }  // container priority
              }  // list class
            }  // list redirect
    
            list traffic {
              if-feature pmap-type-traffic;
              key "policy-map-name";
              description "Traffic policy-map";
              leaf policy-map-name {
                type string;
                description
                  "Name of the policymap";
              }
    
              leaf description {
                type string;
                description
                  "Set description for this policy-map";
              }
    
              list class {
                key "name type";
                leaf name {
                  type string {
                    pattern
                      "[a-zA-Z0-9][a-zA-Z0-9\\._@$%+#:=<>\\-]{0,62}";
                  }
                  description
                    "Name of the class-map";
                }
    
                leaf type {
                  type enumeration {
                    enum "traffic" {
                      value 3;
                      description
                        "Traffic class-map.";
                    }
                  }
                  description
                    "The type of class-map";
                }
    
                container compress {
                  if-feature action-compress-header-ip;
                  description
                    "Configure compress action";
                  container header {
                    description
                      "Configure header compression";
                    container ip {
                      presence
                        "Configure IP header compression";
                      description
                        "Configure IP header compression";
                    }  // container ip
                  }  // container header
                }  // container compress
    
                leaf encap-sequence {
                  if-feature action-encap-sequence;
                  type union {
                    type uint8 {
                      range "1..15";
                    }
                    type enumeration {
                      enum "none" {
                        value 0;
                        description
                          "Encapsulation sequence none";
                      }
                    }
                  }
                  description
                    "Configure encapsulation sequence";
                }
              }  // list class
            }  // list traffic
          }  // container type
        }  // container policy-map
      }  // module Cisco-IOS-XR-um-policymap-classmap-cfg
    

© 2023 YumaWorks, Inc. All rights reserved.