<?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.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-opsawg-discardmodel-08" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <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-08"/>
    <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="June" day="30"/>
    <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.";
    container qos {
      presence "QoS statistics are available.";
      description
        "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;
    }
    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-11 relate to packets forwarded or discarded by the device, while requirement 12 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>When traffic is mirrored, the discard metrics <bcp14>MUST</bcp14> account for the original traffic rather than the reflected traffic.</t>
          </li>
          <li>
            <t>Traffic to the device control plane has its own class. However, traffic from the device control plane <bcp14>MUST</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 Marcos 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="5" month="June" year="2025"/>
            <abstract>
              <t>   This document provides guidelines for authors and reviewers of
   specifications containing YANG data models, 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-28"/>
        </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 1356?>

<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
    |        +-- qos!
    |           +-- 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
    |        +-- qos!
    |           +-- 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
             +-- qos!
                +-- 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 qos!
  |           +--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 qos!
              +--ro class* [id]
                 +--ro id         string
                 +--ro packets?   yang:counter64
                 +--ro bytes?     yang:counter64
]]></artwork>
    </section>
  </back>
  <!-- ##markdown-source:
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
087h/wMReys8sxIBAA==

-->

</rfc>
