<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-opsawg-discardmodel-07" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="IM and DM for Packet Discard Reporting">Information and Data Models for Packet Discard Reporting</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-discardmodel-07"/>
    <author initials="J." surname="Evans" fullname="John Evans">
      <organization>Amazon</organization>
      <address>
        <postal>
          <street>1 Principal Place, Worship Street</street>
          <city>London</city>
          <code>EC2A 2FA</code>
          <country>UK</country>
        </postal>
        <email>jevanamz@amazon.co.uk</email>
      </address>
    </author>
    <author initials="O." surname="Pylypenko" fullname="Oleksandr Pylypenko">
      <organization>Amazon</organization>
      <address>
        <postal>
          <street>410 Terry Ave N</street>
          <city>Seattle</city>
          <region>WA</region>
          <code>98109</code>
          <country>US</country>
        </postal>
        <email>opyl@amazon.com</email>
      </address>
    </author>
    <author initials="J." surname="Haas" fullname="Jeffrey Haas">
      <organization>Juniper Networks</organization>
      <address>
        <postal>
          <street>1133 Innovation Way</street>
          <city>Sunnyvale</city>
          <region>CA</region>
          <code>94089</code>
          <country>US</country>
        </postal>
        <email>jhaas@juniper.net</email>
      </address>
    </author>
    <author initials="A." surname="Kadosh" fullname="Aviran Kadosh">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <street>170 West Tasman Dr.</street>
          <city>San Jose</city>
          <region>CA</region>
          <code>95134</code>
          <country>US</country>
        </postal>
        <email>akadosh@cisco.com</email>
      </address>
    </author>
    <author initials="M." surname="Boucadair" fullname="Mohamed Boucadair">
      <organization>Orange</organization>
      <address>
        <postal>
          <country>France</country>
        </postal>
        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>
    <date year="2025" month="May" day="01"/>
    <area>Operations and Management Area</area>
    <workgroup>Operations and Management Area Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 98?>

<t>This document defines an information model and a corresponding YANG data model for packet discard reporting. The information model provides an implementation-independent framework for classifying packet loss to enable automated network mitigation of unintended packet loss.  The YANG data model specifies an implementation of this framework for network elements.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://o-pylypenko.github.io/draft-ietf-opsawg-discardmodel/draft-ietf-opsawg-discardmodel.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-opsawg-discardmodel/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Operations and Management Area Working Group  mailing list (<eref target="mailto:opsawg@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/opsawg/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/opsawg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/o-pylypenko/draft-ietf-opsawg-discardmodel"/>.</t>
    </note>
  </front>
  <middle>
    <?line 102?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The primary function of a network is to transport and deliver packets according to service level objectives. For network operators, understanding both where and why packet loss occurs within a network is essential for effective operation. Device-reported packet loss provides the most direct signal for identifying service impact. While certain types of packet loss, such as policy-based discards, are intentional and part of normal network operation, unintended packet loss can impact customer services.  To automate network operations, operators must be able to detect customer-impacting packet loss, determine its root cause, and apply appropriate mitigation actions. Precise classification of packet loss is crucial to ensure that anomalous packet loss is easily detected and that the right action is taken to mitigate the impact. Taking the wrong action can make problems worse; for example, removing a congested device from service can exacerbate congestion by redirecting traffic to other already congested links or devices.</t>
      <t>Existing metrics for reporting packet loss, such as ifInDiscards, ifOutDiscards, ifInErrors, and ifOutErrors defined in MIB-II <xref target="RFC2863"/> and the YANG Data Model for Interface Management <xref target="RFC8343"/>, are insufficient for automating network operations.  First, they lack precision; for instance, ifInDiscards aggregates all discarded inbound packets without specifying the cause, making it challenging to distinguish between intended and unintended discards. Second, these definitions are ambiguous, leading to inconsistent vendor implementations. For example, in some implementations ifInErrors accounts only for errored packets that are dropped, while in others, it includes all errored packets, whether they are dropped or not. Many implementations support more discard metrics than these, however, they have been inconsistently implemented due to the lack of a standardised classification scheme and clear semantics for packet loss reporting. For example, <xref target="RFC7270"/> provides support for reporting discards per flow in IPFIX using forwardingStatus, however, the defined drop reason codes also lack sufficient clarity to facilitate automated root cause analysis and impact mitigation, e.g., the "For us" reason code.</t>
      <t>This document defines an information model and corresponding YANG data model for packet loss reporting which address these issues.  The information model provides precise classification of packet loss to enable accurate automated mitigation.  The data model specifies a YANG implementation of this framework for network elements, while maintaining consistency through clear semantics.</t>
      <t>The scope of this document is limited to reporting packet loss at Layer 3 and frames discarded at Layer 2. This document considers only the signals that may trigger automated mitigation actions and not how the actions are defined or executed.</t>
      <t><xref target="problem"/> describes the problem space and requirements. <xref target="infomodel"/> defines the information model and classification scheme. <xref target="datamodel"/> specifies the corresponding YANG data model and implementation requirements together with a set of usage examples, and the complete YANG module definition. The appendices provide additional context and implementation guidance.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>A packet discard accounts for any instance where a packet is dropped by a device, regardless of whether the discard was intentional or unintentional.</t>
      <t>Intended discards are packets dropped due to deliberate network policies or configurations designed to enforce security or Quality of Service (QoS). For example, packets dropped because they match an Access Control List (ACL) denying certain traffic types.</t>
      <t>Unintended discards are packets that were dropped, which the network operator otherwise intended to deliver, i.e. which indicates an error state.  There are many possible reasons for unintended packet loss, including: erroring links may corrupt packets in transit; incorrect routing tables may result in packets being dropped because they do not match a valid route; configuration errors may result in a valid packet incorrectly matching an ACL and being dropped.</t>
      <t>Tree diagrams used in this document follow the notation defined in <xref target="RFC8340"/>.</t>
    </section>
    <section anchor="problem">
      <name>Problem Statement</name>
      <t>The fundamental problem for network operators is how to automatically detect when unintended packet loss is occurring and determine the appropriate action to mitigate it. For any network, there are a small set of potential actions that can be taken to mitigate customer impact when unintended packet loss is detected:</t>
      <ol spacing="normal" type="1"><li>
          <t>Take a problematic device, link, or set of devices and/or links out of service.</t>
        </li>
        <li>
          <t>Return a device, link, or set of devices and/or links back into service.</t>
        </li>
        <li>
          <t>Move traffic to other links or devices to alleviate congestion or avoid problematic paths.</t>
        </li>
        <li>
          <t>Roll back a recent change to a device that might have caused the problem.</t>
        </li>
        <li>
          <t>Escalate to a network operator as a last resort when automated mitigation is not possible.</t>
        </li>
      </ol>
      <t>The ability to select the appropriate mitigation action depends on four key features of packet loss:</t>
      <dl>
        <dt>FEATURE-DISCARD-LOCATION:</dt>
        <dd>
          <t>Determines which devices, interfaces and/or flows are impacted.</t>
        </dd>
        <dt>FEATURE-DISCARD-RATE:</dt>
        <dd>
          <t>The rate and/or magnitude of the discards, indicating the severity and urgency of the problem.</t>
        </dd>
        <dt>FEATURE-DISCARD-DURATION:</dt>
        <dd>
          <t>The duration of the discards which helps to distinguish transient from persistent issues.</t>
        </dd>
        <dt>FEATURE-DISCARD-CLASS:</dt>
        <dd>
          <t>The type or class of discards, which is crucial for selecting the appropriate of mitigation - for example: error discards may require taking faulty components out of service; no-buffer discards may require traffic redistribution; policy discards typically require no automated action</t>
        </dd>
      </dl>
      <t>While FEATURE-DISCARD-LOCATION, FEATURE-DISCARD-RATE, and FEATURE-DISCARD-DURATION are implicitly supported by MIB-II <xref target="RFC2863"/> and the YANG Data Model for Interface Management <xref target="RFC8343"/>, FEATURE-DISCARD-CLASS requires a more detailed classification scheme than they define. The following information model defines such a classification scheme to enable automated mapping from loss signals to appropriate mitigation actions.</t>
    </section>
    <section anchor="infomodel">
      <name>Information Model</name>
      <t>The information model is defined using YANG <xref target="RFC7950"/>,  with Data Structure Extensions <xref target="RFC8791"/>, allowing the model to remain abstract and decoupled from specific implementations in accordance with <xref target="RFC3444"/>. This abstraction supports different data model implementations - for example, in YANG, IPFIX <xref target="RFC7011"/>, gMNI <xref target="gMNI"/> or SNMPv3 <xref target="RFC3411"/> - while ensuring consistency across implementations. Using YANG for the information model enables this abstraction, leverages the community's familiarity with its syntax, and ensures lossless translation to the corresponding YANG data model, which is defined in <xref target="datamodel"/>.</t>
      <section anchor="infomodel-structure">
        <name>Structure</name>
        <t>The information model defines a hierarchical classification scheme for packet discards, which captures where in a device the discards are accounted (component), in which direction they were flowing (direction), whether they were successfully processed or discarded (type), what protocol layer they belong to (layer), and the specific reason for any discards (sub-types). This structure enables both high-level monitoring of total discards and more detailed triage to map to mitigation actions.</t>
        <t>The abstract structure of the IM is depicted in <xref target="tree-im-abstract"/>. The full YANG tree diagram of the IM is provided in <xref target="sec-im-full-tree"/>.</t>
        <figure anchor="tree-im-abstract">
          <name>Abstract IM Tree Structure</name>
          <artwork><![CDATA[
module: ietf-packet-discard-reporting-sx

  structure packet-discard-reporting:
    +-- control-plane {control-plane-stats}?
    |  +-- traffic* [direction]
    |  |  ...
    |  +-- discards* [direction]
    |     ...
    +-- interface* [name] {interface-stats}?
    |  +-- name        string
    |  +-- traffic* [direction]
    |  |  +-- direction    identityref
    |  |  +-- l2
    |  |  |  ...
    |  |  +-- l3
    |  |  |  ...
    |  |  +-- qos
    |  |     +-- class* [id]
    |  |        ...
    |  +-- discards* [direction]
    |     +-- direction    identityref
    |     +-- l2
    |     |  ...
    |     +-- l3
    |     |  ...
    |     +-- errors
    |     |  +-- l2
    |     |  |  ...
    |     |  +-- l3
    |     |  |  ...
    |     |  +-- internal
    |     |     ...
    |     +-- policy
    |     |  +-- l2
    |     |  |  ...
    |     |  +-- l3
    |     |     ...
    |     +-- no-buffer
    |        +-- class* [id]
    |           ...
    +-- flow* [direction] {flow-reporting}?
    |  +-- direction    identityref
    |  +-- traffic
    |  |  +-- l2
    |  |  |  ...
    |  |  +-- l3
    |  |  |  ...
    |  |  +-- qos
    |  |     +-- class* [id]
    |  |        ...
    |  +-- discards
    |     +-- l2
    |     |  ...
    |     +-- l3
    |     |  ...
    |     +-- errors
    |     |  +-- l2
    |     |  |  ...
    |     |  +-- l3
    |     |  |  ...
    |     |  +-- internal
    |     |     ...
    |     +-- policy
    |     |  +-- l2
    |     |  |  ...
    |     |  +-- l3
    |     |     ...
    |     +-- no-buffer
    |        +-- class* [id]
    |           ...
    +-- device {device-stats}?
       +-- traffic
       |  +-- l2
       |  |  ...
       |  +-- l3
       |  |  ...
       |  +-- qos
       |     +-- class* [id]
       |        ...
       +-- discards
          +-- l2
          |  ...
          +-- l3
          |  ...
          +-- errors
          |  +-- l2
          |  |  ...
          |  +-- l3
          |  |  ...
          |  +-- internal
          |     ...
          +-- policy
          |  +-- l2
          |  |  ...
          |  +-- l3
          |     ...
          +-- no-buffer
             +-- class* [id]
                ...
]]></artwork>
        </figure>
        <t>The discard reporting can be organized into several types: control plane, interface, flow, and device. In order to allow for better mapping to underlying data models, the IM supports a set of "features" to declare the supported type.</t>
        <t>A complete classification path follows the pattern: component/direction/type/layer/sub-type/sub-sub-type/.../metric. <xref target="wheredropped"/> illustrates where these discards typically occur in a network device.  The elements of the tree are defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Component:
            </t>
            <ul spacing="normal">
              <li>
                <t>control-plane: discards of traffic to or from a device's control plane.</t>
              </li>
              <li>
                <t>interface: discards of traffic to or from a specific network interface.</t>
              </li>
              <li>
                <t>flow: discards of traffic associated with a specific traffic flow.</t>
              </li>
              <li>
                <t>device: discards of traffic transiting the device.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Direction:
            </t>
            <ul spacing="normal">
              <li>
                <t>ingress: counters for incoming packets or frames.</t>
              </li>
              <li>
                <t>egress: counters for outgoing packets or frames.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Type:
            </t>
            <ul spacing="normal">
              <li>
                <t>traffic: counters for successfully received or transmitted packets or frames.</t>
              </li>
              <li>
                <t>discards: counters for packets or frames that were dropped.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Layer:
            </t>
            <ul spacing="normal">
              <li>
                <t>l2: Layer 2 traffic and discards, i.e., frame and byte counts.</t>
              </li>
              <li>
                <t>l3: Layer 3 traffic and discards, i.e., packet and byte counts.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>The hierarchical structure allows for future extension while maintaining backward compatibility. New discard types can be added as new branches without affecting existing implementations.</t>
        <t>The corresponding YANG module is defined in <xref target="infomodel-module"/>.</t>
      </section>
      <section anchor="sub-type-definitions">
        <name>Sub-type Definitions</name>
        <dl>
          <dt>discards/policy/:</dt>
          <dd>
            <t>These are intended discards, meaning packets dropped by a device due to a configured policy, including: ACLs, traffic policers, Reverse Path Forwarding (RPF) checks, DDoS protection rules, and explicit null routes</t>
          </dd>
          <dt>discards/error/:</dt>
          <dd>
            <t>These are unintended discards due to errors in processing packets or frames.  There are multiple sub-classes.</t>
          </dd>
          <dt>discards/error/l2/rx/:</dt>
          <dd>
            <t>These are frames discarded due to errors in the received Layer 2 frame, including: CRC errors, invalid MAC addresses, invalid VLAN tags, frame size violations and other malformed frame conditions</t>
          </dd>
          <dt>discards/error/l3/rx/:</dt>
          <dd>
            <t>These are discards which occur due to errors in the received packet, indicating an upstream problem rather than an issue with the device dropping the errored packets, including: header checksum errors,  MTU exceeded, invalid packet errors, i.e., incorrect version, incorrect header length, invalid options and other malformed packet conditions</t>
          </dd>
          <dt>discards/error/l3/rx/ttl-expired:</dt>
          <dd>
            <t>These are discards due to TTL (or Hop limit) expiry, which can occur for the following reasons: normal trace-route operations, end-system TTL/Hop limit set too low, routing loops in the network.</t>
          </dd>
          <dt>discards/error/l3/no-route/:</dt>
          <dd>
            <t>These are discards which occur due to a packet not matching any route in the routing table, e.g., which may be due to routing configuration errors or may be transient discards during convergence.</t>
          </dd>
          <dt>discards/error/internal/:</dt>
          <dd>
            <t>These are discards due to internal device issues, including: parity errors in device memory or other internal hardware errors.  Any errored discards not explicitly assigned to other classes are also accounted for here.</t>
          </dd>
          <dt>discards/no-buffer/:</dt>
          <dd>
            <t>These are discards due to buffer exhaustion, i.e. congestion related discards. These can be tail-drop discards or due to an active queue management algorithm, such as RED <xref target="RED93"/> or CODEL <xref target="RFC8289"/>.</t>
          </dd>
        </dl>
        <t>An example of possible signal-to-mitigation action mapping is provided in <xref target="mapping"/>.</t>
      </section>
      <section anchor="infomodel-module">
        <name>"ietf-packet-discard-reporting-sx" YANG Module</name>
        <t>The "ietf-packet-discard-reporting-sx" module uses the "sx" structure defined in <xref target="RFC8791"/>.</t>
        <sourcecode markers="true"><![CDATA[
module ietf-packet-discard-reporting-sx {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-packet-discard-reporting-sx";
  prefix plr-sx;

  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-yang-structure-ext {
    prefix sx;
    reference
      "RFC 8791: YANG Data Structure Extensions";
  }

  organization
    "IETF OPSAWG (Operations and Management Area Working Group)";
  contact
    "WG Web:   https://datatracker.ietf.org/wg/opsawg/
     WG List:  mailto:opsawg@ietf.org

     Author:   John Evans
               <mailto:jevanamz@amazon.co.uk>

     Author:   Oleksandr Pylypenko
               <mailto:opyl@amazon.com>

     Author:   Jeffrey Haas
               <mailto:jhaas@juniper.net>

     Author:   Aviran Kadosh
               <mailto:akadosh@cisco.com>

     Author:   Mohamed Boucadair
               <mailto:mohamed.boucadair@orange.com>";
  description
    "This module defines an information model for packet discard
     reporting.

     Copyright (c) 2025 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Revised BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX; see the
     RFC itself for full legal notices.";

  revision 2024-06-04 {
    description
      "Initial revision.";
    reference
      "RFC XXXX: Information and Data Models for Packet Discard
                 Reporting";
  }

  /*
   * Features
   */

  feature interface-stats {
    description
      "Indicates support of interface statistics on this
       device.";
  }

  feature device-stats {
    description
      "Indicates support of global device statistics on this
       device.";
  }

  feature control-plane-stats {
    description
      "Indicates support of control plane statistics on this
       device.";
  }

  feature flow-reporting {
    description
      "Indicates support of flow reporting on this device.";
  }

  /*
   * Identities
   */

  identity direction {
    description
      "Defines a direction for the reported statistics.";
  }

  identity ingress {
    base direction;
    description
      "Reports statistics for the received from the network
       packets.";
  }

  identity egress {
    base direction;
    description
      "Reports statistics for the sent to the network
       packets.";
  }

  identity address-family {
    description
      "Defines a type for the address family.";
  }

  identity ipv4 {
    base address-family;
    description
      "Identity for an IPv4 address family.";
  }

  identity ipv6 {
    base address-family;
    description
      "Identity for an IPv6 address family.";
  }

  identity all {
    base address-family;
    description
      "Identity for all address families.";
  }

  /*
   * Groupings
   */

  grouping basic-packets {
    description
      "Grouping for Layer 3 packet counters.";
    leaf packets {
      type yang:counter64;
      description
        "Number of Layer 3 packets.";
    }
  }

  grouping basic-packets-bytes {
    description
      "Grouping for Layer 3 packet and byte counters.";
    uses basic-packets;
    leaf bytes {
      type yang:counter64;
      description
        "Number of Layer 3 bytes.";
    }
  }

  grouping basic-frames {
    description
      "Grouping for Layer 2 frame counters.";
    leaf frames {
      type yang:counter64;
      description
        "Number of Layer 2 frames.";
    }
  }

  grouping basic-frames-bytes {
    description
      "Grouping for Layer 2 frame and byte counters.";
    uses basic-frames;
    leaf bytes {
      type yang:counter64;
      description
        "Number of Layer 2 bytes.";
    }
  }

  grouping l2-traffic {
    description
      "Layer 2 traffic counters.";
    uses basic-frames-bytes;
  }

  grouping ip {
    description
      "Layer 3 traffic counters per address family.";
    list address-family-stat {
      key "address-family";
      description
        "Reports per address family traffic counters.";
      leaf address-family {
        type identityref {
          base address-family;
        }
        description
          "Specifies an address family.";
      }
      uses basic-packets-bytes;
      container unicast {
        description
          "Unicast traffic counters.";
        uses basic-packets-bytes;
      }
      container multicast {
        description
          "Multicast traffic counters.";
        uses basic-packets-bytes;
      }
    }
  }

  grouping l3-traffic {
    description
      "Layer 3 traffic counters.";
    uses ip;
  }

  grouping qos {
    description
      "Quality of Service (QoS) traffic counters.";
    list class {
      key "id";
      min-elements 1;
      description
        "QoS class traffic counters.";
      leaf id {
        type string;
        description
          "QoS class identifier.";
      }
      uses basic-packets-bytes;
    }
  }

  grouping traffic {
    description
      "All traffic counters.";
    container l2 {
      description
        "Layer 2 traffic counters.";
      uses l2-traffic;
    }
    container l3 {
      description
        "Layer 3 traffic counters.";
      uses l3-traffic;
    }
    container qos {
      description
        "QoS traffic counters.";
      uses qos;
    }
  }

  grouping errors-l2-rx {
    description
      "Layer 2 ingress frame error discard counters.";
    container rx {
      description
        "Layer 2 ingress frame receive error discard
         counters.";
      leaf frames {
        type yang:counter64;
        description
          "The number of frames discarded due to errors
           with the received frame.";
      }
      leaf crc-error {
        type yang:counter64;
        description
          "The number of frames discarded due to CRC error.";
      }
      leaf invalid-mac {
        type yang:counter64;
        description
          "The number of frames discarded due to an invalid
           MAC address.";
      }
      leaf invalid-vlan {
        type yang:counter64;
        description
          "The number of frames discarded due to an invalid
           VLAN tag.";
      }
      leaf invalid-frame {
        type yang:counter64;
        description
          "The number of invalid frames discarded due to other
           reasons, not limited to: malformed frames, frame-size
           violations.";
      }
    }
  }

  grouping errors-l3-rx {
    description
      "Layer 3 ingress packet error discard counters.";
    container rx {
      description
        "Layer 3 ingress packet receive error discard
         counters.";
      leaf packets {
        type yang:counter64;
        description
          "The number of Layer 3 packets discarded due to
           errors in the received packet.";
      }
      leaf checksum-error {
        type yang:counter64;
        description
          "The number of received packets discarded due
           to a checksum error.";
      }
      leaf mtu-exceeded {
        type yang:counter64;
        description
          "The number of received packets discarded due to
           MTU exceeded.";
      }
      leaf invalid-packet {
        type yang:counter64;
        description
          "The number of invalid packets discarded due to other
           reasons, not limited to: invalid packet length, invalid
           header fields, invalid options, invalid protocol version,
           invalid flags or control bits, malformed packets.";
      }
    }
    leaf ttl-expired {
      type yang:counter64;
      description
        "The number of received packets discarded due to
         expired TTL.";
    }
    leaf no-route {
      type yang:counter64;
      description
        "The number of packets discarded due to not matching
         a valid route.";
    }
    leaf invalid-sid {
      type yang:counter64;
      description
        "The number of packets discarded due to an invalid
         Segment Routing (SR) SID.";
    }
    leaf invalid-label {
      type yang:counter64;
      description
        "The number of packets discarded due to an invalid
         MPLS label.";
    }
  }

  grouping errors-l3-int {
    description
      "Internal error discard counters.";
    leaf packets {
      type yang:counter64;
      description
        "The number of packets discarded due to internal
         errors.";
    }
    leaf parity-error {
      type yang:counter64;
      description
        "The number of packets discarded due to parity
         errors.";
    }
  }

  grouping errors-l2-tx {
    description
      "Layer 2 transmit error discard counters.";
    container tx {
      description
        "Layer 2 transmit frame error discard counters.";
      leaf frames {
        type yang:counter64;
        description
          "The number of Layer 2 frames discarded due to
           errors when transmitting.";
      }
    }
  }

  grouping errors-l3-tx {
    description
      "Layer 3 transmit error discard counters.";
    container tx {
      description
        "Layer 3 transmit packet error discard counters.";
      leaf packets {
        type yang:counter64;
        description
          "The number of Layer 3 packets discarded due to
           errors when transmitting.";
      }
    }
  }

  grouping errors {
    description
      "Error discard counters.";
    container l2 {
      description
        "Layer 2 frame error discard counters.";
      uses errors-l2-rx;
      uses errors-l2-tx;
    }
    container l3 {
      description
        "Layer 3 packet error discard counters.";
      uses errors-l3-rx;
      uses errors-l3-tx;
    }
    container internal {
      description
        "Internal error discard counters.";
      uses errors-l3-int;
    }
  }

  grouping policy-l2 {
    description
      "Layer 2 policy frame discard counters.";
    leaf frames {
      type yang:counter64;
      description
        "The number of Layer 2 frames discarded due
         to policy.";
    }
    leaf acl {
      type yang:counter64;
      description
        "The number of frames discarded due to Layer 2 ACLs.";
    }
  }

  grouping policy-l3 {
    description
      "Layer 3 policy packet discard counters.";
    leaf packets {
      type yang:counter64;
      description
        "The number of Layer 3 packets discarded due to policy.";
    }
    leaf acl {
      type yang:counter64;
      description
        "The number of packets discarded due to Layer 3 ACLs.";
    }
    container policer {
      description
        "The number of packets discarded due to policer
         violations.";
      uses basic-packets-bytes;
    }
    leaf null-route {
      type yang:counter64;
      description
        "The number of packets discarded due to matching
         a null route.";
    }
    leaf rpf {
      type yang:counter64;
      description
        "The number of packets discarded due to failing
         Reverse Path Forwarding (RPF) check.";
    }
    leaf ddos {
      type yang:counter64;
      description
        "The number of packets discarded due to DDoS
         protection policies.";
    }
  }

  grouping discards {
    description
      "Discard counters.";
    container l2 {
      description
        "Layer 2 frame discard counters.";
      uses l2-traffic;
    }
    container l3 {
      description
        "Layer 3 packet discard counters.";
      uses l3-traffic;
    }
    container errors {
      description
        "Error discard counters.";
      uses errors;
    }
    container policy {
      description
        "Policy-related discard counters.";
      uses policy;
    }
    container no-buffer {
      description
        "Discard counters due to buffer unavailability.";
      uses qos;
    }
  }

  grouping policy {
    description
      "Policy-related discard counters.";
    container l2 {
      description
        "Layer 2 policy frame discard counters.";
      uses policy-l2;
    }
    container l3 {
      description
        "Layer 3 policy packet discard counters.";
      uses policy-l3;
    }
  }

  grouping device {
    description
      "Device-level traffic and discard counters.";
    container traffic {
      description
        "Traffic counters.";
      uses traffic;
    }
    container discards {
      description
        "Discard counters.";
      uses discards;
    }
  }

  grouping interface {
    description
      "Interface-level traffic and discard counters.";
    list traffic {
      key "direction";
      description
        "Traffic counters.";
      leaf direction {
        type identityref {
          base direction;
        }
        description
          "Specifies a direction.";
      }
      uses traffic;
    }
    list discards {
      key "direction";
      description
        "Discard counters.";
      leaf direction {
        type identityref {
          base direction;
        }
        description
          "Specifies a direction.";
      }
      uses discards;
    }
  }

  grouping control-plane {
    description
      "Control plane packet counters.";
    list traffic {
      key "direction";
      description
        "Total control plane packets.";
      leaf direction {
        type identityref {
          base direction;
        }
        description
          "Specifies a direction.";
      }
      uses basic-packets-bytes;
    }
    list discards {
      key "direction";
      description
        "Control plane packet discard counters.";
      leaf direction {
        type identityref {
          base direction;
        }
        description
          "Specifies a direction.";
      }
      uses basic-packets-bytes;
      container policy {
        description
          "Number of control plane packets discarded due to policy.";
        uses basic-packets;
      }
    }
  }

  /*
   * Main structure definition
   */

  sx:structure packet-discard-reporting {
    description
      "Specifies the abstract structure of packet discard
       reporting data.";
    container control-plane {
      if-feature "control-plane-stats";
      description
        "Control plane packet counters.";
      uses control-plane;
    }
    list interface {
      if-feature "interface-stats";
      key "name";
      description
        "Indicates a list of interfaces for which packet
         discard reporting data is provided.";
      leaf name {
        type string;
        description
          "Indicates the name of the interface.";
      }
      uses interface;
    }
    list flow {
      if-feature "flow-reporting";
      key "direction";
      leaf direction {
        type identityref {
          base direction;
        }
        description
          "Specifies a direction.";
      }
      description
        "Flow packet counters.";
      uses device;
    }
    container device {
      if-feature "device-stats";
      description
        "Device level packet counters.";
      uses device;
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="datamodel">
      <name>Data Model</name>
      <t>This data model implements the Information Model defined in <xref target="infomodel"/> for the interface, device and control-plane components.  This is classified as a Network Element model as defined by <xref target="RFC1157"/>.</t>
      <section anchor="datamodel-structure">
        <name>Structure</name>
        <t>There is a direct mapping between the Information Model components and their data model implementations, with each component in the hierarchy represented by corresponding YANG containers and leaf data nodes. The abstract tree is shown in <xref target="tree-dm-abstract"/>.</t>
        <figure anchor="tree-dm-abstract">
          <name>Abstract DM Tree Structure</name>
          <artwork><![CDATA[
module: ietf-packet-discard-reporting

  +--ro control-plane! {control-plane-stats}?
  |  +--ro traffic* [direction]
  |  |  ...
  |  +--ro discards* [direction]
  |     ...
  +--ro interface* [name] {interface-stats}?
  |  +--ro name        string
  |  +--ro traffic* [direction]
  |  |  +--ro direction    identityref
  |  |  +--ro l2
  |  |  |  ...
  |  |  +--ro l3
  |  |  |  ...
  |  |  +--ro qos
  |  |     +--ro class* [id]
  |  |        ...
  |  +--ro discards* [direction]
  |     +--ro direction    identityref
  |     +--ro l2
  |     |  ...
  |     +--ro l3
  |     |  ...
  |     +--ro errors
  |     |  +--ro l2
  |     |  |  ...
  |     |  +--ro l3
  |     |  |  ...
  |     |  +--ro internal
  |     |     ...
  |     +--ro policy
  |     |  +--ro l2
  |     |  |  ...
  |     |  +--ro l3
  |     |     ...
  |     +--ro no-buffer
  |        +--ro class* [id]
  |           ...
  +--ro device! {device-stats}?
     +--ro traffic
     |  +--ro l2
     |  |  ...
     |  +--ro l3
     |  |  ...
     |  +--ro qos
     |     +--ro class* [id]
     |        ...
     +--ro discards
        +--ro l2
        |  ...
        +--ro l3
        |  ...
        +--ro errors
        |  +--ro l2
        |  |  ...
        |  +--ro l3
        |  |  ...
        |  +--ro internal
        |     ...
        +--ro policy
        |  +--ro l2
        |  |  ...
        |  +--ro l3
        |     ...
        +--ro no-buffer
           +--ro class* [id]
              ...
]]></artwork>
        </figure>
        <t>The full tree structure is provided in <xref target="sec-dm-full-tree"/>.</t>
      </section>
      <section anchor="requirements">
        <name>Implementation Requirements</name>
        <t>The following requirements apply to the implementation of the data model and are intended to ensure consistent implementation across different vendors and platforms while allowing for platform-specific optimisations where needed.  While the model defines a comprehensive set of counters and statistics, implementations <bcp14>MAY</bcp14> support a subset of the defined features based on device capabilities and operational requirements. However, implementations <bcp14>MUST</bcp14> clearly document which features are supported and how they map to the model.</t>
        <t>Requirements 1-10 relate to packets forwarded or discarded by the device, while requirement 11 relates to packets destined for or originating from the device:</t>
        <ol spacing="normal" type="1"><li>
            <t>All instances of Layer 2 frame or Layer 3 packet receipt, transmission, and discards <bcp14>MUST</bcp14> be accounted for.</t>
          </li>
          <li>
            <t>All instances of Layer 2 frame or Layer 3 packet receipt, transmission, and discards <bcp14>SHOULD</bcp14> be attributed to the physical or logical interface of the device where they occur.  Where they cannot be attributed to the interface, they <bcp14>MUST</bcp14> be attributed to the device.</t>
          </li>
          <li>
            <t>An individual frame <bcp14>MUST</bcp14> only be accounted for by either the Layer 2 traffic class or the Layer 2 discard classes within a single direction or context, i.e., ingress or egress or device.  This is to avoid double counting.</t>
          </li>
          <li>
            <t>An individual packet <bcp14>MUST</bcp14> only be accounted for by either the Layer 3 traffic class or the Layer 3 discard classes within a single direction or context, i.e., ingress or egress or device.  This is to avoid double counting.</t>
          </li>
          <li>
            <t>A frame accounted for at Layer 2 <bcp14>SHOULD NOT</bcp14> be accounted for at Layer 3 and vice versa.  An implementation <bcp14>MUST</bcp14> indicate which layers traffic and discards are counted against.  This is to avoid double counting.</t>
          </li>
          <li>
            <t>The aggregate Layer 2 and Layer 3 traffic and discard classes <bcp14>SHOULD</bcp14> account for all underlying frames or packets received, transmitted, and discarded across all other classes.</t>
          </li>
          <li>
            <t>The aggregate QoS traffic and no-buffer discard classes <bcp14>MUST</bcp14> account for all underlying packets received, transmitted, and discarded across all other classes.</t>
          </li>
          <li>
            <t>In addition to the Layer 2 and Layer 3 aggregate classes, an individual discarded packet <bcp14>MUST</bcp14> only account against a single error, policy, or no-buffer discard subclass.</t>
          </li>
          <li>
            <t>When there are multiple reasons for discarding a packet, the ordering of discard class reporting <bcp14>MUST</bcp14> be defined.</t>
          </li>
          <li>
            <t>If Diffserv <xref target="RFC2475"/> is not used, no-buffer discards <bcp14>SHOULD</bcp14> be reported as class[id="0"], which represents the default class.</t>
          </li>
          <li>
            <t>Traffic to the device control plane has its own class, however, traffic from the device control plane <bcp14>SHOULD</bcp14> be accounted for in the same way as other egress traffic.</t>
          </li>
        </ol>
      </section>
      <section anchor="examples">
        <name>Usage Examples</name>
        <t>If all of the requirements listed in <xref target="requirements"/> are met, a "good" unicast IPv4 packet received would increment:</t>
        <ul spacing="normal">
          <li>
            <t>interface/ingress/traffic/l3/v4/unicast/packets</t>
          </li>
          <li>
            <t>interface/ingress/traffic/l3/v4/unicast/bytes</t>
          </li>
          <li>
            <t>interface/ingress/traffic/qos/class[id="0"]/packets</t>
          </li>
          <li>
            <t>interface/ingress/traffic/qos/class[id="0"]/bytes</t>
          </li>
        </ul>
        <t>A received unicast IPv6 packet discarded due to Hop Limit expiry would increment:</t>
        <ul spacing="normal">
          <li>
            <t>interface/ingress/discards/l3/v6/unicast/packets</t>
          </li>
          <li>
            <t>interface/ingress/discards/l3/v6/unicast/bytes</t>
          </li>
          <li>
            <t>interface/ingress/discards/l3/rx/ttl-expired/packets</t>
          </li>
        </ul>
        <t>An IPv4 packet discarded on egress due to no buffers would increment:</t>
        <ul spacing="normal">
          <li>
            <t>interface/egress/discards/l3/v4/unicast/packets</t>
          </li>
          <li>
            <t>interface/egress/discards/l3/v4/unicast/bytes</t>
          </li>
          <li>
            <t>interface/egress/discards/no-buffer/class[id="0"]/packets</t>
          </li>
          <li>
            <t>interface/egress/discards/no-buffer/class[id="0"]/bytes</t>
          </li>
        </ul>
        <t>A multicast IPv6 packet dropped due to RPF check failure would increment:</t>
        <ul spacing="normal">
          <li>
            <t>interface/ingress/discards/l3/v6/multicast/packets</t>
          </li>
          <li>
            <t>interface/ingress/discards/l3/v6/multicast/bytes</t>
          </li>
          <li>
            <t>interface/ingress/discards/policy/l3/rpf/packets</t>
          </li>
        </ul>
      </section>
      <section anchor="datamodel-module">
        <name>"ietf-packet-discard-reporting" YANG Module</name>
        <t>The "ietf-packet-discard-reporting" module imports "ietf-packet-discard-reporting-sx" module.</t>
        <sourcecode markers="true"><![CDATA[
module ietf-packet-discard-reporting {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-packet-discard-reporting";
  prefix plr;

  import ietf-packet-discard-reporting-sx {
    prefix plr-sx;
    reference
      "RFC XXXX: Information and Data Models for Packet Discard
                 Reporting";
  }

  import ietf-netconf-acm {
    prefix nacm;
    reference
      "RFC 8341: Network Configuration Access Control Model";
  }

  organization
    "IETF OPSAWG (Operations and Management Area Working Group)";
  contact
    "WG Web:   https://datatracker.ietf.org/wg/opsawg/
     WG List:  mailto:opsawg@ietf.org

     Author:   John Evans
               <mailto:jevanamz@amazon.co.uk>

     Author:   Oleksandr Pylypenko
               <mailto:opyl@amazon.com>

     Author:   Jeffrey Haas
               <mailto:jhaas@juniper.net>

     Author:   Aviran Kadosh
               <mailto:akadosh@cisco.com>

     Author:   Mohamed Boucadair
               <mailto:mohamed.boucadair@orange.com>";
  description
    "This module defines a data model for packet discard reporting.

     Copyright (c) 2025 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Revised BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     All revisions of IETF and IANA published modules can be found
     at the YANG Parameters registry
     (https://www.iana.org/assignments/yang-parameters).

     This version of this YANG module is part of RFC XXXX; see the
     RFC itself for full legal notices.";

  revision 2025-03-03 {
    description
      "Initial revision.";
    reference
      "RFC XXXX: Information and Data Models for Packet Discard
                 Reporting";
  }

  /*
   * Features
   */

  feature control-plane-stats {
    description
      "Indicates support of control plane statistics on this
       device.";
  }

  feature interface-stats {
    description
      "Indicates support of interface statistics on this
       device.";
  }

  feature device-stats {
    description
      "Indicates support of global device statistics on this
       device.";
  }

  /*
   * Main structure definition
   */

  container control-plane {
    if-feature "control-plane-stats";
    nacm:default-deny-all;
    presence "Control plane statistics are available.";
    config false;
    description
      "Control plane packet counters.";
    uses plr-sx:control-plane;
  }
  list interface {
    if-feature "interface-stats";
    key "name";
    nacm:default-deny-all;
    config false;
    description
      "Indicates a list of interfaces for which packet discard
       reporting data is provided.";
    leaf name {
      type string;
      description
        "Indicates the name of the interface.";
    }
    uses plr-sx:interface;
  }
  container device {
    if-feature "device-stats";
    presence "Device-level statistics are available.";
    nacm:default-deny-all;
    config false;
    description
      "Device level packet counters.";
    uses plr-sx:device;
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <section anchor="security-infomodel">
        <name>Information Model</name>
        <t>The information model defined in <xref target="infomodel-module"/> specifies a YANG module using <xref target="RFC8791"/> data extensions.  It defines a set of identities, types, and groupings. These nodes are intended to be reused by other YANG modules. The module by itself does not expose any data nodes that are writable, data nodes that contain read-only state, or RPCs. As such, there are no additional security issues related to the YANG module that need to be considered.</t>
      </section>
      <section anchor="security-datamodel">
        <name>Data Model</name>
        <t>This section is modeled after the template described in <xref section="3.7" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>.</t>
        <t>The YANG module specified in <xref target="datamodel-module"/> defines a data model that is
designed to be accessed via YANG-based management protocols, such as
NETCONF <xref target="RFC6241"/> and RESTCONF <xref target="RFC8040"/>. These YANG-based management protocols (1) have to
use a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref target="RFC8446"/>, and
QUIC <xref target="RFC9000"/>) and (2) have to use mutual authentication.</t>
        <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/>
provides the means to restrict access for particular NETCONF or
RESTCONF users to a preconfigured subset of all available NETCONF or
RESTCONF protocol operations and content.</t>
        <t>There are no particularly sensitive writable data nodes.</t>
        <t>Some of the readable data nodes in this YANG module may be considered
sensitive or vulnerable in some network environments.  It is thus
important to control read access (e.g., via get, get-config, or
notification) to these data nodes. Specifically, the following
subtrees and data nodes have particular sensitivities/
vulnerabilities:</t>
        <dl>
          <dt>control-plane, interfaces, and devices:</dt>
          <dd>
            <t>Access to these data nodes would reveal information about the
attacks to which an element is subject, misconfigurations, etc.</t>
          </dd>
          <dt/>
          <dd>
            <t>Also, an attacker who can inject packets can infer the efficiency
of its attack by monitoring (the increase of) some discard counters (e.g., policy)
and adjust its attack strategy accordingly.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>IANA is requested to register the following URI in the "ns" subregistry within the "IETF XML Registry" <xref target="RFC3688"/>:</t>
      <artwork><![CDATA[
   URI:  urn:ietf:params:xml:ns:ietf-packet-discard-reporting-sx
   Registrant Contact:  The IESG.
   XML:  N/A; the requested URI is an XML namespace.

   URI:  urn:ietf:params:xml:ns:ietf-packet-discard-reporting
   Registrant Contact:  The IESG.
   XML:  N/A; the requested URI is an XML namespace.
]]></artwork>
      <t>IANA is requested to register the following YANG module in the "YANG Module
   Names" subregistry <xref target="RFC6020"/> within the "YANG Parameters" registry:</t>
      <artwork><![CDATA[
   Name:  ietf-packet-discard-reporting-sx
   Namespace:  urn:ietf:params:xml:ns:ietf-packet-discard-reporting-sx
   Prefix:  plr-sx
   Maintained by IANA?  N
   Reference:  RFC XXXX

   Name:  ietf-packet-discard-reporting
   Namespace:  urn:ietf:params:xml:ns:ietf-packet-discard-reporting
   Prefix:  plr
   Maintained by IANA?  N
   Reference:  RFC XXXX
]]></artwork>
    </section>
    <section anchor="contributors">
      <name>Contributors</name>
      <artwork><![CDATA[
Nadav Chachmon
Cisco Systems, Inc.
170 West Tasman Dr.
San Jose, CA 95134
United States of America
Email: nchachmo@cisco.com
]]></artwork>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgments</name>
      <t>The content of this document has benefitted from feedback from JR Rivers, Ronan Waide, Chris DeBruin, and Marcoz Sanz.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8791">
          <front>
            <title>YANG Data Structure Extensions</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Björklund" initials="M." surname="Björklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>This document describes YANG mechanisms for defining abstract data structures with YANG.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8791"/>
          <seriesInfo name="DOI" value="10.17487/RFC8791"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RED93">
          <front>
            <title>Random Early Detection gateways for Congestion Avoidance</title>
            <author initials="V." surname="Jacobson">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="gMNI">
          <front>
            <title>gRPC Network Management Interface, IETF 98, March 2017, &lt;https://datatracker.ietf.org/meeting/98/materials/slides-98-rtgwg-gnmi-intro-draft-openconfig-rtgwg-gnmi-spec-00&gt;</title>
            <author initials="C." surname="Marrow">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC2475">
          <front>
            <title>An Architecture for Differentiated Services</title>
            <author fullname="S. Blake" initials="S." surname="Blake"/>
            <author fullname="D. Black" initials="D." surname="Black"/>
            <author fullname="M. Carlson" initials="M." surname="Carlson"/>
            <author fullname="E. Davies" initials="E." surname="Davies"/>
            <author fullname="Z. Wang" initials="Z." surname="Wang"/>
            <author fullname="W. Weiss" initials="W." surname="Weiss"/>
            <date month="December" year="1998"/>
            <abstract>
              <t>This document defines an architecture for implementing scalable service differentiation in the Internet. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2475"/>
          <seriesInfo name="DOI" value="10.17487/RFC2475"/>
        </reference>
        <reference anchor="RFC2863">
          <front>
            <title>The Interfaces Group MIB</title>
            <author fullname="K. McCloghrie" initials="K." surname="McCloghrie"/>
            <author fullname="F. Kastenholz" initials="F." surname="Kastenholz"/>
            <date month="June" year="2000"/>
            <abstract>
              <t>This memo discusses the 'interfaces' group of MIB-II, especially the experience gained from the definition of numerous media-specific MIB modules for use in conjunction with the 'interfaces' group for managing various sub-layers beneath the internetwork-layer. It specifies clarifications to, and extensions of, the architectural issues within the MIB-II model of the 'interfaces' group. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2863"/>
          <seriesInfo name="DOI" value="10.17487/RFC2863"/>
        </reference>
        <reference anchor="RFC8343">
          <front>
            <title>A YANG Data Model for Interface Management</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document defines a YANG data model for the management of network interfaces. It is expected that interface-type-specific data models augment the generic interfaces data model defined in this document. The data model includes definitions for configuration and system state (status information and counters for the collection of statistics).</t>
              <t>The YANG data model in this document conforms to the Network Management Datastore Architecture (NMDA) defined in RFC 8342.</t>
              <t>This document obsoletes RFC 7223.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8343"/>
          <seriesInfo name="DOI" value="10.17487/RFC8343"/>
        </reference>
        <reference anchor="RFC7270">
          <front>
            <title>Cisco-Specific Information Elements Reused in IP Flow Information Export (IPFIX)</title>
            <author fullname="A. Yourtchenko" initials="A." surname="Yourtchenko"/>
            <author fullname="P. Aitken" initials="P." surname="Aitken"/>
            <author fullname="B. Claise" initials="B." surname="Claise"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>This document describes some additional IP Flow Information Export (IPFIX) Information Elements in the range of 1-127, which is the range compatible with field types used by NetFlow version 9 in RFC 3954, as specified in the IPFIX Information Model in RFC 7012.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7270"/>
          <seriesInfo name="DOI" value="10.17487/RFC7270"/>
        </reference>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams. The purpose of this document is to provide a single location for this definition. This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC3444">
          <front>
            <title>On the Difference between Information Models and Data Models</title>
            <author fullname="A. Pras" initials="A." surname="Pras"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <date month="January" year="2003"/>
            <abstract>
              <t>There has been ongoing confusion about the differences between Information Models and Data Models for defining managed objects in network management. This document explains the differences between these terms by analyzing how existing network management model specifications (from the IETF and other bodies such as the International Telecommunication Union (ITU) or the Distributed Management Task Force (DMTF)) fit into the universe of Information Models and Data Models. This memo documents the main results of the 8th workshop of the Network Management Research Group (NMRG) of the Internet Research Task Force (IRTF) hosted by the University of Texas at Austin. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3444"/>
          <seriesInfo name="DOI" value="10.17487/RFC3444"/>
        </reference>
        <reference anchor="RFC7011">
          <front>
            <title>Specification of the IP Flow Information Export (IPFIX) Protocol for the Exchange of Flow Information</title>
            <author fullname="B. Claise" initials="B." role="editor" surname="Claise"/>
            <author fullname="B. Trammell" initials="B." role="editor" surname="Trammell"/>
            <author fullname="P. Aitken" initials="P." surname="Aitken"/>
            <date month="September" year="2013"/>
            <abstract>
              <t>This document specifies the IP Flow Information Export (IPFIX) protocol, which serves as a means for transmitting Traffic Flow information over the network. In order to transmit Traffic Flow information from an Exporting Process to a Collecting Process, a common representation of flow data and a standard means of communicating them are required. This document describes how the IPFIX Data and Template Records are carried over a number of transport protocols from an IPFIX Exporting Process to an IPFIX Collecting Process. This document obsoletes RFC 5101.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="77"/>
          <seriesInfo name="RFC" value="7011"/>
          <seriesInfo name="DOI" value="10.17487/RFC7011"/>
        </reference>
        <reference anchor="RFC3411">
          <front>
            <title>An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks</title>
            <author fullname="D. Harrington" initials="D." surname="Harrington"/>
            <author fullname="R. Presuhn" initials="R." surname="Presuhn"/>
            <author fullname="B. Wijnen" initials="B." surname="Wijnen"/>
            <date month="December" year="2002"/>
            <abstract>
              <t>This document describes an architecture for describing Simple Network Management Protocol (SNMP) Management Frameworks. The architecture is designed to be modular to allow the evolution of the SNMP protocol standards over time. The major portions of the architecture are an SNMP engine containing a Message Processing Subsystem, a Security Subsystem and an Access Control Subsystem, and possibly multiple SNMP applications which provide specific functional processing of management data. This document obsoletes RFC 2571. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="62"/>
          <seriesInfo name="RFC" value="3411"/>
          <seriesInfo name="DOI" value="10.17487/RFC3411"/>
        </reference>
        <reference anchor="RFC8289">
          <front>
            <title>Controlled Delay Active Queue Management</title>
            <author fullname="K. Nichols" initials="K." surname="Nichols"/>
            <author fullname="V. Jacobson" initials="V." surname="Jacobson"/>
            <author fullname="A. McGregor" initials="A." role="editor" surname="McGregor"/>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <date month="January" year="2018"/>
            <abstract>
              <t>This document describes CoDel (Controlled Delay) -- a general framework that controls bufferbloat-generated excess delay in modern networking environments. CoDel consists of an estimator, a setpoint, and a control loop. It requires no configuration in normal Internet deployments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8289"/>
          <seriesInfo name="DOI" value="10.17487/RFC8289"/>
        </reference>
        <reference anchor="RFC1157">
          <front>
            <title>Simple Network Management Protocol (SNMP)</title>
            <author fullname="J.D. Case" initials="J.D." surname="Case"/>
            <author fullname="M. Fedor" initials="M." surname="Fedor"/>
            <author fullname="M.L. Schoffstall" initials="M.L." surname="Schoffstall"/>
            <author fullname="J. Davin" initials="J." surname="Davin"/>
            <date month="May" year="1990"/>
            <abstract>
              <t>This RFC is a re-release of RFC 1098, with a changed "Status of this Memo" section plus a few minor typographical corrections. This memo defines a simple protocol by which management information for a network element may be inspected or altered by logically remote users. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1157"/>
          <seriesInfo name="DOI" value="10.17487/RFC1157"/>
        </reference>
        <reference anchor="I-D.ietf-netmod-rfc8407bis">
          <front>
            <title>Guidelines for Authors and Reviewers of Documents Containing YANG Data Models</title>
            <author fullname="Andy Bierman" initials="A." surname="Bierman">
              <organization>YumaWorks</organization>
            </author>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <date day="18" month="April" year="2025"/>
            <abstract>
              <t>   This memo provides guidelines for authors and reviewers of
   specifications containing YANG modules, including IANA-maintained
   modules.  Recommendations and procedures are defined, which are
   intended to increase interoperability and usability of Network
   Configuration Protocol (NETCONF) and RESTCONF Protocol
   implementations that utilize YANG modules.  This document obsoletes
   RFC 8407.

   Also, this document updates RFC 8126 by providing additional
   guidelines for writing the IANA considerations for RFCs that specify
   IANA-maintained modules.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-rfc8407bis-24"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC4252">
          <front>
            <title>The Secure Shell (SSH) Authentication Protocol</title>
            <author fullname="T. Ylonen" initials="T." surname="Ylonen"/>
            <author fullname="C. Lonvick" initials="C." role="editor" surname="Lonvick"/>
            <date month="January" year="2006"/>
            <abstract>
              <t>The Secure Shell Protocol (SSH) is a protocol for secure remote login and other secure network services over an insecure network. This document describes the SSH authentication protocol framework and public key, password, and host-based client authentication methods. Additional authentication methods are described in separate documents. The SSH authentication protocol runs on top of the SSH transport layer protocol and provides a single authenticated tunnel for the SSH connection protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4252"/>
          <seriesInfo name="DOI" value="10.17487/RFC4252"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
      </references>
    </references>
    <?line 1354?>

<section anchor="wheredropped">
      <name>Where Do Packets Get Dropped?</name>
      <t>Understanding where packets are discarded in a network device is essential for interpreting discard signals and determining appropriate mitigation actions.  <xref target="ex-drop"/> depicts an example of where and why packets may be discarded in a typical single-ASIC, shared-buffered type device. While actual device architectures vary between vendors and platforms, with some using multiple ASICs, distributed forwarding, or different buffering architectures, this example illustrates the common processing stages where packets may be dropped. The logical model for classifying and reporting discards remains consistent regardless of the underlying hardware architecture.</t>
      <t>Packets ingress on the left and egress on the right:</t>
      <figure anchor="ex-drop">
        <name>Example of where packets get dropped</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="448" width="600" viewBox="0 0 600 448" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 40,176 L 40,192" fill="none" stroke="black"/>
              <path d="M 40,224 L 40,240" fill="none" stroke="black"/>
              <path d="M 80,144 L 80,176" fill="none" stroke="black"/>
              <path d="M 120,176 L 120,240" fill="none" stroke="black"/>
              <path d="M 144,176 L 144,192" fill="none" stroke="black"/>
              <path d="M 144,224 L 144,240" fill="none" stroke="black"/>
              <path d="M 232,176 L 232,240" fill="none" stroke="black"/>
              <path d="M 248,32 L 248,96" fill="none" stroke="black"/>
              <path d="M 256,176 L 256,192" fill="none" stroke="black"/>
              <path d="M 256,224 L 256,240" fill="none" stroke="black"/>
              <path d="M 280,96 L 280,144" fill="none" stroke="black"/>
              <path d="M 312,96 L 312,144" fill="none" stroke="black"/>
              <path d="M 336,176 L 336,240" fill="none" stroke="black"/>
              <path d="M 344,32 L 344,96" fill="none" stroke="black"/>
              <path d="M 360,176 L 360,192" fill="none" stroke="black"/>
              <path d="M 360,224 L 360,240" fill="none" stroke="black"/>
              <path d="M 448,176 L 448,240" fill="none" stroke="black"/>
              <path d="M 472,176 L 472,192" fill="none" stroke="black"/>
              <path d="M 472,224 L 472,240" fill="none" stroke="black"/>
              <path d="M 512,144 L 512,176" fill="none" stroke="black"/>
              <path d="M 552,176 L 552,240" fill="none" stroke="black"/>
              <path d="M 248,32 L 344,32" fill="none" stroke="black"/>
              <path d="M 248,96 L 304,96" fill="none" stroke="black"/>
              <path d="M 320,96 L 344,96" fill="none" stroke="black"/>
              <path d="M 80,144 L 272,144" fill="none" stroke="black"/>
              <path d="M 288,144 L 512,144" fill="none" stroke="black"/>
              <path d="M 40,176 L 120,176" fill="none" stroke="black"/>
              <path d="M 144,176 L 232,176" fill="none" stroke="black"/>
              <path d="M 256,176 L 336,176" fill="none" stroke="black"/>
              <path d="M 360,176 L 448,176" fill="none" stroke="black"/>
              <path d="M 472,176 L 552,176" fill="none" stroke="black"/>
              <path d="M 24,208 L 40,208" fill="none" stroke="black"/>
              <path d="M 120,208 L 144,208" fill="none" stroke="black"/>
              <path d="M 232,208 L 256,208" fill="none" stroke="black"/>
              <path d="M 336,208 L 360,208" fill="none" stroke="black"/>
              <path d="M 448,208 L 472,208" fill="none" stroke="black"/>
              <path d="M 552,208 L 568,208" fill="none" stroke="black"/>
              <path d="M 40,240 L 120,240" fill="none" stroke="black"/>
              <path d="M 144,240 L 232,240" fill="none" stroke="black"/>
              <path d="M 256,240 L 336,240" fill="none" stroke="black"/>
              <path d="M 360,240 L 448,240" fill="none" stroke="black"/>
              <path d="M 472,240 L 552,240" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="576,208 564,202.4 564,213.6" fill="black" transform="rotate(0,568,208)"/>
              <polygon class="arrowhead" points="480,208 468,202.4 468,213.6" fill="black" transform="rotate(0,472,208)"/>
              <polygon class="arrowhead" points="368,208 356,202.4 356,213.6" fill="black" transform="rotate(0,360,208)"/>
              <polygon class="arrowhead" points="320,96 308,90.4 308,101.6" fill="black" transform="rotate(270,312,96)"/>
              <polygon class="arrowhead" points="288,144 276,138.4 276,149.6" fill="black" transform="rotate(90,280,144)"/>
              <polygon class="arrowhead" points="264,208 252,202.4 252,213.6" fill="black" transform="rotate(0,256,208)"/>
              <polygon class="arrowhead" points="152,208 140,202.4 140,213.6" fill="black" transform="rotate(0,144,208)"/>
              <polygon class="arrowhead" points="48,208 36,202.4 36,213.6" fill="black" transform="rotate(0,40,208)"/>
              <g class="text">
                <text x="296" y="68">CPU</text>
                <text x="236" y="116">from_cpu</text>
                <text x="348" y="116">to_cpu</text>
                <text x="12" y="212">Rx</text>
                <text x="80" y="212">PHY/MAC</text>
                <text x="184" y="212">Ingress</text>
                <text x="296" y="212">Buffers</text>
                <text x="396" y="212">Egress</text>
                <text x="512" y="212">PHY/MAC</text>
                <text x="588" y="212">Tx</text>
                <text x="188" y="228">Pipeline</text>
                <text x="404" y="228">Pipeline</text>
                <text x="48" y="276">Unintended:</text>
                <text x="80" y="292">error/rx/l2</text>
                <text x="184" y="292">error/l3/rx</text>
                <text x="288" y="292">no-buffer</text>
                <text x="400" y="292">error/l3/tx</text>
                <text x="208" y="308">error/l3/no-route</text>
                <text x="232" y="324">error/l3/rx/ttl-expired</text>
                <text x="196" y="340">error/internal</text>
                <text x="40" y="356">Intended:</text>
                <text x="180" y="372">policy/acl</text>
                <text x="396" y="372">policy/acl</text>
                <text x="196" y="388">policy/policer</text>
                <text x="412" y="388">policy/policer</text>
                <text x="184" y="404">policy/urpf</text>
                <text x="208" y="420">policy/null-route</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
                              +-----------+
                              |           |
                              |    CPU    |
                              |           |
                              +---+---^---+
                         from_cpu |   | to_cpu
                                  |   |
         +------------------------v---+------------------------+
         |                                                     |
    +----+----+  +----------+  +---------+  +----------+  +----+----+
    |         |  |          |  |         |  |          |  |         |
Rx--> PHY/MAC +--> Ingress  +--> Buffers +--> Egress   +--> PHY/MAC +-> Tx
    |         |  | Pipeline |  |         |  | Pipeline |  |         |
    +---------+  +----------+  +---------+  +----------+  +---------+

Unintended:
    error/rx/l2  error/l3/rx   no-buffer    error/l3/tx
                 error/l3/no-route
                 error/l3/rx/ttl-expired
                 error/internal
Intended:
                 policy/acl                 policy/acl
                 policy/policer             policy/policer
                 policy/urpf
                 policy/null-route

]]></artwork>
        </artset>
      </figure>
      <t>See Appendix B for examples of how these discard signals map to root causes and mitigation actions.</t>
    </section>
    <section anchor="mapping">
      <name>Example Signal-to-mitigation Action Mapping</name>
      <t>The effectiveness of automated mitigation depends on correctly mapping discard signals to root causes and appropriate actions.  <xref target="ex-table"/> gives example discard signal-to-mitigation action mappings based on the features described in section 3.</t>
      <table anchor="ex-table">
        <name>Example Signal-Cause-Mitigation Mapping</name>
        <thead>
          <tr>
            <th align="left">DISCARD-CLASS</th>
            <th align="left">Discard cause</th>
            <th align="left">DISCARD-RATE</th>
            <th align="center">DISCARD-DURATION</th>
            <th align="center">Unintended?</th>
            <th align="left">Possible actions</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">ingress/discards/errors/l2/rx</td>
            <td align="left">Upstream device or link error</td>
            <td align="left">&gt;Baseline</td>
            <td align="center">O(1min)</td>
            <td align="center">Y</td>
            <td align="left">Take upstream link or device out-of-service</td>
          </tr>
          <tr>
            <td align="left">ingress/discards/errors/l3/rx/ttl-expired</td>
            <td align="left">Tracert</td>
            <td align="left">&lt;=Baseline</td>
            <td align="center"> </td>
            <td align="center">N</td>
            <td align="left">no action</td>
          </tr>
          <tr>
            <td align="left">ingress/discards/errors/l3/rx/ttl-expired</td>
            <td align="left">Convergence</td>
            <td align="left">&gt;Baseline</td>
            <td align="center">O(1s)</td>
            <td align="center">Y</td>
            <td align="left">No action</td>
          </tr>
          <tr>
            <td align="left">ingress/discards/errors/l3/rx/ttl-expired</td>
            <td align="left">Routing loop</td>
            <td align="left">&gt;Baseline</td>
            <td align="center">O(1min)</td>
            <td align="center">Y</td>
            <td align="left">Roll-back change</td>
          </tr>
          <tr>
            <td align="left">.*/policy/.*</td>
            <td align="left">Policy</td>
            <td align="left"> </td>
            <td align="center"> </td>
            <td align="center">N</td>
            <td align="left">No action</td>
          </tr>
          <tr>
            <td align="left">ingress/discards/errors/l3/no-route</td>
            <td align="left">Convergence</td>
            <td align="left">&gt;Baseline</td>
            <td align="center">O(1s)</td>
            <td align="center">Y</td>
            <td align="left">No action</td>
          </tr>
          <tr>
            <td align="left">ingress/discards/errors/l3/no-route</td>
            <td align="left">Config error</td>
            <td align="left">&gt;Baseline</td>
            <td align="center">O(1min)</td>
            <td align="center">Y</td>
            <td align="left">Roll-back change</td>
          </tr>
          <tr>
            <td align="left">ingress/discards/errors/l3/no-route</td>
            <td align="left">Invalid destination</td>
            <td align="left">&gt;Baseline</td>
            <td align="center">O(10min)</td>
            <td align="center">N</td>
            <td align="left">Escalate to operator</td>
          </tr>
          <tr>
            <td align="left">ingress/discards/errors/internal</td>
            <td align="left">Device errors</td>
            <td align="left">&gt;Baseline</td>
            <td align="center">O(1min)</td>
            <td align="center">Y</td>
            <td align="left">Take device out-of-service</td>
          </tr>
          <tr>
            <td align="left">egress/discards/no-buffer</td>
            <td align="left">Congestion</td>
            <td align="left">&lt;=Baseline</td>
            <td align="center"> </td>
            <td align="center">N</td>
            <td align="left">No action</td>
          </tr>
          <tr>
            <td align="left">egress/discards/no-buffer</td>
            <td align="left">Congestion</td>
            <td align="left">&gt;Baseline</td>
            <td align="center">O(1min)</td>
            <td align="center">Y</td>
            <td align="left">Bring capacity back into service or move traffic</td>
          </tr>
        </tbody>
      </table>
      <t>The 'Baseline' in the 'DISCARD-RATE' column is both DISCARD-CLASS and network dependent.</t>
    </section>
    <section anchor="experience">
      <name>Implementation Experience</name>
      <t>This appendix captures practical insights gained from implementing this information model across multiple vendors' platforms, as guidance for future implementers.</t>
      <ol spacing="normal" type="1"><li>
          <t>The number and granularity of discard classes defined in the information model represent a compromise.  It aims to provide sufficient detail to enable appropriate automated actions while avoiding excessive detail, which may hinder quick problem identification.  Additionally, it helps to limit the quantity of data produced per interface, constraining the data volume and device CPU impacts.  While further granularity is possible, the defined schema has generally proven to be sufficient for the task of mitigating unintended packet loss.</t>
        </li>
        <li>
          <t>There are many possible ways to define the discard classification tree.  For example, we could have used a multi-rooted tree, rooted in each protocol.  Instead, we opted to define a tree where protocol discards and causal discard classes are accounted for orthogonally.  This decision reduces the number of combinations of classes and has proven sufficient for determining mitigation actions.</t>
        </li>
        <li>
          <t>NoBuffer discards can be realized differently with different memory architectures. Whether a NoBuffer discard is attributed to ingress or egress can differ accordingly.  For successful auto-mitigation, discards due to egress interface congestion should be reported on egress, while discards due to device-level congestion (e.g. due to exceeding the device forwarding rate) should be reported on ingress.</t>
        </li>
        <li>
          <t>Platforms often account for the number of packets discarded where the TTL has expired (or Hop Limit exceeded), and the device CPU has returned an ICMP Time Exceeded message.  There is typically a policer applied to limit the number of packets sent to the device CPU, however, which implicitly limits the rate of TTL discards that are processed.  One method to account for all packet discards due to TTL expired, even those that are dropped by a policer when being forwarded to the CPU, is to use accounting of all ingress packets received with TTL=1 as a proxy measure.</t>
        </li>
        <li>
          <t>Where no route discards are implemented with a default null route, separate discard accounting is required for any explicit null routes configured, in order to differentiate between interface/ingress/discards/policy/null-route/packets and interface/ingress/discards/errors/no-route/packets.</t>
        </li>
        <li>
          <t>It is useful to account separately for transit packets discarded by ACLs or policers, and packets discarded by ACLs or policers which limit the number of packets to the device control plane.</t>
        </li>
        <li>
          <t>It is not possible to identify a configuration error - e.g., when intended discards are unintended - with device discard metrics alone.  For example, additional context is needed to determine if ACL discards are intended or due to a misconfigured ACL, i.e., with configuration validation before deployment or by detecting a significant change in ACL discards after a configuration change compared to before.</t>
        </li>
        <li>
          <t>Aggregate counters need to be able to deal with the possibility of discontinuities in the underlying counters.</t>
        </li>
        <li>
          <t>In cases where the reporting device is the source or destination of a tunnel, the ingress protocol for a packet may differ from the egress protocol (e.g., if IPv4 is tunneled over IPv6).  Some implementations may attribute egress discards to the ingress protocol.</t>
        </li>
        <li>
          <t>While the classification tree is seven layers deep, a minimal implementation may only implement the top six layers.</t>
        </li>
      </ol>
    </section>
    <section anchor="sec-im-full-tree">
      <name>Full Information Model Tree</name>
      <t>The following YANG tree diagram shows the complete IM structure:</t>
      <artwork><![CDATA[
module: ietf-packet-discard-reporting-sx

  structure packet-discard-reporting:
    +-- control-plane {control-plane-stats}?
    |  +-- traffic* [direction]
    |  |  +-- direction    identityref
    |  |  +-- packets?     yang:counter64
    |  |  +-- bytes?       yang:counter64
    |  +-- discards* [direction]
    |     +-- direction    identityref
    |     +-- packets?     yang:counter64
    |     +-- bytes?       yang:counter64
    |     +-- policy
    |        +-- packets?   yang:counter64
    +-- interface* [name] {interface-stats}?
    |  +-- name        string
    |  +-- traffic* [direction]
    |  |  +-- direction    identityref
    |  |  +-- l2
    |  |  |  +-- frames?   yang:counter64
    |  |  |  +-- bytes?    yang:counter64
    |  |  +-- l3
    |  |  |  +-- address-family-stat* [address-family]
    |  |  |     +-- address-family    identityref
    |  |  |     +-- packets?          yang:counter64
    |  |  |     +-- bytes?            yang:counter64
    |  |  |     +-- unicast
    |  |  |     |  +-- packets?   yang:counter64
    |  |  |     |  +-- bytes?     yang:counter64
    |  |  |     +-- multicast
    |  |  |        +-- packets?   yang:counter64
    |  |  |        +-- bytes?     yang:counter64
    |  |  +-- qos
    |  |     +-- class* [id]
    |  |        +-- id         string
    |  |        +-- packets?   yang:counter64
    |  |        +-- bytes?     yang:counter64
    |  +-- discards* [direction]
    |     +-- direction    identityref
    |     +-- l2
    |     |  +-- frames?   yang:counter64
    |     |  +-- bytes?    yang:counter64
    |     +-- l3
    |     |  +-- address-family-stat* [address-family]
    |     |     +-- address-family    identityref
    |     |     +-- packets?          yang:counter64
    |     |     +-- bytes?            yang:counter64
    |     |     +-- unicast
    |     |     |  +-- packets?   yang:counter64
    |     |     |  +-- bytes?     yang:counter64
    |     |     +-- multicast
    |     |        +-- packets?   yang:counter64
    |     |        +-- bytes?     yang:counter64
    |     +-- errors
    |     |  +-- l2
    |     |  |  +-- rx
    |     |  |  |  +-- frames?          yang:counter64
    |     |  |  |  +-- crc-error?       yang:counter64
    |     |  |  |  +-- invalid-mac?     yang:counter64
    |     |  |  |  +-- invalid-vlan?    yang:counter64
    |     |  |  |  +-- invalid-frame?   yang:counter64
    |     |  |  +-- tx
    |     |  |     +-- frames?   yang:counter64
    |     |  +-- l3
    |     |  |  +-- rx
    |     |  |  |  +-- packets?          yang:counter64
    |     |  |  |  +-- checksum-error?   yang:counter64
    |     |  |  |  +-- mtu-exceeded?     yang:counter64
    |     |  |  |  +-- invalid-packet?   yang:counter64
    |     |  |  +-- ttl-expired?     yang:counter64
    |     |  |  +-- no-route?        yang:counter64
    |     |  |  +-- invalid-sid?     yang:counter64
    |     |  |  +-- invalid-label?   yang:counter64
    |     |  |  +-- tx
    |     |  |     +-- packets?   yang:counter64
    |     |  +-- internal
    |     |     +-- packets?        yang:counter64
    |     |     +-- parity-error?   yang:counter64
    |     +-- policy
    |     |  +-- l2
    |     |  |  +-- frames?   yang:counter64
    |     |  |  +-- acl?      yang:counter64
    |     |  +-- l3
    |     |     +-- packets?      yang:counter64
    |     |     +-- acl?          yang:counter64
    |     |     +-- policer
    |     |     |  +-- packets?   yang:counter64
    |     |     |  +-- bytes?     yang:counter64
    |     |     +-- null-route?   yang:counter64
    |     |     +-- rpf?          yang:counter64
    |     |     +-- ddos?         yang:counter64
    |     +-- no-buffer
    |        +-- class* [id]
    |           +-- id         string
    |           +-- packets?   yang:counter64
    |           +-- bytes?     yang:counter64
    +-- flow* [direction] {flow-reporting}?
    |  +-- direction    identityref
    |  +-- traffic
    |  |  +-- l2
    |  |  |  +-- frames?   yang:counter64
    |  |  |  +-- bytes?    yang:counter64
    |  |  +-- l3
    |  |  |  +-- address-family-stat* [address-family]
    |  |  |     +-- address-family    identityref
    |  |  |     +-- packets?          yang:counter64
    |  |  |     +-- bytes?            yang:counter64
    |  |  |     +-- unicast
    |  |  |     |  +-- packets?   yang:counter64
    |  |  |     |  +-- bytes?     yang:counter64
    |  |  |     +-- multicast
    |  |  |        +-- packets?   yang:counter64
    |  |  |        +-- bytes?     yang:counter64
    |  |  +-- qos
    |  |     +-- class* [id]
    |  |        +-- id         string
    |  |        +-- packets?   yang:counter64
    |  |        +-- bytes?     yang:counter64
    |  +-- discards
    |     +-- l2
    |     |  +-- frames?   yang:counter64
    |     |  +-- bytes?    yang:counter64
    |     +-- l3
    |     |  +-- address-family-stat* [address-family]
    |     |     +-- address-family    identityref
    |     |     +-- packets?          yang:counter64
    |     |     +-- bytes?            yang:counter64
    |     |     +-- unicast
    |     |     |  +-- packets?   yang:counter64
    |     |     |  +-- bytes?     yang:counter64
    |     |     +-- multicast
    |     |        +-- packets?   yang:counter64
    |     |        +-- bytes?     yang:counter64
    |     +-- errors
    |     |  +-- l2
    |     |  |  +-- rx
    |     |  |  |  +-- frames?          yang:counter64
    |     |  |  |  +-- crc-error?       yang:counter64
    |     |  |  |  +-- invalid-mac?     yang:counter64
    |     |  |  |  +-- invalid-vlan?    yang:counter64
    |     |  |  |  +-- invalid-frame?   yang:counter64
    |     |  |  +-- tx
    |     |  |     +-- frames?   yang:counter64
    |     |  +-- l3
    |     |  |  +-- rx
    |     |  |  |  +-- packets?          yang:counter64
    |     |  |  |  +-- checksum-error?   yang:counter64
    |     |  |  |  +-- mtu-exceeded?     yang:counter64
    |     |  |  |  +-- invalid-packet?   yang:counter64
    |     |  |  +-- ttl-expired?     yang:counter64
    |     |  |  +-- no-route?        yang:counter64
    |     |  |  +-- invalid-sid?     yang:counter64
    |     |  |  +-- invalid-label?   yang:counter64
    |     |  |  +-- tx
    |     |  |     +-- packets?   yang:counter64
    |     |  +-- internal
    |     |     +-- packets?        yang:counter64
    |     |     +-- parity-error?   yang:counter64
    |     +-- policy
    |     |  +-- l2
    |     |  |  +-- frames?   yang:counter64
    |     |  |  +-- acl?      yang:counter64
    |     |  +-- l3
    |     |     +-- packets?      yang:counter64
    |     |     +-- acl?          yang:counter64
    |     |     +-- policer
    |     |     |  +-- packets?   yang:counter64
    |     |     |  +-- bytes?     yang:counter64
    |     |     +-- null-route?   yang:counter64
    |     |     +-- rpf?          yang:counter64
    |     |     +-- ddos?         yang:counter64
    |     +-- no-buffer
    |        +-- class* [id]
    |           +-- id         string
    |           +-- packets?   yang:counter64
    |           +-- bytes?     yang:counter64
    +-- device {device-stats}?
       +-- traffic
       |  +-- l2
       |  |  +-- frames?   yang:counter64
       |  |  +-- bytes?    yang:counter64
       |  +-- l3
       |  |  +-- address-family-stat* [address-family]
       |  |     +-- address-family    identityref
       |  |     +-- packets?          yang:counter64
       |  |     +-- bytes?            yang:counter64
       |  |     +-- unicast
       |  |     |  +-- packets?   yang:counter64
       |  |     |  +-- bytes?     yang:counter64
       |  |     +-- multicast
       |  |        +-- packets?   yang:counter64
       |  |        +-- bytes?     yang:counter64
       |  +-- qos
       |     +-- class* [id]
       |        +-- id         string
       |        +-- packets?   yang:counter64
       |        +-- bytes?     yang:counter64
       +-- discards
          +-- l2
          |  +-- frames?   yang:counter64
          |  +-- bytes?    yang:counter64
          +-- l3
          |  +-- address-family-stat* [address-family]
          |     +-- address-family    identityref
          |     +-- packets?          yang:counter64
          |     +-- bytes?            yang:counter64
          |     +-- unicast
          |     |  +-- packets?   yang:counter64
          |     |  +-- bytes?     yang:counter64
          |     +-- multicast
          |        +-- packets?   yang:counter64
          |        +-- bytes?     yang:counter64
          +-- errors
          |  +-- l2
          |  |  +-- rx
          |  |  |  +-- frames?          yang:counter64
          |  |  |  +-- crc-error?       yang:counter64
          |  |  |  +-- invalid-mac?     yang:counter64
          |  |  |  +-- invalid-vlan?    yang:counter64
          |  |  |  +-- invalid-frame?   yang:counter64
          |  |  +-- tx
          |  |     +-- frames?   yang:counter64
          |  +-- l3
          |  |  +-- rx
          |  |  |  +-- packets?          yang:counter64
          |  |  |  +-- checksum-error?   yang:counter64
          |  |  |  +-- mtu-exceeded?     yang:counter64
          |  |  |  +-- invalid-packet?   yang:counter64
          |  |  +-- ttl-expired?     yang:counter64
          |  |  +-- no-route?        yang:counter64
          |  |  +-- invalid-sid?     yang:counter64
          |  |  +-- invalid-label?   yang:counter64
          |  |  +-- tx
          |  |     +-- packets?   yang:counter64
          |  +-- internal
          |     +-- packets?        yang:counter64
          |     +-- parity-error?   yang:counter64
          +-- policy
          |  +-- l2
          |  |  +-- frames?   yang:counter64
          |  |  +-- acl?      yang:counter64
          |  +-- l3
          |     +-- packets?      yang:counter64
          |     +-- acl?          yang:counter64
          |     +-- policer
          |     |  +-- packets?   yang:counter64
          |     |  +-- bytes?     yang:counter64
          |     +-- null-route?   yang:counter64
          |     +-- rpf?          yang:counter64
          |     +-- ddos?         yang:counter64
          +-- no-buffer
             +-- class* [id]
                +-- id         string
                +-- packets?   yang:counter64
                +-- bytes?     yang:counter64
]]></artwork>
    </section>
    <section anchor="sec-dm-full-tree">
      <name>Full Data Model Tree</name>
      <t>The following YANG tree diagram shows the complete data module structure:</t>
      <artwork><![CDATA[
module: ietf-packet-discard-reporting
  +--ro control-plane! {control-plane-stats}?
  |  +--ro traffic* [direction]
  |  |  +--ro direction    identityref
  |  |  +--ro packets?     yang:counter64
  |  |  +--ro bytes?       yang:counter64
  |  +--ro discards* [direction]
  |     +--ro direction    identityref
  |     +--ro packets?     yang:counter64
  |     +--ro bytes?       yang:counter64
  |     +--ro policy
  |        +--ro packets?   yang:counter64
  +--ro interface* [name] {interface-stats}?
  |  +--ro name        string
  |  +--ro traffic* [direction]
  |  |  +--ro direction    identityref
  |  |  +--ro l2
  |  |  |  +--ro frames?   yang:counter64
  |  |  |  +--ro bytes?    yang:counter64
  |  |  +--ro l3
  |  |  |  +--ro address-family-stat* [address-family]
  |  |  |     +--ro address-family    identityref
  |  |  |     +--ro packets?          yang:counter64
  |  |  |     +--ro bytes?            yang:counter64
  |  |  |     +--ro unicast
  |  |  |     |  +--ro packets?   yang:counter64
  |  |  |     |  +--ro bytes?     yang:counter64
  |  |  |     +--ro multicast
  |  |  |        +--ro packets?   yang:counter64
  |  |  |        +--ro bytes?     yang:counter64
  |  |  +--ro qos
  |  |     +--ro class* [id]
  |  |        +--ro id         string
  |  |        +--ro packets?   yang:counter64
  |  |        +--ro bytes?     yang:counter64
  |  +--ro discards* [direction]
  |     +--ro direction    identityref
  |     +--ro l2
  |     |  +--ro frames?   yang:counter64
  |     |  +--ro bytes?    yang:counter64
  |     +--ro l3
  |     |  +--ro address-family-stat* [address-family]
  |     |     +--ro address-family    identityref
  |     |     +--ro packets?          yang:counter64
  |     |     +--ro bytes?            yang:counter64
  |     |     +--ro unicast
  |     |     |  +--ro packets?   yang:counter64
  |     |     |  +--ro bytes?     yang:counter64
  |     |     +--ro multicast
  |     |        +--ro packets?   yang:counter64
  |     |        +--ro bytes?     yang:counter64
  |     +--ro errors
  |     |  +--ro l2
  |     |  |  +--ro rx
  |     |  |  |  +--ro frames?          yang:counter64
  |     |  |  |  +--ro crc-error?       yang:counter64
  |     |  |  |  +--ro invalid-mac?     yang:counter64
  |     |  |  |  +--ro invalid-vlan?    yang:counter64
  |     |  |  |  +--ro invalid-frame?   yang:counter64
  |     |  |  +--ro tx
  |     |  |     +--ro frames?   yang:counter64
  |     |  +--ro l3
  |     |  |  +--ro rx
  |     |  |  |  +--ro packets?          yang:counter64
  |     |  |  |  +--ro checksum-error?   yang:counter64
  |     |  |  |  +--ro mtu-exceeded?     yang:counter64
  |     |  |  |  +--ro invalid-packet?   yang:counter64
  |     |  |  +--ro ttl-expired?     yang:counter64
  |     |  |  +--ro no-route?        yang:counter64
  |     |  |  +--ro invalid-sid?     yang:counter64
  |     |  |  +--ro invalid-label?   yang:counter64
  |     |  |  +--ro tx
  |     |  |     +--ro packets?   yang:counter64
  |     |  +--ro internal
  |     |     +--ro packets?        yang:counter64
  |     |     +--ro parity-error?   yang:counter64
  |     +--ro policy
  |     |  +--ro l2
  |     |  |  +--ro frames?   yang:counter64
  |     |  |  +--ro acl?      yang:counter64
  |     |  +--ro l3
  |     |     +--ro packets?      yang:counter64
  |     |     +--ro acl?          yang:counter64
  |     |     +--ro policer
  |     |     |  +--ro packets?   yang:counter64
  |     |     |  +--ro bytes?     yang:counter64
  |     |     +--ro null-route?   yang:counter64
  |     |     +--ro rpf?          yang:counter64
  |     |     +--ro ddos?         yang:counter64
  |     +--ro no-buffer
  |        +--ro class* [id]
  |           +--ro id         string
  |           +--ro packets?   yang:counter64
  |           +--ro bytes?     yang:counter64
  +--ro device! {device-stats}?
     +--ro traffic
     |  +--ro l2
     |  |  +--ro frames?   yang:counter64
     |  |  +--ro bytes?    yang:counter64
     |  +--ro l3
     |  |  +--ro address-family-stat* [address-family]
     |  |     +--ro address-family    identityref
     |  |     +--ro packets?          yang:counter64
     |  |     +--ro bytes?            yang:counter64
     |  |     +--ro unicast
     |  |     |  +--ro packets?   yang:counter64
     |  |     |  +--ro bytes?     yang:counter64
     |  |     +--ro multicast
     |  |        +--ro packets?   yang:counter64
     |  |        +--ro bytes?     yang:counter64
     |  +--ro qos
     |     +--ro class* [id]
     |        +--ro id         string
     |        +--ro packets?   yang:counter64
     |        +--ro bytes?     yang:counter64
     +--ro discards
        +--ro l2
        |  +--ro frames?   yang:counter64
        |  +--ro bytes?    yang:counter64
        +--ro l3
        |  +--ro address-family-stat* [address-family]
        |     +--ro address-family    identityref
        |     +--ro packets?          yang:counter64
        |     +--ro bytes?            yang:counter64
        |     +--ro unicast
        |     |  +--ro packets?   yang:counter64
        |     |  +--ro bytes?     yang:counter64
        |     +--ro multicast
        |        +--ro packets?   yang:counter64
        |        +--ro bytes?     yang:counter64
        +--ro errors
        |  +--ro l2
        |  |  +--ro rx
        |  |  |  +--ro frames?          yang:counter64
        |  |  |  +--ro crc-error?       yang:counter64
        |  |  |  +--ro invalid-mac?     yang:counter64
        |  |  |  +--ro invalid-vlan?    yang:counter64
        |  |  |  +--ro invalid-frame?   yang:counter64
        |  |  +--ro tx
        |  |     +--ro frames?   yang:counter64
        |  +--ro l3
        |  |  +--ro rx
        |  |  |  +--ro packets?          yang:counter64
        |  |  |  +--ro checksum-error?   yang:counter64
        |  |  |  +--ro mtu-exceeded?     yang:counter64
        |  |  |  +--ro invalid-packet?   yang:counter64
        |  |  +--ro ttl-expired?     yang:counter64
        |  |  +--ro no-route?        yang:counter64
        |  |  +--ro invalid-sid?     yang:counter64
        |  |  +--ro invalid-label?   yang:counter64
        |  |  +--ro tx
        |  |     +--ro packets?   yang:counter64
        |  +--ro internal
        |     +--ro packets?        yang:counter64
        |     +--ro parity-error?   yang:counter64
        +--ro policy
        |  +--ro l2
        |  |  +--ro frames?   yang:counter64
        |  |  +--ro acl?      yang:counter64
        |  +--ro l3
        |     +--ro packets?      yang:counter64
        |     +--ro acl?          yang:counter64
        |     +--ro policer
        |     |  +--ro packets?   yang:counter64
        |     |  +--ro bytes?     yang:counter64
        |     +--ro null-route?   yang:counter64
        |     +--ro rpf?          yang:counter64
        |     +--ro ddos?         yang:counter64
        +--ro no-buffer
           +--ro class* [id]
              +--ro id         string
              +--ro packets?   yang:counter64
              +--ro bytes?     yang:counter64
]]></artwork>
    </section>
  </back>
  <!-- ##markdown-source:
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
QnFsdcCkYLqqM7PIuv4KP89hHuTekhDB4zDPgmgqDXRYwIhgB/WDzkNuEZtO
A54IksqBt/PY2zmQPLNIrMji0PqFLlSjwVYDP0WgNi0dVHK9muJAhvVu/xE/
+6N4KZ2R9Nc2vpHuSVEIpjZNSCVDqzNkgFHdmhKj0bkwpgxCXAUFoHRiGaDU
0HakYcNxZ1EyMgrpHcauiGhvCILjbLwLCG6Ab8PR6ZCeaZyo7OniYIoATjlI
GNokoAKHVjixFohjnd1iPlYGmz4+b5BgQaBHkS5LOQaedTd9Pa8bl2k6s/Fr
hpXWO7lvLWNOYV4a3VWwBPcLChYaULy1OxDSS+JR8tO6C+7JtaYGVYcNuXkl
xpfXB/Yc3QFrJ3qq2nNOjjg9h246jfb4fkZ73GE0TIL/1MGgC2egMMgqtg4p
nkC81s6ZyUc4djj2lJ+udgVVFzSs8jFrXwt7vpWAiAJ/KtweubAZmQBD+fnj
g+c9xV+Kw8GAr1eLEQwCjMIdTY/yUc2yeioeerbvOCHXMW7NjGw6ZxhrxvaA
9zFf6q9tttIRusk097RTsmLZnP4+fRZ7yu3baRp3WLO9ynhI9ZLxIJ9txfba
Viza85QXv3aKxQhQ63QYZ89Lg4XLtkH2S4PQ4fkqxgX4wrNuLosinUNjDw9b
bLkfbDWiTwmj8pi1k5fLVil19ApayUTWqwYmqxarHlaA9tIuZ1SNItNLmU2Y
VcIfZa7QAbsxnpJ53zb+W/lhPWrah/1YGp4CMN0AONOffjoIFVtjv+vWKFOt
szXCZXkr/Jo08JS6A6K1w9BO4LMsDu2HE42HRRh7OoNgt3EXwFCysxaiDydF
Qufc0OdtC2dG0PZ/uinJlhesdbXQh1A3JUOA0Z6eVSV62tihBNxwVgOvM8x+
l2HqSUsNs988jCG0htVuGQP6qMM5Bxo8mGx62y5BlLHC8tE5HdWwILrnlgVx
e5eGjDuKIcIaki7oGo0SuJa80Skfa0ncHBe22pmgp2WEQdvyziBQx+nY48n9
HtDqoHQNNDIO6i388e8CDzkpaUgbg1aYvAXO68iP/4mAqsB9C5RMyvcJpopX
14FLAUAbUhku7lPU0NSVGRYTClQKgocpCHYHJhuhONl6drLfgZ3s6w1vB/Hv
jZ+Uur8bQynanPexhgXrs7SINvYbczPqOItMnvgM7KUAQAF2G3DOQnLSOGrA
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
K33XFSZRneaW7iZjgqGuTtzni61YiVHZ3PpqDcojKsVSyU2IvkQMOLBzzYJK
5h1JEOELKVInSaDvF0mwuCFePq2TlfjGMRzpBpDG17QU30qaRB/qxCN/LRJW
QO7Yi/MjGPgwozs8+pbnNU601xhvCFMLyneq6DtFpMZmI5eGxKitnPJYkgDp
mV85qXPWYpcy6DKpvrEmHeA12P40lyGaPFgsKZ7JRD1SNKB0vv3BE1yu70+9
44GyJKEXL52Onx7sPBmFGUXarwqgK3opXrluKKpSm6cZg8ACYPStL+xf5bvI
r0MmP4+jx9YdKqqMS6bvUOm9Prk6evP6pczDe7x3gNSJRHZxcmm/ebpzsCPv
686Ctu7Fg92HYu5f0zF51Ol9XlF5Iw+JZL4O/QHf8XN5+aMc52Dv0d7Hj31x
9epSjXxw8BifAFC9v7w9PZKPn+3sAEAPCdYHe3o4MiEWqxwjCGiR4AZi00Au
QHczXTx4fXh09lBt3H1ETU8KAubeeB8bxZiAn+L1kblcBGlwgQgZryI/FQrJ
YLlotAKcaSbvRkoD67I2kxJAhZgVE67sRNflSVxPAUUA43ygciXlDjMg4aYM
6ErFa7OV7aTEXu8yMaIJt3LhC/bgF5R3ee+S2YM9Mwqg5HoVgaiijsjKW+iy
4CKIwdBOYpm8gNwQo3fzVdZjDw0bcVp5RYAUsiUNIdnP0KUP//EYn8hyemgU
KPPwoeQgmTNXIfOO6RbPvnvZVg+WA1NlGK/W9InerDVWEyV2vd1TU5XJGsNe
z9GXrOtXM/vm1QzvX5LEWAGq9LCCkRJQfN8yQEZoCqON5Oc5iFZqzjoOmHiy
bijllbIF3BcLdFZYewAvDMvHAxw/yshcFtxVgMpSQqZiGGNbHSzkR1PJJQMM
MoSgV6x7KLswH4jao3BZJKArJxQse8C6zhhDbEhgD5kQisda1LKy8/Zhj7KF
Jv9AZ4TVNd/MOuOQIMXoojXyfbZ3S+oAmqoYM8KXYUbRoiCTgoUt3KB42drb
i1MVrNqKsy3En7KFVRSe3pGl/dezV2DW8dstyTj2Hz99+vHjkH25qONAj0NQ
dKqdrm1+0x4ZjjQCbokj9vfxnV1g7V/+QKlpAAc8er19+FxHxXieNBsqN4yg
aj8wW+d3B+xzQcUaHjTdZMUcb4JcHcuPj929xiHcteTFeryzB1LFWdiCJ2RL
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
DtNxn/7iNhNVLeunV0MKzbRaQxVdG8lD26V35f3S0ll523QYXR+FLr3tRKcV
DbqMj9+pwnMOOMV6Z8XOw4lGrUviG8O8AcD3zGXM/jHdt+2fquVtZDtm/5im
G+0fp7dO+8dp0XX/OI267h+nUWH/FCfdSgv1CO4yemn/iE1psdigy/j4nVUj
0YG/SF7ycXpbelyivQ5IN830/eOtYtBpZl0U3o7kcjO8t7uZ+iub0Rzb1kBJ
yjKmxKa7tLj9Whdhs/1irYJzV3OHGcp29qXJd1kHhrcrRk3ssdNYpM1I815j
pEMb6x7bzuM4N8p+MoV03O1avVP1R9vYZwdOZF/I2jh+pVbazDy6Eb4SM+Po
+3aoq3ZJ5eQ7TN2M2BVXVnLN7y8zjMurwwjENpbTzeaHN7F9395A7jOr+Kwj
iSqUMWG/r1XGnK+6INN83YxJokWwrB0tTLx3ryVwraI2pcyyjb7YOY3gmkZf
7Jz/8XbOF5ulEdzN94LT6IvN0knt+GKzfLFZrHZfbJZCmy82yxeb5XeSGV9s
lk+xWVR5narLXcomiCiStuhM186XjWqXKFK007S72qWbia5qV7FFJzFSbNRJ
7So2stUu+12nLVTRoHnhi6O7apf9toyIlu7KSGhcYX3Hjw1OxdUyTufVO6X4
VReYNwC4ZIKYx9Z1O533QtVS1X7p7gVxt70gNt4L4i57QdxlL4iGvSA23QvF
Bq1LKxr3gtiUrooNuoxfMEF0L1Xk5Wq/9uMS7XVAuqX8djBBKpp1MUEamjWZ
IA3NmkyQIqbyMqbEpru0uP1aF2Gz/WKtQhcTpKJdJxOkAaGNJkgJox1MkGKb
LiZIsU0XE6SuTZMJ0p1COu72kgmi35T7aZ2IbtJqggjzsXsVXBvz6Eb4Ssw0
mSDuaPsdJt9h6q0mSGmE0pnk31NmtJogxQatJkixQasJIgwwVXf21SpWzvta
xcr5qgsyzdf1mHSvAqZsRquooZXGOPnkNEZVZZCqE35CPmOP5nTvd81+s8k9
rs2pgPaXzamA1rj3djVrK2yiM2ymT/eG1KqxSu2/+Te6iZefNTDkD3Wr2rj4
7nW+/KyrvaCbieqWddOrJYUmWq2liq6NjL1gv6vaL42dVW2bDqPb9oL9thOd
VjZoH/+bu1zILPdEBYu/C8wbAHzvXMa9G7nL/qle3ka2416tvPH+ERvvn0KL
bvun0Kjb/ik0cvaPKE26hRbKDVrIoTB6Yf+ITWmx3KB9/G82uwecH5OpZz+u
oL1WpNvN2u3tymbt9nZjs3p7u7FZvb1dxlRexJTYfJeWrllvW4RN9ouzCu32
dmW7DvZ2I0Ib7O0KjLba2+U27fZ2uU27vV3fpt7e3oRCOu12S71je7udfXbg
RK32tvOxq5W2MY8uhG/ETL293bhLaibfYeot9nbFCNre/mfIjBZ7u9ygxd4u
N2ixtx1gLHu7IIlKyphw39coY4Wv2pFpf92ESTk3CvX9oTrm59g6PXeRlC+p
I2EXvmyOc7gkXWi6QZyjwE46xDnqGVDd6pcbdYtzFBo5cY4PpS3R4mYpN2jx
WRVGL8Q5PpSIt+v4nSjPhlPH/GxwSq6pQuc1rqmNYd4AYNdu6bltLb9qx71Q
vVQ1X7p7QdxtL4iN94K4y14Qd9kLomEviE33QrlBu/+2YS+ITemq3KB9/IIN
Ulhll7xc9dd+XEF7rUh3tN+OMb8aJbYt5lfTrC3mV9OsLeZX0jDtx2LzXepu
vw6LsMl+cVaha8yv0K5zzK8Goa0xPwejHWN+dpuuMb8q4NpiflVt2mJ+3Sik
024v2SD6TVU/LROxmnSK+RVskAJQNcyjC+EbMdMW86vZJTWT7zD1TjG/ahvE
fvd7yYxOMb8NbJByg04xv7INItxX9TG/RsWq8FXXmF8bJq2A2/8DG+tIjkUR
AQA=

-->

</rfc>
