<?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.27 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-opsawg-discardmodel-06" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="IM and DM for Packet Discard Reporting">Information and Data Models for Packet Discard Reporting</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-discardmodel-06"/>
    <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="April" day="10"/>
    <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 corresponding 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 data model specifies a YANG 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 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 data model and implementation requirements together with a set of usage examples, and the complete YANG module definition for the data model. 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. 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 organisation enables both high-level monitoring of total discards and more detailed triage to map to mitigation actions.</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>interface: discards of traffic to or from a specific network interface.</t>
              </li>
              <li>
                <t>device: discards of traffic transiting the device.</t>
              </li>
              <li>
                <t>control-plane: discards of traffic to or from the device's control plane.</t>
              </li>
              <li>
                <t>flow: discards of traffic associated with a specific traffic flow.</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 following YANG tree diagram shows the complete 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] {per-interface-stats}?
    |  +-- name        string
    |  +-- traffic* [direction]
    |  |  +-- direction    identityref
    |  |  +-- l2
    |  |  |  +-- frames?   yang:counter64
    |  |  |  +-- bytes?    yang:counter64
    |  |  +-- l3
    |  |  |  +-- address-family-stat* [address-family]
    |  |  |     +-- address-family    identityref
    |  |  |     +-- packets?          yang:counter64
    |  |  |     +-- bytes?            yang:counter64
    |  |  |     +-- unicast
    |  |  |     |  +-- packets?   yang:counter64
    |  |  |     |  +-- bytes?     yang:counter64
    |  |  |     +-- multicast
    |  |  |        +-- packets?   yang:counter64
    |  |  |        +-- bytes?     yang:counter64
    |  |  +-- qos
    |  |     +-- class* [id]
    |  |        +-- id         string
    |  |        +-- packets?   yang:counter64
    |  |        +-- bytes?     yang:counter64
    |  +-- discards* [direction]
    |     +-- direction    identityref
    |     +-- l2
    |     |  +-- frames?   yang:counter64
    |     |  +-- bytes?    yang:counter64
    |     +-- l3
    |     |  +-- address-family-stat* [address-family]
    |     |     +-- address-family    identityref
    |     |     +-- packets?          yang:counter64
    |     |     +-- bytes?            yang:counter64
    |     |     +-- unicast
    |     |     |  +-- packets?   yang:counter64
    |     |     |  +-- bytes?     yang:counter64
    |     |     +-- multicast
    |     |        +-- packets?   yang:counter64
    |     |        +-- bytes?     yang:counter64
    |     +-- errors
    |     |  +-- l2
    |     |  |  +-- rx
    |     |  |  |  +-- frames?          yang:counter64
    |     |  |  |  +-- crc-error?       yang:counter64
    |     |  |  |  +-- invalid-mac?     yang:counter64
    |     |  |  |  +-- invalid-vlan?    yang:counter64
    |     |  |  |  +-- invalid-frame?   yang:counter64
    |     |  |  +-- tx
    |     |  |     +-- frames?   yang:counter64
    |     |  +-- l3
    |     |  |  +-- rx
    |     |  |  |  +-- packets?          yang:counter64
    |     |  |  |  +-- checksum-error?   yang:counter64
    |     |  |  |  +-- mtu-exceeded?     yang:counter64
    |     |  |  |  +-- invalid-packet?   yang:counter64
    |     |  |  +-- ttl-expired?     yang:counter64
    |     |  |  +-- no-route?        yang:counter64
    |     |  |  +-- invalid-sid?     yang:counter64
    |     |  |  +-- invalid-label?   yang:counter64
    |     |  |  +-- tx
    |     |  |     +-- packets?   yang:counter64
    |     |  +-- internal
    |     |     +-- packets?        yang:counter64
    |     |     +-- parity-error?   yang:counter64
    |     +-- policy
    |     |  +-- l2
    |     |  |  +-- frames?   yang:counter64
    |     |  |  +-- acl?      yang:counter64
    |     |  +-- l3
    |     |     +-- packets?      yang:counter64
    |     |     +-- acl?          yang:counter64
    |     |     +-- policer
    |     |     |  +-- packets?   yang:counter64
    |     |     |  +-- bytes?     yang:counter64
    |     |     +-- null-route?   yang:counter64
    |     |     +-- rpf?          yang:counter64
    |     |     +-- ddos?         yang:counter64
    |     +-- no-buffer
    |        +-- class* [id]
    |           +-- id         string
    |           +-- packets?   yang:counter64
    |           +-- bytes?     yang:counter64
    +-- flow* [direction] {flow-reporting}?
    |  +-- direction    identityref
    |  +-- traffic
    |  |  +-- l2
    |  |  |  +-- frames?   yang:counter64
    |  |  |  +-- bytes?    yang:counter64
    |  |  +-- l3
    |  |  |  +-- address-family-stat* [address-family]
    |  |  |     +-- address-family    identityref
    |  |  |     +-- packets?          yang:counter64
    |  |  |     +-- bytes?            yang:counter64
    |  |  |     +-- unicast
    |  |  |     |  +-- packets?   yang:counter64
    |  |  |     |  +-- bytes?     yang:counter64
    |  |  |     +-- multicast
    |  |  |        +-- packets?   yang:counter64
    |  |  |        +-- bytes?     yang:counter64
    |  |  +-- qos
    |  |     +-- class* [id]
    |  |        +-- id         string
    |  |        +-- packets?   yang:counter64
    |  |        +-- bytes?     yang:counter64
    |  +-- discards
    |     +-- l2
    |     |  +-- frames?   yang:counter64
    |     |  +-- bytes?    yang:counter64
    |     +-- l3
    |     |  +-- address-family-stat* [address-family]
    |     |     +-- address-family    identityref
    |     |     +-- packets?          yang:counter64
    |     |     +-- bytes?            yang:counter64
    |     |     +-- unicast
    |     |     |  +-- packets?   yang:counter64
    |     |     |  +-- bytes?     yang:counter64
    |     |     +-- multicast
    |     |        +-- packets?   yang:counter64
    |     |        +-- bytes?     yang:counter64
    |     +-- errors
    |     |  +-- l2
    |     |  |  +-- rx
    |     |  |  |  +-- frames?          yang:counter64
    |     |  |  |  +-- crc-error?       yang:counter64
    |     |  |  |  +-- invalid-mac?     yang:counter64
    |     |  |  |  +-- invalid-vlan?    yang:counter64
    |     |  |  |  +-- invalid-frame?   yang:counter64
    |     |  |  +-- tx
    |     |  |     +-- frames?   yang:counter64
    |     |  +-- l3
    |     |  |  +-- rx
    |     |  |  |  +-- packets?          yang:counter64
    |     |  |  |  +-- checksum-error?   yang:counter64
    |     |  |  |  +-- mtu-exceeded?     yang:counter64
    |     |  |  |  +-- invalid-packet?   yang:counter64
    |     |  |  +-- ttl-expired?     yang:counter64
    |     |  |  +-- no-route?        yang:counter64
    |     |  |  +-- invalid-sid?     yang:counter64
    |     |  |  +-- invalid-label?   yang:counter64
    |     |  |  +-- tx
    |     |  |     +-- packets?   yang:counter64
    |     |  +-- internal
    |     |     +-- packets?        yang:counter64
    |     |     +-- parity-error?   yang:counter64
    |     +-- policy
    |     |  +-- l2
    |     |  |  +-- frames?   yang:counter64
    |     |  |  +-- acl?      yang:counter64
    |     |  +-- l3
    |     |     +-- packets?      yang:counter64
    |     |     +-- acl?          yang:counter64
    |     |     +-- policer
    |     |     |  +-- packets?   yang:counter64
    |     |     |  +-- bytes?     yang:counter64
    |     |     +-- null-route?   yang:counter64
    |     |     +-- rpf?          yang:counter64
    |     |     +-- ddos?         yang:counter64
    |     +-- no-buffer
    |        +-- class* [id]
    |           +-- id         string
    |           +-- packets?   yang:counter64
    |           +-- bytes?     yang:counter64
    +-- device {per-device-stats}?
       +-- traffic
       |  +-- l2
       |  |  +-- frames?   yang:counter64
       |  |  +-- bytes?    yang:counter64
       |  +-- l3
       |  |  +-- address-family-stat* [address-family]
       |  |     +-- address-family    identityref
       |  |     +-- packets?          yang:counter64
       |  |     +-- bytes?            yang:counter64
       |  |     +-- unicast
       |  |     |  +-- packets?   yang:counter64
       |  |     |  +-- bytes?     yang:counter64
       |  |     +-- multicast
       |  |        +-- packets?   yang:counter64
       |  |        +-- bytes?     yang:counter64
       |  +-- qos
       |     +-- class* [id]
       |        +-- id         string
       |        +-- packets?   yang:counter64
       |        +-- bytes?     yang:counter64
       +-- discards
          +-- l2
          |  +-- frames?   yang:counter64
          |  +-- bytes?    yang:counter64
          +-- l3
          |  +-- address-family-stat* [address-family]
          |     +-- address-family    identityref
          |     +-- packets?          yang:counter64
          |     +-- bytes?            yang:counter64
          |     +-- unicast
          |     |  +-- packets?   yang:counter64
          |     |  +-- bytes?     yang:counter64
          |     +-- multicast
          |        +-- packets?   yang:counter64
          |        +-- bytes?     yang:counter64
          +-- errors
          |  +-- l2
          |  |  +-- rx
          |  |  |  +-- frames?          yang:counter64
          |  |  |  +-- crc-error?       yang:counter64
          |  |  |  +-- invalid-mac?     yang:counter64
          |  |  |  +-- invalid-vlan?    yang:counter64
          |  |  |  +-- invalid-frame?   yang:counter64
          |  |  +-- tx
          |  |     +-- frames?   yang:counter64
          |  +-- l3
          |  |  +-- rx
          |  |  |  +-- packets?          yang:counter64
          |  |  |  +-- checksum-error?   yang:counter64
          |  |  |  +-- mtu-exceeded?     yang:counter64
          |  |  |  +-- invalid-packet?   yang:counter64
          |  |  +-- ttl-expired?     yang:counter64
          |  |  +-- no-route?        yang:counter64
          |  |  +-- invalid-sid?     yang:counter64
          |  |  +-- invalid-label?   yang:counter64
          |  |  +-- tx
          |  |     +-- packets?   yang:counter64
          |  +-- internal
          |     +-- packets?        yang:counter64
          |     +-- parity-error?   yang:counter64
          +-- policy
          |  +-- l2
          |  |  +-- frames?   yang:counter64
          |  |  +-- acl?      yang:counter64
          |  +-- l3
          |     +-- packets?      yang:counter64
          |     +-- acl?          yang:counter64
          |     +-- policer
          |     |  +-- packets?   yang:counter64
          |     |  +-- bytes?     yang:counter64
          |     +-- null-route?   yang:counter64
          |     +-- rpf?          yang:counter64
          |     +-- ddos?         yang:counter64
          +-- no-buffer
             +-- class* [id]
                +-- id         string
                +-- packets?   yang:counter64
                +-- bytes?     yang:counter64
]]></artwork>
        <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/local/:</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>Information Model - YANG Module</name>
        <t>The "ietf-packet-discard-reporting" 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 per-interface-stats {
    description
      "Indicates support of per-interface statistics on this
       device.";
  }

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

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

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

  /*
   * Identities
   */

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

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

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

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

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

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

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

  /*
   * Groupings
   */

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  grouping policy-l3 {
    description
      "Layer 3 policy packet discard counters.";
    leaf packets {
      type yang:counter64;
      description
        "The number of Layer 3 packets discarded due to policy.";
    }
    leaf acl {
      type yang:counter64;
      description
        "The number of packets discarded due to Layer 3 ACLs.";
    }
    container policer {
      description
        "The number of packets discarded due ingress
         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
        "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;
    }
    container policy {
      description
        "Ingress policy-related discard counters.";
      uses policy;
    }
    container no-buffer {
      description
        "Ingress 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 "per-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 "per-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 and device components.  This is classed 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 leaves.  The following YANG tree diagram shows the complete structure:</t>
        <artwork><![CDATA[
module: ietf-packet-discard-reporting
  +--rw control-plane! {control-plane-stats}?
  |  +--rw traffic* [direction]
  |  |  +--rw direction    identityref
  |  |  +--rw packets?     yang:counter64
  |  |  +--rw bytes?       yang:counter64
  |  +--rw discards* [direction]
  |     +--rw direction    identityref
  |     +--rw packets?     yang:counter64
  |     +--rw bytes?       yang:counter64
  |     +--rw policy
  |        +--rw packets?   yang:counter64
  +--rw interface* [name] {per-interface-stats}?
  |  +--rw name        string
  |  +--rw traffic* [direction]
  |  |  +--rw direction    identityref
  |  |  +--rw l2
  |  |  |  +--rw frames?   yang:counter64
  |  |  |  +--rw bytes?    yang:counter64
  |  |  +--rw l3
  |  |  |  +--rw address-family-stat* [address-family]
  |  |  |     +--rw address-family    identityref
  |  |  |     +--rw packets?          yang:counter64
  |  |  |     +--rw bytes?            yang:counter64
  |  |  |     +--rw unicast
  |  |  |     |  +--rw packets?   yang:counter64
  |  |  |     |  +--rw bytes?     yang:counter64
  |  |  |     +--rw multicast
  |  |  |        +--rw packets?   yang:counter64
  |  |  |        +--rw bytes?     yang:counter64
  |  |  +--rw qos
  |  |     +--rw class* [id]
  |  |        +--rw id         string
  |  |        +--rw packets?   yang:counter64
  |  |        +--rw bytes?     yang:counter64
  |  +--rw discards* [direction]
  |     +--rw direction    identityref
  |     +--rw l2
  |     |  +--rw frames?   yang:counter64
  |     |  +--rw bytes?    yang:counter64
  |     +--rw l3
  |     |  +--rw address-family-stat* [address-family]
  |     |     +--rw address-family    identityref
  |     |     +--rw packets?          yang:counter64
  |     |     +--rw bytes?            yang:counter64
  |     |     +--rw unicast
  |     |     |  +--rw packets?   yang:counter64
  |     |     |  +--rw bytes?     yang:counter64
  |     |     +--rw multicast
  |     |        +--rw packets?   yang:counter64
  |     |        +--rw bytes?     yang:counter64
  |     +--rw errors
  |     |  +--rw l2
  |     |  |  +--rw rx
  |     |  |  |  +--rw frames?          yang:counter64
  |     |  |  |  +--rw crc-error?       yang:counter64
  |     |  |  |  +--rw invalid-mac?     yang:counter64
  |     |  |  |  +--rw invalid-vlan?    yang:counter64
  |     |  |  |  +--rw invalid-frame?   yang:counter64
  |     |  |  +--rw tx
  |     |  |     +--rw frames?   yang:counter64
  |     |  +--rw l3
  |     |  |  +--rw rx
  |     |  |  |  +--rw packets?          yang:counter64
  |     |  |  |  +--rw checksum-error?   yang:counter64
  |     |  |  |  +--rw mtu-exceeded?     yang:counter64
  |     |  |  |  +--rw invalid-packet?   yang:counter64
  |     |  |  +--rw ttl-expired?     yang:counter64
  |     |  |  +--rw no-route?        yang:counter64
  |     |  |  +--rw invalid-sid?     yang:counter64
  |     |  |  +--rw invalid-label?   yang:counter64
  |     |  |  +--rw tx
  |     |  |     +--rw packets?   yang:counter64
  |     |  +--rw internal
  |     |     +--rw packets?        yang:counter64
  |     |     +--rw parity-error?   yang:counter64
  |     +--rw policy
  |     |  +--rw l2
  |     |  |  +--rw frames?   yang:counter64
  |     |  |  +--rw acl?      yang:counter64
  |     |  +--rw l3
  |     |     +--rw packets?      yang:counter64
  |     |     +--rw acl?          yang:counter64
  |     |     +--rw policer
  |     |     |  +--rw packets?   yang:counter64
  |     |     |  +--rw bytes?     yang:counter64
  |     |     +--rw null-route?   yang:counter64
  |     |     +--rw rpf?          yang:counter64
  |     |     +--rw ddos?         yang:counter64
  |     +--rw no-buffer
  |        +--rw class* [id]
  |           +--rw id         string
  |           +--rw packets?   yang:counter64
  |           +--rw bytes?     yang:counter64
  +--rw device! {per-device-stats}?
     +--rw traffic
     |  +--rw l2
     |  |  +--rw frames?   yang:counter64
     |  |  +--rw bytes?    yang:counter64
     |  +--rw l3
     |  |  +--rw address-family-stat* [address-family]
     |  |     +--rw address-family    identityref
     |  |     +--rw packets?          yang:counter64
     |  |     +--rw bytes?            yang:counter64
     |  |     +--rw unicast
     |  |     |  +--rw packets?   yang:counter64
     |  |     |  +--rw bytes?     yang:counter64
     |  |     +--rw multicast
     |  |        +--rw packets?   yang:counter64
     |  |        +--rw bytes?     yang:counter64
     |  +--rw qos
     |     +--rw class* [id]
     |        +--rw id         string
     |        +--rw packets?   yang:counter64
     |        +--rw bytes?     yang:counter64
     +--rw discards
        +--rw l2
        |  +--rw frames?   yang:counter64
        |  +--rw bytes?    yang:counter64
        +--rw l3
        |  +--rw address-family-stat* [address-family]
        |     +--rw address-family    identityref
        |     +--rw packets?          yang:counter64
        |     +--rw bytes?            yang:counter64
        |     +--rw unicast
        |     |  +--rw packets?   yang:counter64
        |     |  +--rw bytes?     yang:counter64
        |     +--rw multicast
        |        +--rw packets?   yang:counter64
        |        +--rw bytes?     yang:counter64
        +--rw errors
        |  +--rw l2
        |  |  +--rw rx
        |  |  |  +--rw frames?          yang:counter64
        |  |  |  +--rw crc-error?       yang:counter64
        |  |  |  +--rw invalid-mac?     yang:counter64
        |  |  |  +--rw invalid-vlan?    yang:counter64
        |  |  |  +--rw invalid-frame?   yang:counter64
        |  |  +--rw tx
        |  |     +--rw frames?   yang:counter64
        |  +--rw l3
        |  |  +--rw rx
        |  |  |  +--rw packets?          yang:counter64
        |  |  |  +--rw checksum-error?   yang:counter64
        |  |  |  +--rw mtu-exceeded?     yang:counter64
        |  |  |  +--rw invalid-packet?   yang:counter64
        |  |  +--rw ttl-expired?     yang:counter64
        |  |  +--rw no-route?        yang:counter64
        |  |  +--rw invalid-sid?     yang:counter64
        |  |  +--rw invalid-label?   yang:counter64
        |  |  +--rw tx
        |  |     +--rw packets?   yang:counter64
        |  +--rw internal
        |     +--rw packets?        yang:counter64
        |     +--rw parity-error?   yang:counter64
        +--rw policy
        |  +--rw l2
        |  |  +--rw frames?   yang:counter64
        |  |  +--rw acl?      yang:counter64
        |  +--rw l3
        |     +--rw packets?      yang:counter64
        |     +--rw acl?          yang:counter64
        |     +--rw policer
        |     |  +--rw packets?   yang:counter64
        |     |  +--rw bytes?     yang:counter64
        |     +--rw null-route?   yang:counter64
        |     +--rw rpf?          yang:counter64
        |     +--rw ddos?         yang:counter64
        +--rw no-buffer
           +--rw class* [id]
              +--rw id         string
              +--rw packets?   yang:counter64
              +--rw bytes?     yang:counter64
]]></artwork>
      </section>
      <section anchor="requirements">
        <name>Implementation Requirements</name>
        <t>The following requirements apply to the implementation of the data model and are intended to ensure consistent implementation across different vendors and platforms while allowing for platform-specific optimisations where needed.  While the model defines a comprehensive set of counters and statistics, implementations <bcp14>MAY</bcp14> support a subset of the defined features based on device capabilities and operational requirements. However, implementations <bcp14>MUST</bcp14> clearly document which features are supported and how they map to the model.</t>
        <t>Requirements 1-10 relate to packets forwarded or discarded by the device, while requirement 11 relates to packets destined for or originating from the device:</t>
        <ol spacing="normal" type="1"><li>
            <t>All instances of Layer 2 frame or Layer 3 packet receipt, transmission, and discards <bcp14>MUST</bcp14> be accounted for.</t>
          </li>
          <li>
            <t>All instances of Layer 2 frame or Layer 3 packet receipt, transmission, and discards <bcp14>SHOULD</bcp14> be attributed to the physical or logical interface of the device where they occur.  Where they cannot be attributed to the interface, they <bcp14>MUST</bcp14> be attributed to the device.</t>
          </li>
          <li>
            <t>An individual frame <bcp14>MUST</bcp14> only be accounted for by either the Layer 2 traffic class or the Layer 2 discard classes within a single direction or context, i.e., ingress or egress or device.  This is to avoid double counting.</t>
          </li>
          <li>
            <t>An individual packet <bcp14>MUST</bcp14> only be accounted for by either the Layer 3 traffic class or the Layer 3 discard classes within a single direction or context, i.e., ingress or egress or device.  This is to avoid double counting.</t>
          </li>
          <li>
            <t>A frame accounted for at Layer 2 <bcp14>SHOULD NOT</bcp14> be accounted for at Layer 3 and vice versa.  An implementation <bcp14>MUST</bcp14> indicate which layers traffic and discards are counted against.  This is to avoid double counting.</t>
          </li>
          <li>
            <t>The aggregate Layer 2 and Layer 3 traffic and discard classes <bcp14>SHOULD</bcp14> account for all underlying frames or packets received, transmitted, and discarded across all other classes.</t>
          </li>
          <li>
            <t>The aggregate 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>
          </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 class0, which represents the default class.</t>
          </li>
          <li>
            <t>Traffic to the device control plane has its own class, however, traffic from the device control plane <bcp14>SHOULD</bcp14> be accounted for in the same way as other egress traffic.</t>
          </li>
        </ol>
      </section>
      <section anchor="examples">
        <name>Usage Examples</name>
        <t>If all of the requirements 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_0/packets</t>
          </li>
          <li>
            <t>interface/ingress/traffic/qos/class_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_0/packets</t>
          </li>
          <li>
            <t>interface/egress/discards/no-buffer/class_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>Data model - YANG Module</name>
        <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";
  }

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

     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 per-interface-stats {
    description
      "Indicates support of per-interface statistics on this
       device.";
  }

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

  /*
   * Main structure definition
   */

  /**TO DO: Need to find where to graft the reporting***/

  container control-plane {
    if-feature "control-plane-stats";
    presence "Control plane statistics are available.";
    description
      "Control plane packet counters.";
    uses plr-sx:control-plane;
  }
  list interface {
    if-feature "per-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 plr-sx:interface;
  }
  container device {
    if-feature "per-device-stats";
    presence "Device-level statistics are available.";
    description
      "Device level packet counters.";
    uses plr-sx:device;
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>This section discusses security considerations for both the information model and its implementation as a data model.</t>
      <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 protocols have to
use a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref target="RFC8446"/>, and
QUIC <xref target="RFC9000"/>) and 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 a number of data nodes defined in this YANG module that are
writable/creatable/deletable (i.e., "config true", which is the
default).  All writable data nodes are likely to be reasonably
sensitive or vulnerable in some network environments.  Write
operations (e.g., edit-config) and delete operations to these data
nodes without proper protection or authentication can have a negative
effect on network operations.  The following subtrees and data nodes
have particular sensitivities/vulnerabilities:</t>
        <dl>
          <dt>interfaces:</dt>
          <dd>
            <t>TBC</t>
          </dd>
          <dt>devices:</dt>
          <dd>
            <t>tbc</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>IANA is requested to register the following URI in the "ns" subregistry within the "IETF XML Registry" <xref target="RFC3688"/>:</t>
      <artwork><![CDATA[
   URI:  urn:ietf:params:xml:ns:ietf-packet-discard-reporting-sx
   Registrant Contact:  The IESG.
   XML:  N/A; the requested URI is an XML namespace.

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

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

   Also, this document updates RFC 8126 by providing additional
   guidelines for writing the IANA considerations for RFCs that specify
   IANA-maintained modules.  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-22"/>
        </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 1596?>

<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="464" width="968" viewBox="0 0 968 464" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 104,208 L 104,224" fill="none" stroke="black"/>
              <path d="M 104,256 L 104,272" fill="none" stroke="black"/>
              <path d="M 192,208 L 192,272" fill="none" stroke="black"/>
              <path d="M 216,160 L 216,176" fill="none" stroke="black"/>
              <path d="M 216,208 L 216,224" fill="none" stroke="black"/>
              <path d="M 216,256 L 216,272" fill="none" stroke="black"/>
              <path d="M 304,208 L 304,272" fill="none" stroke="black"/>
              <path d="M 328,208 L 328,224" fill="none" stroke="black"/>
              <path d="M 328,256 L 328,272" fill="none" stroke="black"/>
              <path d="M 416,208 L 416,272" fill="none" stroke="black"/>
              <path d="M 440,48 L 440,112" fill="none" stroke="black"/>
              <path d="M 440,208 L 440,224" fill="none" stroke="black"/>
              <path d="M 440,256 L 440,272" fill="none" stroke="black"/>
              <path d="M 464,112 L 464,160" fill="none" stroke="black"/>
              <path d="M 496,112 L 496,160" fill="none" stroke="black"/>
              <path d="M 528,48 L 528,112" fill="none" stroke="black"/>
              <path d="M 528,208 L 528,272" fill="none" stroke="black"/>
              <path d="M 552,208 L 552,224" fill="none" stroke="black"/>
              <path d="M 552,256 L 552,272" fill="none" stroke="black"/>
              <path d="M 640,208 L 640,272" fill="none" stroke="black"/>
              <path d="M 664,208 L 664,224" fill="none" stroke="black"/>
              <path d="M 664,256 L 664,272" fill="none" stroke="black"/>
              <path d="M 752,160 L 752,176" fill="none" stroke="black"/>
              <path d="M 752,208 L 752,272" fill="none" stroke="black"/>
              <path d="M 776,208 L 776,224" fill="none" stroke="black"/>
              <path d="M 776,256 L 776,272" fill="none" stroke="black"/>
              <path d="M 864,208 L 864,272" fill="none" stroke="black"/>
              <path d="M 440,48 L 528,48" fill="none" stroke="black"/>
              <path d="M 440,112 L 488,112" fill="none" stroke="black"/>
              <path d="M 504,112 L 528,112" fill="none" stroke="black"/>
              <path d="M 216,160 L 456,160" fill="none" stroke="black"/>
              <path d="M 472,160 L 752,160" fill="none" stroke="black"/>
              <path d="M 104,208 L 192,208" fill="none" stroke="black"/>
              <path d="M 216,208 L 304,208" fill="none" stroke="black"/>
              <path d="M 328,208 L 416,208" fill="none" stroke="black"/>
              <path d="M 440,208 L 528,208" fill="none" stroke="black"/>
              <path d="M 552,208 L 640,208" fill="none" stroke="black"/>
              <path d="M 664,208 L 752,208" fill="none" stroke="black"/>
              <path d="M 776,208 L 864,208" fill="none" stroke="black"/>
              <path d="M 192,240 L 216,240" fill="none" stroke="black"/>
              <path d="M 304,240 L 328,240" fill="none" stroke="black"/>
              <path d="M 416,240 L 440,240" fill="none" stroke="black"/>
              <path d="M 528,240 L 552,240" fill="none" stroke="black"/>
              <path d="M 640,240 L 664,240" fill="none" stroke="black"/>
              <path d="M 752,240 L 776,240" fill="none" stroke="black"/>
              <path d="M 864,240 L 880,240" fill="none" stroke="black"/>
              <path d="M 104,272 L 192,272" fill="none" stroke="black"/>
              <path d="M 216,272 L 304,272" fill="none" stroke="black"/>
              <path d="M 328,272 L 416,272" fill="none" stroke="black"/>
              <path d="M 440,272 L 528,272" fill="none" stroke="black"/>
              <path d="M 552,272 L 640,272" fill="none" stroke="black"/>
              <path d="M 664,272 L 752,272" fill="none" stroke="black"/>
              <path d="M 776,272 L 864,272" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="888,240 876,234.4 876,245.6" fill="black" transform="rotate(0,880,240)"/>
              <polygon class="arrowhead" points="784,240 772,234.4 772,245.6" fill="black" transform="rotate(0,776,240)"/>
              <polygon class="arrowhead" points="672,240 660,234.4 660,245.6" fill="black" transform="rotate(0,664,240)"/>
              <polygon class="arrowhead" points="560,240 548,234.4 548,245.6" fill="black" transform="rotate(0,552,240)"/>
              <polygon class="arrowhead" points="504,112 492,106.4 492,117.6" fill="black" transform="rotate(270,496,112)"/>
              <polygon class="arrowhead" points="472,160 460,154.4 460,165.6" fill="black" transform="rotate(90,464,160)"/>
              <polygon class="arrowhead" points="448,240 436,234.4 436,245.6" fill="black" transform="rotate(0,440,240)"/>
              <polygon class="arrowhead" points="336,240 324,234.4 324,245.6" fill="black" transform="rotate(0,328,240)"/>
              <polygon class="arrowhead" points="224,240 212,234.4 212,245.6" fill="black" transform="rotate(0,216,240)"/>
              <g class="text">
                <text x="472" y="84">CPU</text>
                <text x="420" y="132">from_cpu</text>
                <text x="532" y="132">to_cpu</text>
                <text x="36" y="244">Packet</text>
                <text x="76" y="244">rx</text>
                <text x="100" y="244">-&gt;</text>
                <text x="136" y="244">Phy</text>
                <text x="248" y="244">Mac</text>
                <text x="368" y="244">Ingress</text>
                <text x="480" y="244">Buffers</text>
                <text x="592" y="244">Egresss</text>
                <text x="696" y="244">Mac</text>
                <text x="808" y="244">Phy</text>
                <text x="916" y="244">Packet</text>
                <text x="956" y="244">tx</text>
                <text x="380" y="260">Pipeline</text>
                <text x="604" y="260">Pipeline</text>
                <text x="52" y="308">Intended</text>
                <text x="372" y="308">policy/acl</text>
                <text x="596" y="308">policy/acl</text>
                <text x="56" y="324">Discards:</text>
                <text x="388" y="324">policy/policer</text>
                <text x="612" y="324">policy/policer</text>
                <text x="376" y="340">policy/urpf</text>
                <text x="400" y="356">policy/null-route</text>
                <text x="44" y="388">Unintended</text>
                <text x="264" y="388">error/rx/l2</text>
                <text x="376" y="388">error/l3/rx</text>
                <text x="480" y="388">no-buffer</text>
                <text x="600" y="388">error/l3/tx</text>
                <text x="56" y="404">Discards:</text>
                <text x="376" y="404">error/local</text>
                <text x="400" y="420">error/l3/no-route</text>
                <text x="424" y="436">error/l3/rx/ttl-expired</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![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>
        </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/local</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>
  </back>
  <!-- ##markdown-source:
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
XoDfZS/zmMqF2o8reK+V6Haz9pqtlc3aa7Y2Nquv2drYrL5ma5lSWZFSYnMp
dcWvwyRsIi/OLLTXbK1s16FmayNBG2q2VlC0tWZruU17zdZym/aarfVt6mu2
bsIhnaTdMvE4rq9dfXbQRK01W52PXcu0TXl0Yfx8mamv2dooJTXId0C9pWZr
xQimZuu/Ys1oqdlabtBSs7XcoKVmqwOMVbO1sBKVjDHhvq8xxgpftRPT/rqJ
kgo3ckD8rv7uCGe/03MnStck7sjchS+b6+W7bF1oukG9/IJK6VAvv14J1XFA
uVG3evmFRk69/A8lsWgp11tu0FL7uDB6oV7+hxIDdx2/E/fZcJq7I2xwSiWO
C53XlDjeGOYNAHb3Lj23rVWfu6MsVE9VzZeuLIj7yYLYWBbEfWRB3EcWRIMs
iE1lodygvQ54gyyITfmq3KB9/MI+pDDLLnu5JrD9uIL3WonuWMAd746oMWTb
7o6oadZ2d0RNs7a7I0pWpv1YbC6lrvh1mIRN5MWZha53RxTadb47ooagrXdH
OBTteHeE3abr3RFVwLXdHVHVpu3uiG4c0knaS/sQ86aqnxZErCad7o4o7EMK
QNUojy6Mny8zbXdH1EhJDfIdUO90d0T1PsR+91utGZ3ujthgH1Ju0OnuiPI+
RLiv6u+OaDSsCl91vTuijZLOSewDceocG4or+csK9AsfuL5/kFg/VX1ou867
9a23XGJJI66s555F6hAA67ASTxKdKySweEWUqmKPaZBmdFrpduP5SUzRslOq
0InF86NJrM4ll6GXUUVWjIIIsbK4gpKqzaqXg5RP5X1KKF4EqSprfEdnshEn
WgvxE/WAINtHzCldWbFYJnKOFZRvJRVbpegdFbZL1VxNzcF+8UhWnI/+ZspC
elj3VXXAtxDwqbI6qqeoHvgZm7rsvrfkwN9AXWRhSulTEdN8Kobih/gO4+wr
AHhzfQPsKL0E5mqiyrqqsBEzMM6LghLPwmGkeXyHMK7xpFpPMVFm2Os5DLM7
2N1RRdY5x5IDmaYc6I/oJFZU03ht3b/QV/NmYSJ2d1Vnqd3bBIu5R6paPP0v
mAURl6w19SW508Neb3dI9X6DCCYmwkCZYoqRKBfGoxTtZdbXmXMpX9FgBawq
Uo6lW7x+2Nv7QsNd//D6zdkxDZhxfWIWGiqAPF+nYDuH2HUYz+jPPOjB8Bdx
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
it80z9nkhXU0hU0YdzLs/V/YT9hgBAABAA==

-->

</rfc>
