<?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 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 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 RFC4205 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4205.xml">
]>

<?rfc comments="yes"?>

<rfc ipr="trust200902" docName="draft-zzhang-rtgwg-router-info-00" 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>

    <date year="2024" month="July" day="04"/>

    <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>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                            |
  +-------------------------------+-------------------------------+
  |                        Sequence Number                        |
  +-------------------------------+-------------------------------+
  |                        (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 transission 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="RFC4205"/></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
an appropriate value to ensure its delivery. The security consideration will
be added in a future revision of this document.</t>

<t>If the Sequence Number is zero, no acknowledgment is needed. If it is not
zero, an acknowledgment is requested (<xref target="ack"/>).</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="neighbor-path-information"><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>The 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>The 1-octet field following the 4-octet Neighbor ID field encodes the
information of the path to the neighbor. In this revision, only the value 0
is specified, indicating that the path is down. Other values may
be specified in future revisions for other information.</t>


</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>The 1-octet field following the Link ID field encodes the
information of the link. In this revision, only the value 0
is specified, indicating that the path is down. Other values may
be specified in future revisions for other information.</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, unless an acknowledgment is requested and
received.</t>

<t>When acknowledgment is not used,
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.</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="ack"><name>Acknowledgment</name>

<t>For a message flooded on a LAN or to a remote multicast address, its
acknowledgment is for further study and may be specified in a future revision.</t>

<t>If a received flooding has a non-zero Sequence Number, an acknowledgment
MUST be sent. An acknowledgment is a TLV with 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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   (Type) 5    |              Length           |
  +-------------------------------+-------------------------------+
  |                        Sequence Number                        |
  +-------------------------------+-------------------------------+
]]></artwork></figure>


<t>If the message which the acknowledgment is for has a link-local
unicast/multicast destination address on a numbered interface, the source
IP address of the acknowledgment message (that includes the Acknowledgment
TLV) MUST be set to the local address of the interface. Otherwise, it is MUST
be set to a loopback address of the acknowledgment sender. The destination
address of the acknowledgment MUST be set to the source address in the
received message which the acknowledgment is for.</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 otets)                      ~
  +-------------------------------+-------------------------------+
  |           Destination Address (4 or 16 otets)                 ~
  +-------------------------------+-------------------------------+
  |          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>To be added.</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
  5                  Acknowledgment
  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;


    </references>

    <references title='Informative References'>

&I-D.wang-idr-next-next-hop-nodes;
&I-D.liu-rtgwg-path-aware-remote-protection;
&RFC2328;
&RFC1195;
&RFC5340;
&RFC4203;
&RFC4205;


    </references>



  </back>

</rfc>

