<?xml version="1.0" encoding="UTF-8"?>
<rfc version="3" ipr="trust200902" submissionType="IETF" category="std" docName="draft-many-teas-rsvp-power-00" sortRefs="true">
  <front>
    <title abbrev="Power Transition Framework for TE Resources">Power Transition Framework for TE Resources</title>
    <seriesInfo name="Internet-Draft" value="draft-many-teas-rsvp-power-00" stream="IETF"/>
    <author fullname="Srihari Sangli" initials="S." surname="Sangli">
      <organization>Hewlett Packard Enterprise</organization>
      <address><email>srihari.sangli@hpe.com</email></address>
    </author>
    <author fullname="Colby Barth" initials="C." surname="Barth">
      <organization>Hewlett Packard Enterprise</organization>
      <address><email>colby.barth@hpe.com</email></address>
    </author>
    <author fullname="Vishnu P. Beeram" initials="V. P." surname="Beeram">
      <organization>Hewlett Packard Enterprise</organization>
      <address><email>vishnu.beeram@hpe.com</email></address>
    </author>
    <author fullname="Tony Li" initials="T." surname="Li">
      <organization>Hewlett Packard Enterprise</organization>
      <address><email>tony.li@tony.li</email></address>
    </author>
    <author fullname="Ron Bonica" initials="R." surname="Bonica">
      <organization>Hewlett Packard Enterprise</organization>
      <address><email>ron.bonica@hpe.com</email></address>
    </author>
    <date year="2026" month="September" day="30"/>
    <area>Routing</area>
    <workgroup>Traffic Engineering Architecture and Signaling</workgroup>
    <keyword>RSVP-TE</keyword>
    <keyword>power management</keyword>
    <keyword>traffic engineering</keyword>
    <abstract>
      <t>Traffic-engineered networks are commonly provisioned for peak demand. However, during off-peak periods, some traffic-engineered resources in the network may be lightly used. This leads to unnecessary power consumption. A coordinated power transition can reduce power consumption while preserving the control-plane and traffic-engineering state needed to restore service safely.</t>
      <t>This document defines a generic power management framework for coordinating power-sleep and wakeup transitions between adjacent nodes. It defines the roles, resource scope, procedures, collision handling, failure behavior, and traffic-engineering preservation requirements. It then specifies an RSVP-TE signaling extension for supporting the power management framework.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="intro" numbered="true">
      <name>Introduction</name>
      <t>Operational networks are frequently engineered for peak utilization. During lower-demand periods, portions of the topology may remain active even though their forwarding capacity is not immediately required. A power-management system can place an eligible traffic-engineered resource in a low-power or power-down state and later restore it when demand or policy requires.</t>
      <t>A power transition is a distributed operation. Both ends of a resource must agree before the resource is powered down, and the control plane must continue to identify the resource and retain sufficient traffic-engineering information to restore it. The mechanism that controls the physical power state is implementation-specific and is outside the scope of this document. This document specifies the coordination protocol and its signaling requirements.</t>
      <t>The framework is intentionally independent of RSVP-TE. Section 3 defines the generic procedures. Section 4 defines how RSVP-TE carries those procedures for a directly connected RSVP-TE link. RSVP-TE is one signaling realization of the framework; the framework does not require RSVP-TE for other resource types or signaling protocols.</t>
    </section>
    <section anchor="terminology" numbered="true">
      <name>Requirements Language and Terminology</name>
      <t>The key words <strong>MUST</strong>, <strong>MUST NOT</strong>, <strong>REQUIRED</strong>, <strong>SHALL</strong>, <strong>SHALL NOT</strong>, <strong>SHOULD</strong>, <strong>SHOULD NOT</strong>, <strong>RECOMMENDED</strong>, <strong>NOT RECOMMENDED</strong>, <strong>MAY</strong>, and <strong>OPTIONAL</strong> in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>.</t>
      <dl>
        <dt>Power-sleep</dt><dd><t>A coordinated transition in which the underlying hardware for a resource is powered down or placed in a low-power state.</t></dd>
        <dt>Wakeup</dt><dd><t>A transition that restores the underlying hardware to its forwarding-capable state.</t></dd>
        <dt>Sender</dt><dd><t>The node that initiates a power-sleep transaction.</t></dd>
        <dt>Receiver</dt><dd><t>The adjacent node that receives and accepts or rejects a power-sleep request.</t></dd>
        <dt>Power manager</dt><dd><t>The local system component that applies the physical power transition. Signaling protocol processing MUST NOT be assumed to perform the physical operation itself.</t></dd>
        <dt>Power resource</dt><dd><t>The link or other traffic-engineered resource identified by the transaction.</t></dd>
      </dl>
    </section>
    <section anchor="procedures" numbered="true">
      <name>Power Transition Procedures</name>
      <section anchor="roles" numbered="true">
        <name>Roles and Resource Scope</name>
        <t>A power-sleep transaction operates on one explicitly identified resource. The resource identifier MUST be sufficient to distinguish parallel links between the same pair of nodes. A node MUST NOT apply a transition to a different resource merely because the message arrived over a related adjacency or interface.</t>
        <t>The node requesting power-sleep is the Sender and the adjacent node is the Receiver. These roles apply to one power-sleep transaction only; a later transaction MAY assign the roles differently. Wakeup is not restricted to one Sender. Either endpoint, or a local policy or service event, MAY initiate wakeup.</t>
        <t>Each endpoint SHOULD maintain local transaction state for the resource. At a minimum, the model MUST have the following modes:</t>
        <ul>
          <li><t><strong>Operating mode:</strong> no active power-sleep coordination exists and the resource is available for normal operation.</t></li>
          <li><t><strong>Requisition mode:</strong> the Sender has requested preparation for an upcoming power-sleep and is waiting for acceptance or rejection.</t></li>
          <li><t><strong>Ready mode:</strong> the Sender has received acceptance and is waiting for local power manager authorization; or the Receiver has accepted the request and is waiting for the Sender's final instruction.</t></li>
          <li><t><strong>Pending mode:</strong> the Sender has issued the sleep instruction and is waiting for confirmation.</t></li>
          <li><t><strong>Sleeping mode:</strong> the resource has completed the coordinated transition to its low-power or power-down state.</t></li>
        </ul>
        <t>An implementation MAY represent Operating mode by the absence of a transaction object. Changes in mode SHOULD be recorded for operational diagnosis.</t>
      </section>
      <section anchor="wakeup" numbered="true">
        <name>Wakeup Procedure</name>
        <t>Wakeup MAY be initiated by either endpoint, by an ingress or service requirement, or by local policy. The initiator sends request for wakeup with the resource identifier. The peer receiving wakeup request MUST resolve the resource and request or perform local wakeup.</t>
        <t>At each endpoint, the wakeup operation triggers an independent restoration of the local resource state to Operating mode and cleanup of the sleep state. The endpoint initiating wakeup MUST use a path to send the wakeup request such that it does not depend on the sleeping resource being operational.</t>
      </section>
      <section anchor="sleep" numbered="true">
        <name>Power-Sleep Procedure</name>
        <t>The following procedure applies to a resource eligible for power-sleep:</t>
        <ol>
          <li><t>The Sender in Operating mode verifies local policy, resource eligibility, and the availability of a live adjacency or equivalent peer relationship.</t></li>
          <li><t>The Sender in Requisition mode creates transaction state for the resource and requests to prepare for sleep, identifying the resource.</t></li>
          <li><t>The Receiver resolves the resource identifier and verifies that the resource is locally eligible. If it cannot participate, it continues to be in Operating mode and sends negative acknowledgement. If it can participate, it sends acknowledgement and transitions to Ready mode.</t></li>
          <li><t>Upon receiving acknowledgment, the Sender transitions to Ready mode, and notifies its local Power manager that preparation has completed. This is the end of the sleep preparation phase.</t></li>
          <li><t>If the intent is to put the interface to power-sleep, driven by the local policy, the Sender in Ready mode instructs the Receiver to sleep and transitions to Pending mode while waiting for confirmation.</t></li>
          <li><t>Upon receiving the request to sleep, the Receiver in Ready mode acknowledges the request and completes its local transition to Sleeping mode. The Sender, upon receiving acknowledgment from the Receiver, completes its local transition to Sleeping mode.</t></li>
          <li><t>The Sender may adopt a configurable timeout value to avoid waiting indefinitely for a response from the Receiver.</t></li>
        </ol>
        <t>The signaling protocol coordinates the endpoints. A local power management framework that is outside the scope of this document is responsible for the physical operation triggered by the Sleeping state. An implementation MUST NOT report successful completion merely because a sleep request was sent.</t>
      </section>
      <section anchor="collision" numbered="true">
        <name>Concurrent Requests and Collision Resolution</name>
        <t>Both endpoints can independently initiate preparation for sleep. If a node has an active Sender transaction for the same resource when it receives a competing request for sleep preparation, the nodes MUST deterministically select one Sender.</t>
        <t>The node identifiers used for the tie-break MUST be stable and globally comparable within the protocol domain. The node with the numerically higher identifier wins and remains Sender. It sends a negative acknowledgment for the competing request. The losing node cancels its Sender transaction, assumes the Receiver role, and continues processing the peer's request. Equal identifiers are an invalid or ambiguous condition. In such a case, the node MUST avoid creating two active transactions and SHOULD log the condition for operator intervention before discarding the competing request.</t>
        <t>Collision resolution MUST be applied only when the requests identify the same resource. A request for another parallel link is not a collision.</t>
        <t>Repeated wakeup requests MUST be handled idempotently.</t>
      </section>
      <section anchor="failure" numbered="true">
        <name>Failure, Timeout, and Recovery</name>
        <t>A node MUST reject or abort a transaction when it cannot resolve the resource, lacks the required capability, lacks a usable peer relationship, or cannot obtain local power manager authorization. Where a response can still be sent, the Receiver SHOULD send a negative acknowledgment. The Sender MUST treat a rejection as an unsuccessful transaction and release its active state.</t>
        <t>The Sender MUST bound the time spent waiting for a response from the Receiver. The recommended default for each wait is 180 seconds. On expiry, the Sender SHOULD release the transaction state and log the failure for operator intervention. The timer does not imply retransmission; an implementation MAY add retransmission only if it preserves transaction correlation and bounded duplicate handling.</t>
        <t>A failed send, malformed message, unknown resource, or unexpected state MUST NOT cause an implementation to power down a resource. Such a condition MUST leave the resource in, or return it to Operating mode. Cleanup MUST cancel any associated timers and discard the transaction.</t>
        <t>Administrative disabling of power management MAY immediately discard active transaction state. It MUST NOT be interpreted as a successful negotiated sleep. The implementation SHOULD log the reason for the abort.</t>
      </section>
      <section anchor="te-preservation" numbered="true">
        <name>Traffic and TE-State Preservation Requirements</name>
        <t>Power transition signaling MUST NOT silently destroy the traffic-engineering state associated with the resource. In particular:</t>
        <ul>
          <li><t>Link identity, addressing, TE attributes, and parallel-link disambiguation MUST remain available across the sleep interval.</t></li>
          <li><t>Existing LSP, path, reservation, label, and protection state MUST be retained or reconciled according to the applicable TE protocol and policy. A power transition MUST NOT be treated as an implicit successful teardown unless another protocol explicitly performs that teardown.</t></li>
          <li><t>A node MUST prevent new use of an unavailable resource according to its TE admission and flooding policy. The resource MUST become eligible for normal use only after wakeup and local readiness have completed.</t></li>
          <li><t>Wakeup processing MUST restore the resource's TE participation and MUST use the preserved resource identity when reestablishing adjacency, reachability, or reservations.</t></li>
          <li><t>There MUST be at least one control-plane path available for wakeup while the resource is asleep.</t></li>
        </ul>
        <t>Implementations SHOULD expose state transitions, failures, collisions, and timeouts to operations.</t>
      </section>
    </section>
    <section anchor="rsvp" numbered="true">
      <name>RSVP-TE Signaling</name>
      <t>This section specifies the RSVP-TE realization of the framework for a directly connected RSVP-TE link. RSVP-TE carries the power-transition messages in an RSVP ResourceNotify message as specified in <xref target="I-D.kbr-teas-mptersvp"/>. The physical power action remains outside RSVP-TE and is performed by the local power manager.</t>
      <section anchor="mapping" numbered="true">
        <name>Mapping of Power-Transition Messages to RSVP</name>
        <table anchor="power-code-table" align="center">
          <name>Power Code Values</name>
          <thead><tr><th>Framework message</th><th>Value</th><th>Meaning</th></tr></thead>
          <tbody>
            <tr><td>SleepPrepare</td><td>0</td><td>Sender proposes preparation to power-sleep</td></tr>
            <tr><td>SleepPrepareAck</td><td>1</td><td>Receiver accepts preparation</td></tr>
            <tr><td>SleepPrepareNak</td><td>2</td><td>Receiver rejects preparation</td></tr>
            <tr><td>GoSleep</td><td>3</td><td>Sender authorizes power-sleep</td></tr>
            <tr><td>GoSleepAck</td><td>4</td><td>Receiver confirms power-sleep</td></tr>
            <tr><td>GoWakeup</td><td>5</td><td>Initiator requests wakeup</td></tr>
          </tbody>
        </table>
        <t>Each message is an RSVP ResourceNotify message containing one RESOURCE_SPEC object as specified in <xref target="I-D.kbr-teas-mptersvp"/> and one POWER object. A POWER object without a RESOURCE_SPEC object is invalid and MUST be rejected.</t>
      </section>
      <section anchor="power-object" numbered="true">
        <name>POWER Object</name>
	<t>Class = TBD, C-Type = TBD.</t>
        <t>Its format is:</t>
        <figure anchor="power-object-format">
          <name>POWER Object Format</name>
          <artwork><![CDATA[        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |           Length              |   Class-Num   |    C-Type     |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |        Reserved                               |   Power Code  |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
        </figure>
  <t>The Power Code is an unsigned one-octet value. Values 0 through 5 have the meanings in <xref target="mapping"/>. Values 6 through 255 are reserved and MUST NOT be transmitted. A receiver that does not recognize a Power Code MUST reject or discard the object according to RSVP object processing rules and MUST NOT perform a power transition.</t>
        <t>The POWER Object applies only to the resource identified by the accompanying RESOURCE_SPEC object. A ResourceNotify message MUST NOT carry more than one POWER object.</t>
      </section>
      <section anchor="resource" numbered="true">
        <name>Resource Identification</name>
        <t>The RESOURCE_SPEC object identifies the resource being transitioned. For the RESOURCE_SPEC_Ipv4 Class or RESOURCE_SPEC_IPv6 Class, the resource identifier is defined as:</t>
        <ul>
          <li><t>For a numbered link, the Sender's local link address is encoded in the Link Address field and Link Index field is set to zero.</t></li>
          <li><t>For an unnumbered link, the Sender's Router Identifier is encoded in the Link Address field and Sender's local unnumbered TE link identifier is encoded in the Link Index field.</t></li>
        </ul>
  <t>The tuple <tt>(Link Address, Link Index)</tt> MUST be interpreted as one composite identifier. The receiver MUST resolve the tuple to its local interface and MUST reject the request if it cannot unambiguously do so.</t>
      </section>
      <section anchor="reliability" numbered="true">
        <name>Reliability, Acknowledgment, and Transaction Correlation</name>
        <t>RSVP ResourceNotify provides the message container; the power procedure provides the transaction semantics. The MESSAGE_ID with ACK_Desired semantics for ResourceNotify message provides the needed reliable transport for power coordination. However, both the Sender and Receiver RSVP nodes MUST maintain state and a timer to recover from error condition and put the resource back into Operating mode.</t>
        <t>SleepPrepareAck and SleepPrepareNak correlate to a pending SleepPrepare using the resource identifier and the peer relationship. GoSleepAck correlates to a pending GoSleep using the same resource identifier. An implementation MUST at minimum validate the resource identifier, expected role, expected state, and peer before applying a message.</t>
        <t>A valid message received in an unexpected state MUST be ignored or rejected without changing the power state. Duplicate acknowledgments MUST be treated as harmless. GoWakeup MUST be processed idempotently.</t>
        <t>The RSVP implementation uses a timeout interval of 180 seconds for the SleepPrepare and GoSleep confirmation phases. On expiry, the state should be removed, the operation should be reported as failed, and physical power-down MUST NOT be performed solely as a consequence of the timeout.</t>
        <t>ResourceNotify messages for a sleeping resource SHOULD be routed through a reachable control-plane path independent of the sleeping link.</t>
      </section>
      <section anchor="compatibility" numbered="true">
        <name>Backward Compatibility and Error Handling</name>
        <t>The POWER object is an optional RSVP extension. A node that does not support power coordination may ignore or reject ResourceNotify according to the RSVP processing rules applicable to an unknown object. A Sender MUST treat the absence of a valid response as a failed transaction and MUST NOT power down the resource unilaterally.</t>
        <t>A receiver supporting this document MUST validate the ResourceNotify object structure before interpreting its contents. ResourceNotify messages carrying a POWER Object MUST contain a valid RESOURCE_SPEC. Missing, malformed, duplicated, or unknown mandatory content MUST result in rejection or discard and MUST NOT trigger a power action.</t>
        <t>If the resource cannot be found, the peer relationship is not valid, or local capability is unavailable, the receiver SHOULD send SleepPrepareNak. Otherwise it MUST discard the message, record an operational diagnostic, and leave the resource in Operating mode.</t>
        <t>Power coordination is controlled by local policy. A local administrative disable of RSVP power management MUST prevent new coordination and MAY clear active coordination state. It MUST NOT cause a GoWakeup exchange to be assumed.</t>
      </section>
    </section>
    <section anchor="security" numbered="true">
      <name>Security Considerations</name>
      <t>A forged or replayed power message could cause a link to become unavailable or could cause unnecessary wakeup activity. Implementations MUST apply the RSVP security and peer-authentication mechanisms used for the associated RSVP adjacency and MUST validate that the message is from the authorized peer for the identified resource.</t>
      <t>Resource identifiers, roles, expected states, and transaction correlation MUST be checked before a message can cause a power action. Implementations SHOULD rate-limit invalid messages and record sufficient diagnostics to identify an attack or misconfiguration. A malformed or unauthenticated message MUST NOT cause a power transition.</t>
    </section>
    <section anchor="iana" numbered="true">
      <name>IANA Considerations</name>
      <t>IANA is requested to allocate a new RSVP object class number for the POWER object, with C-Type 1.</t>
      <t>IANA is requested to create a registry titled &quot;RSVP Power Management Codes&quot;. The registration policy is IETF Review. The initial values are:</t>
      <table anchor="iana-table" align="center">
        <name>Initial RSVP Power Management Codes</name>
        <thead><tr><th>Value</th><th>Name</th><th>Reference</th></tr></thead>
        <tbody>
          <tr><td>0</td><td>SleepPrepare</td><td>This document, <xref target="mapping"/></td></tr>
          <tr><td>1</td><td>SleepPrepareAck</td><td>This document, <xref target="mapping"/></td></tr>
          <tr><td>2</td><td>SleepPrepareNak</td><td>This document, <xref target="mapping"/></td></tr>
          <tr><td>3</td><td>GoSleep</td><td>This document, <xref target="mapping"/></td></tr>
          <tr><td>4</td><td>GoSleepAck</td><td>This document, <xref target="mapping"/></td></tr>
          <tr><td>5</td><td>GoWakeup</td><td>This document, <xref target="mapping"/></td></tr>
        </tbody>
      </table>
      <t>Values 6 through 255 are reserved.</t>
    </section>
    <section anchor="acknowledgements" numbered="true">
      <name>Acknowledgements</name>
      <t>The authors would like to thank Joel Halpern for the invaluable feedback and comments.</t>
    </section>
  </middle>
  <back>
    <references anchor="normative-references"><name>Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119"><front><title>Key words for use in RFCs to Indicate Requirement Levels</title><author initials="S." surname="Bradner" fullname="S. Bradner"/><date year="1997" month="March"/></front><seriesInfo name="BCP" value="14"/><seriesInfo name="RFC" value="2119"/><refcontent>DOI 10.17487/RFC2119</refcontent></reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174"><front><title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title><author initials="B." surname="Leiba" fullname="B. Leiba"/><date year="2017" month="May"/></front><seriesInfo name="BCP" value="14"/><seriesInfo name="RFC" value="8174"/><refcontent>DOI 10.17487/RFC8174</refcontent></reference>
      <reference anchor="RFC3209" target="https://www.rfc-editor.org/info/rfc3209"><front><title>RSVP-TE: Extensions to RSVP for LSP Tunnels</title><author initials="D." surname="Awduche" fullname="D. Awduche"/><date year="2001" month="December"/></front><seriesInfo name="RFC" value="3209"/><refcontent>DOI 10.17487/RFC3209</refcontent></reference>
    </references>
    <references anchor="informative-references"><name>Informative References</name>
      <reference anchor="I-D.kbr-teas-mptersvp"><front><title>RSVP-TE Extensions for Multipath Traffic Engineered Directed Acyclic Graph Tunnels</title><author initials="K." surname="Kompella" fullname="Kireeti Kompella"/><author initials="V.P." surname="Beeram" fullname="Vishnu Pavan Beeram"/><author initials="C." surname="Ramachandran" fullname="Chandra Ramachandran"/><date year="2026"/></front><seriesInfo name="Internet-Draft" value="draft-kbr-teas-mptersvp"/></reference>
    </references>
  </back>
</rfc>
