<?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' ?>
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc iprnotified="no"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-gong-sidrops-rtr-push-00" ipr="trust200902" submissionType="IETF" obsoletes="" updates="" xml:lang="en" tocInclude="true" symRefs="true" sortRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="RTR for TOA">Push Mode Extension for the RPKI to Router Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-gong-sidrops-rtr-push-00"/>

<author fullname="Liyan Gong" initials="L." surname="Gong">
      <organization>China Mobile</organization>
      <address>
        <email>gongliyan@chinamobile.com</email>
      </address>
    </author>

    <author fullname="Xueyan Song" initials="X." surname="Song">
      <organization>ZTE Corp.</organization>
      <address>
        <email>song.xueyan2@zte.com.cn</email>
      </address>
    </author>

    <date/>
    <workgroup>SIDROPS</workgroup>
<keyword>RPKI</keyword>
    <keyword>RTR</keyword>
    <keyword>PUSH</keyword>
    <!-- Keywords will be incorporated into HTML output
        files in a meta tag but they have no effect on text or nroff
        output. If you submit your draft to the RFC Editor, the
        keywords will be used for the search engine. -->

  <abstract>
      <t>
  The Resource Public Key Infrastructure (RPKI) to Router Protocol (RTR) 
  enables routers to receive validated RPKI data from Relying Parties (RPs). 
  This document defines a push mode extension for RTR that allows RPs to 
  proactively push RPKI data updates to routers, either periodically or event-driven.
      </t>
    </abstract>
  </front>
  <middle>
    <section anchor="sec_intro" numbered="true" toc="default">
      <name>Introduction</name>
      <t>
      The Resource Public Key Infrastructure (RPKI) to Router Protocol (RTR), 
  defined in <xref target="RFC8210"/>, updated by <xref target="I-D.ietf-sidrops-8210bis"/>, 
  provides a mechanism for routers to receive validated RPKI data from Relying Parties (RPs). 
  </t>
  <t>
  The current RTR protocol operates in a pull-based model: routers (acting as RTR clients) 
  periodically send Serial Query or Reset Query PDUs to the RP (acting as RTR server) to 
  retrieve updates. In most scenarios, this pull-based design offers clear benefits-it is 
  simple and robust, gives clients control over update timing, avoids maintaining persistent 
  per-client push state on the server, and is well suited to environments where updates are 
  relatively infrequent or where eventual consistency is acceptable. However, in scenarios 
  that require fast propagation of routing-origin changes, or that involve many clients and 
  high update rates, the same pull-based model can introduce significant update-propagation 
  latency and impose continuous polling overhead on both routers and RPs.
  </t>
  <t>
  This document defines a push mode extension for RTR that allows RPs to proactively 
  push RPKI data updates to routers. The extension introduces two complementary push 
  mechanisms: event-driven push, and periodic push. 
  </t>
    </section>
    <!-- end of introduction -->

    <section numbered="true" toc="default">
      <name>Requirements Language</name>
      <t>
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> when, and
only when, they appear in all capitals, as shown here.
      </t>
    </section>
    <!-- end of convensions and definitions -->

<!-- ===================================================================== -->

<section anchor="motivation" numbered="true" toc="default">
      <name>Motivation of Push Mode</name>
  <t>
  As RTR deployments scale and network operations become more dynamic, certain critical 
  scenarios demand a more immediate and efficient synchronization mechanism between routers 
  and RPs. The introduction of Push Mode is specifically motivated by the requirements of 
  these operational scenarios.
  </t>
      <ul spacing="normal">
        <li>
          <t>Rapid Response to Critical Security Incidents: In scenarios involving critical 
		  security events-such as the urgent revocation of a compromised CA certificate or 
		  the rapid deployment of emergency ROAs-routing updates must propagate across the 
		  network within seconds. To address this, Push Mode introduces an event-driven mechanism. 
		  It enables the RP to proactively notify routers of critical updates the moment the data 
		  changes, dramatically reducing the window of vulnerability to routing security incidents. 
		  This ensures that consistent routing security policies are enforced across the network 
		  without delay.</t>
        </li>
        <li>
          <t>Scalability in Large-Scale Deployments: In environments where RP servers must serve a 
		  large number of RTR clients, managing control-plane resources efficiently is paramount. 
		  Push Mode eliminates the periodic serial number negotiations (e.g., Serial Query and Reset 
		  Query) between routers and the RP. Instead of continuously polling, routers receive updates 
		  as they become available. This reduces control-plane message volume, lowers processing 
		  overhead on both routers and RPs, and improves overall protocol efficiency, allowing the 
		  RP to scale gracefully to serve massive numbers of clients.</t>
        </li>
        <li>
          <t>Immediate Synchronization during State Changes: During dynamic network events-such 
		  as session resets or cache rebuilds-routers must immediately reflect the latest state to 
		  maintain routing integrity. Push Mode allows the RP to proactively inform routers of such 
		  state changes. Rather than waiting for the next scheduled polling cycle, routers can react 
		  immediately to these notifications. This ensures deterministic and timely synchronization, 
		  eliminating transient exposure to stale or invalid routing data.</t>
        </li>
      </ul> 
  
  <t>
  To meet these varied scenario requirements, this document introduces two push modes: event-driven 
  and periodic push. Together, they provide a robust extension that ensures rapid propagation for 
  urgent updates, efficient resource utilization for large-scale networks, and immediate awareness 
  of dynamic state changes.
  </t>
</section>  

<section anchor="push-mode" numbered="true" toc="default">
      <name>Protocol Push Modes </name>
      <t>
  The push mode extension introduces a subscription model layered on top of the existing RTR session. 
  After standard session establishment and initial cache synchronization, the router may request a 
  subscription to receive pushed updates. Once subscribed, the RP delivers updates via either 
  event-driven or periodic push mechanisms. The router may cancel its subscription at any time, 
  reverting to standard pull mode.
  </t>  
  <t>
  The push mode extension defines two complementary push mechanisms that may be used individually 
  or in combination:
  </t> 
  <t>
  Event-Driven Push: the RP sends a Push Notify PDU to the router immediately upon detecting a 
  significant change in the validated RPKI data. 
  </t> 
  <t>
  Periodic Push: the RP sends updates at regular, negotiated intervals.
  </t>
 </section> 
 
 <section anchor="new-pdu" numbered="true" toc="default">
      <name>New PDU Formats</name>
      <t>
  This section defines six new PDU types for the push mode extension. All new PDUs use the 
  standard RTR PDU header format defined in <xref target="RFC8210"/> and <xref target="I-D.ietf-sidrops-8210bis"/>.
  </t>  
  <section numbered="true" toc="default">
           <name>Subscribe Request</name>
   <t>
   The Subscription ID identifies the push subscription contract. It is chosen by the 
   router, and is distinct from the Session ID, which is allocated by the RP and used 
   to identify the RTR session. 
   </t>  
    
    <figure anchor="subscrib-request">
        <name>Subscribe Request PDU Format</name>
        <artwork name="" type="" align="left" alt="">
    <![CDATA[

      0          8          16         24        31
      .-------------------------------------------.
      | Protocol |   PDU    |                     |
      | Version  |   Type   |      Session ID     |
      |          |   TBD1   |                     |
      +-------------------------------------------+
      |                                           |
      |                 Length=32                 |
      |                                           |
      +-------------------------------------------+
      |          |  Min     |   Max    | Reserved |
      |  Flags   |  Interval|  Interval|          |
      +-------------------------------------------+
      |                                           |
      |              Subscription ID              |
      |                                           |
      '-------------------------------------------'
       ]]></artwork>
       </figure>  
  
      <t> 
Protocol Version (8bits): MUST be 2 (or higher) for push mode sessions.
      </t>
      <t> 
PDU Type (16bits): TBD1
  </t>
      <t> 
Session ID (16bits): The session ID as defined in <xref target="RFC8210"/> and <xref target="I-D.ietf-sidrops-8210bis"/>.
  </t>
  <t> 
Length (32btis): The length of this PDU.
      </t>
  <t> 
        Flags (8bits): Bit flags specifying requested push modes: Bit 0 (0x01) used for event-driven push mode; 
Bit 1 (0x02) used for periodic push mode; Bit 2-7 are reserved, MUST be set to zero and ignored on receipt. A router MAY set 
both bits to request both push modes simultaneously.
  </t>
  <t> 
    Min Interval (8bits): The minimum acceptable periodic update interval, in seconds. 
A value of 0 indicates no minimum preference. Ignored if periodic push is not requested.
  </t>
  <t> 
    Max Interval (8 bits): The maximum acceptable periodic update interval, in seconds. 
A value of 0 indicates no maximum preference. The RP MUST NOT exceed this interval if it grants periodic push mode.
  </t>
  <t> 
    Reserved (8 bits): Reserved for future use
  </t>
      <t> 
    Subscription ID (32 bits): A unique identifier chosen by the router for this subscription. 
The RP MUST echo this value in the Subscribe Response
  </t>
  
  </section>
  

 <section anchor="subscribe-response" numbered="true" toc="default">
       <name>Subscribe Response</name>
   <t>
   The Subscribe Response PDU is sent by the RP in response to a Subscribe Request. It indicates whether the subscription 
   was granted and, if so, the parameters under which push mode will operate:
   </t>
    
    <figure anchor="suscribe-response-pdu">
        <name>Subscribe Response PDU Format</name>
        <artwork name="" type="" align="left" alt="">
    <![CDATA[

      0          8          16         24        31
      .-------------------------------------------.
      | Protocol |   PDU    |                     |
      | Version  |   Type   |      Session ID     |
      |          |   TBD2   |                     |
      +-------------------------------------------+
      |                                           |
      |                 Length=32                 |
      |                                           |
      +-------------------------------------------+
      |  Result  |  Granted |  Granted | Reserved |
      |          |  Interval|  Mode    |          |
      +-------------------------------------------+
      |                                           |
      |              Subscription ID              |
      |                                           |
      '-------------------------------------------'

       ]]></artwork>
       </figure>  
  
      <t> 
Protocol Version: 2 (or higher)
      </t>
      <t> 
PDU Type: TBD2
  </t>
  <t> 
        Result (8bits): The result of the subscription request. 
  </t>
  <t> 
    Granted Interval (8 bits): The periodic update interval, in seconds, that the RP will use. 
Meaningful only if Result is Success and periodic push was requested. 
  </t>
  <t> 
    Granted Mode (8 bits): The push mode(s) granted by the RP. Bit 0 (0x01) used for Event-driven mode granted. 
Bit 1 (0x02) used for periodic push mode granted; Bit 2-7 are reserved, MUST be set to zero and ignored on receipt.  
  </t>
  <t> 
    Reserved (8 bits): Reserved for future use
  </t>
      <t> 
    Subscription ID (32 bits): Echoed from the Subscribe Request.
  </t>  
  </section>
  
 <section anchor="unsubscribe-request" numbered="true" toc="default">
       <name>Unsubscribe Request</name>
   <t>
   The Unsubscribe Request PDU is sent by the router to cancel an active subscription. 
   Upon receipt, the RP MUST cease sending push updates for this session.
   </t>
    
    <figure anchor="unsuscribe-request-pdu">
        <name>Unsubscribe Request PDU Format</name>
        <artwork name="" type="" align="left" alt="">
    <![CDATA[

      0          8          16         24        31
      .-------------------------------------------.
      | Protocol |   PDU    |                     |
      | Version  |   Type   |      Session ID     |
      |          |   TBD3   |                     |
      +-------------------------------------------+
      |                                           |
      |                  Length=32                |
      |                                           |
      +-------------------------------------------+
      |                                           |
      |              Subscription ID              |
      |                                           |
      '-------------------------------------------'

       ]]></artwork>
       </figure>    
      </section>
  
  <section anchor="unsubscribe-response" numbered="true" toc="default">
       <name>Unsubscribe Response</name>
   <t>
   The Unsubscribe Response PDU is sent by the RP to acknowledge the
cancellation of a subscription.
   </t>
    
    <figure anchor="unsuscribe-response-pdu">
        <name>Unsubscribe Response PDU Format</name>
        <artwork name="" type="" align="left" alt="">
    <![CDATA[

      0          8          16         24        31
      .-------------------------------------------.
      | Protocol |   PDU    |                     |
      | Version  |   Type   |      Session ID     |
      |          |   TBD4   |                     |
      +-------------------------------------------+
      |                                           |
      |                  Length=32                |
      |                                           |
      +-------------------------------------------+
      |                                           |
      |              Subscription ID              |
      |                                           |
      '-------------------------------------------'

       ]]></artwork>
       </figure>    
      </section> 
  
  
  
  
  
  
 <section anchor="push-notify" numbered="true" toc="default">
       <name>Push Notify</name>
   <t>
   The Push Notify PDU is sent by the RP to the router to indicate that significant RPKI data 
   changes have occurred. This PDU is used in event-driven push mode.
   </t>
   <t>
   The notify type of change that triggered this notification. It may involve ROA, ASPA, router Key change, etc.
   </t>
    
    <figure anchor="push-notify-pdu">
        <name>Push Notify PDU Format</name>
        <artwork name="" type="" align="left" alt="">
    <![CDATA[

      0          8          16         24        31
      .-------------------------------------------.
      | Protocol |   PDU    |                     |
      | Version  |   Type   |      Session ID     |
      |          |   TBD5   |                     |
      +-------------------------------------------+
      |                                           |
      |                   Length=32               |
      |                                           |
      +-------------------------------------------+
      |                                           |
      |              Subscription ID              |
      |                                           |
      +-------------------------------------------+
      |          |                                |
      | Notify   |     Serial Number              |
      |  Type    |                                |
      '-------------------------------------------'

       ]]></artwork>
       </figure>    
      </section>  
  
 <section anchor="periodic-update" numbered="true" toc="default">
       <name>Periodic Update</name>
   <t>
   The Periodic Update PDU is sent by the RP to the router at negotiated intervals in periodic push mode. 
   This PDU carries the actual RPKI data updates, eliminating the need for the router to send a Serial Query.
   </t>
   <t>
   The PDU format is showed as follows. Following the Periodic Update header, the RP sends a Cache Response PDU, 
   zero or more data PDUs containing the incremental changes, and an End of Data PDU. If there are no changes, 
   the RP MAY send the header followed immediately by an End of Data PDU as a keepalive.
   </t>
    
    <figure anchor="periodic-update-pdu">
        <name>Periodic Update PDU Format</name>
        <artwork name="" type="" align="left" alt="">
    <![CDATA[

      0          8          16         24        31
      .-------------------------------------------.
      | Protocol |   PDU    |                     |
      | Version  |   Type   |      Session ID     |
      |          |   TBD6   |                     |
      +-------------------------------------------+
      |                                           |
      |                 Length=32                 |
      |                                           |
      +-------------------------------------------+
      |                                           |
      |              Subscription ID              |
      |                                           |
      +-------------------------------------------+
      |              Router Serial                |
      |                                           |
      '-------------------------------------------'

       ]]></artwork>
       </figure> 

     <t>
	 The serial number that the RP believes the router currently holds. The router MUST compare this 
	 value against its actual current serial number. If they do not match, the router MUST NOT process the data PDUs.
	 </t>
    </section>    
</section>    
  
      <section anchor="backward" numbered="true" toc="default">
        <name>Backward Compatibility</name>
        <t>
       The push mode extension is designed for full backward compatibility with existing RTR implementations 
   as defined in <xref target="I-D.ietf-sidrops-8210bis"/>.
        </t>
<t>
Push mode is only activated if both parties explicitly advertise support for it during the version negotiation 
at the beginning of an RTR session. The router indicates its push-mode capability in the initial Serial Query, 
and the RP confirms support in its Serial Notify; if either party does not advertise support, the session operates 
in standard pull mode without any protocol changes.
</t>
<t>
If the negotiation is unsuccessful (e.g., one party does not support push mode), an error notification MAY be 
sent to inform the peer. The error Report PDU format refers to RFC8210bis, a new error code allocated by IANA is required.
</t>
  </section>
 
    <!-- End of protocol -->
<!-- ===================================================================== -->



  <section numbered="true" toc="default">
      <name>Security Considerations</name>
      <t> 
      The security considerations of <xref target="RFC8210"/>, <xref target="I-D.ietf-sidrops-8210bis"/>,
      and <xref target="RFC6810"/> apply to this document.
  </t>
   </section>

    <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>
  This document requests IANA to assign the following PDU types in the
      "rpki-rtr-pdu" registry:
      </t>
    
   <table anchor="iana-request">
        <name>PDU Types</name>
        <thead>
          <tr>
            <th align="left">PDU Type</th>
            <th align="left">Name</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TBD1</td>
            <td align="left">Subscribe Request</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">TBD2</td>
            <td align="left">Subscribe Response</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">TBD3</td>
            <td align="left">Unsubscribe Request</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">TBD4</td>
            <td align="left">Unsubscribe Response</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">TBD5</td>
            <td align="left">Push Notify</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">TBD6</td>
            <td align="left">Periodic Update</td>
            <td align="left">This document</td>
          </tr>
        </tbody>
      </table>

    </section>
    <section anchor="acks" numbered="true" toc="default">
      <name>Acknowledgements</name>
    <t>
       The authors would like to express their appreciation to Taoran Zhou for his helpful comments.
    </t>
    </section>
  </middle>
  <back>

    <references>
     <name>References</name>  
  <references>
      <name>Normative References</name>  
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8210.xml"/>
        <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-sidrops-8210bis.xml"/>
  </references>
  <references>
      <name>Informative References</name>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6810.xml"/>
  </references>
  </references>
  
  </back>
</rfc>
