<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.1 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lindblad-tlm-philatelist-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="Philatelist">Philatelist, YANG-based collection and aggregation framework integrating Telemetry data and Time Series Databases</title>
    <seriesInfo name="Internet-Draft" value="draft-lindblad-tlm-philatelist-00"/>
    <author fullname="Jan Lindblad">
      <organization>Cisco</organization>
      <address>
        <email>jlindbla@cisco.com</email>
      </address>
    </author>
    <date year="2023" month="October" day="20"/>
    <area>OPS</area>
    <workgroup>NETMOD</workgroup>
    <keyword>YANG</keyword>
    <keyword>telemetry</keyword>
    <keyword>collection</keyword>
    <keyword>aggregation</keyword>
    <keyword>time series database</keyword>
    <keyword>TSDB</keyword>
    <abstract>
      <?line 43?>

<t>Timestamped telemetry data is collected en masse today.  Mature tools are typically used, but the data is often collected in an ad hoc manner.  While the dashboard graphs look great, the resulting data is often of questionable quality, not well defined, and hard to compare with seemingly similar data from other organizations.</t>
      <t>This document proposes a standard, extensible, cross domain framework for collecting and aggregating timestamped telemetry data in a way that combines YANG, metadata and Time Series Databases to produce more dependable and comparable results.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://janlindblad.github.io/netmod-tlm-philatelist/draft-lindblad-tlm-philatelist.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-lindblad-tlm-philatelist/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/janlindblad/netmod-tlm-philatelist"/>.</t>
    </note>
  </front>
  <middle>
    <?line 49?>

<section anchor="introduction">
      <name>Introduction</name>
      <section anchor="the-problem">
        <name>The Problem</name>
        <t>Many organizations today are collecting large amounts of telemetry data from their networks and data centers for a variety of purposes.  Much (most?) of this data is funneled into a Time Series Database (TSDB) for display in a dashboard or further (AI-backed) processing and decision making.</t>
        <t>While this data collection is often handled using standard tools, there generally seems to be little commonality when it comes to what is meaured, how the data is aggregated, or definitions of the measured quantities (if any).</t>
        <t>Data science issues like adding overlapping quantities, adding quantities of different units of measurement, or quantities with different scopes, are likely common.  Such errors are hard to detect given the ad hoc nature of the collection.  This often leads to uncertainty regarding the quality of the conclusions drawn from the collected data.</t>
      </section>
      <section anchor="the-solution">
        <name>The Solution</name>
        <t>The Philatelist framework proposes to standardize the collection, definitions of the quantities measured and meta data handling to provide a robust ground layer for telemetry collection.  The architecture defines a few interfaces, but allows great freedom in the implementations with its plug-in architecture.  This allows flexibility enough that any kind of quantitiy can be measured, any kind of collection protocol and mechanism employed, and the data flows aggregated using any kind of operation.</t>
        <t>To do this, YANG is used both to describe the quantities being measured, as well as act as the framework for the metadata management.  Note that the usa of YANG here does not limit the architecture to traditional YANG-based transport protocols.  YANG is used to describe the data, regardless of which format it arrives in.</t>
        <t>Initially developed in context of the Power and Energy Efficiency work (POWEFF), we realized both the potential and the need for this collection and aggregation architecture to become a general framework for collection of a variety of metrics.</t>
        <t>There is not much point in knowing the "cost side" of a running system (as in energy consumption or CO2-emissions) if that cannot be weighed against the "value side" delivered by the system (as in transported bytes, VPN connections, music streaming hours, or number of cat videos, etc.), which means traditional performance metrics will play an equally important role in the collection.</t>
        <t>In this initial version, we have done nothing to pull the proposed YANG modules out of its POWEFF roots and generalize it for general telemetry.  We believe the ideas and merits of this framework architecture will be apparent nonetheless in this first version.  For the next version, we certainly need to generalize the quantities measured and rename the YANG modules and node names.</t>
      </section>
      <section anchor="the-philatelist-name">
        <name>The Philatelist Name</name>
        <t>This specification is about a framework for collection, aggregation and interpretation of timestamped telemetry data.  The definition of "philatelist" seems close enough.</t>
        <figure>
          <name>Source: https://www.synonym.com/synonyms/philatelist</name>
          <artwork><![CDATA[
1. philatelist

noun. ['fɪˈlætəlɪst'] a collector and student of postage stamps.

Synonyms
- collector
- aggregator

]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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>
      <?line -18?>

<t>This document uses the terminology defined in
<xref target="RFC7950"/>.</t>
      <t>In addition, this document defines the following terms:</t>
      <dl>
        <dt>TSDB</dt>
        <dd>
          <t>Time Series Database.</t>
        </dd>
        <dt>Sensor</dt>
        <dd>
          <t>An entity in a system that delivers a snapshot value of some quantity pertaining to the system.  Sensors are identified by their Sensor Path.</t>
        </dd>
        <dt>Sensor Path</dt>
        <dd>
          <t>A textual representation of the sensor's address within the system.</t>
        </dd>
      </dl>
    </section>
    <section anchor="architecure-overview">
      <name>Architecure Overview</name>
      <t>The deployment of a Philatelist framework consists of a collection of plug-in compomnents with well defined interfaces.  Here is an example of a deployment.  Each box is numbered in the lower right for easy reference.</t>
      <figure>
        <name>Example Philatelist component deployment.</name>
        <artwork><![CDATA[
                      +-----------------+
                      | USER INTERFACE  |
                      |    Dashboard    |
                      |                 |
                      +--------------11-+
                               |
                      +-----------------+
                      |    PROCESSOR    |
                      | Recommendation  |
                      |     Engine      |
                      +--------------21-+
                               |
                      +-----------------+
                      |   AGGREGATOR    |
                      |   Data Center   |
                      +--------------31-+
                               |
       +---------------+-------+-------+--------------+
       |               |               |              |
+------------+  +------------+  +------------+  +------------+
| PROCESSOR  |  | AGGREGATOR |  | AGGREGATOR |  | AGGREGATOR |
| Normalizer |  |  Network   |  |  Storage   |  |  Compute   |
+---------41-+  +---------42-+  +---------43-+  +---------44-+
       |           |                   |\             |\
+------------+     |     +------+------------+  +------------+------+
| COLLECTOR  |     |     | YANG | COLLECTOR  |  | COLLECTOR  | YANG |
|  Cooling   |     |     +---52-+ Storage 1  |  | Compute 1  +---55-+
+---------51-+     |            +---------53-+  +---------54-+
       |           |             \ Storage 2  \  \ Compute 2  \
+------------+     |              +------------+  +------------+
|  PROVIDER  |     |               \ Storage N  \  \ Compute N  \
|Utility Bill|     |                +------------+  +------------+
+---------61-+     |
                   +--------------+
                   |              |
            +------------+  +------------+
            | PROCESSOR  |  | COLLECTOR  |
            | Normalizer |  |  Routers   |
            +---------71-+  +---------72-+
                   |              |\
            +------------+  +------------+
            | COLLECTOR  |  |  PROVIDER  |
            |  Firewall  |  |  Router 1  |
            +---------81-+  +---------82-+
                   |         \  Router 2  \
            +------------+    +------------+
            |  PROVIDER  |     \  Router N  \
            |  Firewall  |      +------------+
            +---------91-+

]]></artwork>
      </figure>
      <t>Each component in the above diagram, represents a logical function.  Many boxes could be running within a single server, or they could be fully distrubuted, or anything in between.</t>
      <t>Provider components (61, 82, 91) are running on a telemetry source system that supports a YANG-based telemetry data server.  The telemetry data flows from the telemetry source system to a Time Series Database (TSDB).</t>
      <t>Collector components (51, 72, 81) ensure the Providers are programmed properly to deliver the telemetry data to the TSDB designated by the collector.  In some cases this flow may be direct from the source to the TSDB, in other cases, it may be going through the collector.  In some cases the collector may be polling the source, in others it may have set up an automatic, periodic subscription.</t>
      <t>Many telemetry source systems will not have any on-board YANG-based telemetry server.  Such servers will instead be managed by a collector specialized to handle a particular kind of source server (53, 54).  These specialized collectors are still responsible to set up a telemetry data stream from them to the collector's TSDB.  In this case, the collector will also supply a YANG description (52, 55) of the incoming data stream.</t>
      <t>Processor components (21, 41, 71) are transforming the data stream in some way, e.g. converting from one unit of measurement to another, or adjusting the data values recorded to also include some aspect that this particular sensor is not taking into account.</t>
      <t>Aggregator components (31, 42, 43, 44) combine the time series telemetry data flows using some operation, e.g. summing, averaging or computing the max or min over them.  In this example there are aggregators for Network, Storage, Compute and the entire Data Center</t>
      <t>On top of the stack, we may often find a (graphical) user interface (11), for human consumption of the intelligence acquired by the system.  Equally relevant is of course an (AI) application making decisions based on findings in the aggregated telemetry flow.</t>
      <section anchor="the-provider-component">
        <name>The Provider Component</name>
        <t>A Provider is a source of telemetry data that also offers a YANG-based management interface.  Each provider typically has a large number of "sensors" that can be polled or in some cases subscribed to.</t>
        <t>One problem with the sensors is that they are spread around inside the source system, and may not be trivial to locate.  Also, the metadata assciated with the sensor is often only missing or only available in human readable form (free form strings), rather than in a strict machine parsable format.</t>
        <figure>
          <name>Example of scattered potential sensors in a device.</name>
          <artwork><![CDATA[
    /hardware/component[name="psu3"]/.../sensor-data/value
    ...
    /interfaces/interface[name="eth0/0"]/.../out-broadcast-packets
    ...
    /routing/mpls/mpls-label-blocks/.../inuse-labels-count
    ...
]]></artwork>
        </figure>
        <t>To solve these problems, the Provider YANG module contains a sensor-catalog list.  Essentially a list of all interesting sensors available on the system, with their sensor paths and machine parsable units, definition and any other metadata.</t>
        <t>An admin user or application can then copy the sensor definition from the sensor catalog and insert into the configuration in the colletor.</t>
        <figure>
          <name>YANG tree diagram of the Provider sensor-catalog.</name>
          <sourcecode type="yang-tree"><![CDATA[
  +--ro sensor-catalog
      +--ro sensors
        +--ro sensor* [path]
            +--ro path?                     xpath
            +--ro sensor-type?              identityref
            +--ro sensor-location?          something
            +--ro sensor-state?             something
            +--ro sensor-current-reading?   something
            +--ro sensor-precision?         string
]]></sourcecode>
        </figure>
        <t>Note: The "something" YANG-type is used in many places in this document.  That is just a temporarty placeholder we use until we have figured out what the appropriate type should be.</t>
        <t>The sensor types are defined as YANG identities, making them maximally extensible.  Examples of sensor types might be energy measured in kWh, or energy measured in J, or temperature measured in F, or in C, or in K.</t>
      </section>
      <section anchor="the-collector-component">
        <name>The Collector Component</name>
        <t>Collector components collect data points from sources, typically by periodic polling or subscriptions, and ensure the collected data is stored in a Time Series Database (TSDB).  The actual data stream may or may not be passing through the collector component; the collector is responsible for ensuring data flows from the source to the destination TSDB and that the data has a YANG description and is tagged with necessary metadata.  How the collector agrees with a source to deliver data in a timely manner is beyond the scope of this document.</t>
        <figure>
          <name>Example of Collector setting up three streams of telemetry data from two sources to one desitination.</name>
          <artwork><![CDATA[
         +-------------+
         |  COLLECTOR  |
         +-------------+                     ___________
                |                           /           \
      +------------------+                 ( DESTINATION )
      v                  v                 |\___________/|
+------------+    +------------+  STREAM 1 |             |
|   SOURCE   |    |   SOURCE   |  =======> |             |
| - sensor 1 |    | - sensor 1 |           |             |
| - sensor 2 |    | - sensor 4 |  STREAM 2 |             |
| - sensor 3 |    | - sensor 7 |  =======> |             |
+------------+    +------------+           |             |
          \\                      STREAM 3 |             |
            =============================>  \___________/

]]></artwork>
        </figure>
        <t>Each source holds a number of sensors that may be queried or subscribed to.  The collector arranges the sensors into sensour groups that presumably are logically related, and that are collected using the same method.  A number of collection methods (some YANG-based, some not) are modeled directly in the ietf-poweff-collector.yang module, but the set is designed to be easily extensible.</t>
        <figure>
          <name>YANG tree diagram of the Collector sensor-groups and streams.</name>
          <sourcecode type="yang-tree"><![CDATA[
  +-- sensor-groups
  |  +-- sensor-group* [id]
  |     +-- id?                                something
  |     +-- method?                            identityref
  |     +-- get-static-url-once
  |     |  +-- url?                            something
  |     |  +-- format?                         something
  |     +-- gnmi-polling
  |     |  +-- encoding?                       something
  |     |  +-- protocol?                       something
  |     +-- restconf-get-polling
  |     |  +-- xxx?                            something
  |     +-- netconf-get-polling
  |     |  +-- xxx?                            something
  |     +-- restconf-yang-push-subscription
  |     |  +-- xxx?                            something
  |     +-- netconf-yang-push-subscription
  |     |  +-- xxx?                            something
  |     +-- redfish-polling
  |     |  +-- xxx?                            something
  |     +-- frequency?                         sample-frequency
  |     +-- path* [path]
  |        +-- path?                           xpath
  |        +-- sensor-type?                    identityref
  +-- streams
    +-- stream* [id]
        +-- id?                                something
        +-- source*                            string
        +-- sensor-group* [name]
        |  +-- name?   -> ../../../sensor-groups/sensor-group/id
        +-- destination?    -> ../../../destinations/destination/id
]]></sourcecode>
        </figure>
        <t>The sensor groups are then arranged into streams from a collection of sources (that support the same set of sensor groups) to a destination.  This structure has been chosen with the assumption that there will be many source devices with the same set of sensor groups, and we want to minimize repetition.</t>
      </section>
      <section anchor="the-processor-and-aggregator-components">
        <name>The Processor and Aggregator Components</name>
        <t>Processor components take an incoming data flow and transforms it somehow, and possibly augments it with a flow of derived information.  The purpose of the transformation could be to convert between different units of measurement, correct for known errors in in the input data, or fill in approximate values where there are holes in the input data.</t>
        <t>Aggregator components take multiple incoming data flows and combine them, typically by adding them together, taking possible differences in cadence in the input data flows into account.</t>
        <t>Processor and Aggregator components provide a YANG model of the output data, just like the Collector components, so that all data flowing in the system has a YANG description and is associated with metadata.</t>
        <t>Note: In the current version of the YANG modules, a Processor is simply an Aggregator with a single input and output.  Unless we see a need to keep these two component types separate, we might remove the Processor component and keep it baked in with the Aggregator.</t>
        <figure>
          <name>Example of an Aggregator setting up two flows of telemetry data from two sources to one desitination.</name>
          <artwork><![CDATA[
                +-------------+
                | AGGREGATOR  |
                +-------------+
                       |
           +-----------+-----------+
           v                       v
      ___________             ___________
     /           \           /           \
    (  SOURCE 1   )         ( DESTINATION )
    |\___________/| FLOW 1  |\___________/|
    |             | ======> |             |
    |             |         |             |
    |             | FLOW 2  |             |
     \___________/  ===##=>  \___________/
                       ||
      ___________      ||
     /           \     ||
    (  SOURCE 2   )   //
    |\___________/| ==
    |             |
    |             |
    |             |
     \___________/

]]></artwork>
        </figure>
        <t>In this diagram, the sources and destination look like separate TSDBs, which they might be.  They may also be different buckets within the same TSDB.</t>
        <t>Each flow is associated with one or more inputs, one output and a series of processing operations.  Each input flow and output flow may have an pre-processing or post-processing operation applied to it separately.  Then all the input flows are combined using one or more aggregation operations.  Some basic operations have been defined in the Aggregator YANG module, but the set of operations has been designed to be maximally extensible.</t>
        <figure>
          <name>YANG tree diagram of the Aggregator flows and operations.</name>
          <sourcecode type="yang-tree"><![CDATA[
  +-- flows
  |  +-- flow* [id]
  |     +-- id?                                string
  |     +-- (chain-position)?
  |        +--:(input)
  |        |  +-- input
  |        |     +-- source?
  |        |           -> ../../../../../sources/source/id
  |        +--:(output)
  |        |  +-- output
  |        |     +-- destination?
  |        |           -> ../../../../../destinations/destination/id
  |        +--:(middle)
  |           +-- middle
  |              +-- inputs*
  |              |     -> ../../../../flows/flow/id
  |              +-- pre-process-inputs?
  |              |     -> ../../../../operations/operation/id
  |              +-- aggregate?
  |              |     -> ../../../../operations/operation/id
  |              +-- post-process-output?
  |                    -> ../../../../operations/operation/id
  +-- operations
    +-- operation* [id]
        +-- id?                                something
        +-- (op-type)?
          +--:(linear-sum)
          |  +-- linear-sum
          +--:(linear-average)
          |  +-- linear-average
          +--:(linear-max)
          |  +-- linear-max
          +--:(linear-min)
          |  +-- linear-min
          +--:(rolling-average)
          |  +-- rolling-average
          |     +-- timespan?                  something
          +--:(filter-age)
          |  +-- filter-age
          |     +-- min-age?                   something
          |     +-- max-age?                   something
          +--:(function)
              +-- function
                +-- name?                      something
]]></sourcecode>
        </figure>
        <t>The operations listed above are basic aggregation operations.  Linear-sum is just adding all the input sources together, with linear interpolation when their data points don't align perfectly in time.  Rolling average is averaging the input flows over a given length of time.  The filter-age drops all data points that are outside the min to max age.  The function allows plugging in any other function the Aggregator may have defined, but more importantly, the operations choice is easily extended using YANG augment to include any other IETF or vendor specified extensions.</t>
      </section>
    </section>
    <section anchor="yang-based-telemetry-outlook">
      <name>YANG-based Telemetry Outlook</name>
      <t>Much work has already gone into the area of telemetry, YANG, and even their intersection.  E.g. <xref target="I-D.draft-ietf-opsawg-collected-data-manifest-01"/> and <xref target="I-D.draft-claise-netconf-metadata-for-collection-03"/> come to mind.</t>
      <t>Even though this work has a solid foundation and shares many or most of the goals with this work, we (the POWEFF team) have not found it easy to apply the above work directly in the practical work we do.  So what we have tried to do is a very pragmatic approach to telemetry data collection the way we see it happening on the ground combined with the benefits of Model Driven Telemetry (MDT), in practice meaning YANG-based with additional YANG-modeled metadata.</t>
      <t>Many essential data sources in real world deployments do not support any YANG-based interfaces, and that situation is expected to remain for the forseable future, which is why we find it important to be able to ingest data from free form (often REST-based) interfaces, and then add the necessary rigor on the Collector level.  Then output the datastreams in formats that existing, mature tools can consume directly.</t>
      <t>In particular, this draft depends on the mapping of YANG-based structures to the typical TSDB tag-based formats described in <xref target="I-D.draft-kll-yang-label-tsdb-00"/>.</t>
      <t>For the evolution of the YANG-based telemetry area, we believe this approach, combining pragmatism in the data flow interfaces with rigor regarding the data content, is key.  We would like to make this work fit in with the works of others in the field.</t>
    </section>
    <section anchor="yang-modules">
      <name>YANG Modules</name>
      <section anchor="base-types-module-for-philatelist">
        <name>Base types module for Philatelist</name>
        <sourcecode type="yang" markers="true"><![CDATA[
module ietf-poweff-types {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-poweff-types";
  prefix ietf-poweff-types;

  organization
    "IETF OPSA (Operations and Management Area) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>
     Editor:  Jan Lindblad
              <mailto:jlindbla@cisco.com>
     Editor:  Snezana Mitrovic
              <mailto:snmitrov@cisco.com>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>";
  description
    "This YANG module defines basic quantities, measurement units
    and sensor types for the POWEFF framework.

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

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

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";
  
  revision 2023-10-12 {
    description
      "Initial revision of POWEFF types";
    reference
      "RFC XXXX: ...";
  }

  typedef something { // FIXME: Used when we haven't decided the type yet
    type string;
  }
  typedef xpath {
    type string; // FIXME: Proper type needed
  }
  typedef sample-frequency {
    type string; // FIXME: Proper type needed
  }

  // ========== SENSOR-CLASS ==============================
  identity sensor-class {
    description "Sensor's relation to the asset it sits on.";
  }
  identity sc-input {
    base sensor-class;
    description "Sensor reports input quantity of the asset it sits 
      on.";
  }
  identity sc-output {
    base sensor-class;
    description "Sensor reports output quantity of the asset it sits 
      on.";
  }
  identity sc-allocated {
    base sensor-class;
    description "Sensor reports (maximum) allocated quantity of the 
      asset it sits on.";
  }

  // ========== SENSOR-QUANTITY ==============================
  identity sensor-quantity {
    description "Sensor's quantity being measured.";
  }
  identity sq-voltage {
    base sensor-quantity;
    description "Sensor reports electric tension, voltage.";
  }
  identity sq-current {
    base sensor-quantity;
    description "Sensor reports electric current.";
  }
  identity sq-power {
    base sensor-quantity;
    description "Sensor reports power draw (energy per unit of time).";
  }
  identity sq-power-apparent {
    base sq-power;
    description "Sensor reports apparent power, i.e. average electrical
      current times voltage (in VA).";
  }
  identity sq-power-true {
    base sq-power;
    description "Sensor reports true power, i.e. integral over current
      and voltage at each instant in time.";
  }
  identity sq-energy {
    base sensor-quantity;
    description "Sensor reports actual energy drawn by asset.";
  }
  identity sq-co2-emission {
    base sensor-quantity;
    description "Sensor reports CO2 (carbon dioxide) emission by 
      asset.";
  }
  identity sq-co2eq-emission {
    base sensor-quantity;
    description "Sensor reports CO2 (carbon dioxide) equivalent
      emission by asset.";
  }
  identity sq-temperature {
    base sensor-quantity;
    description "Sensor reports temperature of asset.";
  }

  // ========== SENSOR-UNIT ==============================
  identity sensor-unit {
    description "Sensor's unit of reporting.";
  }
  identity su-volt {
    base sensor-unit;
    base sq-voltage;
    description "Sensor unit volt, V.";
  }
  identity su-ampere {
    base sensor-unit;
    base sq-current;
    description "Sensor unit ampere, A.";
  }
  identity su-watt {
    base sensor-unit;
    base sq-power;
    description "Sensor unit watt, W.";
  }
  identity su-voltampere {
    base sensor-unit;
    base sq-power;
    description "Sensor unit Volt*Ampere, VA.";
  }
  identity su-kw {
    base sensor-unit;
    base sq-power;
    description "Sensor unit kilowatt, kW.";
  }
  identity su-joule {
    base sensor-unit;
    base sq-energy;
    description "Sensor unit joule, J.";
  }
  identity su-wh {
    base sensor-unit;
    base sq-energy;
    description "Sensor unit watthour, Wh.";
  }
  identity su-kwh {
    base sensor-unit;
    base sq-energy;
    description "Sensor unit kliowatthour, kWh.";
  }
  identity su-kelvin {
    base sensor-unit;
    base sq-temperature;
    description "Sensor unit kelvin, K.";
  }
  identity su-celsius {
    base sensor-unit;
    base sq-temperature;
    description "Sensor unit celsius, C.";
  }
  identity su-farenheit {
    base sensor-unit;
    base sq-temperature;
    description "Sensor unit farenheit, F.";
  }
  identity su-gram {
    base sensor-unit;
    base sq-co2-emission;
    description "Sensor unit gram, g.";
  }
  identity su-kg {
    base sensor-unit;
    base sq-co2-emission;
    description "Sensor unit kliogram, kg.";
  }
  identity su-ton {
    base sensor-unit;
    base sq-co2-emission;
    description "Sensor unit ton, t.";
  }

  // ========== SENSOR-TYPE ==============================
  identity sensor-type {
    description "Sensor's type, i.e. combination of class, quantity and
      unit.";
  }
  identity st-v-in {
    base sensor-type;
    base sc-input;
    base sq-voltage;
    base su-volt;
    description "Sensor reporting Voltage In to asset.";
  }
  identity st-v-out {
    base sensor-type;
    base sc-output;
    base sq-voltage;
    base su-volt;
    description "Sensor reporting Voltage Out of asset.";
  }
  identity st-i-in {
    base sensor-type;
    base sc-input;
    base sq-current;
    base su-ampere;
    description "Sensor reporting Current In to asset.";
  }
  identity st-i-out {
    base sensor-type;
    base sc-output;
    base sq-current;
    base su-ampere;
    description "Sensor reporting Current Out of asset.";
  }
  identity st-p-in-apparent-watt {
    base sensor-type;
    base sc-input;
    base sq-power-apparent;
    base su-voltampere;
    description "Sensor reporting Power In to asset as apparent (I*U)
      power.";
  }
  identity st-p-out-apparent-watt {
    base sensor-type;
    base sc-output;
    base sq-power-apparent;
    base su-voltampere;
    description "Sensor reporting Power Out of asset as apparent (I*U)
      power.";
  }
  identity st-p-in-true-watt {
    base sensor-type;
    base sc-input;
    base sq-power-true;
    base su-watt;
    description "Sensor reporting Power In to asset as true power.";
  }
  identity st-p-out-true-watt {
    base sensor-type;
    base sc-output;
    base sq-power-true;
    base su-watt;
    description "Sensor reporting Power Out of asset as true power.";
  }
  identity st-p-allocated-watt {
    base sensor-type;
    base sc-allocated;
    base sq-power;
    base su-watt;
    description "Sensor reporting Allocated Power for asset.";
  }
  identity st-w-j {
    base sensor-type;
    base sq-energy;
    base su-joule;
    description "Sensor reporting energy draw of asset in J.";
  }
  identity st-w-wh {
    base sensor-type;
    base sq-energy;
    base su-wh;
    description "Sensor reporting energy draw of asset in Wh.";
  }
  identity st-w-kwh {
    base sensor-type;
    base sq-energy;
    base su-kwh;
    description "Sensor reporting energy draw of asset in kWh.";
  }
  identity st-t-k {
    base sensor-type;
    base sq-temperature;
    base su-kelvin;
    description "Sensor reporting Temperature of asset in K.";
  }
  identity st-t-c {
    base sensor-type;
    base sq-temperature;
    base su-celsius;
    description "Sensor reporting Temperature of asset in °C.";
  }
  identity st-t-f {
    base sensor-type;
    base sq-temperature;
    base su-farenheit;
    description "Sensor reporting Temperature of asset in °F.";
  }

  // ========== COLLECTION-METHOD ==============================

  identity collection-method;
  identity cm-polled {
    base collection-method;
  }
  identity cm-gnmi {
    base collection-method;
  }
  identity cm-restconf {
    base collection-method;
  }
  identity cm-netconf {
    base collection-method;
  }
  identity cm-redfish {
    base collection-method;
  }
  identity get-static-url-once {
    base collection-method;
  }
  identity gnmi-polling {
    base cm-gnmi;
    base cm-polled;
  }
  identity restconf-get-polling {
    base cm-restconf;
    base cm-polled;
  }
  identity netconf-get-polling {  
    base cm-netconf;
    base cm-polled;
  }
  identity restconf-yang-push-subscription {
    base cm-restconf;
  }
  identity netconf-yang-push-subscription {
    base cm-netconf;
  }
  identity redfish-polling {
    base cm-redfish;
  }
}
]]></sourcecode>
      </section>
      <section anchor="provider-interface-module-for-philatelist">
        <name>Provider interface module for Philatelist</name>
        <sourcecode type="yang" markers="true"><![CDATA[
module ietf-poweff-provider {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-poweff-provider";
  prefix ietf-poweff-provider;

  import ietf-poweff-types {
    prefix ietf-poweff-types;
  }

  organization
    "IETF OPSA (Operations and Management Area) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>
     Editor:  Jan Lindblad
              <mailto:jlindbla@cisco.com>
     Editor:  Snezana Mitrovic
              <mailto:snmitrov@cisco.com>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>";
  description
    "This YANG module defines the POWEFF Provider.

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

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

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";
  
  revision 2023-10-12 {
    description
      "Initial revision of POWEFF Provider";
    reference
      "RFC XXXX: ...";
  }

  grouping provider-g {
    container sensor-catalog {
      config false;
      container sensors {
        list sensor {
          key path;
          leaf path { type ietf-poweff-types:xpath; }
          leaf sensor-type { type identityref { base ietf-poweff-types:sensor-type; }}

          leaf sensor-location {
            type ietf-poweff-types:something;
            description
              "Indicates the current location where the sensor is located
                in the chassis,typically refers to slot";
          }
          leaf sensor-state { // FIXME: What does this mean?
            type ietf-poweff-types:something;
            description
              "Current state of the sensor";
          }
          leaf sensor-current-reading { // FIXME: Do we want a copy of the value here?
            type ietf-poweff-types:something;
            description
              "Current reading of the sensor";
          }
          leaf sensor-precision {
            type string;
            description
              "Maximum deviation to be considered. This attribute mainly
              will apply to drawn power, which corresponds to PSU PowerIn
              measured power or calculated power; assuming discrepancy
              between Real Power, power collected from a power meter, and
              power measured or calculated from the metrics provided by
              the sensors";
          }
          container sensor-thresholds { // FIXME: Is this for generating alarms, or what?
            description 
              "Threshold values for the particular sensor. 
              Default values shall beprovided as part of static data 
              but when configurable need to be pulledfrom the device. 
              Ideally, the sensor should allow configuing 
              thesethreshold values";
        
            leaf minor-low {
              type string; 
              description
                "minor-low";
            }
            leaf minor-high {
              type string; 
              description
                "minor-high";
            }
            leaf major-low {
              type string; 
              description
                "major-low";
            }
            leaf major-high {
              type string; 
              description
                "major-high";
            }
            leaf critical-low {
              type string; 
              description
                "critical-low";
            }
            leaf critical-high {
              type string; 
              description
                "critical-high";
            } 
            leaf shutdown { // FIXME: What does this mean for a sensor?
              type string; 
              description
                "shutdown";
            }                           
          }
        }
      }
    }
  }
}
]]></sourcecode>
      </section>
      <section anchor="collector-interface-module-for-philatelist">
        <name>Collector interface module for Philatelist</name>
        <sourcecode type="yang" markers="true"><![CDATA[
module ietf-poweff-collector {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-poweff-collector";
  prefix ietf-poweff-collector;

  import ietf-poweff-types {
    prefix ietf-poweff-types;
  }

  organization
    "IETF OPSA (Operations and Management Area) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>
     Editor:  Jan Lindblad
              <mailto:jlindbla@cisco.com>
     Editor:  Snezana Mitrovic
              <mailto:snmitrov@cisco.com>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>";
  description
    "This YANG module defines the POWEFF Collector.

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

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

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";
  
  revision 2023-10-12 {
    description
      "Initial revision of POWEFF Collector";
    reference
      "RFC XXXX: ...";
  }

/*

  A COLLECTOR programs one or more SOURCE(s) to generate a
  STREAM of telemetry data.  The STREAM is sent to a specific
  DESTINATION.
  
  Each STREAM consists of timestamped sensor values from each
  sensor in a sensor group.

             +-------------+
             |  COLLECTOR  |
             +-------------+                     ___________
                    |                           /           \
          +------------------+                 ( DESTINATION )
          v                  v                 |\___________/|
    +------------+    +------------+  STREAM 1 |             |
    |   SOURCE   |    |   SOURCE   |  =======> |             |
    | - sensor 1 |    | - sensor 1 |           |             |
    | - sensor 2 |    | - sensor 4 |  STREAM 2 |             |
    | - sensor 3 |    | - sensor 7 |  =======> |             |
    +------------+    +------------+           |             |
              \\                      STREAM 3 |             |
                =============================>  \___________/

*/

  grouping data-endpoint-g {
    leaf url { type ietf-poweff-types:something; }
    leaf organization { type ietf-poweff-types:something; }
    leaf bucket { type ietf-poweff-types:something; }
    container impl-specific {
      list binding {
        key key;
        leaf key { type string; }
        choice value-type {
          leaf value { type string; }
          leaf-list values { type string; ordered-by user; }
          leaf env-var { type string; }
        }
      }
    }
  }

  grouping sensor-group-g {
    leaf method {
      type identityref {
        base ietf-poweff-types:collection-method;
      }
    }
    container get-static-url-once {
      when "derived-from-or-self(../method, 'ietf-poweff-types:get-static-url-once')";
      leaf url { type ietf-poweff-types:something; }
      leaf format { type ietf-poweff-types:something; } // JSON-IETF, XML, etc
    }
    container gnmi-polling {
      when "derived-from-or-self(../method, 'ietf-poweff-types:gnmi-polling')";
      leaf encoding { type ietf-poweff-types:something; } // self-describing-gpb
      leaf protocol { type ietf-poweff-types:something; } // protocol grpc no-tls
    }
    container restconf-get-polling {
      when "derived-from-or-self(../method, 'ietf-poweff-types:restconf-get-polling')";
      leaf xxx { type string; }
    }
    container netconf-get-polling {
      when "derived-from-or-self(../method, 'ietf-poweff-types:netconf-get-polling')";
      leaf xxx { type string; }
    }
    container restconf-yang-push-subscription {
      when "derived-from-or-self(../method, 'ietf-poweff-types:restconf-yang-push-subscription')";
      leaf xxx { type string; }
    }
    container netconf-yang-push-subscription {
      when "derived-from-or-self(../method, 'ietf-poweff-types:netconf-yang-push-subscription')";
      leaf xxx { type string; }
    }
    container redfish-polling {
      when "derived-from-or-self(../method, 'ietf-poweff-types:redfish-polling')";
      leaf xxx { type string; }
    }
    leaf frequency { 
      when "derived-from(../method, 'ietf-poweff-types:cm-polled')";
      type ietf-poweff-types:sample-frequency; 
    }
    list path {
      key path;
      leaf path { type ietf-poweff-types:xpath; }
      leaf sensor-type { type identityref { base ietf-poweff-types:sensor-type; }}
      leaf attribution { type string; }
    }
  }

  grouping collector-g {
    container poweff-collector {
      container destinations {
        list destination {
          key id;
          leaf id { type ietf-poweff-types:something; }
          uses data-endpoint-g;
        }
      }

      container sensor-groups {
        list sensor-group {
          key id;
          leaf id { type ietf-poweff-types:something; }
          uses sensor-group-g;
        }
      }

      container streams {
        list stream {
          key id;
          leaf id { type ietf-poweff-types:something; }
          leaf-list source { type string; } // Implementation specific meaning, possibly wildcards
          list sensor-group { 
            key name;
            leaf name { type leafref { path ../../../sensor-groups/sensor-group/id; }}
          }
          leaf destination { type leafref { path ../../../destinations/destination/id; }}
        }
      }
    }
  }
}
]]></sourcecode>
      </section>
      <section anchor="aggregator-interface-module-for-philatelist">
        <name>Aggregator interface module for Philatelist</name>
        <sourcecode type="yang" markers="true"><![CDATA[
module ietf-poweff-aggregator {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-poweff-aggregator";
  prefix ietf-poweff-aggregator;

  import ietf-poweff-types {
    prefix ietf-poweff-types;
  }
  import ietf-poweff-collector {
    prefix ietf-poweff-collector;
  }

  organization
    "IETF OPSA (Operations and Management Area) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/opsawg/>
     WG List:  <mailto:opsawg@ietf.org>
     Editor:  Jan Lindblad
              <mailto:jlindbla@cisco.com>
     Editor:  Snezana Mitrovic
              <mailto:snmitrov@cisco.com>
     Editor:  Marisol Palmero
              <mailto:mpalmero@cisco.com>";
  description
    "This YANG module defines the POWEFF Aggregator.

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

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

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";
  
  revision 2023-10-12 {
    description
      "Initial revision of POWEFF Aggregator";
    reference
      "RFC XXXX: ...";
  }

/*

  An AGGREGATOR ensures data from one or more SOURCE(s) are
  combined into a FLOW using a (sequence of) OPERATIONs (OPs)
  to generate a new data set in the DESTINATION (which could
  be a new collection in the same data storage system as the 
  SOURCE).

                +-------------+
                | AGGREGATOR  |
                +-------------+
                       |
           +-----------+-----------+
           v                       v
      ___________             ___________
     /           \           /           \
    (  SOURCE 1   )         ( DESTINATION )
    |\___________/| FLOW 1  |\___________/|
    |             | ======> |             |
    |             |         |             |
    |             | FLOW 2  |             |
     \___________/  ===##=>  \___________/
                       ||
      ___________      ||
     /           \     ||
    (  SOURCE 2   )   //
    |\___________/| ==
    |             |
    |             |
    |             |
     \___________/


*/

  grouping aggregator-g {
    container poweff-aggregator {
      container sources {
        list source {
          key id;
          leaf id { type ietf-poweff-types:something; }
          uses ietf-poweff-collector:data-endpoint-g;
        }
      }
      container destinations {
        list destination {
          key id;
          leaf id { type ietf-poweff-types:something; }
          uses ietf-poweff-collector:data-endpoint-g;
        }
      }
      container flows {
        list flow {
          key id;
          leaf id { type string; }
          choice chain-position {
            container input {
              leaf source { type leafref { path ../../../../../sources/source/id; }}
            }
            container output {
              leaf destination { type leafref { path ../../../../../destinations/destination/id; }}
            }
            container middle {
              leaf-list inputs { type leafref { path ../../../../flows/flow/id; }}
              leaf pre-process-inputs { type leafref { path ../../../../operations/operation/id; }}
              leaf aggregate { type leafref { path ../../../../operations/operation/id; }}
              leaf post-process-output { type leafref { path ../../../../operations/operation/id; }}
            }
          }
        }
      }
      container operations {
        list operation {
          key id;
          leaf id { type ietf-poweff-types:something; }
          choice op-type {
            container linear-sum {}
            container linear-average {}
            container linear-max {}
            container linear-min {}
            container rolling-average {
              leaf timespan { type ietf-poweff-types:something; }
            }
            container filter-age {
              leaf min-age { type ietf-poweff-types:something; }
              leaf max-age { type ietf-poweff-types:something; }
            }
            container function {
              leaf name { type ietf-poweff-types:something; }
            }
          }
        }
      }
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="I-D.draft-kll-yang-label-tsdb-00">
          <front>
            <title>Mapping YANG Data to Label-Set Time Series</title>
            <author fullname="Kristian Larsson" initials="K." surname="Larsson">
              <organization>Deutsche Telekom</organization>
            </author>
            <date day="18" month="October" year="2023"/>
            <abstract>
              <t>   This document proposes a standardized approach for representing YANG-
   modeled configuration and state data, for storage in Time Series
   Databases (TSDBs) that identify time series using a label-set.  It
   outlines procedures for translating YANG data representations to fit
   within the label-centric structures of TSDBs and vice versa.  This
   mapping ensures clear and efficient storage and querying of YANG-
   modeled data in TSDBs.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kll-yang-label-tsdb-00"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.draft-ietf-opsawg-collected-data-manifest-01">
          <front>
            <title>A Data Manifest for Contextualized Telemetry Data</title>
            <author fullname="Benoît Claise" initials="B." surname="Claise">
              <organization>Huawei</organization>
            </author>
            <author fullname="Jean Quilbeuf" initials="J." surname="Quilbeuf">
              <organization>Huawei</organization>
            </author>
            <author fullname="Diego Lopez" initials="D." surname="Lopez">
              <organization>Telefonica I+D</organization>
            </author>
            <author fullname="Ignacio Dominguez Martinez-Casanueva" initials="I. D." surname="Martinez-Casanueva">
              <organization>Telefonica I+D</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <date day="10" month="July" year="2023"/>
            <abstract>
              <t>   Network elements use Model-driven Telemetry, and in particular YANG-
   Push, to continuously stream information, including both counters and
   state information.  This document documents the metadata that ensure
   that the collected data can be interpreted correctly.  This document
   specifies the Data Manifest, composed of two YANG data models (the
   Platform Manifest and the Data Collection Manifest.)  The Data
   Manifest must be streamed and stored along with the data, up to the
   collection and analytics system in order to keep the collected data
   fully exploitable by the data scientists.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-collected-data-manifest-01"/>
        </reference>
        <reference anchor="I-D.draft-claise-netconf-metadata-for-collection-03">
          <front>
            <title>Per-Node Capabilities for Optimum Operational Data Collection</title>
            <author fullname="Benoît Claise" initials="B." surname="Claise">
              <organization>Huawei</organization>
            </author>
            <author fullname="Munish Nayyar" initials="M." surname="Nayyar">
              <organization>Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Adithya Reddy Sesani" initials="A. R." surname="Sesani">
              <organization>Cisco Systems, Inc.</organization>
            </author>
            <date day="25" month="January" year="2022"/>
            <abstract>
              <t>   This document proposes a YANG module that provides per-node
   capabilities for optimum operational data collection.  This YANG
   module augments the YANG Modules for describing System Capabilities
   and YANG-Push Notification capabilities.

   This module defines augmented nodes to publish the metadata
   information specific to YANG node-identifier as per ietf-system-
   capabilities datatree.

   Complementary RPCs, based on the same node capabilities, simplify the
   data collection operations.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-claise-netconf-metadata-for-collection-03"/>
        </reference>
      </references>
    </references>
    <?line 1229?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Kristian Larsson has provided invaluable insights, experience and validation of the design.  Many thanks to the entire POWEFF team for their committment, flexibility and hard work behind this.  Hat off to Benoît Claise, who inspires by the extensive work produced in IETF over the years, and in this area in particular.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
