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


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

]>


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

    <author initials="J." surname="Evans" fullname="John Evans">
      <organization>Amazon</organization>
      <address>
        <postal>
          <street>1 Principal Place, Worship Street</street>
          <city>London</city>
          <code>EC2A 2FA</code>
          <country>UK</country>
        </postal>
        <email>jevanamz@amazon.co.uk</email>
      </address>
    </author>
    <author initials="O." surname="Pylypenko" fullname="Oleksandr Pylypenko">
      <organization>Amazon</organization>
      <address>
        <postal>
          <street>410 Terry Ave N</street>
          <city>Seattle</city>
          <region>WA</region>
          <code>98109</code>
          <country>US</country>
        </postal>
        <email>opyl@amazon.com</email>
      </address>
    </author>
    <author initials="J." surname="Haas" fullname="Jeffrey Haas">
      <organization>Juniper Networks</organization>
      <address>
        <postal>
          <street>1133 Innovation Way</street>
          <city>Sunnyvale</city>
          <region>CA</region>
          <code>94089</code>
          <country>US</country>
        </postal>
        <email>jhaas@juniper.net</email>
      </address>
    </author>
    <author initials="A." surname="Kadosh" fullname="Aviran Kadosh">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <street>170 West Tasman Dr.</street>
          <city>San Jose</city>
          <region>CA</region>
          <code>95134</code>
          <country>US</country>
        </postal>
        <email>akadosh@cisco.com</email>
      </address>
    </author>
    <author initials="M." surname="Boucadair" fullname="Mohamed Boucadair">
      <organization>Orange</organization>
      <address>
        <postal>
          <country>France</country>
        </postal>
        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>

    <date year="2024" month="August" day="08"/>

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

    <abstract>


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



    </abstract>



  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>In automating network operations, a network operator needs to be able to detect anomalous packet loss, diagnose or root cause the loss, and then apply one of a set of possible actions to mitigate customer-impacting packet loss.  Some packet loss is normal or intended in IP/MPLS networks, however. Hence, precise classification of packet loss signals is crucial both to ensure that anomalous packet loss is easily detected and that the right action or sequence of actions are taken to mitigate the impact, as taking the wrong action can make problems worse.</t>

<t>The existing metrics for reporting packet loss, as defined in <xref target="RFC1213"/> (namely ifInDiscards, ifOutDiscards, ifInErrors, and ifOutErrors) or <xref target="RFC9343"/> (mainl in-discards and out-discards), do not provide sufficient precision to automatically identify the cause of the loss and mitigate the impact.  From a network operator's perspective, ifInDiscards can represent both intended packet loss (e.g., packets discarded due to policy) and unintended packet loss (e.g., packets dropped in error). Furthermore, these definitions are ambiguous, as vendors can and have implemented them differently.  In some implementations, ifInErrors accounts only for errored packets that are dropped, while in others, it accounts for all errored packets, whether they are dropped or not.  Many implementations support more discard metrics than these; where they do, they have been inconsistently implemented due to the lack of a standardised classification scheme and clear semantics for packet loss reporting. <xref target="RFC7270"/> provides support for reporting discards per flow in IPFIX using forwardingStatus, however, the defined drop reason codes also lack sufficient clarity (e.g., "For us" Reason Code) to support automated root cause analysis and mitigation of impact.</t>

<t>Hence, this document defines an information model for packet loss reporting, aiming to address these issues by presenting a packet loss classification scheme that can enable automated mitigation of unintended packet loss.  Consistent with <xref target="RFC3444"/>, this information model is independent of any specific implementations or protocols used to transport the data.  There are multiple ways that this information model could be implemented (i.e., protocols and associated data models), including SNMP <xref target="RFC1157"/>, NETCONF <xref target="RFC6241"/>, RESTCONF <xref target="RFC8040"/>, and IPFIX <xref target="RFC7011"/>. However, these mechanisms are out of the scope of this document.  The scope of this document is limited to reporting packet loss at Layer 3 and frames discarded at Layer 2, although the information model might be extended in future to cover segments dropped at Layer 4.</t>

<t><xref target="problem"/> describes the problem to be solved. Section 4 describes the information model and requirements with a set of examples.  Section 5 provides examples of discard signal-to-cause-to-auto-mitigation action mapping.  Section 6 presents the information model as an abstract data structure in YANG, in accordance with <xref target="RFC8791"/>.  Appendix A provides an example of where packets may be discarded in a device.  Appendix B details the authors' experience from implementing this model.</t>

<t>This document considers only the signals that may trigger automated mitigation plans and not how they are defined or executed.</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>

<t>A packet discard is considered to be any packet dropped by a device, which may be intentional (i.e. due to a configured policy, e.g. such as an Access Control List (ACL)) or unintentional (i.e. packets dropped in error).</t>

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

<t>Symbol "|" is used to denote "or".</t>

</section>
<section anchor="problem"><name>Problem Statement</name>
<t>At the highest-level, unintended packet loss is the discarding of packets that the network operator otherwise intends to deliver, i.e. which indicates an error state.  There are many possible reasons for unintended packet loss, including: erroring links may corrupt packets in transit; incorrect routing tables may result in packets being dropped because they do not match a valid route; configuration errors may result in a valid packet incorrectly matching an Access Control List (ACL) and being dropped.  Whilst the specific definition of unintended packet loss is network dependent, for any network there are a small set of potential actions that can be taken to minimise customer impact by auto-mitigating unintended packet loss:</t>

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

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

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

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

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

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

<t>The classification scheme is defined as a tree, which follows the structure component/direction/type/layer/sub-type/sub-sub-type/.../metric, where:</t>

<t>a. Component can be interface|device|control-plane|flow<br />
b. Direction can be ingress|egress<br />
c. Type can be traffic|discards, where traffic accounts for packets successfully received or transmitted, and discards accounts for packet drops<br />
d. Layer can be l2|l3</t>

<figure><artwork><![CDATA[
structure packet-discard-reporting:
    +-- interface* [name]
       +-- name             string
       +-- ingress
       |  +-- traffic
       |  |  +-- l2
       |  |  |  +-- frames?   uint64
       |  |  |  +-- bytes?    uint64
       |  |  +-- l3
       |  |  |  +-- v4
       |  |  |  |  +-- packets?     uint64
       |  |  |  |  +-- bytes?       uint64
       |  |  |  |  +-- unicast
       |  |  |  |  |  +-- packets?   uint64
       |  |  |  |  |  +-- bytes?     uint64
       |  |  |  |  +-- multicast
       |  |  |  |     +-- packets?   uint64
       |  |  |  |     +-- bytes?     uint64
       |  |  |  +-- v6
       |  |  |     +-- 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
       |     |  +-- v4
       |     |  |  +-- packets?     uint64
       |     |  |  +-- bytes?       uint64
       |     |  |  +-- unicast
       |     |  |  |  +-- packets?   uint64
       |     |  |  |  +-- bytes?     uint64
       |     |  |  +-- multicast
       |     |  |     +-- packets?   uint64
       |     |  |     +-- bytes?     uint64
       |     |  +-- v6
       |     |     +-- packets?     uint64
       |     |     +-- bytes?       uint64
       |     |     +-- unicast
       |     |     |  +-- packets?   uint64
       |     |     |  +-- bytes?     uint64
       |     |     +-- multicast
       |     |        +-- packets?   uint64
       |     |        +-- bytes?     uint64
       |     +-- errors
       |     |  +-- l2
       |     |  |  +-- rx
       |     |  |     +-- frames?          uint32
       |     |  |     +-- crc-error?       uint32
       |     |  |     +-- invalid-mac?     uint32
       |     |  |     +-- invalid-vlan?    uint32
       |     |  |     +-- invalid-frame?   uint32
       |     |  +-- l3
       |     |  |  +-- rx
       |     |  |  |  +-- packets?          uint32
       |     |  |  |  +-- checksum-error?   uint32
       |     |  |  |  +-- mtu-exceeded?     uint32
       |     |  |  |  +-- invalid-packet?   uint32
       |     |  |  |  +-- ttl-expired?      uint32
       |     |  |  +-- no-route?        uint32
       |     |  |  +-- invalid-sid?     uint32
       |     |  |  +-- invalid-label?   uint32
       |     |  +-- hardware
       |     |     +-- packets?        uint32
       |     |     +-- parity-error?   uint32
       |     +-- policy
       |     |  +-- l2
       |     |  |  +-- frames?   uint32
       |     |  |  +-- acl?      uint32
       |     |  +-- l3
       |     |     +-- packets?      uint32
       |     |     +-- acl?          uint32
       |     |     +-- policer
       |     |     |  +-- packets?   uint32
       |     |     |  +-- bytes?     uint32
       |     |     +-- null-route?   uint32
       |     |     +-- rpf?          uint32
       |     |     +-- ddos?         uint32
       |     +-- no-buffer
       |        +-- class* [id]
       |           +-- id         string
       |           +-- packets?   uint64
       |           +-- bytes?     uint64
       +-- egress
       |  +-- traffic
       |  |  +-- l2
       |  |  |  +-- frames?   uint64
       |  |  |  +-- bytes?    uint64
       |  |  +-- l3
       |  |  |  +-- v4
       |  |  |  |  +-- packets?     uint64
       |  |  |  |  +-- bytes?       uint64
       |  |  |  |  +-- unicast
       |  |  |  |  |  +-- packets?   uint64
       |  |  |  |  |  +-- bytes?     uint64
       |  |  |  |  +-- multicast
       |  |  |  |     +-- packets?   uint64
       |  |  |  |     +-- bytes?     uint64
       |  |  |  +-- v6
       |  |  |     +-- 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
       |     |  +-- v4
       |     |  |  +-- packets?     uint64
       |     |  |  +-- bytes?       uint64
       |     |  |  +-- unicast
       |     |  |  |  +-- packets?   uint64
       |     |  |  |  +-- bytes?     uint64
       |     |  |  +-- multicast
       |     |  |     +-- packets?   uint64
       |     |  |     +-- bytes?     uint64
       |     |  +-- v6
       |     |     +-- packets?     uint64
       |     |     +-- bytes?       uint64
       |     |     +-- unicast
       |     |     |  +-- packets?   uint64
       |     |     |  +-- bytes?     uint64
       |     |     +-- multicast
       |     |        +-- packets?   uint64
       |     |        +-- bytes?     uint64
       |     +-- errors
       |     |  +-- l2
       |     |  |  +-- tx
       |     |  |     +-- frames?   uint32
       |     |  +-- l3
       |     |     +-- tx
       |     |        +-- packets?   uint32
       |     +-- policy
       |     |  +-- l3
       |     |     +-- acl?       uint32
       |     |     +-- policer
       |     |        +-- packets?   uint32
       |     |        +-- bytes?     uint32
       |     +-- no-buffer
       |        +-- class* [id]
       |           +-- id         string
       |           +-- packets?   uint64
       |           +-- bytes?     uint64
       +-- control-plane
          +-- ingress
             +-- traffic
             |  +-- packets?   uint32
             |  +-- bytes?     uint32
             +-- discards
                +-- packets?   uint32
                +-- bytes?     uint32
                +-- policy
                   +-- packets?   uint32

]]></artwork></figure>

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

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

<t><list style="numbers">
  <t>All instances of frame or packet receipt, transmission, and discards <bcp14>MUST</bcp14> be reported.</t>
  <t>All instances of frame or packet receipt, transmission, and discards <bcp14>SHOULD</bcp14> be attributed to the physical or logical interface of the device where they occur.</t>
  <t>An individual frame <bcp14>MUST</bcp14> only be accounted for by either the L2 traffic class or the L2 discard classes within a single direction, i.e., ingress or egress.</t>
  <t>An individual packet <bcp14>MUST</bcp14> only be accounted for by either the L3 traffic class or the L3 discard classes within a single direction, i.e., ingress or egress.</t>
  <t>A frame accounted for at L2 <bcp14>SHOULD NOT</bcp14> be accounted for at L3 and vice versa.  An implementation <bcp14>MUST</bcp14> expose which layers a discard is counted against.</t>
  <t>The aggregate L2 and L3 traffic and discard classes <bcp14>SHOULD</bcp14> account for all underlying packets received, transmitted, and discarded across all other classes.</t>
  <t>The aggregate Quality of Service (QoS) traffic and no buffer discard classes <bcp14>MUST</bcp14> account for all underlying packets received, transmitted, and discarded across all other classes.</t>
  <t>In addition to the L2 and L3 aggregate classes, an individual discarded packet <bcp14>MUST</bcp14> only account against a single error, policy, or no_buffer discard subclass.</t>
  <t>When there are multiple reasons for discarding a packet, the ordering of discard class reporting <bcp14>MUST</bcp14> be defined.</t>
  <t>If Diffserv <xref target="RFC2475"/> is not used, no_buffer discards <bcp14>SHOULD</bcp14> be reported as class0.</t>
  <t>Traffic to the device control plane has its own class, however, traffic from the device control plane <bcp14>SHOULD</bcp14> be accounted for in the same way as other egress traffic.</t>
</list></t>

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

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

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

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

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

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

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

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

<figure title="Example Signal-Cause-Mitigation Mapping" anchor="ex-table"><artwork><![CDATA[
+-------------------------------------------+---------------------+------------+----------+-------------+-----------------------+
| Discard class                             | Cause               | Discard    | Discard  | Unintended? | Possible actions      |
|                                           |                     | rate       | duration |             |                       |
+-------------------------------------------+---------------------+------------+----------+-------------+-----------------------+
| ingress/discards/errors/l2/rx             | Upstream device     | >Baseline  | O(1min)  | Y           | Take upstream link or |
|                                           | or link errror      |            |          |             | device out-of-service |
| ingress/discards/errors/l3/rx/ttl_expired | Tracert             | <=Baseline |          | N           | no action             |
| ingress/discards/errors/l3/rx/ttl_expired | Convergence         | >Baseline  | O(1s)    | Y           | no action             |
| ingress/discards/errors/l3/rx/ttl_expired | Routing loop        | >Baseline  | O(1min)  | Y           | Roll-back change      |
| .*/policy/.*                              | Policy              |            |          | N           | no action             |
| ingress/discards/errors/l3/no_route       | Convergence         | >Baseline  | O(1s)    | Y           | no action             |
| ingress/discards/errors/l3/no_route       | Config error        | >Baseline  | O(1min)  | Y           | Roll-back change      |
| ingress/discards/errors/l3/no_route       | Invalid destination | >Baseline  | O(10min) | N           | Escalate to operator  |
| ingress/discards/errors/local             | Device errors       | >Baseline  | O(1min)  | Y           | Take device           |
|                                           |                     |            |          |             | out-of-service        |
| egress/discards/no_buffer                 | Congestion          | <=Baseline |          | N           | no action             |
| egress/discards/no_buffer                 | Congestion          | >Baseline  | O(1min)  | Y           | Bring capacity back   |
|                                           |                     |            |          |             | into service or move  |
|                                           |                     |            |          |             | traffic               |
+-------------------------------------------+---------------------+------------+----------+-------------+-----------------------+

]]></artwork></figure>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  /*
   * Groupings
   */

  grouping basic-packets-64 {
    description
      "Basic grouping with 64-bit packets";
    leaf packets {
      type uint64;
      description
        "Number of L3 packets";
    }
  }

  grouping basic-packets-bytes-64 {
    description
      "Basic grouping with 64-bit packets and bytes";
    uses basic-packets-64;
    leaf bytes {
      type uint64;
      description
        "Number of L3 bytes";
    }
  }

  grouping basic-frames-64 {
    description
      "Basic grouping with 64-bit frames";
    leaf frames {
      type uint64;
      description
        "Number of L2 frames";
    }
  }

  grouping basic-frames-bytes-64 {
    description
      "Basic grouping with 64-bit packets and bytes";
    uses basic-frames-64;
    leaf bytes {
      type uint64;
      description
        "Number of L2 bytes";
    }
  }

  grouping basic-packets-32 {
    description
      "Basic grouping with 32-bit packets";
    leaf packets {
      type uint32;
      description
        "Number of L3 packets";
    }
  }

  grouping basic-packets-bytes-32 {
    description
      "Basic grouping with 32-bit packets and bytes";
    uses basic-packets-32;
    leaf bytes {
      type uint32;
      description
        "Number of L3 bytes";
    }
  }

  grouping basic-frames-32 {
    description
      "Basic grouping with 32-bit frames";
    leaf frames {
      type uint32;
      description
        "Number of L2 frames";
    }
  }

  grouping basic-frames-bytes-32 {
    description
      "Basic grouping with 32-bit packets and bytes";
    uses basic-frames-32;
    leaf bytes {
      type uint32;
      description
        "Number of L2 bytes";
    }
  }

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

  grouping ip {
    description
      "IP traffic counters";
    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";
    container v4 {
      description
        "IPv4 traffic counters";
      uses ip;
    }
    container v6 {
      description
        "IPv6 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
      "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
        "Quality of Service (QoS) traffic counters";
      uses qos;
    }
  }

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

  grouping errors-l2-rx {
    description
      "Layer 2 ingress frame errors";
    container rx {
      description
        "Layer 2 ingress frame error counters";
      leaf frames {
        type uint32;
        description
          "Number of errored L2 frames";
      }
      leaf crc-error {
        type uint32;
        description
          "Number of frames received with CRC error";
      }
      leaf invalid-mac {
        type uint32;
        description
          "Number of frames received with invalid MAC address";
      }
      leaf invalid-vlan {
        type uint32;
        description
          "Number of frames received with invalid VLAN tag";
      }
      leaf invalid-frame {
        type uint32;
        description
          "Number of invalid frames received";
      }
    }
  }

  grouping errors-l3-rx {
    description
      "Layer 3 ingress packet error counters";
    container rx {
      description
        "Layer 3 ingress packet receive error counters";
      leaf packets {
        type uint32;
        description
          "Number of errored L3 packets";
      }
      leaf checksum-error {
        type uint32;
        description
          "Number of packets received with checksum error";
      }
      leaf mtu-exceeded {
        type uint32;
        description
          "Number of packets received exceeding MTU";
      }
      leaf invalid-packet {
        type uint32;
        description
          "Number of invalid packets received";
      }
      leaf ttl-expired {
        type uint32;
        description
          "Number of packets received with expired TTL";
      }
    }
    leaf no-route {
      type uint32;
      description
        "Number of packets with no route";
    }
    leaf invalid-sid {
      type uint32;
      description
        "Number of packets with invalid SID";
    }
    leaf invalid-label {
      type uint32;
      description
        "Number of packets with invalid label";
    }
  }

  grouping errors-l3-hw {
    description
      "Hardware error counters";
    leaf packets {
      type uint32;
      description
        "Number of local errored packets";
    }
    leaf parity-error {
      type uint32;
      description
        "Number of packets with parity error";
    }
  }

  grouping errors-rx {
    description
      "Ingress error counters";
    container l2 {
      description
        "Layer 2 received frame error counters";
      uses errors-l2-rx;
    }
    container l3 {
      description
        "Layer 3 received packet error counters";
      uses errors-l3-rx;
    }
    container hardware {
      description
        "Hardware error counters";
      uses errors-l3-hw;
    }
  }

  grouping errors-l2-tx {
    description
      "Layer 2 transmit error counters";
    container tx {
      description
        "Layer 2 transmit frame error counters";
      leaf frames {
        type uint32;
        description
          "Number of errored L2 frames during transmission";
      }
    }
  }

  grouping errors-l3-tx {
    description
      "Layer 3 transmit error counters";
    container tx {
      description
        "Layer 3 transmit packet error counters";
      leaf packets {
        type uint32;
        description
          "Number of errored L3 packets during transmission";
      }
    }
  }

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

  grouping policy-l2-rx {
    description
      "Layer 2 policy ingress packet discard counters";
    leaf frames {
      type uint32;
      description
        "Number of L2 frames discarded due to policy";
    }
    leaf acl {
      type uint32;
      description
        "Number of frames discarded due to L2 ACL";
    }
  }

  grouping policy-l3-rx {
    description
      "Layer 3 policy ingress packet discard counters";
    leaf packets {
      type uint32;
      description
        "Number of L3 packets discarded due to policy";
    }
    leaf acl {
      type uint32;
      description
        "Number of packets discarded due to L3 ACL";
    }
    container policer {
      description
        "Policer ingress packet discard counters";
      uses basic-packets-bytes-32;
    }
    leaf null-route {
      type uint32;
      description
        "Number of packets discarded due to null route";
    }
    leaf rpf {
      type uint32;
      description
        "Number of packets discarded due to RPF check failure";
    }
    leaf ddos {
      type uint32;
      description
        "Number of packets discarded due to DDoS protection";
    }
  }

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

  grouping policy-l3-tx {
    description
      "Layer 3 policy egress packet discard counters";
    leaf acl {
      type uint32;
      description
        "Number of packets discarded due to L3 egress ACL";
    }
    container policer {
      description
        "Policer egress packet discard counters";
      uses basic-packets-bytes-32;
    }
  }

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

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

  /*
   * Main Structure
   */

  sx:structure packet-discard-reporting {
    description
      "Container for packet discard reporting data.";
    list interface {
      key "name";
      description
        "List of interfaces for which packet discard reporting
         data is provided.";
      leaf name {
        type string;
        description
          "Name of the interface.";
      }
      uses interface;
    }
  }
}
<CODE ENDS>
]]></artwork></figure>

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

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

</section>
<section anchor="iana"><name>IANA Considerations</name>

<t>IANA is requested to register the following URI in the "ns" subregistry within
   the "IETF XML Registry" <xref target="RFC3688"/>:</t>

<figure><artwork><![CDATA[
   URI:  urn:ietf:params:xml:ns:ietf-packet-discard-reporting
   Registrant Contact:  The IESG.
   XML:  N/A; the requested URI is an XML namespace.
]]></artwork></figure>

<t>IANA is requested to register the following YANG module in the "YANG Module
   Names" subregistry <xref target="RFC6020"/> within the "YANG Parameters" registry:</t>

<figure><artwork><![CDATA[
   Name:  ietf-packet-discard-reporting
   Namespace:  urn:ietf:params:xml:ns:ietf-packet-discard-reporting
   Prefix:  plr
   Maintained by IANA?  N
   Reference:  RFC XXXX
]]></artwork></figure>

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

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

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

</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor='RFC8791'>
  <front>
    <title>YANG Data Structure Extensions</title>
    <author fullname='A. Bierman' initials='A.' surname='Bierman'/>
    <author fullname='M. Björklund' initials='M.' surname='Björklund'/>
    <author fullname='K. Watsen' initials='K.' surname='Watsen'/>
    <date month='June' year='2020'/>
    <abstract>
      <t>This document describes YANG mechanisms for defining abstract data structures with YANG.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8791'/>
  <seriesInfo name='DOI' value='10.17487/RFC8791'/>
</reference>

<reference anchor='RFC2119'>
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname='S. Bradner' initials='S.' surname='Bradner'/>
    <date month='March' year='1997'/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name='BCP' value='14'/>
  <seriesInfo name='RFC' value='2119'/>
  <seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>

<reference anchor='RFC8174'>
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname='B. Leiba' initials='B.' surname='Leiba'/>
    <date month='May' year='2017'/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name='BCP' value='14'/>
  <seriesInfo name='RFC' value='8174'/>
  <seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>

<reference anchor='RFC3688'>
  <front>
    <title>The IETF XML Registry</title>
    <author fullname='M. Mealling' initials='M.' surname='Mealling'/>
    <date month='January' year='2004'/>
    <abstract>
      <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
    </abstract>
  </front>
  <seriesInfo name='BCP' value='81'/>
  <seriesInfo name='RFC' value='3688'/>
  <seriesInfo name='DOI' value='10.17487/RFC3688'/>
</reference>

<reference anchor='RFC6020'>
  <front>
    <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
    <author fullname='M. Bjorklund' initials='M.' role='editor' surname='Bjorklund'/>
    <date month='October' year='2010'/>
    <abstract>
      <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='6020'/>
  <seriesInfo name='DOI' value='10.17487/RFC6020'/>
</reference>




    </references>

    <references title='Informative References'>



<reference anchor='RFC6241'>
  <front>
    <title>Network Configuration Protocol (NETCONF)</title>
    <author fullname='R. Enns' initials='R.' role='editor' surname='Enns'/>
    <author fullname='M. Bjorklund' initials='M.' role='editor' surname='Bjorklund'/>
    <author fullname='J. Schoenwaelder' initials='J.' role='editor' surname='Schoenwaelder'/>
    <author fullname='A. Bierman' initials='A.' role='editor' surname='Bierman'/>
    <date month='June' year='2011'/>
    <abstract>
      <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='6241'/>
  <seriesInfo name='DOI' value='10.17487/RFC6241'/>
</reference>


<reference anchor="RED93" >
  <front>
    <title>Random Early Detection gateways for Congestion Avoidance</title>
    <author initials="V." surname="Jacobson">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


<reference anchor='RFC2475'>
  <front>
    <title>An Architecture for Differentiated Services</title>
    <author fullname='S. Blake' initials='S.' surname='Blake'/>
    <author fullname='D. Black' initials='D.' surname='Black'/>
    <author fullname='M. Carlson' initials='M.' surname='Carlson'/>
    <author fullname='E. Davies' initials='E.' surname='Davies'/>
    <author fullname='Z. Wang' initials='Z.' surname='Wang'/>
    <author fullname='W. Weiss' initials='W.' surname='Weiss'/>
    <date month='December' year='1998'/>
    <abstract>
      <t>This document defines an architecture for implementing scalable service differentiation in the Internet. This memo provides information for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='2475'/>
  <seriesInfo name='DOI' value='10.17487/RFC2475'/>
</reference>

<reference anchor='RFC8289'>
  <front>
    <title>Controlled Delay Active Queue Management</title>
    <author fullname='K. Nichols' initials='K.' surname='Nichols'/>
    <author fullname='V. Jacobson' initials='V.' surname='Jacobson'/>
    <author fullname='A. McGregor' initials='A.' role='editor' surname='McGregor'/>
    <author fullname='J. Iyengar' initials='J.' role='editor' surname='Iyengar'/>
    <date month='January' year='2018'/>
    <abstract>
      <t>This document describes CoDel (Controlled Delay) -- a general framework that controls bufferbloat-generated excess delay in modern networking environments. CoDel consists of an estimator, a setpoint, and a control loop. It requires no configuration in normal Internet deployments.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8289'/>
  <seriesInfo name='DOI' value='10.17487/RFC8289'/>
</reference>

<reference anchor='RFC1213'>
  <front>
    <title>Management Information Base for Network Management of TCP/IP-based internets: MIB-II</title>
    <author fullname='K. McCloghrie' initials='K.' surname='McCloghrie'/>
    <author fullname='M. Rose' initials='M.' surname='Rose'/>
    <date month='March' year='1991'/>
    <abstract>
      <t>This memo defines the second version of the Management Information Base (MIB-II) for use with network management protocols in TCP/IP-based internets. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='STD' value='17'/>
  <seriesInfo name='RFC' value='1213'/>
  <seriesInfo name='DOI' value='10.17487/RFC1213'/>
</reference>

<reference anchor='RFC9343'>
  <front>
    <title>IPv6 Application of the Alternate-Marking Method</title>
    <author fullname='G. Fioccola' initials='G.' surname='Fioccola'/>
    <author fullname='T. Zhou' initials='T.' surname='Zhou'/>
    <author fullname='M. Cociglio' initials='M.' surname='Cociglio'/>
    <author fullname='F. Qin' initials='F.' surname='Qin'/>
    <author fullname='R. Pang' initials='R.' surname='Pang'/>
    <date month='December' year='2022'/>
    <abstract>
      <t>This document describes how the Alternate-Marking Method can be used as a passive performance measurement tool in an IPv6 domain. It defines an Extension Header Option to encode Alternate-Marking information in both the Hop-by-Hop Options Header and Destination Options Header.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='9343'/>
  <seriesInfo name='DOI' value='10.17487/RFC9343'/>
</reference>

<reference anchor='RFC7270'>
  <front>
    <title>Cisco-Specific Information Elements Reused in IP Flow Information Export (IPFIX)</title>
    <author fullname='A. Yourtchenko' initials='A.' surname='Yourtchenko'/>
    <author fullname='P. Aitken' initials='P.' surname='Aitken'/>
    <author fullname='B. Claise' initials='B.' surname='Claise'/>
    <date month='June' year='2014'/>
    <abstract>
      <t>This document describes some additional IP Flow Information Export (IPFIX) Information Elements in the range of 1-127, which is the range compatible with field types used by NetFlow version 9 in RFC 3954, as specified in the IPFIX Information Model in RFC 7012.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7270'/>
  <seriesInfo name='DOI' value='10.17487/RFC7270'/>
</reference>

<reference anchor='RFC3444'>
  <front>
    <title>On the Difference between Information Models and Data Models</title>
    <author fullname='A. Pras' initials='A.' surname='Pras'/>
    <author fullname='J. Schoenwaelder' initials='J.' surname='Schoenwaelder'/>
    <date month='January' year='2003'/>
    <abstract>
      <t>There has been ongoing confusion about the differences between Information Models and Data Models for defining managed objects in network management. This document explains the differences between these terms by analyzing how existing network management model specifications (from the IETF and other bodies such as the International Telecommunication Union (ITU) or the Distributed Management Task Force (DMTF)) fit into the universe of Information Models and Data Models. This memo documents the main results of the 8th workshop of the Network Management Research Group (NMRG) of the Internet Research Task Force (IRTF) hosted by the University of Texas at Austin. This memo provides information for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='3444'/>
  <seriesInfo name='DOI' value='10.17487/RFC3444'/>
</reference>

<reference anchor='RFC1157'>
  <front>
    <title>Simple Network Management Protocol (SNMP)</title>
    <author fullname='J.D. Case' initials='J.D.' surname='Case'/>
    <author fullname='M. Fedor' initials='M.' surname='Fedor'/>
    <author fullname='M.L. Schoffstall' initials='M.L.' surname='Schoffstall'/>
    <author fullname='J. Davin' initials='J.' surname='Davin'/>
    <date month='May' year='1990'/>
    <abstract>
      <t>This RFC is a re-release of RFC 1098, with a changed "Status of this Memo" section plus a few minor typographical corrections. This memo defines a simple protocol by which management information for a network element may be inspected or altered by logically remote users. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='1157'/>
  <seriesInfo name='DOI' value='10.17487/RFC1157'/>
</reference>

<reference anchor='RFC8040'>
  <front>
    <title>RESTCONF Protocol</title>
    <author fullname='A. Bierman' initials='A.' surname='Bierman'/>
    <author fullname='M. Bjorklund' initials='M.' surname='Bjorklund'/>
    <author fullname='K. Watsen' initials='K.' surname='Watsen'/>
    <date month='January' year='2017'/>
    <abstract>
      <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8040'/>
  <seriesInfo name='DOI' value='10.17487/RFC8040'/>
</reference>

<reference anchor='RFC7011'>
  <front>
    <title>Specification of the IP Flow Information Export (IPFIX) Protocol for the Exchange of Flow Information</title>
    <author fullname='B. Claise' initials='B.' role='editor' surname='Claise'/>
    <author fullname='B. Trammell' initials='B.' role='editor' surname='Trammell'/>
    <author fullname='P. Aitken' initials='P.' surname='Aitken'/>
    <date month='September' year='2013'/>
    <abstract>
      <t>This document specifies the IP Flow Information Export (IPFIX) protocol, which serves as a means for transmitting Traffic Flow information over the network. In order to transmit Traffic Flow information from an Exporting Process to a Collecting Process, a common representation of flow data and a standard means of communicating them are required. This document describes how the IPFIX Data and Template Records are carried over a number of transport protocols from an IPFIX Exporting Process to an IPFIX Collecting Process. This document obsoletes RFC 5101.</t>
    </abstract>
  </front>
  <seriesInfo name='STD' value='77'/>
  <seriesInfo name='RFC' value='7011'/>
  <seriesInfo name='DOI' value='10.17487/RFC7011'/>
</reference>

<reference anchor='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='I-D.ietf-netmod-rfc8407bis'>
   <front>
      <title>Guidelines for Authors and Reviewers of Documents Containing YANG Data Models</title>
      <author fullname='Andy Bierman' initials='A.' surname='Bierman'>
         <organization>YumaWorks</organization>
      </author>
      <author fullname='Mohamed Boucadair' initials='M.' surname='Boucadair'>
         <organization>Orange</organization>
      </author>
      <author fullname='Qin Wu' initials='Q.' surname='Wu'>
         <organization>Huawei</organization>
      </author>
      <date day='5' month='July' year='2024'/>
      <abstract>
	 <t>   This memo provides guidelines for authors and reviewers of
   specifications containing YANG modules, including IANA-maintained
   modules.  Recommendations and procedures are defined, which are
   intended to increase interoperability and usability of Network
   Configuration Protocol (NETCONF) and RESTCONF protocol
   implementations that utilize YANG modules.  This document obsoletes
   RFC 8407.

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

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




    </references>


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

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

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

  Intended                               policy/acl                  policy/acl
  Discards:                              policy/policer              policy/policer
                                         policy/urpf
                                         policy/null_route

Unintended                 error/rx/l2   error/l3/rx   no_buffer     error/l3/tx
  Discards:                              error/local
                                         error/l3/no_route
                                         error/l3/rx/ttl_expired

]]></artwork></figure>

<section anchor="class_descriptions"><name>Discard Class Descriptions</name>

<dl>
  <dt>discards/policy/:</dt>
  <dd>
    <t>These are intended discards, meaning packets dropped by a device due to a configured policy. There are multiple sub-classes.</t>
  </dd>
  <dt>discards/error/l2/rx/:</dt>
  <dd>
    <t>Frames discarded due to errors in the received L2 frame. There are multiple sub-classes, such as those resulting from failing CRC, invalid header, invalid MAC address, or invalid VLAN.</t>
  </dd>
  <dt>discards/error/l3/rx/:</dt>
  <dd>
    <t>These are discards which occur due to errors in the received packet, indicating an upstream problem rather than an issue with the device dropping the errored packets. There are multiple sub-classes, including header checksum errors, MTU exceeded, and invalid packet, i.e. due to incorrect version, incorrect header length, or invalid options.</t>
  </dd>
  <dt>discards/error/l3/rx/ttl_expired:</dt>
  <dd>
    <t>There can be multiple causes for TTL-expired (or Hop limit exceeded) discards: i) trace-route; ii) TTL (Hop limit) set too low by the end-system; iii) routing loops.</t>
  </dd>
  <dt>discards/error/l3/no_route/:</dt>
  <dd>
    <t>Discards occur due to a packet not matching any route.</t>
  </dd>
  <dt>discards/error/local/:</dt>
  <dd>
    <t>A device may discard packets within its switching pipeline due to internal errors, such as parity errors. Any errored discards not explicitly assigned to the above classes are also accounted for here.</t>
  </dd>
  <dt>discards/no_buffer/:</dt>
  <dd>
    <t>Discards occur due to no available buffer to enqueue the packet. These can be tail-drop discards or due to an active queue management algorithm, such as RED <xref target="RED93"/> or CODEL <xref target="RFC8289"/>.</t>
  </dd>
</dl>

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

<t><list style="numbers">
  <t>The number and granularity of classes described in Section 3 represent a compromise.  It aims to offer sufficient detail to enable appropriate automated actions while avoiding excessive detail, which may hinder quick problem identification.  Additionally, it helps constrain the quantity of data produced per interface to constrain data volume and device CPU impacts.  Although further granularity is possible, the scheme described has generally proven to be sufficient for the task of auto-mitigating unintended packet loss.</t>
  <t>There are many possible ways to define the discard classification tree.  For example, we could have used a multi-rooted tree, rooted in each protocol.  Instead, we opted to define a tree where protocol discards and causal discards are accounted for orthogonally.  This decision reduces the number of combinations of classes and has proven sufficient for determining mitigation actions.</t>
  <t>NoBuffer discards can be realized differently with different memory architectures. Whether a NoBuffer discard is attributed to ingress or egress can differ accordingly.  For successful auto-mitigation, discards due to egress interface congestion should be reported on egress, while discards due to device-level congestion (e.g. due to exceeding the device forwarding rate) should be reported on ingress.</t>
  <t>Platforms often account for the number of packets discarded where the TTL has expired (or Hop Limit exceeded), and the device CPU has returned an ICMP Time Exceeded message.  There is typically a policer applied to limit the number of packets sent to the device CPU, however, which implicitly limits the rate of TTL discards that are processed.  One method to account for all packet discards due to TTL expired, even those that are dropped by a policer when being forwarded to the CPU, is to use accounting of all ingress packets received with TTL=1.</t>
  <t>Where no route discards are implemented with a default null route, separate discard accounting is required for any explicit null routes configured, in order to differentiate between interface/ingress/discards/policy/null_route/packets and interface/ingress/discards/errors/no_route/packets.</t>
  <t>It is useful to account separately for transit packets discarded by ACLs or policers, and packets discarded by ACLs or policers which limit the number of packets to the device control plane.</t>
  <t>It is not possible to identify a configuration error - e.g., when intended discards are unintended - with device packet loss metrics alone.  For example, additional context is needed to determine if ACL discards are intended or due to a misconfigured ACL, i.e., with configuration validation before deployment or by detecting a significant change in ACL discards after a configuration change compared to before.</t>
  <t>Where traffic byte counters need to be 64-bit, packet and discard counters that increase at a lower rate may be encoded in fewer bits, e.g., 48-bit.</t>
  <t>Aggregate counters need to be able to deal with the possibility of discontinuities in the underlying counters.</t>
  <t>In cases where the reporting device is the source or destination of a tunnel, the ingress protocol for a packet may differ from the egress protocol; if IPv4 is tunneled over IPv6 for example.  Some implementations may attribute egress discards to the ingress protocol.</t>
  <t>While the classification tree is seven layers deep, a minimal implementation may only implement the top six layers.</t>
</list></t>

</section>


  </back>

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

-->

</rfc>

