<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.19 (Ruby 2.6.10) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-ietf-opsawg-discardmodel-04" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="IM for Packet Discard Reporting">An Information Model for Packet Discard Reporting</title>

    <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="2024" month="October" day="18"/>

    <area>Operations and Management Area</area>
    <workgroup>OPSAWG</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 78?>

<t>The primary function of a network is to transport and deliver packets according to service level objectives.  Understanding both where and why packet loss occurs within a network is essential for effective network operation.  Device-reported packet loss provides the most direct signal for network operations to identify the customer impact resulting from unintended packet loss.  This document defines an information model for packet loss reporting, which classifies these signals to enable automated network mitigation of unintended packet loss.</t>



    </abstract>



  </front>

  <middle>


<?line 82?>

<section anchor="introduction"><name>Introduction</name>
<t>To effectively automate network operations, a network operator must be able to detect anomalous packet loss, determine its root cause, and then apply appropriate actions to mitigate any customer-impacting issues.  Some packet loss is normal or intended in IP/MPLS networks, however.  Therefore, precise classification of packet loss signals is crucial both to ensure that anomalous packet loss is easily detected and that the right action or sequence of actions is taken to mitigate the impact, as taking the wrong action can make problems worse.</t>

<t>Existing metrics for reporting packet loss, such as ifInDiscards, ifOutDiscards, ifInErrors, and ifOutErrors defined in <xref target="RFC1213"/>, are insufficient for several reasons. 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 (e.g., the "For us" reason code) to support automated root cause analysis and impact mitigation.</t>

<t>Hence, this document presents an information model for packet loss reporting, introducing a classification scheme to facilitate automated mitigation of unintended packet loss. The model addresses the aforementioned issues while remaining protocol-agnostic and implementation-independent, in accordance with <xref target="RFC3444"/>.</t>

<t>The specific implementations of this information model (i.e., protocols and associated data models) are outside the scope of this document.  The scope of this document is limited to reporting packet loss at Layer 3 and frames discarded at Layer 2, although the information model might be extended in future to cover segments dropped at Layer 4. This document considers only the signals that may trigger automated mitigation plans and not how they are defined or executed.</t>

<t><xref target="problem"/> describes the problem to be solved. <xref target="model"/> describes the information model and requirements with a set of examples.  <xref target="mapping"/> provides examples of discard signal-to-cause-to-auto-mitigation action mapping.  <xref target="module"/> presents the information model as an abstract data structure in YANG, in accordance with <xref target="RFC8791"/>.  Appendix A provides an example of where packets may be discarded in a device.  Appendix B details the authors' experience from implementing this model.</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 is any packet dropped by a device, whether intentionally or unintentionally.</t>

<t>Intended packet loss refers to packet discards that occur due to deliberate network policies or configurations - such as Access Control Lists (ACLs) or policing mechanisms - designed to enforce security or quality of service.</t>

<t>Unintended packet loss refers to packet discards resulting from network errors, misconfigurations, hardware failures, or other anomalies not aligned with the network operator's intended behaviour. These losses negatively impact network performance and service delivery.</t>

<t>For example, intended packet loss occurs when packets are dropped because they match a security policy denying certain traffic types. Unintended packet loss might happen due to a faulty interface causing corrupted packets, leading to their discard.</t>

<t>The meanings of the symbols in the YANG tree diagrams are defined in <xref target="RFC8340"/>.</t>

</section>
<section anchor="problem"><name>Problem Statement</name>
<t>At the highest-level, unintended packet loss is the discarding of packets that the network operator otherwise intends 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 Access Control List (ACL) and being dropped.  While the specific definition of unintended packet loss is network-dependent, for any network there are a small set of potential actions that can be taken to minimise customer impact by automatically mitigating unintended packet loss:</t>

<t><list style="numbers" type="1">
  <t>Take a device, link, or set of devices and/or links out of service.</t>
  <t>Return a device, link, or set of devices and/or links back into service.</t>
  <t>Move traffic to other links or devices.</t>
  <t>Roll back a recent change to a device that might have caused the problem.</t>
  <t>Escalate to a network operator as a last resort.</t>
</list></t>

<t>A precise signal of impact is crucial, as taking the wrong action can be worse than taking no action. For example, taking a congested device out of service can make congestion worse by moving the traffic to other links or devices, which are already congested.</t>

<t>To detect whether device-reported discards indicate a problem and to determine what actions should be taken to mitigate the impact and remediate the cause, depends on four primary features of the packet loss signal:</t>

<dl>
  <dt>FEATURE-LOSS-CAUSE:</dt>
  <dd>
    <t>The cause of the loss.</t>
  </dd>
  <dt>FEATURE-LOSS-RATE:</dt>
  <dd>
    <t>The rate and/or degree of the loss.</t>
  </dd>
  <dt>FEATURE-LOSS-DURATION:</dt>
  <dd>
    <t>The duration of the loss.</t>
  </dd>
  <dt>FEATURE-LOSS-LOCATION:</dt>
  <dd>
    <t>The location of the loss.</t>
  </dd>
</dl>

<t>FEATURE-LOSS-RATE, FEATURE-LOSS-DURATION, and FEATURE-LOSS-LOCATION are already addressed with passive monitoring statistics, for example, obtained with SNMP <xref target="RFC1157"/> / MIB-II <xref target="RFC1213"/> or NETCONF <xref target="RFC6241"/>. FEATURE-LOSS-CAUSE, however, is dependent on the classification scheme used for packet loss reporting. The next section defines a new classification scheme to address this problem.</t>

</section>
<section anchor="model"><name>Information Model</name>

<section anchor="rationale"><name>Design Rationale</name>

<t>This document uses YANG <xref target="RFC6020"/> to represent the information model for three main reasons. First, YANG, along with its data structure extensions <xref target="RFC8791"/>, allows designers to define the model in an abstract way, decoupled from specific implementations. This abstraction ensures consistency and provides flexibility for diverse potential implementations, with the structure and groupings easily adaptable to data models such as those specific to SNMP <xref target="RFC1157"/>, NETCONF <xref target="RFC6241"/>, RESTCONF <xref target="RFC8040"/>, or IPFIX <xref target="RFC7011"/>.  Second, this approach ensures a lossless translation from the information model to a YANG data model, preserving both semantics and structure. Lastly, YANG capitalises on the community's broad familiarity with its syntax and use, facilitating easier adoption and evolution.</t>

</section>
<section anchor="structure"><name>Structure</name>
<t>The classification scheme is structured as a hierarchical tree that follows the structure: component/direction/type/layer/sub-type/sub-sub-type/.../metric.  The elements of the tree are defined as follows:</t>

<t><list style="symbols">
  <t>Component: Specifies where in the device the discards are accounted. It can be:
  <list style="symbols">
      <t>interface: discards of traffic to or from a specific network interface.</t>
      <t>device: discards of traffic transiting the device.</t>
      <t>control-plane: discards of traffic to or from the device's control plane.</t>
      <t>flow: discards of traffic associated with a specific traffic flow.</t>
    </list></t>
  <t>Direction:
  <list style="symbols">
      <t>ingress: counters for incoming packets or frames.</t>
      <t>egress: counters for outgoing packets or frames.</t>
    </list></t>
  <t>Type:
  <list style="symbols">
      <t>traffic: counters for successfully received or transmitted packets or frames.</t>
      <t>discards: counters for packets or frames that were dropped.</t>
    </list></t>
  <t>Layer:
  <list style="symbols">
      <t>l2: Layer 2 discards, such as frames with CRC errors.</t>
      <t>l3: Layer 3 discards, such as IP packets with invalid headers.</t>
    </list></t>
  <t>Sub-Type:
  <list style="symbols">
      <t>For discards:
      <list style="symbols">
          <t>errors: discards due to errors in processing packets or frames (e.g., checksum errors).</t>
          <t>policy: discards due to policy enforcement (e.g., ACL drops).</t>
          <t>no-buffer: discards due to lack of buffer space (e.g., congestion-related drops).</t>
        </list></t>
    </list></t>
</list></t>

<t>Each sub-type may further contain specific reasons for discards, providing more detailed insight into the cause of packet loss.</t>

<figure><artwork><![CDATA[
module: ietf-packet-discard-reporting

  structure packet-discard-reporting:
    +-- interface* [name]
       +-- name             string
       +-- ingress
       |  +-- traffic
       |  |  +-- l2
       |  |  |  +-- frames?   uint64
       |  |  |  +-- bytes?    uint64
       |  |  +-- l3
       |  |  |  +-- address-family-stat* [address-family]
       |  |  |     +-- address-family    identityref
       |  |  |     +-- packets?          uint64
       |  |  |     +-- bytes?            uint64
       |  |  |     +-- unicast
       |  |  |     |  +-- packets?   uint64
       |  |  |     |  +-- bytes?     uint64
       |  |  |     +-- multicast
       |  |  |        +-- packets?   uint64
       |  |  |        +-- bytes?     uint64
       |  |  +-- qos
       |  |     +-- class* [id]
       |  |        +-- id         string
       |  |        +-- packets?   uint64
       |  |        +-- bytes?     uint64
       |  +-- discards
       |     +-- l2
       |     |  +-- frames?   uint64
       |     |  +-- bytes?    uint64
       |     +-- l3
       |     |  +-- address-family-stat* [address-family]
       |     |     +-- address-family    identityref
       |     |     +-- packets?          uint64
       |     |     +-- bytes?            uint64
       |     |     +-- unicast
       |     |     |  +-- packets?   uint64
       |     |     |  +-- bytes?     uint64
       |     |     +-- multicast
       |     |        +-- packets?   uint64
       |     |        +-- bytes?     uint64
       |     +-- errors
       |     |  +-- l2
       |     |  |  +-- rx
       |     |  |     +-- frames?          uint32
       |     |  |     +-- crc-error?       uint32
       |     |  |     +-- invalid-mac?     uint32
       |     |  |     +-- invalid-vlan?    uint32
       |     |  |     +-- invalid-frame?   uint32
       |     |  +-- l3
       |     |  |  +-- rx
       |     |  |  |  +-- packets?          uint32
       |     |  |  |  +-- checksum-error?   uint32
       |     |  |  |  +-- mtu-exceeded?     uint32
       |     |  |  |  +-- invalid-packet?   uint32
       |     |  |  +-- ttl-expired?     uint32
       |     |  |  +-- no-route?        uint32
       |     |  |  +-- invalid-sid?     uint32
       |     |  |  +-- invalid-label?   uint32
       |     |  +-- internal
       |     |     +-- packets?        uint32
       |     |     +-- parity-error?   uint32
       |     +-- policy
       |     |  +-- l2
       |     |  |  +-- frames?   uint32
       |     |  |  +-- acl?      uint32
       |     |  +-- l3
       |     |     +-- packets?      uint32
       |     |     +-- acl?          uint32
       |     |     +-- policer
       |     |     |  +-- packets?   uint32
       |     |     |  +-- bytes?     uint32
       |     |     +-- null-route?   uint32
       |     |     +-- rpf?          uint32
       |     |     +-- ddos?         uint32
       |     +-- no-buffer
       |        +-- class* [id]
       |           +-- id         string
       |           +-- packets?   uint64
       |           +-- bytes?     uint64
       +-- egress
       |  +-- traffic
       |  |  +-- l2
       |  |  |  +-- frames?   uint64
       |  |  |  +-- bytes?    uint64
       |  |  +-- l3
       |  |  |  +-- address-family-stat* [address-family]
       |  |  |     +-- address-family    identityref
       |  |  |     +-- packets?          uint64
       |  |  |     +-- bytes?            uint64
       |  |  |     +-- unicast
       |  |  |     |  +-- packets?   uint64
       |  |  |     |  +-- bytes?     uint64
       |  |  |     +-- multicast
       |  |  |        +-- packets?   uint64
       |  |  |        +-- bytes?     uint64
       |  |  +-- qos
       |  |     +-- class* [id]
       |  |        +-- id         string
       |  |        +-- packets?   uint64
       |  |        +-- bytes?     uint64
       |  +-- discards
       |     +-- l2
       |     |  +-- frames?   uint64
       |     |  +-- bytes?    uint64
       |     +-- l3
       |     |  +-- address-family-stat* [address-family]
       |     |     +-- address-family    identityref
       |     |     +-- packets?          uint64
       |     |     +-- bytes?            uint64
       |     |     +-- unicast
       |     |     |  +-- packets?   uint64
       |     |     |  +-- bytes?     uint64
       |     |     +-- multicast
       |     |        +-- packets?   uint64
       |     |        +-- bytes?     uint64
       |     +-- errors
       |     |  +-- l2
       |     |  |  +-- tx
       |     |  |     +-- frames?   uint32
       |     |  +-- l3
       |     |     +-- tx
       |     |        +-- packets?   uint32
       |     +-- policy
       |     |  +-- l3
       |     |     +-- acl?       uint32
       |     |     +-- policer
       |     |        +-- packets?   uint32
       |     |        +-- bytes?     uint32
       |     +-- no-buffer
       |        +-- class* [id]
       |           +-- id         string
       |           +-- packets?   uint64
       |           +-- bytes?     uint64
       +-- control-plane
          +-- ingress
          |  +-- traffic
          |  |  +-- packets?   uint32
          |  |  +-- bytes?     uint32
          |  +-- discards
          |     +-- packets?   uint32
          |     +-- bytes?     uint32
          |     +-- policy
          |        +-- packets?   uint32
          +-- egress
             +-- traffic
             |  +-- packets?   uint32
             |  +-- bytes?     uint32
             +-- discards
                +-- packets?   uint32
                +-- bytes?     uint32

]]></artwork></figure>

<t>For additional context, Appendix A provides an example of where packets may be discarded in a device.</t>

</section>
<section anchor="requirements"><name>Requirements</name>
<t>Requirements 1-10 relate to packets forwarded or discarded by the device, while requirement 11 relates to packets destined for or originating from the device:</t>

<t><list style="numbers" type="1">
  <t>All instances of Layer 2 frame or Layer 3 packet receipt, transmission, and discards <bcp14>MUST</bcp14> be accounted for.</t>
  <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>
  <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.</t>
  <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.</t>
  <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 a discard is counted against.</t>
  <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>
  <t>The aggregate Quality of Service (QoS) traffic and no buffer discard classes <bcp14>MUST</bcp14> account for all underlying packets received, transmitted, and discarded across all other classes.</t>
  <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>
  <t>When there are multiple reasons for discarding a packet, the ordering of discard class reporting <bcp14>MUST</bcp14> be defined.</t>
  <t>If Diffserv <xref target="RFC2475"/> is not used, no-buffer discards <bcp14>SHOULD</bcp14> be reported as class0.</t>
  <t>Traffic to the device control plane has its own class, however, traffic from the device control plane <bcp14>SHOULD</bcp14> be accounted for in the same way as other egress traffic.</t>
</list></t>

</section>
<section anchor="examples"><name>Examples</name>

<t>Assuming all the requirements are met, a "good" unicast IPv4 packet received would increment:</t>

<t><list style="symbols">
  <t>interface/ingress/traffic/l3/v4/unicast/packets</t>
  <t>interface/ingress/traffic/l3/v4/unicast/bytes</t>
  <t>interface/ingress/traffic/qos/class_0/packets</t>
  <t>interface/ingress/traffic/qos/class_0/bytes</t>
</list></t>

<t>A received unicast IPv6 packet discarded due to Hop Limit expiry would increment:</t>

<t><list style="symbols">
  <t>interface/ingress/discards/l3/v6/unicast/packets</t>
  <t>interface/ingress/discards/l3/v6/unicast/bytes</t>
  <t>interface/ingress/discards/l3/rx/ttl-expired/packets</t>
</list></t>

<t>An IPv4 packet discarded on egress due to no buffers would increment:</t>

<t><list style="symbols">
  <t>interface/egress/discards/l3/v4/unicast/packets</t>
  <t>interface/egress/discards/l3/v4/unicast/bytes</t>
  <t>interface/egress/discards/no-buffer/class_0/packets</t>
  <t>interface/egress/discards/no-buffer/class_0/bytes</t>
</list></t>

</section>
</section>
<section anchor="mapping"><name>Example Signal-Cause-Mitigation Mapping</name>
<t><xref target="ex-table"/> gives an example discard signal-to-cause-to-mitigation action mapping.  Mappings for a specific network will be dependent on the definition of unintended packet loss for that network.</t>

<texttable title="Example Signal-Cause-Mitigation Mapping" anchor="ex-table">
      <ttcol align='left'>Discard class</ttcol>
      <ttcol align='left'>Cause</ttcol>
      <ttcol align='center'>Discard rate</ttcol>
      <ttcol align='center'>Discard duration</ttcol>
      <ttcol align='center'>Unintended?</ttcol>
      <ttcol align='left'>Possible actions</ttcol>
      <c>ingress/discards/errors/l2/rx</c>
      <c>Upstream device or link error</c>
      <c>&gt;Baseline</c>
      <c>O(1min)</c>
      <c>Y</c>
      <c>Take upstream link or device out-of-service</c>
      <c>ingress/discards/errors/l3/rx/ttl-expired</c>
      <c>Tracert</c>
      <c>&lt;=Baseline</c>
      <c>&#160;</c>
      <c>N</c>
      <c>no action</c>
      <c>ingress/discards/errors/l3/rx/ttl-expired</c>
      <c>Convergence</c>
      <c>&gt;Baseline</c>
      <c>O(1s)</c>
      <c>Y</c>
      <c>no action</c>
      <c>ingress/discards/errors/l3/rx/ttl-expired</c>
      <c>Routing loop</c>
      <c>&gt;Baseline</c>
      <c>O(1min)</c>
      <c>Y</c>
      <c>Roll-back change</c>
      <c>.*/policy/.*</c>
      <c>Policy</c>
      <c>&#160;</c>
      <c>&#160;</c>
      <c>N</c>
      <c>no action</c>
      <c>ingress/discards/errors/l3/no-route</c>
      <c>Convergence</c>
      <c>&gt;Baseline</c>
      <c>O(1s)</c>
      <c>Y</c>
      <c>no action</c>
      <c>ingress/discards/errors/l3/no-route</c>
      <c>Config error</c>
      <c>&gt;Baseline</c>
      <c>O(1min)</c>
      <c>Y</c>
      <c>Roll-back change</c>
      <c>ingress/discards/errors/l3/no-route</c>
      <c>Invalid destination</c>
      <c>&gt;Baseline</c>
      <c>O(10min)</c>
      <c>N</c>
      <c>Escalate to operator</c>
      <c>ingress/discards/errors/local</c>
      <c>Device errors</c>
      <c>&gt;Baseline</c>
      <c>O(1min)</c>
      <c>Y</c>
      <c>Take device out-of-service</c>
      <c>egress/discards/no-buffer</c>
      <c>Congestion</c>
      <c>&lt;=Baseline</c>
      <c>&#160;</c>
      <c>N</c>
      <c>no action</c>
      <c>egress/discards/no-buffer</c>
      <c>Congestion</c>
      <c>&gt;Baseline</c>
      <c>O(1min)</c>
      <c>Y</c>
      <c>Bring capacity back into service or move traffic</c>
</texttable>

<t>The 'Baseline' in the 'Discard Rate' column is both discard class and network dependent.</t>

</section>
<section anchor="module"><name>YANG Module</name>

<t>The "ietf-packet-discard-reporting" uses the "sx" structure defined in <xref target="RFC8791"/>.</t>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-packet-discard-reporting@2024-06-04.yang"
module ietf-packet-discard-reporting {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-packet-discard-reporting";
  prefix plr;

  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) 2024 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: An Information Model for Packet Discard Reporting";
  }

  /*
   * Groupings
   */

  grouping basic-packets-64 {
    description
      "Grouping for 64-bit Layer 3 packet counters.";
    leaf packets {
      type uint64;
      description
        "Number of Layer 3 packets.";
    }
  }

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

  grouping basic-frames-64 {
    description
      "Grouping for 64-bit Layer 2 frame counters.";
    leaf frames {
      type uint64;
      description
        "Number of Layer 2 frames.";
    }
  }

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

  grouping basic-packets-32 {
    description
      "Grouping for 32-bit Layer 3 packet counters.";
    leaf packets {
      type uint32;
      description
        "Number of Layer 3 packets.";
    }
  }

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

  grouping basic-frames-32 {
    description
      "Grouping for 32-bit Layer 2 frame counters.";
    leaf frames {
      type uint32;
      description
        "Number of Layer 2 frames.";
    }
  }

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

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

  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.";
  }

  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-64;
      container unicast {
        description
          "Unicast traffic counters.";
        uses basic-packets-bytes-64;
      }
      container multicast {
        description
          "Multicast traffic counters.";
        uses basic-packets-bytes-64;
      }
    }
  }

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

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

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

  grouping control-plane {
    description
      "Control plane packet counters.";
    container ingress {
      description
        "Control plane ingress counters.";
      container traffic {
        description
          "Control plane ingress packets received.";
        uses basic-packets-bytes-32;
      }
      container discards {
        description
          "Control plane ingress packet discard counters.";
        uses basic-packets-bytes-32;
        container policy {
          description
            "Number of control plane packets discarded
             due to policy.";
          uses basic-packets-32;
        }
      }
    }
    container egress {
      description
        "Control plane egress counters.";
      container traffic {
        description
          "Control plane packets transmitted.";
        uses basic-packets-bytes-32;
      }
      container discards {
        description
          "Control plane egress packet discard counters.";
        uses basic-packets-bytes-32;
      }
    }
  }

  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 uint32;
        description
          "The number of frames discarded due to errors with the received frame.";
      }
      leaf crc-error {
        type uint32;
        description
          "The number of frames discarded due to CRC error.";
      }
      leaf invalid-mac {
        type uint32;
        description
          "The number of frames discarded due to an invalid
           MAC address.";
      }
      leaf invalid-vlan {
        type uint32;
        description
          "The number of frames discarded due to an invalid
           VLAN tag.";
      }
      leaf invalid-frame {
        type uint32;
        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 uint32;
        description
          "The number of Layer 3 packets discarded due to errors in the received packet.";
      }
      leaf checksum-error {
        type uint32;
        description
          "The number of received packets discarded due to a checksum
           error.";
      }
      leaf mtu-exceeded {
        type uint32;
        description
          "The number of received packets discarded due to MTU
           exceeded.";
      }
      leaf invalid-packet {
        type uint32;
        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 uint32;
      description
        "The number of received packets discarded due to expired
         TTL.";
    }
    leaf no-route {
      type uint32;
      description
        "The number of packets discarded due to not matching a valid route.";
    }
    leaf invalid-sid {
      type uint32;
      description
        "The number of packets discarded due to an invalid Segment Routing (SR) SID.";
    }
    leaf invalid-label {
      type uint32;
      description
        "The number of packets discarded due to an invalid MPLS label.";
    }
  }

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

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

  grouping errors-l2-tx {
    description
      "Layer 2 transmit error discard counters.";
    container tx {
      description
        "Layer 2 transmit frame error discard counters.";
      leaf frames {
        type uint32;
        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 uint32;
        description
          "The number of Layer 3 packets discarded due to errors when
           transmitting.";
      }
    }
  }

  grouping errors-tx {
    description
      "Egress error discard counters.";
    container l2 {
      description
        "Layer 2 transmit frame error discard counters.";
      uses errors-l2-tx;
    }
    container l3 {
      description
        "Layer 3 transmit packet error discard counters.";
      uses errors-l3-tx;
    }
  }

  grouping policy-l2-rx {
    description
      "Layer 2 policy ingress packet discard
       counters.";
    leaf frames {
      type uint32;
      description
        "The number of Layer 2 frames discarded due
         to policy.";
    }
    leaf acl {
      type uint32;
      description
        "The number of frames discarded due to
         Layer 2 ACLs.";
    }
  }

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

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

  grouping policy-l3-tx {
    description
      "Layer 3 policy egress packet discard counters.";
    leaf acl {
      type uint32;
      description
        "The number of packets discarded due to Layer 3
         egress ACLs.";
    }
    container policer {
      description
        "The number of packets discarded due egress policer violations.";
      uses basic-packets-bytes-32;
    }
  }

  grouping policy-tx {
    description
      "Policy egress packet discard counters.";
    container l3 {
      description
        "Layer 3 policy egress packet discard counters.";
      uses policy-l3-tx;
    }
  }

  grouping interface {
    description
      "Interface-level traffic and discard counters.";
    container ingress {
      description
        "Ingress counters.";
      container traffic {
        description
          "Ingress traffic counters.";
        uses traffic;
      }
      container discards {
        description
          "Ingress discard counters.";
        container l2 {
          description
            "Ingress Layer 2 frame discard counters.";
          uses l2-traffic;
        }
        container l3 {
          description
            "Ingress Layer 3 packet discard counters.";
          uses l3-traffic;
        }
        container errors {
          description
            "Ingress error discard counters.";
          uses errors-rx;
        }
        container policy {
          description
            "Ingress policy-related discard counters.";
          uses policy-rx;
        }
        container no-buffer {
          description
            "Ingress discard counters due to buffer
             unavailability.";
          uses qos;
        }
      }
    }
    container egress {
      description
        "Egress counters.";
      container traffic {
        description
          "Egress traffic counters.";
        uses traffic;
      }
      container discards {
        description
          "Egress packet and frame discard counters.";
        container l2 {
          description
            "Layer 2 egress frame discard counters.";
          uses l2-traffic;
        }
        container l3 {
          description
            "Layer 3 egress packet discard counters.";
          uses l3-traffic;
        }
        container errors {
          description
            "Egress packet error discard counters.";
          uses errors-tx;
        }
        container policy {
          description
            "Egress policy-related packet discard counters.";
          uses policy-tx;
        }
        container no-buffer {
          description
            "Egress packet discard counters due to buffer
             unavailability.";
          uses qos;
        }
      }
    }
    container control-plane {
      description
        "Control plane packet counters.";
      uses control-plane;
    }
  }

  /*
   * Main structure definition
   */

  sx:structure packet-discard-reporting {
    description
      "Specifies the abstract structure of packet discard reporting data.";
    list interface {
      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;
    }
  }
}
<CODE ENDS>
]]></artwork></figure>

</section>
<section anchor="security"><name>Security Considerations</name>

<t>The document defines a YANG module using <xref target="RFC8791"/>. As such, this document does
not define data nodes. Following  the guidance in <xref section="3.7" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>,
the YANG security template is not used.</t>

</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>

<figure><artwork><![CDATA[
   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></figure>

<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>

<figure><artwork><![CDATA[
   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></figure>

</section>
<section anchor="contributors"><name>Contributors</name>

<figure><artwork><![CDATA[
Nadav Chachmon
Cisco Systems, Inc.
170 West Tasman Dr.
San Jose, CA 95134
United States of America
Email: nchachmo@cisco.com
]]></artwork></figure>

</section>
<section anchor="acknowledgements"><name>Acknowledgments</name>
<t>The content of this document has benefitted from feedback from JR Rivers, Ronan Waide, Chris DeBruin, and Marcoz Sanz.</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<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="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="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>

<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>




    </references>

    <references title='Informative References' anchor="sec-informative-references">



<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="RED93" >
  <front>
    <title>Random Early Detection gateways for Congestion Avoidance</title>
    <author initials="V." surname="Jacobson">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </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="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="RFC1213">
  <front>
    <title>Management Information Base for Network Management of TCP/IP-based internets: MIB-II</title>
    <author fullname="K. McCloghrie" initials="K." surname="McCloghrie"/>
    <author fullname="M. Rose" initials="M." surname="Rose"/>
    <date month="March" year="1991"/>
    <abstract>
      <t>This memo defines the second version of the Management Information Base (MIB-II) for use with network management protocols in TCP/IP-based internets. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="17"/>
  <seriesInfo name="RFC" value="1213"/>
  <seriesInfo name="DOI" value="10.17487/RFC1213"/>
</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="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="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="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="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="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="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="11" month="October" year="2024"/>
      <abstract>
	 <t>   This memo provides guidelines for authors and reviewers of
   specifications containing YANG modules, including IANA-maintained
   modules.  Recommendations and procedures are defined, which are
   intended to increase interoperability and usability of Network
   Configuration Protocol (NETCONF) and RESTCONF protocol
   implementations that utilize YANG modules.  This document obsoletes
   RFC 8407.

   Also, this document updates RFC 8126 by providing additional
   guidelines for writing the IANA considerations for RFCs that specify
   IANA-maintained modules.  The document also updates RFC 6020 by
   clarifying how modules and their revisions are handled by IANA.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-rfc8407bis-18"/>
   
</reference>




    </references>

</references>


<?line 1133?>

<section anchor="wheredropped"><name>Where do packets get dropped?</name>
<t><xref target="ex-drop"/> depicts an example of where and why packets may be discarded in a typical single-ASIC, shared-buffered type device. Packets ingress on the left and egress on the right.</t>

<figure title="Example of where packets get dropped" anchor="ex-drop"><artwork><![CDATA[
                                                      +----------+
                                                      |          |
                                                      |  CPU     |
                                                      |          |
                                                      +--+---^---+
                                                from_cpu |   | to_cpu
                                                         |   |
                          +------------------------------v---+-------------------------------+
                          |                                                                  |

            +----------+  +----------+  +----------+  +----------+  +----------+  +----------+  +----------+
            |          |  |          |  |          |  |          |  |          |  |          |  |          |
 Packet rx ->  Phy     +-->  Mac     +--> Ingress  +--> Buffers  +--> Egresss  +-->  Mac     +-->  Phy     +-> Packet tx
            |          |  |          |  |  Pipeline|  |          |  |  Pipeline|  |          |  |          |
            +----------+  +----------+  +----------+  +----------+  +----------+  +----------+  +----------+

  Intended                               policy/acl                  policy/acl
  Discards:                              policy/policer              policy/policer
                                         policy/urpf
                                         policy/null-route

Unintended                 error/rx/l2   error/l3/rx   no-buffer     error/l3/tx
  Discards:                              error/local
                                         error/l3/no-route
                                         error/l3/rx/ttl-expired

]]></artwork></figure>

<section anchor="discard-class-descriptions"><name>Discard Class Descriptions</name>

<dl>
  <dt>discards/policy/:</dt>
  <dd>
    <t>These are intended discards, meaning packets dropped by a device due to a configured policy. There are multiple sub-classes.</t>
  </dd>
  <dt>discards/error/l2/rx/:</dt>
  <dd>
    <t>Frames discarded due to errors in the received Layer 2 frame. There are multiple sub-classes, such as those resulting from failing CRC, invalid header, invalid MAC address, or invalid VLAN.</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. There are multiple sub-classes, including header checksum errors, MTU exceeded, and invalid packet, i.e. due to incorrect version, incorrect header length, or invalid options.</t>
  </dd>
  <dt>discards/error/l3/rx/ttl-expired:</dt>
  <dd>
    <t>There can be multiple causes for TTL-expired (or Hop limit exceeded) discards: i) trace-route; ii) TTL (Hop limit) set too low by the end-system; iii) routing loops.</t>
  </dd>
  <dt>discards/error/l3/no-route/:</dt>
  <dd>
    <t>Discards occur due to a packet not matching any route.</t>
  </dd>
  <dt>discards/error/local/:</dt>
  <dd>
    <t>A device may discard packets within its switching pipeline due to internal errors, such as parity errors. Any errored discards not explicitly assigned to the above classes are also accounted for here.</t>
  </dd>
  <dt>discards/no-buffer/:</dt>
  <dd>
    <t>Discards occur due to no available buffer to enqueue the packet. 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>

</section>
</section>
<section anchor="implementation-experience"><name>Implementation Experience</name>
<t>This appendix captures the authors' experience gained from implementing and applying this information model across multiple vendors' platforms, as guidance for future implementers.</t>

<t><list style="numbers" type="1">
  <t>The number and granularity of classes described in Section 3 represent a compromise.  It aims to offer sufficient detail to enable appropriate automated actions while avoiding excessive detail, which may hinder quick problem identification.  Additionally, it helps limit the quantity of data produced per interface, thus constraining the data volume and device CPU impacts.  Although further granularity is possible, the scheme described has generally proven to be sufficient for the task of auto-mitigating unintended packet loss.</t>
  <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 discards are accounted for orthogonally.  This decision reduces the number of combinations of classes and has proven sufficient for determining mitigation actions.</t>
  <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>
  <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.</t>
  <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>
  <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>
  <t>It is not possible to identify a configuration error - e.g., when intended discards are unintended - with device packet loss 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>
  <t>Where traffic byte counters need to be 64-bit, packet and discard counters that increase at a lower rate may be encoded in fewer bits, e.g., 32-bit.</t>
  <t>Aggregate counters need to be able to deal with the possibility of discontinuities in the underlying counters.</t>
  <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; if IPv4 is tunnelled over IPv6 for example.  Some implementations may attribute egress discards to the ingress protocol.</t>
  <t>While the classification tree is seven layers deep, a minimal implementation may only implement the top six layers.</t>
</list></t>

</section>


  </back>

<!-- ##markdown-source:
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
dku1AAA=

-->

</rfc>

