<?xml version="1.0" encoding="utf-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.17 (Ruby 3.1.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC4291 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4291.xml">
<!ENTITY RFC5880 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5880.xml">
<!ENTITY RFC5082 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5082.xml">
<!ENTITY I-D.wang-idr-next-next-hop-nodes SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.wang-idr-next-next-hop-nodes.xml">
<!ENTITY I-D.liu-rtgwg-path-aware-remote-protection SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.liu-rtgwg-path-aware-remote-protection.xml">
<!ENTITY I-D.cheng-rtgwg-adaptive-routing-framework SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.cheng-rtgwg-adaptive-routing-framework.xml">
<!ENTITY RFC2328 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2328.xml">
<!ENTITY RFC1195 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1195.xml">
<!ENTITY RFC5340 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5340.xml">
<!ENTITY RFC4203 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4203.xml">
<!ENTITY RFC5307 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5307.xml">
]>

<?rfc comments="yes"?>

<rfc ipr="trust200902" docName="draft-zzhang-rtgwg-router-info-03" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Advertising Router Information">Advertising Router Information</title>

    <author initials="Z." surname="Zhang" fullname="Zhaohui Zhang">
      <organization>Juniper Networks</organization>
      <address>
        <email>zzhang@juniper.net</email>
      </address>
    </author>
    <author initials="K." surname="Wang" fullname="Kevin F. Wang">
      <organization>Juniper Networks</organization>
      <address>
        <email>kfwang@juniper.net</email>
      </address>
    </author>
    <author initials="C." surname="Lin" fullname="Changwang Lin">
      <organization>New H3C Technologies</organization>
      <address>
        <email>linchangwang.04414@h3c.com</email>
      </address>
    </author>
    <author initials="N." surname="Vaidya" fullname="Niranjan Vaidya">
      <organization>Broadcom</organization>
      <address>
        <email>niranjan.vaidya@broadcom.com</email>
      </address>
    </author>
    <author initials="J." surname="Tantsura" fullname="Jeff Tantsura">
      <organization>Nvidia</organization>
      <address>
        <email>jefftant.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="Y." surname="Liu" fullname="Yisong Liu">
      <organization>China Mobile</organization>
      <address>
        <email>liuyisong@chinamobile.com</email>
      </address>
    </author>

    <date year="2025" month="April" day="22"/>

    <area>Routing</area>
    <workgroup>rtgwg</workgroup>
    <keyword>neighbor, congestion, load-balancing</keyword>

    <abstract>


<t>This document specifies a generic mechanism for a router to advertise some
information to its neighbors. One use case of
this mechanism is to advertise link/path information so that a receiving
router can better react to network changes.</t>



    </abstract>



  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t><xref target="I-D.wang-idr-next-next-hop-nodes"/> describes a scenario where better
load-balancing can be achieved in a CLOS network by considering the load
information on the next hop router in addition to considering the local
load information of the path to that next hop router.</t>

<t><xref target="I-D.liu-rtgwg-path-aware-remote-protection"/> describes another scenario
where link up/down information propagated via non-IGP mechanism can help with
faster reroute.</t>

<t><xref target="I-D.cheng-rtgwg-adaptive-routing-framework"/> describes a framework for 
Adaptive Routing which dynamically adjusts routing paths based on changes 
in global network conditions, thereby optimizing network performance and 
resource utilization.</t>

<t>To achieve that, a router needs to advertise some link/path information
independently of IGP. This document specifies a mechanism to do that.
It can also be used to advertise any information.</t>

<t>As described in <xref target="I-D.wang-idr-next-next-hop-nodes"/>, in a CLOS network the
advertisement only needs to be "link-local", i.e., a receiving router does not
need to re-advertise it further and the mechanism in this document does not
consider re-advertisement. In an arbitrary topology, to achieve coordinated
load-balancing the information may need to be advertised further
but that is outside the scope of this document.</t>

<t>In some scenarios, a large amount of information may need to be advertised,
and in some scenarios, the receiving router may not need to be directly
connected.</t>

<t>While an IGP, if used for the CLOS network, may also be used to advertise the
information using link-local flooding scope, it may not be a good fit when
the information needs to be advertised and processed very rapidly not for
routing purposes.</t>

<t>Therefore, UDP is chosen as the transport mechanism. An implementation may
advertise and process the UDP messages in the forwarding path for timely
responses.</t>

<t>This document does not suggest or restrict when and/or how frequently the
information is advertised - it is an operational consideration on how frequent
the advertisements need to be and whether the routers can handle that.</t>

<t>Fragmentation may be used if the delay related to the fragmentation/reassembly
is not a concern. Multiple UDP messages may be used to advertise pieces of
all the information, whether fragmentation is used or not.</t>

<t>This document/revision only specifies the message format. How the information
is maintained and used on the receiving router are outside the scope of this
document/revision but may be added in future revisions.</t>

<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"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

</section>
<section anchor="specification"><name>Specification</name>

<t>The message format is defined as follows:</t>

<figure><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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |        UDP source port        |   UDP destination port TBD1   |
  +-------------------------------+-------------------------------+
  |           UDP length          |          UDP Checksum         |
  +-----------------------------+-+-------------------------------+
  |Version|R|R|R|R|    Flags    |A|
  +---------------+-------------+-+-------------------------------+
  |   Auth Type   |   Auth Len    |           Auth Data ...       ~
  +---------------+---------------+-------------------------------+
  |                       Source Router ID                        |
  +---------------------------------------------------------------+
  |                            Link ID                            |
  +---------------------------------------------------------------+
  |                        (Repeated) TLVs                        ~
  ~                                                               |
  +---------------------------------------------------------------+
]]></artwork></figure>

<t>The IP destination address in the outer IP header is typically an IPv4
"All Routers on this Subnet" multicast address (referred to as a link-local
multicast address), an IPv6 Node-local All
Routers Address (multicast) <xref target="RFC4291"/>, a non-link/node-local multicast
address, or a local/remote unicast
address discovered by means outside the scope of this document.</t>

<t>The 4-bit Version field is for potential future extensions that cannot
be achieved through additional TLV types. The current version is 0.</t>

<t>The four R-bits are reserved - they MUST be 0 upon transmission and MUST
be ignored upon receiving.</t>

<t>The 1-octet Flags field currently has one A-flag defined. If it is set,
the (Auth Type, Auth Len, Auth Data) tuple immediately follows the Flags
field. If it is not set, the tuple is not present. The details of the
tuple are as specified in <xref target="RFC5880"/> and not repeated here.</t>


<t>When the flooding happens on a local link, the Link ID field identified
the flooding link. The value could be one of the following:</t>

<t><list style="symbols">
  <t>An IPv4 interface address advertised by OSPFv2/ISIS <xref target="RFC2328"/> <xref target="RFC1195"/></t>
  <t>An Interface ID advertised by OSPFv3 <xref target="RFC5340"/>, or by OSPFv2 for an unnumbered interface</t>
  <t>A Link Local Identifier advertised by OSPFv2/ISIS for GMPLS <xref target="RFC4203"/> <xref target="RFC5307"/></t>
</list></t>

<t>In this case, the destination address MUST be a link/node-local multicast
address or a receiver's unicast address on the local link and the TTL MUST be 1.
The source address MUST be the local interface address for a numbered interface,
or a loopback address in case of an unnumbered interface.</t>

<t>If the flooding is to one or more remote receivers, the Link ID MUST be set to
0, the destination address MUST be a remote unicast/multicast address,
the source address MUST be a loopback address, and the TTL MUST be set to
255, following the Generalized TTL Security Mechanism (GTSM) <xref target="RFC5082"/>.</t>

<t>The following TLVs are defined to allow maximum packing.
If additional information needs to be advertised, new TLVs may be defined
without using sub-TLVs to allow efficient encoding of additional information,
or with sub-TLVs to allow flexibility but at the cost of processing complexity.</t>

<section anchor="nbr"><name>Neighbor Path Information</name>

<t>This TLV is used when the path information is at per-neighbor level.</t>

<figure><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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   (Type) 1    |               Length          |S| Refresh Rate|
  +-------------------------------+-------------------------------+
  ~                   repeated per-Neighbor Records               |
  +---------------------------------------------------------------+
]]></artwork></figure>

<t>The Length field is two-octet.
The Value part starts with a one-octet Refresh Rate field, which is
followed by repeated per-Neighbor Records. The number of records
is derived from the Length field.</t>

<t>The Refresh Rate field's leftmost bit S denotes the unit of the rate. If it is
set, the rate is in deciseconds (100ms). If it is not set, the rate is in
milliseconds.</t>

<t>The per-Neighbor record has the following format:</t>

<figure><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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   Neighbor ID                                 |
  +---------------+-----------------------------------------------+
  | encoded info  |
  +---------------+
]]></artwork></figure>

<t>Neighbor ID: The 4-octet Neighbor ID identifies (the path to) a neighbor that is 
   discovered by means outside the scope of this document. It MAY be a BGP-ID described
   in <xref target="I-D.wang-idr-next-next-hop-nodes"/> or some other identifiers that are
   unique in the domain where the signaling is used. The neighbor can be reached
   via ECMP, e.g., a set of links but the nature is outside the scope of this
   document.</t>

<t>encoded info:  The 1-octet field following the 4-octet Neighbor ID field
   which encodes the information of the path to the neighbor.The following encoded info are defined:</t>

<figure><artwork><![CDATA[
   0 1 2 3 4 5 6 7
  +-+-+-+-+-+-+-+-+
  |R|R|R|U|Quality|
  +---------------+

  where:
        
  U-Flag:  State Flag. If it is set, the path to the neighbor is UP.
     If it is not set, the path to the neighbor is DOWN.

  The three R-bits:  Reserved. They MUST be 0 upon transmission and 
     MUST be ignored upon receiving.

  Quality Level: The 4-bit Quality field is used for path quality.
     The value range is from 0 to 15. 
     The quality level can be customized, with the lower the level, 
     the poorer the path quality. The quality level can be calculated
     based on the current bandwidth and the utilization of the 
     forwarding buffer. Bandwidth and buffer use a certain ratio
     to calculate the quality level. The exact method for 
     calculating the quality level is beyond the scope of this 
     document, but must ensure that the calculation rules are 
     consistent among the routers the information is flooded to/from.

     For instance, a 400G interface can be divided into sixteen 
     quality levels based on bandwidth utilization, with each level
     representing 25G of bandwidth usage. When the Quality level is 0,
     the available bandwidth is up to 25G. When the Quality Level
     is 15, the available bandwidth is up to 400G.
]]></artwork></figure>


</section>
<section anchor="link-information"><name>Link Information</name>

<t>This TLV is used when the information is at per-link level.</t>

<figure><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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   (Type) 3    |                   Length      |S| Refresh Rate|
  +---------------+-------------------------------+-+-------------+
  |              repeated per-link Records                        |
  +---------------------------------------------------------------+
]]></artwork></figure>

<t>The value part is repeated records of the following. The number of records
is derived from the Length field.</t>

<figure><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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        Link ID                                |
  +---------------+-----------------------------------------------+
  | encoded info  |
  +---------------+
]]></artwork></figure>

<t>The Link ID is as described earlier.</t>

<t>encoded info:  The 1-octet field following the 4-octet Link ID field
   which encodes the information of the link. It is encoded exactly
   the same as in the neighbor case.</t>

</section>
<section anchor="aging"><name>Refreshing and Aging</name>

<t>The sender MUST re-advertise the information when there is a change,
and MUST re-fresh previous advertisements at the advertised Refresh Rate
even when there is no change.</t>

<t>The receiver MUST age out the received information if it does not receive
a refresh within a period of three times of the refresh rate. Each time
an advertisement for a neighbor is received, the aging timer is reset
according to the latest Refresh Rate.</t>

<t>The sender MAY adjust the Refresh Rate on its own or based on notification
from a receiver (<xref target="negotiation"/>). For example, if the information does not
change often, a sender may move to a larger (slower) Refresh Rate.</t>

<t>The aging, refreshing and adjustment of the refresh rate are all at the
per-neighbor/link level. Neighbors/links whose Refresh Rates are the same
SHOULD be packed in the same TLV, but MAY be put into different TLVs and
messages due to MTU limitations and/or fragmentation concerns. Neighbors/links
whose Refresh Rates are different MUST be put into different TLVs.</t>

<t>The same information MAY be sent out of different links or
to different set of receivers with different rates.</t>

</section>
<section anchor="negotiation"><name>Refresh Rate Negotiation</name>

<t>A receiver SHOULD send notifications to the sender if it can not keep up with
the sender, using a Notification TLV of Type 4:</t>

<figure><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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   (Type) 4    |              Length           |     Value     ~
  +---------------+-------------------------------+---------------+
  ~                        (continued) Value                      |
  +---------------------------------------------------------------+
]]></artwork></figure>

<t>The Value part includes sub-TLVs, whose Types share the same space as the
top level TLVs.</t>

<t>When sending a notification to a remote node or from an unnumbered interface,
a loopback address MUST be used as the source address.
Otherwise, the local interface address SHOULD be used as the
source address. The destination address MUST be set to the source address
in the received flooding packet for which the notification is.</t>

<t>To notify the sender the desired Refresh Rate for a certain advertisement,
the corresponding TLV (e.g., the Neighbor Path Information TLV) is
included as a sub-TLV, and no per-Neighbor/Link records are included.
The Refresh Rate field along with the S-flag are set to indicate the
desired rate. The Length of the sub-TLV is set accordingly.
Other types of TLVs, e.g., this type-4 "Refresh Rate Notification" TLV
itself, MUST NOT be included as sub-TLVs.</t>

<t>While a typical physical link is point-to-point even in the Ethernet case,
there may be multiple receivers of an advertisement sent out of a link
(e.g., in the case of LAN) or sent to a group of remote receivers via
multicast. If multiple notifications
of Refresh Rate are received for an advertisement, the largest requested
rate MUST be used by the sender.</t>

<t>Consider that a router advertises to a link the information about some
neighbor/link set S1 at rate R1 and the information about some other
neighbor/link set S2 at rate R2 where R1 &lt; R2, i.e., the S2 information
is advertised less frequently. A receiver on the link sends back a
notification with rate R3 where R1 &lt; R3 &lt; R2. Then this router MUST
use R3 as the refresh rate for S1 and R2 as the refresh rate for S2.</t>


</section>
<section anchor="flow-redirection"><name>Flow Redirection</name>

<t>It may be desired for a router to request its upstream to redirect a specific
flow away from it. This is done via Flow Redirection TLV:</t>

<figure><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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   (Type) 6/7  |              Length           |S| Refresh Rate|
  +-------------------------------+-------------------------------+
  |    Protocol   |
  +-------------------------------+-------------------------------+
  |           Source Address (4 or 16 octets)                     ~
  +-------------------------------+-------------------------------+
  |           Destination Address (4 or 16 octets)                ~
  +-------------------------------+-------------------------------+
  |          Source Port          |      Destination Port         |         
  +-------------------------------+-------------------------------+
  |                Repeated 5-Tuple Information                   ~
  +-------------------------------+-------------------------------+
]]></artwork></figure>

<t>The Type is 6 for IPv4 flows or 7 for IPv6 flows. The Value field encodes
one or more 5-tuple records that identify flows by (Protocol, Source Address,
Destination Address, Source Port, Destination Port). The number of records
is derived from the Type and Length fields.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>Because the information may be flooded rapidly, potential Denial Of Service
(DOS) attack may happen. In the case of local flooding only, the attack needs
to happen from within the network, and in that case, other attacks may happen
as well and may be worse. In the case of remote flooding, GTSM <xref target="RFC5082"/>
and ingress filtering at the network boundary are used to reduce the risk.
Overall, this is expected to be used in a secure walled-garden network.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document requests IANA to allocate a UDP port number TBD1 from the
User Ports range of the Service Name and Transport Protocol Port Number
Registry.</t>

<t>This document requests IANA to create a Router Information TLV Type
registry with the following initial allocations:</t>

<figure><artwork><![CDATA[
  Type Value         Type Name
  ==========         =========
  0                  Reserved
  1                  Neighbor Path Information
  3                  Link Information
  4                  Notification
  6                  IPv4 Flow Redirection
  7                  IPv6 Flow Redirection
]]></artwork></figure>

</section>
<section anchor="acknowledgments"><name>Acknowledgments</name>

<t>The authors thank Jeffrey Haas and Michal Styszynski for their review,
comments and suggestions to make this document and solution more complete.</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>

&RFC2119;
&RFC8174;
&RFC4291;
&RFC5880;
&RFC5082;


    </references>

    <references title='Informative References'>

&I-D.wang-idr-next-next-hop-nodes;
&I-D.liu-rtgwg-path-aware-remote-protection;
&I-D.cheng-rtgwg-adaptive-routing-framework;
&RFC2328;
&RFC1195;
&RFC5340;
&RFC4203;
&RFC5307;


    </references>



  </back>


</rfc>

