RFC 8706
Restart Signaling for IS-IS
Restart Signaling for IS-IS ๐ฆ
Okay bestie, this is RFC 8706 ๐ It's from the Internet Engineering Task Force (IETF) and was written by L. Ginsberg and P. Wells at Cisco Systems, Inc. ๐ธ Here's the title block tea:
- Request for Comments: 8706
- Category: Standards Track (so it's the real deal, not a vibes-only doc) ๐
- Date: February 2020
- Obsoletes: 5306 (aka RFC 5306, which this one replaces) ๐
- ISSN: 2070-1721
Abstract โจ
Okay so the main idea is this: a restarting router can signal its neighbors that it's restarting ๐ฅ. Her neighbors can then reestablish their adjacencies with her without cycling through the DOWN state, and she still correctly starts database synchronization. Iconic ๐
It also describes a way for a router to signal its neighbors that it's preparing to restart while keeping its forwarding-plane state ๐ง. The neighbors keep their adjacencies until the router is back up, but they can still bring the adjacencies down if other topology changes happen. Not me being the responsible one ๐ญ
Then there's a mechanism for a restarting router to figure out when it has finished LSP (Link State Protocol Data Unit) database synchronization with its neighbors ๐ซถ. There's also a way to optimize LSP database sync while keeping transient routing disruption to a minimum when a router starts up ๐.
This document obsoletes RFC 5306. Bestie, that's the whole plot ๐
Status of This Memo ๐ท
This is an Internet Standards Track document.
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.
Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at https://www.rfc-editor.org/info/rfc8706.
Copyright Notice ๐
Copyright (c) 2020 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, since they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they're provided without warranty as described in the Simplified BSD License. Read the fine print, babe ๐
Table of Contents ๐
1. Overview
2. Conventions Used in This Document
2.1. Requirements Language
3. Approach
3.1. Timers
3.2. Restart TLV
3.2.1. Use of RR and RA Bits
3.2.2. Use of the SA Bit
3.2.3. Use of PR and PA Bits
3.3. Adjacency (Re)Acquisition
3.3.1. Adjacency Reacquisition during Restart
3.3.2. Adjacency Acquisition during Start
3.3.3. Multiple Levels
3.4. Database Synchronization
3.4.1. LSP Generation and Flooding and SPF Computation
4. State Tables
4.1. Running Router
4.2. Restarting Router
4.3. Starting Router
5. IANA Considerations
6. Security Considerations
7. Manageability Considerations
8. Normative References
Appendix A. Summary of Changes from RFC 5306
Acknowledgements
Authors' Addresses
1. Overview ๐ธ
The Intermediate System to Intermediate System (IS-IS) routing protocol [RFC1195] [ISO10589] is a link state intra-domain routing protocol. Normally, when an IS-IS router restarts, temporary disruption of routing happens because of events in both the restarting router and its neighbors. Honestly it's a whole chaos cycle ๐ญ
The router that restarted computes its own routes before it achieves database synchronization with its neighbors. The results of that computation are likely to be non-convergent with the routes computed by other routers in the area/domain. So she's doing her own thing and everyone else is like "wait, what?" ๐
Her neighbors detect the restart event and cycle their adjacencies with her through the DOWN state. That cycling makes the neighbors regenerate their LSPs describing the adjacency concerned, which then causes a temporary disruption of routes passing through the restarting router. It's giving domino effect ๐ซ
In certain scenarios, that temporary disruption is highly undesirable. This document describes mechanisms to avoid or minimize the disruption from both of these causes. Main character energy for stable routes ๐
When an adjacency is reinitialized because a neighbor restarted, a router does three things:
- It causes its own LSP(s) to be regenerated, which triggers Shortest Path First (SPF) runs throughout the area (or, for Level 2, throughout the domain). ๐ฅ
- It sets
SRMflagson its own LSP database on the adjacency concerned. ๐ง - In the case of a Point-to-Point link, it transmits a complete set of Complete Sequence Number PDUs (CSNPs) over the adjacency. ๐ฆ
For a restarting router process, the first of these is highly undesirable, but the second is essential to ensure synchronization of the LSP database. Bestie, the second one is the MVP ๐
The third action minimizes the number of LSPs that must be exchanged. If it's made reliable, it also gives a way to determine when the LSP databases of the neighboring routers have been synchronized. This is desirable whether or not the router is being restarted (so that the overload bit can be cleared in the router's own LSP, for example) ๐
This document describes a mechanism for a restarting router to signal to its neighbors that it's restarting. The mechanism further allows the neighbors to reestablish their adjacencies with the restarting router without cycling through the DOWN state, while still correctly initiating database synchronization. Slay ๐
This document also describes a mechanism for a restarting router to determine when it has achieved LSP database synchronization with its neighbors. It also has a mechanism to optimize LSP database synchronization and minimize transient routing disruption when a router starts. ๐
It is assumed that the three-way handshake [RFC5303] is being used on Point-to-Point circuits. Ngl, that's the setup you need first ๐ซถ
2. Conventions Used in This Document ๐ง
If the control and forwarding functions in a router can be maintained independently, it is possible for the forwarding function state to be maintained across a resumption of control function operations. This functionality is assumed when the terms "restart/restarting" are used in this document. ๐ฆ
The terms "start/starting" refer to a router where the control function has either commenced operations for the first time or has resumed operations, but the forwarding functions have not been maintained in a prior state. ๐ธ
The terms "(re)start/(re)starting" are used when the text applies to both a "starting" and a "restarting" router. ๐
The terms "normal IIH" or "IIH normal" refer to IS-IS Hellos (IIHs) in which the Restart TLV (defined later in this document) has no flags set. ๐
2.1. Requirements Language ๐
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 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. These are the official rule words, so only the all-caps ones count! ๐
3. Approach ๐
3.1. Timers โฐ
Three additional timers (T1, T2, and T3) are required to support the mechanisms defined in this document. Timers T1 and T2 are used by both a restarting router and a starting router. Timer T3 is used only by a restarting router. ๐
NOTE: These timers are NOT applicable to a router that is preparing to do a planned restart. ๐
An instance of the timer T1 is maintained per interface, and it indicates the time after which an unacknowledged (re)start attempt will be repeated. A typical value is 3 seconds. โฑ๏ธ
An instance of the timer T2 is maintained for each LSP database (LSPDB) present in the system. For example, for a Level 1/2 system, there will be an instance of T2 for Level 1 and an instance for Level 2. This is the maximum time that the system will wait for LSPDB synchronization. A typical value is 60 seconds. ๐ฅ
A single instance of the timer T3 is maintained for the entire system. It indicates the time after which the router will declare that it has failed to achieve database synchronization (by setting the overload bit in its own LSP). It's initialized to 65535 seconds, but it's set to the minimum of the remaining times of received IIHs that contain a Restart TLV with the Restart Acknowledgement (RA) set and an indication that the neighbor has an adjacency in the UP state to the restarting router. (See item a in Section 3.2.1.) Bestie, that's a lot of conditions, but the core idea is just "don't wait forever" ๐
3.2. Restart TLV ๐
okay so there's a brand new TLV that gets tucked into IIH PDUs โจ and it carries flags that pass info around during a (re)start ๐ฅ. Here's the tea: if a sender has no Restart TLV at all, that means it doesn't support any of the stuff in this doc ๐. So if your router supports ANY of this functionality, it MUST include this TLV in every IIH it sends ๐ซถ.
- Type:
211๐ - Length: the number of octets in the Value field, which is
1 to (3 + ID Length)๐ฆ - Value: the layout below ๐ธ
No. of octets
+-----------------------+
| Flags | 1
+-----------------------+
| Remaining Time | 2
+-----------------------+
| Restarting Neighbor ID| ID Length
+-----------------------+
Flags (1 octet) ๐
0 1 2 3 4 5 6 7
+--+--+--+--+--+--+--+--+
|Reserved|PA|PR|SA|RA|RR|
+--+--+--+--+--+--+--+--+
- RR - Restart Request ๐
- RA - Restart Acknowledgement ๐
- SA - Suppress adjacency advertisement ๐
- PR - Restart is planned ๐
- PA - Planned restart acknowledgement ๐
Remaining Time (2 octets) โฐ
This is the Remaining Holding Time, in seconds โจ. It's required when the RA, PR, or PA bit is set ๐ฅ. Otherwise, this field SHOULD be omitted when sent and MUST be ignored when received ๐.
Restarting Neighbor System ID (ID Length octets) ๐
This is the System ID of the neighbor that an RA/PA refers to ๐ซถ. It's required when the RA or PA bit is set ๐ฅ. Otherwise, this field SHOULD be omitted when sent and MUST be ignored when received ๐.
Lowkey important note ๐: really early draft versions of the restart functionality did NOT include the Restarting Neighbor System ID in the TLV ๐ญ. RFC 5306 allowed for interoperating with those legacy implementations by saying that a router expecting an RA on a LAN circuit should assume the acknowledgement is aimed at the local system if the TLV arrives with RA set and no Restarting Neighbor System ID ๐ง. Whether to keep accepting (on a LAN) a TLV with RA set and no Restarting Neighbor System ID is an implementation choice ๐. Just know that leaving out the Restarting Neighbor System ID only creates ambiguity when multiple systems on a LAN are restarting at the same time ๐.
The RR and SA flags are allowed to both be set in the TLV under the conditions described in Section 3.3.2 โจ. Every other combo with multiple flags set is invalid and MUST NOT be transmitted ๐ซ. Received TLVs with invalid flag combinations MUST be ignored ๐ .
3.2.1. Use of RR and RA Bits ๐ฆ
The RR bit is how a (re)starting router tells its neighbors that a (re)start is in progress ๐. It also says that an existing adjacency SHOULD be maintained even when the normal adjacency state machine would otherwise force it to reinitialize ๐. On top of that, it asks for a set of CSNPs and asks for SRMflags to be set ๐ซถ.
The RA bit gets sent by the neighbor of a (re)starting router to acknowledge a Restart TLV that has the RR bit set ๐.
When a neighbor of a (re)starting router gets an IIH with a Restart TLV that has the RR bit set, here's what happens ๐. If there's an adjacency in the UP state on this interface with the same System ID, and (for a LAN circuit) the same source LAN address, then it doesn't matter what else is in the "Intermediate System Neighbors" option (LAN circuits) or the "Point-to-Point Three-Way Adjacency" option (Point-to-Point circuits) โจ:
a. The adjacency state stays exactly as it is ๐ซง. If this is the first IIH with the RR bit set that this system has received for this adjacency, the adjacency gets marked as being in "Restart mode" and its Holding Time gets refreshed ๐. Otherwise, the Holding Time does NOT get refreshed ๐ . The Remaining Time sent under (b) below MUST reflect the actual time after which the adjacency will now expire โณ. Getting an IIH with the RR bit reset clears the "Restart mode" state ๐งน. This is the clever bit ๐ง : it lets the restarting router keep the neighbor from dropping the adjacency long enough for the restart to finish, while stopping repeated restarts from keeping an adjacency alive forever ๐ . Whether or not an adjacency is marked as being in "Restart mode" has no effect on adjacency state transitions ๐.
b. Right away (no waiting for any running timer to expire, but with a small random delay of a few tens of milliseconds on LANs to avoid "storms" ๐ช๏ธ), send an IIH over the matching interface that includes the Restart TLV with the RR bit clear and the RA bit set ๐จ. For Point-to-Point adjacencies, the "Point-to-Point Three-Way Adjacency" option gets updated first to reflect any new values received from the (re)starting router ๐. (This lets a restarting router quickly grab the right info to put in its hellos ๐ฏ.) The Remaining Time MUST be set to the current time (in seconds) before the holding timer on this adjacency is due to expire โฐ. If the interface is a LAN interface, the Restarting Neighbor System ID SHOULD be set to the System ID of the router the IIH with the RR bit set came from ๐ซถ. This is required so the acknowledgement and Holding Time get matched up correctly when multiple systems on a LAN restart at about the same time ๐ฏ. This IIH SHOULD be sent before any LSPs or SNPs that go out because of receiving the original IIH ๐ฆ.
c. If the interface is a Point-to-Point interface, OR if the receiving router has the highest LnRouterPriority (with the highest source Media Access Control (MAC) address breaking ties) among the routers it has an UP-state adjacency with on this interface whose IIHs contain the Restart TLV, then (leaving out adjacencies to all routers considered in "Restart mode") it starts sending a complete set of CSNPs over that interface and sets SRMflags on that interface for all LSPs in the local LSP database ๐. (Heads up: the actual Designated Intermediate System (DIS) is not changed by this process ๐ .)
Otherwise (aka if there was no UP-state adjacency with that System ID), the IIH gets processed as normal, meaning the adjacency gets reinitialized and the RA bit gets set in the IIH that comes back ๐.
3.2.2. Use of the SA Bit โจ
The SA bit is how a starting router asks its neighbor to stop advertising the adjacency to the starting router in the neighbor's LSPs ๐คซ.
A router that's starting has no maintained forwarding function state ๐ซง. This might or might not be the first time it's started ๐. If it's NOT the first time, copies of LSPs this router generated in its previous incarnation could still be in other routers' LSP databases ๐. Those copies will probably look "newer" than the LSPs the starting router first generated, because the starting router reinitialized its LSP fragment sequence numbers ๐ข. That can cause temporary blackholes ๐ณ๏ธ until the normal update process gets the starting router to regenerate and flood its own LSPs with higher sequence numbers ๐. Those temporary blackholes can be avoided if the starting router's neighbors suppress advertising an adjacency to it until it has managed to propagate newer versions of the LSPs from its previous incarnations ๐ฆ.
When a router gets an IIH with a Restart TLV that has the SA bit set, and there's an UP-state adjacency on this interface with the same System ID (and, for a LAN circuit, the same source LAN address), then the router MUST suppress advertising that adjacency to the neighbor in its own LSPs ๐. That suppression MUST continue until an IIH with the SA bit clear has been received ๐. If the adjacency moves to the UP state, the new adjacency MUST NOT be advertised until an IIH with the SA bit clear has been received ๐ซ.
Also, a router that suppresses advertising an adjacency MUST NOT use that adjacency when doing its SPF calculation ๐งฎ. Specifically, if an implementation follows the example guidelines in [ISO10589], Annex C.2.5, Step 0:b) "pre-load TENT with the local adjacency database", the suppressed adjacency MUST NOT be loaded into TENT ๐ .
3.2.3. Use of PR and PA Bits โจ
okay so the PR bit is the "hey bestie, I'm about to restart" signal ๐ฃ๐. A router that's planning a restart sets it on its IIHs to tell its neighbors what's coming, and it SHOULD set the Remaining Time to a value greater than the expected control-plane restart time ๐ฆ. The PR bit SHOULD remain set in IIHs until the restart is initiated ๐ .
The PA bit is the reply ๐ซถ. The neighbor of a router planning to restart sends it back to acknowledge that it got a Restart TLV with the PR bit set. Iconic energy ๐.
Now here's the neighbor's side of the story ๐ธ. When a neighbor gets an IIH with the Restart TLV having the PR bit set, it checks whether there's an adjacency on this interface that's in the UP state with the same System ID. If it's a LAN circuit, the source LAN address has to match too ๐. If all of that checks out, then:
a. If this is the first IIH with the PR bit set that this system has received for this adjacency, the adjacency gets marked as being in Planned Restart State, and the adjacency Holding Time gets refreshed ๐. Otherwise, the Holding Time is NOT refreshed ๐. The Holding Time SHOULD be set to the Remaining Time from the received IIH with PR set โฐ. The Remaining Time that gets sent out in step (b) MUST reflect the actual time after which the adjacency will now expire, so no fibbing about the clock ๐. Receipt of an IIH with the PR bit reset clears the Planned Restart State, and the receiving router sets the adjacency Holding Time back to the locally configured value ๐งน. This whole procedure lets the router planning a restart keep the neighbor holding on long enough for the restart to actually finish ๐ซถโจ. Being in Planned Restart State has no effect on adjacency state transitions, so it doesn't change how the adjacency moves between states ๐.
b. Immediately (no waiting for any running timer to expire ๐โโ๏ธ), the neighbor sends an IIH over the corresponding interface, including the Restart TLV with the PR bit clear and the PA bit set ๐ฆ. The Remaining Time MUST be set to the current time (in seconds) before the holding timer on this adjacency is due to expire โณ. On a LAN interface, the small random delay of a few tens of milliseconds is there to avoid "storms" ๐ช๏ธ. Also, if it's a LAN interface, the Restarting Neighbor System ID SHOULD be set to the System ID of the router the PR-set IIH came from ๐ฏ. This is REQUIRED to correctly match up the acknowledgement and Holding Time when multiple systems on a LAN are planning a restart at around the same time, so it's giving organized ๐๐.
NOTE: Getting an IIH with the PA bit set tells the router planning a restart that the neighbor knows about the plan. As long as there are no topology changes (more on that below), the neighbor will keep the adjacency for the Remaining Time in the IIH with PA set ๐ซถ.
By definition, a restarting router keeps its forwarding state across the control-plane restart (see Section 2) ๐ง . But during a control-plane restart, the restarting router is expected to be unable to respond to topology changes ๐ญ. So signaling a planned restart is useful, because it lets the neighbors figure out whether it's safe to keep the adjacency if other topology changes happen before the restart finishes ๐โจ. Signaling a planned restart when forwarding-plane state is NOT maintained is likely to cause serious traffic loss, so it MUST NOT be done ๐ซ๐.
Neighbors of a router that signaled a planned restart SHOULD keep the adjacency in Planned Restart State until one of three things happens, whichever comes first: they get an IIH with the RR bit set, they get an IIH with both PR and RR bits clear, or the adjacency Holding Time expires ๐ฐ๏ธ. Neighbors that don't follow the recommended behavior need to think hard about what it means for traffic delivery if they stop using the restarting router for forwarding during the restart period ๐ค๐ .
While the adjacency is in Planned Restart State, some or all of the following actions MAY be taken ๐ธ:
a. If additional topology changes happen, the adjacency in Planned Restart State MAY be brought down even though the Holding Time hasn't expired yet ๐ โโ๏ธ. The restarting neighbor isn't expected to update its forwarding plane in response to those changes (since it's restarting), so traffic going through that node is at risk of being forwarded improperly ๐ฌ. On a LAN circuit, if the router in Planned Restart State is the DIS at any supported level, the adjacency or adjacencies SHOULD be brought down whenever any LSP update is generated or received, so that a new DIS election gets triggered ๐ณ๏ธ. If you don't do this, the reliability of the update process on that circuit gets compromised ๐. What other criteria decide which topology changes trigger bringing the adjacency down is a local implementation decision ๐งโ๐ป.
b. If a Bidirectional Forwarding Detection (BFD) [RFC5880] Session to the neighbor that signals a planned restart is in the UP state and then goes DOWN, the event MAY be ignored, because it could be an expected side effect of the restart ๐. Considering the Control-Plane Independent state signaled in BFD control packets SHOULD be part of the decision to ignore a BFD Session DOWN event ๐.
c. On a Point-to-Point circuit, transmission of LSPs, CSNPs, and Partial Sequence Number PDUs (PSNPs) MAY be suppressed ๐คซ. It's expected that those PDUs won't be received anyway ๐ฆ.
Using the PR bit gives you a safe way to support restart periods that are significantly longer than standard Holding Times ๐โจ.
3.3. Adjacency (Re)Acquisition ๐ง
Adjacency (re)acquisition is the first step in (re)initialization ๐. Restarting and starting routers both make use of the RR bit in the Restart TLV, but they each use it at different stages of the (re)start procedure ๐.
3.3.1. Adjacency Reacquisition during Restart โจ
Okay so the restarting router basically pings its neighbor like "heyyy, we're reacquiring this adjacency, so you SHOULD NOT reinitialize it" ๐ซถ. It says this by setting the RR bit in the Restart TLV. When a neighbor gets an IIH with RR set in the Restart TLV, and there's already an adjacency in the UP state on that interface with the same System ID (and, for a LAN circuit, the same source LAN address too), then the procedures in Section 3.2.1 kick in ๐
.
A router that doesn't support the restart capability just ignores the Restart TLV, reinitializes the adjacency like normal, and sends back an IIH without the Restart TLV ๐.
When a router is restarting, it starts timer T3, starts timer T2 for each LSPDB, and for each interface (and for each level, if it's a LAN circuit) it starts timer T1 and sends out an IIH with the Restart TLV and RR set. Main character restart energy ๐.
On a Point-to-Point circuit, the restarting router SHOULD set Adjacency Three-Way State to Init. The reason is that getting back the acknowledging IIH (with RA set) MUST cause the adjacency to hop straight into UP ๐ฆ.
On a LAN circuit, the LAN-ID for the circuit SHOULD stay the same as before the restart. This matters a lot for any circuits where the restarting router was the DIS ๐ญ. Using a different LAN-ID would mean making a brand new set of pseudonode LSPs and updating every LSP on the LAN that points at them. Keeping the same LAN-ID across the restart stops all that churn ๐ง. Now, to let the restarting router figure out what LAN-ID it used before, the LAN-ID in an IIH with RR set MUST be ignored. Yes, ignored. Yes, that's the rule ๐.
Normal IIHs are held back until the conditions below are met (so nobody causes an unnecessary adjacency initialization ๐ธ). When T1 expires, it gets restarted and the IIH goes out again, same as above.
When a restarting router receives an IIH, a local adjacency gets set up like usual. If that IIH has the Restart TLV with RA set (and, on LAN circuits, a Restart Neighbor System ID that matches the local system), the router notes that it got the acknowledgement over that interface. If RA is set and the remote adjacency is UP, then timer T3 gets set to the minimum of its current value and the value in the Remaining Time field of the received IIH โจ.
On a Point-to-Point link, getting an IIH without the Restart TLV also counts as an acknowledgement, because it tells you the neighbor isn't restart capable ๐. BUT, since no CSNP is guaranteed to show up over this interface, T1 gets canceled right away without waiting for a full set of CSNPs. That means sync can be called complete even if some LSPs are only held by this neighbor (see Section 3.4). So the restarting router wants to be extra sure the neighbor reinitializes, so the SRMflags get set in its database and eventual LSPDB synchronization is guaranteed ๐ฅ. That's guaranteed to happen EXCEPT when the Adjacency Three-Way State in the received IIH is UP and the Neighbor Extended Local Circuit ID matches the Extended Local Circuit ID the restarting router assigned. In that case, the restarting router MUST force the adjacency to reinitialize by setting its local Adjacency Three-Way State to DOWN and sending a normal IIH. Not optional, bestie ๐.
On a LAN interface, getting an IIH without the Restart TLV is no big deal, because sync can still happen as long as at least one of the non-restarting neighbors on the LAN supports restart. So T1 keeps running ๐. If none of the neighbors on the LAN are restart capable, T1 will eventually expire after the locally defined number of retries.
On a Point-to-Point circuit, the LocalCircuitID and Extended Local Circuit ID info in the IIH can be used immediately to build an IIH with the right three-way handshake info โญ. If there's Neighbor Extended Local Circuit ID info that doesn't match what the local system is currently using, it gets ignored (because that IIH might have been sent before the neighbor got the new value from the restarting router ๐). The adjacency just stays in the initializing state until the correct info shows up.
On a LAN circuit, the source neighbor info (like the SNPAAddress) gets recorded and used for adjacency establishment and maintenance as usual ๐ฆ.
When BOTH a complete set of CSNPs (for each active level, if it's a Point-to-Point circuit) AND an acknowledgement have come in over the interface, T1 gets canceled ๐.
Once T1 is canceled, the later IIHs go out according to the normal algorithms, but they still include the Restart TLV, just with both RR and RA clear ๐.
If a LAN has a mix of systems, where only some of them support the new algorithm, database synchronization is still guaranteed. But the "old" systems will have reinitialized their adjacencies ๐ซ .
Now here's a sneaky one. If an interface is active but there's no neighboring router reachable over it, T1 would literally never get canceled. And according to Section 3.4.1.1, the SPF would never run ๐. So T1 gets canceled after some predetermined number of expirations (which MAY be 1). Problem solved, babe โจ.
3.3.2. Adjacency Acquisition during Start ๐ธ
So the starting router wants to make sure that if a neighbor still has an UP adjacency to it from an earlier version of itself, that old adjacency gets reinitialized ๐ง. It also wants its neighbors to hold off on advertising an adjacency to it until LSP database sync is done. To do this, it sends IIHs with RR clear and SA set in the Restart TLV. RR stays clear and SA stays set in every IIH after that, until the adjacency hits UP and the initial T1 interval (more on that below) has expired ๐
.
When a neighbor gets an IIH with RR clear, it runs the normal adjacency state machine. That's what makes sure any old adjacency on the neighboring router gets reinitialized ๐ซถ.
When an IIH with SA set shows up, the behavior in Section 3.2.2 is followed ๐.
When a router starts up, it starts timer T2 for each LSPDB ๐.
For each interface (and for each level, on a LAN circuit), once an adjacency reaches UP, the starting router starts timer T1 and sends an IIH with the Restart TLV having RR clear and SA set. When T1 expires, it gets restarted and the IIH goes out again, this time with both RR and SA set. Only the RR bit has changed from the earlier IIHs ๐.
When an IIH arrives with RR set (whether or not SA is set too), the behavior in Section 3.2.1 is followed ๐ฅ.
If the starting router gets an IIH that has the Restart TLV with RA set (and, on LAN circuits, a Restart Neighbor System ID matching the local system), it notes that it got the acknowledgement over that interface ๐ฆ.
On a Point-to-Point link, an IIH without the Restart TLV also counts as an acknowledgement, since it means the neighbor isn't restart capable ๐. Since that neighbor will have reinitialized the adjacency, the SRMflags are guaranteed to be set in its database, so eventual LSPDB synchronization is ensured โจ. BUT, because no CSNP is guaranteed to come in over this interface, T1 gets canceled right away without waiting for a complete set of CSNPs. So sync can be deemed complete even though some LSPs are only held by this neighbor (see Section 3.4) ๐.
On a LAN interface, getting an IIH without the Restart TLV is also no big deal, since sync can still happen as long as at least one of the non-restarting neighbors on the LAN supports restart. So T1 keeps running ๐. If none of the neighbors on the LAN are restart capable, T1 will eventually expire after the locally defined number of retries. The usual update process will make sure sync is eventually achieved ๐.
When BOTH a complete set of CSNPs (for each active level, if it's a Point-to-Point circuit) AND an acknowledgement have come in over the interface, T1 gets canceled. After that, the starting router's IIHs have RR and RA clear and SA set in the Restart TLV ๐ซถ.
T1 also gets canceled after some predetermined number of expirations (which MAY be 1) โญ.
When the T2 timer(s) get canceled or expire, the "normal IIHs" start going out ๐.
3.3.3. Multiple Levels ๐
A router that's operating as both a Level 1 and a Level 2 router on a particular interface MUST do all of the above for each level. Both levels, no skipping ๐ .
On a LAN interface, it MUST send and receive both Level 1 and Level 2 IIHs, and it MUST do the CSNP synchronizations independently for each level ๐ง.
On a Point-to-Point interface, only a single IIH is needed (one that says it supports both levels ๐ฆ). But the router still MUST do the CSNP synchronizations independently for each level ๐ญ.
3.4. Database Synchronization ๐ซถ
Okay so when a router gets started or restarted, it can totally expect to receive a complete set of CSNPs over each interface โจ. This is guaranteed now because an IIH with the RR bit set keeps getting retransmitted until the CSNP(s) are correctly received ๐ .
The CSNPs describe the set of LSPs that each neighbor is currently holding ๐ฆ. Synchronization is complete once all of those LSPs have been received ๐.
When (re)starting, a router starts an instance of timer T2 for each LSPDB, as described in Section 3.3.1 or Section 3.3.2 ๐ง. On top of the normal CSNP processing, it records the set of LSPIDs in the first complete set of CSNPs received over each interface, along with their remaining lifetime ๐. Bestie, on a LAN interface, a complete set of CSNPs MUST consist of CSNPs received from neighbors that are not restarting ๐. If the (re)starting router has multiple interfaces, the recorded set is the union of what came in over each one ๐. LSPs with a remaining lifetime of zero are NOT so recorded ๐.
As LSPs come in through the normal update process over any interface, their LSPID entry gets removed. It also gets removed if an LSP shows up before the CSNP that references it ๐ธ. When an LSPID has sat in the list for its indicated remaining lifetime, it's removed from the list too โณ. Once the list of LSPIDs is empty and timer T1 has been canceled on every interface that has an adjacency at this level, timer T2 gets canceled ๐.
At this point the local database is guaranteed to contain all the LSP(s) that were in the neighbors' databases at the time of (re)starting, either with the same sequence number or a more recent one ๐ฅ. LSPs that arrived in a neighbor's database after the time of (re)starting may or may not be there, but the normal operation of the update process will guarantee that they eventually get received ๐. At this point, the local database is deemed "synchronized" โจ.
Since LSPs mentioned in the CSNP(s) with a zero remaining lifetime are not recorded, and those with a short remaining lifetime get deleted from the list when their lifetime expires, canceling timer T2 can't be blocked by waiting for an LSP that will never arrive ๐.
3.4.1. LSP Generation and Flooding and SPF Computation ๐
The operation of a router starting is somewhat different from a router restarting, so these two cases get their own sections below ๐งธ.
3.4.1.1. Restarting ๐
To avoid causing unnecessary routing churn in other routers, it is highly desirable that the restarting router's own LSPs are the same as the ones previously present in the network (assuming nothing else changed) ๐. It's important not to regenerate and flood the LSPs until all the adjacencies have been reestablished and any information needed for propagation into the local LSPs is fully available โฐ. Ideally, that information gets loaded into the LSPs in a deterministic way, so the same information lands in the same place in the same LSP and the LSPs come out identical to their previous versions ๐ช. If that's achieved, the new versions may not even cause SPF to run on other systems โจ. Even so, as long as the same information is included in the set of LSPs (even in a different order, or split across different LSPs), the SPF result will be the same and won't churn the forwarding tables ๐ฆ.
In the case of a restarting router, none of the router's own LSPs are transmitted, and the router's own forwarding tables don't get updated while timer T3 is running ๐ โโ๏ธ.
Redistribution of inter-level information MUST be regenerated before this router's LSP is flooded to other nodes ๐. That's why the Level-n non-pseudonode LSP(s) MUST NOT be flooded until the other level's T2 timer has expired and its SPF has run ๐ . This makes sure any inter-level information that needs propagating can be included in the Level-n LSP(s) ๐ซง.
During this period, if one of the router's own LSPs (pseudonodes included) is received and the local router doesn't currently have it in its own database, it is NOT purged ๐ญ. Normally this LSP would get purged, since it clearly shouldn't be in the global LSP database ๐๏ธ. But in these circumstances, purging would be really bad, because it could cause a premature removal of a router's own LSP, and that means churn in remote routers ๐. Even if the local system has one or more of the router's own LSPs (ones it generated but hasn't transmitted yet), it's still not valid to compare the received LSP against that set ๐. That's because propagation between Level 1 and Level 2 (or vice versa) might mean a further router's own LSP needs generating once the LSP databases have synchronized ๐.
During this period, a restarting router SHOULD send CSNPs the way it normally would ๐จ. Information about the router's own LSPs MAY be included, but if it is, it MUST be based on LSPs that have been received, not on versions that were generated but not yet transmitted ๐. This restriction is needed to prevent premature removal of an LSP from the global LSP database ๐ก๏ธ.
When timer T2 expires or gets canceled, meaning synchronization for that level is complete, the SPF for that level runs to derive any information that needs propagating to another level ๐ง . The forwarding tables aren't updated yet though ๐.
Once the other level's SPF has run and any inter-level propagation is resolved, the router's own LSPs can be generated and flooded ๐. Any own LSPs that were previously ignored, but aren't part of the current set of own LSPs (pseudonodes included), MUST then be purged ๐งน. It's possible a Designated Router change happened in the meantime, so the router SHOULD purge the pseudonode LSPs it previously owned that are no longer part of its set of pseudonode LSPs ๐ซถ.
When all the T2 timers have expired or been canceled, timer T3 is canceled and the local forwarding tables get updated ๐.
If timer T3 expires before all the T2 timers have expired or been canceled, the synchronization process is taking longer than the minimum Holding Time of the neighbors ๐ข. In that case, the router's own LSP(s) for levels that haven't finished their first SPF computation are flooded with the overload bit set, to signal that the router's LSPDB isn't synchronized yet, so other routers MUST NOT compute routes through this router ๐ง. Normal operation of the update process resumes and the local forwarding tables get updated ๐. To stop the neighbors' adjacencies from expiring, IIHs with the normal interface value for the Holding Time are transmitted over all interfaces, with neither RR nor RA set in the Restart TLV ๐. That makes the neighbors refresh their adjacencies ๐ฅฐ. The router's own LSP(s) keep the overload bit set until timer T2 has expired or been canceled ๐.
3.4.1.2. Starting ๐ฑ
For a starting router, as soon as each adjacency is established, and before any CSNP exchanges, the router's own zeroth LSP is transmitted with the overload bit set ๐. This stops other routers from computing routes through it until it has reliably acquired the complete set of LSPs ๐. The overload bit stays set in later transmissions of the zeroth LSP (which can happen if an earlier copy of the router's own zeroth LSP is still in the network) while any timer T2 is running ๐ซง.
When all the T2 timers have been canceled, the router's own LSP(s) MAY be regenerated with the overload bit clear, assuming the router isn't actually overloaded and there's no other reason, like incomplete BGP convergence, to keep the bit set ๐ท. Then they get flooded as normal ๐ซ.
Other LSPs owned by this router (pseudonodes included) are generated and flooded as normal, no matter what timer T2 is doing ๐. The SPF also runs as normal, and the Routing Information Base (RIB) and Forwarding Information Base (FIB) get updated as routes become available ๐.
To avoid the possible formation of temporary blackholes, the starting router sets the SA bit in the Restart TLV (as described in Section 3.3.2) in all the IIHs it sends ๐ณ๏ธ๐ซ.
When all T2 timers have been canceled, the starting router MUST transmit IIHs with the SA bit clear ๐.
4. State Tables ๐งฉ
This section presents state tables that sum up the behaviors described in this document ๐. Other behaviors, particularly adjacency state transitions and LSP database update operations, are NOT included in the state tables, except where this document modifies behaviors described in [ISO10589] and [RFC5303] ๐.
The states named in the columns of the tables below are a mix of states specific to a single adjacency (ADJ suppressed, ADJ Seen RA, ADJ Seen CSNP) and states that reflect the state of the protocol instance (Running, Restarting, Starting, SPF Wait) ๐.
Three state tables are presented, from the point of view of a running router, a restarting router, and a starting router ๐.
4.1. Running Router โจ
okay so this is the running router table ๐ it's basically the rulebook for what a router does once it's fully up and running. it lists the events it can get and exactly what it does about each one ๐
+--------+-------------------------------------------+--------------+
| Event | Running | ADJ |
| | | suppressed |
+========+===========================================+==============+
| RX PR | Set Planned Restart State | |
| | Update Holding Time | |
| | Send PA | |
+--------+-------------------------------------------+--------------+
| RX PR | Clear Planned Restart State | |
| clr | Restore Holding Time to local value | |
| and RR | | |
| clr | | |
+--------+-------------------------------------------+--------------+
| RX RR | Maintain ADJ State | |
| | Send RA | |
| | Set SRM, send CSNP (Note 1) | |
| | Update Holding Time, | |
| | set Restart Mode (Note 2) | |
+--------+-------------------------------------------+--------------+
| RX RR | Clr Restart mode | |
| clr | | |
+--------+-------------------------------------------+--------------+
| RX SA | Suppress IS neighbor TLV in LSP(s) | |
| | Goto ADJ Suppressed | |
+--------+-------------------------------------------+--------------+
| RX SA | | Unsuppress |
| clr | | IS neighbor |
| | | TLV in |
| | | LSP(s) |
| | | Goto Running |
+--------+-------------------------------------------+--------------+
Table 1: Running Router
Note 1: CSNPs are sent by routers in accordance with item c in Section 3.2.1
Note 2: If Restart Mode clear
4.2. Restarting Router ๐ฆ
this one's for the router that's coming back from a restart, and it's giving a whole choreography ๐ง it tracks what happens to its planned restart, its T1, T2 and T3 timers, and its SPF Wait state, with the ADJ columns showing what it has or hasn't seen yet ๐
+----------+-----------------+---------+---------+------------------+
| Event | Restarting | ADJ | ADJ | SPF Wait |
| | | Seen RA | Seen | |
| | | | CSNP | |
+==========+=================+=========+=========+==================+
| Restart | Send PR | | | |
| planned | | | | |
+----------+-----------------+---------+---------+------------------+
| Planned | Send PR clr | | | |
| restart | | | | |
| canceled | | | | |
+----------+-----------------+---------+---------+------------------+
| RX PA | Proceed with | | | |
| | planned restart | | | |
+----------+-----------------+---------+---------+------------------+
| Router | Send IIH/RR | | | |
| restarts | ADJ Init | | | |
| | Start T1, T2, | | | |
| | T3 | | | |
+----------+-----------------+---------+---------+------------------+
| RX RR | Send RA | | | |
+----------+-----------------+---------+---------+------------------+
| RX RA | Adjust T3 | | Cancel | |
| | Goto ADJ Seen | | T1 | |
| | RA | | Adjust | |
| | | | T3 | |
+----------+-----------------+---------+---------+------------------+
| RX CSNP | Goto ADJ Seen | Cancel | | |
| set | CSNP | T1 | | |
+----------+-----------------+---------+---------+------------------+
| RX IIH | Cancel T1 | | | |
| w/o | (Point-to-point | | | |
| Restart | only) | | | |
| TLV | | | | |
+----------+-----------------+---------+---------+------------------+
| T1 | Send IIH/RR | Send | Send | |
| expires | Restart T1 | IIH/RR | IIH/RR | |
| | | Restart | Restart | |
| | | T1 | T1 | |
+----------+-----------------+---------+---------+------------------+
| T1 | Send IIH/normal | Send | Send | |
| expires | | IIH/ | IIH/ | |
| nth time | | normal | normal | |
+----------+-----------------+---------+---------+------------------+
| T2 | Trigger SPF | | | |
| expires | Goto SPF Wait | | | |
+----------+-----------------+---------+---------+------------------+
| T3 | Set overload | | | |
| expires | bit | | | |
| | Flood local | | | |
| | LSPs | | | |
| | Update fwd | | | |
| | plane | | | |
+----------+-----------------+---------+---------+------------------+
| LSP DB | Cancel T2 and | | | |
| Sync | T3 | | | |
| | Trigger SPF | | | |
| | Goto SPF wait | | | |
+----------+-----------------+---------+---------+------------------+
| All SPF | | | | Clear overload |
| done | | | | bit |
| | | | | Update fwd |
| | | | | plane |
| | | | | Flood local |
| | | | | LSPs |
| | | | | Goto Running |
+----------+-----------------+---------+---------+------------------+
Table 2: Restarting Router
4.3. Starting Router ๐ธ
and last but not least, the starting router table ๐ this is the one for a router that's just booting up for the first time, showing the events it gets, what it sends, and which timers it starts, cancels or handles when it finally hits Running ๐ซถ
+-------------+---------------------------+------------+------------+
| Event | Starting | ADJ Seen | ADJ Seen |
| | | RA | CSNP |
+=============+===========================+============+============+
| Router | Send IIH/SA | | |
| starts | Start T1 and T2 | | |
+-------------+---------------------------+------------+------------+
| RX RR | Send RA | | |
+-------------+---------------------------+------------+------------+
| RX RA | Goto ADJ Seen RA | | Cancel T1 |
+-------------+---------------------------+------------+------------+
| RX CSNP Set | Goto ADJ Seen CSNP | Cancel T1 | |
+-------------+---------------------------+------------+------------+
| RX IIH w no | Cancel T1 (Point-to- | | |
| Restart TLV | Point only) | | |
+-------------+---------------------------+------------+------------+
| ADJ UP | Start T1 | | |
| | Send local LSPs with | | |
| | overload bit set | | |
+-------------+---------------------------+------------+------------+
| T1 expires | Send IIH/RR and SA | Send IIH/ | Send IIH/ |
| | Restart T1 | RR and SA | RR and SA |
| | | Restart T1 | Restart T1 |
+-------------+---------------------------+------------+------------+
| T1 expires | Send IIH/SA | Send IIH/ | Send IIH/ |
| nth time | | SA | SA |
+-------------+---------------------------+------------+------------+
| T2 expires | Clear overload bit | | |
| | Send IIH normal | | |
| | Goto Running | | |
+-------------+---------------------------+------------+------------+
| LSP DB Sync | Cancel T2 | | |
| | Clear overload bit | | |
| | Send IIH normal | | |
+-------------+---------------------------+------------+------------+
Table 3: Starting Router
5. IANA Considerations ๐
okay this part is for the IANA folks ๐ this doc defines one IS-IS TLV, and it gets its very own spot in the "IS-IS TLV Codepoints" registry ๐ here's the info for it:
+------+-------------+-----+-----+-----+-------+
| Type | Description | IIH | LSP | SNP | Purge |
+======+=============+=====+=====+=====+=======+
| 211 | Restart TLV | y | n | n | n |
+------+-------------+-----+-----+-----+-------+
Table 4
IANA has updated the entry in registry to point to this document. โจ
6. Security Considerations ๐
okay bestie, this is the spicy part ๐ถ๏ธ Any new security issues from these procedures depend on whether an attacker can inject a false but apparently valid IIH. The ease or difficulty of doing that hasn't changed at all, so nothing new is unlocked here ๐ซถ
If the RR bit is set in a false IIH, neighbors who get it will keep their existing adjacency in the UP state and may (re)send a complete set of CSNPs. Resending is kinda wasteful ๐ but neither action breaks correct protocol operation, so it's a vibe, not a disaster โจ
If the RA bit is set in a false IIH, a (re)starting router that receives it might falsely believe there's a neighbor on that interface that supports these procedures ๐ญ Without a complete set of CSNPs on that interface, this could delay finishing the (re)start, because timer T1 has to run out to the locally defined maximum number of retries. This is the same thing that happens on a LAN where none of the (re)starting router's neighbors support these procedures, and it's covered in Sections 3.3.1 and 3.3.2 ๐
If the SA bit is set in a false IIH, it could suppress the advertisement of an IS neighbor ๐ฅบ That suppression could last forever, or pop in and out. The result could be lost reachability to some destinations and/or more frequent LSP flooding and SPF calculation. Not a cute outcome ๐
If the PR bit is set in a false IIH, neighbors who receive it could change the Holding Time of an existing adjacency when they shouldn't. If the topology changes, the neighbor might also decide not to flood the updates, and/or bring the adjacency down because it wrongly thinks the router that sent the false IIH isn't processing topology changes in its forwarding plane. Result? Unnecessary forwarding disruption, and nobody wants that ๐ค
If the PA bit is set in a false IIH, a router that receives it might falsely believe the neighbor on that interface supports the planned restart procedures defined here ๐ซ If that router is planning a restart, it could go ahead and start restarting, expecting the neighbor to have updated its Holding Time like it was asked to. This may cause the neighbor to bring the adjacency down while the receiving router is restarting, which means unnecessary forwarding disruption again ๐ฉ
Spoofing is the real villain here. The possibility of IS-IS PDU spoofing can be reduced by using authentication, as described in [RFC1195] and [ISO10589], and especially by using cryptographic authentication, as described in [RFC5304] and [RFC5310]. Lock that down, bestie ๐โจ
7. Manageability Considerations ๐ง
Okay, so these extensions have been designed, developed, and deployed for many years ๐ธ Going through this standardization process doesn't add any new impact on how IS-IS is managed and operated. Easy breezy ๐
8. Normative References ๐
Here's the reading list, copied exactly so nothing gets lost in translation ๐
[ISO10589] International Organization for Standardization,
"Information technology -- Telecommunications and
information exchange between systems -- Intermediate
System to Intermediate System intra-domain routeing
information exchange protocol for use in conjunction with
the protocol for providing the connectionless-mode network
service (ISO 8473)", ISO/IEC 10589:2002, Second Edition,
November 2002.
[RFC1195] Callon, R., "Use of OSI IS-IS for routing in TCP/IP and
dual environments", RFC 1195, DOI 10.17487/RFC1195,
December 1990, <https://www.rfc-editor.org/info/rfc1195>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC5303] Katz, D., Saluja, R., and D. Eastlake 3rd, "Three-Way
Handshake for IS-IS Point-to-Point Adjacencies", RFC 5303,
DOI 10.17487/RFC5303, October 2008,
<https://www.rfc-editor.org/info/rfc5303>.
[RFC5304] Li, T. and R. Atkinson, "IS-IS Cryptographic
Authentication", RFC 5304, DOI 10.17487/RFC5304, October
2008, <https://www.rfc-editor.org/info/rfc5304>.
[RFC5310] Bhatia, M., Manral, V., Li, T., Atkinson, R., White, R.,
and M. Fanto, "IS-IS Generic Cryptographic
Authentication", RFC 5310, DOI 10.17487/RFC5310, February
2009, <https://www.rfc-editor.org/info/rfc5310>.
[RFC5880] Katz, D. and D. Ward, "Bidirectional Forwarding Detection
(BFD)", RFC 5880, DOI 10.17487/RFC5880, June 2010,
<https://www.rfc-editor.org/info/rfc5880>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
Appendix A. Summary of Changes from RFC 5306 ๐ฆ
Okay so this document extends RFC 5306 by adding support for telling a restarting router's neighbors that a planned restart is about to happen ๐ That way the neighbors know what state the restarting router is in, and they can act properly if other topology changes pop up while the planned restart is still going. The restarting router's forwarding plane is still based on the pre-restart state of the network, so extra topology changes mean traffic could get lost if paths through the restarting router keep being used during the restart. Yikes ๐ฌ
To make this work, two new flags were added:
- PR - Restart is planned
- PA - Planned restart acknowledgement
The post-restart exchange between the restarting router and its neighbors didn't change at all, so that part is exactly the same as before โจ
Acknowledgements ๐
For RFC 5306, the authors thanked Jeff Parker, Radia Perlman, Mark Schaefer, Naiming Shen, Nischal Sheth, Russ White, and Rena Yang ๐ซถ The authors of this updated document also thanked Mike Shand, coauthor of RFC 5306. Legends, all of them ๐
Authors' Addresses ๐๏ธ
Les Ginsberg
Cisco Systems, Inc.
Email: ginsberg@cisco.com
Paul Wells
Cisco Systems, Inc.
Email: pauwells@cisco.com
And that's a wrap on RFC 8706, bestie!! ๐โจ๐
๐ฆ where this page comes from
- ietf: rfc8706 2020-02
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms