<?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.24 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-opsawg-discardmodel-05" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="IM and DM for Packet Discard Reporting">Information and Data Models for Packet Discard Reporting</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-discardmodel-05"/>
    <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="March" day="03"/>
    <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="RFC1213"/> 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="RFC1213"/> 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="RFC6020"/> 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 SNMP <xref target="RFC1157"/> - 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?     uint32
    |  |  +-- bytes?       uint32
    |  +-- discards* [direction]
    |     +-- direction    identityref
    |     +-- packets?     uint32
    |     +-- bytes?       uint32
    |     +-- policy
    |        +-- packets?   uint32
    +-- interface* [name] {per-interface-stats}?
    |  +-- name        string
    |  +-- traffic* [direction]
    |  |  +-- direction    identityref
    |  |  +-- l2
    |  |  |  +-- frames?   uint64
    |  |  |  +-- bytes?    uint64
    |  |  +-- l3
    |  |  |  +-- address-family-stat* [address-family]
    |  |  |     +-- address-family    identityref
    |  |  |     +-- packets?          uint64
    |  |  |     +-- bytes?            uint64
    |  |  |     +-- unicast
    |  |  |     |  +-- packets?   uint64
    |  |  |     |  +-- bytes?     uint64
    |  |  |     +-- multicast
    |  |  |        +-- packets?   uint64
    |  |  |        +-- bytes?     uint64
    |  |  +-- qos
    |  |     +-- class* [id]
    |  |        +-- id         string
    |  |        +-- packets?   uint64
    |  |        +-- bytes?     uint64
    |  +-- discards* [direction]
    |     +-- direction    identityref
    |     +-- l2
    |     |  +-- frames?   uint64
    |     |  +-- bytes?    uint64
    |     +-- l3
    |     |  +-- address-family-stat* [address-family]
    |     |     +-- address-family    identityref
    |     |     +-- packets?          uint64
    |     |     +-- bytes?            uint64
    |     |     +-- unicast
    |     |     |  +-- packets?   uint64
    |     |     |  +-- bytes?     uint64
    |     |     +-- multicast
    |     |        +-- packets?   uint64
    |     |        +-- bytes?     uint64
    |     +-- errors
    |     |  +-- l2
    |     |  |  +-- rx
    |     |  |  |  +-- frames?          uint32
    |     |  |  |  +-- crc-error?       uint32
    |     |  |  |  +-- invalid-mac?     uint32
    |     |  |  |  +-- invalid-vlan?    uint32
    |     |  |  |  +-- invalid-frame?   uint32
    |     |  |  +-- tx
    |     |  |     +-- frames?   uint32
    |     |  +-- l3
    |     |  |  +-- rx
    |     |  |  |  +-- packets?          uint32
    |     |  |  |  +-- checksum-error?   uint32
    |     |  |  |  +-- mtu-exceeded?     uint32
    |     |  |  |  +-- invalid-packet?   uint32
    |     |  |  +-- ttl-expired?     uint32
    |     |  |  +-- no-route?        uint32
    |     |  |  +-- invalid-sid?     uint32
    |     |  |  +-- invalid-label?   uint32
    |     |  |  +-- tx
    |     |  |     +-- packets?   uint32
    |     |  +-- internal
    |     |     +-- packets?        uint32
    |     |     +-- parity-error?   uint32
    |     +-- policy
    |     |  +-- l2
    |     |  |  +-- frames?   uint32
    |     |  |  +-- acl?      uint32
    |     |  +-- l3
    |     |     +-- packets?      uint32
    |     |     +-- acl?          uint32
    |     |     +-- policer
    |     |     |  +-- packets?   uint32
    |     |     |  +-- bytes?     uint32
    |     |     +-- null-route?   uint32
    |     |     +-- rpf?          uint32
    |     |     +-- ddos?         uint32
    |     +-- no-buffer
    |        +-- class* [id]
    |           +-- id         string
    |           +-- packets?   uint64
    |           +-- bytes?     uint64
    +-- flow* [direction] {flow-reporting}?
    |  +-- direction    identityref
    |  +-- traffic
    |  |  +-- l2
    |  |  |  +-- frames?   uint64
    |  |  |  +-- bytes?    uint64
    |  |  +-- l3
    |  |  |  +-- address-family-stat* [address-family]
    |  |  |     +-- address-family    identityref
    |  |  |     +-- packets?          uint64
    |  |  |     +-- bytes?            uint64
    |  |  |     +-- unicast
    |  |  |     |  +-- packets?   uint64
    |  |  |     |  +-- bytes?     uint64
    |  |  |     +-- multicast
    |  |  |        +-- packets?   uint64
    |  |  |        +-- bytes?     uint64
    |  |  +-- qos
    |  |     +-- class* [id]
    |  |        +-- id         string
    |  |        +-- packets?   uint64
    |  |        +-- bytes?     uint64
    |  +-- discards
    |     +-- l2
    |     |  +-- frames?   uint64
    |     |  +-- bytes?    uint64
    |     +-- l3
    |     |  +-- address-family-stat* [address-family]
    |     |     +-- address-family    identityref
    |     |     +-- packets?          uint64
    |     |     +-- bytes?            uint64
    |     |     +-- unicast
    |     |     |  +-- packets?   uint64
    |     |     |  +-- bytes?     uint64
    |     |     +-- multicast
    |     |        +-- packets?   uint64
    |     |        +-- bytes?     uint64
    |     +-- errors
    |     |  +-- l2
    |     |  |  +-- rx
    |     |  |  |  +-- frames?          uint32
    |     |  |  |  +-- crc-error?       uint32
    |     |  |  |  +-- invalid-mac?     uint32
    |     |  |  |  +-- invalid-vlan?    uint32
    |     |  |  |  +-- invalid-frame?   uint32
    |     |  |  +-- tx
    |     |  |     +-- frames?   uint32
    |     |  +-- l3
    |     |  |  +-- rx
    |     |  |  |  +-- packets?          uint32
    |     |  |  |  +-- checksum-error?   uint32
    |     |  |  |  +-- mtu-exceeded?     uint32
    |     |  |  |  +-- invalid-packet?   uint32
    |     |  |  +-- ttl-expired?     uint32
    |     |  |  +-- no-route?        uint32
    |     |  |  +-- invalid-sid?     uint32
    |     |  |  +-- invalid-label?   uint32
    |     |  |  +-- tx
    |     |  |     +-- packets?   uint32
    |     |  +-- internal
    |     |     +-- packets?        uint32
    |     |     +-- parity-error?   uint32
    |     +-- policy
    |     |  +-- l2
    |     |  |  +-- frames?   uint32
    |     |  |  +-- acl?      uint32
    |     |  +-- l3
    |     |     +-- packets?      uint32
    |     |     +-- acl?          uint32
    |     |     +-- policer
    |     |     |  +-- packets?   uint32
    |     |     |  +-- bytes?     uint32
    |     |     +-- null-route?   uint32
    |     |     +-- rpf?          uint32
    |     |     +-- ddos?         uint32
    |     +-- no-buffer
    |        +-- class* [id]
    |           +-- id         string
    |           +-- packets?   uint64
    |           +-- bytes?     uint64
    +-- device {per-device-stats}?
       +-- traffic
       |  +-- l2
       |  |  +-- frames?   uint64
       |  |  +-- bytes?    uint64
       |  +-- l3
       |  |  +-- address-family-stat* [address-family]
       |  |     +-- address-family    identityref
       |  |     +-- packets?          uint64
       |  |     +-- bytes?            uint64
       |  |     +-- unicast
       |  |     |  +-- packets?   uint64
       |  |     |  +-- bytes?     uint64
       |  |     +-- multicast
       |  |        +-- packets?   uint64
       |  |        +-- bytes?     uint64
       |  +-- qos
       |     +-- class* [id]
       |        +-- id         string
       |        +-- packets?   uint64
       |        +-- bytes?     uint64
       +-- discards
          +-- l2
          |  +-- frames?   uint64
          |  +-- bytes?    uint64
          +-- l3
          |  +-- address-family-stat* [address-family]
          |     +-- address-family    identityref
          |     +-- packets?          uint64
          |     +-- bytes?            uint64
          |     +-- unicast
          |     |  +-- packets?   uint64
          |     |  +-- bytes?     uint64
          |     +-- multicast
          |        +-- packets?   uint64
          |        +-- bytes?     uint64
          +-- errors
          |  +-- l2
          |  |  +-- rx
          |  |  |  +-- frames?          uint32
          |  |  |  +-- crc-error?       uint32
          |  |  |  +-- invalid-mac?     uint32
          |  |  |  +-- invalid-vlan?    uint32
          |  |  |  +-- invalid-frame?   uint32
          |  |  +-- tx
          |  |     +-- frames?   uint32
          |  +-- l3
          |  |  +-- rx
          |  |  |  +-- packets?          uint32
          |  |  |  +-- checksum-error?   uint32
          |  |  |  +-- mtu-exceeded?     uint32
          |  |  |  +-- invalid-packet?   uint32
          |  |  +-- ttl-expired?     uint32
          |  |  +-- no-route?        uint32
          |  |  +-- invalid-sid?     uint32
          |  |  +-- invalid-label?   uint32
          |  |  +-- tx
          |  |     +-- packets?   uint32
          |  +-- internal
          |     +-- packets?        uint32
          |     +-- parity-error?   uint32
          +-- policy
          |  +-- l2
          |  |  +-- frames?   uint32
          |  |  +-- acl?      uint32
          |  +-- l3
          |     +-- packets?      uint32
          |     +-- acl?          uint32
          |     +-- policer
          |     |  +-- packets?   uint32
          |     |  +-- bytes?     uint32
          |     +-- null-route?   uint32
          |     +-- rpf?          uint32
          |     +-- ddos?         uint32
          +-- no-buffer
             +-- class* [id]
                +-- id         string
                +-- packets?   uint64
                +-- bytes?     uint64
]]></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-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-64 {
    description
      "Grouping for 64-bit Layer 3 packet counters.";
    leaf packets {
      type uint64;
      description
        "Number of Layer 3 packets.";
    }
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  grouping errors {
    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 uint32;
      description
        "The number of Layer 2 frames discarded due
         to policy.";
    }
    leaf acl {
      type uint32;
      description
        "The number of frames discarded due to Layer 2 ACLs.";
    }
  }

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

  grouping 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-32;
    }
    list discards {
      key "direction";
      description
        "Control plane packet discard counters.";
      leaf direction {
        type identityref {
          base direction;
        }
        description
          "Specifies a direction.";
      }
      uses basic-packets-bytes-32;
      container policy {
        description
          "Number of control plane packets discarded due to policy.";
        uses basic-packets-32;
      }
    }
  }

  /*
   * 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 interface* [name] {per-interface-stats}?
  |  +--rw name        string
  |  +--rw traffic* [direction]
  |  |  +--rw direction    identityref
  |  |  +--rw l2
  |  |  |  +--rw frames?   uint64
  |  |  |  +--rw bytes?    uint64
  |  |  +--rw l3
  |  |  |  +--rw address-family-stat* [address-family]
  |  |  |     +--rw address-family    identityref
  |  |  |     +--rw packets?          uint64
  |  |  |     +--rw bytes?            uint64
  |  |  |     +--rw unicast
  |  |  |     |  +--rw packets?   uint64
  |  |  |     |  +--rw bytes?     uint64
  |  |  |     +--rw multicast
  |  |  |        +--rw packets?   uint64
  |  |  |        +--rw bytes?     uint64
  |  |  +--rw qos
  |  |     +--rw class* [id]
  |  |        +--rw id         string
  |  |        +--rw packets?   uint64
  |  |        +--rw bytes?     uint64
  |  +--rw discards* [direction]
  |     +--rw direction    identityref
  |     +--rw l2
  |     |  +--rw frames?   uint64
  |     |  +--rw bytes?    uint64
  |     +--rw l3
  |     |  +--rw address-family-stat* [address-family]
  |     |     +--rw address-family    identityref
  |     |     +--rw packets?          uint64
  |     |     +--rw bytes?            uint64
  |     |     +--rw unicast
  |     |     |  +--rw packets?   uint64
  |     |     |  +--rw bytes?     uint64
  |     |     +--rw multicast
  |     |        +--rw packets?   uint64
  |     |        +--rw bytes?     uint64
  |     +--rw errors
  |     |  +--rw l2
  |     |  |  +--rw rx
  |     |  |  |  +--rw frames?          uint32
  |     |  |  |  +--rw crc-error?       uint32
  |     |  |  |  +--rw invalid-mac?     uint32
  |     |  |  |  +--rw invalid-vlan?    uint32
  |     |  |  |  +--rw invalid-frame?   uint32
  |     |  |  +--rw tx
  |     |  |     +--rw frames?   uint32
  |     |  +--rw l3
  |     |  |  +--rw rx
  |     |  |  |  +--rw packets?          uint32
  |     |  |  |  +--rw checksum-error?   uint32
  |     |  |  |  +--rw mtu-exceeded?     uint32
  |     |  |  |  +--rw invalid-packet?   uint32
  |     |  |  +--rw ttl-expired?     uint32
  |     |  |  +--rw no-route?        uint32
  |     |  |  +--rw invalid-sid?     uint32
  |     |  |  +--rw invalid-label?   uint32
  |     |  |  +--rw tx
  |     |  |     +--rw packets?   uint32
  |     |  +--rw internal
  |     |     +--rw packets?        uint32
  |     |     +--rw parity-error?   uint32
  |     +--rw policy
  |     |  +--rw l2
  |     |  |  +--rw frames?   uint32
  |     |  |  +--rw acl?      uint32
  |     |  +--rw l3
  |     |     +--rw packets?      uint32
  |     |     +--rw acl?          uint32
  |     |     +--rw policer
  |     |     |  +--rw packets?   uint32
  |     |     |  +--rw bytes?     uint32
  |     |     +--rw null-route?   uint32
  |     |     +--rw rpf?          uint32
  |     |     +--rw ddos?         uint32
  |     +--rw no-buffer
  |        +--rw class* [id]
  |           +--rw id         string
  |           +--rw packets?   uint64
  |           +--rw bytes?     uint64
  +--rw device! {per-device-stats}?
     +--rw traffic
     |  +--rw l2
     |  |  +--rw frames?   uint64
     |  |  +--rw bytes?    uint64
     |  +--rw l3
     |  |  +--rw address-family-stat* [address-family]
     |  |     +--rw address-family    identityref
     |  |     +--rw packets?          uint64
     |  |     +--rw bytes?            uint64
     |  |     +--rw unicast
     |  |     |  +--rw packets?   uint64
     |  |     |  +--rw bytes?     uint64
     |  |     +--rw multicast
     |  |        +--rw packets?   uint64
     |  |        +--rw bytes?     uint64
     |  +--rw qos
     |     +--rw class* [id]
     |        +--rw id         string
     |        +--rw packets?   uint64
     |        +--rw bytes?     uint64
     +--rw discards
        +--rw l2
        |  +--rw frames?   uint64
        |  +--rw bytes?    uint64
        +--rw l3
        |  +--rw address-family-stat* [address-family]
        |     +--rw address-family    identityref
        |     +--rw packets?          uint64
        |     +--rw bytes?            uint64
        |     +--rw unicast
        |     |  +--rw packets?   uint64
        |     |  +--rw bytes?     uint64
        |     +--rw multicast
        |        +--rw packets?   uint64
        |        +--rw bytes?     uint64
        +--rw errors
        |  +--rw l2
        |  |  +--rw rx
        |  |  |  +--rw frames?          uint32
        |  |  |  +--rw crc-error?       uint32
        |  |  |  +--rw invalid-mac?     uint32
        |  |  |  +--rw invalid-vlan?    uint32
        |  |  |  +--rw invalid-frame?   uint32
        |  |  +--rw tx
        |  |     +--rw frames?   uint32
        |  +--rw l3
        |  |  +--rw rx
        |  |  |  +--rw packets?          uint32
        |  |  |  +--rw checksum-error?   uint32
        |  |  |  +--rw mtu-exceeded?     uint32
        |  |  |  +--rw invalid-packet?   uint32
        |  |  +--rw ttl-expired?     uint32
        |  |  +--rw no-route?        uint32
        |  |  +--rw invalid-sid?     uint32
        |  |  +--rw invalid-label?   uint32
        |  |  +--rw tx
        |  |     +--rw packets?   uint32
        |  +--rw internal
        |     +--rw packets?        uint32
        |     +--rw parity-error?   uint32
        +--rw policy
        |  +--rw l2
        |  |  +--rw frames?   uint32
        |  |  +--rw acl?      uint32
        |  +--rw l3
        |     +--rw packets?      uint32
        |     +--rw acl?          uint32
        |     +--rw policer
        |     |  +--rw packets?   uint32
        |     |  +--rw bytes?     uint32
        |     +--rw null-route?   uint32
        |     +--rw rpf?          uint32
        |     +--rw ddos?         uint32
        +--rw no-buffer
           +--rw class* [id]
              +--rw id         string
              +--rw packets?   uint64
              +--rw bytes?     uint64
]]></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 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***/

  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="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="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>
      </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="RFC1213">
          <front>
            <title>Management Information Base for Network Management of TCP/IP-based internets: MIB-II</title>
            <author fullname="K. McCloghrie" initials="K." surname="McCloghrie"/>
            <author fullname="M. Rose" initials="M." surname="Rose"/>
            <date month="March" year="1991"/>
            <abstract>
              <t>This memo defines the second version of the Management Information Base (MIB-II) for use with network management protocols in TCP/IP-based internets. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="17"/>
          <seriesInfo name="RFC" value="1213"/>
          <seriesInfo name="DOI" value="10.17487/RFC1213"/>
        </reference>
        <reference anchor="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="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="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="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="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 1612?>

<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>Where traffic byte counters need to be 64-bit, packet and discard counters that increase at a lower rate may be encoded in 32-bit.</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; if IPv4 is tunnelled over IPv6 for example.  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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
e7CO1h78rYSm2B3uPu9xYVYqsULW01aeRAfY1wFwuLdMD94twwOQRvjlwaYx
trC/VQI4vBOrMIEnzzEqOlhSDSX6miAw+A6wPMl7Glh9hp/gT/iFSV6myOoW
0EIgMQ6s5MG61DWC4SMOyxkwv9MkMm5UD/X1xdX4lx/Fg7sUyX5IvWKINlbj
pL6gi1/kBJaUaK2nejvXhbAZEfgMyzgccKXtLD4oVdrucbMxlwyFv0olpK1/
36seaos7/1DpqKmSc02PpULL1b4qpZXrwCpXOq52Uy1tXNNPpc5wtZ/6qsI1
fbVVD/6B5pgrxqwKnqFkKrsiT1M5rGqWGkNRFBxTcB8CeblG4gP/IdWX50K9
11hK3qR8Yd4zZUpyzcyAC9pQB1xP1qQjUeUuIAfa49gtFtvCFGPKKaEPLp0E
Yk7ppmIeIo3zRBVXmgQRlTEFtDC9Du27WBFSZ14AoiaZq08yFNPWOR8mT9Lc
i9Dy4LQ1MM+xdCl3oIu5gYaMsJ4GfMaZRZ6SdlyTDDYnVN3t5dURrBJqy9+j
SQOAYapjhOX5CI39oa9JUNDv21ScyjnWUUfxThJB0yBU2e0xNz9SZTPU+wd6
GVNFf2kVtVdQD3DKH2qSEltoSaqrdZW2jrr2KIquv8C/54AHpaEpiOBxkKUy
nKlEGpjAkGAHI4DqSm6R+EwkI4Kssj/YeTzY2Vcys8ysKOJw9wld6I+GWy3y
FIG669ULlT12cblCIXq3v8Nm34lXqhwC/drGN6pAgqhJt2hDSleV0fX4UN/b
PVCVGUwG8qkeA86GBlTlwRXA2SDYp2F3HH8expPCRLzH+DUZP3cEwcnNuw8I
biTdHUenwofFx7EuR0ODVXnhhM81Apsb9FmHFbbXCMORSRkuGuvdk6lIXNCg
AMAMolIM1RBYPbjo6nnTsMzdqU3dYlS1kTZZk2pjpemu9r81oMjPCwlWbtZC
tjMMpaOnDoQnF5ceU1dw5M+HdfRe3ezbKLoDNuJ5or/nLGdxcgHddBrt8ecZ
7XGH0bCk0KcOBl04AwUs8kvrhgxQYF1r2czVIxw78JVFng4et+gF3QuN/Hh/
MAmKYpHG/8EZq1plhNKbGWfce9URsQD7UZ/3tHQpjwbjnefLCXQOYsIdxfT+
UePZgAy5bT8VJZ3UquEqo0jbsDIRLewJiM+AO/WzCXP2T94T5T3jNayZROX5
/FQ89rQ/thsinzKDe6XE5g4TaMj32edvr9v8aQ4a7XXEeLT36ctwtPfPWIaf
iNI9lqHGq20a74z7XZbh/VC+1zK8Ix73Woafho5bHKB1/X2Bidu4/sK9gT7p
akSyXEthMyZafj2vjBesNo0zqoxDtcLr7AogFdb1rAkhMoTDynJbboOtVgpq
U7E6ZiP+asZqjUIzeVZskvWqxQbS89UMK0B7VZTdjhpIVPRSIyvsicJ/2rGQ
6IgmC9YGEN6ohs3U6TTyxwoEJsppMwxnpulngaJmmYy6LpMq+zrLJFhV18Rv
ccvu9c9FPdwrdSHHgz/HVw8bh6ElwRX8nEUQTA0plkE0MJV5dluXAwylOtvA
/cG0zPEcfvB809wVIxh/XXIP3q3O2cYJQ7dfE1YFG4Z7BrFaCm2Sjgr2QtAW
8DrDjLoM08xdephR+zAFr7VM+IYxoI8mmvMJ3QCQTd5tVijaq8Ca0ikL2TIh
pucNE+L2rjwO7igFHzZwdcnuqFXEjZyNh1qRUcjtMRTWd0WAgOUlgW+ri4JA
NKGSXxRKE7jRAIUVgflF4aDzAxrKppgVQrIBPgz5/B8AUAezbICOWfVzgKeD
N5rApBNxG0IVO9GnY/TivoyDcnCNDscZYDiO3UERmVNGsllMjDqIiZFZyHZA
y2eTE5Xu7ycoyrvMT5m70n6zMnk21Vvjk5okhhMG/FlALg1cgtkGmAPwnBCm
BjDt6ON/ApAlwtoxVRtWrWKcz7lsmyC8w7othYGVorrsLlTcFxhe4TStxH1Z
AWW68qaOHbM7MQIn9Ob63gc6YYEtMcZnlkLGaoWEoqsVLHbnDfC9Z1wPeH19
au+WFUg6tOsT4WmcVjv8q4DJuSqhBior1P1LAVanzq7knII9LlW02YOry4fi
6uSoBUIKsP9nwnh2cXolaNRm30ehhYIoa1ZDJzoOrV3xfJKzsSOm1TQCFRJX
pbydKfClwOEx2oBp2h1kHXYHumZoZ4WfddwYmI677Ds+/0bAdUV20e50JYMp
oYrxMHewsDaTevSlSG113Ml2+9ewpe5N7WY6H3cka1dfQzfGpc26vSNveJG9
+zSXRMe5dUYdNYEzagTHxAO3AtVRWldGhd6bxJa6MzlsOQfQE6Pul+D5adUU
9zzR6C5KCs5GSU1w1agJz/9Utdy0w9SwYTpNs0rQtB1tFlKKtqUL076gGt4k
O74kVRvH1ECVyWqvFJWz1L5QuoyntsYFK+me6zb7jS5ajbhtT5usui9Fpzpr
uki8qpmzZDX7UrDMvCB0QOmQSlYDISYOfikQMW3NmuYif01f5de8hE3KQuMK
PvpkxXeifDSuAtwg3D/V5e4OOtokeTp64B1bYcPId9BhLZJg3W0wJYpLqSpN
o3Lr+lGLy5k6DVweyc2rKbgyj7wbWEnqwrHuhxIOEWrY86Ib4nc30zpZAw49
wcj4RFusk5IsjTlqXNqq+k3jwuYYYL4RpeaihLYdhHM61yS82g+iWtdZSSw1
jNAkmtQIupMmAhVR1O3uAwrV7k4mOsMtU4hOcU2sq4HzjoRjTVKKGcZ/m6MU
SnG2BdGbwHADFIrvG453a6aTCFGZybtQonmC/4UpsYntShdgNLHeoRPk3hQk
98m8Rncf+TVj/XsQu4PJ+slcWDsTG9wg/37UarE8GscuItZqOWjTpqsBrgKi
kstGh4af4f17peTRQMPGoeLpu4PNl9I0L76CqBTyr6/6K7os7jktHTIWnWNe
ZFV11q1+IYLZQOembNXkx9yDPxt0otN5ZZmUNaILWE3ukumc1hOm1LaDWiTU
eDwiHZuZu14xEJNT4xmLgtf0cnPJa+czlxZgVHMY3zGoqQCS8kqwI5VvZ0Bt
WF/mfYWylDRUR1Q3FcmlZ1U+/WvKltqpfoUYtzMjW6gNFqBtvVb50E5g22BD
cEdsv90Nno+9jyrp/Pj86OoHp4DON/Y9rng9aXFHJGbEY0JYzTWdacN1mPXV
dj5+tG7Q1CuTrxslnIordocqMxPv+KVCCVO+G/pcXad3zMOr0byivM9k7dz4
Wb3d0qBVvt0yoVxPzRemwsAERpQyasDTuhRYJfwGSct9piofV3pYO0R/quMl
9B1teFndClN/I3UDb01dI8NXPC4soxtdX+efeV1aj0ozJbd3uYjrg/6m9iIu
87bhIq4PVpOWOwLsZlRp7IP7rKZ6ZKlFTfVIp9NR9ZOu1SPNZ6L+yyZ07C9a
qkdWG7dUj6w2LqpH2u8+1Axc20kNAdtGs6tH2m/rEK3tpg7J2hnjyqel4d0C
ZtVO6wqY3QXGDgBqXq6/iMsGtp3fRZnf7cmo5/f66Sq1cPnd/uQO/C7uzO+l
L9r5vdS4nd9LjR1+FxUkG+a22rBhekujlfhddOWlasPm8fi9CeUtwemyh3lM
hT3txzW8YxFzVO7FNG+ullrbvLlaamvzarXU1ubVaqlVCmRlCoj61TOqWV/u
8uhA1JZqqfVUba6WWtu+pVpqK6FqqqXWUKqxWmq1bXO11Grb5mqpzW2r1VLv
MrN19TlLU2uFOW0WS9VOrKYN1VKdRrpaardF28aYhZiuVktt5d4G5FpQa6iW
WtOjqZbaRdZWOmmStQ2jNVRLrTZsqJZabdhQLdUZ1KqWWpLYFWNDuO8bjI1S
q2YFYbeq0w4KB9pr/UfzLQKO/d1zCa+r9jYzoa7e+qF2ukotLPYrfXKHSuyl
Jd2hEnuzELBm1kWkjrCbGzuV2D9U2Lih8G21YUNl9NJopUrsHyoMuGm8Vu6x
4TG3CNjDV4oBlzptKAbcGcYOALq2dM/9xqo4vYF360lfauHyrrgf74o78664
C++Ku/CuaOFd0ZV3qw2bq/q38K7oyhfVhs3jlezi0qy57OGacPbjGt6xiDkq
91JYcBtuEWgwyJpuEWho3nSLQEPzplsEKtaT/VjUr55Rzfpyl0cHom68RaBM
1U23CJTab7xFoIFQjbcIOJTacIuA3XbTLQJ1QDTdIlDXtukWgW4z21y33hqo
FP7fJpaqnVhNW28RKNnFJSAaFm0bYxZiuukWgQbubUCuBbXWWwTq7WL7Xatd
XNuw+RaBDnZxtWHrLQId7GJhD1p3i0CD4VB6v+kWgU0Kwm7VfosAVgx2PPbi
Uv6Ww3rms4733yTWT1Up2K74bbX1Vius0sG13NxjAH36Zp0ToBPfuUwAc7Gj
VJUXTIM0o4MCtxvPT2KKWJtRTUgsox5NY3UksAq9jGqA4gFkiDWmFZRU31S9
HKR8IOZTft0ySFUh3Vs6Dok431CIX6gHBNk+3Unp8oLlKpELrNl7I6m8J52d
q9A5qh9qqtz1y6ch4mz8V1OI0MNKo6oDrkfPBzrqlIzO1OFnbCp0+96Kg+8C
daWBKapOZTOLqRiKn+JbjHGtAeDN1TWwn/QSmKupKiSqTmzNwDgvCko8hoKR
FvEtwrjGQyI9xUSZYa/nMMzuYHdHldvmFCUOI5hxkC2ik1gxBZO1VYm/r+bN
wkTs7qrOUru3KZb1jlTdcPovmAcRF0k1FQ2504Neb3dIFWaDCCYmwjPqcuQ+
dlEKMqXMxVXW14koKRfrt4LGFCkn0i1jPuztfaHhrn56/eb0iAbMuCIuLxoq
ubtYp2BLhth1GM/pz+K80fAXcRFzOk0m1cInbjePfC/CZMjaUUyPfW5rCFBp
qcp29kZAi4huabgJpjkAxQSgD+MoXFfIhxwhA3VrgxSV4h5UqCR2X5o4HlVf
Hg8cgwiXF/BDaB2b67RY+S7jEvF9k3wOb6T5S0FfHMhikuNNDEJ5GudYp50A
prrI+2UE1YTeEcNRG4aj/1EMHwGGupaWg4dXlNpSrHn+uroeimYjYmdiQYy+
9+gegbKAJ7qpWz2kEkshfp7WBW6ypNKjeXMPF10nrB7TDQDwCZBkjkNpVLD3
8pw4oaJqChTKCldTFTMHVQaSlQURJeaY2tqpSYfuF+lt+MPqHrFgFYedOdcm
DHtPyjBvrE2EPUfmgoQyCkTrFgQ+E9hPh+KEimNRfJeWEHX0LjBTH/c5t9gs
rmK4yjLTeCgmKNYGWdl9c9FQbIfHa4qAHqYRh71nQxSGFJ1QvrVHZfoTpdSH
dFmIuYwG0YoBOrrJI5659LbCnrTYVPp+2NvdARLNxBFYNVj9HO+PeHW4t//k
0cePyMUoj/MUSV6B3NYKppKwpyJIdvSdLSa4ItV2hgdICYXyLuhHHa/siO9S
ROAC+g3wcqPbiD/to1XAVoZmuJLyLfVgaTBHRKhokBRlzK2HV4coHlICS/XO
kS1vUm+OtybQ7RlooKqLNNA4BSISA85UNQ7bOMWpxFnyxNY8jqdbpsIaFel1
i49MxW2chxjL4/P3YEUMCvW3rWTqtgIML5+52d9WHW6rdXOHL8hEb23/W5xu
E9H/vtOpf7s9994bF9hZqD8uBUEWgZ54Lc8pXcvDNwB1pIm5vwVRfNyJKA2f
NFPF/sC93ciMg1es2DNboIc38qjEF138QUnIdAOKsgbc9mlv/6KKYLl9cQdO
2+Rv/sqwQFHUz5l7dVubIsjlxSv2MlHmHO7I7jX1Zqy7TH7xUYfpV7fTIRes
ZsXUo5g4Knaa5ftving4c//NJ11RQxGOX/J+GgpxLC6nqdxMs+nunMrNNvjo
n3utwtcbbcTXG23cvj7XjTa2U6l6k83XS2zE10tsPtslNo8GOyP4ry3b8Osl
Nv/il9jcIQVp+7vvrl+Lo9cH4lyycwvaTLUHLRZzsLYz6xoXmITvvuNPa5Nx
uqXilBNxWinSKQmnPcOpLgWnmoBTk36zIT9oY+oNJ4xwKjRZJgdO9s3HXmM2
SYdcEt7ywhdulrTFKHQPJWe0hwamxizr9vQTG4kiB6Ut+6T3DUrSnO7iPMQD
j6kxgd5/k6o3OhElVTIX5zEn541uwYclxbfkYYxVAdtq9gYKGNzEl89VXD3a
dJNkAdigyHDhM6GuCTHm+mmRWplJtuTO6Spl+w5JhkyaixJB255klgGgzlAC
c01Tn7g1ZU2os3bNpZ8RwJFWzp7Ig4JuFnTQsvvBgoo/1iBCC6U5prE0N5/G
WEk+WjO0PEi28DIa6RaIxpfHlt8qDkf30nRArixkUUmeqsuLQxh4nNLton3L
KQVbVu1QAxloeIFvezW3nSq1bxOXhoykQVlzDxkr3zgZUdZkVxKjND+yOSZD
tI5mmXJpZ3K5ovMfXksTzQPacBgNn+B0vTgZHJGWH4A9Cr0Mkpn/dH/nySRI
KYvpugS65hfVW2UX97HeJCSMQR0AMOY+WvZASUqyugmY/QZ82mbd7qrrbabm
dtfe+fH14evzVyrh6vHePnInMtnl8ZX95unO/g4goRjOdCQW3g1VPUPzz+N5
U9cBk1ojT7d4gPcL98XV1U+qt/29R3sfP/bF9emV7n9//zE+gaF7f35zcqge
P9vZgWEf8okdD0WW5jLP0H2KhisuEbYgFYl1ftmhc2fxmMgjdF4qc8SD8/Hh
2UO9NEeIfE8pDpb2eAs8ed1B9oKm8DNFZmWXg8rx89BLhCYjGLiGcABnkqo7
mRNpXRFfHJLStVNaYNd2Ykqkxu6Gks5Eomyo095I9Ft1eaxFaYmtilGpl3NP
L+dtH5Yt/4WrgP4SD/jgZYtxgOnN5ZZ2xQZEqJ5ywT5U+wbdnQ0HghgGbyUf
qU+0/xmarXspCkK6khjoepOHoB/pc9pRLM1FakJGsKmLI3UmLH6BYWTPIo3i
NNieZAOG9qFKTqQ8Oasli5KUIewxhHpbAkTH2zqsokV4luDwGl20TBwJ6KGL
H2Dvwb4V0w7hrYa3GLCS2AdcgGl9PJ0FmXrUqcVamjSkB7Y1bdSh+UGvV1hJ
dJH2y8Nej/U1/c4mPmnmk/H5uKqVA5AN6GXGl0FK/mXgcxYpiZxjyEL5SvQ3
lyfavb0VpVuIBrdEfyqf4tE72hL95ewUrHl+u6WW2ejx06cfP6pERTQ1oEfY
Zjf4kja5g3q0X6ARcLN4yE4Uvl0btmVXPw6xBcABj863x8+NH53xJGzorhME
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
1FPYEXInw97/A7UlKpPH+AAA

-->

</rfc>
