<?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-02" category="info" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Info. Model for Pkt 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="July" 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, ifOutErrors - 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 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., data models), including SNMP <xref target="RFC1157"/>, NETCONF <xref target="RFC6241"/> / YANG <xref target="RFC7950"/>, RESTCONF <xref target="RFC8040"/>, and IPFIX <xref target="RFC5153"/>. 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>Features 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"/> / YANG <xref target="RFC7950"/>. Feature 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?          uint48
       |     |  |     +-- crc-error?       uint48
       |     |  |     +-- invalid-mac?     uint48
       |     |  |     +-- invalid-vlan?    uint48
       |     |  |     +-- invalid-frame?   uint48
       |     |  +-- l3
       |     |  |  +-- rx
       |     |  |  |  +-- packets?          uint48
       |     |  |  |  +-- checksum-error?   uint48
       |     |  |  |  +-- mtu-exceeded?     uint48
       |     |  |  |  +-- invalid-packet?   uint48
       |     |  |  |  +-- ttl-expired?      uint48
       |     |  |  +-- no-route?        uint48
       |     |  |  +-- invalid-sid?     uint48
       |     |  |  +-- invalid-label?   uint48
       |     |  +-- hardware
       |     |     +-- packets?        uint48
       |     |     +-- parity-error?   uint48
       |     +-- policy
       |     |  +-- l2
       |     |  |  +-- frames?   uint48
       |     |  |  +-- acl?      uint48
       |     |  +-- l3
       |     |     +-- packets?      uint48
       |     |     +-- acl?          uint48
       |     |     +-- policer
       |     |     |  +-- packets?   uint48
       |     |     |  +-- bytes?     uint48
       |     |     +-- null-route?   uint48
       |     |     +-- rpf?          uint48
       |     |     +-- ddos?         uint48
       |     +-- 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?   uint48
       |     |  +-- l3
       |     |     +-- tx
       |     |        +-- packets?   uint48
       |     +-- policy
       |     |  +-- l3
       |     |     +-- acl?       uint48
       |     |     +-- policer
       |     |        +-- packets?   uint48
       |     |        +-- bytes?     uint48
       |     +-- no-buffer
       |        +-- class* [id]
       |           +-- id         string
       |           +-- packets?   uint64
       |           +-- bytes?     uint64
       +-- control-plane
          +-- ingress
             +-- traffic
             |  +-- packets?   uint48
             |  +-- bytes?     uint48
             +-- discards
                +-- packets?   uint48
                +-- bytes?     uint48
                +-- policy
                   +-- packets?   uint48

]]></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";
  }

  typedef uint48 {
    type uint64 {
      range "0..281474976710655";
    }
    description
      "48-bit unsigned integer type";
  }

  typedef uint48-or-64 {
    type union {
      type uint48;
      type uint64;
    }
    description
      "Union type representing either a 48-bit or 64-bit unsigned
       integer. 48-bit counters are used for packet and discard
       counters that increase at a lower rate, while 64-bit counters
       are used for traffic byte counters that may increase more
       rapidly.";
  }

  /*
   * 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-48 {
    description
      "Basic grouping with 48-bit packets";
    leaf packets {
      type uint48;
      description
        "Number of L3 packets";
    }
  }

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

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

  grouping basic-frames-bytes-48 {
    description
      "Basic grouping with 48-bit packets and bytes";
    uses basic-frames-48;
    leaf bytes {
      type uint48;
      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-48;
      }
      container discards {
        description
          "Control plane ingress packet discard counters";
        uses basic-packets-bytes-48;
        container policy {
          description
            "Number of control plane packets discarded due to policy";
          uses basic-packets-48;
        }
      }
    }
  }

  grouping errors-l2-rx {
    description
      "Layer 2 ingress frame errors";
    container rx {
      description
        "Layer 2 ingress frame error counters";
      leaf frames {
        type uint48;
        description
          "Number of errored L2 frames";
      }
      leaf crc-error {
        type uint48;
        description
          "Number of frames received with CRC error";
      }
      leaf invalid-mac {
        type uint48;
        description
          "Number of frames received with invalid MAC address";
      }
      leaf invalid-vlan {
        type uint48;
        description
          "Number of frames received with invalid VLAN tag";
      }
      leaf invalid-frame {
        type uint48;
        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 uint48;
        description
          "Number of errored L3 packets";
      }
      leaf checksum-error {
        type uint48;
        description
          "Number of packets received with checksum error";
      }
      leaf mtu-exceeded {
        type uint48;
        description
          "Number of packets received exceeding MTU";
      }
      leaf invalid-packet {
        type uint48;
        description
          "Number of invalid packets received";
      }
      leaf ttl-expired {
        type uint48;
        description
          "Number of packets received with expired TTL";
      }
    }
    leaf no-route {
      type uint48;
      description
        "Number of packets with no route";
    }
    leaf invalid-sid {
      type uint48;
      description
        "Number of packets with invalid SID";
    }
    leaf invalid-label {
      type uint48;
      description
        "Number of packets with invalid label";
    }
  }

  grouping errors-l3-hw {
    description
      "Hardware error counters";
    leaf packets {
      type uint48;
      description
        "Number of local errored packets";
    }
    leaf parity-error {
      type uint48;
      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 uint48;
        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 uint48;
        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 uint48;
      description
        "Number of L2 frames discarded due to policy";
    }
    leaf acl {
      type uint48;
      description
        "Number of frames discarded due to L2 ACL";
    }
  }

  grouping policy-l3-rx {
    description
      "Layer 3 policy ingress packet discard counters";
    leaf packets {
      type uint48;
      description
        "Number of L3 packets discarded due to policy";
    }
    leaf acl {
      type uint48;
      description
        "Number of packets discarded due to L3 ACL";
    }
    container policer {
      description
        "Policer ingress packet discard counters";
      uses basic-packets-bytes-48;
    }
    leaf null-route {
      type uint48;
      description
        "Number of packets discarded due to null route";
    }
    leaf rpf {
      type uint48;
      description
        "Number of packets discarded due to RPF check failure";
    }
    leaf ddos {
      type uint48;
      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 uint48;
      description
        "Number of packets discarded due to L3 egress ACL";
    }
    container policer {
      description
        "Policer egress packet discard counters";
      uses basic-packets-bytes-48;
    }
  }

  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='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='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='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='RFC5153'>
  <front>
    <title>IP Flow Information Export (IPFIX) Implementation Guidelines</title>
    <author fullname='E. Boschi' initials='E.' surname='Boschi'/>
    <author fullname='L. Mark' initials='L.' surname='Mark'/>
    <author fullname='J. Quittek' initials='J.' surname='Quittek'/>
    <author fullname='M. Stiemerling' initials='M.' surname='Stiemerling'/>
    <author fullname='P. Aitken' initials='P.' surname='Aitken'/>
    <date month='April' year='2008'/>
    <abstract>
      <t>The IP Flow Information Export (IPFIX) protocol defines how IP Flow information can be exported from routers, measurement probes, or other devices. This document provides guidelines for the implementation and use of the IPFIX protocol. Several sets of guidelines address Template management, transport-specific issues, implementation of Exporting and Collecting Processes, and IPFIX implementation on middleboxes (such as firewalls, network address translators, tunnel endpoints, packet classifiers, etc.). This memo provides information for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='5153'/>
  <seriesInfo name='DOI' value='10.17487/RFC5153'/>
</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='RFC7950'>
  <front>
    <title>The YANG 1.1 Data Modeling Language</title>
    <author fullname='M. Bjorklund' initials='M.' role='editor' surname='Bjorklund'/>
    <date month='August' year='2016'/>
    <abstract>
      <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7950'/>
  <seriesInfo name='DOI' value='10.17487/RFC7950'/>
</reference>


<reference anchor="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='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='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='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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
9QQGhAwERlz/AzG0cxglrQAA

-->

</rfc>

