<?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-evans-discardclass-00" category="info" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Exp. Implementing Packet Discard Class.">Experience from implementing a new packet discard classification scheme</title>

    <author initials="J." surname="Evans" fullname="John Evans">
      <organization>Amazon</organization>
      <address>
        <email>jevanamz@amazon.co.uk</email>
      </address>
    </author>
    <author initials="O." surname="Pylypenko" fullname="Oleksandr Pylypenko">
      <organization>Amazon</organization>
      <address>
        <email>opyl@amazon.com</email>
      </address>
    </author>

    <date year="2023" month="May" day="22"/>

    <area>Transport Area</area>
    <workgroup>Transport Area Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>Router reported packet loss is the primary signal of when a network is not doing its job.  Some packet loss is normal or intended in TCP/IP networks, however.  To minimise network packet loss through automated network operations we need clear and accurate signals of all packets which are dropped and why.  This document describes our experience from implementing a packet loss classification scheme to provide these signals and enable automated network mitigation of unintended packet loss.</t>



    </abstract>



  </front>

  <middle>


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

<t>The job of a network is to transport packets.  Understanding both where and why packet loss occurs is essential to the effective operation of networks.   Router-reported packet loss is the most direct signal for network operations to identify customer impact from unintended packet loss. Accurate accounting of packet loss is not enough, however, as some level of packet loss is normal in TCP/IP networks.  In automating network operations, there are only a relatively small number of automated actions that can be taken to mitigate impacting packet loss. Precise signal is important to ensure the right action is taken, however, as taking the wrong action can make problems worse.</t>

<t>The existing definitions of ifindiscards, ifoutdiscards, ifinerrors, ifouterrors <xref target="RFC1213"/>, do not provide the precision needed to be able to identify the cause of packet loss sufficient to mitigate the impact. From a network operators' perspective, ifindiscards can represent both intended packet loss (i.e. packets discarded due to policy) and unintended packet loss. Further, these definitions are ambiguous, in that vendors can and have implemented them differently with different outcomes.  In some implementations, ifinerrors accounts only for errored packets which are dropped, whilst in others it accounts for all errored packets whether they are dropped or not.  Many vendors support more discard metrics than these; where they do they are inconsistently implemented due to an absence of clearly defined classification and semantics for packet loss reporting.</t>

<t>This document describes our experience from implementing a packet loss classification scheme across multiple hardware platforms, which aimed to address these issues and enable automated mitigation of unintended packet loss.  Section 2 describes the problem.  Section 3 defines the classification scheme and the accounting requirements with examples.  Section 4 gives examples of discard signal to cause to auto-mitigation action mapping.  Section 5 details our experience from implementing this scheme.</t>

</section>
<section anchor="prob"><name>Problem statement</name>

<t>Working backwards from auto-mitigation of unintended packet loss, there are only a relative small number of potential auto-mitigation actions, e.g.:</t>

<t><list style="numbers">
  <t>Take device, link or set of devices and/or links out of service</t>
  <t>Put device, link or set of devices and/or links back into service</t>
  <t>Move traffic</t>
  <t>Roll-back a change</t>
  <t>Escalate to network operators</t>
</list></t>

<t>Precise signal of impact is important 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.</t>

<t>To be able to detect whether router reported packet loss is a problem and 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>

<t><list style="numbers">
  <t>the cause of the loss</t>
  <t>the rate and magnitude of the loss</t>
  <t>the duration of the loss</t>
  <t>the location of the loss</t>
</list></t>

<t>Features 2, 3 and 4 are already addressed with device level passive monitoring statistics, e.g. obtained with SNMP <xref target="RFC1157"/> or NETCONF <xref target="RFC6241"/>.  Feature 1 is dependent on the classification scheme used for packet loss reporting.  We define a new scheme to address this problem in the next section.</t>

</section>
<section anchor="class"><name>Classification Scheme</name>

<t>We define the classification scheme as a tree.  At the top level we differentiate the direction: ingress or egress.  At the second level we differentiate between traffic and discards.  At the third level we differentiate between intended discards and unintended discards by discard class.</t>

<figure><artwork><![CDATA[
.
|-- interface/
|   |-- ingress/
|   |   |-- traffic_rx/
|   |   |   |-- v4/
|   |   |   |   |-- packets
|   |   |   |   `-- bytes
|   |   |   |-- v6/
|   |   |   |   |-- packets
|   |   |   |   `-- bytes
|   |   |   |-- l2/
|   |   |   |   |-- packets
|   |   |   |   `-- bytes
|   |   |   `-- qos/
|   |   |       |-- class_0/
|   |   |       |   |-- packets
|   |   |       |   `-- bytes
|   |   |       |-- ...
|   |   |       `-- class_n/
|   |   |           |-- packets
|   |   |           `-- bytes
|   |   `-- discards/
|   |       |-- v4/
|   |       |   |-- packets
|   |       |   `-- bytes
|   |       |-- v6/
|   |       |   |-- packets
|   |       |   `-- bytes
|   |       |-- l2/
|   |       |   |-- packets
|   |       |   `-- bytes
|   |       |-- policy/
|   |       |   |-- acl/
|   |       |   |   `-- packets
|   |       |   |-- policer/
|   |       |   |   |-- packets
|   |       |   |   `-- bytes
|   |       |   `-- null_route/
|   |       |       `-- packets
|   |       |-- errors/
|   |       |   |-- rx/
|   |       |   |   |-- l2/
|   |       |   |   |   |-- frames
|   |       |   |   |   |-- fec_error/
|   |       |   |   |   |   `-- frames
|   |       |   |   |   `-- invalid_frame/
|   |       |   |   |       `-- frames
|   |       |   |   `-- l3/
|   |       |   |       |-- packets
|   |       |   |       |-- checksum_error/
|   |       |   |       |   `-- packets
|   |       |   |       `-- invalid_packet/
|   |       |   |           `-- packets
|   |       |   |-- local/
|   |       |   |   |-- packets
|   |       |   |   `-- parity_error/
|   |       |   |       `-- packets
|   |       |   `-- no_route/
|   |       |       `-- packets
|   |       |-- ttl_expired/
|   |       |   `-- packets
|   |       `-- no_buffer/
|   |           |-- class_0/
|   |           |   |-- packets
|   |           |   `-- bytes
|   |           |-- ...
|   |           `-- class_n/
|   |               |-- packets
|   |               `-- bytes
|   `-- egress/
|       |-- traffic_tx/
|       |   |-- v4/
|       |   |   |-- packets
|       |   |   `-- bytes
|       |   |-- v6/
|       |   |   |-- packets
|       |   |   `-- bytes
|       |   |-- l2/
|       |   |   |-- packets
|       |   |   `-- bytes
|       |   `-- qos/
|       |       |-- class_0/
|       |       |   |-- packets
|       |       |   `-- bytes
|       |       |-- ...
|       |       `-- class_n/
|       |           |-- packets
|       |           `-- bytes
|       `-- discards/
|           |-- v4/
|           |   |-- packets
|           |   `-- bytes
|           |-- v6/
|           |   |-- packets
|           |   `-- bytes
|           |-- l2/
|           |   |-- packets
|           |   `-- bytes
|           |-- policy/
|           |   |-- acl/
|           |   |   `-- packets
|           |   `-- policer/
|           |       `-- packets
|           |-- errors/
|           |   `-- tx/
|           |       |-- l2/
|           |       |   `-- frames
|           |       `-- l3/
|           |           `-- packets
|           `-- no_buffer/
|               |-- class_0/
|               |   |-- packets
|               |   `-- bytes
|               |-- ...
|               `-- class_n/
|                   |-- packets
|                   `-- bytes
`-- to_cpu/
    |-- packets
    |-- bytes
    `-- policy/
        |-- acl/
        |   `-- packets
        `-- policer/
            `-- packets

]]></artwork></figure>

<t>Notes:</t>

<t><list style="numbers">
  <t>The tree follows the structure &lt;component&gt;&lt;direction&gt;&lt;type&gt;&lt;sub-type&gt;&lt;sub-sub-type&gt;&lt;metric&gt;, where:<br />
a. component can be interface|device|tunnel|to_cpu<br />
b. direction can be ingress|egress<br />
c. type can be traffic|discards</t>
  <t>If Diffserv <xref target="RFC2475"/> quality of service (QOS) is not configured, class0 is considered the default for no_buffer discards</t>
  <t>from_cpu traffic is assumed to be accounted for as transit traffic</t>
</list></t>

<t>See Appendix A for an example of where packets may be dropped in a device.</t>

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

<t>discards/policy/<br />
     These are intended discards, i.e. packets dropped due to a configured policy. There are multiple sub-classes.</t>

<t>discards/policy/acl/<br />
     Discards due to packet matching an access control list (ACL)</t>

<t>discards/policy/policer/<br />
     Discards due to packet matching a configured policer</t>

<t>discards/policy/null_route/<br />
     Discards due to a packet matching a route with discard action</t>

<t>discards/no_route/<br />
     Discards due to a packet not matching any route</t>

<t>discards/no_buffer/<br />
     Discards due to no available buffer to enqueue the packet. These can be tail-drop discards or due to an active queue management algorithm, e.g. RED <xref target="RED93"/>, CODEL <xref target="RFC8289"/></t>

<t>discards/ttl_expired<br />
     There can also be multiple causes for TTL-exceed drops: i) trace-route; ii) TTL set too low by the end system; iii) routing loops</t>

<t>discards/error/rx/l2/<br />
     Frames dropped because they are invalid at L2, e.g. due to bad CRC or an invalid MAC address</t>

<t>discards/error/rx/l3/<br />
    These are drops due to errors in the received packet, i.e. which indicate an upstream problem, rather than a problem with the device that is dropping the errored packets. There are multiple potential errors that can cause a packet to be dropped on receipt: i) IP checksum errors; ii) malformed frame/packets</t>

<t>discards/error/local/<br />
A device may drop packets within its switching pipeline due to internal errors, e.g. parity errors. Any discards not assigned to the above classes are accounted here.</t>

</section>
<section anchor="accounting_requirements"><name>Discard Accounting Requirements</name>
<t>These requirements apply to the packets forwarded by the device, not the packets destined to the device:</t>

<t><list style="numbers">
  <t>All packet receipt, transmission and drops <bcp14>MUST</bcp14> be reported</t>
  <t>All packet receipt, transmission and drops <bcp14>SHOULD</bcp14> be attributed to the corresponding physical or logical interface where they occur.</t>
  <t>An individual packet <bcp14>MUST NOT</bcp14> account against both the traffic and discard classes on a single direction, i.e. ingress or egress</t>
  <t>The aggregate v4, v6, and L2 traffic and discard classes <bcp14>MUST</bcp14> account for all underlying packets received, transmitted and dropped across all causal classes</t>
  <t>The aggregate QOS traffic and discard (no buffer) classes <bcp14>MUST</bcp14> account for all underlying packets received, transmitted and dropped across v4, v6 and L2</t>
  <t>In addition to these aggregate classes, an individual dropped packet <bcp14>SHOULD</bcp14> only account against a single discard class</t>
  <t>If there may be two drop causes for a packet, an individual dropped packet <bcp14>SHOULD</bcp14> account against the first discard class in order</t>
</list></t>

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

<t>Assuming all the requirements are met, a good IPv4 packet received would increment:<br />
- interface/ingress/traffic/v4/rx/packets<br />
- interface/ingress/traffic/v4/rx/bytes<br />
- interface/ingress/traffic/diffserv/class_0/rx/packets<br />
- interface/ingress/traffic/diffserv/class_0/rx/bytes</t>

<t>A received IPv6 packet dropped due to ttl-expired would increment:<br />
- interface/ingress/discards/v6/packets<br />
- interface/ingress/discards/ttl_expired/packets</t>

<t>An IPv4 packet dropped on egress due to no buffers would increment:<br />
- interface/egress/discards/no_buffer/class_0/packets<br />
- interface/egress/discards/no_buffer/class_0/bytes</t>

</section>
</section>
<section anchor="mapping"><name>Signal to Cause to Mitigation Mapping</name>

<t>Example discard signal to cause to mitigation mappings are shown in the table below:</t>

<figure><artwork><![CDATA[
+------------------+---------+-------------------+-----------+--------+-----------+----------------------+
|Discard class     |Direction|Cause              |Rate       |Duration|Unintended?|Possible actions      |
+------------------+---------+-------------------+-----------+--------+-----------+----------------------+
|ErrorRxL2Discards |Ingress  |Upstream device    |>0(Anomaly)|O(1min) |Y          |Take upstream link or |
|                  |         |or link errror     |           |        |           |device out-of-service |
|TTLDiscards       |Ingress  |Tracert            |<=Baseline |        |           |no action             |
|TTLDiscards       |Ingress  |Convergence        |>Baseline  |O(1s)   |Y          |no action             |
|TTLDiscards       |Ingress  |Routing loop       |>Baseline  |O(1min) |Y          |Roll-back             |
|AclDiscards       |Ingress  |ACL                |           |        |N          |no action             |
|NullRouteDiscards |Ingress  |Null route         |           |        |N          |no action             |
|NoRouteDiscards   |Ingress  |Convergence        |>0(Anomaly)|O(1s)   |Y          |no action             |
|NoRouteDiscards   |Ingress  |Config error       |>0(Anomaly)|O(1min) |Y          |Roll-back             |
|NoRouteDiscards   |Ingress  |Invalid destination|>0(Anomaly)|O(10min)|N          |Escalate              |
|ErrorLocalDiscards|Ingress  |Device errors      |>0(Anomaly)|O(1min) |Y          |Take device           |
|                  |         |                   |           |        |           |out-of-service        |
|NoBufferDiscards  |Egress   |Congestion         |<=Baseline |        |N          |no action             |
|NoBufferDiscards  |Egress   |Congestion         |>Baseline  |O(1min) |Y          |Bring capacity back   |
|                  |         |                   |           |        |           |into service or move  |
|                  |         |                   |           |        |           |traffic               |
+------------------+---------+-------------------+-----------+--------+-----------+----------------------+

]]></artwork></figure>

</section>
<section anchor="experience"><name>Implementation Experience</name>
<t><list style="numbers">
  <t>The number of classes is a compromise between: providing sufficient detail to be able to take the appropriate actions whilst: a) not providing too much detail which can require deeper understanding rather than helping to surface the problem quickly; b) constraining the quantity of data produced where these metrics are produced per interface.</t>
  <t>There are multiple ways that we could have defined the discard classification tree, e.g. we could have used a multi-rooted tree, rooted in each protocol.  We opted instead to define a tree where protocol discards and cause discards are accounted orthogonally, as this reduces the number of classes and we found it sufficient to determine mitigation actions.</t>
  <t>NoBuffer discards can be realised differently with different memory architectures.  Hence, whether a NoBuffer discard is attributed to ingress or egress can differ accordingly.  A packet dropped due to NoBuffer discard should never be accounted for both on ingress and on egress.</t>
  <t>Most platforms account for the number of packets where the TTL has expired, and the CPU has returned an ICMP Time Exceeded message. In practise, however, there is often a policer applied to traffic on the to_CPU path, which limits the number of packets to the CPU.  Implicitly, this limits the rate of TTL discards processed by the CPU and hence it limits the number reported.  One method to account for all TTL discards, even those that are dropped by a policer when being punted to the CPU, is to use accounting of all ingress packets received with TTL=1, i.e. before TTL processing.</t>
  <t>Where a no_route discard is implemented with a default null route, separate accounting is needed 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 dropped by transit ACLs/policers, and to_cpu packets dropped by ACLs/policers which limit the number of packets to the CPU</t>
  <t>It is not possible to identify a configuration error - i.e. when intended discards are unintended - with device packet loss metrics alone.  For example, to determine if ACL drops are intended or due to a misconfigured ACL some other method is needed, e.g. with config validation before deployment or in detecting a significant change in ACL drops before/after a change.</t>
</list></t>

</section>
<section anchor="security"><name>Security Considerations</name>
<t>There are no new security considerations introduced by this document.</t>

</section>
<section anchor="iana"><name>IANA Considerations</name>
<t>There are no new IANA considerations introduced by this document.</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>

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

</section>


  </middle>

  <back>


    <references title='Normative References'>





<reference anchor='RFC2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author fullname='S. Bradner' initials='S.' surname='Bradner'><organization/></author>
<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'><organization/></author>
<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>




    </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'><organization/></author>
<author fullname='M. Rose' initials='M.' surname='Rose'><organization/></author>
<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'><organization/></author>
<author fullname='M. Fedor' initials='M.' surname='Fedor'><organization/></author>
<author fullname='M.L. Schoffstall' initials='M.L.' surname='Schoffstall'><organization/></author>
<author fullname='J. Davin' initials='J.' surname='Davin'><organization/></author>
<date month='May' year='1990'/>
<abstract><t>This RFC is a re-release of RFC 1098, with a changed &quot;Status of this Memo&quot; 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='RFC6241'>
<front>
<title>Network Configuration Protocol (NETCONF)</title>
<author fullname='R. Enns' initials='R.' role='editor' surname='Enns'><organization/></author>
<author fullname='M. Bjorklund' initials='M.' role='editor' surname='Bjorklund'><organization/></author>
<author fullname='J. Schoenwaelder' initials='J.' role='editor' surname='Schoenwaelder'><organization/></author>
<author fullname='A. Bierman' initials='A.' role='editor' surname='Bierman'><organization/></author>
<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'><organization/></author>
<author fullname='D. Black' initials='D.' surname='Black'><organization/></author>
<author fullname='M. Carlson' initials='M.' surname='Carlson'><organization/></author>
<author fullname='E. Davies' initials='E.' surname='Davies'><organization/></author>
<author fullname='Z. Wang' initials='Z.' surname='Wang'><organization/></author>
<author fullname='W. Weiss' initials='W.' surname='Weiss'><organization/></author>
<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'><organization/></author>
<author fullname='V. Jacobson' initials='V.' surname='Jacobson'><organization/></author>
<author fullname='A. McGregor' initials='A.' role='editor' surname='McGregor'><organization/></author>
<author fullname='J. Iyengar' initials='J.' role='editor' surname='Iyengar'><organization/></author>
<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>




    </references>


<section anchor="where-do-packets-get-dropped"><name>Where do packets get dropped?</name>
<t>The diagram below is an example of where and why packets may be dropped in a typical single ASIC, shared buffered type device.</t>

<figure><artwork><![CDATA[
                                           +----------+
                                           |          |
                                           |  CPU     |
                                           |          |
                                           +--+---^---+
                                     from_cpu |   | to_cpu
                                              |   |
               +------------------------------v---+-------------------------------+
               |                                                                  |

 +----------+  +----------+  +----------+  +----------+  +----------+  +----------+  +----------+
 |          |  |          |  |          |  |          |  |          |  |          |  |          |
->  Phy     +-->  Mac     +--> Ingress  +--> Buffers  +--> Egresss  +-->  Mac     +-->  Phy     |>
 |          |  |          |  |  Pipeline|  |          |  |  Pipeline|  |          |  |          |
 +----------+  +----------+  +----------+  +----------+  +----------+  +----------+  +----------+

                error/rx/l2   error/rx/l3   no_buffer     error/tx/l3
                              error/local
                              no_route
                              ttl

                              policy/acl                  policy/acl
                              policy/policer              policy/policer
                              null_route

]]></artwork></figure>

</section>


  </back>

<!-- ##markdown-source:
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
tGu0ZRQ11owlq6acqHS6xJG4qkwVnqvI4zIBnI9SDKQwODBd2l4fuHWDi3oM
5oqN1JMvt0AmjqFN8GJClVtRRCUyhidKf7FmISPW0+6cLVRz3obDOCPeOXLv
KD3iB9+QL8zZdOMhVreadY9n3qRT3w9ZQBc3cto8LspODTbV0YD8gusTHNtq
ho9f2cKGRlEEwRSdY/JAgPBsVnztgIunxYmF1hEo5Zv9llSi/bmlnG+chTwL
byN+1skmmwxLPL3ZR2NnD/YhY+mmt2VkZC4dT+2l98E4hmZajGA33DZh7y9c
xXvbiwbnZmydmwdSwxmqmxdb1jnkQnlTAlBQ/rF45tRc3hpnkaWv3LZG1UHc
OKKWRMMr3j7P0TV46wpqDm1BzVlTQHLGRTTAs6acZk1CuJ8gNuy+qXDHK1Qx
0JnRy6W+zax3VbFPrcCZPGhf/7/uG9avB34N9Xq/Bxs784K7o5ZUUxjjyBqM
OyZcO8JyiTrN/D4ylQx371zm+E93F6AkYyrSMiUbPPZfuqtjdJguP5zuufvM
3Ykxe+LunXVXjcOGq3u583iaafD8Vk/uzh/vgr56Iu5+8bZN1UXO0bXFQXdD
Uaam6c5UCqEDBwvq9Hq/W41N1c1Yz8c2lgGo4Ari9mPGNru6wgtLUbUW8scf
XsmS3cxhVK4YqL2BLagOdXajigVVmNnelw6TQAKWT7Dxl9+N6tK7Ta1B1T+r
puKqg2oaJutRTQ9PRedv+KzePGRXb+okoXr2IQ7ETnPX/xyodBvR9rNqM/sn
nNU2VPN4wZeVNag+4aw2ojox912+HbAO6qDaQVwtArqSuy4q0haneJGz2DxU
RyyN5qL5wF15tYhtVKL3dzfwa6h3nbboqAmfgK/INDYUvDs2m6KzsqV7bsqg
tnggB34iqq0i/IoK1UIJbgBegA2DfBEC+vWbqNNTvEJ/GVT2ztKZ9680jS1H
IzhpVdn7DzLRl7cfG1wjm6JoanbtvYsKOjFbUGh67WVKzw7McwuqQ2zeSnD9
cue1BVZ4clgjh0l5EfOrHPMIjOr5D4R84j3ioCCSBgesDpcWJser+AEFXTyg
Q8HW+BLoXjb5IaulSjgeBYxR883dKxYXACW8Tlbfi9kTyh/AscaZjV/9WmO9
PechIllR9CuqQ/Tb7eW/VO5RAJXB2wG4KOfrTjBEMRD7ogeJFO+6xdgDutn0
3sK+AeBqw8HnsphHMoGl9lyqyZSMY1xoTdENGmw+wGVVEqgIS610qBMu09Q5
95WVkhHX+5q6TcpYmRyGmdIuNWRXuWlqRap0US31QoNXnaz45RAWfMKlpA5N
WX6f3eg1GmbJ4FTxaUf7HU5TTNyvIacYjNVgzZJMIBvcvSQuKdux9vlKqlJd
YMQ2XMZY8IylukChH1F2Rq76WfaQkIy04km92AwtgzERgQrk1QSfLU7X3BR7
SEzFdIbvsPrpKQon4ZMtgxnp6C52EwwNneGTO/dUoxVKaR+F92jGPArDmPlS
4nsHulOO3MOJw4t31FEoIFZGcRZxcnh2Ia7iVIEaCvnxVQprkAtFIZYcH7jG
WMLt3pRx6CPGmu2KXrCadAyFHGMToTMq19QkV/o94s5B2O2jkyROMTQ7vBcT
44M5+DYJtCXwVIVcSSzpTaXSb5iIW3Y8BLwfcl22iXIibnohRToW2LSP3EYo
Ad95RopiqflNTCeG5WMCqb7ByuClLk1Y3X+sNFt5tKHHvjNFoS9mg2aPI/MO
lGLordePiNCySDdixuIAy/lh14QYZ2qOL6BwhYYE9Mzo+UT8zArNVXP5ouA/
dyKQ0qVjM+cwj8BU57L7PhNTvMwynEpdIcvRWXlTy1YK2AawSD2sLZJeEyjp
Z/ksUfB0N0w05R8uh2ezHBRHpGQI0H5eJ/6B2w2bt242m9zNtyKLmS64ypQ2
sVkaqeN0/MCk1mBfJraKBEUgK5tfz+29338n2WRLWefy5WBsM0nDpejAIV4p
+rj1qMF/NeCMKP7bCL3nLL7Wj+e4TRPMbyWxvawk2IbSy+3iBHqKSO8FrSA6
TrOGFNfGswTdSXifRgIilSd6RZlNeiNvXsRwshcDR2ScsZiCHgbhiGadDOOp
nFdkPXjIhKoHwpryQoemeEHabH9petZ6bEHjUWSan1dYYGEbWGwelFvl5T0Q
xDWcTN9M+/hjmclB3H28BODTcF7RaepEL1aAq2q+Wij51fC1WuGjJGCnR5gB
eDTi/2NKBX9fHv/l3cnl8RH+fvvj9PTU/QjMCI6HN7+amYfnZ2fHb454MqZo
Wk3Bo7PpL49Y6B6dX1ydnL+Znj7ioJ//yBJJwe4uqYscTCHawTKwDxTJ63p1
ePF//7u7Lz5+/DfzT2Dc35uPb3e/2YcPFKKRMdvomtAnZpgCsIL47yNgtQjl
VPK4kknJr9QpEGkygv/xV6TM3w7EH2dhvrv/0jTghluNlmatRqJZv6U3mYk4
0DSAxlGz1d6hdHu9019a35buXiP8TcPrTN8mKlo0eU7bYhOcA3xLZSQkwnNz
hvgPs5D/MlMZuLyUKaJXkKjDakoemkegP12KS7CRqIUvwaHNxM8Sn5rjcR0u
ixjLdV4VdZyZf80B77lBwEYy0k7lLho3709ic5yaFhzFclHIlIPL5GUOFBe1
//2G4SKjapVTBtPkn6ZvTw7BAC8l6kcOvKP/gCVbrhzJv18OXJLX/X3tX1I/
YZ53v777xHnojP2Web8J39d8J//vh+/PFZpxTSob8E9BKUwZZnfOmtiA/btZ
Hz5Yf0RD8ZBP/LsDfvG5QHyBr6B1fuILfAXjl0JcgFjhH6B+if9EQNh8ucAi
fb0y6TL+4phZOTjPwbx7uXUTF6a25FP7mk18+YPoMbJXH9X6egZfTSVmM7LC
vi3i4JXobBlpHfItw6oq2abVmoLFTX0PA2LvbBv6tu3L3VBamvn/AczCGXiF
TQAA

-->

</rfc>

