<?xml version="1.0" encoding="UTF-8"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="std"
     consensus="true"
     docName="draft-dogra-opsawg-ipfix-pfc-00"
     ipr="trust200902"
     submissionType="IETF"
     tocDepth="3"
     tocInclude="true"
     version="3"
     xml:lang="en">
  <front>
    <title abbrev="IPFIX PFC Telemetry">IPFIX Information Elements for Priority-based Flow Control Telemetry</title>
    <seriesInfo name="Internet-Draft" value="draft-dogra-opsawg-ipfix-pfc-00"/>
    <author initials="A." surname="Dogra" fullname="Aditya Dogra">
      <organization>Cisco Systems</organization>
      <address>
        <email>addogra@cisco.com</email>
      </address>
    </author>
    <author initials="M." surname="Kumar" fullname="Manish Kumar">
      <organization>Cisco Systems</organization>
      <address>
        <email>mkumar8@cisco.com</email>
      </address>
    </author>
    <author initials="S." surname="Gopalakrishnan" fullname="Sriram Gopalakrishnan">
      <organization>Cisco Systems</organization>
      <address>
        <postal>
          <country>India</country>
        </postal>
        <email>sriragop@cisco.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="26"/>
    <area>Operations and Management</area>
    <workgroup>Operations and Management Area Working Group</workgroup>
    <keyword>IPFIX</keyword>
    <keyword>PFC</keyword>
    <keyword>lossless Ethernet</keyword>
    <abstract>
      <t>
        Priority-based Flow Control (PFC) pauses Ethernet traffic by priority.
        This document defines two IP Flow Information Export (IPFIX)
        Information Elements and an Options Template record pattern for
        per-priority totals of received and transmitted PFC control frames.
      </t>
    </abstract>
  </front>

  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>
        <xref target="IEEE8021Q"/> specifies Priority-based Flow Control
        (PFC).  <xref target="IEEE8023"/> specifies the PFC MAC Control frame
        format.  A PFC frame contains a 16-bit class-enable vector and eight
        16-bit pause-time fields, one for each priority.  The lower eight
        vector bits select the corresponding pause-time fields.  PFC applies
        to a physical link and a priority.  It does not identify an IP Flow.
      </t>
      <t>
        Existing IPFIX Information Elements identify Observation Points,
        physical interfaces, and observation times.  They do not identify a
        PFC vector position or count PFC control frames for that position.
        This document defines only those missing elements.
      </t>
      <t>
        The PFC counter Data Records defined in <xref target="export-model"/>
        carry pfcPriority and pfcControlFrameTotalCount.  A collector can
        correlate these records with separately exported IPFIX Flow Records
        that describe traffic.  The traffic Flow Records do not need to
        contain the new PFC Information Elements.  This correlation requires
        a common device, physical interface, time, and known
        traffic-to-priority mapping.  It cannot prove that a Flow caused
        PFC activity.
      </t>
    </section>

    <section anchor="requirements-language">
      <name>Requirements Language</name>
      <t>
        The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
        "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
        "OPTIONAL" 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="applicability">
      <name>Applicability</name>
      <t>
        Existing management interfaces can report PFC configuration, state,
        and counters.  Their coverage depends on the supported data model
        and implementation.  YANG-Push can report applicable operational
        data <xref target="RFC8641"/>.  The IEEE PFC MIB <xref target="IEEE-PFC-MIB"/>
        defines interface counters for MAC Control request and indication
        primitives.  <xref target="RFC8038"/> provides a mechanism to export
        those MIB objects through IPFIX.
      </t>
      <t>
        This specification provides a common format for deployments that
        use existing IPFIX infrastructure.  It uses IPFIX observation,
        interface, template, transport, and collector functions.
      </t>
    </section>

    <section anchor="observation-model">
      <name>PFC Counter Observation Model</name>
      <section anchor="scope-and-direction">
        <name>Scope and Direction</name>
        <t>
          Each record identifies one Observation Point, one physical
          interface, one PFC priority, one direction, and one observation
          time.  A received-frame record uses
          ingressPhysicalInterface (252).  A transmitted-frame record uses
          egressPhysicalInterface (253).  A record MUST NOT contain both
          physical-interface Information Elements.
        </t>
        <t>
          For a physical interface that belongs to a Link Aggregation
          Group, the record MUST identify that member interface.  An
          exporter MUST NOT use an aggregate Link Aggregation Group counter
          for this record.
        </t>
      </section>

      <section anchor="priority-semantics">
        <name>Priority Semantics</name>
        <t>
          pfcPriority contains an unsigned8 priority index n, with valid
          values from 0 through 7.  The value n identifies bit n of the PFC
          class-enable vector and pause-time field n in a PFC frame.  It is
          not a bitmap and does not contain the vector or a pause-time
          value.  For example, a value of 3 identifies bit 3 and pause-time
          field 3.
        </t>
        <t>
          An exporter MUST NOT substitute dot1qPriority (244) or an internal
          queue index for pfcPriority.  A collector needs the applicable
          device, interface, and time-dependent mapping to correlate the
          priority with traffic.  That mapping does not change the fixed
          association between bit n and pause-time field n.
        </t>
      </section>

      <section anchor="counter-semantics">
        <name>Control-Frame Count Semantics</name>
        <t>
          For received frames, the source counts valid PFC frames observed
          from the link before local enablement, policy, or watchdog
          processing.  For transmitted
          counts, the exporter MUST count only valid PFC frames that it can
          confirm were emitted on the link.  An internal generation request
          does not prove transmission.  Transmission does not prove peer
          reception or execution of the pause request.
        </t>
        <t>
          The source MUST count every qualifying frame at the specified
          physical interface and Observation Point.  An exporter MUST NOT
          substitute a count from a packet-sampled subset or an extrapolated
          estimate for pfcControlFrameTotalCount.
        </t>
        <t>
          For each set class-enable bit, the source increments the counter
          for that priority once.  It counts zero-quanta resume requests and
          non-zero pause or refresh requests.  It does not increment a counter
          for a clear class-enable bit, regardless of the pause-time value.
          One frame can increment counters for multiple priorities.  A
          collector MUST NOT report the sum of different priority counters as
          a count of unique wire frames.
        </t>
        <t>
          A qualifying frame meets the MAC Control and PFC requirements in
          <xref target="IEEE8023"/> and <xref target="IEEE8021Q"/>:
          receive-validation requirements for received frames, or
          transmit-format requirements for transmitted frames.  The
          exporter MUST NOT count frames that fail these requirements,
          including frames with a detected frame-check-sequence error or
          an incorrect MAC Control EtherType or PFC opcode.  Reserved-field
          and pause-time-field treatment follows those IEEE specifications.
          This document defines no additional rejection rules.  If the
          source cannot distinguish qualifying from
          non-qualifying frames, the exporter MUST NOT use that source for
          pfcControlFrameTotalCount.
        </t>
      </section>
    </section>

    <section anchor="information-elements">
      <name>New Information Elements</name>
      <table anchor="ie-summary">
        <name>PFC Information Elements</name>
        <thead>
          <tr><th>Name</th><th>Type</th><th>Semantics</th><th>Units</th></tr>
        </thead>
        <tbody>
          <tr><td>pfcPriority</td><td>unsigned8</td><td>identifier</td><td>none</td></tr>
          <tr><td>pfcControlFrameTotalCount</td><td>unsigned64</td><td>totalCounter</td><td>frames</td></tr>
        </tbody>
      </table>
      <t>
        <xref target="iana"/> gives the complete definitions and registration
        requests.
      </t>
    </section>

    <section anchor="export-model">
      <name>Export Model</name>
      <t>
        An Options Template Record defines each PFC counter Data Record.  All
        Scope Fields precede the non-Scope Fields, as <xref target="RFC7011"/>
        requires.  Received and transmitted counters use separate Options
        Template Records.  The two Options Template Records use different
        physical-interface fields.
      </t>
      <table anchor="summary-template">
        <name>PFC Counter Record</name>
        <thead>
          <tr><th>Role</th><th>Information Element</th><th>Requirement</th></tr>
        </thead>
        <tbody>
          <tr><td>Scope</td><td>observationPointId (138)</td><td>REQUIRED</td></tr>
          <tr><td>Scope</td><td>ingressPhysicalInterface (252) for received, or egressPhysicalInterface (253) for transmitted</td><td>REQUIRED, exactly one</td></tr>
          <tr><td>Scope</td><td>pfcPriority</td><td>REQUIRED</td></tr>
          <tr><td>Data</td><td>observationTimeMilliseconds (323)</td><td>REQUIRED</td></tr>
          <tr><td>Data</td><td>pfcControlFrameTotalCount</td><td>REQUIRED</td></tr>
        </tbody>
      </table>
      <t>
        <xref target="RFC5477"/> defines observationTimeMilliseconds.  Its
        value is the closest available time when the source counter was read.
        It is not the record export time.
      </t>
      <t>
        The PFC Counter Record reports a total, not a copy of a PFC frame.
        It contains no class-enable vector or pause-time values.  The total
        can include frames with different pause-time values and does not
        measure elapsed paused time.
      </t>
      <t>
        pfcControlFrameTotalCount is the counter value at
        observationTimeMilliseconds.  The counter starts at zero when its
        measurement source initializes.  It counts independently of export.
        It wraps after 2^64 - 1, as the totalCounter semantic in
        <xref target="RFC7012" section="3.2.2"/> requires.  A counter reset
        starts a new epoch at zero.
      </t>
      <t>
        The required fields do not identify a counter reset or a counter
        epoch.  An increase does not prove that no reset occurred.  A decrease
        can result from a reset or a wrap.  The observation time and IPFIX
        Transport Session do not establish epoch continuity.
      </t>
      <t>
        The required PFC Counter Record does not provide the information
        needed for an exact interval count.  A Collecting Process MUST NOT
        report an exact interval count from two readings without reliable
        information beyond the required fields.  To report such a count, the
        Collecting Process MUST confirm that both readings refer to the same
        scoped counter instance.  It MUST also confirm that no reset occurred
        and fewer than 2^64 increments occurred between the observation
        times.  If these conditions hold, the interval count is the later
        value minus the earlier value, modulo 2^64.  Otherwise, the interval
        count is unknown.  A rate based on an unknown interval count is also
        unknown.  This document does not define an epoch Information Element
        or a method to provide the additional information.
      </t>
      <t>
        The fields listed in the PFC Counter Record table MUST occur exactly
        once in their specified roles, with exactly one of the two
        physical-interface Information Elements.  The order of the listed
        Scope Fields and the order of the listed non-Scope Fields are not
        significant.  Collecting
        Processes MUST accept Templates with additional Information Elements.
        They MUST also
        accept message streams with records from other Templates, as
        <xref target="RFC7013" section="9.2"/> requires.
      </t>
    </section>

    <section anchor="export-requirements">
      <name>Export Requirements</name>
      <t>
        Exporters follow <xref target="RFC7011"/> for Template lifecycle and
        field handling.  Before IANA assigns Element IDs, experiments use
        enterprise-specific Information Elements under an appropriate Private
        Enterprise Number.  The TBD values in this document are not wire
        values.  Experiments that cross an administrative or implementation
        boundary SHOULD export Information Element Type Records, as
        <xref target="RFC5610" section="3.9"/> specifies.  They can also
        communicate equivalent type information out of band.
      </t>
      <t>
        If the source counter is narrower than 64 bits, the exporter MUST
        account for its wraps.  It MUST distinguish a source reset from a
        wrap.  The exported unsigned64 value must have the totalCounter
        behavior defined above.  If the exporter cannot meet these
        requirements, it MUST NOT export that source as
        pfcControlFrameTotalCount.
      </t>
      <t>
        A zero value is a valid counter reading.  It does not prove that no
        qualifying frames occurred because the counter can wrap.  A missing
        record gives no count.  A collector MUST NOT treat a missing record
        as a zero value.
      </t>
    </section>

    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <t>
        Reporting frequency controls export volume and time resolution for
        correlation.  The number of physical interfaces, priorities, and
        directions also affects export volume.  Operators SHOULD select an
        export path that remains available when PFC pauses the monitored
        priority.
      </t>
    </section>

    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>
        The IPFIX security considerations in <xref target="RFC7011"/> and
        <xref target="RFC7012"/> apply.  PFC telemetry can reveal physical
        topology, service-priority use, congestion hot spots, and workload
        timing.  Exporters and Collecting Processes SHOULD authenticate one
        another.  They SHOULD protect the confidentiality and integrity of
        the telemetry.  They SHOULD apply appropriate authorization and
        retention controls.  TLS or DTLS deployments MUST follow the current
        BCP 195 recommendations in <xref target="RFC9325"/>.
      </t>
      <t>
        Authentication of the IPFIX Transport Session authenticates the
        Exporting Process.  It does not authenticate a counted PFC frame.  An
        unauthorized peer can send a syntactically valid frame.  A counter
        increase does not prove genuine congestion.  High-impact remediation
        SHOULD require other operational evidence.
      </t>
    </section>

    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>
        This document requests two new Information Elements from IANA.  IANA
        is requested to register them in the "IPFIX Information Elements"
        registry <xref target="IANA-IPFIX"/>.  The registrations follow
        <xref target="RFC7012"/> and <xref target="RFC7013"/>.  Registry
        terminology follows <xref target="RFC9710"/>.  IANA is requested to
        assign values from the unassigned Element ID range 128 through 32767.
        The RFC Editor is requested to replace TBD1 and TBD2 with these
        values.  "This document" below refers to the resulting RFC.
      </t>

      <section anchor="iana-pfc-priority">
        <name>pfcPriority</name>
        <dl spacing="compact">
          <dt>Name:</dt><dd>pfcPriority</dd>
          <dt>Element ID:</dt><dd>TBD1</dd>
          <dt>Description:</dt>
          <dd>
            A priority index n in the range 0 through 7.  The value n
            identifies bit n of the Priority-based Flow Control class-enable
            vector and pause-time field n in a PFC frame.  This value is not
            a bitmap.  It contains neither the vector nor a pause-time
            value.  It does not identify an IEEE 802.1Q tag Priority Code
            Point or an internal queue.
          </dd>
          <dt>Abstract Data Type:</dt><dd>unsigned8</dd>
          <dt>Data Type Semantics:</dt><dd>identifier</dd>
          <dt>Units:</dt><dd>none</dd>
          <dt>Range:</dt><dd>0-7</dd>
          <dt>Status:</dt><dd>current</dd>
          <dt>Additional Information:</dt>
          <dd>
            See <xref target="IEEE8023"/>, Annex 31D, and
            <xref target="IEEE8021Q"/>, Clause 36.
          </dd>
          <dt>Reference:</dt><dd>This document</dd>
        </dl>
      </section>

      <section anchor="iana-control-frame-count">
        <name>pfcControlFrameTotalCount</name>
        <dl spacing="compact">
          <dt>Name:</dt><dd>pfcControlFrameTotalCount</dd>
          <dt>Element ID:</dt><dd>TBD2</dd>
          <dt>Description:</dt>
          <dd>
            The total number of qualifying PFC MAC Control frames for one
            PFC priority, as defined in <xref target="counter-semantics"/>.
            The containing Data Record identifies the priority.
            The counter increments when that
            priority's class-enable vector bit is one.  It counts frames with
            zero and non-zero pause-time values.  One frame can increment
            counters for multiple priorities.  It represents
            complete qualifying-frame counting, not a count from a
            packet-sampled subset or an extrapolated estimate.  It does not
            contain pause-time values.  In the PFC Counter Record defined in
            <xref target="export-model"/>, the physical-interface
            Information Element identifies received or transmitted direction.
          </dd>
          <dt>Abstract Data Type:</dt><dd>unsigned64</dd>
          <dt>Data Type Semantics:</dt><dd>totalCounter</dd>
          <dt>Units:</dt><dd>frames</dd>
          <dt>Status:</dt><dd>current</dd>
          <dt>Additional Information:</dt>
          <dd>See <xref target="IEEE8023"/>, Annex 31D.</dd>
          <dt>Reference:</dt><dd>This document</dd>
        </dl>
      </section>
    </section>

  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5477.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5610.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7011.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7012.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7013.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9325.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9710.xml"/>
        <reference anchor="IEEE8021Q" target="https://standards.ieee.org/ieee/802.1Q/10323/">
          <front>
            <title>IEEE Standard for Local and Metropolitan Area Networks--Bridges and Bridged Networks</title>
            <author><organization>IEEE</organization></author>
            <date year="2022"/>
          </front>
          <seriesInfo name="IEEE" value="Std 802.1Q-2022"/>
        </reference>
        <reference anchor="IEEE8023" target="https://standards.ieee.org/ieee/802.3/10422/">
          <front>
            <title>IEEE Standard for Ethernet</title>
            <author><organization>IEEE</organization></author>
            <date year="2022"/>
          </front>
          <seriesInfo name="IEEE" value="Std 802.3-2022"/>
        </reference>
        <reference anchor="IANA-IPFIX" target="https://www.iana.org/assignments/ipfix/">
          <front>
            <title>IP Flow Information Export (IPFIX) Entities</title>
            <author><organization>Internet Assigned Numbers Authority</organization></author>
            <date/>
          </front>
        </reference>
      </references>

      <references>
        <name>Informative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8038.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8641.xml"/>
        <reference anchor="IEEE-PFC-MIB" target="https://www.ieee802.org/1/files/public/MIBs/IEEE8021-PFC-MIB-202103050000Z.mib">
          <front>
            <title>IEEE8021-PFC-MIB</title>
            <author><organization>IEEE 802.1</organization></author>
            <date year="2021" month="March"/>
          </front>
        </reference>
      </references>
    </references>
  </back>
</rfc>
