<?xml version='1.0' encoding='utf8'?>
<rfc version="3" category="std" ipr="trust200902" submissionType="IETF" consensus="true" docName="draft-xu-opsawg-ipfix-buffer-snapshot-00" tocInclude="true" symRefs="true" sortRefs="true">
  <front>
    <title abbrev="IPFIX Buffer Snapshots">IPFIX Export of Buffer Snapshots</title>
    <author fullname="Bohua Xu" initials="B." surname="Xu">
      <organization>China Unicom</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <code>100000</code>
          <country>China</country>
        </postal>
        <email>xubh15@chinaunicom.cn</email>
      </address>
    </author>
    <author fullname="Chang Liu" initials="C." surname="Liu">
      <organization>China Unicom</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <code>100000</code>
          <country>China</country>
        </postal>
        <email>liuc131@chinaunicom.cn</email>
      </address>
    </author>
    <author fullname="Jie Xu" initials="J." surname="Xu">
      <organization>China Unicom</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <code>100000</code>
          <country>China</country>
        </postal>
        <email>xuj556@chinaunicom.cn</email>
      </address>
    </author>
    <author fullname="Chenyang Wen" initials="C." surname="Wen">
      <organization>China Unicom</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <code>100000</code>
          <country>China</country>
        </postal>
        <email>wency15@chinaunicom.cn</email>
      </address>
    </author>
    <author fullname="Wei Cheng" initials="W." surname="Cheng">
      <organization>Centec</organization>
      <address>
        <postal>
          <city>Suzhou</city>
          <code>215000</code>
          <country>China</country>
        </postal>
        <email>chengw@centec.com</email>
      </address>
    </author>
    <author fullname="Junjie Wang" initials="J." surname="Wang">
      <organization>Centec</organization>
      <address>
        <postal>
          <city>Suzhou</city>
          <code>215000</code>
          <country>China</country>
        </postal>
        <email>wangjj@centec.com</email>
      </address>
    </author>
    <author fullname="Fang Hong" initials="F." surname="Hong">
      <organization>Centec</organization>
      <address>
        <postal>
          <city>Suzhou</city>
          <code>215000</code>
          <country>China</country>
        </postal>
        <email>hongf@centec.com</email>
      </address>
    </author>
    <author fullname="Yongtao Yang" initials="Y." surname="Yang">
      <organization>Centec</organization>
      <address>
        <postal>
          <city>Suzhou</city>
          <code>215000</code>
          <country>China</country>
        </postal>
        <email>yangyt@centec.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="26"/>
    <area>Operations and Management</area>
    <workgroup>Individual Submission</workgroup>
    <abstract>
      <t>This document specifies an IP Flow Information Export (IPFIX) profile for exporting buffer occupancy snapshots. It separates the number of objects selected for acquisition, the number successfully captured, and the number of distinct object records validated by a collector. A capture span bounds the temporal separation of the reported measurements.</t>
      <t>The profile defines ten Information Elements, object identity and accounting rules, and an ordered export procedure in which final metadata closes a snapshot. The resulting collector procedure uses bounded state and distinguishes partial acquisition from incomplete delivery. It does not define a buffer implementation, a trigger configuration protocol, or a congestion control algorithm.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion and Implementation Status</name>
      <t>This is an individual proposal intended for the Standards Track. No working group adoption or independent interoperability implementation is claimed. The authors invite review of the problem statement, overlap with existing work, and implementation experience.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>Buffer measurements taken during a short congestion event can describe different resource sets and different sample instants. A collector receiving two records for one queue cannot treat them as evidence that two distinct queues were measured. Similarly, a complete transport stream cannot establish whether the device successfully read every object in its configured monitoring scope.</t>
      <t>The interoperability problem addressed here is the interpretation of a multi-object snapshot between independently implemented IPFIX Exporting and Collecting Processes. This document defines a shared interpretation of object identity, acquisition counts, sampling span, and finalization. It uses the IPFIX protocol and information model <xref target="RFC7011"/> <xref target="RFC7012"/>.</t>
      <t>The proposed profile is appropriate when IPFIX is already the export channel and the receiver needs these snapshot properties. Deployments using an existing management interface with adequate grouping and timing semantics need not add another export protocol. Independent deployment demand for this profile remains to be established.</t>
      <section anchor="related">
        <name>Relationship to Existing Work</name>
        <t>The SAI queue and buffer interfaces expose occupancy and watermark statistics <xref target="SAI-QUEUE"/> <xref target="SAI-BUFFER"/>. Those interfaces establish that buffer observations are useful implementation data. They do not themselves establish demand for this IPFIX profile or specify its collector finalization rules.</t>
        <t>IPFIX common properties <xref target="RFC5473"/> and structured data <xref target="RFC6313"/> can associate or aggregate measurements. They remain alternatives for future encodings. This profile specifies the meaning of capture counts and bounds, then uses ordinary Data Records and an Options Data Record so a snapshot can span several IPFIX Messages without requiring a single large structured record.</t>
        <t>YANG-Push <xref target="RFC8641"/> provides another telemetry delivery mechanism. The QoS model <xref target="I-D.ietf-rtgwg-qos-model"/> and data manifest <xref target="MANIFEST"/> are related work in progress. Their configuration, subscription, and metadata functions are not replaced. This profile does not claim that IPFIX has an intrinsic performance advantage over those mechanisms.</t>
        <t>Delay performance export <xref target="RFC9951"/> describes packet-path delay metrics, while the packet discard model <xref target="DISCARD-MODEL"/> describes discard reporting. An occupancy sample is neither a path-delay measurement nor a discard counter. This profile introduces no alternate discard taxonomy and <bcp14>MUST NOT</bcp14> infer a particular discard cause solely from occupancy.</t>
      </section>
    </section>
    <section anchor="requirements">
      <name>Requirements Language</name>
      <t>The key words <bcp14>MUST</bcp14>, <bcp14>MUST NOT</bcp14>, <bcp14>REQUIRED</bcp14>, <bcp14>SHOULD</bcp14>, <bcp14>SHOULD NOT</bcp14>, <bcp14>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="terms">
      <name>Terminology and Scope</name>
      <t>IPFIX terms follow <xref target="RFC7011"/> and <xref target="RFC7012"/>. A buffer object is an egress queue, ingress priority group, shared buffer pool, or headroom pool with defined occupancy accounting. A snapshot scope is a finite set of distinct objects frozen at the start of one capture attempt.</t>
      <t>N is the number of objects in the frozen scope. C is the number of distinct objects successfully captured before acquisition ends. D is the number of distinct object records accepted by the collector before final metadata. The metadata declares N and C; the collector derives D.</t>
      <t>A snapshot is identified by (Transport Session, Observation Domain ID, snapshotId). A seal is the single final Snapshot Metadata Options Data Record. It closes the export of that identifier. Capture-complete is an exporter assertion that C equals N. Delivery-complete is a collector result that the sealed records are internally consistent and D equals C.</t>
      <t>These properties are distinct from inventory-verified coverage, simultaneous sampling, measurement precision, and authenticity of the exporter. Neither counts nor transport reliability prove that a compromised exporter sampled the asserted objects.</t>
      <artwork type="ascii-art">Metering Process     Exporting Process       Collecting Process
freeze scope N       ordered TCP stream      buffer distinct keys
capture C objects -&gt; object(k), ...       -&gt; validate and count D
finalize metadata    metadata(k) [seal]   -&gt; close k; emit result
                     next snapshot k+1      retain closed-ID floor
</artwork>
    </section>
    <section anchor="objects">
      <name>Object Identity and Accounting</name>
      <t>Within one Transport Session and Observation Domain, the canonical key is (bufferObjectType, applicable interface index, bufferObjectIndex). For types without interface scope the interface component is absent. Indices need not be contiguous. Type and interface scope are part of the key; an object index alone is insufficient.</t>
      <table anchor="object-types">
        <name>Initial Buffer Object Types</name>
        <thead>
          <tr>
            <th>Value</th>
            <th>Object</th>
            <th>Required interface IE</th>
            <th>Index scope</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>0</td>
            <td>Reserved</td>
            <td>None</td>
            <td>Invalid</td>
          </tr>
          <tr>
            <td>1</td>
            <td>Egress queue</td>
            <td>egressInterface (14), nonzero</td>
            <td>Egress interface</td>
          </tr>
          <tr>
            <td>2</td>
            <td>Ingress priority group</td>
            <td>ingressInterface (10), nonzero</td>
            <td>Ingress interface</td>
          </tr>
          <tr>
            <td>3</td>
            <td>Shared buffer pool</td>
            <td>None</td>
            <td>Observation Domain</td>
          </tr>
          <tr>
            <td>4</td>
            <td>Headroom pool</td>
            <td>None</td>
            <td>Observation Domain</td>
          </tr>
        </tbody>
      </table>
      <t>The exporter <bcp14>MUST</bcp14> ensure that each key denotes one resource and one accounting interpretation for the Transport Session. If a key is reassigned, an interface index is reused, or its accounting interpretation changes, the exporter <bcp14>MUST</bcp14> establish a new Transport Session before exporting the changed meaning. Adding or removing keys between snapshot scopes does not change the meanings of surviving keys.</t>
      <t>Snapshot scope membership <bcp14>MUST</bcp14> be frozen before acquisition and <bcp14>MUST</bcp14> contain no duplicate keys. Every captured object <bcp14>MUST</bcp14> belong to that scope. N and C alone do not identify uncaptured objects. A collector requiring inventory-verified coverage <bcp14>MUST</bcp14> obtain an independently provisioned scope inventory, bind it to the relevant session and capture attempt, and compare the received keys with it. This profile does not transport that inventory or negotiate its version.</t>
      <t>bufferOccupancyOctets is a gauge of currently accounted buffer storage, not a traffic counter, watermark, capacity, or threshold. bufferAccountingGranularity is the nonzero accounting quantum in octets. An exact cell counter with quantum G is exported as allocated cells multiplied by G. A quantum of one permits octet resolution but does not prove estimator accuracy. The approximateOccupancy flag qualifies an estimated measurement even when its quantum is one.</t>
      <t>Each occupancy <bcp14>MUST</bcp14> be a multiple of its stated quantum. An estimator <bcp14>MUST</bcp14> be expressed in that same accounting unit and flagged approximate; the exporter <bcp14>MUST</bcp14> document its rounding and estimation method. Values that overflow unsigned64 <bcp14>MUST</bcp14> be omitted from acquisition, reducing C, rather than wrapped or saturated without qualification. Overlapping queue and pool measurements <bcp14>MUST NOT</bcp14> be summed unless an external accounting model establishes that the quantities are disjoint.</t>
    </section>
    <section anchor="capture">
      <name>Capture Contract</name>
      <t>At the start of each attempt the exporter <bcp14>MUST</bcp14> allocate a nonzero snapshotId greater than every previously allocated identifier in the same Transport Session and Observation Domain. Identifiers <bcp14>MUST NOT</bcp14> wrap or be reused. If monotonic allocation or object identity cannot be preserved after restart, the exporter <bcp14>MUST</bcp14> open a new session. Allocation need not be contiguous; identifier gaps <bcp14>MUST NOT</bcp14> be interpreted as a count of physical events or lost snapshots.</t>
      <t>Acquisition <bcp14>MUST</bcp14> finish or terminate before any record for the snapshot is exported. Metadata and the captured object set <bcp14>MUST</bcp14> then remain immutable. The exporter <bcp14>MUST</bcp14> preserve 0 &lt;= C &lt;= N and set incompleteCapture if and only if C &lt; N. C <bcp14>MUST NOT</bcp14> be reduced later to conceal an export-queue drop. Empty scopes are permitted: N=C=0 describes an empty selection, not successful observation of any resource.</t>
      <t>Capture <bcp14>MUST NOT</bcp14> change live packet counters, queue admission, scheduling, ECN marking, PFC behavior, or discard policy. Implementations <bcp14>SHOULD</bcp14> bound capture work and export rate so observation does not materially impair forwarding. Trigger suppression and coalescing <bcp14>MAY</bcp14> occur before an attempt starts; their local policy <bcp14>MUST</bcp14> be documented.</t>
      <section anchor="span">
        <name>Temporal Bound and Flags</name>
        <t>snapshotCaptureSpanNanoseconds is a conservative upper bound on the separation between the earliest and latest sample instants among the C captured objects. The bound <bcp14>MUST</bcp14> include uncertainty in locating those instants. A hardware simultaneity guarantee, a monotonic measurement, or a justified deterministic readout bound <bcp14>MAY</bcp14> be used. Subtracting adjustable wall-clock timestamps <bcp14>MUST NOT</bcp14> be used to establish the bound.</t>
        <t>For C &gt; 0, zero span is permitted only when simultaneous capture is established; a single exact observation satisfies this condition. A positive finite span <bcp14>MUST</bcp14> set nonAtomic. Zero span <bcp14>MUST</bcp14> clear nonAtomic and spanUnknown. If simultaneity cannot be established, the exporter <bcp14>MUST</bcp14> use a positive conservative bound, or UINT64_MAX if no finite bound is known. UINT64_MAX is reserved for unknown span and <bcp14>MUST</bcp14> set both spanUnknown and nonAtomic.</t>
        <t>For C=0, the span <bcp14>MUST</bcp14> be UINT64_MAX and both spanUnknown and nonAtomic <bcp14>MUST</bcp14> be set. A bound on C measurements says nothing about the N-C uncaptured objects. The collector <bcp14>MUST</bcp14> validate these combinations before reporting delivery completeness.</t>
      </section>
      <section anchor="timestamp">
        <name>Optional Wall-Clock Context</name>
        <t>The final metadata <bcp14>MAY</bcp14> contain observationTimeNanoseconds (IE 325) when C&gt;0, referring to the first sample. This IE uses the IPFIX dateTimeNanoseconds type: the NTP seconds and fractional-seconds representation specified by <xref target="RFC7011"/> <xref target="RFC7012"/>, rather than integer Unix nanoseconds. It <bcp14>MUST</bcp14> be absent when C=0. Cross-device correlation requires separately established clock accuracy and synchronization; timestamp syntax does not provide that assurance.</t>
      </section>
    </section>
    <section anchor="export">
      <name>Ordered IPFIX Export Profile</name>
      <t>This profile <bcp14>MUST</bcp14> use IPFIX over TCP as specified in <xref target="RFC7011"/>. UDP and SCTP are outside this profile. Exporters and collectors <bcp14>MUST</bcp14> support TLS for IPFIX and <bcp14>SHOULD</bcp14> use mutually authenticated TLS 1.3 <xref target="RFC8446"/> on deployments that support it. Plain TCP is permissible only under a deployment security policy that supplies equivalent protection and access control.</t>
      <t>The profile is configured out of band at both peers. It defines no new IPFIX version or transport negotiation. Before IANA assignment, experiments <bcp14>MUST</bcp14> use enterprise-specific IEs under an appropriate Private Enterprise Number and an explicitly agreed mapping. Symbolic TBD labels are not wire identifiers. An endpoint <bcp14>MUST NOT</bcp14> infer this profile solely from numeric experimental identifiers used by another enterprise.</t>
      <section anchor="templates">
        <name>Templates and Field Presence</name>
        <t>Templates <bcp14>MUST</bcp14> precede their Data Records in the session. Template lifetimes, Set framing, padding, and Sequence Numbers follow <xref target="RFC7011"/>. A profile record <bcp14>MUST</bcp14> contain each required IE exactly once, with its full field length shown below; reduced-size encoding is not used for these fields in this profile. Extra IEs <bcp14>MAY</bcp14> carry context if they do not change the meaning of required fields.</t>
        <t>Snapshot metadata <bcp14>MUST</bcp14> use an Options Template with snapshotId as its only scope field and the other five required fields as non-scope fields. The protocol Observation Domain ID and Transport Session supply the outer scope. A metadata record is always a final seal, never a preliminary estimate.</t>
        <t>Object records use an ordinary Data Template. Egress queues <bcp14>MUST</bcp14> include egressInterface and <bcp14>MUST NOT</bcp14> include ingressInterface; ingress priority groups <bcp14>MUST</bcp14> include ingressInterface and <bcp14>MUST NOT</bcp14> include egressInterface; shared and headroom pools <bcp14>MUST</bcp14> include neither. Separate Templates <bcp14>MUST</bcp14> be used where field presence differs. A field cannot be omitted on selected records of the same Template. These rules avoid assigning new sentinel semantics to the existing interface IEs.</t>
        <table anchor="template-fields">
          <name>Required Fields and Lengths</name>
          <thead>
            <tr>
              <th>Record</th>
              <th>Fields in recommended order (length in octets)</th>
              <th>Required fields</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Final metadata</td>
              <td>snapshotId (8, scope); snapshotExpectedObjectCount (4); snapshotCapturedObjectCount (4); snapshotCaptureSpanNanoseconds (8); snapshotTriggerType (1); snapshotFlags (2)</td>
              <td>6; scope count 1</td>
            </tr>
            <tr>
              <td>Egress queue</td>
              <td>snapshotId (8); bufferObjectType (1); egressInterface (4); bufferObjectIndex (4); bufferOccupancyOctets (8); bufferAccountingGranularity (4)</td>
              <td>6</td>
            </tr>
            <tr>
              <td>Ingress priority group</td>
              <td>snapshotId (8); bufferObjectType (1); ingressInterface (4); bufferObjectIndex (4); bufferOccupancyOctets (8); bufferAccountingGranularity (4)</td>
              <td>6</td>
            </tr>
            <tr>
              <td>Pool</td>
              <td>snapshotId (8); bufferObjectType (1); bufferObjectIndex (4); bufferOccupancyOctets (8); bufferAccountingGranularity (4)</td>
              <td>5</td>
            </tr>
          </tbody>
        </table>
        <t>Field order is determined by the Template, not by the example order in the table. Required metadata occupies 27 octets per record; queue and priority-group records occupy 29, and pool records occupy 25, excluding optional fields and IPFIX framing. Unknown optional IEs <bcp14>MUST NOT</bcp14> change snapshot counting or finalization.</t>
      </section>
      <section anchor="ordering">
        <name>Snapshot Serialization and Seal</name>
        <t>For each Transport Session and Observation Domain, the exporter <bcp14>MUST</bcp14> emit snapshots in increasing snapshotId order. All object records of one snapshot <bcp14>MUST</bcp14> precede its single metadata seal. Records of another snapshot in that same Observation Domain <bcp14>MUST NOT</bcp14> be interleaved. Different Observation Domains and unrelated IPFIX records <bcp14>MAY</bcp14> interleave. Ordering means the order of records in Sets and IPFIX Messages as parsed from the TCP byte stream.</t>
        <t>The exporter <bcp14>MUST</bcp14> emit every captured object exactly once in normal operation. A collector nevertheless tolerates identical duplicates before the seal. The exporter <bcp14>MUST</bcp14> emit no further record for an identifier after its seal, including repeated metadata. If a snapshot cannot be fully exported, the exporter <bcp14>MUST</bcp14> omit its seal or terminate the session. It <bcp14>MAY</bcp14> move to a larger identifier, thereby abandoning the unfinished earlier snapshot.</t>
        <t>A seal is emitted only after all C records have been handed to the same ordered stream. TCP delivery does not guarantee that internal application queues preserved them. D=C at the seal is the independent application check. The final record permits bounded receiver history; a later conflicting record is a protocol violation, not an amendment of the finalized snapshot.</t>
      </section>
    </section>
    <section anchor="collector">
      <name>Collector State and Validation</name>
      <t>A collector <bcp14>MUST</bcp14> parse and process this profile in stream order even if internal workers run concurrently. For each Observation Domain it maintains a closed-ID floor F (initially zero), at most one active identifier K, and a bounded map of accepted object keys for K. F represents identifiers that <bcp14>MUST NOT</bcp14> be reopened. This requires no retained object cache for completed snapshots.</t>
      <t>Before allocating state, the collector <bcp14>MUST</bcp14> enforce configured limits on sessions, Observation Domains per session, records and bytes per active snapshot, processing rate, and reassembly duration. It <bcp14>MUST NOT</bcp14> allocate memory proportional to an untrusted N or C. Limits and incomplete-result reasons <bcp14>MUST</bcp14> be exposed to the application.</t>
      <table anchor="state-machine">
        <name>Ordered Collector Transitions</name>
        <thead>
          <tr>
            <th>Input or event</th>
            <th>Required processing</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>Identifier 0</td>
            <td>Reject as invalid; do not create a snapshot</td>
          </tr>
          <tr>
            <td>Identifier k &lt;= F</td>
            <td>Discard as a late or repeated closed record; report a protocol diagnostic</td>
          </tr>
          <tr>
            <td>First k &gt; F with no active K</td>
            <td>Set F=k-1; create K=k</td>
          </tr>
          <tr>
            <td>k &gt; active K</td>
            <td>Finalize K as incomplete (missing seal); set F=k-1; start K=k</td>
          </tr>
          <tr>
            <td>F &lt; k &lt; active K</td>
            <td>Impossible after the start rule; reject defensively</td>
          </tr>
          <tr>
            <td>Object for active K</td>
            <td>Validate key and fields; accept one value per key; handle duplicates below</td>
          </tr>
          <tr>
            <td>Seal for active K, or seal starting a new k</td>
            <td>Validate metadata, classify the result, then set F=k and release all active state</td>
          </tr>
          <tr>
            <td>Timeout, size cap, or invalid record for K</td>
            <td>Finalize K as expired, resource-limited, or invalid; set F=K; release active state</td>
          </tr>
          <tr>
            <td>Transport Session ends</td>
            <td>Close any active snapshot as incomplete; discard session floors and Templates</td>
          </tr>
        </tbody>
      </table>
      <t>For each accepted object, the collector <bcp14>MUST</bcp14> validate the type-specific interface rule, nonzero granularity, and occupancy divisibility by granularity. Identical duplicates are compared by decoded required fields and counted once; optional context is not part of the count. A duplicate with a different required value <bcp14>MUST</bcp14> invalidate the active snapshot. An unrecognized object type prevents interpreted delivery completeness; the collector <bcp14>MUST</bcp14> close that snapshot as unsupported and retire its identifier.</t>
      <t>At a seal the collector <bcp14>MUST</bcp14> check C&lt;=N, incompleteCapture==(C&lt;N), the span/flag combinations in <xref target="span"/>, and the C=0 timestamp rule. If D&gt;C it <bcp14>MUST</bcp14> report invalid. If D&lt;C it <bcp14>MUST</bcp14> report incomplete delivery. If D=C and all checks pass it <bcp14>MUST</bcp14> report delivery-complete. A seal received before its purported objects closes as incomplete; later records for it <bcp14>MUST NOT</bcp14> revive it.</t>
      <t>Unknown trigger values are descriptive context and do not invalidate an otherwise well-formed snapshot. Unknown flag bits are semantic qualifications: the collector <bcp14>MAY</bcp14> report the structural D=C result, but <bcp14>MUST</bcp14> label the result unsupported-qualified and <bcp14>MUST NOT</bcp14> report unqualified delivery or acquisition completeness. This version has no negotiated extension that relaxes its validation rules.</t>
      <t>A result <bcp14>MUST</bcp14> separately expose delivery status, exporter-asserted acquisition status (complete, partial, or empty scope), simultaneity/span, approximation, and any inventory verification. N&gt;0,C=0 with valid metadata is complete delivery of a failed capture, never a report that N objects have zero occupancy. C=N without an inventory check is a source assertion plus consistency check, not independent proof of scope coverage.</t>
      <t>Closed results are immutable under this profile. Records with k&lt;=F are diagnostic violations and <bcp14>MUST NOT</bcp14> reopen, complete, or silently replace an archived result. A collector <bcp14>MAY</bcp14> terminate a session after such a violation. Finality applies to the accepted sealed prefix, not to the truthfulness of a peer that later violates the protocol. This explicit rule replaces indefinite post-delivery conflict retention.</t>
    </section>
    <section anchor="ies">
      <name>Information Element Definitions</name>
      <t>The following proposed IEs use the specification template of <xref target="RFC7012"/> and review guidance of <xref target="RFC7013"/>. All have status current and reference this document. IANA identifiers remain TBD until assigned. Units are taken from the existing IPFIX units registry; object counts use none, not a newly invented objects unit.</t>
      <section anchor="ie-snapshotId">
        <name>snapshotId</name>
        <t>Identifier scoped by Transport Session and Observation Domain. It increases for successive capture attempts. The final Options Data Record for the identifier seals the snapshot; subsequent records for it are prohibited.</t>
        <table anchor="definition-1">
          <name>Registration Properties</name>
          <thead>
            <tr>
              <th>Property</th>
              <th>Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Name</td>
              <td>snapshotId</td>
            </tr>
            <tr>
              <td>ElementId</td>
              <td>TBD1</td>
            </tr>
            <tr>
              <td>Abstract Data Type</td>
              <td>unsigned64</td>
            </tr>
            <tr>
              <td>Data Type Semantics</td>
              <td>identifier</td>
            </tr>
            <tr>
              <td>Units</td>
              <td>none</td>
            </tr>
            <tr>
              <td>Range</td>
              <td>1..18446744073709551615</td>
            </tr>
            <tr>
              <td>Status</td>
              <td>current</td>
            </tr>
            <tr>
              <td>Reference</td>
              <td>RFC XXXX (this document)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="ie-snapshotExpectedObjectCount">
        <name>snapshotExpectedObjectCount</name>
        <t>N: the number of distinct objects in the scope frozen at acquisition start. This is a count, not an inventory of their identities.</t>
        <table anchor="definition-2">
          <name>Registration Properties</name>
          <thead>
            <tr>
              <th>Property</th>
              <th>Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Name</td>
              <td>snapshotExpectedObjectCount</td>
            </tr>
            <tr>
              <td>ElementId</td>
              <td>TBD2</td>
            </tr>
            <tr>
              <td>Abstract Data Type</td>
              <td>unsigned32</td>
            </tr>
            <tr>
              <td>Data Type Semantics</td>
              <td>quantity</td>
            </tr>
            <tr>
              <td>Units</td>
              <td>none</td>
            </tr>
            <tr>
              <td>Range</td>
              <td>0..4294967295</td>
            </tr>
            <tr>
              <td>Status</td>
              <td>current</td>
            </tr>
            <tr>
              <td>Reference</td>
              <td>RFC XXXX (this document)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="ie-snapshotCapturedObjectCount">
        <name>snapshotCapturedObjectCount</name>
        <t>C: the number of distinct scoped objects successfully captured before acquisition ends. It cannot exceed N and cannot be changed to conceal a subsequent export failure.</t>
        <table anchor="definition-3">
          <name>Registration Properties</name>
          <thead>
            <tr>
              <th>Property</th>
              <th>Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Name</td>
              <td>snapshotCapturedObjectCount</td>
            </tr>
            <tr>
              <td>ElementId</td>
              <td>TBD3</td>
            </tr>
            <tr>
              <td>Abstract Data Type</td>
              <td>unsigned32</td>
            </tr>
            <tr>
              <td>Data Type Semantics</td>
              <td>quantity</td>
            </tr>
            <tr>
              <td>Units</td>
              <td>none</td>
            </tr>
            <tr>
              <td>Range</td>
              <td>0..4294967295</td>
            </tr>
            <tr>
              <td>Status</td>
              <td>current</td>
            </tr>
            <tr>
              <td>Reference</td>
              <td>RFC XXXX (this document)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="ie-snapshotCaptureSpanNanoseconds">
        <name>snapshotCaptureSpanNanoseconds</name>
        <t>Conservative upper bound on the separation of sample instants among captured objects, including uncertainty. Zero means established simultaneity. UINT64_MAX means unknown and is required for C=0.</t>
        <table anchor="definition-4">
          <name>Registration Properties</name>
          <thead>
            <tr>
              <th>Property</th>
              <th>Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Name</td>
              <td>snapshotCaptureSpanNanoseconds</td>
            </tr>
            <tr>
              <td>ElementId</td>
              <td>TBD4</td>
            </tr>
            <tr>
              <td>Abstract Data Type</td>
              <td>unsigned64</td>
            </tr>
            <tr>
              <td>Data Type Semantics</td>
              <td>quantity</td>
            </tr>
            <tr>
              <td>Units</td>
              <td>nanoseconds</td>
            </tr>
            <tr>
              <td>Range</td>
              <td>0..18446744073709551615</td>
            </tr>
            <tr>
              <td>Status</td>
              <td>current</td>
            </tr>
            <tr>
              <td>Reference</td>
              <td>RFC XXXX (this document)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="ie-snapshotTriggerType">
        <name>snapshotTriggerType</name>
        <t>Class of local stimulus that initiated capture. Initial assignments are in the Snapshot Trigger Types registry. This value does not identify the root cause of congestion.</t>
        <table anchor="definition-5">
          <name>Registration Properties</name>
          <thead>
            <tr>
              <th>Property</th>
              <th>Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Name</td>
              <td>snapshotTriggerType</td>
            </tr>
            <tr>
              <td>ElementId</td>
              <td>TBD5</td>
            </tr>
            <tr>
              <td>Abstract Data Type</td>
              <td>unsigned8</td>
            </tr>
            <tr>
              <td>Data Type Semantics</td>
              <td>identifier</td>
            </tr>
            <tr>
              <td>Units</td>
              <td>none</td>
            </tr>
            <tr>
              <td>Range</td>
              <td>0..255</td>
            </tr>
            <tr>
              <td>Status</td>
              <td>current</td>
            </tr>
            <tr>
              <td>Reference</td>
              <td>RFC XXXX (this document)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="ie-snapshotFlags">
        <name>snapshotFlags</name>
        <t>Mask qualifying acquisition completeness, simultaneity, span knowledge, and measurement approximation. Masks and receiver handling are defined below.</t>
        <table anchor="definition-6">
          <name>Registration Properties</name>
          <thead>
            <tr>
              <th>Property</th>
              <th>Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Name</td>
              <td>snapshotFlags</td>
            </tr>
            <tr>
              <td>ElementId</td>
              <td>TBD6</td>
            </tr>
            <tr>
              <td>Abstract Data Type</td>
              <td>unsigned16</td>
            </tr>
            <tr>
              <td>Data Type Semantics</td>
              <td>flags</td>
            </tr>
            <tr>
              <td>Units</td>
              <td>none</td>
            </tr>
            <tr>
              <td>Range</td>
              <td>0..65535</td>
            </tr>
            <tr>
              <td>Status</td>
              <td>current</td>
            </tr>
            <tr>
              <td>Reference</td>
              <td>RFC XXXX (this document)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="ie-bufferObjectType">
        <name>bufferObjectType</name>
        <t>Object class. The class determines whether the index is scoped by an egress interface, ingress interface, or Observation Domain. Zero is reserved.</t>
        <table anchor="definition-7">
          <name>Registration Properties</name>
          <thead>
            <tr>
              <th>Property</th>
              <th>Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Name</td>
              <td>bufferObjectType</td>
            </tr>
            <tr>
              <td>ElementId</td>
              <td>TBD7</td>
            </tr>
            <tr>
              <td>Abstract Data Type</td>
              <td>unsigned8</td>
            </tr>
            <tr>
              <td>Data Type Semantics</td>
              <td>identifier</td>
            </tr>
            <tr>
              <td>Units</td>
              <td>none</td>
            </tr>
            <tr>
              <td>Range</td>
              <td>1..255</td>
            </tr>
            <tr>
              <td>Status</td>
              <td>current</td>
            </tr>
            <tr>
              <td>Reference</td>
              <td>RFC XXXX (this document)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="ie-bufferObjectIndex">
        <name>bufferObjectIndex</name>
        <t>Object index within the namespace selected by bufferObjectType and its applicable interface. It remains semantically stable for the Transport Session.</t>
        <table anchor="definition-8">
          <name>Registration Properties</name>
          <thead>
            <tr>
              <th>Property</th>
              <th>Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Name</td>
              <td>bufferObjectIndex</td>
            </tr>
            <tr>
              <td>ElementId</td>
              <td>TBD8</td>
            </tr>
            <tr>
              <td>Abstract Data Type</td>
              <td>unsigned32</td>
            </tr>
            <tr>
              <td>Data Type Semantics</td>
              <td>identifier</td>
            </tr>
            <tr>
              <td>Units</td>
              <td>none</td>
            </tr>
            <tr>
              <td>Range</td>
              <td>0..4294967295</td>
            </tr>
            <tr>
              <td>Status</td>
              <td>current</td>
            </tr>
            <tr>
              <td>Reference</td>
              <td>RFC XXXX (this document)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="ie-bufferOccupancyOctets">
        <name>bufferOccupancyOctets</name>
        <t>Instantaneous accounted storage of the identified object, in octets, including allocation overhead where applicable. The value is a multiple of bufferAccountingGranularity and may be flagged approximate.</t>
        <table anchor="definition-9">
          <name>Registration Properties</name>
          <thead>
            <tr>
              <th>Property</th>
              <th>Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Name</td>
              <td>bufferOccupancyOctets</td>
            </tr>
            <tr>
              <td>ElementId</td>
              <td>TBD9</td>
            </tr>
            <tr>
              <td>Abstract Data Type</td>
              <td>unsigned64</td>
            </tr>
            <tr>
              <td>Data Type Semantics</td>
              <td>quantity</td>
            </tr>
            <tr>
              <td>Units</td>
              <td>octets</td>
            </tr>
            <tr>
              <td>Range</td>
              <td>0..18446744073709551615</td>
            </tr>
            <tr>
              <td>Status</td>
              <td>current</td>
            </tr>
            <tr>
              <td>Reference</td>
              <td>RFC XXXX (this document)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="ie-bufferAccountingGranularity">
        <name>bufferAccountingGranularity</name>
        <t>Accounting quantum in octets for the object. One denotes octet resolution. A larger value denotes the cell or allocation-block quantum. This field does not establish estimator accuracy.</t>
        <table anchor="definition-10">
          <name>Registration Properties</name>
          <thead>
            <tr>
              <th>Property</th>
              <th>Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Name</td>
              <td>bufferAccountingGranularity</td>
            </tr>
            <tr>
              <td>ElementId</td>
              <td>TBD10</td>
            </tr>
            <tr>
              <td>Abstract Data Type</td>
              <td>unsigned32</td>
            </tr>
            <tr>
              <td>Data Type Semantics</td>
              <td>quantity</td>
            </tr>
            <tr>
              <td>Units</td>
              <td>octets</td>
            </tr>
            <tr>
              <td>Range</td>
              <td>1..4294967295</td>
            </tr>
            <tr>
              <td>Status</td>
              <td>current</td>
            </tr>
            <tr>
              <td>Reference</td>
              <td>RFC XXXX (this document)</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="flags">
      <name>Flag Masks</name>
      <t>snapshotFlags is encoded as an unsigned16 in network byte order. The numeric masks below are authoritative. If bits are displayed from most significant to least significant, masks 0x0008 through 0x0001 occupy displayed positions 12 through 15. This display convention does not follow from byte order alone.</t>
      <table anchor="flags-table">
        <name>Snapshot Flags</name>
        <thead>
          <tr>
            <th>Mask</th>
            <th>Name</th>
            <th>Rule</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>0x0001</td>
            <td>incompleteCapture</td>
            <td>Set exactly when C&lt;N</td>
          </tr>
          <tr>
            <td>0x0002</td>
            <td>nonAtomic</td>
            <td>Set when simultaneous capture is not established, or C=0</td>
          </tr>
          <tr>
            <td>0x0004</td>
            <td>spanUnknown</td>
            <td>Set exactly when span=UINT64_MAX</td>
          </tr>
          <tr>
            <td>0x0008</td>
            <td>approximateOccupancy</td>
            <td>Set if any captured value is an estimate; clear for C=0</td>
          </tr>
          <tr>
            <td>0xFFF0</td>
            <td>Unassigned</td>
            <td>Exporter sets zero; receiver treats nonzero as unsupported qualification</td>
          </tr>
        </tbody>
      </table>
      <t>For C=0, approximateOccupancy <bcp14>MUST</bcp14> be clear. For simultaneous C&gt;0 capture the span <bcp14>MUST</bcp14> be zero. These rules make the defined flags and span mutually checkable without asserting anything about uncaptured objects.</t>
    </section>
    <section anchor="examples">
      <name>Examples and Implementation Checks</name>
      <table anchor="vectors">
        <name>Collector Test Cases</name>
        <thead>
          <tr>
            <th>Object records before seal</th>
            <th>Final metadata</th>
            <th>Expected result</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>Q0=128, Q1=256; G=128</td>
            <td>N=2,C=2,span=0,flags=0</td>
            <td>Complete delivery; source asserts complete simultaneous capture</td>
          </tr>
          <tr>
            <td>Q0=128, Q0=128; G=128</td>
            <td>N=2,C=2,span=20,flags=2</td>
            <td>D=1; incomplete at seal</td>
          </tr>
          <tr>
            <td>Q0=128, Q0=128, Q1=256</td>
            <td>N=2,C=2,span=20,flags=2</td>
            <td>D=2; complete; duplicate counted once</td>
          </tr>
          <tr>
            <td>Q0=128, Q0=256</td>
            <td>Any seal</td>
            <td>Conflicting duplicate; invalid before seal</td>
          </tr>
          <tr>
            <td>Q0=128, Q1=256</td>
            <td>N=3,C=2,span=20,flags=3</td>
            <td>Complete delivery; partial acquisition</td>
          </tr>
          <tr>
            <td>None</td>
            <td>N=3,C=0,span=UINT64_MAX,flags=7</td>
            <td>Complete delivery; failed capture</td>
          </tr>
          <tr>
            <td>None</td>
            <td>N=0,C=0,span=UINT64_MAX,flags=6</td>
            <td>Complete delivery; empty scope</td>
          </tr>
          <tr>
            <td>Q0 only; then larger snapshot ID</td>
            <td>No seal</td>
            <td>Earlier snapshot incomplete; old ID cannot reopen</td>
          </tr>
          <tr>
            <td>Seal arrives first, then Q0</td>
            <td>N=1,C=1,span=0,flags=0</td>
            <td>Incomplete at seal; late Q0 discarded</td>
          </tr>
          <tr>
            <td>Q0=129; G=128</td>
            <td>Any seal</td>
            <td>Invalid accounting quantum</td>
          </tr>
          <tr>
            <td>Q0 arrives after completed seal</td>
            <td>Previously valid N=C=D</td>
            <td>Closed result unchanged; protocol violation reported</td>
          </tr>
        </tbody>
      </table>
      <t>A conforming implementation test <bcp14>SHOULD</bcp14> include two Observation Domains interleaving on one TCP stream, Template replacement rules, session restart with the same numeric snapshotId, timeout followed by a late seal, memory-cap exhaustion, unknown flags, malformed interface fields, and count overflow. Tests of the state machine alone do not demonstrate hardware capture accuracy or independent interoperability.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>IANA is requested to register the ten IEs in <xref target="ies"/> in the IPFIX Information Elements registry <xref target="IANA-IPFIX"/>. No existing IE allocation is changed. Numeric TBD values <bcp14>MUST NOT</bcp14> be transmitted as if assigned.</t>
      <section anchor="iana-enums">
        <name>Value Subregistries</name>
        <t>IANA is requested to create IPFIX Snapshot Trigger Types (unsigned8) and IPFIX Buffer Object Types (unsigned8), using Expert Review <xref target="RFC8126"/>. Each entry records Value, Name, Description, and Reference. Snapshot Trigger Types initially assigns 0 Unknown, 1 Management request, 2 Periodic timer, 3 Occupancy threshold crossing, 4 Buffer congestion discard, and 5 Local PFC assertion; 6-255 are unassigned. Buffer Object Types uses the values in <xref target="object-types"/>; 5-255 are unassigned.</t>
        <t>A trigger registration <bcp14>MUST</bcp14> describe the observed stimulus without claiming causal diagnosis. An object-type registration <bcp14>MUST</bcp14> define its identity, interface scope, accounting meaning, and Template field presence. Experts should prefer existing types when their semantics suffice and require a public specification for a new interpretation. Allocating a new type does not make older collectors understand it.</t>
      </section>
      <section anchor="iana-bits">
        <name>Flag Subregistry</name>
        <t>IANA is requested to create IPFIX Snapshot Flags with columns Numeric Mask, Name, Meaning, and Reference. The four assigned masks and the unassigned mask space are in <xref target="flags-table"/>. New assignments use Standards Action <xref target="RFC8126"/> and <bcp14>MUST</bcp14> specify their effect on validation, finalization, and older collectors. The numeric mask convention <bcp14>MUST</bcp14> be retained.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>The IPFIX security considerations in <xref target="RFC7011"/> apply. Occupancy and trigger reports can reveal workload timing, topology, and resource stress. Export destinations <bcp14>MUST</bcp14> be authorized. Implementations <bcp14>MUST</bcp14> support transport protection, apply access controls, and limit retention according to deployment policy. TLS authenticates a peer and protects its messages; it cannot make a compromised exporter truthful.</t>
      <t>N, C, identifiers, and rate are untrusted inputs. The collector limits in <xref target="collector"/> are mandatory. A peer can deliberately send a very large identifier, which retires smaller identifiers for that session; this affects only that authenticated session and Observation Domain. It <bcp14>MUST NOT</bcp14> affect another exporter or session. Replay from an earlier session <bcp14>MUST NOT</bcp14> be merged with current reassembly state.</t>
      <t>The absence of a snapshot or an incomplete result <bcp14>MUST NOT</bcp14> be interpreted as absence of congestion. Trigger suppression, an overloaded exporter, and resource limits can bias the observations. Using the telemetry to drive control decisions requires independent safeguards; this document defines no automatic congestion-control response.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/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"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC7011" target="https://www.rfc-editor.org/info/rfc7011">
        <front>
          <title>Specification of the IP Flow Information Export (IPFIX) Protocol for the Exchange of Flow Information</title>
          <author fullname="B. Claise" initials="B." role="editor" surname="Claise"/>
          <author fullname="B. Trammell" initials="B." role="editor" surname="Trammell"/>
          <author fullname="P. Aitken" initials="P." surname="Aitken"/>
          <date month="September" year="2013"/>
        </front>
        <seriesInfo name="STD" value="77"/>
        <seriesInfo name="RFC" value="7011"/>
        <seriesInfo name="DOI" value="10.17487/RFC7011"/>
      </reference>
      <reference anchor="RFC7012" target="https://www.rfc-editor.org/info/rfc7012">
        <front>
          <title>Information Model for IP Flow Information Export (IPFIX)</title>
          <author fullname="B. Claise" initials="B." role="editor" surname="Claise"/>
          <author fullname="B. Trammell" initials="B." role="editor" surname="Trammell"/>
          <date month="September" year="2013"/>
        </front>
        <seriesInfo name="RFC" value="7012"/>
        <seriesInfo name="DOI" value="10.17487/RFC7012"/>
      </reference>
      <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
        <front>
          <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
          <author fullname="M. Cotton" initials="M." surname="Cotton"/>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <author fullname="T. Narten" initials="T." surname="Narten"/>
          <date month="June" year="2017"/>
        </front>
        <seriesInfo name="BCP" value="26"/>
        <seriesInfo name="RFC" value="8126"/>
        <seriesInfo name="DOI" value="10.17487/RFC8126"/>
      </reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/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"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446">
        <front>
          <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
          <date month="August" year="2018"/>
        </front>
        <seriesInfo name="RFC" value="8446"/>
        <seriesInfo name="DOI" value="10.17487/RFC8446"/>
      </reference>
    </references>
    <references>
      <name>Informative References</name>
      <reference anchor="DISCARD-MODEL" target="https://datatracker.ietf.org/doc/html/draft-ietf-opsawg-discardmodel-16">
        <front>
          <title>Information and Data Models for Packet Discard Reporting</title>
          <author>
            <organization>IETF OPSAWG</organization>
          </author>
          <date year="2026" month="July" day="30"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-discardmodel-16"/>
      </reference>
      <reference anchor="I-D.ietf-rtgwg-qos-model" target="https://datatracker.ietf.org/doc/html/draft-ietf-rtgwg-qos-model-16">
        <front>
          <title>A YANG Data Model for Quality of Service (QoS) in IP Networks</title>
          <author fullname="A. Choudhary" initials="A." surname="Choudhary"/>
          <author fullname="M. Jethanandani" initials="M." surname="Jethanandani"/>
          <author fullname="E. Aries" initials="E." surname="Aries"/>
          <author fullname="I. Chen" initials="I." surname="Chen"/>
          <date day="25" month="September" year="2026"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-rtgwg-qos-model-16"/>
      </reference>
      <reference anchor="IANA-IPFIX" target="https://www.iana.org/assignments/ipfix/ipfix.xhtml">
        <front>
          <title>IP Flow Information Export (IPFIX) Entities</title>
          <author>
            <organization>IANA</organization>
          </author>
          <date/>
        </front>
      </reference>
      <reference anchor="MANIFEST" target="https://datatracker.ietf.org/doc/html/draft-ietf-opsawg-collected-data-manifest-16">
        <front>
          <title>A Data Manifest for Contextualized Telemetry Data</title>
          <author initials="B." surname="Claise" fullname="Benoît Claise"/>
          <author initials="J." surname="Quilbeuf" fullname="Jean Quilbeuf"/>
          <author initials="D." surname="Lopez" fullname="Diego Lopez"/>
          <author initials="I. D." surname="Martinez-Casanueva" fullname="Ignacio Dominguez Martinez-Casanueva"/>
          <author initials="T." surname="Graf" fullname="Thomas Graf"/>
          <date month="October" day="5" year="2026"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-collected-data-manifest-16"/>
      </reference>
      <reference anchor="RFC5473" target="https://www.rfc-editor.org/info/rfc5473">
        <front>
          <title>Reducing Redundancy in IP Flow Information Export (IPFIX) and Packet Sampling (PSAMP) Reports</title>
          <author fullname="E. Boschi" initials="E." surname="Boschi"/>
          <author fullname="L. Mark" initials="L." surname="Mark"/>
          <author fullname="B. Claise" initials="B." surname="Claise"/>
          <date month="March" year="2009"/>
        </front>
        <seriesInfo name="RFC" value="5473"/>
        <seriesInfo name="DOI" value="10.17487/RFC5473"/>
      </reference>
      <reference anchor="RFC6313" target="https://www.rfc-editor.org/info/rfc6313">
        <front>
          <title>Export of Structured Data in IP Flow Information Export (IPFIX)</title>
          <author fullname="B. Claise" initials="B." surname="Claise"/>
          <author fullname="G. Dhandapani" initials="G." surname="Dhandapani"/>
          <author fullname="P. Aitken" initials="P." surname="Aitken"/>
          <author fullname="S. Yates" initials="S." surname="Yates"/>
          <date month="July" year="2011"/>
        </front>
        <seriesInfo name="RFC" value="6313"/>
        <seriesInfo name="DOI" value="10.17487/RFC6313"/>
      </reference>
      <reference anchor="RFC7013" target="https://www.rfc-editor.org/info/rfc7013">
        <front>
          <title>Guidelines for Authors and Reviewers of IP Flow Information Export (IPFIX) Information Elements</title>
          <author fullname="B. Trammell" initials="B." surname="Trammell"/>
          <author fullname="B. Claise" initials="B." surname="Claise"/>
          <date month="September" year="2013"/>
        </front>
        <seriesInfo name="BCP" value="184"/>
        <seriesInfo name="RFC" value="7013"/>
        <seriesInfo name="DOI" value="10.17487/RFC7013"/>
      </reference>
      <reference anchor="RFC8641" target="https://www.rfc-editor.org/info/rfc8641">
        <front>
          <title>Subscription to YANG Notifications for Datastore Updates</title>
          <author fullname="A. Clemm" initials="A." surname="Clemm"/>
          <author fullname="E. Voit" initials="E." surname="Voit"/>
          <date month="September" year="2019"/>
        </front>
        <seriesInfo name="RFC" value="8641"/>
        <seriesInfo name="DOI" value="10.17487/RFC8641"/>
      </reference>
      <reference anchor="RFC9951" target="https://www.rfc-editor.org/info/rfc9951">
        <front>
          <title>Export of Delay Performance Metrics in IP Flow Information Export (IPFIX)</title>
          <author>
            <organization>RFC Editor</organization>
          </author>
          <date year="2026" month="April"/>
        </front>
        <seriesInfo name="RFC" value="9951"/>
      </reference>
      <reference anchor="SAI-BUFFER" target="https://github.com/opencomputeproject/SAI/blob/master/inc/saibuffer.h">
        <front>
          <title>Switch Abstraction Interface: Buffer API</title>
          <author>
            <organization>Open Compute Project</organization>
          </author>
          <date/>
        </front>
      </reference>
      <reference anchor="SAI-QUEUE" target="https://github.com/opencomputeproject/SAI/blob/master/inc/saiqueue.h">
        <front>
          <title>Switch Abstraction Interface: Queue API</title>
          <author>
            <organization>Open Compute Project</organization>
          </author>
          <date/>
        </front>
      </reference>
    </references>
  </back>
</rfc>
