<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     ipr="trust200902"
     category="std"
     docName="draft-claise-green-capability-discovery-01"
     submissionType="IETF"
     consensus="true"
     version="3"
     xml:lang="en">

  <front>
    <title abbrev="Power State Capability Discovery">A YANG Data Model for
    Power State Capability Discovery</title>
    <seriesInfo name="Internet-Draft"
                value="draft-claise-green-capability-discovery-01"/>

    <author fullname="Benoit Claise" initials="B." surname="Claise">
      <organization>Everything OPS &amp; Arrcus</organization>
      <address>
        <postal>
          <country>Belgium</country>
        </postal>
        <email>benoit@everything-ops.net</email>
      </address>
    </author>

    <author fullname="Nils Warnke" initials="N." surname="Warnke">
      <organization>Deutsche Telekom</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>Nils.Warnke@telekom.de</email>
      </address>
    </author>

    <author fullname="Reshad Rahman" initials="R." surname="Rahman">
      <organization>Equinix</organization>
      <address>
        <postal>
          <country>Canada</country>
        </postal>
        <email>reshad@yahoo.com</email>
      </address>
    </author>

    <author fullname="Gen Chen" initials="G." surname="Chen">
      <organization>Huawei</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>chengen@huawei.com</email>
      </address>
    </author>

    <date year="2026" month="September" day="10"/>

    <area>Operations and Management</area>
    <workgroup>GREEN Working Group</workgroup>

    <keyword>energy efficiency</keyword>
    <keyword>power state</keyword>
    <keyword>capability discovery</keyword>
    <keyword>YANG</keyword>

    <abstract>
      <t>This document defines a YANG data model that augments the system
      capabilities model of RFC 9196 to allow a network element to
      advertise, per hardware Component, the set of Power States that the
      Component supports, together with a static characterization of each
      such state: the expected and maximum Power the Component draws in
      it, and the time to enter and exit it.</t>

      <t>This capability model complements the operational Power and
      Energy data model defined in the GREEN Power and Energy YANG module,
      which reports the current Power State and the measured Power of a
      Component, but not which Power States are available, how much Power each
      draws, or how long transitions between them take. It is anchored to the hardware
      inventory of RFC 8348, reuses the Power State identities of the
      GREEN Power and Energy model, and, because it is static, may be
      provided at implementation time as YANG instance data per RFC 9195
      so that an Energy Management System can learn a platform's Power
      State capabilities before the equipment is deployed or even powered
      on.</t>
    </abstract>
  </front>

  <middle>

    <!-- ===================================================== -->
    <section anchor="intro" numbered="true">
      <name>Introduction</name>

      <t>Networks are provisioned for peak demand and might be
      over-provisioned some of the time. Reducing the energy consumed by
      the idle capacity requires the ability to place selected Components
      into a low-power (sleep) Power State when they are not needed, and to
      return them to full operation when demand returns. To determine which
      Components can be placed in a low-power state, and estimating the
      resulting Energy Saving, the Energy Management System, the controller,
      or the distributed path computation (depending on operational design)
      draws on two things about each Component:</t>

      <ol spacing="normal">
        <li>which Power States the Component actually supports</li>
        <li>where it is known, how much Power the Component draws in each
        supported state.</li>
      </ol>

      <t>The GREEN Power and Energy YANG module
      <xref target="I-D.ietf-green-power-and-energy-yang"/> models the
      operational side of this problem: for each Energy Object it
      reports the current administrative and operational Power State
      (the <tt>admin</tt> and <tt>oper</tt> leaves) and the
      measured instantaneous Power. It does not, however, describe which
      Power States a Component is capable of entering. GREEN reports a
      single Nameplate Power for the Component, but not the Power the
      Component draws in each supported Power State -- which is precisely
      what a Power Savings Potential calculation needs. That
      information is a Capability: it is essentially static, it is a
      property of the platform rather than of the running datastore, and it
      is useful before the device is even powered on.</t>

      <t>No common capability model exists today, so each consumer
      defines the pieces it needs. The Power Conserving Path Placement
      Strategy <xref target="I-D.many-teas-power-steering"/> and its
      IS-IS encoding <xref target="I-D.many-lsr-power-group"/> introduce
      their own "sleep-capable" indication and Power Savings Potential
      value, defined independently of the GREEN data model. This document
      defines a single capability model, discoverable through the
      standard system capabilities mechanism of <xref target="RFC9196"/>,
      from which those quantities can be derived -- for example, Power
      Savings Potential as the difference between the nominal Power of
      <tt>power-state-on</tt> and that of a low-power state -- rather than
      defined separately by
      each consumer.</t>

      <section anchor="req-lang" numbered="true">
        <name>Requirements Language</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&#160;14
        <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only
        when, they appear in all capitals, as shown here.</t>
      </section>

      <section anchor="terminology" numbered="true">
        <name>Terminology</name>
        <t>This document makes use of the terms defined in
        <xref target="I-D.ietf-green-terminology"/>. Terms reused from that
        document are capitalized in this specification, including in
        particular Component, Device, Power, Power State, Power State Set,
        Nameplate Power, Energy Object, Energy Saving, and Energy
        Management System.</t>
        <t>The term "Power Savings Potential (PSP)" is used as defined in
        <xref target="I-D.many-teas-power-steering"/>.</t>
        <t>In this document, '<tt>admin</tt>' and '<tt>oper</tt>' are the two
        leaves of the GREEN Power and Energy model
        <xref target="I-D.ietf-green-power-and-energy-yang"/> that report a
        Component's administratively requested and operational Power State,
        each carrying a <tt>power-state</tt> identity value;
        <tt>power-state-on</tt>, <tt>power-state-off</tt>, and
        <tt>power-state-sleep</tt> are those identity values, and the
        <tt>supported-power-state</tt> list defined here enumerates which of
        them a Component supports.</t>
        <t>This document uses the following Power-quantity terms:</t>
        <dl spacing="normal">
          <dt>Nameplate Power:</dt>
          <dd>the maximum Power a Component is designed to consume, as
          specified by the manufacturer, as reported by the
          <tt>nameplate-power</tt> leaf of
          <xref target="I-D.ietf-green-power-and-energy-yang"/>. It is a
          rated design ceiling, not an expected operating value.</dd>
          <dt><tt>max-power</tt> (per Power State):</dt>
          <dd>the rated maximum Power a Component may draw in a given Power
          State -- the per-state counterpart of Nameplate Power. For
          <tt>power-state-on</tt> (the most power-consuming state) it is at
          most the Component's Nameplate Power (see
          <xref target="relationship"/>).</dd>
          <dt><tt>nominal-power</tt> (per Power State):</dt>
          <dd>the Power a Component is expected to draw in a given Power
          State under normal operation. The actual Power drawn depends on
          the offered load, the operating temperature, and other
          environmental conditions, and is therefore network-specific;
          <tt>nominal-power</tt> is a typical value, itself typically lower
          than <tt>max-power</tt>. Here "nominal" denotes the expected
          operating value, NOT the manufacturer's rating.</dd>
        </dl>
      </section>
    </section>

    <!-- ===================================================== -->
    <section anchor="applicability" numbered="true">
      <name>Applicability</name>

      <t>The capability model defined in this document is a prerequisite
      for any function that reasons about what a Component can do with its
      Power.</t>

      <dl spacing="normal">
        <dt>Inventory and audit:</dt>
        <dd>An operator can determine which deployed Components -- which
        interfaces, which line cards, which routers -- are sleep-capable
        and which are not. Without such an inventory, the question of
        which parts of a network can be turned off cannot be answered
        systematically.</dd>

        <dt>Energy Efficiency control:</dt>
        <dd>An Energy Management System that intends to place a line card
        in a low-power Power State, by writing the <tt>admin</tt> leaf
        in <xref target="I-D.ietf-green-power-and-energy-yang"/>, needs to
        know which Power States that line card supports before making the
        request.</dd>

        <dt>Energy modelling:</dt>
        <dd>An Energy Management System can estimate off-line the Energy
        Saving of a proposed policy, such as putting a set of interfaces
        to sleep overnight, without changing the state of the running
        network.</dd>

        <dt>Traffic engineering:</dt>
        <dd>A path computation that concentrates traffic in order to idle
        links and the line cards behind them, such as
        <xref target="I-D.many-teas-power-steering"/>, needs the same
        information as a static input. This is one consumer among several,
        not the only one.</dd>

        <dt>Cross-checking the control plane:</dt>
        <dd>A controller can validate the Power Savings Potential
        advertised by the IGP against the rated Power reported here,
        detecting misconfiguration or stale advertisements.</dd>

        <dt>Platform comparison:</dt>
        <dd>Two router models can be compared on the Power States they
        support, and the Power each state draws, in a single
        vendor-independent encoding.</dd>

        <dt>Capacity and power budget planning:</dt>
        <dd>Because the capability may be published as YANG instance data
        <xref target="RFC9195"/>, the expected and maximum Power of a
        chassis populated with a given set of line cards can be computed
        before the equipment is ordered or installed.</dd>
      </dl>

      <section anchor="applicability-use-cases" numbered="true">
        <name>Applicability to the GREEN Use Cases</name>
        <t>This section analyzes the applicability of this document
        against the use cases specified in
        <xref target="I-D.ietf-green-use-cases"/>.</t>

        <t>Note: <xref target="I-D.ietf-green-use-cases"/> is a work in
        progress. If it does not progress to publication, this section
        might be removed.</t>

        <t>The following use cases depend on the Power State capabilities
        defined in this document:</t>
        <ul spacing="normal">
          <li>Section 2.2, "Selective reduction of energy consumption in
          network parts proportional to traffic levels": before a
          Component can be placed in a low-power Power State as traffic
          falls, a management system must know that the Component supports
          such a state, and how much Power that would save.</li>
          <li>Section 2.9, "WLAN Network Energy Saving": this use case
          distinguishes several low-power modes and calls for coordinated
          management of them: when some access points enter lower Power
          States, neighboring access points adjust their transmit power to
          compensate for coverage. This model provides the per-state Power
          information on which such coordination depends.</li>
          <li>Section 2.10, "Fixed Network Energy Saving": deactivating
          Components during low-traffic periods requires knowing which
          Components can be deactivated.</li>
          <li>Section 2.11, "Energy Efficiency Network Management": the
          set of supported Power States and the rated Power of each
          completes the visibility that the operational model provides for
          the current state.</li>
          <li>Section 2.14, "Energy Efficiency Under Power Shortage":
          planning which Components to place in a low-power Power State
          under a constrained power budget requires the Power of each
          state in advance.</li>
          <li>Section 2.1, "Incremental Application of the GREEN
          Framework": an operator applying the framework to an installed
          base can discover which deployed Components are capable of
          energy saving and which are not.</li>
          <li>Section 2.7, "Dynamic adjustment of network element
          throughput according to traffic levels in wireless transport
          networks": the adjustment requires the set of states the network
          element supports.</li>
          <li>Section 2.16, "Network-level Cross Layer Energy Saving", and
          Section 2.17, "AI Agents for Energy Efficiency Management":
          coordinated or agent-driven optimization needs a
          machine-readable, vendor-independent description of what each
          Component can do.</li>
        </ul>
      </section>
    </section>

    <!-- ===================================================== -->
    <section anchor="design" numbered="true">
      <name>Design Overview</name>

      <t>The design follows five principles.</t>

      <section anchor="d-separation" numbered="true">
        <name>Capability is Kept Separate from Operational State</name>
        <t>The set of supported Power States and their characterization is
        a Capability, not operational state. It is therefore carried in the system
        capabilities subtree of <xref target="RFC9196"/> rather than being
        mixed into the operational <tt>power</tt> data of
        <xref target="I-D.ietf-green-power-and-energy-yang"/>. Keeping the
        capability model separate from live status lets a management system learn a
        Component's Power States without querying a running device -- and,
        as <xref target="d-instance-data"/> describes, even from a
        vendor-supplied file before the Component is deployed.</t>
      </section>

      <section anchor="d-anchor" numbered="true">
        <name>Capability is Anchored to the Hardware Component</name>
        <t>A Power State is a property of a physical Component (a line card,
        a fabric, an optical module), which is exactly the entity that is
        placed into a low-power state. This document therefore anchors the
        capability to a Component in the hardware inventory
        <xref target="RFC8348"/>, using the per-node capability mechanism of
        <xref target="RFC9196"/>: the <tt>node-selector</tt> selects the
        <tt>/hardware/component</tt> entry to which the capability applies.</t>
        <t>The <tt>node-selector</tt> is the generic instance-identifier
        type defined in <xref target="RFC8341"/> and reused by
        <xref target="RFC9196"/>; although that type originates in the
        NACM module, it carries no access-control semantics and can
        address any data node. Because <tt>/hardware/component</tt> is
        operational state, the capability is advertised under the
        operational datastore <xref target="RFC8342"/>, as illustrated
        below:</t>
        <artwork><![CDATA[
system-capabilities
  datastore-capabilities [datastore = ietf-datastores:operational]
      // hardware components live in the operational datastore
    per-node-capabilities [node-selector =
        "/ietf-hardware:hardware/component[name='linecard-3']"]
      // node-selector: a generic RFC 8341 instance-identifier,
      // resolving here to an RFC 8348 hardware component
      power-state-capabilities { ... }   // added by this document
]]></artwork>
        <t>No new correlation identifier is required. The GREEN Power and
        Energy model already binds each of its <tt>energy-entry</tt>
        instances to a hardware Component through the
        <tt>source-component-id</tt> leafref to
        <tt>/hw:hardware/hw:component/hw:name</tt>. As a result the hardware
        inventory (RFC 8348), the capability model (this document), and
        the live operational state
        (<xref target="I-D.ietf-green-power-and-energy-yang"/>) all refer to
        one and the same Component name, and no change to the GREEN module
        is needed.</t>
        <t>The <tt>nominal-power</tt> and <tt>max-power</tt> reported for a
        Component are the Power of that Component alone; they do not include
        the Power of its child Components in the <xref target="RFC8348"/>
        hardware hierarchy. This follows from Energy Objects inheriting
        their containment from the hardware component tree
        <xref target="I-D.ietf-green-framework"/>: each Component (chassis,
        line card, port, transceiver, ...) advertises its own values, so the
        Power of a larger assembly -- for example a chassis populated with
        line cards and their transceivers -- is obtained by summing the
        per-Component values over the relevant subtree, each Component
        counted once, with no double counting.</t>
      </section>

      <section anchor="d-identities" numbered="true">
        <name>Power State Names are Reused, Not Reinvented</name>
        <t>The supported Power States are identified by identities derived
        from the <tt>power-state</tt> base identity already defined in
        <xref target="I-D.ietf-green-power-and-energy-yang"/> (namely
        <tt>power-state-on</tt>, <tt>power-state-off</tt>, and
        <tt>power-state-sleep</tt>). Where a Component supports more than one
        low-power depth, additional identities are derived from
        <tt>power-state-sleep</tt>; such a collection of related states forms
        a Power State Set, and its member names <bcp14>SHOULD</bcp14> align
        with the Power State Sets described in
        <xref target="I-D.ietf-green-framework"/> rather than
        being independently invented, so that consumers can compare states
        across vendors.</t>
      </section>

      <section anchor="d-grouping" numbered="true">
        <name>The Characterization is a Reusable Grouping</name>
        <t>The per-state characterization is defined once, as the YANG
        grouping <tt>power-state-capability</tt> (<xref target="module"/>).
        The grouping is used both at the system-wide level and at the
        per-Component level of <xref target="RFC9196"/> -- the same
        two-level structure as the companion
        <tt>ietf-notification-capabilities</tt> module of
        <xref target="RFC9196"/>.
        <xref target="I-D.ietf-netconf-yp-transport-capabilities"/> uses
        the same mechanism for YANG-Push transport capabilities, although
        it augments at the system-wide level only.</t>
      </section>

      <section anchor="d-instance-data" numbered="true">
        <name>Capability MAY be Provided as Instance Data (RFC 9195)</name>
        <t>Because the capability is static and platform-specific, it does
        not have to be read from a running Device. It <bcp14>MAY</bcp14> be
        published by a vendor, or generated from a product data sheet, as a
        YANG instance data file per <xref target="RFC9195"/>. An Energy
        Management System or a planning tool can thereby learn the Power
        State capabilities of a platform -- which Components can sleep and
        how much Power they save -- at design or procurement time, before
        any equipment is deployed. When the Device
        is running, the same data <bcp14>MAY</bcp14> instead be read from
        the operational state datastore. The two sources use the identical
        schema defined here.</t>
      </section>
    </section>

    <!-- ===================================================== -->
    <section anchor="relationship" numbered="true">
      <name>Relationship to Other Work</name>

      <t>This document is deliberately narrow: it supplies the missing
      capability layer that three existing efforts each assume but none
      provides in a common form.</t>

      <t><xref target="I-D.ietf-green-power-and-energy-yang"/> reports, for
      a Component, the Power State it is in now and its measured Power.
      This document adds the static complement: the set of Power States
      that Component can enter and, for each, its expected and maximum
      Power and the time to enter and exit it, keyed to the
      same hardware Component. A consumer needs both -- what the Component
      can do, from this document, and its live status, from
      the GREEN YANG module.</t>

      <t><xref target="I-D.many-teas-power-steering"/> and
      <xref target="I-D.many-lsr-power-group"/> define a Power Conserving
      Path Placement Strategy and its IS-IS encoding, which need to know
      which resources are sleep-capable and their Power Savings Potential.
      With this capability model both become derived facts rather than
      separately defined values: a Component is "sleep-capable" when it
      advertises a Power State derived from <tt>power-state-sleep</tt>, and
      its PSP for a given low-power state is simply the difference between
      the <tt>nominal-power</tt> of <tt>power-state-on</tt> and the
      <tt>nominal-power</tt> of that state. This difference is a static
      planning baseline; the dynamic, load-dependent Power Savings Potential
      that a real-time path placement acts upon is a different quantity and
      is out of scope for this document (see <xref target="op"/>). Those documents can then
      reference a single capability definition instead of carrying their
      own.</t>

      <t>This capability model does not replace those mechanisms, and it
      does not reduce what they must distribute. The load-dependent
      quantities they carry -- for example, the Power Savings Potential
      actually available under the current traffic, or the sleeping
      bandwidth of a link -- change with network conditions and remain
      theirs to distribute. Because an IGP Link State Database tolerates
      only slowly-changing state, an IGP encoding such as
      <xref target="I-D.many-lsr-power-group"/> proposes to carry a static
      or dampened value to avoid churn, while a real-time value is collected
      via telemetry instead. What this document changes is narrower: the
      static foundation those quantities build on -- which Power States a
      Component supports, and the rated Power of each -- is defined once
      here, and is a natural source for the static value an IGP advertises,
      rather than re-specified, with its own units and semantics, inside
      each consumer.</t>

      <t>The GREEN Power and Energy model reports, for a Component, a
      single <tt>nameplate-power</tt> YANG leaf: the maximum Power the
      Component is designed to consume, as specified by the manufacturer.
      The <tt>nominal-power</tt> and <tt>max-power</tt> advertised for the
      <tt>power-state-on</tt> state in this model are realistic planning
      baselines that serve a different purpose; they are not required to
      equal the Nameplate Power (the <tt>nominal-power</tt> is typically
      lower). Because <tt>nameplate-power</tt> represents the Component's
      upper power limit, however, any <tt>nominal-power</tt> or
      <tt>max-power</tt> advertised for <tt>power-state-on</tt>
      <bcp14>MUST</bcp14> be less than or equal to the corresponding
      <tt>nameplate-power</tt> when the latter is reported. Where this
      model does not advertise <tt>power-state-on</tt> values, the
      <tt>nameplate-power</tt> <bcp14>MAY</bcp14> be used as a planning
      fallback. For the remaining Power States there is no GREEN
      equivalent, and that is what this model adds.</t>
    </section>

    <!-- ===================================================== -->
    <section anchor="model" numbered="true">
      <name>The Power State Capabilities Model</name>

      <t>This module advertises the set of supported Power States and, for
      each, the time to enter and exit it relative to
      <tt>power-state-on</tt>. It does not advertise which transitions
      between Power States are permitted, or any other transition
      constraint; those are out of scope.</t>

      <t>All nodes defined by this module are operational state
      (<tt>config false</tt>); the Power State capabilities are therefore
      reported only in the operational state datastore
      <xref target="RFC8342"/>. The module defines no configuration data
      and does not appear in any configuration datastore.</t>

      <section anchor="tree" numbered="true">
        <name>Tree Structure</name>
        <t>The following tree diagram uses the notation defined in
        <xref target="RFC8340"/>.</t>
        <sourcecode type="yangtree"><![CDATA[
module: ietf-power-state-capabilities

  augment /sysc:system-capabilities:
    +--ro power-state-capabilities
       +--ro supported-power-state* [power-state]
          +--ro power-state           identityref
          +--ro nominal-power?        uint32
          +--ro max-power?            uint32
          +--ro typical-exit-time?    transition-time-ms
          +--ro max-exit-time?        transition-time-ms
          +--ro typical-entry-time?   transition-time-ms
          +--ro max-entry-time?       transition-time-ms
  augment /sysc:system-capabilities/sysc:datastore-capabilities
            /sysc:per-node-capabilities:
    +--ro power-state-capabilities
       +--ro supported-power-state* [power-state]
          +--ro power-state           identityref
          +--ro nominal-power?        uint32
          +--ro max-power?            uint32
          +--ro typical-exit-time?    transition-time-ms
          +--ro max-exit-time?        transition-time-ms
          +--ro typical-entry-time?   transition-time-ms
          +--ro max-entry-time?       transition-time-ms
]]></sourcecode>
      </section>

      <section anchor="module" numbered="true">
        <name>YANG Module</name>
        <t>This module imports the system capabilities module of
        <xref target="RFC9196"/> and reuses the <tt>power-state</tt>
        identities of <xref target="I-D.ietf-green-power-and-energy-yang"/>.</t>

        <sourcecode type="yang" name="ietf-power-state-capabilities@2026-09-10.yang"><![CDATA[
module ietf-power-state-capabilities {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-power-state-capabilities";
  prefix pscap;

  import ietf-system-capabilities {
    prefix sysc;
    reference
      "RFC 9196: YANG Modules Describing Capabilities for Systems
       and Datastore Update Notifications";
  }
  import ietf-power-and-energy {
    prefix eo;
    reference
      "I-D.ietf-green-power-and-energy-yang: A YANG Data Model for
       Power and Energy Monitoring and Control";
  }

  organization
    "IETF GREEN (Getting Ready for Energy-Efficient Networking)
     Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/green/>
     WG List:  <mailto:green@ietf.org>
     Author:   Benoit Claise <mailto:benoit@everything-ops.net>
     Author:   Nils Warnke <mailto:Nils.Warnke@telekom.de>
     Author:   Reshad Rahman <mailto:reshad@yahoo.com>
     Author:   Gen Chen <mailto:chengen@huawei.com>";
  description
    "This module augments the system capabilities model defined in
     RFC 9196 to allow a server to advertise, per hardware Component,
     the set of Power States that the Component supports together
     with a static characterization of each such state (the
     expected and maximum Power the Component draws in it, and the
     time to enter and exit it).

     The capability is anchored, via the RFC 9196 per-node capability
     mechanism, to a Component of the hardware inventory defined in
     RFC 8348. It reuses the 'power-state' identities defined in
     ietf-power-and-energy.

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

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

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";

  revision 2026-09-10 {
    description
      "Initial revision.";
    reference
      "RFC XXXX: A YANG Data Model for Power State Capability
       Discovery";
  }

  typedef transition-time-ms {
    type uint32;
    units "milliseconds";
    description
      "The duration of a transition between Power States, in
       milliseconds. The specific Power States and the direction
       are given by the leaf that uses this type.";
  }

  grouping power-state-capability {
    description
      "Static characterization of the Power States that a Component
       supports. This grouping is reusable: it is used both at the
       system-wide level and at the per-Component level of the
       RFC 9196 capabilities model.";

    list supported-power-state {
      key "power-state";
      description
        "The set of Power States supported by the Component, with one
         entry per supported state.";

      leaf power-state {
        type identityref {
          base eo:power-state;
        }
        description
          "A Power State that the Component supports,
           identified by an identity derived from the
           'power-state' base identity of ietf-power-and-energy
           (for example 'power-state-on', 'power-state-off', or
           'power-state-sleep'). Additional low-power depths are
           represented by further identities derived from
           'power-state-sleep'.";
      }

      leaf nominal-power {
        type uint32;
        units "Watts";
        description
          "The nominal Power drawn by the Component while it
           is in this Power State.
           The Power Savings Potential of a low-power state is
           the difference between the 'nominal-power' of
           'power-state-on' and the 'nominal-power' of that
           low-power state.";
      }

      leaf max-power {
        type uint32;
        units "Watts";
        description
          "The maximum Power that the Component may draw while
           in this Power State. This is the per-Power-State
           counterpart of the Component's Nameplate Power: a
           rated ceiling for this particular state. For
           'power-state-on', which is expected to be the most
           power-consuming Power State, this value does not
           exceed the 'nameplate-power' leaf reported for the
           same Component by ietf-power-and-energy.";
      }

      leaf typical-exit-time {
        type transition-time-ms;
        description
          "The typical time to transition the Component from this
           Power State back to 'power-state-on', under normal
           conditions, measured from when the transition to
           'power-state-on' is initiated until the Component is
           fully operational (able to carry traffic). It is a key
           input when weighing the Power a low-power state saves
           against the service impact of the delay to leave it.
           Not meaningful for 'power-state-on' and omitted for it.";
      }

      leaf max-exit-time {
        type transition-time-ms;
        description
          "The worst-case time to transition the Component from
           this Power State back to 'power-state-on'. It bounds the
           service-restoration delay an operator must budget for; a
           state is usable for hitless operation only if this value
           is within the applicable threshold. Not meaningful for
           'power-state-on'.";
      }

      leaf typical-entry-time {
        type transition-time-ms;
        description
          "The typical time to transition the Component from
           'power-state-on' into this Power State, under normal
           conditions. Together with the exit time it determines
           the minimum idle interval for which entering this state
           is worthwhile. Not meaningful for 'power-state-on'.";
      }

      leaf max-entry-time {
        type transition-time-ms;
        description
          "The worst-case time to transition the Component from
           'power-state-on' into this Power State. Not meaningful
           for 'power-state-on'.";
      }
    }
  }

  augment "/sysc:system-capabilities" {
    description
      "System-wide (Device-level) Power State capabilities that apply
       unless overridden by a per-Component entry.";
    container power-state-capabilities {
      description
        "Default Power State capabilities for the whole system.";
      uses power-state-capability;
    }
  }

  augment "/sysc:system-capabilities"
        + "/sysc:datastore-capabilities"
        + "/sysc:per-node-capabilities" {
    description
      "Per-Component Power State capabilities. The 'node-selector' of
       the enclosing RFC 9196 'per-node-capabilities' entry selects
       the Component to which these capabilities apply, typically a
       '/hw:hardware/hw:component' entry of RFC 8348.";
    container power-state-capabilities {
      description
        "Power State capabilities of the selected Component(s).";
      uses power-state-capability;
    }
  }
}
]]></sourcecode>
      </section>
    </section>

    <!-- ===================================================== -->
    <section anchor="op" numbered="true">
      <name>Operational Considerations</name>
      <t>The capability data defined by this module is essentially static
      for a given hardware configuration. A server that already implements
      the GREEN Power and Energy model
      <xref target="I-D.ietf-green-power-and-energy-yang"/> -- and hence the
      hardware inventory of <xref target="RFC8348"/> on which it depends --
      can expose these capabilities as operational state, or a management
      system can obtain them out of band as instance data
      (<xref target="d-instance-data"/>).</t>

      <t>The <tt>nominal-power</tt> and <tt>max-power</tt> values are
      optional. A Component <bcp14>MAY</bcp14> advertise the Power States it supports
      with no Power value; a consumer then learns what the Component can
      do, but not what each state costs.</t>
      <t>Per-Component coverage may be partial: a Device
      <bcp14>MAY</bcp14> advertise Power State capabilities for some
      Components and not others (incremental deployment). A Component for
      which no entry is present has unknown capabilities, not zero Power. A
      total <tt>nominal-power</tt> or <tt>max-power</tt> obtained by summing
      the advertised Components is therefore complete only when every
      Component in the relevant <xref target="RFC8348"/> subtree is covered;
      otherwise it is a lower bound. A consumer can determine coverage by
      comparing the advertised Components against the
      <xref target="RFC8348"/> hardware inventory.</t>
      <t>The time to enter and to exit a Power State can be significant and
      varies between Components and between states, and it constrains how a
      state can be used: a state that saves substantial Power but is slow to
      exit may be unusable for a Component carrying latency-sensitive traffic
      -- for example, a transition that must complete within milliseconds to
      be hitless, or a line card whose 30-second return to full operation
      would breach a service-level agreement. An Energy Management System
      should weigh the
      exit time (and, for short idle windows, the entry time) against the
      Energy Saving before selecting a low-power state. Where advertised,
      <tt>typical-exit-time</tt>, <tt>max-exit-time</tt>,
      <tt>typical-entry-time</tt> and <tt>max-entry-time</tt> give these
      durations relative to <tt>power-state-on</tt>; like the Power values
      they are rated approximations, optional, and network- and
      condition-dependent.</t>

      <t>Where present, the <tt>nominal-power</tt> and <tt>max-power</tt>
      values are static, rated figures -- the Power a
      Component is expected to draw in a Power State, in the spirit of
      Nameplate Power. They are an approximation: the Power actually
      drawn, especially in <tt>power-state-on</tt>, depends on the offered
      load, the operating temperature, and other environmental conditions,
      and is therefore network-specific and time-varying. An operator
      <bcp14>MUST</bcp14> treat <tt>nominal-power</tt> as a planning
      baseline, not as a measurement.</t>

      <t>These values are operational state (<tt>config false</tt>), not
      configuration: a Component reports them. Where a rated figure is
      unavailable, or too coarse for a given purpose, a more precise value
      can be obtained by measurement -- an Energy Management System can
      observe the measured <tt>instantaneous-power</tt> of
      <xref target="I-D.ietf-green-power-and-energy-yang"/> while the
      Component is in the corresponding Power State, and use it to supply
      or refine the advertised value.</t>

      <t>The dynamic, load-dependent Power Savings Potential that a
      real-time path placement acts upon is out of scope for this static
      capability model. In a distributed path-computation architecture the
      IGP is the channel (e.g., <xref target="I-D.many-teas-power-steering"/>
      / <xref target="I-D.many-lsr-power-group"/>), but because a Link State
      Database tolerates only slowly-changing state those encodings propose
      to carry a static or dampened value rather than the real-time one; a
      controller in a centralized architecture can instead collect the
      real-time value via telemetry. This document supplies the stable
      capability baseline on which those mechanisms build.</t>

      <t>A consumer <bcp14>MUST NOT</bcp14> assume that a supported
      low-power Power State may be entered at any given moment; that is a
      runtime decision, taken by the consumer's policy and configured
      through the control side of the GREEN model (e.g., a write to
      the <tt>admin</tt> leaf, which the Device may accept or reject).
      It is out of scope here.</t>
    </section>

    <!-- ===================================================== -->
    <section anchor="open-issues" numbered="true">
      <name>Open Issues</name>
      <t>This section is to be removed before publication.</t>
      <ul spacing="normal">
        <li>This module augments the RFC 9196 system capabilities at both
        the system-wide level (<tt>/system-capabilities</tt>) and the
        per-Component level (<tt>per-node-capabilities</tt>). Whether the
        system-wide augmentation is needed here in addition to the
        per-Component one is still open: do Power States at the
        system-wide level make sense? One argument for keeping it:
        because per-Component coverage may be partial (see
        <xref target="op"/>), a system-wide entry can carry a whole-Device
        figure that is complete regardless of which Components are
        individually covered.</li>
        <li>The per-Power-State transition durations
        (<tt>typical-exit-time</tt>, <tt>max-exit-time</tt>,
        <tt>typical-entry-time</tt>, <tt>max-entry-time</tt>, relative to
        <tt>power-state-on</tt>) are optional precisely because it is not
        yet clear whether vendors can report those.</li>
        <li>Nameplate Power is defined inconsistently across GREEN
        documents. <xref target="I-D.ietf-green-terminology"/> (following
        RFC 7326) defines Nameplate Power as the "nominal power ... as
        specified by the manufacturer", whereas the
        <xref target="I-D.ietf-green-power-and-energy-yang"/>
        <tt>nameplate-power</tt> leaf defines it as the "maximum power ...
        designed to consume". This document follows the YANG module's
        maximum (rated) sense and, on that basis, separates
        <tt>nominal-power</tt> (expected operating draw) from
        <tt>max-power</tt> (rated ceiling); the two GREEN definitions
        cannot both hold. It is proposed that
        <xref target="I-D.ietf-green-terminology"/> redefine Nameplate
        Power to match the YANG module -- the manufacturer's maximum
        (rated) design Power -- and avoid the word "nominal", which this
        document uses for the expected operating value.</li>
      </ul>
    </section>

    <!-- ===================================================== -->
    <section anchor="security" numbered="true">
      <name>Security Considerations</name>

      <t>This section is modeled after the template described in
      Section 3.7.1 of <xref target="RFC9907"/>.</t>

      <t>The "ietf-power-state-capabilities" YANG module defines a data
      model that is designed to be accessed via YANG-based management
      protocols, such as the Network Configuration Protocol (NETCONF)
      <xref target="RFC6241"/> and RESTCONF <xref target="RFC8040"/>.
      These YANG-based management protocols (1) have to use a secure
      transport layer (e.g., Secure Shell (SSH) <xref target="RFC4252"/>,
      TLS <xref target="RFC9846"/>, and QUIC <xref target="RFC9000"/>) and
      (2) have to use mutual authentication.</t>

      <t>The Network Configuration Access Control Model (NACM)
      <xref target="RFC8341"/> provides the means to restrict access for
      particular NETCONF or RESTCONF users to a preconfigured subset of
      all available NETCONF or RESTCONF protocol operations and
      content.</t>

      <t>All data nodes defined in this YANG module are read-only
      ("config false") operational state, which may equivalently be
      provided as instance data (<xref target="d-instance-data"/>). The
      module defines no writable data nodes, no RPC or action operations,
      and no notifications.</t>

      <t>Some of the readable data nodes in this YANG module may be
      considered sensitive or vulnerable in some network environments. It
      is thus important to control read access (e.g., via get, get-config,
      or notification) to these data nodes. Specifically, the
      "power-state-capabilities" subtree -- the set of Power States a
      Component supports and the nominal Power of each -- reveals which
      Components of a Device can be placed into a low-power state and how
      much Power that would save. An attacker with read access to this
      information can identify the resources whose repeated forced wake-up
      would cause the greatest energy or thrashing amplification, or whose
      sleeping would most usefully be prevented to degrade capacity. Where advertised, the per-state transition times
      (notably <tt>max-exit-time</tt>) further reveal how long each
      Component takes to return to service, which an attacker can use to
      time forced wake-ups for maximum disruption or to single out the
      Components most costly to wake. This
      is the same exposure noted for the corresponding routing
      advertisements in <xref target="I-D.many-lsr-power-group"/>. Read
      access to this subtree <bcp14>SHOULD</bcp14> be restricted, and,
      when the capability is distributed as a YANG instance data file
      <xref target="RFC9195"/>, the file <bcp14>SHOULD</bcp14> be handled
      with the same care as other platform capability inventories.</t>
    </section>

    <!-- ===================================================== -->
    <section anchor="iana" numbered="true">
      <name>IANA Considerations</name>

      <t>This document requests IANA to register the following URI in the
      "ns" subregistry of the "IETF XML Registry"
      <xref target="RFC3688"/>:</t>
      <artwork><![CDATA[
   URI:  urn:ietf:params:xml:ns:yang:ietf-power-state-capabilities
   Registrant Contact:  The IESG.
   XML:  N/A; the requested URI is an XML namespace.
]]></artwork>

      <t>This document requests IANA to register the following YANG module
      in the "YANG Module Names" subregistry
      <xref target="RFC6020"/> within the "YANG Parameters" registry:</t>
      <artwork><![CDATA[
   Name:       ietf-power-state-capabilities
   Namespace:  urn:ietf:params:xml:ns:yang:ietf-power-state-capabilities
   Prefix:     pscap
   Reference:  RFC XXXX
]]></artwork>
    </section>

    <!-- ===================================================== -->
    <section anchor="ack" numbered="true">
      <name>Acknowledgments</name>
      <t>This work builds directly on the GREEN Power and Energy YANG model
      and terminology, and on the system capabilities framework of
      RFC 9196.</t>

      <t>The separation between static manufacturer data and live
      operational readings, and the idea of delivering that static data as
      a YANG instance data file, were introduced in
      <xref target="I-D.opsawg-poweff"/>. This document realizes that
      intent using standardized mechanisms: anchoring to
      <xref target="RFC8348"/>, augmenting <xref target="RFC9196"/>, and
      pre-deployment delivery per <xref target="RFC9195"/>.</t>
    </section>

  </middle>

  <back>
    <references>
      <name>Normative References</name>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9196.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8348.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8341.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3688.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6020.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-green-power-and-energy-yang.xml"/>
    </references>

    <references>
      <name>Informative References</name>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9195.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9907.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8340.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6241.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4252.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8040.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8342.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9846.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9000.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7951.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8792.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-green-terminology.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-green-framework.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-green-use-cases.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.opsawg-poweff.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-netconf-yp-transport-capabilities.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.many-teas-power-steering.xml"/>
      <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.many-lsr-power-group.xml"/>
    </references>

    <!-- ===================================================== -->
    <section anchor="example" numbered="true">
      <name>Power Capabilities Examples</name>

      <section anchor="example-interface" numbered="true">
        <name>Interface Power Capability Example</name>
        <t>The following JSON <xref target="RFC7951"/> instance data shows
        the Power State capabilities of a single interface, the 100 Gigabit
        Ethernet port "HundredGigE0/0/1", whose pluggable transceiver
        module uses the QSFP28 form factor (Quad Small Form-factor
        Pluggable, 28 Gb/s per lane), reported as a per-Component
        capability against the operational state datastore. It shows that
        the model applies at the interface level -- the granularity a
        traffic-engineering consumer such as
        <xref target="I-D.many-teas-power-steering"/> cares about.</t>

        <t>The interface supports two of the IEEE 1621 Power States
        reused from <xref target="I-D.ietf-green-power-and-energy-yang"/>:
        <tt>power-state-on</tt> ("full power on"), drawing a nominal 3 Watts
        (<tt>max-power</tt> 4 Watts), and <tt>power-state-sleep</tt>
        ("low-power state"), drawing a nominal 1 Watt
        (<tt>max-power</tt> 2 Watts).</t>

        <sourcecode type="json"><![CDATA[
========== NOTE: '\\' line wrapping per RFC 8792 ==========

{
  "ietf-system-capabilities:system-capabilities": {
    "datastore-capabilities": [{
      "datastore": "ietf-datastores:operational",
      "per-node-capabilities": [{
        "node-selector":
          "/ietf-hardware:hardware/component\
          \[name='HundredGigE0/0/1']",
        "ietf-power-state-capabilities:power-state-capabilities": {
          "supported-power-state": [{
            "power-state": "ietf-power-and-energy:power-state-on",
            "nominal-power": 3,
            "max-power": 4
          },{
            "power-state":
              "ietf-power-and-energy:power-state-sleep",
            "nominal-power": 1,
            "max-power": 2
          }]
        }
      }]
    }]
  }
}
]]></sourcecode>
        <t>The long "node-selector" line is wrapped using the
        "\\" line-folding strategy of <xref target="RFC8792"/>.</t>

        <t>Power values are reported in Watts. The derived Power
        Savings Potential of the sleep state is 3 - 1 = 2 Watts.
        This is a planning-time estimate; the operational,
        load-dependent value is out of scope (see <xref target="op"/>).</t>
      </section>

      <section anchor="example-linecard" numbered="true">
        <name>Line Card Power Capability Example</name>
        <t>The following instance data shows the Power State capabilities
        of a single line card, "linecard-3". The line card supports the
        same two IEEE 1621 Power States reused from
        <xref target="I-D.ietf-green-power-and-energy-yang"/>, and this
        example also shows their <tt>max-power</tt> and transition times.
        In <tt>power-state-on</tt> ("full power on") it draws a nominal
        200 Watts, with a rated <tt>max-power</tt> of 240 Watts; in
        <tt>power-state-sleep</tt> ("low-power state") it draws a nominal
        15 Watts (<tt>max-power</tt> 25 Watts) and, relative to
        <tt>power-state-on</tt>, takes a typical 300 ms (up to 600 ms) to
        enter and a typical 800 ms (up to 2 s) to exit. The same encoding,
        wrapped in an <tt>instance-data-set</tt> per
        <xref target="RFC9195"/>, could be shipped by the vendor before
        deployment.</t>

        <sourcecode type="json"><![CDATA[
{
  "ietf-system-capabilities:system-capabilities": {
    "datastore-capabilities": [{
      "datastore": "ietf-datastores:operational",
      "per-node-capabilities": [{
        "node-selector":
          "/ietf-hardware:hardware/component[name='linecard-3']",
        "ietf-power-state-capabilities:power-state-capabilities": {
          "supported-power-state": [{
            "power-state": "ietf-power-and-energy:power-state-on",
            "nominal-power": 200,
            "max-power": 240
          },{
            "power-state":
              "ietf-power-and-energy:power-state-sleep",
            "nominal-power": 15,
            "max-power": 25,
            "typical-exit-time": 800,
            "max-exit-time": 2000,
            "typical-entry-time": 300,
            "max-entry-time": 600
          }]
        }
      }]
    }]
  }
}
]]></sourcecode>
        <t>From these values, the Power Savings Potential of the sleep
        state (<tt>power-state-sleep</tt>) is derived by subtraction:
        200 - 15 = 185 Watts, consistent with the Power Savings Potential
        convention of <xref target="I-D.many-teas-power-steering"/>. This is a
        planning-time estimate; the operational, load-dependent value is out
        of scope (see <xref target="op"/>). For completeness, the
        current Power State and the measured, load- and temperature-dependent
        Power of the same line card are reported separately by
        <xref target="I-D.ietf-green-power-and-energy-yang"/> -- its
        <tt>power-state/oper</tt> and <tt>power/instantaneous-power</tt> leaves, in
        the <tt>energy-object</tt> bound to this Component through
        <tt>source-component-id</tt> -- which an Energy Management System
        reads to obtain the actual value in operation.</t>
      </section>
    </section>

  </back>
</rfc>
